From: handa Date: Thu, 27 May 2004 09:20:23 +0000 (+0000) Subject: (MDeviceType): New enum. X-Git-Tag: withdl~163 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=4c45b7629dd3fbae1f04a9f8e6de6d7f0f09c5af;p=m17n%2Fm17n-lib.git (MDeviceType): New enum. (MWDefice): Delete it. (struct MFrame): Change type of device to void *. New members device_type, driver, font_driver_list. (M_CHECK_WRITABLE, M_CHECK_READABLE): New macros. (MDeviceDriver): New type. (Mx, Mgd, Mfreetype): Extern them. (mwin__XXX): Delete all of them. --- diff --git a/src/internal-gui.h b/src/internal-gui.h index 325a41e..dc13947 100644 --- a/src/internal-gui.h +++ b/src/internal-gui.h @@ -23,13 +23,18 @@ #ifndef _M_INTERNAL_GUI_H #define _M_INTERNAL_GUI_H -typedef struct MWDevice MWDevice; +enum MDeviceType + { + MDEVICE_SUPPORT_OUTPUT = 1, + MDEVICE_SUPPORT_INPUT = 2 + }; extern MSymbol Mfont; typedef struct MRealizedFont MRealizedFont; typedef struct MRealizedFace MRealizedFace; typedef struct MRealizedFontset MRealizedFontset; +typedef struct MDeviceDriver MDeviceDriver; /** Information about a frame. */ @@ -37,10 +42,6 @@ struct MFrame { M17NObject control; - /** Pointer to a window-system dependent device object associated - with the frame. */ - MWDevice *device; - MSymbol foreground, background, videomode; MFont *font; @@ -59,7 +60,25 @@ struct MFrame descent of ASCII font of the default face. */ int ascent, descent; - /** The following three members are set by mwin__open_device (). */ + /** Initialized to 0 and incremented on each modification of a face + on which one of the realized faces is based. */ + unsigned tick; + + /** Pointer to device dependent information associated with the + frame. */ + void *device; + + /** The following members are set by "device_open" function of a + device dependent library. */ + + /** Logical OR of enum MDeviceType. */ + int device_type; + + /** Correction of functions to manipulate the device. */ + MDeviceDriver *driver; + + /** List of font drivers. */ + MPlist *font_driver_list; /** List of realized fonts. */ MPlist *realized_font_list; @@ -69,12 +88,20 @@ struct MFrame /** List of realized fontsets. */ MPlist *realized_fontset_list; - - /** Initialized to 0 and incremented on each modification of a face - on which one of the realized faces is based. */ - unsigned tick; }; +#define M_CHECK_WRITABLE(frame, err, ret) \ + do { \ + if (! ((frame)->device_type & MDEVICE_SUPPORT_OUTPUT)) \ + MERROR ((err), (ret)); \ + } while (0) + +#define M_CHECK_READABLE(frame, err, ret) \ + do { \ + if (! ((frame)->device_type & MDEVICE_SUPPORT_INPUT)) \ + MERROR ((err), (ret)); \ + } while (0) + enum glyph_type { GLYPH_CHAR, @@ -200,6 +227,55 @@ typedef struct short x, y; } MDrawPoint; +struct MDeviceDriver +{ + void (*close) (MFrame *frame); + void *(*get_prop) (MFrame *frame, MSymbol key); + void (*realize_face) (MRealizedFace *rface); + void (*free_realized_face) (MRealizedFace *rface); + void (*fill_space) (MFrame *frame, MDrawWindow win, + MRealizedFace *rface, int reverse, + int x, int y, int width, int height, + MDrawRegion region); + void (*draw_empty_boxes) (MDrawWindow win, int x, int y, + MGlyphString *gstring, + MGlyph *from, MGlyph *to, + int reverse, MDrawRegion region); + void (*draw_hline) (MFrame *frame, MDrawWindow win, + MGlyphString *gstring, + MRealizedFace *rface, int reverse, + int x, int y, int width, MDrawRegion region); + void (*draw_box) (MFrame *frame, MDrawWindow win, + MGlyphString *gstring, + MGlyph *g, int x, int y, int width, + MDrawRegion region); + + void (*draw_points) (MFrame *frame, MDrawWindow win, + MRealizedFace *rface, + int intensity, MDrawPoint *points, int num, + MDrawRegion region); + MDrawRegion (*region_from_rect) (MDrawMetric *rect); + void (*union_rect_with_region) (MDrawRegion region, MDrawMetric *rect); + void (*intersect_region) (MDrawRegion region1, MDrawRegion region2); + void (*region_add_rect) (MDrawRegion region, MDrawMetric *rect); + void (*region_to_rect) (MDrawRegion region, MDrawMetric *rect); + void (*free_region) (MDrawRegion region); + void (*dump_region) (MDrawRegion region); + MDrawWindow (*create_window) (MFrame *frame, MDrawWindow parent); + void (*destroy_window) (MFrame *frame, MDrawWindow win); + void (*map_window) (MFrame *frame, MDrawWindow win); + void (*unmap_window) (MFrame *frame, MDrawWindow win); + void (*window_geometry) (MFrame *frame, MDrawWindow win, + MDrawWindow parent, MDrawMetric *geometry); + void (*adjust_window) (MFrame *frame, MDrawWindow win, + MDrawMetric *current, MDrawMetric *new); + MSymbol (*parse_event) (MFrame *frame, void *arg, int *modifiers); +}; + +extern MSymbol Mx; +extern MSymbol Mgd; +extern MSymbol Mfreetype; + extern int mfont__init (); extern void mfont__fini (); @@ -215,90 +291,4 @@ extern void mfont__fontset_fini (); extern int minput__win_init (); extern void minput__win_fini (); -extern int mwin__init (); -extern void mwin__fini (); - -extern MWDevice *mwin__open_device (MFrame *frame, MPlist *plist); - -extern void mwin__close_device (MFrame *frame); - -extern void *mwin__device_get_prop (MWDevice *device, MSymbol key); - -extern int mwin__parse_font_name (char *name, MFont *font); - -extern char *mwin__build_font_name (MFont *font); - -extern void mwin__realize_face (MRealizedFace *rface); - -extern void mwin__free_realized_face (MRealizedFace *rface); - -extern void mwin__fill_space (MFrame *frame, MDrawWindow win, - MRealizedFace *rface, int reverse, - int x, int y, int width, int height, - MDrawRegion region); - -extern void mwin__draw_rect (MFrame *frame, MDrawWindow win, - MRealizedFace *face, - int x, int y, int width, int height, - MDrawRegion region); - -extern void mwin__draw_empty_boxes (MDrawWindow win, int x, int y, - MGlyphString *gstring, - MGlyph *from, MGlyph *to, - int reverse, MDrawRegion region); - -extern void mwin__draw_hline (MFrame *frame, MDrawWindow win, - MGlyphString *gstring, - MRealizedFace *rface, int reverse, - int x, int y, int width, MDrawRegion region); - -extern void mwin__draw_box (MFrame *frame, MDrawWindow win, - MGlyphString *gstring, - MGlyph *g, int x, int y, int width, - MDrawRegion region); - -extern void mwin__draw_points (MFrame *frame, MDrawWindow win, - MRealizedFace *rface, - int intensity, MDrawPoint *points, int num, - MDrawRegion region); - -extern MDrawRegion mwin__region_from_rect (MDrawMetric *rect); - -extern void mwin__union_rect_with_region (MDrawRegion region, - MDrawMetric *rect); - -extern void mwin__intersect_region (MDrawRegion region1, MDrawRegion region2); - -extern void mwin__region_add_rect (MDrawRegion region, MDrawMetric *rect); - -extern void mwin__region_to_rect (MDrawRegion region, MDrawMetric *rect); - -extern void mwin__free_region (MDrawRegion region); - -extern void mwin__verify_region (MFrame *frame, MDrawRegion region); - -extern void mwin__dump_region (MDrawRegion region); - -extern MDrawWindow mwin__create_window (MFrame *frame, MDrawWindow parent); - -extern void mwin__destroy_window (MFrame *frame, MDrawWindow win); - -#if 0 -extern MDrawWindow mwin__event_window (void *event); - -extern void mwin__print_event (void *event, char *win_name); -#endif - -extern void mwin__map_window (MFrame *frame, MDrawWindow win); - -extern void mwin__unmap_window (MFrame *frame, MDrawWindow win); - -extern void mwin__window_geometry (MFrame *frame, MDrawWindow win, - MDrawWindow parent, MDrawMetric *geometry); - -extern void mwin__adjust_window (MFrame *frame, MDrawWindow win, - MDrawMetric *current, MDrawMetric *new); - -extern MSymbol mwin__parse_event (MFrame *frame, void *arg, int *modifiers); - #endif /* _M_INTERNAL_GUI_H */