@@ -718,7 +718,7 @@ public DrawFilter getDrawFilter() {
718718 @ Override
719719 public void drawArc (RectF oval , float startAngle , float sweepAngle , boolean useCenter ,
720720 Paint paint ) {
721- int modifiers = setupModifiers (paint );
721+ int modifiers = setupModifiers (paint , MODIFIER_COLOR_FILTER | MODIFIER_SHADER );
722722 try {
723723 nDrawArc (mRenderer , oval .left , oval .top , oval .right , oval .bottom ,
724724 startAngle , sweepAngle , useCenter , paint .mNativePaint );
@@ -902,7 +902,7 @@ private static native void nDrawBitmapMesh(int renderer, int bitmap, byte[] buff
902902
903903 @ Override
904904 public void drawCircle (float cx , float cy , float radius , Paint paint ) {
905- int modifiers = setupModifiers (paint );
905+ int modifiers = setupModifiers (paint , MODIFIER_COLOR_FILTER | MODIFIER_SHADER );
906906 try {
907907 nDrawCircle (mRenderer , cx , cy , radius , paint .mNativePaint );
908908 } finally {
@@ -939,7 +939,7 @@ public void drawLines(float[] pts, int offset, int count, Paint paint) {
939939 if ((offset | count ) < 0 || offset + count > pts .length ) {
940940 throw new IllegalArgumentException ("The lines array must contain 4 elements per line." );
941941 }
942- int modifiers = setupModifiers (paint );
942+ int modifiers = setupModifiers (paint , MODIFIER_COLOR_FILTER | MODIFIER_SHADER );
943943 try {
944944 nDrawLines (mRenderer , pts , offset , count , paint .mNativePaint );
945945 } finally {
@@ -957,7 +957,7 @@ public void drawLines(float[] pts, Paint paint) {
957957
958958 @ Override
959959 public void drawOval (RectF oval , Paint paint ) {
960- int modifiers = setupModifiers (paint );
960+ int modifiers = setupModifiers (paint , MODIFIER_COLOR_FILTER | MODIFIER_SHADER );
961961 try {
962962 nDrawOval (mRenderer , oval .left , oval .top , oval .right , oval .bottom , paint .mNativePaint );
963963 } finally {
@@ -977,7 +977,7 @@ public void drawPaint(Paint paint) {
977977
978978 @ Override
979979 public void drawPath (Path path , Paint paint ) {
980- int modifiers = setupModifiers (paint );
980+ int modifiers = setupModifiers (paint , MODIFIER_COLOR_FILTER | MODIFIER_SHADER );
981981 try {
982982 if (path .isSimplePath ) {
983983 if (path .rects != null ) {
@@ -1048,7 +1048,7 @@ public void drawPoints(float[] pts, Paint paint) {
10481048
10491049 @ Override
10501050 public void drawPoints (float [] pts , int offset , int count , Paint paint ) {
1051- int modifiers = setupModifiers (paint );
1051+ int modifiers = setupModifiers (paint , MODIFIER_COLOR_FILTER | MODIFIER_SHADER );
10521052 try {
10531053 nDrawPoints (mRenderer , pts , offset , count , paint .mNativePaint );
10541054 } finally {
@@ -1097,7 +1097,8 @@ private static native void nDrawPosText(int renderer, String text, int start, in
10971097
10981098 @ Override
10991099 public void drawRect (float left , float top , float right , float bottom , Paint paint ) {
1100- int modifiers = setupModifiers (paint );
1100+ if (left == right || top == bottom ) return ;
1101+ int modifiers = setupModifiers (paint , MODIFIER_COLOR_FILTER | MODIFIER_SHADER );
11011102 try {
11021103 nDrawRect (mRenderer , left , top , right , bottom , paint .mNativePaint );
11031104 } finally {
@@ -1125,7 +1126,7 @@ public void drawRGB(int r, int g, int b) {
11251126
11261127 @ Override
11271128 public void drawRoundRect (RectF rect , float rx , float ry , Paint paint ) {
1128- int modifiers = setupModifiers (paint );
1129+ int modifiers = setupModifiers (paint , MODIFIER_COLOR_FILTER | MODIFIER_SHADER );
11291130 try {
11301131 nDrawRoundRect (mRenderer , rect .left , rect .top , rect .right , rect .bottom ,
11311132 rx , ry , paint .mNativePaint );
@@ -1341,6 +1342,30 @@ private int setupModifiers(Paint paint) {
13411342 return modifiers ;
13421343 }
13431344
1345+ private int setupModifiers (Paint paint , int flags ) {
1346+ int modifiers = MODIFIER_NONE ;
1347+
1348+ if (paint .hasShadow && (flags & MODIFIER_SHADOW ) != 0 ) {
1349+ nSetupShadow (mRenderer , paint .shadowRadius , paint .shadowDx , paint .shadowDy ,
1350+ paint .shadowColor );
1351+ modifiers |= MODIFIER_SHADOW ;
1352+ }
1353+
1354+ final Shader shader = paint .getShader ();
1355+ if (shader != null && (flags & MODIFIER_SHADER ) != 0 ) {
1356+ nSetupShader (mRenderer , shader .native_shader );
1357+ modifiers |= MODIFIER_SHADER ;
1358+ }
1359+
1360+ final ColorFilter filter = paint .getColorFilter ();
1361+ if (filter != null && (flags & MODIFIER_COLOR_FILTER ) != 0 ) {
1362+ nSetupColorFilter (mRenderer , filter .nativeColorFilter );
1363+ modifiers |= MODIFIER_COLOR_FILTER ;
1364+ }
1365+
1366+ return modifiers ;
1367+ }
1368+
13441369 private int setupColorFilter (Paint paint ) {
13451370 final ColorFilter filter = paint .getColorFilter ();
13461371 if (filter != null ) {
0 commit comments