summaryrefslogtreecommitdiff
path: root/java/org/gnu/emacs/EmacsDrawRectangle.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/org/gnu/emacs/EmacsDrawRectangle.java')
-rw-r--r--java/org/gnu/emacs/EmacsDrawRectangle.java45
1 files changed, 13 insertions, 32 deletions
diff --git a/java/org/gnu/emacs/EmacsDrawRectangle.java b/java/org/gnu/emacs/EmacsDrawRectangle.java
index c29d413f66e..695a8c6ea44 100644
--- a/java/org/gnu/emacs/EmacsDrawRectangle.java
+++ b/java/org/gnu/emacs/EmacsDrawRectangle.java
@@ -23,6 +23,7 @@ import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
+import android.graphics.RectF;
import android.util.Log;
@@ -36,51 +37,31 @@ public class EmacsDrawRectangle
Paint maskPaint, paint;
Canvas maskCanvas;
Bitmap maskBitmap;
+ Rect rect;
Rect maskRect, dstRect;
Canvas canvas;
Bitmap clipBitmap;
- Rect clipRect;
/* TODO implement stippling. */
if (gc.fill_style == EmacsGC.GC_FILL_OPAQUE_STIPPLED)
return;
- canvas = drawable.lockCanvas ();
+ canvas = drawable.lockCanvas (gc);
if (canvas == null)
return;
- canvas.save ();
-
- if (gc.real_clip_rects != null)
- {
- for (i = 0; i < gc.real_clip_rects.length; ++i)
- canvas.clipRect (gc.real_clip_rects[i]);
- }
-
- /* Clip to the clipRect because some versions of Android draw an
- overly wide line. */
- clipRect = new Rect (x, y, x + width + 1,
- y + height + 1);
- canvas.clipRect (clipRect);
-
paint = gc.gcPaint;
+ paint.setStyle (Paint.Style.STROKE);
+ rect = new Rect (x, y, x + width, y + height);
if (gc.clip_mask == null)
- {
- /* canvas.drawRect just doesn't work on Android, producing
- different results on various devices. Do a 5 point
- PolyLine instead. */
- canvas.drawLine ((float) x, (float) y, (float) x + width,
- (float) y, paint);
- canvas.drawLine ((float) x + width, (float) y,
- (float) x + width, (float) y + height,
- paint);
- canvas.drawLine ((float) x + width, (float) y + height,
- (float) x, (float) y + height, paint);
- canvas.drawLine ((float) x, (float) y + height,
- (float) x, (float) y, paint);
- }
+ /* Use canvas.drawRect with a RectF. That seems to reliably
+ get PostScript behavior. */
+ canvas.drawRect (new RectF (x + 0.5f, y + 0.5f,
+ x + width + 0.5f,
+ y + height + 0.5f),
+ paint);
else
{
/* Drawing with a clip mask involves calculating the
@@ -137,7 +118,7 @@ public class EmacsDrawRectangle
maskBitmap.recycle ();
}
- canvas.restore ();
- drawable.damageRect (clipRect);
+ drawable.damageRect (new Rect (x, y, x + width + 1,
+ y + height + 1));
}
}