1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-26 23:31:55 -08:00

Optimize stipples on Android

* java/org/gnu/emacs/EmacsGC.java (EmacsGC) <tileObject>:
Change type to EmacsTileObject.
(markDirty): Create an EmacsTileObject rather than a
BitmapDrawable.

* java/org/gnu/emacs/EmacsTileObject.java: New file,
significantly leaner than BitmapDrawable.
This commit is contained in:
Po Lu 2024-05-06 12:09:21 +08:00
parent f920959ac9
commit 2f36fc1b4f
2 changed files with 105 additions and 11 deletions

View file

@ -0,0 +1,101 @@
/* Communication module for Android terminals. -*- c-file-style: "GNU" -*-
Copyright (C) 2023-2024 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
package org.gnu.emacs;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Shader.TileMode;
/* This is a crude facsimilie of the BitmapDrawable class implementing
just enough of its functionality to support displaying stipples in
EmacsGC. */
public final class EmacsTileObject
{
/* Color filter object set by EmacsGC. */
private ColorFilter colorFilter;
/* Bitmap object set by EmacsGC. */
private Bitmap bitmap;
/* Tiling modes on either axis. */
private TileMode xTile, yTile;
/* Destination rectangle. */
private Rect boundsRect;
/* Paint providing graphics properties for drawBitmap. */
private Paint paint;
public
EmacsTileObject (Bitmap stippleBitmap)
{
bitmap = stippleBitmap;
paint = new Paint ();
}
public void
setBitmap (Bitmap newBitmap)
{
bitmap = newBitmap;
}
public void
setBounds (Rect bounds)
{
boundsRect = bounds;
}
public void
setTileModeXY (TileMode newXTile, TileMode newYTile)
{
xTile = newXTile;
yTile = newYTile;
}
public void
setColorFilter (ColorFilter filterObject)
{
paint.setColorFilter (filterObject);
}
public Bitmap
getBitmap ()
{
return bitmap;
}
/* Replicate `bitmap' over CANVAS so that boundsRect is covered with
copies thereof on the X axis, if xTile is REPEAT, and also on the Y
axis, if yTile is a like value. */
public void
draw (Canvas canvas)
{
paint.setShader (new BitmapShader (bitmap, xTile, yTile));
canvas.drawRect (boundsRect, paint);
}
};