summaryrefslogtreecommitdiff
path: root/java/org/gnu/emacs/EmacsFillPolygon.java
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2023-01-08 15:39:02 +0800
committerPo Lu <luangruo@yahoo.com>2023-01-08 15:39:02 +0800
commit695e26079eb60d10ffe25bb8ae91ebc6131fb27d (patch)
treebc18692c1e4c0f5aa3e6707850f4c2023bc75e81 /java/org/gnu/emacs/EmacsFillPolygon.java
parente816e570393a964383e8b42330f5582c4c0a54f2 (diff)
Update Java part of Android port
* java/org/gnu/emacs/EmacsCopyArea.java (EmacsCopyArea, perform) (paintTo): * java/org/gnu/emacs/EmacsDrawLine.java (EmacsDrawLine): * java/org/gnu/emacs/EmacsDrawPoint.java (EmacsDrawPoint): * java/org/gnu/emacs/EmacsDrawRectangle.java (EmacsDrawRectangle) (paintTo): * java/org/gnu/emacs/EmacsDrawable.java (EmacsDrawable): * java/org/gnu/emacs/EmacsFillPolygon.java (EmacsFillPolygon): * java/org/gnu/emacs/EmacsFillRectangle.java (EmacsFillRectangle): * java/org/gnu/emacs/EmacsFontDriver.java (EmacsFontDriver): * java/org/gnu/emacs/EmacsGC.java (EmacsGC): * java/org/gnu/emacs/EmacsNative.java (EmacsNative): * java/org/gnu/emacs/EmacsPixmap.java (EmacsPixmap): * java/org/gnu/emacs/EmacsSdk23FontDriver.java (EmacsSdk23FontDriver): * java/org/gnu/emacs/EmacsSdk7FontDriver.java (EmacsSdk7FontDriver, textExtents1, textExtents, draw): * java/org/gnu/emacs/EmacsService.java (EmacsService, copyArea): * java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView): * java/org/gnu/emacs/EmacsView.java (EmacsView, onLayout) (onFocusChanged): * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow, run) (resizeWindow, lockCanvas, getBitmap, onKeyDown, onKeyUp) (onActivityDetached): Move rendering to main thread. Make drawing operations completely static.
Diffstat (limited to 'java/org/gnu/emacs/EmacsFillPolygon.java')
-rw-r--r--java/org/gnu/emacs/EmacsFillPolygon.java126
1 files changed, 34 insertions, 92 deletions
diff --git a/java/org/gnu/emacs/EmacsFillPolygon.java b/java/org/gnu/emacs/EmacsFillPolygon.java
index 3198c7f07c4..42b73886dff 100644
--- a/java/org/gnu/emacs/EmacsFillPolygon.java
+++ b/java/org/gnu/emacs/EmacsFillPolygon.java
@@ -26,34 +26,35 @@ import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
-import android.graphics.PorterDuff.Mode;
-import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
-import android.graphics.Xfermode;
-public class EmacsFillPolygon implements EmacsPaintReq
+public class EmacsFillPolygon
{
- private EmacsDrawable drawable;
- private EmacsGC immutableGC;
- private Path path;
+ public static void
+ perform (EmacsDrawable drawable, EmacsGC gc, Point points[])
+ {
+ Canvas canvas;
+ Path path;
+ Paint paint;
+ Rect rect;
+ RectF rectF;
+ int i;
- private static Xfermode xorAlu, srcInAlu;
+ canvas = drawable.lockCanvas ();
- static
- {
- xorAlu = new PorterDuffXfermode (Mode.XOR);
- srcInAlu = new PorterDuffXfermode (Mode.SRC_IN);
- };
+ if (canvas == null)
+ return;
- public
- EmacsFillPolygon (EmacsDrawable drawable, Point points[],
- EmacsGC immutableGC)
- {
- int i;
+ paint = gc.gcPaint;
+
+ canvas.save ();
- this.drawable = drawable;
- this.immutableGC = immutableGC;
+ if (gc.real_clip_rects != null)
+ {
+ for (i = 0; i < gc.real_clip_rects.length; ++i)
+ canvas.clipRect (gc.real_clip_rects[i]);
+ }
/* Build the path from the given array of points. */
path = new Path ();
@@ -67,84 +68,25 @@ public class EmacsFillPolygon implements EmacsPaintReq
path.close ();
}
- }
-
- @Override
- public Rect
- getRect ()
- {
- RectF rect;
- rect = new RectF (0, 0, 0, 0);
- path.computeBounds (rect, true);
+ /* Compute the damage rectangle. */
+ rectF = new RectF (0, 0, 0, 0);
+ path.computeBounds (rectF, true);
- return new Rect ((int) Math.floor (rect.left),
- (int) Math.floor (rect.top),
- (int) Math.ceil (rect.right),
- (int) Math.ceil (rect.bottom));
- }
-
- @Override
- public EmacsDrawable
- getDrawable ()
- {
- return drawable;
- }
-
- @Override
- public EmacsGC
- getGC ()
- {
- return immutableGC;
- }
-
- @Override
- public void
- paintTo (Canvas canvas, Paint paint, EmacsGC immutableGC)
- {
- int alu;
- Paint maskPaint;
- Canvas maskCanvas;
- Bitmap maskBitmap;
- Rect rect;
-
- /* TODO implement stippling. */
- if (immutableGC.fill_style == EmacsGC.GC_FILL_OPAQUE_STIPPLED)
- return;
-
- alu = immutableGC.function;
- rect = getRect ();
-
- if (alu == EmacsGC.GC_COPY)
- paint.setXfermode (null);
- else
- paint.setXfermode (xorAlu);
+ rect = new Rect ((int) Math.floor (rectF.left),
+ (int) Math.floor (rectF.top),
+ (int) Math.ceil (rectF.right),
+ (int) Math.ceil (rectF.bottom));
paint.setStyle (Paint.Style.FILL);
- if (immutableGC.clip_mask == null)
- {
- paint.setColor (immutableGC.foreground | 0xff000000);
- canvas.drawPath (path, paint);
- }
- else
- {
- maskPaint = new Paint ();
- maskBitmap = immutableGC.clip_mask.bitmap;
- maskBitmap = maskBitmap.copy (Bitmap.Config.ARGB_8888,
- true);
+ if (gc.clip_mask == null)
+ canvas.drawPath (path, paint);
- if (maskBitmap == null)
- return;
+ canvas.restore ();
+ drawable.damageRect (rect);
- maskPaint.setXfermode (srcInAlu);
- maskPaint.setColor (immutableGC.foreground | 0xff000000);
- maskCanvas = new Canvas (maskBitmap);
- path.offset (-rect.left, -rect.top, null);
- maskCanvas.drawPath (path, maskPaint);
- canvas.drawBitmap (maskBitmap, new Rect (0, 0, rect.width (),
- rect.height ()),
- rect, paint);
- }
+ /* FillPolygon with clip mask not implemented; it is not used by
+ Emacs. */
}
}