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
diff --git a/bridge/src/android/graphics/Paint_Delegate.java b/bridge/src/android/graphics/Paint_Delegate.java
index 0a597ca..7cb30dd 100644
--- a/bridge/src/android/graphics/Paint_Delegate.java
+++ b/bridge/src/android/graphics/Paint_Delegate.java
@@ -118,6 +118,10 @@
return mColor >>> 24;
}
+ public void setAlpha(int alpha) {
+ mColor = (alpha << 24) | (mColor & 0x00FFFFFF);
+ }
+
public int getTextAlign() {
return mTextAlign;
}
@@ -130,7 +134,11 @@
* returns the value of stroke miter needed by the java api.
*/
public float getJavaStrokeMiter() {
- return mStrokeMiter * mStrokeWidth;
+ float miter = mStrokeMiter * mStrokeWidth;
+ if (miter < 1.f) {
+ miter = 1.f;
+ }
+ return miter;
}
public int getJavaCap() {
@@ -274,7 +282,7 @@
return;
}
- delegate.mColor = (a << 24) | (delegate.mColor & 0x00FFFFFF);
+ delegate.setAlpha(a);
}
/*package*/ static float getStrokeWidth(Paint thisPaint) {
@@ -835,7 +843,7 @@
// ---- Private delegate/helper methods ----
- private Paint_Delegate() {
+ /*package*/ Paint_Delegate() {
reset();
}
@@ -866,14 +874,14 @@
private void reset() {
mFlags = Paint.DEFAULT_PAINT_FLAGS;
- mColor = 0;
+ mColor = 0xFF000000;
mStyle = Paint.Style.FILL.nativeInt;
mCap = Paint.Cap.BUTT.nativeInt;
mJoin = Paint.Join.MITER.nativeInt;
mTextAlign = 0;
mTypeface = Typeface.sDefaults[0].native_instance;
mStrokeWidth = 1.f;
- mStrokeMiter = 2.f;
+ mStrokeMiter = 4.f;
mTextSize = 20.f;
mTextScaleX = 1.f;
mTextSkewX = 0.f;