summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/inc/gdraw.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/luafontloader/fontforge/inc/gdraw.h')
-rw-r--r--Build/source/texk/web2c/luatexdir/luafontloader/fontforge/inc/gdraw.h532
1 files changed, 532 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/inc/gdraw.h b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/inc/gdraw.h
new file mode 100644
index 00000000000..4b4fae77435
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/luafontloader/fontforge/inc/gdraw.h
@@ -0,0 +1,532 @@
+/* Copyright (C) 2000-2008 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.
+ */
+#ifndef _GDRAW_H
+#define _GDRAW_H
+#include "gimage.h"
+#include "charset.h"
+
+enum font_style { fs_none, fs_italic=1, fs_smallcaps=2, fs_condensed=4, fs_extended=8 };
+enum font_type { ft_unknown, ft_serif, ft_sans, ft_mono, ft_cursive, ft_max };
+enum text_mods { tm_none, tm_upper=1, tm_lower=2, tm_initialcaps=4, tm_showsofthyphen=8 };
+enum text_lines { tl_none, tl_under=1, tl_strike=2, tl_over=4, tl_dash=8 };
+
+typedef struct {
+ const unichar_t *family_name; /* may be more than one */
+ int16 point_size; /* negative values are in pixels */
+ int16 weight;
+ enum font_style style;
+ char *utf8_family_name;
+} FontRequest;
+
+typedef struct {
+ int16 letter_spacing; /* in point tenths */
+ unsigned int starts_word: 1;
+ unsigned int has_charset: 1;
+ enum text_mods mods;
+ enum text_lines lines;
+ enum charset charset;
+} FontMods;
+
+typedef struct gbidata {
+ unichar_t *text;
+ uint8 *level;
+ uint8 *override;
+ uint16 *type;
+ unichar_t **original;
+ int32 len;
+ unsigned int base_right_to_left: 1;
+ unsigned int interpret_arabic: 1;
+} GBiText;
+
+typedef struct font_instance FontInstance, GFont;
+enum gic_style { gic_overspot=2, gic_root=1, gic_hidden=0, gic_orlesser=4, gic_type=3 };
+typedef struct ginput_context GIC;
+
+typedef struct ggc {
+ struct gwindow *w;
+ int32 xor_base;
+ Color fg;
+ Color bg;
+ GRect clip;
+ enum draw_func { df_copy, df_xor } func;
+ unsigned int copy_through_sub_windows: 1;
+ unsigned int bitmap_col: 1; /* window is mapped for bitmap */
+ int16 skip_len, dash_len;
+ int16 line_width;
+ int16 ts;
+ int32 ts_xoff, ts_yoff;
+ int dash_offset;
+ GFont *fi;
+} GGC;
+
+typedef struct gtextbounds {
+ int16 lbearing; /* of first character */
+ /* origin to left edge of first char's raster */
+ int32 rbearing; /* origin to right edge of last char's raster */
+ int16 as,ds; /* maximum ascent and maximum descent */
+ /* (both numbers will be positive for "g" */
+ /* so total height = as+ds */
+ int16 fas, fds; /* font ascent and descent */
+ /* total width = rbearing-lbearing */
+ int32 width; /* above are for the bounding rect, not the text */
+ /* "width" which may be totally different */
+} GTextBounds;
+
+enum selnames { sn_primary, sn_clipboard, sn_drag_and_drop, sn_user1, sn_user2, sn_max };
+typedef struct gwindow *GWindow;
+typedef struct gdisplay GDisplay;
+typedef struct gtimer GTimer;
+
+enum keystate_mask { ksm_shift=1, ksm_capslock=2, ksm_control=4, ksm_meta=8,
+ ksm_cmdsuse=0x8,
+/* Suse X on a Mac maps command to meta. As of Mac 10.2, the command key is 0x10 */
+/* In 10.0 the command key was 0x20 */
+ ksm_cmdmacosx=0x10, /* But not the command key under suse ppc linux*/
+ ksm_numlock=0x10, /* It's numlock on my 386 system */
+ ksm_super=0x40, /* RedHat mask for the key with the windows flag on it */
+ ksm_hyper=0x80,
+/* Both Suse and Mac OS/X.2 now map option to 0x2000, but under 10.0 it was meta */
+/* Under 10.4 it is the meta mask again */
+ /*ksm_option=0x2000,*/
+ ksm_menumask=(ksm_control|ksm_meta|ksm_cmdmacosx|0xf0),
+
+ ksm_button1=(1<<8), ksm_button2=(1<<9), ksm_button3=(1<<10),
+ ksm_button4=(1<<11), ksm_button5=(1<<12),
+ ksm_buttons=(ksm_button1|ksm_button2|ksm_button3|ksm_button4|ksm_button5)
+ };
+enum mnemonic_focus { mf_normal, mf_tab, mf_mnemonic, mf_shortcut };
+typedef struct gevent {
+ enum event_type { et_noevent = -1, et_char, et_charup,
+ et_mousemove, et_mousedown, et_mouseup,
+ et_crossing, /* these four are assumed to be consecutive */
+ et_focus,
+ et_expose, et_visibility, et_resize, et_timer,
+ et_close/*request by user*/, et_create,
+ et_map, et_destroy/*window being freed*/,
+ et_selclear,
+ et_drag, et_dragout, et_drop,
+ et_lastnativeevent=et_drop,
+ et_controlevent, et_user } type;
+#define _GD_EVT_CHRLEN 10
+ GWindow w;
+ union {
+ struct {
+ char *device; /* for wacom devices */
+ uint32 time;
+ uint16 state;
+ int16 x,y;
+ uint16 keysym;
+ unichar_t chars[_GD_EVT_CHRLEN];
+ } chr;
+ struct {
+ char *device; /* for wacom devices */
+ uint32 time;
+ int16 state;
+ int16 x,y;
+ int16 button;
+ int16 clicks;
+ int32 pressure, xtilt, ytilt, separation;
+ } mouse;
+ struct {
+ GRect rect;
+ } expose;
+ struct {
+ enum visibility_state { vs_unobscured, vs_partially, vs_obscured } state;
+ } visibility;
+ struct {
+ GRect size;
+ int16 dx, dy, dwidth, dheight;
+ unsigned int moved: 1;
+ unsigned int sized: 1;
+ } resize;
+ struct {
+ char *device; /* for wacom devices */
+ uint32 time;
+ int16 state;
+ int16 x,y;
+ unsigned int entered: 1;
+ } crossing;
+ struct {
+ unsigned int gained_focus: 1;
+ unsigned int mnemonic_focus: 2;
+ } focus;
+ struct {
+ unsigned int is_visible: 1;
+ } map;
+ struct {
+ enum selnames sel;
+ } selclear;
+ struct {
+ int32 x,y;
+ } drag_drop;
+ struct {
+ GTimer *timer;
+ void *userdata;
+ } timer;
+ struct {
+ enum { et_buttonpress, et_buttonactivate, et_radiochanged,
+ et_listselected, et_listdoubleclick,
+ et_scrollbarchange,
+ et_textchanged, et_textfocuschanged,
+ et_lastsubtype } subtype;
+ struct ggadget *g;
+ union {
+ struct sbevent {
+ enum sb { et_sb_top, et_sb_uppage, et_sb_up, et_sb_left=et_sb_up,
+ et_sb_down, et_sb_right=et_sb_down, et_sb_downpage,
+ et_sb_bottom,
+ et_sb_thumb, et_sb_thumbrelease } type;
+ int32 pos;
+ } sb;
+ struct {
+ int gained_focus;
+ } tf_focus;
+ struct {
+ int from_pulldown; /* -1 normally, else index into pulldown list */
+ } tf_changed;
+ struct {
+ int clicks;
+ int16 button, state;
+ } button;
+ struct {
+ int from_mouse, changed_index;
+ } list;
+ } u;
+ } control;
+ struct {
+ long subtype;
+ void *userdata;
+ } user;
+ } u;
+ void *native_window;
+} GEvent;
+
+typedef enum cursor_types { ct_default, ct_pointer, ct_backpointer, ct_hand,
+ ct_question, ct_cross, ct_4way, ct_text, ct_watch, ct_draganddrop,
+ ct_invisible,
+ ct_user, ct_user2 /* and so on */ } GCursor;
+
+typedef struct gwindow_attrs {
+ enum window_attr_mask { wam_events=0x2, wam_bordwidth=0x4,
+ wam_bordcol=0x8, wam_backcol=0x10, wam_cursor=0x20, wam_wtitle=0x40,
+ wam_ititle=0x80, wam_icon=0x100, wam_nodecor=0x200,
+ wam_positioned=0x400, wam_centered=0x800, wam_undercursor=0x1000,
+ wam_noresize=0x2000, wam_restrict=0x4000, wam_redirect=0x8000,
+ wam_isdlg=0x10000, wam_notrestricted=0x20000,
+ wam_transient=0x40000,
+ wam_utf8_wtitle=0x80000, wam_utf8_ititle=0x100000,
+ wam_cairo=0x200000 } mask;
+ uint32 event_masks; /* (1<<et_char) | (1<<et_mouseup) etc */
+ int16 border_width;
+ Color border_color; /* Color_UNKNOWN if unspecified */
+ Color background_color;
+ GCursor cursor;
+ /* Remainder is only for top level windows */
+ const unichar_t *window_title;
+ const unichar_t *icon_title;
+ struct gwindow *icon; /* A bitmap pixmap, or NULL */
+ unsigned int nodecoration: 1; /* no wm decoration */
+ unsigned int positioned: 1; /* position information is important */
+ unsigned int centered: 2; /* center the window on the screen. pos.width&pos.height are used */
+ unsigned int undercursor: 1; /* center the window under the cursor. */
+ unsigned int noresize: 1; /* set min and max sizes to current size */
+ unsigned int restrict_input_to_me: 1;/* for dialogs, no input outside of dlg */
+ unsigned int redirect_chars_to_me: 1;/* ditto, we get any input outside of us */
+ unsigned int is_dlg: 1; /* 1 for dlg, 0 for main window */
+ unsigned int not_restricted: 1; /* gets events if if a restricted (modal) dlg is up */
+ GWindow redirect_from; /* only redirect input from this window and its children */
+ GWindow transient; /* the Transient_FOR hint */
+ const char *utf8_window_title;
+ const char *utf8_icon_title;
+} GWindowAttrs;
+
+typedef struct gprinter_attrs {
+ enum printer_attr_mask { pam_pagesize=1, pam_margins=2, pam_scale=4,
+ pam_res=8, pam_copies=0x10, pam_thumbnails=0x20, pam_printername=0x40,
+ pam_filename=0x80, pam_args=0x100, pam_color=0x200, pam_transparent=0x400,
+ pam_lpr=0x800, pam_queue=0x1000, pam_eps=0x2000, pam_landscape=0x4000,
+ pam_title=0x8000 } mask;
+ float width, height; /* paper size */
+ float lmargin, rmargin, tmargin, bmargin;
+ float scale; /* 1.0 implies no scaling */
+ enum printer_units { pu_inches, pu_points, pu_mm } units;
+ int32 res; /* printer resolution */
+ int16 num_copies;
+ int16 thumbnails; /* linear count of number of thumbnail*/
+ /* pages per edge of real page */
+ unsigned int do_color: 1;
+ unsigned int do_transparent: 1; /* try to get transparent images to work*/
+ unsigned int use_lpr: 1;
+ unsigned int donot_queue: 1; /* ie. print to file */
+ unsigned int landscape: 1;
+ unsigned int eps: 1; /* generate an eps file, not a full doc */
+ char *printer_name; /* only if things are queued */
+ char *file_name; /* only if things aren't queued */
+ char *extra_lpr_args;
+ unichar_t *title;
+ uint16 start_page, end_page; /* Ignored by printer routines, for programmer */
+} GPrinterAttrs;
+
+typedef struct gdeveventmask {
+ int event_mask;
+ char *device_name;
+} GDevEventMask;
+
+enum gzoom_flags { gzf_pos=1, gzf_size=2 };
+ /* bit flags for the hasCairo query */
+enum gcairo_flags { gc_buildpath=1, /* Has build path commands (postscript, cairo) */
+ gc_alpha=2, /* Supports alpha channels & translucent colors (cairo, pdf) */
+ gc_xor=4, /* Cairo can't do the traditional XOR drawing that X11 does */
+ gc_pango=8,
+ gc_all = gc_buildpath|gc_alpha
+ };
+
+typedef int (*GDrawEH)(GWindow,GEvent *);
+
+extern unichar_t *GDrawKeysyms[];
+extern GDisplay *screen_display, *printer_display;
+
+extern void GDrawCreateDisplays(char *displayname,char *programname);
+extern void *GDrawNativeDisplay(GDisplay *);
+extern void GDrawTerm(GDisplay *disp);
+
+extern int GDrawGetRes(GWindow gw);
+extern int GDrawPointsToPixels(GWindow gw,int points);
+extern int GDrawPixelsToPoints(GWindow gw,int pixels);
+
+extern void GDrawSetDefaultIcon(GWindow icon);
+extern GWindow GDrawCreateTopWindow(GDisplay *gdisp, GRect *pos, int (*eh)(GWindow,GEvent *), void *user_data, GWindowAttrs *wattrs);
+extern GWindow GDrawCreateSubWindow(GWindow w, GRect *pos, int (*eh)(GWindow,GEvent *), void *user_data, GWindowAttrs *wattrs);
+extern GWindow GDrawCreatePixmap(GDisplay *gdisp, uint16 width, uint16 height);
+extern GWindow GDrawCreateBitmap(GDisplay *gdisp, uint16 width, uint16 height, uint8 *data);
+extern GCursor GDrawCreateCursor(GWindow src,GWindow mask,Color fg,Color bg,
+ int16 x, int16 y );
+extern void GDrawDestroyWindow(GWindow w);
+extern void GDrawDestroyCursor(GDisplay *gdisp, GCursor ct);
+extern int GDrawNativeWindowExists(GDisplay *gdisp, void *native);
+extern void GDrawSetZoom(GWindow w, GRect *zoomsize, enum gzoom_flags);
+extern void GDrawSetWindowBorder(GWindow w, int width, Color color);
+extern int GDrawSetDither(GDisplay *gdisp, int dither);
+extern void GDrawReparentWindow(GWindow child,GWindow newparent, int x,int y);
+extern void GDrawSetVisible(GWindow w, int visible);
+extern int GDrawIsVisible(GWindow w);
+extern void GDrawTrueMove(GWindow w, int32 x, int32 y);
+extern void GDrawMove(GWindow w, int32 x, int32 y);
+extern void GDrawResize(GWindow w, int32 width, int32 height);
+extern void GDrawMoveResize(GWindow w, int32 x, int32 y, int32 width, int32 height);
+extern GWindow GDrawGetRoot(GDisplay *);
+extern Color GDrawGetDefaultBackground(GDisplay *);
+extern Color GDrawGetDefaultForeground(GDisplay *);
+extern GRect *GDrawGetSize(GWindow w, GRect *ret);
+extern GDrawEH GDrawGetEH(GWindow w);
+extern void GDrawSetEH(GWindow w,GDrawEH e_h);
+extern void GDrawGetPointerPosition(GWindow w, GEvent *mouse);
+extern GWindow GDrawGetPointerWindow(GWindow w);
+extern void GDrawRaise(GWindow w);
+extern void GDrawRaiseAbove(GWindow w,GWindow below);
+extern int GDrawIsAbove(GWindow w,GWindow other);
+extern void GDrawLower(GWindow w);
+extern void GDrawSetWindowTitles(GWindow w, const unichar_t *title, const unichar_t *icontit);
+extern void GDrawSetWindowTitles8(GWindow w, const char *title, const char *icontit);
+extern unichar_t *GDrawGetWindowTitle(GWindow w);
+extern char *GDrawGetWindowTitle8(GWindow w);
+extern void GDrawSetCursor(GWindow w, GCursor ct);
+extern GCursor GDrawGetCursor(GWindow w);
+extern GWindow GDrawGetRedirectWindow(GDisplay *gd);
+extern GWindow GDrawGetParentWindow(GWindow gw);
+extern int GDrawWindowIsAncestor(GWindow ancester, GWindow descendent);
+extern void GDrawSetUserData(GWindow gw, void *ud);
+extern void *GDrawGetUserData(GWindow gw);
+extern GDisplay *GDrawGetDisplayOfWindow(GWindow);
+extern void GDrawTranslateCoordinates(GWindow from,GWindow to, GPoint *pt);
+extern int32 GDrawEventInWindow(GWindow inme,GEvent *event);
+extern void GDrawBeep(GDisplay *gdisp);
+extern void GDrawFlush(GDisplay *gdisp);
+
+extern void GDrawGetClip(GWindow w, GRect *ret);
+extern void GDrawSetClip(GWindow w, GRect *rct);
+extern void GDrawPushClip(GWindow w, GRect *rct, GRect *old);
+extern void GDrawPopClip(GWindow w, GRect *old);
+extern GGC *GDrawGetWindowGGC(GWindow w);
+extern void GDrawSetXORBase(GWindow w,Color col);
+extern void GDrawSetXORMode(GWindow w);
+extern void GDrawSetCopyMode(GWindow w);
+extern void GDrawSetCopyThroughSubWindows(GWindow w,int16 through);
+extern void GDrawSetDashedLine(GWindow w,int16 dash_len, int16 skip_len, int16 off);
+extern void GDrawSetStippled(GWindow w,int16 ts, int32 yoff,int32 xoff);
+extern void GDrawSetLineWidth(GWindow w,int16 width);
+extern void GDrawSetForeground(GWindow w,Color col);
+extern void GDrawSetBackground(GWindow w,Color col);
+
+extern GFont *GDrawSetFont(GWindow gw, GFont *fi);
+extern GFont *GDrawInstanciateFont(GDisplay *disp, FontRequest *rq);
+extern GFont *GDrawAttachFont(GWindow gw, FontRequest *rq);
+extern FontRequest *GDrawDecomposeFont(GFont *fi, FontRequest *rq);
+extern enum charset GDrawFindEncoding(unichar_t *text, int32 len,
+ GFont *fi, unichar_t **next, int *ulevel);
+extern void GDrawFontMetrics(GFont *fi,int *as, int *ds, int *ld);
+extern void GDrawWindowFontMetrics(GWindow gw,GFont *fi,int *as, int *ds, int *ld);
+extern int32 GDrawGetTextPtAfterPos(GWindow gw,unichar_t *text, int32 cnt, FontMods *mods,
+ int32 maxwidth, unichar_t **end);
+extern int32 GDrawGetTextPtBeforePos(GWindow gw,unichar_t *text, int32 cnt, FontMods *mods,
+ int32 maxwidth, unichar_t **end);
+extern int32 GDrawGetTextPtFromPos(GWindow gw,unichar_t *text, int32 cnt, FontMods *mods,
+ int32 maxwidth, unichar_t **end);
+int32 GDrawGetTextBounds(GWindow gw,const unichar_t *text, int32 cnt, FontMods *mods,
+ GTextBounds *size);
+extern int32 GDrawGetTextWidth(GWindow gw, const unichar_t *text, int32 cnt, FontMods *mods);
+extern int32 GDrawDrawText(GWindow gw, int32 x, int32 y, const unichar_t *txt, int32 cnt, FontMods *mods, Color col);
+/* Routines that handle bidirectional text */
+/* (slower than the equivalent left to right routines) */
+/* will call pango if available. */
+extern int32 GDrawDrawBiText(GWindow gw, int32 x, int32 y, const unichar_t *txt, int32 cnt, FontMods *mods, Color col);
+extern int32 GDrawDrawBiText8(GWindow gw, int32 x, int32 y, const char *txt, int32 cnt, FontMods *mods, Color col);
+extern int32 GDrawGetBiTextWidth(GWindow gw,const unichar_t *text, int len, int32 cnt, FontMods *mods);
+extern int32 GDrawGetBiText8Width(GWindow gw,const char *text, int len, int32 cnt, FontMods *mods);
+extern int32 GDrawGetBiTextPtAfterPos(GWindow gw,const unichar_t *text, int32 cnt, FontMods *mods,
+ int32 maxwidth, unichar_t **end);
+extern int32 GDrawGetBiTextPtBeforePos(GWindow gw,const unichar_t *text, int32 cnt, FontMods *mods,
+ int32 maxwidth, unichar_t **end);
+extern int32 GDrawGetBiTextPtFromPos(GWindow gw,const unichar_t *text, int32 cnt, FontMods *mods,
+ int32 maxwidth, unichar_t **end);
+extern int32 GDrawGetBiTextBounds(GWindow gw,const unichar_t *text, int32 cnt, FontMods *mods, GTextBounds *bounds);
+extern int32 GDrawGetBiText8Bounds(GWindow gw,const char *text, int32 cnt, FontMods *mods, GTextBounds *bounds);
+extern int GDrawFontHasCharset(FontInstance *fi,/*enum charset*/int charset);
+extern int32 GDrawIsAllLeftToRight(const unichar_t *text, int32 cnt);
+extern int32 GDrawIsAllLeftToRight8(const char *text, int32 cnt);
+extern void GDrawBiText1(GBiText *bd, const unichar_t *text, int32 cnt);
+extern void GDrawArabicForms(GBiText *bd, int32 start, int32 end);
+extern void _GDrawBiText2(GBiText *bd, int32 start, int32 end);
+extern void GDrawBiText2(GBiText *bd, int32 start, int32 end);
+/* UTF8 routines */
+extern int32 GDrawGetText8PtAfterPos(GWindow gw,char *text, int32 cnt, FontMods *mods,
+ int32 maxwidth, char **end);
+extern int32 GDrawGetText8PtBeforePos(GWindow gw,char *text, int32 cnt, FontMods *mods,
+ int32 maxwidth, char **end);
+extern int32 GDrawGetText8PtFromPos(GWindow gw,char *text, int32 cnt, FontMods *mods,
+ int32 maxwidth, char **end);
+int32 GDrawGetText8Bounds(GWindow gw,char *text, int32 cnt, FontMods *mods,
+ GTextBounds *size);
+extern int32 GDrawGetText8Width(GWindow gw, const char *text, int32 cnt, FontMods *mods);
+extern int32 GDrawDrawText8(GWindow gw, int32 x, int32 y, const char *txt, int32 cnt, FontMods *mods, Color col);
+
+extern GIC *GDrawCreateInputContext(GWindow w,enum gic_style def_style);
+extern void GDrawSetGIC(GWindow w,GIC *gic,int x, int y);
+
+extern void GDrawClear(GWindow w, GRect *rect);
+extern void GDrawDrawLine(GWindow w, int32 x,int32 y, int32 xend,int32 yend, Color col);
+extern void GDrawDrawArrow(GWindow w, int32 x,int32 y, int32 xend,int32 yend, int arrows, Color col);
+extern void GDrawDrawRect(GWindow w, GRect *rect, Color col);
+extern void GDrawFillRect(GWindow w, GRect *rect, Color col);
+extern void GDrawDrawElipse(GWindow w, GRect *rect, Color col);
+extern void GDrawFillElipse(GWindow w, GRect *rect, Color col);
+extern void GDrawDrawArc(GWindow w, GRect *rect, int32 sangle, int32 tangle, Color col);
+extern void GDrawDrawPoly(GWindow w, GPoint *pts, int16 cnt, Color col);
+extern void GDrawFillPoly(GWindow w, GPoint *pts, int16 cnt, Color col);
+extern void GDrawScroll(GWindow w, GRect *rect, int32 hor, int32 vert);
+extern void GDrawDrawImage(GWindow w, GImage *img, GRect *src, int32 x, int32 y);
+extern void GDrawDrawGlyph(GWindow w, GImage *img, GRect *src, int32 x, int32 y);
+extern void GDrawDrawScaledImage(GWindow w, GImage *img, int32 x, int32 y);
+extern void GDrawDrawImageMagnified(GWindow w, GImage *img, GRect *src, int32 x, int32 y,
+ int32 width, int32 height);
+extern void GDrawTileImage(GWindow w, GImage *img, GRect *src, int32 x, int32 y);
+extern void GDrawDrawPixmap(GWindow w, GWindow pixmap, GRect *src, int32 x, int32 y);
+extern void GDrawTilePixmap(GWindow w, GWindow pixmap, GRect *src, int32 x, int32 y);
+extern GImage *GDrawCopyScreenToImage(GWindow w, GRect *rect);
+
+extern void GDrawGrabSelection(GWindow w,enum selnames sel);
+extern void GDrawAddSelectionType(GWindow w,enum selnames sel,char *type,
+ void *data,int32 cnt,int32 unitsize,void *(*gendata)(void *,int32 *len),
+ void (*freedata)(void *));
+extern void *GDrawRequestSelection(GWindow w,enum selnames sn, char *typename, int32 *len);
+extern int GDrawSelectionHasType(GWindow w,enum selnames sn, char *typename);
+extern void GDrawBindSelection(GDisplay *disp,enum selnames sel, char *atomname);
+extern int GDrawSelectionOwned(GDisplay *disp,enum selnames sel);
+extern void GDrawPropertyToSelectionOwner(GDisplay *disp,enum selnames sel,
+ char *property, char *type, int format, int mode,
+ uint8 *data, int nelements);
+
+extern void GDrawPointerUngrab(GDisplay *disp);
+extern void GDrawPointerGrab(GWindow w);
+extern int GDrawEnableExposeRequests(GWindow w,int enabled);
+extern void GDrawRequestExpose(GWindow w, GRect *rect, int doclear);
+extern void GDrawSync(GDisplay *gdisp);
+extern void GDrawForceUpdate(GWindow w);
+extern void GDrawProcessOneEvent(GDisplay *disp);
+extern void GDrawProcessPendingEvents(GDisplay *disp);
+extern void GDrawProcessWindowEvents(GWindow w);
+extern void GDrawSkipMouseMoveEvents(GWindow w,GEvent *last);
+extern void GDrawEventLoop(GDisplay *disp);
+extern void GDrawPostEvent(GEvent *e);
+extern void GDrawPostDragEvent(GWindow gw,GEvent *e,enum event_type);
+
+extern GTimer *GDrawRequestTimer(GWindow w,int32 time_from_now,int32 frequency,
+ void *userdata);
+extern void GDrawCancelTimer(GTimer *timer);
+
+extern void GDrawSyncThread(GDisplay *gd, void (*func)(void *), void *data);
+
+extern GWindow GPrinterStartJob(GDisplay *gdisp,void *user_data,GPrinterAttrs *attrs);
+extern void GPrinterNextPage(GWindow w);
+extern int GPrinterEndJob(GWindow w,int cancel);
+
+extern void GDrawSetBuildCharHooks(void (*hook)(GDisplay *), void (*inshook)(GDisplay *,unichar_t));
+
+extern int GDrawRequestDeviceEvents(GWindow w,int devcnt,struct gdeveventmask *de);
+
+extern enum gcairo_flags GDrawHasCairo(GWindow w);
+extern void GDrawQueueDrawing(GWindow w,void (*)(GWindow,void *),void *);
+extern void GDrawPathStartNew(GWindow w);
+extern void GDrawPathClose(GWindow w);
+extern void GDrawPathMoveTo(GWindow w,double x, double y);
+extern void GDrawPathLineTo(GWindow w,double x, double y);
+extern void GDrawPathCurveTo(GWindow w,
+ double cx1, double cy1,
+ double cx2, double cy2,
+ double x, double y);
+extern void GDrawPathStroke(GWindow w,Color col);
+extern void GDrawPathFill(GWindow w,Color col);
+extern void GDrawPathFillAndStroke(GWindow w,Color fillcol, Color strokecol);
+extern void GDrawEnableCairo(int on);
+extern void GDrawEnablePango(int on);
+
+extern void GDrawLayoutInit(GWindow w, char *text, int cnt, GFont *fi);
+extern void GDrawLayoutDraw(GWindow w, int32 x, int32 y, Color fg);
+extern void GDrawLayoutIndexToPos(GWindow w, int index, GRect *pos);
+extern int GDrawLayoutXYToIndex(GWindow w, int x, int y);
+extern void GDrawLayoutExtents(GWindow w, GRect *size);
+extern void GDrawLayoutSetWidth(GWindow w, int width);
+extern int GDrawLayoutLineCount(GWindow w);
+extern int GDrawLayoutLineStart(GWindow w,int line);
+
+extern void GDrawFatalError(const char *fmt,...);
+extern void GDrawIError(const char *fmt,...);
+extern void GDrawError(const char *fmt,...);
+
+extern int GImageGetScaledWidth(GWindow gw, GImage *img);
+extern int GImageGetScaledHeight(GWindow gw, GImage *img);
+#endif