1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-13 10:20:59 -07:00
emacs/java/org/gnu/emacs/EmacsFontDriver.java
Po Lu 4de6b18793 Update Android port
* .gitignore: Update with new files.  Do not ignore std*.in.h.
* INSTALL.android: Explain how to build Emacs with external
dependencies.

* Makefile.in (xcompile, cross): Rename to `cross'.
(clean_dirs): Clean cross, not xcompile.

* README: Document new directories.

* build-aux/ndk-build-helper-1.mk (build_kind, NDK_SO_NAMES):
* build-aux/ndk-build-helper-2.mk (build_kind, NDK_SO_NAMES):
* build-aux/ndk-build-helper-3.mk (build_kind):
* build-aux/ndk-build-helper-4.mk:
* build-aux/ndk-build-helper.mk (NDK_BUILD_DIR, my-dir):
* build-aux/ndk-module-extract.awk: New files.
* configure.ac: Set up libgif, libwebp, and libpng for
ndk-build.
* cross/ndk-build/Makefile.in (srcdir, NDK_BUILD_ANDROID_MK):
* cross/ndk-build/ndk-build-executable.mk:
* cross/ndk-build/ndk-build-shared-library.mk (eq, objname):
* cross/ndk-build/ndk-build-static-library.mk (eq, objname):
* cross/ndk-build/ndk-build.in (NDK_BUILD_MODULES):
* cross/ndk-build/ndk-build.mk.in (NDK_BUILD_MODULES)
(NDK_BUILD_SHARED):
* cross/ndk-build/ndk-clear-vars.mk:
* cross/ndk-build/ndk-prebuilt-shared-library.mk:
* cross/ndk-build/ndk-prebuilt-static-library.mk: New files.
* doc/emacs/android.texi (Android, Android Environment):
Document clipboard support on Android.
* doc/emacs/emacs.texi (Top): Update menus.
* etc/MACHINES: Document Android.
* java/AndroidManifest.xml.in: Respect new
`--with-android-debug' option.
* java/Makefile.in (CROSS_BINS, CROSS_LIBS): Adjust for rename.
Include ndk-build.mk.:(emacs.apk-in): Depend on shared
libraries.  Then, package shared libraries.
* java/org/gnu/emacs/EmacsClipboard.java (EmacsClipboard): New
class.
* java/org/gnu/emacs/EmacsFontDriver.java: Update comment to say
this is unused.
* java/org/gnu/emacs/EmacsNative.java (EmacsNative): New
function `sendExpose'.
* java/org/gnu/emacs/EmacsSdk11Clipboard.java
(EmacsSdk11Clipboard):
* java/org/gnu/emacs/EmacsSdk8Clipboard.java
(EmacsSdk8Clipboard): New classes.
* java/org/gnu/emacs/EmacsView.java (EmacsView, handleDirtyBitmap)
(onDetachedFromWindow): When window is reattached, expose the
frame.

* lib/Makefile.in (VPATH):
(ALL_CFLAGS): Adjust for rename.

* lisp/term/android-win.el (android-clipboard-exists-p)
(android-get-clipboard, android-set-clipboard)
(android-clipboard-owner-p, android-primary-selection)
(android-get-clipboard-1, android-get-primary)
(android-selection-bounds, android-encode-select-string)
(gui-backend-get-selection, gui-backend-selection-exists-p)
(gui-backend-selection-owner-p, gui-backend-set-selection): New
functions.

* m4/ndk-build.m4: New file.
* src/Makefile.in (GIF_CFLAGS, ANDROID_LDFLAGS): New variables.
(EMACS_CFLAGS): Add GIF_CFLAGS.  Include
ndk-build.mk.
(libemacs.so): Depend on and link with required
libraries.

* src/android.c (android_check_compressed_file): New function.
(android_open): Work around Android platform bug.
(sendExpose): New function.
(android_readdir): Set d_type if this is a directory.

* src/androidgui.h (enum android_event_type)
(struct android_expose_event, union android_event): Add expose
events.

* src/androidselect.c (struct android_emacs_clipboard)
(android_init_emacs_clipboard, Fandroid_clipboard_owner_p)
(Fandroid_set_clipboard, Fandroid_get_clipboard)
(Fandroid_clipboard_exists_p, init_androidselect)
(syms_of_androidselect): New file.

* src/androidterm.c (handle_one_android_event): Handle
exposures.
* src/androidterm.h: Update prototypes.
* src/emacs.c (android_emacs_init): Initialize androidselect.
2023-01-24 10:34:40 +08:00

175 lines
5 KiB
Java

/* Font backend for Android terminals. -*- c-file-style: "GNU" -*-
Copyright (C) 2023 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 java.util.List;
import android.os.Build;
/* This code is mostly unused. See sfntfont-android.c for the code
that is actually used. */
public abstract class EmacsFontDriver
{
/* Font weights. */
public static final int THIN = 0;
public static final int ULTRA_LIGHT = 40;
public static final int LIGHT = 50;
public static final int SEMI_LIGHT = 55;
public static final int REGULAR = 80;
public static final int MEDIUM = 100;
public static final int SEMI_BOLD = 180;
public static final int BOLD = 200;
public static final int EXTRA_BOLD = 205;
public static final int BLACK = 210;
public static final int ULTRA_HEAVY = 250;
/* Font slants. */
public static final int REVERSE_OBLIQUE = 0;
public static final int REVERSE_ITALIC = 10;
public static final int NORMAL = 100;
public static final int ITALIC = 200;
public static final int OBLIQUE = 210;
/* Font widths. */
public static final int ULTRA_CONDENSED = 50;
public static final int EXTRA_CONDENSED = 63;
public static final int CONDENSED = 75;
public static final int SEMI_CONDENSED = 87;
public static final int UNSPECIFIED = 100;
public static final int SEMI_EXPANDED = 113;
public static final int EXPANDED = 125;
public static final int EXTRA_EXPANDED = 150;
public static final int ULTRA_EXPANDED = 200;
/* Font spacings. */
public static final int PROPORTIONAL = 0;
public static final int DUAL = 90;
public static final int MONO = 100;
public static final int CHARCELL = 110;
public class FontSpec
{
/* The fields below mean the same as they do in enum
font_property_index in font.h. */
public String foundry;
public String family;
public String adstyle;
public String registry;
public Integer width;
public Integer weight;
public Integer slant;
public Integer size;
public Integer spacing;
public Integer avgwidth;
public Integer dpi;
@Override
public String
toString ()
{
return ("foundry: " + foundry
+ " family: " + family
+ " adstyle: " + adstyle
+ " registry: " + registry
+ " width: " + width
+ " weight: " + weight
+ " slant: " + slant
+ " spacing: " + spacing
+ " avgwidth: " + avgwidth
+ " dpi: " + dpi);
}
};
public class FontMetrics
{
public short lbearing;
public short rbearing;
public short width;
public short ascent;
public short descent;
@Override
public String
toString ()
{
return ("lbearing " + lbearing
+ " rbearing " + rbearing
+ " width " + width
+ " ascent " + ascent
+ " descent " + descent);
}
}
public class FontEntity extends FontSpec
{
/* No extra fields here. */
};
public abstract class FontObject extends FontSpec
{
public int minWidth;
public int maxWidth;
public int pixelSize;
public int height;
public int spaceWidth;
public int averageWidth;
public int ascent;
public int descent;
public int underlineThickness;
public int underlinePosition;
public int baselineOffset;
public int relativeCompose;
public int defaultAscent;
public int encodingCharset;
public int repertoryCharset;
public
FontObject ()
{
encodingCharset = -1;
repertoryCharset = -1;
}
};
/* These mean the same as they do in struct font_driver. */
public abstract FontEntity[] list (FontSpec fontSpec);
public abstract FontEntity match (FontSpec fontSpec);
public abstract String[] listFamilies ();
public abstract FontObject openFont (FontEntity fontEntity, int pixelSize);
public abstract int hasChar (FontSpec font, char charCode);
public abstract void textExtents (FontObject font, int code[],
FontMetrics fontMetrics);
public abstract int encodeChar (FontObject fontObject, char charCode);
public abstract int draw (FontObject fontObject, EmacsGC gc,
EmacsDrawable drawable, int[] chars,
int x, int y, int backgroundWidth,
boolean withBackground);
public static EmacsFontDriver
createFontDriver ()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
return new EmacsSdk23FontDriver ();
return new EmacsSdk7FontDriver ();
}
};