785 lines
21 KiB
C++
785 lines
21 KiB
C++
/* Haiku window system support. Hey Emacs, this is -*- C++ -*-
|
|
Copyright (C) 2021-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/>. */
|
|
|
|
#ifndef _HAIKU_SUPPORT_H
|
|
#define _HAIKU_SUPPORT_H
|
|
|
|
#include <stdint.h>
|
|
|
|
#ifdef HAVE_FREETYPE
|
|
#include <ft2build.h>
|
|
#include <fontconfig/fontconfig.h>
|
|
#include FT_FREETYPE_H
|
|
#include FT_SIZES_H
|
|
#endif
|
|
|
|
#ifdef USE_BE_CAIRO
|
|
#include <cairo.h>
|
|
#endif
|
|
|
|
#include <math.h>
|
|
|
|
#include <kernel/OS.h>
|
|
|
|
enum haiku_cursor
|
|
{
|
|
CURSOR_ID_SYSTEM_DEFAULT = 1,
|
|
CURSOR_ID_CONTEXT_MENU = 3,
|
|
CURSOR_ID_COPY = 4,
|
|
CURSOR_ID_CREATE_LINK = 29,
|
|
CURSOR_ID_CROSS_HAIR = 5,
|
|
CURSOR_ID_FOLLOW_LINK = 6,
|
|
CURSOR_ID_GRAB = 7,
|
|
CURSOR_ID_GRABBING = 8,
|
|
CURSOR_ID_HELP = 9,
|
|
CURSOR_ID_I_BEAM = 2,
|
|
CURSOR_ID_I_BEAM_HORIZONTAL = 10,
|
|
CURSOR_ID_MOVE = 11,
|
|
CURSOR_ID_NO_CURSOR = 12,
|
|
CURSOR_ID_NOT_ALLOWED = 13,
|
|
CURSOR_ID_PROGRESS = 14,
|
|
CURSOR_ID_RESIZE_NORTH = 15,
|
|
CURSOR_ID_RESIZE_EAST = 16,
|
|
CURSOR_ID_RESIZE_SOUTH = 17,
|
|
CURSOR_ID_RESIZE_WEST = 18,
|
|
CURSOR_ID_RESIZE_NORTH_EAST = 19,
|
|
CURSOR_ID_RESIZE_NORTH_WEST = 20,
|
|
CURSOR_ID_RESIZE_SOUTH_EAST = 21,
|
|
CURSOR_ID_RESIZE_SOUTH_WEST = 22,
|
|
CURSOR_ID_RESIZE_NORTH_SOUTH = 23,
|
|
CURSOR_ID_RESIZE_EAST_WEST = 24,
|
|
CURSOR_ID_RESIZE_NORTH_EAST_SOUTH_WEST = 25,
|
|
CURSOR_ID_RESIZE_NORTH_WEST_SOUTH_EAST = 26,
|
|
CURSOR_ID_ZOOM_IN = 27,
|
|
CURSOR_ID_ZOOM_OUT = 28
|
|
};
|
|
|
|
enum haiku_z_group
|
|
{
|
|
Z_GROUP_ABOVE,
|
|
Z_GROUP_NONE,
|
|
Z_GROUP_BELOW,
|
|
};
|
|
|
|
enum haiku_alert_type
|
|
{
|
|
HAIKU_EMPTY_ALERT = 0,
|
|
HAIKU_INFO_ALERT,
|
|
HAIKU_IDEA_ALERT,
|
|
HAIKU_WARNING_ALERT,
|
|
HAIKU_STOP_ALERT
|
|
};
|
|
|
|
enum haiku_event_type
|
|
{
|
|
QUIT_REQUESTED,
|
|
FRAME_RESIZED,
|
|
FRAME_EXPOSED,
|
|
KEY_DOWN,
|
|
KEY_UP,
|
|
ACTIVATION,
|
|
MOUSE_MOTION,
|
|
BUTTON_DOWN,
|
|
BUTTON_UP,
|
|
ICONIFICATION,
|
|
MOVE_EVENT,
|
|
SCROLL_BAR_VALUE_EVENT,
|
|
SCROLL_BAR_PART_EVENT,
|
|
SCROLL_BAR_DRAG_EVENT,
|
|
WHEEL_MOVE_EVENT,
|
|
MENU_BAR_RESIZE,
|
|
MENU_BAR_CLICK,
|
|
MENU_BAR_OPEN,
|
|
MENU_BAR_SELECT_EVENT,
|
|
MENU_BAR_CLOSE,
|
|
MENU_BAR_HELP_EVENT,
|
|
ZOOM_EVENT,
|
|
DRAG_AND_DROP_EVENT,
|
|
APP_QUIT_REQUESTED_EVENT,
|
|
DUMMY_EVENT,
|
|
SCREEN_CHANGED_EVENT,
|
|
MENU_BAR_LEFT,
|
|
CLIPBOARD_CHANGED_EVENT,
|
|
FONT_CHANGE_EVENT,
|
|
NOTIFICATION_CLICK_EVENT,
|
|
};
|
|
|
|
struct haiku_clipboard_changed_event
|
|
{
|
|
char dummy;
|
|
};
|
|
|
|
struct haiku_screen_changed_event
|
|
{
|
|
bigtime_t when;
|
|
};
|
|
|
|
struct haiku_quit_requested_event
|
|
{
|
|
void *window;
|
|
};
|
|
|
|
struct haiku_resize_event
|
|
{
|
|
void *window;
|
|
float width;
|
|
float height;
|
|
};
|
|
|
|
struct haiku_expose_event
|
|
{
|
|
void *window;
|
|
int x;
|
|
int y;
|
|
int width;
|
|
int height;
|
|
};
|
|
|
|
struct haiku_drag_and_drop_event
|
|
{
|
|
void *window;
|
|
int x, y;
|
|
void *message;
|
|
};
|
|
|
|
struct haiku_app_quit_requested_event
|
|
{
|
|
char dummy;
|
|
};
|
|
|
|
struct haiku_dummy_event
|
|
{
|
|
char dummy;
|
|
};
|
|
|
|
enum haiku_modifier_specification
|
|
{
|
|
HAIKU_MODIFIER_ALT = 1,
|
|
HAIKU_MODIFIER_CTRL = (1 << 1),
|
|
HAIKU_MODIFIER_SHIFT = (1 << 2),
|
|
HAIKU_MODIFIER_SUPER = (1 << 3),
|
|
};
|
|
|
|
struct haiku_key_event
|
|
{
|
|
void *window;
|
|
int modifiers;
|
|
unsigned keysym;
|
|
uint32_t multibyte_char;
|
|
|
|
/* Time the keypress occurred, in microseconds. */
|
|
bigtime_t time;
|
|
};
|
|
|
|
struct haiku_activation_event
|
|
{
|
|
void *window;
|
|
int activated_p;
|
|
};
|
|
|
|
struct haiku_mouse_motion_event
|
|
{
|
|
void *window;
|
|
bool just_exited_p;
|
|
int x;
|
|
int y;
|
|
bigtime_t time;
|
|
bool dnd_message;
|
|
};
|
|
|
|
struct haiku_menu_bar_left_event
|
|
{
|
|
void *window;
|
|
int x, y;
|
|
};
|
|
|
|
struct haiku_menu_bar_click_event
|
|
{
|
|
void *window;
|
|
int x, y;
|
|
};
|
|
|
|
struct haiku_button_event
|
|
{
|
|
void *window;
|
|
void *scroll_bar;
|
|
int btn_no;
|
|
int modifiers;
|
|
int x;
|
|
int y;
|
|
bigtime_t time;
|
|
};
|
|
|
|
struct haiku_iconification_event
|
|
{
|
|
void *window;
|
|
int iconified_p;
|
|
};
|
|
|
|
struct haiku_move_event
|
|
{
|
|
void *window;
|
|
int x, y;
|
|
int decorator_width;
|
|
int decorator_height;
|
|
};
|
|
|
|
struct haiku_wheel_move_event
|
|
{
|
|
void *window;
|
|
int modifiers;
|
|
float delta_x;
|
|
float delta_y;
|
|
};
|
|
|
|
struct haiku_menu_bar_select_event
|
|
{
|
|
void *window;
|
|
void *ptr;
|
|
};
|
|
|
|
struct haiku_menu_bar_help_event
|
|
{
|
|
void *window;
|
|
int mb_idx;
|
|
void *data;
|
|
bool highlight_p;
|
|
};
|
|
|
|
struct haiku_zoom_event
|
|
{
|
|
void *window;
|
|
int fullscreen_mode;
|
|
};
|
|
|
|
enum haiku_font_specification
|
|
{
|
|
FSPEC_FAMILY = 1,
|
|
FSPEC_STYLE = 1 << 1,
|
|
FSPEC_SLANT = 1 << 2,
|
|
FSPEC_WEIGHT = 1 << 3,
|
|
FSPEC_SPACING = 1 << 4,
|
|
FSPEC_WANTED = 1 << 5,
|
|
FSPEC_NEED_ONE_OF = 1 << 6,
|
|
FSPEC_WIDTH = 1 << 7,
|
|
FSPEC_LANGUAGE = 1 << 8,
|
|
FSPEC_INDICES = 1 << 9,
|
|
FSPEC_ANTIALIAS = 1 << 10,
|
|
};
|
|
|
|
typedef char haiku_font_family_or_style[64];
|
|
|
|
enum haiku_font_slant
|
|
{
|
|
NO_SLANT = -1,
|
|
SLANT_OBLIQUE,
|
|
SLANT_REGULAR,
|
|
SLANT_ITALIC
|
|
};
|
|
|
|
enum haiku_font_width
|
|
{
|
|
NO_WIDTH = -1,
|
|
ULTRA_CONDENSED,
|
|
EXTRA_CONDENSED,
|
|
CONDENSED,
|
|
SEMI_CONDENSED,
|
|
NORMAL_WIDTH,
|
|
SEMI_EXPANDED,
|
|
EXPANDED,
|
|
EXTRA_EXPANDED,
|
|
ULTRA_EXPANDED
|
|
};
|
|
|
|
enum haiku_font_language
|
|
{
|
|
LANGUAGE_CN,
|
|
LANGUAGE_KO,
|
|
LANGUAGE_JP,
|
|
MAX_LANGUAGE /* This isn't a language. */
|
|
};
|
|
|
|
enum haiku_font_weight
|
|
{
|
|
NO_WEIGHT = -1,
|
|
HAIKU_THIN = 0,
|
|
HAIKU_EXTRALIGHT = 40,
|
|
HAIKU_LIGHT = 50,
|
|
HAIKU_SEMI_LIGHT = 75,
|
|
HAIKU_REGULAR = 100,
|
|
HAIKU_SEMI_BOLD = 180,
|
|
HAIKU_BOLD = 200,
|
|
HAIKU_EXTRA_BOLD = 205,
|
|
HAIKU_BOOK = 400,
|
|
HAIKU_HEAVY = 800,
|
|
HAIKU_ULTRA_HEAVY = 900,
|
|
HAIKU_BLACK = 1000,
|
|
HAIKU_MEDIUM = 2000,
|
|
};
|
|
|
|
enum haiku_fullscreen_mode
|
|
{
|
|
FULLSCREEN_MODE_NONE,
|
|
FULLSCREEN_MODE_WIDTH,
|
|
FULLSCREEN_MODE_HEIGHT,
|
|
FULLSCREEN_MODE_BOTH,
|
|
FULLSCREEN_MODE_MAXIMIZED,
|
|
};
|
|
|
|
struct haiku_font_pattern
|
|
{
|
|
/* Bitmask indicating which fields are set. */
|
|
int specified;
|
|
|
|
/* The next font in this list. */
|
|
struct haiku_font_pattern *next;
|
|
|
|
/* The last font in the list during font lookup. */
|
|
struct haiku_font_pattern *last;
|
|
|
|
/* The next font in the list whose family differs from this one.
|
|
Only valid during font lookup. */
|
|
struct haiku_font_pattern *next_family;
|
|
|
|
/* The family of the font. */
|
|
haiku_font_family_or_style family;
|
|
|
|
/* The style of the font. */
|
|
haiku_font_family_or_style style;
|
|
|
|
/* Whether or the font is monospace. */
|
|
int mono_spacing_p;
|
|
|
|
/* The slant of the font. */
|
|
enum haiku_font_slant slant;
|
|
|
|
/* The width of the font. */
|
|
enum haiku_font_width width;
|
|
|
|
/* The language of the font. Used during font lookup. */
|
|
enum haiku_font_language language;
|
|
|
|
/* The weight of the font. */
|
|
enum haiku_font_weight weight;
|
|
|
|
/* List of characters that must be present in the font for the match
|
|
to succeed. */
|
|
int *wanted_chars;
|
|
|
|
/* The number of characters in `wanted_chars'. */
|
|
int want_chars_len;
|
|
|
|
/* List of characters. The font must fulfill at least one of
|
|
them for the match to succeed. */
|
|
int *need_one_of;
|
|
|
|
/* The number of characters in `need_one_of'. */
|
|
int need_one_of_len;
|
|
|
|
/* The index of the family of the font this pattern represents. */
|
|
int family_index;
|
|
|
|
/* The index of the style of the font this pattern represents. */
|
|
int style_index;
|
|
|
|
/* Temporary field used during font enumeration. */
|
|
int oblique_seen_p;
|
|
|
|
/* Whether or not to enable antialiasing in the font. This field is
|
|
special in that it's not handled by `BFont_open_pattern'. */
|
|
int use_antialiasing;
|
|
};
|
|
|
|
struct haiku_scroll_bar_value_event
|
|
{
|
|
void *scroll_bar;
|
|
void *window;
|
|
int position;
|
|
};
|
|
|
|
struct haiku_scroll_bar_drag_event
|
|
{
|
|
void *scroll_bar;
|
|
void *window;
|
|
int dragging_p;
|
|
};
|
|
|
|
enum haiku_scroll_bar_part
|
|
{
|
|
HAIKU_SCROLL_BAR_UP_BUTTON,
|
|
HAIKU_SCROLL_BAR_DOWN_BUTTON
|
|
};
|
|
|
|
struct haiku_scroll_bar_part_event
|
|
{
|
|
void *scroll_bar;
|
|
void *window;
|
|
enum haiku_scroll_bar_part part;
|
|
};
|
|
|
|
struct haiku_menu_bar_resize_event
|
|
{
|
|
void *window;
|
|
int width;
|
|
int height;
|
|
};
|
|
|
|
struct haiku_menu_bar_state_event
|
|
{
|
|
void *window;
|
|
};
|
|
|
|
enum haiku_what_font
|
|
{
|
|
FIXED_FAMILY,
|
|
FIXED_STYLE,
|
|
DEFAULT_FAMILY,
|
|
DEFAULT_STYLE,
|
|
};
|
|
|
|
struct haiku_font_change_event
|
|
{
|
|
/* New family, style and size of the font. */
|
|
haiku_font_family_or_style new_family;
|
|
haiku_font_family_or_style new_style;
|
|
int new_size;
|
|
|
|
/* What changed. FIXED_FAMILY means this is the new fixed font.
|
|
DEFAULT_FAMILY means this is the new plain font. The other enums
|
|
have no meaning. */
|
|
enum haiku_what_font what;
|
|
};
|
|
|
|
struct haiku_notification_click_event
|
|
{
|
|
/* ID uniquely designating a single notification. */
|
|
intmax_t id;
|
|
};
|
|
|
|
struct haiku_session_manager_reply
|
|
{
|
|
bool quit_reply;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
/* Haiku's built in Height and Width functions for calculating
|
|
rectangle sizes are broken, probably for compatibility with BeOS:
|
|
they do not round up in a reasonable fashion, and they return the
|
|
numerical difference between the end and start sides in both
|
|
directions, instead of the actual size.
|
|
|
|
For example:
|
|
|
|
BRect (1, 1, 5, 5).IntegerWidth ()
|
|
|
|
Will return 4, when in reality the rectangle is 5 pixels wide,
|
|
since the left corner is also a pixel!
|
|
|
|
All code in Emacs should use the macros below to calculate the
|
|
dimensions of a BRect, instead of relying on the broken Width and
|
|
Height functions. */
|
|
|
|
#define BE_RECT_HEIGHT(rect) (ceil (((rect).bottom - (rect).top) + 1))
|
|
#define BE_RECT_WIDTH(rect) (ceil (((rect).right - (rect).left) + 1))
|
|
#endif /* __cplusplus */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
#include <OS.h>
|
|
|
|
#ifdef __cplusplus
|
|
typedef void *haiku;
|
|
|
|
extern void haiku_put_pixel (haiku, int, int, unsigned long);
|
|
extern unsigned long haiku_get_pixel (haiku, int, int);
|
|
#endif
|
|
|
|
extern port_id port_application_to_emacs;
|
|
extern port_id port_popup_menu_to_emacs;
|
|
extern port_id port_emacs_to_session_manager;
|
|
|
|
extern void haiku_io_init (void);
|
|
extern void haiku_io_init_in_app_thread (void);
|
|
|
|
extern void haiku_read_size (ssize_t *, bool);
|
|
|
|
extern int haiku_read (enum haiku_event_type *, void *, ssize_t);
|
|
extern int haiku_read_with_timeout (enum haiku_event_type *, void *, ssize_t,
|
|
bigtime_t, bool);
|
|
extern int haiku_write (enum haiku_event_type, void *);
|
|
extern int haiku_write_without_signal (enum haiku_event_type, void *, bool);
|
|
|
|
extern void rgb_color_hsl (uint32_t, double *, double *, double *);
|
|
extern void hsl_color_rgb (double, double, double, uint32_t *);
|
|
|
|
extern void *BBitmap_new (int, int, int);
|
|
extern void *BBitmap_data (void *);
|
|
extern int BBitmap_convert (void *, void **);
|
|
extern void be_draw_cross_on_pixmap (void *, int, int, int, int,
|
|
uint32_t);
|
|
|
|
extern void BBitmap_free (void *);
|
|
|
|
extern void BBitmap_dimensions (void *, int *, int *, int *, int *,
|
|
int32_t *, int *);
|
|
extern void *BApplication_setup (void);
|
|
extern void *BWindow_new (void **);
|
|
extern void BWindow_quit (void *);
|
|
|
|
extern void BWindow_set_offset (void *, int, int);
|
|
extern void BWindow_iconify (void *);
|
|
extern void BWindow_set_visible (void *, int);
|
|
extern void BWindow_retitle (void *, const char *);
|
|
extern void BWindow_resize (void *, int, int);
|
|
extern void BWindow_activate (void *);
|
|
extern void BWindow_center_on_screen (void *);
|
|
extern void BWindow_change_decoration (void *, int);
|
|
extern void BWindow_set_tooltip_decoration (void *);
|
|
extern void BWindow_set_avoid_focus (void *, int);
|
|
extern void BWindow_set_size_alignment (void *, int, int);
|
|
extern void BWindow_sync (void *);
|
|
extern void BWindow_send_behind (void *, void *);
|
|
extern bool BWindow_is_active (void *);
|
|
extern void BWindow_set_override_redirect (void *, bool);
|
|
extern void BWindow_dimensions (void *, int *, int *);
|
|
extern void BWindow_set_z_group (void *, enum haiku_z_group);
|
|
extern void BWindow_set_sticky (void *, bool);
|
|
extern void BWindow_Flush (void *);
|
|
|
|
extern void BFont_close (void *);
|
|
extern void BFont_metrics (void *, int *, int *, int *, int *,
|
|
int *, int *, int *, int *, int *, int *);
|
|
extern int BFont_have_char_p (void *, int32_t);
|
|
extern int BFont_have_char_block (void *, int32_t, int32_t);
|
|
extern void BFont_char_bounds (void *, const char *, int *, int *, int *);
|
|
extern void BFont_nchar_bounds (void *, const char *, int *, int *,
|
|
int *, int32_t);
|
|
extern struct haiku_font_pattern *BFont_find (struct haiku_font_pattern *);
|
|
|
|
extern void BView_StartClip (void *);
|
|
extern void BView_EndClip (void *);
|
|
extern void BView_SetHighColor (void *, uint32_t);
|
|
extern void BView_SetLowColor (void *, uint32_t);
|
|
extern void BView_SetPenSize (void *, int);
|
|
extern void BView_SetFont (void *, void *);
|
|
extern void BView_MovePenTo (void *, int, int);
|
|
extern void BView_DrawString (void *, const char *, ptrdiff_t);
|
|
extern void BView_DrawChar (void *, char);
|
|
extern void BView_FillRectangle (void *, int, int, int, int);
|
|
extern void BView_FillRectangleAbs (void *, int, int, int, int);
|
|
extern void BView_FillTriangle (void *, int, int, int, int, int, int);
|
|
extern void BView_StrokeRectangle (void *, int, int, int, int);
|
|
extern void BView_SetViewColor (void *, uint32_t);
|
|
extern void BView_ClipToRect (void *, int, int, int, int);
|
|
extern void BView_ClipToInverseRect (void *, int, int, int, int);
|
|
extern void BView_StrokeLine (void *, int, int, int, int);
|
|
extern void BView_CopyBits (void *, int, int, int, int, int, int, int, int);
|
|
extern void BView_InvertRect (void *, int, int, int, int);
|
|
extern void BView_DrawBitmap (void *, void *, int, int, int, int, int, int,
|
|
int, int, bool);
|
|
extern void BView_DrawBitmapWithEraseOp (void *, void *, int, int, int, int);
|
|
extern void BView_DrawBitmapTiled (void *, void *, int, int,
|
|
int, int, int, int, int, int);
|
|
|
|
extern void BView_resize_to (void *, int, int);
|
|
extern void BView_set_view_cursor (void *, void *);
|
|
extern void BView_move_frame (void *, int, int, int, int);
|
|
extern void BView_scroll_bar_update (void *, int, int, int, int, bool);
|
|
|
|
extern void *be_transform_bitmap (void *, void *, uint32_t, double,
|
|
int, int, bool);
|
|
extern void be_apply_affine_transform (void *, double, double, double,
|
|
double, double, double);
|
|
extern void be_apply_inverse_transform (double (*)[3], int, int, int *, int *);
|
|
extern void be_draw_image_mask (void *, void *, int, int, int, int, int, int,
|
|
int, int, uint32_t);
|
|
extern void be_draw_bitmap_with_mask (void *, void *, void *, int, int, int,
|
|
int, int, int, int, int, bool);
|
|
|
|
extern void be_get_display_resolution (double *, double *);
|
|
extern void be_get_screen_dimensions (int *, int *);
|
|
|
|
/* Functions for creating and freeing cursors. */
|
|
extern void *be_create_cursor_from_id (int);
|
|
extern void *be_create_pixmap_cursor (void *, int, int);
|
|
extern void be_delete_cursor (void *);
|
|
|
|
extern void *be_make_scroll_bar_for_view (void *, int, int, int, int, int);
|
|
extern void BScrollBar_delete (void *);
|
|
extern int BScrollBar_default_size (int);
|
|
|
|
extern void BView_invalidate (void *);
|
|
extern void BView_draw_lock (void *, bool, int, int, int, int);
|
|
extern void BView_invalidate_region (void *, int, int, int, int);
|
|
extern void BView_draw_unlock (void *);
|
|
extern void BBitmap_import_fringe_bitmap (void *, unsigned short *, int, int);
|
|
|
|
extern void haiku_font_pattern_free (struct haiku_font_pattern *);
|
|
|
|
extern int BFont_open_pattern (struct haiku_font_pattern *, void **, float);
|
|
extern void BFont_populate_fixed_family (struct haiku_font_pattern *);
|
|
extern void BFont_populate_plain_family (struct haiku_font_pattern *);
|
|
|
|
extern void BView_publish_scroll_bar (void *, int, int, int, int);
|
|
extern void BView_forget_scroll_bar (void *, int, int, int, int);
|
|
extern bool BView_inside_scroll_bar (void *, int, int);
|
|
extern void BView_get_mouse (void *, int *, int *);
|
|
extern void BView_convert_to_screen (void *, int *, int *);
|
|
extern void BView_convert_from_screen (void *, int *, int *);
|
|
|
|
extern void BView_emacs_delete (void *);
|
|
|
|
extern void *BPopUpMenu_new (const char *);
|
|
|
|
extern void BMenu_add_item (void *, const char *, void *, bool,
|
|
bool, bool, void *, const char *,
|
|
const char *);
|
|
extern void BMenu_add_separator (void *);
|
|
extern void *BMenu_new_submenu (void *, const char *, bool);
|
|
extern void *BMenu_new_menu_bar_submenu (void *, const char *);
|
|
extern int BMenu_count_items (void *);
|
|
extern void *BMenu_item_at (void *, int);
|
|
extern void *BMenu_run (void *, int, int, void (*) (void *, void *),
|
|
void (*) (void), void (*) (void),
|
|
struct timespec (*) (void), void *);
|
|
extern void BPopUpMenu_delete (void *);
|
|
extern void *BMenuBar_new (void *);
|
|
extern void BMenu_delete_all (void *);
|
|
extern void BMenuBar_delete (void *);
|
|
extern void BMenu_item_set_label (void *, const char *);
|
|
extern void *BMenu_item_get_menu (void *);
|
|
extern void BMenu_delete_from (void *, int, int);
|
|
|
|
extern void haiku_ring_bell (void);
|
|
|
|
extern void *BAlert_new (const char *, enum haiku_alert_type);
|
|
extern void *BAlert_add_button (void *, const char *);
|
|
extern void BAlert_set_offset_spacing (void *);
|
|
extern int32 BAlert_go (void *, void (*) (void), void (*) (void),
|
|
void (*) (void));
|
|
extern void BButton_set_enabled (void *, int);
|
|
extern void BView_set_tooltip (void *, const char *);
|
|
extern void BView_show_tooltip (void *);
|
|
extern void be_show_sticky_tooltip (void *, const char *, int, int);
|
|
|
|
extern void BAlert_delete (void *);
|
|
|
|
extern void EmacsWindow_parent_to (void *, void *);
|
|
extern void EmacsWindow_unparent (void *);
|
|
extern void EmacsWindow_move_weak_child (void *, void *, int, int);
|
|
|
|
extern void be_get_version_string (char *, int);
|
|
extern int be_get_display_planes (void);
|
|
extern int be_get_display_color_cells (void);
|
|
extern bool be_is_display_grayscale (void);
|
|
extern void be_warp_pointer (int, int);
|
|
|
|
extern bool haiku_should_pass_control_tab_to_system (void);
|
|
|
|
extern void EmacsView_set_up_double_buffering (void *);
|
|
extern void EmacsView_disable_double_buffering (void *);
|
|
extern void EmacsView_flip_and_blit (void *);
|
|
extern int EmacsView_double_buffered_p (void *);
|
|
|
|
extern char *be_popup_file_dialog (int, const char *, int,
|
|
int, void *, const char *,
|
|
const char *, void (*) (void));
|
|
|
|
#ifdef HAVE_NATIVE_IMAGE_API
|
|
extern int be_can_translate_type_to_bitmap_p (const char *);
|
|
extern void *be_translate_bitmap_from_file_name (const char *);
|
|
extern void *be_translate_bitmap_from_memory (const void *, size_t);
|
|
#endif
|
|
|
|
extern bool BMenuBar_start_tracking (void *);
|
|
extern size_t BBitmap_bytes_length (void *);
|
|
|
|
#ifdef USE_BE_CAIRO
|
|
extern cairo_t *EmacsView_cairo_context (void *);
|
|
extern void BView_cr_dump_clipping (void *, cairo_t *);
|
|
extern void EmacsWindow_begin_cr_critical_section (void *);
|
|
extern void EmacsWindow_end_cr_critical_section (void *);
|
|
#endif
|
|
|
|
extern void BMenu_add_title (void *, const char *);
|
|
|
|
extern int be_plain_font_height (void);
|
|
extern int be_string_width_with_plain_font (const char *);
|
|
extern void be_init_font_data (void);
|
|
extern void be_evict_font_cache (void);
|
|
extern int be_get_display_screens (void);
|
|
extern bool be_use_subpixel_antialiasing (void);
|
|
extern const char *be_find_setting (const char *);
|
|
extern haiku_font_family_or_style *be_list_font_families (size_t *);
|
|
extern void be_font_style_to_flags (const char *, struct haiku_font_pattern *);
|
|
extern void *be_open_font_at_index (int, int, float);
|
|
extern void be_set_font_antialiasing (void *, bool);
|
|
extern int be_get_ui_color (const char *, uint32_t *);
|
|
|
|
extern void BMessage_delete (void *);
|
|
|
|
extern bool be_drag_message (void *, void *, bool, void (*) (void),
|
|
void (*) (void), void (*) (void),
|
|
bool (*) (void));
|
|
extern bool be_drag_and_drop_in_progress (void);
|
|
|
|
extern bool be_replay_menu_bar_event (void *, struct haiku_menu_bar_click_event *);
|
|
extern bool be_select_font (void (*) (void), bool (*) (void),
|
|
haiku_font_family_or_style *,
|
|
haiku_font_family_or_style *,
|
|
int *, bool, int, int, int,
|
|
bool, bool *);
|
|
|
|
extern int be_find_font_indices (struct haiku_font_pattern *, int *, int *);
|
|
extern status_t be_roster_launch (const char *, const char *, char **,
|
|
ptrdiff_t, void *, team_id *);
|
|
extern void be_get_window_decorator_dimensions (void *, int *, int *, int *, int *);
|
|
extern void be_get_window_decorator_frame (void *, int *, int *, int *, int *);
|
|
extern void be_send_move_frame_event (void *);
|
|
extern void be_set_window_fullscreen_mode (void *, enum haiku_fullscreen_mode);
|
|
|
|
extern status_t be_write_node_message (const char *, const char *, void *);
|
|
extern void be_send_message (const char *, void *);
|
|
|
|
extern void be_lock_window (void *);
|
|
extern void be_unlock_window (void *);
|
|
extern bool be_get_explicit_workarea (int *, int *, int *, int *);
|
|
extern void be_clear_grab_view (void);
|
|
extern void be_set_use_frame_synchronization (void *, bool);
|
|
|
|
extern void be_listen_font_settings (void);
|
|
|
|
extern bool be_lock_font_defaults (void);
|
|
extern const char *be_get_font_default (enum haiku_what_font);
|
|
extern int be_get_font_size (enum haiku_what_font);
|
|
extern void be_unlock_font_defaults (void);
|
|
#ifdef __cplusplus
|
|
}
|
|
|
|
extern _Noreturn void gui_abort (const char *);
|
|
extern void *find_appropriate_view_for_draw (void *);
|
|
#endif /* _cplusplus */
|
|
|
|
#endif /* _HAIKU_SUPPORT_H_ */
|
|
|
|
// Local Variables:
|
|
// eval: (setf (alist-get 'inextern-lang c-offsets-alist) 0)
|
|
// End:
|