aboutsummaryrefslogtreecommitdiffstats
path: root/src/androidterm.h
diff options
context:
space:
mode:
authorPo Lu2022-12-31 18:04:18 +0800
committerPo Lu2022-12-31 18:04:18 +0800
commitcfbc8a5dbcd362b69b37b4e6832ae4a31834364c (patch)
treece003d03c4ae98f4e1d02186d78e5ae6e0d36e55 /src/androidterm.h
parent785095c416f9bae43d2947849282b814e2c7942e (diff)
downloademacs-cfbc8a5dbcd362b69b37b4e6832ae4a31834364c.tar.gz
emacs-cfbc8a5dbcd362b69b37b4e6832ae4a31834364c.zip
Bring up the Android operating system and its window system
* .dir-locals.el (c-mode): Add ANDROID_EXPORT noise macro. * .gitignore: Add new files to ignore. * Makefile.in: Adjust for Android. * admin/merge-gnulib: Add new warning. * configure.ac: Detect Android. Run cross-configuration for Android when appropriate. * etc/DEBUG: Document how to debug Emacs on Android. * java/AndroidManifest.xml: * java/Makefile.in: * java/README: * java/debug.sh: * java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): * java/org/gnu/emacs/EmacsApplication.java (EmacsApplication): * java/org/gnu/emacs/EmacsCopyArea.java (EmacsCopyArea): * java/org/gnu/emacs/EmacsDrawLine.java (EmacsDrawLine): * java/org/gnu/emacs/EmacsDrawPoint.java (EmacsDrawPoint): * java/org/gnu/emacs/EmacsDrawRectangle.java (EmacsDrawRectangle): * 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/EmacsHandleObject.java (EmacsHandleObject): * java/org/gnu/emacs/EmacsNative.java (EmacsNative): * java/org/gnu/emacs/EmacsPaintQueue.java (EmacsPaintQueue): * java/org/gnu/emacs/EmacsPaintReq.java (EmacsPaintReq): * java/org/gnu/emacs/EmacsPixmap.java (EmacsPixmap): * java/org/gnu/emacs/EmacsSdk7FontDriver.java (EmacsSdk7FontDriver): * java/org/gnu/emacs/EmacsService.java (class Holder<T>) (EmacsService): * java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView): * java/org/gnu/emacs/EmacsThread.java (EmacsThread): * java/org/gnu/emacs/EmacsView.java (EmacsView): * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow): New files and classes. * lib-src/Makefile.in (srcdir): * lib/Makefile.in (VPATH): (HAVE_NATIVE_COMP): (libgnu_a_SOURCES): (DEPFLAGS): Configure correctly for cross-compiling. * lib/faccessat.c: * lib/fpending.c (__fpending): * lib/open.c: * lib/unistd.c (_GL_UNISTD_INLINE): Temporary adjustments to gnulib. * lisp/frame.el (display-graphic-p): (display-screens): (display-pixel-height): (display-pixel-width): (display-mm-height): (display-mm-width): (display-backing-store): (display-save-under): (display-planes): (display-color-cells): (display-visual-class): Adjust for new window system `android'. * lisp/image/wallpaper.el (x-open-connection): Add declaration. * lisp/loadup.el (featurep): Load up files for Android. * lisp/net/eww.el (eww-form-submit, eww-form-file) (eww-form-checkbox, eww-form-select): Adjust faces for android. * lisp/term/android-win.el: New file. * src/Makefile.in: Add new targets emacs.so and android-emacs, then adjust for cross compilation. * src/alloc.c (cleanup_vector): Clean up Android font entities as well. (garbage_collect): Mark androidterm. * src/android-emacs.c (main): * src/android.c (ANDROID_THROW, enum android_fd_table_entry_flags) (struct android_emacs_service, struct android_emacs_pixmap) (struct android_graphics_point, struct android_event_container) (struct android_event_queue, android_run_select_thread) (android_handle_sigusr1, android_init_events, android_pending) (android_next_event, android_write_event, android_select) (android_run_debug_thread, android_user_full_name) (android_get_asset_name, android_fstat, android_fstatat) (android_file_access_p, android_hack_asset_fd, android_open) (android_close, JNICALL, android_init_emacs_service) (android_init_emacs_pixmap, android_init_graphics_point) (MAX_HANDLE, struct android_handle_entry, android_alloc_id) (android_destroy_handle, android_resolve_handle) (android_resolve_handle2, android_change_window_attributes) (android_create_window, android_set_window_background) (android_destroy_window, android_init_android_rect_class) (android_init_emacs_gc_class, android_create_gc, android_free_gc) (android_change_gc, android_set_clip_rectangles) (android_reparent_window, android_lookup_method) (android_clear_window, android_map_window, android_unmap_window) (android_resize_window, android_move_window, android_swap_buffers) (android_get_gc_values, android_set_foreground) (android_fill_rectangle, android_create_pixmap_from_bitmap_data) (android_set_clip_mask, android_set_fill_style, android_copy_area) (android_free_pixmap, android_set_background, android_fill_polygon) (android_draw_rectangle, android_draw_point, android_draw_line) (android_create_pixmap, android_set_ts_origin, android_clear_area): * src/android.h (ANDROID_EXPORT): * src/androidfns.c (android_display_info_for_name) (check_android_display_info, check_x_display_info, gamma_correct) (android_defined_color, android_decode_color) (android_implicitly_set_name, android_explicitly_set_name) (android_set_tool_bar_lines, android_change_tool_bar_height) (android_set_tab_bar_lines, android_change_tab_bar_height) (android_set_scroll_bar_default_height) (android_set_scroll_bar_default_width, android_icon_verify) (android_icon, android_make_gc, android_free_gcs) (unwind_create_frame, do_unwind_create_frame) (android_default_font_parameter, android_create_frame_window) (Fx_create_frame, Fxw_color_defined_p, Fxw_color_values) (Fxw_display_color_p, Fx_display_grayscale_p) (Fx_display_pixel_width, Fx_display_pixel_height) (Fx_display_planes, Fx_display_color_cells, Fx_display_screens) (Fx_display_mm_width, Fx_display_mm_height) (Fx_display_backing_store, Fx_display_visual_class) (Fx_display_monitor_attributes_list, Fx_frame_geometry) (Fx_frame_list_z_order, Fx_frame_restack) (Fx_mouse_absolute_pixel_position) (Fx_set_mouse_absolute_pixel_position, Fandroid_get_connection) (Fx_display_list, Fx_show_tip, Fx_hide_tip) (android_set_background_color, android_set_border_color) (android_set_cursor_color, android_set_cursor_type) (android_set_foreground_color) (android_set_child_frame_border_width) (android_set_internal_border_width, android_set_menu_bar_lines) (android_set_mouse_color, android_set_title, android_set_alpha) (android_frame_parm_handlers, syms_of_androidfns): * src/androidfont.c (struct android_emacs_font_driver) (struct android_emacs_font_spec, struct android_emacs_font_metrics) (struct android_emacs_font_object, struct android_integer) (struct androidfont_info, struct androidfont_entity) (android_init_font_driver, android_init_font_spec) (android_init_font_metrics, android_init_integer) (android_init_font_object, androidfont_get_cache) (androidfont_from_lisp, androidfont_from_java, androidfont_list) (androidfont_match, androidfont_draw, androidfont_open_font) (androidfont_close_font, androidfont_has_char) (androidfont_encode_char, androidfont_text_extents) (androidfont_list_family, androidfont_driver) (syms_of_androidfont_for_pdumper, syms_of_androidfont) (init_androidfont, android_finalize_font_entity): * src/androidgui.h (_ANDROID_GUI_H_, struct android_rectangle) (struct android_point, enum android_gc_function) (enum android_gc_value_mask, enum android_fill_style) (enum android_window_value_mask) (struct android_set_window_attributes, struct android_gc_values) (struct android_gc, enum android_swap_action, enum android_shape) (enum android_coord_mode, struct android_swap_info) (NativeRectangle, struct android_any_event) (struct android_key_event, struct android_configure_event) (union android_event): * src/androidterm.c (android_window_to_frame, android_clear_frame) (android_ring_bell, android_toggle_invisible_pointer) (android_update_begin, android_update_end, show_back_buffer) (android_flush_dirty_back_buffer_on, handle_one_android_event) (android_read_socket, android_frame_up_to_date) (android_buffer_flipping_unblocked_hook) (android_query_frame_background_color, android_parse_color) (android_alloc_nearest_color, android_query_colors) (android_mouse_position, android_get_focus_frame) (android_focus_frame, android_frame_rehighlight) (android_frame_raise_lower, android_make_frame_visible) (android_make_frame_invisible) (android_make_frame_visible_invisible, android_fullscreen_hook) (android_iconify_frame, android_set_window_size_1) (android_set_window_size, android_set_offset, android_set_alpha) (android_new_font, android_bitmap_icon, android_free_pixmap_hook) (android_free_frame_resources, android_delete_frame) (android_delete_terminal, android_scroll_run) (android_after_update_window_line, android_flip_and_flush) (android_clear_rectangle, android_reset_clip_rectangles) (android_clip_to_row, android_draw_fringe_bitmap) (android_set_cursor_gc, android_set_mouse_face_gc) (android_set_mode_line_face_gc, android_set_glyph_string_gc) (android_set_glyph_string_clipping) (android_set_glyph_string_clipping_exactly) (android_compute_glyph_string_overhangs) (android_clear_glyph_string_rect) (android_draw_glyph_string_background, android_fill_triangle) (android_make_point, android_inside_rect_p, android_clear_point) (android_draw_relief_rect, android_draw_box_rect) (HIGHLIGHT_COLOR_DARK_BOOST_LIMIT, android_setup_relief_color) (android_setup_relief_colors, android_draw_glyph_string_box) (android_draw_glyph_string_bg_rect, android_draw_image_relief) (android_draw_image_foreground, android_draw_image_foreground_1) (android_draw_image_glyph_string) (android_draw_stretch_glyph_string, android_draw_underwave) (android_draw_glyph_string_foreground) (android_draw_composite_glyph_string_foreground) (android_draw_glyphless_glyph_string_foreground) (android_draw_glyph_string, android_define_frame_cursor) (android_clear_frame_area, android_clear_under_internal_border) (android_draw_hollow_cursor, android_draw_bar_cursor) (android_draw_window_cursor, android_draw_vertical_window_border) (android_draw_window_divider, android_redisplay_interface) (frame_set_mouse_pixel_position, get_keysym_name) (android_create_terminal, android_term_init, syms_of_androidterm) (mark_androidterm): * src/androidterm.h (_ANDROID_TERM_H_, struct android_display_info) (struct android_output, FRAME_ANDROID_OUTPUT, XSCROLL_BAR): New files. * src/dired.c (file_attributes): Do not use openat on Android. * src/dispextern.h (No_Cursor): Define appropriately on Android. (struct glyph_string, struct face): Make gc field of type struct android_gc on Android. * src/dispnew.c (clear_current_matrices, clear_desired_matrices) (adjust_frame_glyphs_for_window_redisplay, free_glyphs) (update_frame, scrolling, char_ins_del_cost, update_frame_line) (init_display_interactive): Disable text terminal support completely on Android. Fix non-toolkit menus for non-X systems. * src/editfns.c (Fuser_full_name): Call android_user_full_name. * src/emacs.c (android_emacs_init): Make main this on Android. Prohibit argv sorting from exceeding end of argv. * src/epaths.in: Add path definitions for Android. * src/fileio.c (file_access_p): Call android_file_access_p. (file_name_directory): Avoid using openat on Android. (Fcopy_file): Adjust to call sys_fstat instead. (file_directory_p): (Finsert_file_contents): (write_region): Likewise. * src/filelock.c: * src/fns.c (Flocale_info): Pacify warning on Android. * src/font.c (font_make_entity_android): New function. * src/font.h: * src/frame.c (Fframep): (Fwindow_system): Handle new window system `android'. Update doc strings. (Fmake_terminal_frame): Disable on Android. (gui_display_get_resource): Disable get_string_resource_hook on Android. (syms_of_frame): New defsym `android'. * src/frame.h (GCALIGNED_STRUCT): Add new output data for Android. (ENUM_BF): Expand enumerator size. (FRAME_ANDROID_P, FRAME_WINDOW_P, MOUSE_HL_INFO): Add definitions for Android. * src/image.c (GET_PIXEL): (image_create_bitmap_from_file): (image_create_x_image_and_pixmap_1): (image_get_x_image): (slurp_file): (lookup_rgb_color): (image_to_emacs_colors): (image_from_emacs_colors): (image_pixmap_draw_cross): (image_disable_image): (MaskForeground): (gif_load): Add stubs for Android. * src/lisp.h: * src/lread.c (safe_to_load_version, maybe_swap_for_eln1, openp): * src/pdumper.c (pdumper_load): Call sys_fstat instead of fstat. * src/process.c (wait_reading_process_output): Use android_select instead of pselect. * src/scroll.c: Disable on Android. * src/sysdep.c (widen_foreground_group, reset_sys_modes) (init_signals, emacs_fstatat, sys_fstat): New function. (emacs_open, emacs_open_noquit, emacs_close): Implement differently on Android. (close_output_streams): Disable what is not required on Android. * src/term.c (OUTPUT1_IF, encode_terminal_code, string_cost) (string_cost_one_line, per_line_cost, calculate_costs) (struct fkey_table, tty_append_glyph, produce_glyphs) (tty_capable_p, Fsuspend_tty, Fresume_tty, device, init_tty) (maybe_fatal, syms_of_term): Disable text terminal support on Android. * src/termhooks.h (enum output_method): Add android output method. (GCALIGNED_STRUCT, TERMINAL_FONT_CACHE): Define for Android. * src/terminal.c (Fterminal_live_p): Implement for Android. * src/verbose.mk.in (AM_V_GLOBALS): Add JAVAC and DX. * src/xdisp.c (redisplay_internal): Disable text terminals on Android. (display_menu_bar): (display_tty_menu_item): (draw_row_with_mouse_face): (expose_frame): Make the non toolkit menu bar work on Android. * src/xfaces.c (GCGraphicsExposures): (x_create_gc): (x_free_gc): (Fx_load_color_file): Define for Android. * xcompile/Makefile.in (top_srcdir): (top_builddir): * xcompile/README: * xcompile/langinfo.h (nl_langinfo): New files.
Diffstat (limited to 'src/androidterm.h')
-rw-r--r--src/androidterm.h366
1 files changed, 366 insertions, 0 deletions
diff --git a/src/androidterm.h b/src/androidterm.h
new file mode 100644
index 00000000000..3a0c9f60555
--- /dev/null
+++ b/src/androidterm.h
@@ -0,0 +1,366 @@
1/* Communication module for Android terminals.
2
3Copyright (C) 2023 Free Software Foundation, Inc.
4
5This file is part of GNU Emacs.
6
7GNU Emacs is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation, either version 3 of the License, or (at
10your option) any later version.
11
12GNU Emacs is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
19
20#ifndef _ANDROID_TERM_H_
21#define _ANDROID_TERM_H_
22
23#include "androidgui.h"
24#include "frame.h"
25#include "character.h"
26#include "dispextern.h"
27#include "font.h"
28
29struct android_bitmap_record
30{
31 /* The image backing the bitmap. */
32 Emacs_Pixmap img;
33
34 /* The file from which it comes. */
35 char *file;
36
37 /* The number of references to it. */
38 int refcount;
39
40 /* The height and width. */
41 int height, width;
42};
43
44struct android_display_info
45{
46 /* Chain of all struct android_display_info structures. */
47 struct android_display_info *next;
48
49 /* The terminal. */
50 struct terminal *terminal;
51
52 /* The root window. This field is unused. */
53 Emacs_Window root_window;
54
55 /* List possibly used only for the font cache but probably used for
56 something else too. */
57 Lisp_Object name_list_element;
58
59 /* List of predefined X colors. */
60 Lisp_Object color_map;
61
62 /* DPI of the display. */
63 double resx, resy;
64
65 /* Scratch GC for drawing a cursor in a non-default face. */
66 struct android_gc *scratch_cursor_gc;
67
68 /* Mouse highlight information. */
69 Mouse_HLInfo mouse_highlight;
70
71 /* Number of planes on this screen. Always 24. */
72 int n_planes;
73
74 /* Mask of things causing the mouse to be grabbed. */
75 int grabbed;
76
77 /* Minimum width over all characters in all fonts in font_table. */
78 int smallest_char_width;
79
80 /* Minimum font height over all fonts in font_table. */
81 int smallest_font_height;
82
83 /* The number of fonts opened for this display. */
84 int n_fonts;
85
86 /* Pointer to bitmap records. */
87 struct android_bitmap_record *bitmaps;
88
89 /* Allocated size of bitmaps field. */
90 ptrdiff_t bitmaps_size;
91
92 /* Last used bitmap index. */
93 ptrdiff_t bitmaps_last;
94
95 /* The frame currently with the input focus. */
96 struct frame *focus_frame;
97
98 /* The frame which currently has the visual highlight, and should
99 get keyboard input. It points to the focus frame's selected
100 window's frame, but can differ. */
101 struct frame *highlight_frame;
102
103 /* The frame waiting to be auto-raised in android_read_socket. */
104 struct frame *pending_autoraise_frame;
105
106 /* The frame where the mouse was the last time a button event
107 happened. */
108 struct frame *last_mouse_frame;
109
110 /* The frame where the mouse was the last time the mouse glyph
111 changed. */
112 struct frame *last_mouse_glyph_frame;
113
114 /* The frame where the mouse was the last time mouse motion
115 happened. */
116 struct frame *last_mouse_motion_frame;
117
118 /* Position where the mouse was last time we reported a motion.
119 This is a position on last_mouse_motion_frame. It is used in to
120 report the mouse position as well: see
121 android_mouse_position. */
122 int last_mouse_motion_x, last_mouse_motion_y;
123
124 /* Where the mouse was the last time the mouse moved. */
125 Emacs_Rectangle last_mouse_glyph;
126};
127
128struct android_output
129{
130 /* Graphics contexts for the default font. */
131 struct android_gc *normal_gc, *reverse_gc, *cursor_gc;
132
133 /* The window used for this frame. */
134 Emacs_Window window;
135
136 /* Unused field. */
137 Emacs_Window parent_desc;
138
139 /* Default ASCII font of this frame. */
140 struct font *font;
141
142 /* The baseline offset of the default ASCII font. */
143 int baseline_offset;
144
145 /* If a fontset is specified for this frame instead of font, this
146 value contains an ID of the fontset, else -1. */
147 int fontset;
148
149 /* Various colors. */
150 unsigned long cursor_pixel;
151 unsigned long cursor_foreground_pixel;
152
153 /* Foreground color for scroll bars. A value of -1 means use the
154 default (black for non-toolkit scroll bars). */
155 unsigned long scroll_bar_foreground_pixel;
156
157 /* Background color for scroll bars. A value of -1 means use the
158 default (background color of the frame for non-toolkit scroll
159 bars). */
160 unsigned long scroll_bar_background_pixel;
161
162 /* Unused stuff (cursors). */
163 Emacs_Cursor text_cursor;
164 Emacs_Cursor nontext_cursor;
165 Emacs_Cursor modeline_cursor;
166 Emacs_Cursor hand_cursor;
167 Emacs_Cursor hourglass_cursor;
168 Emacs_Cursor horizontal_drag_cursor;
169 Emacs_Cursor vertical_drag_cursor;
170 Emacs_Cursor current_cursor;
171 Emacs_Cursor left_edge_cursor;
172 Emacs_Cursor top_left_corner_cursor;
173 Emacs_Cursor top_edge_cursor;
174 Emacs_Cursor top_right_corner_cursor;
175 Emacs_Cursor right_edge_cursor;
176 Emacs_Cursor bottom_right_corner_cursor;
177 Emacs_Cursor bottom_edge_cursor;
178 Emacs_Cursor bottom_left_corner_cursor;
179
180 /* This is the Emacs structure for the display this frame is on. */
181 struct android_display_info *display_info;
182
183 /* True if this frame was ever previously visible. */
184 bool_bf has_been_visible : 1;
185
186 /* True if this frame's alpha value is the same for both the active
187 and inactive states. */
188 bool_bf alpha_identical_p : 1;
189
190 /* Flag that indicates whether we've modified the back buffer and
191 need to publish our modifications to the front buffer at a
192 convenient time. */
193 bool_bf need_buffer_flip : 1;
194
195 /* Flag that indicates whether or not the frame contents are
196 complete and can be safely flushed while handling async
197 input. */
198 bool_bf complete : 1;
199
200 /* Relief GCs, colors etc. */
201 struct relief {
202 struct android_gc *gc;
203 unsigned long pixel;
204 } black_relief, white_relief;
205
206 /* The background for which the above relief GCs were set up.
207 They are changed only when a different background is involved. */
208 unsigned long relief_background;
209};
210
211/* Return the Android output data for frame F. */
212#define FRAME_ANDROID_OUTPUT(f) ((f)->output_data.android)
213#define FRAME_OUTPUT_DATA(f) ((f)->output_data.android)
214
215/* Return the Android window used for displaying data in frame F. */
216#define FRAME_ANDROID_WINDOW(f) ((f)->output_data.android->window)
217#define FRAME_NATIVE_WINDOW(f) ((f)->output_data.android->window)
218
219/* Return the need-buffer-flip flag for frame F. */
220#define FRAME_ANDROID_NEED_BUFFER_FLIP(f) \
221 ((f)->output_data.android->need_buffer_flip)
222
223/* Return whether or not the frame F has been completely drawn. Used
224 while handling async input. */
225#define FRAME_ANDROID_COMPLETE_P(f) \
226 ((f)->output_data.android->complete)
227
228#define FRAME_FONT(f) ((f)->output_data.android->font)
229#define FRAME_FONTSET(f) ((f)->output_data.android->fontset)
230
231#define FRAME_BASELINE_OFFSET(f) \
232 ((f)->output_data.android->baseline_offset)
233
234/* This gives the android_display_info structure for the display F is
235 on. */
236#define FRAME_DISPLAY_INFO(f) ((f)->output_data.android->display_info)
237
238/* Some things for X compatibility. */
239#define BLACK_PIX_DEFAULT(f) 0
240#define WHITE_PIX_DEFAULT(f) 0xffffffff
241
242/* Android-specific scroll bar stuff. */
243
244/* We represent scroll bars as lisp vectors. This allows us to place
245 references to them in windows without worrying about whether we'll
246 end up with windows referring to dead scroll bars; the garbage
247 collector will free it when its time comes.
248
249 We use struct scroll_bar as a template for accessing fields of the
250 vector. */
251
252struct scroll_bar
253{
254 /* These fields are shared by all vectors. */
255 union vectorlike_header header;
256
257 /* The window we're a scroll bar for. */
258 Lisp_Object window;
259
260 /* The next and previous in the chain of scroll bars in this frame. */
261 Lisp_Object next, prev;
262
263 /* Fields after 'prev' are not traced by the GC. */
264
265 /* The X window representing this scroll bar. */
266 Emacs_Window x_window;
267
268 /* The position and size of the scroll bar in pixels, relative to the
269 frame. */
270 int top, left, width, height;
271
272 /* The starting and ending positions of the handle, relative to the
273 handle area (i.e. zero is the top position, not
274 SCROLL_BAR_TOP_BORDER). If they're equal, that means the handle
275 hasn't been drawn yet.
276
277 These are not actually the locations where the beginning and end
278 are drawn; in order to keep handles from becoming invisible when
279 editing large files, we establish a minimum height by always
280 drawing handle bottoms VERTICAL_SCROLL_BAR_MIN_HANDLE pixels below
281 where they would be normally; the bottom and top are in a
282 different coordinate system. */
283 int start, end;
284
285 /* If the scroll bar handle is currently being dragged by the user,
286 this is the number of pixels from the top of the handle to the
287 place where the user grabbed it. If the handle isn't currently
288 being dragged, this is -1. */
289 int dragging;
290
291 /* True if the scroll bar is horizontal. */
292 bool horizontal;
293};
294
295/* Turning a lisp vector value into a pointer to a struct scroll_bar. */
296#define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec))
297
298
299
300/* This is a chain of structures for all the Android displays
301 currently in use. There is only ever one, but the rest of Emacs is
302 written with systems on which there can be many in mind. */
303extern struct android_display_info *x_display_list;
304
305
306
307/* Start of function definitions. These should be a neat subset of
308 the same ones in xterm.h, and come in the same order. */
309
310/* From androidfns.c. */
311
312extern void android_free_gcs (struct frame *);
313extern void android_default_font_parameter (struct frame *, Lisp_Object);
314
315/* Defined in androidterm.c. */
316
317extern void android_term_init (void);
318extern void android_set_window_size (struct frame *, bool, int, int);
319extern void android_iconify_frame (struct frame *);
320extern void android_make_frame_visible (struct frame *);
321extern void android_make_frame_invisible (struct frame *);
322extern void android_free_frame_resources (struct frame *);
323
324extern int android_parse_color (struct frame *, const char *,
325 Emacs_Color *);
326extern bool android_alloc_nearest_color (struct frame *, Emacs_Color *);
327extern void android_query_colors (struct frame *, Emacs_Color *, int);
328extern void android_clear_under_internal_border (struct frame *);
329
330extern void syms_of_androidterm (void);
331extern void mark_androidterm (void);
332
333/* Defined in androidfns.c. */
334
335extern void android_change_tab_bar_height (struct frame *, int);
336extern void android_change_tool_bar_height (struct frame *, int);
337extern void android_set_scroll_bar_default_width (struct frame *);
338extern void android_set_scroll_bar_default_height (struct frame *);
339extern bool android_defined_color (struct frame *, const char *,
340 Emacs_Color *, bool, bool);
341extern void android_implicitly_set_name (struct frame *, Lisp_Object,
342 Lisp_Object);
343extern void android_explicitly_set_name (struct frame *, Lisp_Object,
344 Lisp_Object);
345
346extern void syms_of_androidfns (void);
347
348/* Defined in androidfont.c. */
349
350extern struct font_driver androidfont_driver;
351
352extern void init_androidfont (void);
353extern void syms_of_androidfont (void);
354
355extern void android_finalize_font_entity (struct font_entity *);
356
357
358
359#define RGB_TO_ULONG(r, g, b) (((r) << 16) | ((g) << 8) | (b))
360#define RED_FROM_ULONG(color) (((color) >> 16) & 0xff)
361#define GREEN_FROM_ULONG(color) (((color) >> 8) & 0xff)
362#define BLUE_FROM_ULONG(color) ((color) & 0xff)
363
364
365
366#endif /* _ANDROID_TERM_H_ */