mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-30 00:51:50 -08:00
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.
This commit is contained in:
parent
e816e57039
commit
695e26079e
17 changed files with 695 additions and 766 deletions
|
|
@ -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;
|
||||
|
||||
private static Xfermode xorAlu, srcInAlu;
|
||||
|
||||
static
|
||||
{
|
||||
xorAlu = new PorterDuffXfermode (Mode.XOR);
|
||||
srcInAlu = new PorterDuffXfermode (Mode.SRC_IN);
|
||||
};
|
||||
|
||||
public
|
||||
EmacsFillPolygon (EmacsDrawable drawable, Point points[],
|
||||
EmacsGC immutableGC)
|
||||
public static void
|
||||
perform (EmacsDrawable drawable, EmacsGC gc, Point points[])
|
||||
{
|
||||
Canvas canvas;
|
||||
Path path;
|
||||
Paint paint;
|
||||
Rect rect;
|
||||
RectF rectF;
|
||||
int i;
|
||||
|
||||
this.drawable = drawable;
|
||||
this.immutableGC = immutableGC;
|
||||
canvas = drawable.lockCanvas ();
|
||||
|
||||
if (canvas == null)
|
||||
return;
|
||||
|
||||
paint = gc.gcPaint;
|
||||
|
||||
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]);
|
||||
}
|
||||
|
||||
/* 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;
|
||||
/* Compute the damage rectangle. */
|
||||
rectF = new RectF (0, 0, 0, 0);
|
||||
path.computeBounds (rectF, true);
|
||||
|
||||
rect = new RectF (0, 0, 0, 0);
|
||||
path.computeBounds (rect, 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. */
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue