void test_split_layers() { printf("test_split_layer\n"); int i; layers_t *l = make_layers(2); alloc_layers(l, 5, 10); for(i=0; i < l->len; i++) { stripe_set_inc(l->layers[i]->stripes[0], 0.0); } dump_layers(l); split_layers(l, 2); dump_layers(l); merge_layers(l); dump_layers(l); free_layers(l); }
static void dump_layers(const SkLayer* layer, int tab = 0) { SkMatrix matrix; SkString matrixStr; layer->getLocalTransform(&matrix); matrix.toDumpString(&matrixStr); for (int j = 0; j < tab; j++) { SkDebugf(" "); } SkDebugf("layer=%p parent=%p size=[%g %g] transform=%s\n", layer, layer->getParent(), layer->getWidth(), layer->getHeight(), matrixStr.c_str()); for (int i = 0; i < layer->countChildren(); i++) { dump_layers(layer->getChild(i), tab + 4); } }
// test drawing with strips of fading gradient above and below static void test_fade(SkCanvas* canvas) { SkAutoCanvasRestore ar(canvas, true); SkRect r; SkPaint p; p.setAlpha(0x88); SkAutoCanvasRestore(canvas, false); // create the layers r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100)); canvas->clipRect(r); r.fBottom = SkIntToScalar(20); canvas->saveLayer(&r, NULL, (SkCanvas::SaveFlags)(SkCanvas::kHasAlphaLayer_SaveFlag | SkCanvas::kFullColorLayer_SaveFlag)); r.fTop = SkIntToScalar(80); r.fBottom = SkIntToScalar(100); canvas->saveLayer(&r, NULL, (SkCanvas::SaveFlags)(SkCanvas::kHasAlphaLayer_SaveFlag | SkCanvas::kFullColorLayer_SaveFlag)); // now draw the "content" if (true) { r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100)); canvas->saveLayerAlpha(&r, 0x80); SkPaint p; p.setColor(SK_ColorRED); p.setAntiAlias(true); canvas->drawOval(r, p); dump_layers("inside layer alpha", canvas); canvas->restore(); } else { r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100)); SkPaint p; p.setColor(SK_ColorRED); p.setAntiAlias(true); canvas->drawOval(r, p); } // return; dump_layers("outside layer alpha", canvas); // now apply an effect SkPaint paint; make_paint(&paint); r.set(0, 0, SkIntToScalar(100), SkIntToScalar(20)); // SkDebugf("--------- draw top grad\n"); canvas->drawRect(r, paint); SkMatrix m; SkShader* s = paint.getShader(); m.setScale(SK_Scalar1, -SK_Scalar1); m.postTranslate(0, SkIntToScalar(100)); s->setLocalMatrix(m); r.fTop = SkIntToScalar(80); r.fBottom = SkIntToScalar(100); // SkDebugf("--------- draw bot grad\n"); canvas->drawRect(r, paint); }