mirror of
https://gitlab.winehq.org/wine/fontforge.git
synced 2025-10-14 02:47:57 +08:00
596 lines
22 KiB
C
596 lines
22 KiB
C
/* Copyright (C) 2000-2012 by George Williams */
|
|
/*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
|
|
* Redistributions of source code must retain the above copyright notice, this
|
|
* list of conditions and the following disclaimer.
|
|
|
|
* Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
|
|
* The name of the author may not be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
|
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
#include "ggadget.h"
|
|
#include "gresedit.h"
|
|
|
|
struct gfuncs {
|
|
unsigned int is_widget: 1;
|
|
uint16 size;
|
|
int (*handle_expose)(GWindow pixmap,GGadget *g,GEvent *event);
|
|
int (*handle_mouse)(GGadget *g,GEvent *event);
|
|
int (*handle_key)(GGadget *g,GEvent *event);
|
|
int (*handle_editcmd)(GGadget *g,enum editor_commands);
|
|
int (*handle_focus)(GGadget *g,GEvent *event);
|
|
int (*handle_timer)(GGadget *g,GEvent *event);
|
|
int (*handle_sel)(GGadget *g,GEvent *event);
|
|
|
|
void (*redraw)(GGadget *g);
|
|
void (*move)(GGadget *g,int32 x, int32 y);
|
|
void (*resize)(GGadget *g,int32 width, int32 height);
|
|
void (*setvisible)(GGadget *g,int);
|
|
void (*setenabled)(GGadget *g,int);
|
|
|
|
GRect *(*getsize)(GGadget *g,GRect *);
|
|
GRect *(*getinnersize)(GGadget *g,GRect *);
|
|
|
|
void (*destroy)(GGadget *g);
|
|
|
|
void (*set_title)(GGadget *g,const unichar_t *str);
|
|
const unichar_t *(*_get_title)(GGadget *g);
|
|
unichar_t *(*get_title)(GGadget *g);
|
|
void (*set_imagetitle)(GGadget *g,GImage *,const unichar_t *str,int before);
|
|
GImage *(*get_image)(GGadget *g);
|
|
|
|
void (*set_font)(GGadget *g,GFont *);
|
|
GFont *(*get_font)(GGadget *g);
|
|
|
|
void (*clear_list)(GGadget *g);
|
|
void (*set_list)(GGadget *g, GTextInfo **ti, int32 copyit);
|
|
GTextInfo **(*get_list)(GGadget *g,int32 *len);
|
|
GTextInfo *(*get_list_item)(GGadget *g,int32 pos);
|
|
void (*select_list_item)(GGadget *g,int32 pos, int32 sel);
|
|
void (*select_one_list_item)(GGadget *g,int32 pos);
|
|
int32 (*is_list_item_selected)(GGadget *g,int32 pos);
|
|
int32 (*get_first_selection)(GGadget *g);
|
|
void (*scroll_list_to_pos)(GGadget *g,int32 pos);
|
|
void (*scroll_list_to_text)(GGadget *g,const unichar_t *lab,int32 sel);
|
|
void (*set_list_orderer)(GGadget *g,int (*orderer)(const void *, const void *));
|
|
|
|
void (*get_desired_size)(GGadget *g, GRect *outer, GRect *inner);
|
|
void (*set_desired_size)(GGadget *g, GRect *outer, GRect *inner);
|
|
int (*fills_window)(GGadget *g);
|
|
int (*is_default)(GGadget *g);
|
|
};
|
|
|
|
struct ggadget {
|
|
struct gfuncs *funcs;
|
|
struct gwindow *base;
|
|
GRect r;
|
|
GRect inner;
|
|
unichar_t mnemonic;
|
|
unichar_t shortcut;
|
|
short short_mask;
|
|
struct ggadget *prev;
|
|
unsigned int takes_input: 1;
|
|
unsigned int takes_keyboard: 1;
|
|
unsigned int focusable: 1;
|
|
unsigned int has_focus: 1;
|
|
unsigned int free_box: 1;
|
|
unsigned int was_disabled: 1;
|
|
unsigned int vert: 1; /* For lines & scrollbars */
|
|
unsigned int opengroup: 1; /* For groupboxes */
|
|
unsigned int prevlabel: 1; /* For groupboxes */
|
|
unsigned int contained: 1; /* is part of a bigger ggadget (ie. a scrollbar is part of a listbox) */
|
|
short cid;
|
|
void *data;
|
|
GBox *box;
|
|
enum gadget_state {gs_invisible, gs_disabled, gs_enabled, gs_active,
|
|
gs_focused, gs_pressedactive } state;
|
|
unichar_t *popup_msg;
|
|
GGadgetHandler handle_controlevent;
|
|
int16 desired_width, desired_height;
|
|
};
|
|
|
|
typedef struct ggadget GLine;
|
|
typedef struct ggadget GGroup;
|
|
|
|
typedef struct ggadget GSpacer; /* a blank space of a given size, used in box layout */
|
|
|
|
typedef struct glabel { /* or simple text, or groupbox */
|
|
GGadget g;
|
|
unsigned int fh:8;
|
|
unsigned int as: 8;
|
|
unsigned int image_precedes: 1;
|
|
unsigned int is_default: 1;
|
|
unsigned int is_cancel: 1;
|
|
unsigned int pressed: 1;
|
|
unsigned int within: 1;
|
|
unsigned int labeltype: 2; /* 0=>label/button(this), 1=>imagebutton, 2=>listbutton, 3=>colorbutton */
|
|
unsigned int shiftonpress: 1;
|
|
FontInstance *font;
|
|
unichar_t *label;
|
|
GImage *image;
|
|
GTextInfo **ti;
|
|
uint16 ltot;
|
|
} GLabel, GButton;
|
|
|
|
typedef struct gimagebutton {
|
|
GGadget g;
|
|
unsigned int fh:8;
|
|
unsigned int as: 8;
|
|
unsigned int image_precedes: 1;
|
|
unsigned int is_default: 1;
|
|
unsigned int is_cancel: 1;
|
|
unsigned int pressed: 1;
|
|
unsigned int within: 1;
|
|
unsigned int labeltype: 2; /* 0=>label, 1=>imagebutton(this), 2=>listbutton */
|
|
unsigned int shiftonpress: 1;
|
|
FontInstance *font;
|
|
unichar_t *label;
|
|
GImage *image, *img_within, *active, *disabled;
|
|
} GImageButton;
|
|
|
|
typedef struct glistbutton {
|
|
GGadget g;
|
|
unsigned int fh:8;
|
|
unsigned int as: 8;
|
|
unsigned int image_precedes: 1;
|
|
unsigned int is_default: 1;
|
|
unsigned int is_cancel: 1;
|
|
unsigned int pressed: 1;
|
|
unsigned int within: 1;
|
|
unsigned int labeltype: 2; /* 0=>label, 1=>imagebutton, 2=>listbutton(this) */
|
|
unsigned int shiftonpress: 1;
|
|
FontInstance *font;
|
|
unichar_t *label;
|
|
GImage *image;
|
|
GTextInfo **ti;
|
|
uint16 ltot;
|
|
GWindow popup;
|
|
} GListButton;
|
|
|
|
typedef struct gcolorbutton {
|
|
GGadget g;
|
|
unsigned int fh:8;
|
|
unsigned int as: 8;
|
|
unsigned int image_precedes: 1;
|
|
unsigned int is_default: 1;
|
|
unsigned int is_cancel: 1;
|
|
unsigned int pressed: 1;
|
|
unsigned int within: 1;
|
|
unsigned int labeltype: 2; /* 0=>label/button, 1=>imagebutton, 2=>listbutton, 3=>colorbutton(this) */
|
|
unsigned int shiftonpress: 1;
|
|
FontInstance *font;
|
|
unichar_t *label;
|
|
GImage *image;
|
|
Color col;
|
|
} GColorButton;
|
|
|
|
typedef struct gcheck {
|
|
GGadget g;
|
|
unsigned int fh:8;
|
|
unsigned int as: 8;
|
|
unsigned int image_precedes: 1;
|
|
unsigned int pressed: 1;
|
|
unsigned int within: 1;
|
|
unsigned int isradio: 1;
|
|
unsigned int ison: 1;
|
|
FontInstance *font;
|
|
unichar_t *label;
|
|
GImage *image;
|
|
GRect onoffrect, onoffinner;
|
|
GBox *onbox, *offbox;
|
|
GResImage *on, *off, *ondis, *offdis;
|
|
} GCheckBox;
|
|
|
|
typedef struct gradio {
|
|
GGadget g;
|
|
unsigned int fh:8;
|
|
unsigned int as: 8;
|
|
unsigned int image_precedes: 1;
|
|
unsigned int pressed: 1;
|
|
unsigned int within: 1;
|
|
unsigned int isradio: 1;
|
|
unsigned int ison: 1;
|
|
FontInstance *font;
|
|
unichar_t *label;
|
|
GImage *image;
|
|
GRect onoffrect, onoffinner;
|
|
GBox *onbox, *offbox;
|
|
GResImage *on, *off, *ondis, *offdis;
|
|
struct gradio *post;
|
|
int radiogroup;
|
|
} GRadio;
|
|
|
|
typedef struct gscrollbar { /* and slider */
|
|
struct ggadget g;
|
|
int32 sb_min, sb_max, sb_pagesize, sb_pos;
|
|
int32 sb_mustshow; /* normally this is sb_pagesize, but might be the height of a single line */
|
|
/* if we want people to be able to scroll to see white space */
|
|
/* after the document */
|
|
/*unsigned int vert: 1; */ /* Moved to GGadget, shared with line */
|
|
unsigned int thumbpressed: 1;
|
|
unsigned int ignorenext45: 1;
|
|
int8 repeatcmd; /* sb event to be generated on timer interupts (ie. upline)*/
|
|
int8 thumbborder; /* Size of the border of the thumbbox */
|
|
int8 sbborder; /* Size of the border of the main scrollbar */
|
|
int16 thumboff; /* Offset from where the thumb was pressed to top of thumb */
|
|
int16 arrowsize;
|
|
int16 thumbsize; /* Current thumb size, refigured after every call to setbounds */
|
|
int16 thumbpos; /* Current thumb pos */
|
|
GTimer *pressed;
|
|
GBox *thumbbox;
|
|
} GScrollBar;
|
|
|
|
typedef struct glist {
|
|
GGadget g;
|
|
uint8 fh;
|
|
uint8 as;
|
|
uint8 sofar_max, sofar_pos;
|
|
uint16 ltot, loff, lcnt;
|
|
uint16 xoff, xmax;
|
|
uint16 start, end; /* current selection drag */
|
|
uint16 hmax; /* maximum line height */
|
|
FontInstance *font;
|
|
GTextInfo **ti;
|
|
struct gscrollbar *vsb;
|
|
int (*orderer)(const void *, const void *);
|
|
unsigned int backwards: 1; /* reverse the order given by orderer */
|
|
unsigned int multiple_sel: 1; /* Allow multiple selections */
|
|
unsigned int exactly_one: 1; /* List must always have something selected */
|
|
unsigned int parentpressed: 1; /* For listbuttons, pressed in parent */
|
|
unsigned int freeti: 1; /* Free the ti array when we're destroyed */
|
|
unsigned int ispopup: 1; /* respond to Return and Escape */
|
|
unsigned int sameheight: 1; /* all lines are the same height */
|
|
unsigned int always_show_sb: 1; /* display scrollbar even if we don't need it */
|
|
unichar_t *sofar; /* user input */
|
|
GTimer *enduser;
|
|
GTimer *pressed;
|
|
void (*popup_callback)(GGadget *g,int pos);
|
|
} GList;
|
|
|
|
typedef struct gtextfield {
|
|
GGadget g;
|
|
unsigned int cursor_on: 1;
|
|
unsigned int wordsel: 1;
|
|
unsigned int linesel: 1;
|
|
unsigned int listfield: 1;
|
|
unsigned int drag_and_drop: 1;
|
|
unsigned int has_dd_cursor: 1;
|
|
unsigned int hidden_cursor: 1;
|
|
unsigned int multi_line: 1;
|
|
unsigned int accepts_tabs: 1;
|
|
unsigned int accepts_returns: 1;
|
|
unsigned int wrap: 1;
|
|
unsigned int dobitext: 1; /* has at least one right to left character */
|
|
unsigned int password: 1;
|
|
unsigned int dontdraw: 1; /* Used when the tf is part of a larger control, and the control determines when to draw the tf */
|
|
unsigned int donthook: 1; /* Used when the tf is part of a the gchardlg.c */
|
|
unsigned int numericfield: 1;
|
|
unsigned int incr_down: 1; /* Direction of increments when numeric_scroll events happen */
|
|
unsigned int completionfield: 1;
|
|
unsigned int was_completing: 1;
|
|
unsigned int pango: 1;
|
|
uint8 fh;
|
|
uint8 as;
|
|
uint8 nw; /* Width of one character (an "n") */
|
|
int16 xoff_left, loff_top;
|
|
int16 sel_start, sel_end, sel_base;
|
|
int16 sel_oldstart, sel_oldend, sel_oldbase;
|
|
int16 dd_cursor_pos;
|
|
unichar_t *text, *oldtext;
|
|
FontInstance *font;
|
|
GTimer *pressed;
|
|
GTimer *cursor;
|
|
GCursor old_cursor;
|
|
GScrollBar *hsb, *vsb;
|
|
int16 lcnt, lmax;
|
|
int32 *lines; /* offsets in text to the start of the nth line */
|
|
GBiText bidata;
|
|
int32 bilen; /* allocated size of bidata */
|
|
int16 xmax;
|
|
GIC *gic;
|
|
GTimer *numeric_scroll;
|
|
char *utf8_text; /* For Pango */
|
|
int32 *lines8; /* offsets in utf8_text */
|
|
} GTextField;
|
|
|
|
typedef struct glistfield {
|
|
GTextField gt;
|
|
GRect fieldrect, buttonrect;
|
|
GTextInfo **ti;
|
|
uint16 ltot;
|
|
GWindow popup;
|
|
} GListField;
|
|
|
|
typedef struct gcompletionfield {
|
|
GListField gl;
|
|
unichar_t **choices;
|
|
uint16 ctot; int16 selected;
|
|
GWindow choice_popup;
|
|
GTextCompletionHandler completion;
|
|
} GCompletionField;
|
|
|
|
typedef struct gnumericfield {
|
|
GTextField gt;
|
|
GRect fieldrect, buttonrect;
|
|
} GNumericField;
|
|
|
|
typedef struct gmenubar {
|
|
GGadget g;
|
|
GMenuItem *mi;
|
|
uint16 *xs; /* locations at which to draw each name (+1 to give us width of last one) */
|
|
uint16 mtot;
|
|
int16 entry_with_mouse;
|
|
int16 lastmi; /* If the menubar doesn't fit across the top the make some of it be vertical. Start here */
|
|
struct gmenu *child;
|
|
unsigned int pressed: 1;
|
|
unsigned int initial_press: 1;
|
|
unsigned int any_unmasked_shortcuts: 1;
|
|
FontInstance *font;
|
|
GMenuItem fake[2]; /* Used if not enough room for menu... */
|
|
} GMenuBar;
|
|
|
|
typedef struct gtabset {
|
|
struct ggadget g;
|
|
struct tabs { unichar_t *name; int16 x, width, tw, nesting; unsigned int disabled: 1; GWindow w; } *tabs;
|
|
int16 *rowstarts; /* for each row, index into tab array of its first tab, one extra entry at end with tabcnt */
|
|
int16 tabcnt; /* number of tabs */
|
|
int16 sel; /* active tab */
|
|
int16 rcnt; /* number of rows */
|
|
int16 active_row; /* row which is closest to the display area */
|
|
int16 offset_per_row; /* stagger tabs by this much */
|
|
int16 rowh; /* height of each row */
|
|
int16 toff; /* amount things are scrolled off left (x, tabs) */
|
|
int16 arrow_width; /* width of arrow tab (for scrolling) */
|
|
int16 arrow_size; /* size of the actual arrow itself */
|
|
int16 ds;
|
|
int16 pressed_sel;
|
|
unsigned int scrolled: 1; /* big tabsets either get scrolled or appear in multiple rows */
|
|
unsigned int haslarrow: 1;
|
|
unsigned int hasrarrow: 1;
|
|
unsigned int pressed: 1;
|
|
unsigned int filllines: 1; /* If we have multiple lines then fill them so that each row takes up the entire width of the tabset */
|
|
unsigned int fill1line: 1;
|
|
unsigned int vertical: 1;
|
|
unsigned int nowindow: 1;
|
|
FontInstance *font;
|
|
void (*nested_expose)(GWindow pixmap, GGadget *g, GEvent *event);
|
|
int (*nested_mouse)(GGadget *g, GEvent *event);
|
|
int16 vert_list_width;
|
|
int16 as, fh, offtop;
|
|
GGadget *vsb;
|
|
} GTabSet;
|
|
|
|
struct gdirentry;
|
|
typedef struct gfilechooser {
|
|
struct ggadget g;
|
|
GTextField *name;
|
|
GList *files, *subdirs;
|
|
GListButton *directories;
|
|
GButton *ok, *filterb; /* Not created by us, can be set by user to give chooser a better appearance */
|
|
unichar_t **mimetypes;
|
|
unichar_t *wildcard;
|
|
unichar_t *lastname;
|
|
GFileChooserFilterType filter;
|
|
/*enum fchooserret (*filter)(GGadget *chooser,struct gdirentry *file,const unichar_t *dir);*/
|
|
struct giocontrol *outstanding;
|
|
GCursor old_cursor;
|
|
GButton *up, *home;
|
|
GButton *bookmarks, *config;
|
|
struct ghvbox *topbox;
|
|
unichar_t **history;
|
|
unichar_t **paths;
|
|
int hpos, hcnt, hmax;
|
|
} GFileChooser;
|
|
|
|
typedef struct ghvbox {
|
|
GGadget g;
|
|
int rows, cols;
|
|
int hpad, vpad; /* Internal padding */
|
|
int grow_col, grow_row; /* -1 => all */
|
|
GGadget **children; /* array of rows*cols */
|
|
GGadget *label;
|
|
int label_height;
|
|
} GHVBox;
|
|
|
|
typedef struct gmatrixedit {
|
|
GGadget g;
|
|
int rows, cols;
|
|
int row_max;
|
|
struct col_data {
|
|
enum me_type me_type;
|
|
char *(*func)(GGadget *,int r,int c); /* Produces a string to display if md_str==NULL */
|
|
GMenuItem *enum_vals;
|
|
void (*enable_enum)(GGadget *,GMenuItem *, int r, int c);
|
|
GTextCompletionHandler completer;
|
|
char *title;
|
|
int16 width, x; /* Relative to inner.x */
|
|
uint8 fixed;
|
|
uint8 disabled;
|
|
uint8 hidden;
|
|
} *col_data;
|
|
int hpad, vpad; /* Internal padding */
|
|
unsigned int has_titles: 1;
|
|
unsigned int lr_pointer: 1;
|
|
unsigned int wasnew: 1; /* So we need to call newafter when finished editing */
|
|
unsigned int big_done: 1;
|
|
unsigned int edit_active: 1;
|
|
unsigned int no_edit: 1;
|
|
int pressed_col; /* For changing column spacing */
|
|
struct matrix_data *data;
|
|
int16 as, fh;
|
|
int16 font_as, font_fh;
|
|
FontInstance *font;
|
|
FontInstance *titfont;
|
|
GGadget *tf;
|
|
int active_col, active_row;
|
|
int off_top, off_left;
|
|
GGadget *vsb, *hsb;
|
|
GGadget *del;
|
|
GGadget *up, *down;
|
|
GGadget **buttonlist;
|
|
GWindow nested;
|
|
int16 mark_length, mark_size, mark_skip;
|
|
char *newtext;
|
|
void (*initrow)(GGadget *g,int row);
|
|
int (*candelete)(GGadget *g,int row);
|
|
enum gme_updown (*canupdown)(GGadget *g,int row);
|
|
void (*popupmenu)(GGadget *g,GEvent *e,int row,int col);
|
|
int (*handle_key)(GGadget *g,GEvent *e);
|
|
char *(*bigedittitle)(GGadget *g,int r, int c);
|
|
void (*finishedit)(GGadget *g,int r, int c, int wasnew);
|
|
char *(*validatestr)(GGadget *g,int r, int c, int wasnew, char *str);
|
|
void (*setotherbuttons)(GGadget *g, int r, int c);
|
|
void (*reportmousemove)(GGadget *g, int r, int c);
|
|
void (*reporttextchanged)(GGadget *g, int r, int c, GGadget *textfield);
|
|
void (*predelete)(GGadget *g, int r);
|
|
void (*rowmotion)(GGadget *g, int oldr, int newr);
|
|
} GMatrixEdit;
|
|
|
|
typedef struct gdrawable {
|
|
GGadget g;
|
|
GWindow gw;
|
|
GDrawEH e_h;
|
|
} GDrawable;
|
|
|
|
typedef struct rowcol {
|
|
GGadget g;
|
|
int rows, cols;
|
|
GFont *font;
|
|
int as, fh;
|
|
unsigned int hrules: 1; /* Draw horizontal lines between each row */
|
|
unsigned int vrules: 1; /* Draw vertical lines between each column */
|
|
unsigned int display_only: 1;
|
|
unsigned int order_entries: 1; /* normally order rows based on first column entry */
|
|
uint8 hpad;
|
|
int *colx; /* col+1 entries, last is xmax */
|
|
GTextInfo **labels;
|
|
GTextInfo **ti;
|
|
GTextField *tf;
|
|
GScrollBar *vsb, *hsb;
|
|
int loff, xoff;
|
|
int tfr, tfc; /* row,col of textfield (or -1) */
|
|
int (*orderer)(const void *, const void *);
|
|
} RowCol;
|
|
|
|
|
|
/* ColorPicker */
|
|
|
|
extern int _GScrollBar_StartTime,_GScrollBar_RepeatTime; /* in millisecs */
|
|
extern int _GScrollBar_Width; /* in points */
|
|
extern int _GListMarkSize; /* in points, def width of popup mark in buttons */
|
|
extern int _GGadget_Skip; /* in points, def hor space between gadgets */
|
|
extern int _GGadget_TextImageSkip; /* in points, def hor space text and image */
|
|
extern GBox _GListMark_Box, _GGroup_LineBox;
|
|
extern GResImage *_GListMark_Image;
|
|
extern FontInstance *_ggadget_default_font;
|
|
|
|
void _GWidget_AddGGadget(GWindow gw,struct ggadget *g);
|
|
void _GWidget_RemoveGadget(struct ggadget *g);
|
|
void _GWidget_SetMenuBar(GGadget *g);
|
|
void _GWidget_SetDefaultButton(GGadget *g);
|
|
void _GWidget_MakeDefaultButton(GGadget *g);
|
|
void _GWidget_SetCancelButton(GGadget *g);
|
|
void _GWidget_SetGrabGadget(GGadget *g);
|
|
void _GWidget_ClearGrabGadget(GGadget *g);
|
|
void _GWidget_SetPopupOwner(GGadget *g);
|
|
void _GWidget_ClearPopupOwner(GGadget *g);
|
|
|
|
extern void _GGadgetCopyDefaultBox(GBox *box);
|
|
extern FontInstance *_GGadgetInitDefaultBox(char *class,GBox *box,FontInstance *deffont);
|
|
extern void GGadgetInit(void);
|
|
extern void _ggadget_underlineMnemonic(GWindow gw,int32 x,int32 y,unichar_t *label,
|
|
unichar_t mneumonic, Color fg,int ymax);
|
|
extern void _ggadgetFigureSize(GWindow gw, GBox *design, GRect *r, int isdef);
|
|
extern void _ggadgetSetRects(GGadget *g, GRect *outer, GRect *inner, int xjust, int yjust );
|
|
extern void _GGadgetCloseGroup(GGadget *g);
|
|
extern void _ggadget_redraw(GGadget *g);
|
|
extern int _ggadget_noop(GGadget *g, GEvent *event);
|
|
extern void _ggadget_move(GGadget *g, int32 x, int32 y );
|
|
extern void _ggadget_resize(GGadget *g, int32 width, int32 height );
|
|
extern void _ggadget_setvisible(GGadget *g,int visible);
|
|
extern void _ggadget_setenabled(GGadget *g,int enabled);
|
|
extern GRect *_ggadget_getsize(GGadget *g,GRect *rct);
|
|
extern GRect *_ggadget_getinnersize(GGadget *g,GRect *rct);
|
|
extern void _ggadget_getDesiredSize(GGadget *g, GRect *outer, GRect *inner);
|
|
extern void _ggadget_setDesiredSize(GGadget *g,GRect *outer, GRect *inner);
|
|
void _GGroup_Init(void);
|
|
|
|
extern unichar_t *_GGadgetFileToUString(char *filename,int max);
|
|
|
|
extern int GBoxDrawBorder(GWindow gw,GRect *pos,GBox *design,
|
|
enum gadget_state state,int is_default);
|
|
extern void GBoxDrawBackground(GWindow gw,GRect *pos,GBox *design,
|
|
enum gadget_state state,int is_default);
|
|
extern void GBoxDrawTabOutline(GWindow pixmap, GGadget *g, int x, int y,
|
|
int width, int rowh, int active );
|
|
extern int GBoxDrawHLine(GWindow gw,GRect *pos,GBox *design);
|
|
extern int GBoxDrawVLine(GWindow gw,GRect *pos,GBox *design);
|
|
extern int GBoxBorderWidth(GWindow gw, GBox *box);
|
|
extern int GBoxExtraSpace(GGadget *g);
|
|
extern int GBoxDrawnWidth(GWindow gw, GBox *box);
|
|
|
|
extern int GGadgetWithin(GGadget *g, int x, int y);
|
|
extern int GGadgetInnerWithin(GGadget *g, int x, int y);
|
|
|
|
extern int GTextInfoGetWidth(GWindow base,GTextInfo *ti,FontInstance *font);
|
|
extern int GTextInfoGetMaxWidth(GWindow base,GTextInfo **ti,FontInstance *font);
|
|
extern int GTextInfoGetHeight(GWindow base,GTextInfo *ti,FontInstance *font);
|
|
extern int GTextInfoGetMaxHeight(GWindow base,GTextInfo **ti,FontInstance *font,int *allsame);
|
|
extern int GTextInfoGetAs(GWindow base,GTextInfo *ti, FontInstance *font);
|
|
extern int GTextInfoDraw(GWindow base,int x,int y,GTextInfo *ti,
|
|
FontInstance *font,Color fg,Color sel,int ymax);
|
|
extern GTextInfo *GTextInfoCopy(GTextInfo *ti);
|
|
extern GTextInfo **GTextInfoArrayFromList(GTextInfo *ti, uint16 *cnt);
|
|
extern GTextInfo **GTextInfoArrayCopy(GTextInfo **ti);
|
|
extern int GTextInfoArrayCount(GTextInfo **ti);
|
|
extern int GTextInfoCompare(GTextInfo *ti1, GTextInfo *ti2);
|
|
extern void GMenuItemArrayFree(GMenuItem *mi);
|
|
extern GMenuItem *GMenuItemArrayCopy(GMenuItem *mi, uint16 *cnt);
|
|
extern void GMenuItem2ArrayFree(GMenuItem2 *mi);
|
|
extern GMenuItem *GMenuItem2ArrayCopy(GMenuItem2 *mi, uint16 *cnt);
|
|
extern int GMenuItemArrayMask(GMenuItem *mi);
|
|
extern int GMenuItemArrayAnyUnmasked(GMenuItem *mi);
|
|
|
|
extern GGadget *_GGadget_Create(GGadget *g, struct gwindow *base, GGadgetData *gd,void *data, GBox *def);
|
|
extern void _GGadget_FinalPosition(GGadget *g, struct gwindow *base, GGadgetData *gd);
|
|
extern void _ggadget_destroy(GGadget *g);
|
|
|
|
extern GWindow GListPopupCreate(GGadget *owner,void (*inform)(GGadget *,int), GTextInfo **ti);
|
|
|
|
extern int GMenuPopupCheckKey(GEvent *event);
|
|
extern int GMenuBarCheckKey(GGadget *g, GEvent *event);
|
|
extern void _GButton_SetDefault(GGadget *g,int32 is_default);
|
|
extern void _GButtonInit(void);
|
|
extern void GListMarkDraw(GWindow pixmap,int x, int y, int height, enum gadget_state state );
|
|
extern char **_GGadget_GetImagePath(void);
|
|
extern int _GGadget_ImageInCache(GImage *image);
|
|
|
|
extern int _ggadget_use_gettext;
|
|
|
|
extern GResInfo ggadget_ri, listmark_ri;
|
|
extern GResInfo *_GGadgetRIHead(void), *_GButtonRIHead(void), *_GTextFieldRIHead(void);
|
|
extern GResInfo *_GRadioRIHead(void), *_GScrollBarRIHead(void), *_GLineRIHead(void);
|
|
extern GResInfo *_GMenuRIHead(void), *_GTabSetRIHead(void), *_GHVBoxRIHead(void);
|
|
extern GResInfo *_GListRIHead(void), *_GMatrixEditRIHead(void), *_GDrawableRIHead(void);
|
|
extern GResInfo *_GProgressRIHead(void);
|
|
|
|
#define SERIF_UI_FAMILIES "dejavu serif,times,caslon,serif,clearlyu,unifont"
|
|
#define SANS_UI_FAMILIES "dejavu sans,helvetica,caliban,sans,clearlyu,unifont"
|
|
#define MONO_UI_FAMILIES "courier,monospace,clearlyu,unifont"
|