From d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5 Mon Sep 17 00:00:00 2001 From: Xavier Ducrohet Date: Tue, 21 Dec 2010 06:20:28 -0800 Subject: LayoutLib: support for layers. Layers require that drawing methods potentially draw in more than one bitmaps. To handle this this patch offers the following: - move all drawing methods to use Drawable - Drawables are now handled by GcSnapshot since its the one handling the layers - moved Canvas_Delegate.createCustomGraphics to GcSnapshot which does not expose the Graphics2D objects anymore so its draw() methods are the only way to draw. - handles creating layers in GcSnapshot.save() and blitting them in restore() Other changes: - Clean up the create/save API in GcSnapshot - Fixed drawing bitmaps with alpha and other composite modes. Change-Id: I1e230087493d044a10de71f4b6d29083e3f3bf64 --- tests/HwAccelerationTest/res/layout/_layers.xml | 6 ++++++ tests/HwAccelerationTest/res/layout/_newlayers.xml | 6 ++++++ .../src/com/android/test/hwui/LayersActivity.java | 24 +++++++++++----------- .../com/android/test/hwui/NewLayersActivity.java | 6 +++--- 4 files changed, 27 insertions(+), 15 deletions(-) create mode 100644 tests/HwAccelerationTest/res/layout/_layers.xml create mode 100644 tests/HwAccelerationTest/res/layout/_newlayers.xml (limited to 'tests/HwAccelerationTest') diff --git a/tests/HwAccelerationTest/res/layout/_layers.xml b/tests/HwAccelerationTest/res/layout/_layers.xml new file mode 100644 index 0000000..c2b186d --- /dev/null +++ b/tests/HwAccelerationTest/res/layout/_layers.xml @@ -0,0 +1,6 @@ + + + diff --git a/tests/HwAccelerationTest/res/layout/_newlayers.xml b/tests/HwAccelerationTest/res/layout/_newlayers.xml new file mode 100644 index 0000000..062a2e1 --- /dev/null +++ b/tests/HwAccelerationTest/res/layout/_newlayers.xml @@ -0,0 +1,6 @@ + + + diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/LayersActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/LayersActivity.java index b705117..9d5cd28 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/LayersActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/LayersActivity.java @@ -33,11 +33,11 @@ public class LayersActivity extends Activity { setContentView(new LayersView(this)); } - static class LayersView extends View { + public static class LayersView extends View { private Paint mLayerPaint; private final Paint mRectPaint; - LayersView(Context c) { + public LayersView(Context c) { super(c); mLayerPaint = new Paint(); @@ -47,11 +47,11 @@ public class LayersActivity extends Activity { @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - + canvas.translate(140.0f, 100.0f); //canvas.drawRGB(255, 255, 255); - + int count = canvas.saveLayer(0.0f, 0.0f, 200.0f, 100.0f, mLayerPaint, Canvas.ALL_SAVE_FLAG); @@ -59,9 +59,9 @@ public class LayersActivity extends Activity { canvas.drawRect(0.0f, 0.0f, 200.0f, 100.0f, mRectPaint); canvas.restoreToCount(count); - + canvas.translate(0.0f, 125.0f); - + count = canvas.saveLayer(0.0f, 0.0f, 200.0f, 100.0f, mLayerPaint, Canvas.ALL_SAVE_FLAG); @@ -75,8 +75,8 @@ public class LayersActivity extends Activity { mRectPaint.setColor(0xff0000ff); mRectPaint.setAlpha(255); - canvas.drawRect(0.0f, 0.0f, 100.0f, 50.0f, mRectPaint); - + canvas.drawRect(0.0f, 0.0f, 100.0f, 50.0f, mRectPaint); + mLayerPaint.setAlpha(127); mLayerPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT)); count = canvas.saveLayer(50.0f, 25.0f, 150.0f, 75.0f, mLayerPaint, @@ -86,13 +86,13 @@ public class LayersActivity extends Activity { canvas.drawRect(50.0f, 25.0f, 150.0f, 75.0f, mRectPaint); canvas.restoreToCount(count); - + canvas.translate(0.0f, 125.0f); mRectPaint.setColor(0xff0000ff); mRectPaint.setAlpha(255); - canvas.drawRect(0.0f, 0.0f, 100.0f, 50.0f, mRectPaint); - + canvas.drawRect(0.0f, 0.0f, 100.0f, 50.0f, mRectPaint); + mLayerPaint.setColor(0xffff0000); mLayerPaint.setAlpha(127); mLayerPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP)); @@ -103,7 +103,7 @@ public class LayersActivity extends Activity { canvas.drawRect(50.0f, 25.0f, 150.0f, 75.0f, mRectPaint); canvas.restoreToCount(count); - + mLayerPaint = new Paint(); } } diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/NewLayersActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/NewLayersActivity.java index d9a2893..2509d367 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/NewLayersActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/NewLayersActivity.java @@ -31,11 +31,11 @@ public class NewLayersActivity extends Activity { setContentView(new LayersView(this)); } - static class LayersView extends View { + public static class LayersView extends View { private Paint mLayerPaint; private final Paint mRectPaint; - LayersView(Context c) { + public LayersView(Context c) { super(c); mLayerPaint = new Paint(); @@ -57,7 +57,7 @@ public class NewLayersActivity extends Activity { canvas.translate(0.0f, 200.0f); drawStuff(canvas, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG); - + canvas.restore(); } -- cgit v1.1