root/src/haiku_support.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


     1 /* Haiku window system support.  Hey Emacs, this is -*- C++ -*-
     2    Copyright (C) 2021-2023 Free Software Foundation, Inc.
     3 
     4 This file is part of GNU Emacs.
     5 
     6 GNU Emacs is free software: you can redistribute it and/or modify
     7 it under the terms of the GNU General Public License as published by
     8 the Free Software Foundation, either version 3 of the License, or (at
     9 your option) any later version.
    10 
    11 GNU Emacs is distributed in the hope that it will be useful,
    12 but WITHOUT ANY WARRANTY; without even the implied warranty of
    13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    14 GNU General Public License for more details.
    15 
    16 You should have received a copy of the GNU General Public License
    17 along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
    18 
    19 #ifndef _HAIKU_SUPPORT_H
    20 #define _HAIKU_SUPPORT_H
    21 
    22 #include <stdint.h>
    23 
    24 #ifdef HAVE_FREETYPE
    25 #include <ft2build.h>
    26 #include <fontconfig/fontconfig.h>
    27 #include FT_FREETYPE_H
    28 #include FT_SIZES_H
    29 #endif
    30 
    31 #ifdef USE_BE_CAIRO
    32 #include <cairo.h>
    33 #endif
    34 
    35 #include <math.h>
    36 
    37 #include <kernel/OS.h>
    38 
    39 enum haiku_cursor
    40   {
    41     CURSOR_ID_SYSTEM_DEFAULT               = 1,
    42     CURSOR_ID_CONTEXT_MENU                 = 3,
    43     CURSOR_ID_COPY                         = 4,
    44     CURSOR_ID_CREATE_LINK                  = 29,
    45     CURSOR_ID_CROSS_HAIR                   = 5,
    46     CURSOR_ID_FOLLOW_LINK                  = 6,
    47     CURSOR_ID_GRAB                         = 7,
    48     CURSOR_ID_GRABBING                     = 8,
    49     CURSOR_ID_HELP                         = 9,
    50     CURSOR_ID_I_BEAM                       = 2,
    51     CURSOR_ID_I_BEAM_HORIZONTAL            = 10,
    52     CURSOR_ID_MOVE                         = 11,
    53     CURSOR_ID_NO_CURSOR                    = 12,
    54     CURSOR_ID_NOT_ALLOWED                  = 13,
    55     CURSOR_ID_PROGRESS                     = 14,
    56     CURSOR_ID_RESIZE_NORTH                 = 15,
    57     CURSOR_ID_RESIZE_EAST                  = 16,
    58     CURSOR_ID_RESIZE_SOUTH                 = 17,
    59     CURSOR_ID_RESIZE_WEST                  = 18,
    60     CURSOR_ID_RESIZE_NORTH_EAST            = 19,
    61     CURSOR_ID_RESIZE_NORTH_WEST            = 20,
    62     CURSOR_ID_RESIZE_SOUTH_EAST            = 21,
    63     CURSOR_ID_RESIZE_SOUTH_WEST            = 22,
    64     CURSOR_ID_RESIZE_NORTH_SOUTH           = 23,
    65     CURSOR_ID_RESIZE_EAST_WEST             = 24,
    66     CURSOR_ID_RESIZE_NORTH_EAST_SOUTH_WEST = 25,
    67     CURSOR_ID_RESIZE_NORTH_WEST_SOUTH_EAST = 26,
    68     CURSOR_ID_ZOOM_IN                      = 27,
    69     CURSOR_ID_ZOOM_OUT                     = 28
    70   };
    71 
    72 enum haiku_z_group
    73   {
    74     Z_GROUP_ABOVE,
    75     Z_GROUP_NONE,
    76     Z_GROUP_BELOW,
    77   };
    78 
    79 enum haiku_alert_type
    80   {
    81     HAIKU_EMPTY_ALERT = 0,
    82     HAIKU_INFO_ALERT,
    83     HAIKU_IDEA_ALERT,
    84     HAIKU_WARNING_ALERT,
    85     HAIKU_STOP_ALERT
    86   };
    87 
    88 enum haiku_event_type
    89   {
    90     QUIT_REQUESTED,
    91     FRAME_RESIZED,
    92     FRAME_EXPOSED,
    93     KEY_DOWN,
    94     KEY_UP,
    95     ACTIVATION,
    96     MOUSE_MOTION,
    97     BUTTON_DOWN,
    98     BUTTON_UP,
    99     ICONIFICATION,
   100     MOVE_EVENT,
   101     SCROLL_BAR_VALUE_EVENT,
   102     SCROLL_BAR_PART_EVENT,
   103     SCROLL_BAR_DRAG_EVENT,
   104     WHEEL_MOVE_EVENT,
   105     MENU_BAR_RESIZE,
   106     MENU_BAR_CLICK,
   107     MENU_BAR_OPEN,
   108     MENU_BAR_SELECT_EVENT,
   109     MENU_BAR_CLOSE,
   110     MENU_BAR_HELP_EVENT,
   111     ZOOM_EVENT,
   112     DRAG_AND_DROP_EVENT,
   113     APP_QUIT_REQUESTED_EVENT,
   114     DUMMY_EVENT,
   115     SCREEN_CHANGED_EVENT,
   116     MENU_BAR_LEFT,
   117     CLIPBOARD_CHANGED_EVENT,
   118     FONT_CHANGE_EVENT,
   119     NOTIFICATION_CLICK_EVENT,
   120   };
   121 
   122 struct haiku_clipboard_changed_event
   123 {
   124   char dummy;
   125 };
   126 
   127 struct haiku_screen_changed_event
   128 {
   129   bigtime_t when;
   130 };
   131 
   132 struct haiku_quit_requested_event
   133 {
   134   void *window;
   135 };
   136 
   137 struct haiku_resize_event
   138 {
   139   void *window;
   140   float width;
   141   float height;
   142 };
   143 
   144 struct haiku_expose_event
   145 {
   146   void *window;
   147   int x;
   148   int y;
   149   int width;
   150   int height;
   151 };
   152 
   153 struct haiku_drag_and_drop_event
   154 {
   155   void *window;
   156   int x, y;
   157   void *message;
   158 };
   159 
   160 struct haiku_app_quit_requested_event
   161 {
   162   char dummy;
   163 };
   164 
   165 struct haiku_dummy_event
   166 {
   167   char dummy;
   168 };
   169 
   170 enum haiku_modifier_specification
   171   {
   172     HAIKU_MODIFIER_ALT   = 1,
   173     HAIKU_MODIFIER_CTRL  = (1 << 1),
   174     HAIKU_MODIFIER_SHIFT = (1 << 2),
   175     HAIKU_MODIFIER_SUPER = (1 << 3),
   176   };
   177 
   178 struct haiku_key_event
   179 {
   180   void *window;
   181   int modifiers;
   182   unsigned keysym;
   183   uint32_t multibyte_char;
   184 
   185   /* Time the keypress occurred, in microseconds.  */
   186   bigtime_t time;
   187 };
   188 
   189 struct haiku_activation_event
   190 {
   191   void *window;
   192   int activated_p;
   193 };
   194 
   195 struct haiku_mouse_motion_event
   196 {
   197   void *window;
   198   bool just_exited_p;
   199   int x;
   200   int y;
   201   bigtime_t time;
   202   bool dnd_message;
   203 };
   204 
   205 struct haiku_menu_bar_left_event
   206 {
   207   void *window;
   208   int x, y;
   209 };
   210 
   211 struct haiku_menu_bar_click_event
   212 {
   213   void *window;
   214   int x, y;
   215 };
   216 
   217 struct haiku_button_event
   218 {
   219   void *window;
   220   void *scroll_bar;
   221   int btn_no;
   222   int modifiers;
   223   int x;
   224   int y;
   225   bigtime_t time;
   226 };
   227 
   228 struct haiku_iconification_event
   229 {
   230   void *window;
   231   int iconified_p;
   232 };
   233 
   234 struct haiku_move_event
   235 {
   236   void *window;
   237   int x, y;
   238   int decorator_width;
   239   int decorator_height;
   240 };
   241 
   242 struct haiku_wheel_move_event
   243 {
   244   void *window;
   245   int modifiers;
   246   float delta_x;
   247   float delta_y;
   248 };
   249 
   250 struct haiku_menu_bar_select_event
   251 {
   252   void *window;
   253   void *ptr;
   254 };
   255 
   256 struct haiku_menu_bar_help_event
   257 {
   258   void *window;
   259   int mb_idx;
   260   void *data;
   261   bool highlight_p;
   262 };
   263 
   264 struct haiku_zoom_event
   265 {
   266   void *window;
   267   int fullscreen_mode;
   268 };
   269 
   270 enum haiku_font_specification
   271   {
   272     FSPEC_FAMILY      = 1,
   273     FSPEC_STYLE       = 1 << 1,
   274     FSPEC_SLANT       = 1 << 2,
   275     FSPEC_WEIGHT      = 1 << 3,
   276     FSPEC_SPACING     = 1 << 4,
   277     FSPEC_WANTED      = 1 << 5,
   278     FSPEC_NEED_ONE_OF = 1 << 6,
   279     FSPEC_WIDTH       = 1 << 7,
   280     FSPEC_LANGUAGE    = 1 << 8,
   281     FSPEC_INDICES     = 1 << 9,
   282     FSPEC_ANTIALIAS   = 1 << 10,
   283   };
   284 
   285 typedef char haiku_font_family_or_style[64];
   286 
   287 enum haiku_font_slant
   288   {
   289     NO_SLANT = -1,
   290     SLANT_OBLIQUE,
   291     SLANT_REGULAR,
   292     SLANT_ITALIC
   293   };
   294 
   295 enum haiku_font_width
   296   {
   297     NO_WIDTH = -1,
   298     ULTRA_CONDENSED,
   299     EXTRA_CONDENSED,
   300     CONDENSED,
   301     SEMI_CONDENSED,
   302     NORMAL_WIDTH,
   303     SEMI_EXPANDED,
   304     EXPANDED,
   305     EXTRA_EXPANDED,
   306     ULTRA_EXPANDED
   307   };
   308 
   309 enum haiku_font_language
   310   {
   311     LANGUAGE_CN,
   312     LANGUAGE_KO,
   313     LANGUAGE_JP,
   314     MAX_LANGUAGE /* This isn't a language. */
   315   };
   316 
   317 enum haiku_font_weight
   318   {
   319     NO_WEIGHT         = -1,
   320     HAIKU_THIN        = 0,
   321     HAIKU_EXTRALIGHT  = 40,
   322     HAIKU_LIGHT       = 50,
   323     HAIKU_SEMI_LIGHT  = 75,
   324     HAIKU_REGULAR     = 100,
   325     HAIKU_SEMI_BOLD   = 180,
   326     HAIKU_BOLD        = 200,
   327     HAIKU_EXTRA_BOLD  = 205,
   328     HAIKU_BOOK        = 400,
   329     HAIKU_HEAVY       = 800,
   330     HAIKU_ULTRA_HEAVY = 900,
   331     HAIKU_BLACK       = 1000,
   332     HAIKU_MEDIUM      = 2000,
   333   };
   334 
   335 enum haiku_fullscreen_mode
   336   {
   337     FULLSCREEN_MODE_NONE,
   338     FULLSCREEN_MODE_WIDTH,
   339     FULLSCREEN_MODE_HEIGHT,
   340     FULLSCREEN_MODE_BOTH,
   341     FULLSCREEN_MODE_MAXIMIZED,
   342   };
   343 
   344 struct haiku_font_pattern
   345 {
   346   /* Bitmask indicating which fields are set.  */
   347   int specified;
   348 
   349   /* The next font in this list.  */
   350   struct haiku_font_pattern *next;
   351 
   352   /* The last font in the list during font lookup.  */
   353   struct haiku_font_pattern *last;
   354 
   355   /* The next font in the list whose family differs from this one.
   356      Only valid during font lookup.  */
   357   struct haiku_font_pattern *next_family;
   358 
   359   /* The family of the font.  */
   360   haiku_font_family_or_style family;
   361 
   362   /* The style of the font.  */
   363   haiku_font_family_or_style style;
   364 
   365   /* Whether or the font is monospace.  */
   366   int mono_spacing_p;
   367 
   368   /* The slant of the font.  */
   369   enum haiku_font_slant slant;
   370 
   371   /* The width of the font.  */
   372   enum haiku_font_width width;
   373 
   374   /* The language of the font.  Used during font lookup.  */
   375   enum haiku_font_language language;
   376 
   377   /* The weight of the font.  */
   378   enum haiku_font_weight weight;
   379 
   380   /* List of characters that must be present in the font for the match
   381      to succeed.  */
   382   int *wanted_chars;
   383 
   384   /* The number of characters in `wanted_chars'.  */
   385   int want_chars_len;
   386 
   387   /* List of characters.  The font must fulfill at least one of
   388      them for the match to succeed.  */
   389   int *need_one_of;
   390 
   391   /* The number of characters in `need_one_of'.  */
   392   int need_one_of_len;
   393 
   394   /* The index of the family of the font this pattern represents.  */
   395   int family_index;
   396 
   397   /* The index of the style of the font this pattern represents.  */
   398   int style_index;
   399 
   400   /* Temporary field used during font enumeration.  */
   401   int oblique_seen_p;
   402 
   403   /* Whether or not to enable antialiasing in the font.  This field is
   404      special in that it's not handled by `BFont_open_pattern'.  */
   405   int use_antialiasing;
   406 };
   407 
   408 struct haiku_scroll_bar_value_event
   409 {
   410   void *scroll_bar;
   411   void *window;
   412   int position;
   413 };
   414 
   415 struct haiku_scroll_bar_drag_event
   416 {
   417   void *scroll_bar;
   418   void *window;
   419   int dragging_p;
   420 };
   421 
   422 enum haiku_scroll_bar_part
   423   {
   424     HAIKU_SCROLL_BAR_UP_BUTTON,
   425     HAIKU_SCROLL_BAR_DOWN_BUTTON
   426   };
   427 
   428 struct haiku_scroll_bar_part_event
   429 {
   430   void *scroll_bar;
   431   void *window;
   432   enum haiku_scroll_bar_part part;
   433 };
   434 
   435 struct haiku_menu_bar_resize_event
   436 {
   437   void *window;
   438   int width;
   439   int height;
   440 };
   441 
   442 struct haiku_menu_bar_state_event
   443 {
   444   void *window;
   445 };
   446 
   447 enum haiku_what_font
   448   {
   449     FIXED_FAMILY,
   450     FIXED_STYLE,
   451     DEFAULT_FAMILY,
   452     DEFAULT_STYLE,
   453   };
   454 
   455 struct haiku_font_change_event
   456 {
   457   /* New family, style and size of the font.  */
   458   haiku_font_family_or_style new_family;
   459   haiku_font_family_or_style new_style;
   460   int new_size;
   461 
   462   /* What changed.  FIXED_FAMILY means this is the new fixed font.
   463      DEFAULT_FAMILY means this is the new plain font.  The other enums
   464      have no meaning.  */
   465   enum haiku_what_font what;
   466 };
   467 
   468 struct haiku_notification_click_event
   469 {
   470   /* ID uniquely designating a single notification.  */
   471   intmax_t id;
   472 };
   473 
   474 struct haiku_session_manager_reply
   475 {
   476   bool quit_reply;
   477 };
   478 
   479 #ifdef __cplusplus
   480 /* Haiku's built in Height and Width functions for calculating
   481    rectangle sizes are broken, probably for compatibility with BeOS:
   482    they do not round up in a reasonable fashion, and they return the
   483    numerical difference between the end and start sides in both
   484    directions, instead of the actual size.
   485 
   486    For example:
   487 
   488      BRect (1, 1, 5, 5).IntegerWidth ()
   489 
   490    Will return 4, when in reality the rectangle is 5 pixels wide,
   491    since the left corner is also a pixel!
   492 
   493    All code in Emacs should use the macros below to calculate the
   494    dimensions of a BRect, instead of relying on the broken Width and
   495    Height functions.  */
   496 
   497 #define BE_RECT_HEIGHT(rect)    (ceil (((rect).bottom - (rect).top) + 1))
   498 #define BE_RECT_WIDTH(rect)     (ceil (((rect).right - (rect).left) + 1))
   499 #endif /* __cplusplus */
   500 
   501 #ifdef __cplusplus
   502 extern "C"
   503 {
   504 #endif
   505 #include <OS.h>
   506 
   507 #ifdef __cplusplus
   508 typedef void *haiku;
   509 
   510 extern void haiku_put_pixel (haiku, int, int, unsigned long);
   511 extern unsigned long haiku_get_pixel (haiku, int, int);
   512 #endif
   513 
   514 extern port_id port_application_to_emacs;
   515 extern port_id port_popup_menu_to_emacs;
   516 extern port_id port_emacs_to_session_manager;
   517 
   518 extern void haiku_io_init (void);
   519 extern void haiku_io_init_in_app_thread (void);
   520 
   521 extern void haiku_read_size (ssize_t *, bool);
   522 
   523 extern int haiku_read (enum haiku_event_type *, void *, ssize_t);
   524 extern int haiku_read_with_timeout (enum haiku_event_type *, void *, ssize_t,
   525                                     bigtime_t, bool);
   526 extern int haiku_write (enum haiku_event_type, void *);
   527 extern int haiku_write_without_signal (enum haiku_event_type, void *, bool);
   528 
   529 extern void rgb_color_hsl (uint32_t, double *, double *, double *);
   530 extern void hsl_color_rgb (double, double, double, uint32_t *);
   531 
   532 extern void *BBitmap_new (int, int, int);
   533 extern void *BBitmap_data (void *);
   534 extern int BBitmap_convert (void *, void **);
   535 extern void be_draw_cross_on_pixmap (void *, int, int, int, int,
   536                                      uint32_t);
   537 
   538 extern void BBitmap_free (void *);
   539 
   540 extern void BBitmap_dimensions (void *, int *, int *,  int *, int *,
   541                                 int32_t *, int *);
   542 extern void *BApplication_setup (void);
   543 extern void *BWindow_new (void **);
   544 extern void BWindow_quit (void *);
   545 
   546 extern void BWindow_set_offset (void *, int, int);
   547 extern void BWindow_iconify (void *);
   548 extern void BWindow_set_visible (void *, int);
   549 extern void BWindow_retitle (void *, const char *);
   550 extern void BWindow_resize (void *, int, int);
   551 extern void BWindow_activate (void *);
   552 extern void BWindow_center_on_screen (void *);
   553 extern void BWindow_change_decoration (void *, int);
   554 extern void BWindow_set_tooltip_decoration (void *);
   555 extern void BWindow_set_avoid_focus (void *, int);
   556 extern void BWindow_set_size_alignment (void *, int, int);
   557 extern void BWindow_sync (void *);
   558 extern void BWindow_send_behind (void *, void *);
   559 extern bool BWindow_is_active (void *);
   560 extern void BWindow_set_override_redirect (void *, bool);
   561 extern void BWindow_dimensions (void *, int *, int *);
   562 extern void BWindow_set_z_group (void *, enum haiku_z_group);
   563 extern void BWindow_set_sticky (void *, bool);
   564 extern void BWindow_Flush (void *);
   565 
   566 extern void BFont_close (void *);
   567 extern void BFont_metrics (void *, int *, int *, int *, int *,
   568                            int *, int *, int *, int *, int *, int *);
   569 extern int BFont_have_char_p (void *, int32_t);
   570 extern int BFont_have_char_block (void *, int32_t, int32_t);
   571 extern void BFont_char_bounds (void *, const char *, int *, int *, int *);
   572 extern void BFont_nchar_bounds (void *, const char *, int *, int *,
   573                                 int *, int32_t);
   574 extern struct haiku_font_pattern *BFont_find (struct haiku_font_pattern *);
   575 
   576 extern void BView_StartClip (void *);
   577 extern void BView_EndClip (void *);
   578 extern void BView_SetHighColor (void *, uint32_t);
   579 extern void BView_SetLowColor (void *, uint32_t);
   580 extern void BView_SetPenSize (void *, int);
   581 extern void BView_SetFont (void *, void *);
   582 extern void BView_MovePenTo (void *, int, int);
   583 extern void BView_DrawString (void *, const char *, ptrdiff_t);
   584 extern void BView_DrawChar (void *, char);
   585 extern void BView_FillRectangle (void *, int, int, int, int);
   586 extern void BView_FillRectangleAbs (void *, int, int, int, int);
   587 extern void BView_FillTriangle (void *, int, int, int, int, int, int);
   588 extern void BView_StrokeRectangle (void *, int, int, int, int);
   589 extern void BView_SetViewColor (void *, uint32_t);
   590 extern void BView_ClipToRect (void *, int, int, int, int);
   591 extern void BView_ClipToInverseRect (void *, int, int, int, int);
   592 extern void BView_StrokeLine (void *, int, int, int, int);
   593 extern void BView_CopyBits (void *, int, int, int, int, int, int, int, int);
   594 extern void BView_InvertRect (void *, int, int, int, int);
   595 extern void BView_DrawBitmap (void *, void *, int, int, int, int, int, int,
   596                               int, int, bool);
   597 extern void BView_DrawBitmapWithEraseOp (void *, void *, int, int, int, int);
   598 extern void BView_DrawBitmapTiled (void *, void *, int, int,
   599                                    int, int, int, int, int, int);
   600 
   601 extern void BView_resize_to (void *, int, int);
   602 extern void BView_set_view_cursor (void *, void *);
   603 extern void BView_move_frame (void *, int, int, int, int);
   604 extern void BView_scroll_bar_update (void *, int, int, int, int, bool);
   605 
   606 extern void *be_transform_bitmap (void *, void *, uint32_t, double,
   607                                   int, int, bool);
   608 extern void be_apply_affine_transform (void *, double, double, double,
   609                                        double, double, double);
   610 extern void be_apply_inverse_transform (double (*)[3], int, int, int *, int *);
   611 extern void be_draw_image_mask (void *, void *, int, int, int, int, int, int,
   612                                 int, int, uint32_t);
   613 extern void be_draw_bitmap_with_mask (void *, void *, void *, int, int, int,
   614                                       int, int, int, int, int, bool);
   615 
   616 extern void be_get_display_resolution (double *, double *);
   617 extern void be_get_screen_dimensions (int *, int *);
   618 
   619 /* Functions for creating and freeing cursors.  */
   620 extern void *be_create_cursor_from_id (int);
   621 extern void *be_create_pixmap_cursor (void *, int, int);
   622 extern void be_delete_cursor (void *);
   623 
   624 extern void *be_make_scroll_bar_for_view (void *, int, int, int, int, int);
   625 extern void BScrollBar_delete (void *);
   626 extern int BScrollBar_default_size (int);
   627 
   628 extern void BView_invalidate (void *);
   629 extern void BView_draw_lock (void *, bool, int, int, int, int);
   630 extern void BView_invalidate_region (void *, int, int, int, int);
   631 extern void BView_draw_unlock (void *);
   632 extern void BBitmap_import_fringe_bitmap (void *, unsigned short *, int, int);
   633 
   634 extern void haiku_font_pattern_free (struct haiku_font_pattern *);
   635 
   636 extern int BFont_open_pattern (struct haiku_font_pattern *, void **, float);
   637 extern void BFont_populate_fixed_family (struct haiku_font_pattern *);
   638 extern void BFont_populate_plain_family (struct haiku_font_pattern *);
   639 
   640 extern void BView_publish_scroll_bar (void *, int, int, int, int);
   641 extern void BView_forget_scroll_bar (void *, int, int, int, int);
   642 extern bool BView_inside_scroll_bar (void *, int, int);
   643 extern void BView_get_mouse (void *, int *, int *);
   644 extern void BView_convert_to_screen (void *, int *, int *);
   645 extern void BView_convert_from_screen (void *, int *, int *);
   646 
   647 extern void BView_emacs_delete (void *);
   648 
   649 extern void *BPopUpMenu_new (const char *);
   650 
   651 extern void BMenu_add_item (void *, const char *, void *, bool,
   652                             bool, bool, void *, const char *,
   653                             const char *);
   654 extern void BMenu_add_separator (void *);
   655 extern void *BMenu_new_submenu (void *, const char *, bool);
   656 extern void *BMenu_new_menu_bar_submenu (void *, const char *);
   657 extern int BMenu_count_items (void *);
   658 extern void *BMenu_item_at (void *, int);
   659 extern void *BMenu_run (void *, int, int, void (*) (void *, void *),
   660                         void (*) (void), void (*) (void),
   661                         struct timespec (*) (void), void *);
   662 extern void BPopUpMenu_delete (void *);
   663 extern void *BMenuBar_new (void *);
   664 extern void BMenu_delete_all (void *);
   665 extern void BMenuBar_delete (void *);
   666 extern void BMenu_item_set_label (void *, const char *);
   667 extern void *BMenu_item_get_menu (void *);
   668 extern void BMenu_delete_from (void *, int, int);
   669 
   670 extern void haiku_ring_bell (void);
   671 
   672 extern void *BAlert_new (const char *, enum haiku_alert_type);
   673 extern void *BAlert_add_button (void *, const char *);
   674 extern void BAlert_set_offset_spacing (void *);
   675 extern int32 BAlert_go (void *, void (*) (void), void (*) (void),
   676                         void (*) (void));
   677 extern void BButton_set_enabled (void *, int);
   678 extern void BView_set_tooltip (void *, const char *);
   679 extern void BView_show_tooltip (void *);
   680 extern void be_show_sticky_tooltip (void *, const char *, int, int);
   681 
   682 extern void BAlert_delete (void *);
   683 
   684 extern void EmacsWindow_parent_to (void *, void *);
   685 extern void EmacsWindow_unparent (void *);
   686 extern void EmacsWindow_move_weak_child (void *, void *, int, int);
   687 
   688 extern void be_get_version_string (char *, int);
   689 extern int be_get_display_planes (void);
   690 extern int be_get_display_color_cells (void);
   691 extern bool be_is_display_grayscale (void);
   692 extern void be_warp_pointer (int, int);
   693 
   694 extern void EmacsView_set_up_double_buffering (void *);
   695 extern void EmacsView_disable_double_buffering (void *);
   696 extern void EmacsView_flip_and_blit (void *);
   697 extern int EmacsView_double_buffered_p (void *);
   698 
   699 extern char *be_popup_file_dialog (int, const char *, int,
   700                                    int, void *, const char *,
   701                                    const char *, void (*) (void));
   702 
   703 #ifdef HAVE_NATIVE_IMAGE_API
   704 extern int be_can_translate_type_to_bitmap_p (const char *);
   705 extern void *be_translate_bitmap_from_file_name (const char *);
   706 extern void *be_translate_bitmap_from_memory (const void *, size_t);
   707 #endif
   708 
   709 extern bool BMenuBar_start_tracking (void *);
   710 extern size_t BBitmap_bytes_length (void *);
   711 
   712 #ifdef USE_BE_CAIRO
   713 extern cairo_t *EmacsView_cairo_context (void *);
   714 extern void BView_cr_dump_clipping (void *, cairo_t *);
   715 extern void EmacsWindow_begin_cr_critical_section (void *);
   716 extern void EmacsWindow_end_cr_critical_section (void *);
   717 #endif
   718 
   719 extern void BMenu_add_title (void *, const char *);
   720 
   721 extern int be_plain_font_height (void);
   722 extern int be_string_width_with_plain_font (const char *);
   723 extern void be_init_font_data (void);
   724 extern void be_evict_font_cache (void);
   725 extern int be_get_display_screens (void);
   726 extern bool be_use_subpixel_antialiasing (void);
   727 extern const char *be_find_setting (const char *);
   728 extern haiku_font_family_or_style *be_list_font_families (size_t *);
   729 extern void be_font_style_to_flags (const char *, struct haiku_font_pattern *);
   730 extern void *be_open_font_at_index (int, int, float);
   731 extern void be_set_font_antialiasing (void *, bool);
   732 extern int be_get_ui_color (const char *, uint32_t *);
   733 
   734 extern void BMessage_delete (void *);
   735 
   736 extern bool be_drag_message (void *, void *, bool, void (*) (void),
   737                              void (*) (void), void (*) (void),
   738                              bool (*) (void));
   739 extern bool be_drag_and_drop_in_progress (void);
   740 
   741 extern bool be_replay_menu_bar_event (void *, struct haiku_menu_bar_click_event *);
   742 extern bool be_select_font (void (*) (void), bool (*) (void),
   743                             haiku_font_family_or_style *,
   744                             haiku_font_family_or_style *,
   745                             int *, bool, int, int, int,
   746                             bool, bool *);
   747 
   748 extern int be_find_font_indices (struct haiku_font_pattern *, int *, int *);
   749 extern status_t be_roster_launch (const char *, const char *, char **,
   750                                   ptrdiff_t, void *, team_id *);
   751 extern void be_get_window_decorator_dimensions (void *, int *, int *, int *, int *);
   752 extern void be_get_window_decorator_frame (void *, int *, int *, int *, int *);
   753 extern void be_send_move_frame_event (void *);
   754 extern void be_set_window_fullscreen_mode (void *, enum haiku_fullscreen_mode);
   755 
   756 extern status_t be_write_node_message (const char *, const char *, void *);
   757 extern void be_send_message (const char *, void *);
   758 
   759 extern void be_lock_window (void *);
   760 extern void be_unlock_window (void *);
   761 extern bool be_get_explicit_workarea (int *, int *, int *, int *);
   762 extern void be_clear_grab_view (void);
   763 extern void be_set_use_frame_synchronization (void *, bool);
   764 
   765 extern void be_listen_font_settings (void);
   766 
   767 extern bool be_lock_font_defaults (void);
   768 extern const char *be_get_font_default (enum haiku_what_font);
   769 extern int be_get_font_size (enum haiku_what_font);
   770 extern void be_unlock_font_defaults (void);
   771 #ifdef __cplusplus
   772 }
   773 
   774 extern _Noreturn void gui_abort (const char *);
   775 extern void *find_appropriate_view_for_draw (void *);
   776 #endif /* _cplusplus */
   777 
   778 #endif /* _HAIKU_SUPPORT_H_ */
   779 
   780 // Local Variables:
   781 // eval: (setf (alist-get 'inextern-lang c-offsets-alist) 0)
   782 // End:

/* [<][>][^][v][top][bottom][index][help] */