summaryrefslogtreecommitdiff
path: root/java/org/gnu/emacs/EmacsDrawLine.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/EmacsDrawLine.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/EmacsDrawLine.java')
-rw-r--r--java/org/gnu/emacs/EmacsDrawLine.java116
1 files changed, 28 insertions, 88 deletions
diff --git a/java/org/gnu/emacs/EmacsDrawLine.java b/java/org/gnu/emacs/EmacsDrawLine.java
index 6389031bbfa..8941d4c217f 100644
--- a/java/org/gnu/emacs/EmacsDrawLine.java
+++ b/java/org/gnu/emacs/EmacsDrawLine.java
@@ -29,109 +29,49 @@ import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.Xfermode;
-public class EmacsDrawLine implements EmacsPaintReq
+public class EmacsDrawLine
{
- private int x, y, x2, y2;
- private EmacsDrawable drawable;
- private EmacsGC immutableGC;
- private static Xfermode xorAlu, srcInAlu;
-
- static
+ public static void
+ perform (EmacsDrawable drawable, EmacsGC gc,
+ int x, int y, int x2, int y2)
{
- xorAlu = new PorterDuffXfermode (Mode.XOR);
- srcInAlu = new PorterDuffXfermode (Mode.SRC_IN);
- };
+ Rect rect;
+ Canvas canvas;
+ Paint paint;
+ int i;
- public
- EmacsDrawLine (EmacsDrawable drawable, int x, int y,
- int x2, int y2, EmacsGC immutableGC)
- {
- this.drawable = drawable;
- this.x = x;
- this.y = y;
- this.x2 = x2;
- this.y2 = y2;
- this.immutableGC = immutableGC;
- }
+ /* TODO implement stippling. */
+ if (gc.fill_style == EmacsGC.GC_FILL_OPAQUE_STIPPLED)
+ return;
- @Override
- public Rect
- getRect ()
- {
- return new Rect (Math.min (x, x2 + 1),
+ paint = gc.gcPaint;
+ rect = new Rect (Math.min (x, x2 + 1),
Math.min (y, y2 + 1),
Math.max (x2 + 1, x),
Math.max (y2 + 1, y));
- }
-
- @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, srcRect;
- int width, height;
+ canvas = drawable.lockCanvas ();
- /* TODO implement stippling. */
- if (immutableGC.fill_style == EmacsGC.GC_FILL_OPAQUE_STIPPLED)
+ if (canvas == null)
return;
- alu = immutableGC.function;
- rect = getRect ();
- width = rect.width ();
- height = rect.height ();
+ canvas.save ();
- paint.setStyle (Paint.Style.STROKE);
-
- if (alu == EmacsGC.GC_COPY)
- paint.setXfermode (null);
- else
- paint.setXfermode (xorAlu);
-
- if (immutableGC.clip_mask == null)
+ if (gc.real_clip_rects != null)
{
- paint.setColor (immutableGC.foreground | 0xff000000);
- canvas.drawLine ((float) x, (float) y,
- (float) x2, (float) y2,
- paint);
+ for (i = 0; i < gc.real_clip_rects.length; ++i)
+ canvas.clipRect (gc.real_clip_rects[i]);
}
- else
- {
- maskPaint = new Paint ();
- maskBitmap
- = immutableGC.clip_mask.bitmap.copy (Bitmap.Config.ARGB_8888,
- true);
- if (maskBitmap == null)
- return;
+ paint.setStyle (Paint.Style.STROKE);
- maskPaint.setXfermode (srcInAlu);
- maskPaint.setColor (immutableGC.foreground | 0xff000000);
- maskCanvas = new Canvas (maskBitmap);
- srcRect = new Rect (0, 0, maskBitmap.getWidth (),
- maskBitmap.getHeight ());
- maskCanvas.drawLine (0.0f, 0.0f, (float) Math.abs (x - x2),
- (float) Math.abs (y - y2), maskPaint);
- canvas.drawBitmap (maskBitmap, srcRect, rect, paint);
- }
+ if (gc.clip_mask == null)
+ canvas.drawLine ((float) x, (float) y,
+ (float) x2, (float) y2,
+ paint);
- paint.setXfermode (null);
+ /* DrawLine with clip mask not implemented; it is not used by
+ Emacs. */
+ canvas.restore ();
+ drawable.damageRect (rect);
}
}