X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gdk%2Fwin32%2Fgdkprivate-win32.h;h=d4a06fc1a960b2de04ad137f21e09c4328724f4c;hb=5a4e1abbfcb746352f3f3a5ff28fa27cbf0ba4d5;hp=a35bd703b0b80b9a4e24314139b1d11c3e56ccf8;hpb=d23e3848a93e052763c6290528312b9f1e332df2;p=~andy%2Fgtk diff --git a/gdk/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h index a35bd703b..d4a06fc1a 100644 --- a/gdk/win32/gdkprivate-win32.h +++ b/gdk/win32/gdkprivate-win32.h @@ -24,11 +24,12 @@ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ -#ifndef __GDK_PRIVATE_H__ -#define __GDK_PRIVATE_H__ +#ifndef __GDK_PRIVATE_WIN32_H__ +#define __GDK_PRIVATE_WIN32_H__ #define STRICT /* We want strict type checks */ #include +#include /* Make up for some minor mingw32 lossage */ @@ -42,15 +43,26 @@ #define CLR_INVALID CLR_NONE #endif -/* MB_CUR_MAX is missing */ -#ifndef MB_CUR_MAX -extern int *__imp___mb_cur_max; -#define MB_CUR_MAX (*__imp___mb_cur_max) +/* Some charsets are missing */ +#ifndef JOHAB_CHARSET +#define JOHAB_CHARSET 130 +#endif +#ifndef VIETNAMESE_CHARSET +#define VIETNAMESE_CHARSET 163 +#endif + +#ifndef FS_VIETNAMESE +#define FS_VIETNAMESE 0x100 +#endif + +#ifndef VM_OEM_PLUS +#define VK_OEM_PLUS 0xBB #endif #include #include +#include #include #include @@ -58,23 +70,9 @@ extern int *__imp___mb_cur_max; #include #include #include -#include #include #include -#define GDK_DRAWABLE_TYPE(d) (((GdkDrawablePrivate *)d)->window_type) -#define GDK_IS_WINDOW(d) (GDK_DRAWABLE_TYPE(d) <= GDK_WINDOW_TEMP || \ - GDK_DRAWABLE_TYPE(d) == GDK_WINDOW_FOREIGN) -#define GDK_IS_PIXMAP(d) (GDK_DRAWABLE_TYPE(d) == GDK_DRAWABLE_PIXMAP) -#define GDK_DRAWABLE_DESTROYED(d) (((GdkDrawablePrivate *)d)->destroyed) - -#define gdk_window_lookup(xid) ((GdkWindow*) gdk_xid_table_lookup (xid)) -#define gdk_pixmap_lookup(xid) ((GdkPixmap*) gdk_xid_table_lookup (xid)) - -/* HFONTs clash with HWNDs, so add dithering to HFONTs... (hack) */ -#define HFONT_DITHER 43 -#define gdk_font_lookup(xid) ((GdkFont*) gdk_xid_table_lookup ((HANDLE) ((guint) xid + HFONT_DITHER))) - #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ @@ -82,13 +80,8 @@ extern "C" { /* Define corresponding Windows types for some X11 types, just for laziness. */ -typedef HANDLE XID; typedef PALETTEENTRY XColor; -typedef HDC GC; -typedef ATOM Atom; -typedef HCURSOR Cursor; typedef guint VisualID; -typedef DWORD KeySym; typedef int Status; /* Define some of the X11 constants also here, again just for laziness */ @@ -103,14 +96,6 @@ typedef int Status; #define GrabSuccess 0 #define AlreadyGrabbed 2 -/* For CreateColormap */ -#define AllocNone 0 -#define AllocAll 1 - -/* Notify modes */ -#define NotifyNormal 0 -#define NotifyHint 1 - /* Some structs are somewhat useful to emulate internally, just to keep the code less #ifdefed. */ typedef struct { @@ -140,46 +125,64 @@ typedef struct { unsigned long base_pixel; } XStandardColormap; -typedef struct _GdkDrawablePrivate GdkDrawablePrivate; -/* typedef struct _GdkDrawablePrivate GdkPixmapPrivate; */ -typedef struct _GdkWindowPrivate GdkWindowPrivate; -typedef struct _GdkImagePrivate GdkImagePrivate; -typedef struct _GdkGCPrivate GdkGCPrivate; -typedef struct _GdkColormapPrivate GdkColormapPrivate; -typedef struct _GdkColorInfo GdkColorInfo; -typedef struct _GdkVisualPrivate GdkVisualPrivate; -typedef struct _GdkFontPrivate GdkFontPrivate; -typedef struct _GdkCursorPrivate GdkCursorPrivate; -typedef struct _GdkEventFilter GdkEventFilter; -typedef struct _GdkClientFilter GdkClientFilter; -typedef struct _GdkRegionPrivate GdkRegionPrivate; - -struct _GdkDrawablePrivate +typedef struct _GdkGCWin32Data GdkGCWin32Data; +typedef struct _GdkDrawableWin32Data GdkDrawableWin32Data; +typedef struct _GdkWindowWin32Data GdkWindowWin32Data; +typedef struct _GdkColormapPrivateWin32 GdkColormapPrivateWin32; +typedef struct _GdkCursorPrivate GdkCursorPrivate; +typedef struct _GdkWin32SingleFont GdkWin32SingleFont; +typedef struct _GdkFontPrivateWin32 GdkFontPrivateWin32; +typedef struct _GdkImagePrivateWin32 GdkImagePrivateWin32; +typedef struct _GdkVisualPrivate GdkVisualPrivate; +typedef struct _GdkRegionPrivate GdkRegionPrivate; +typedef struct _GdkICPrivate GdkICPrivate; + +#define GDK_DRAWABLE_WIN32DATA(win) ((GdkDrawableWin32Data *)(((GdkDrawablePrivate*)(win))->klass_data)) +#define GDK_WINDOW_WIN32DATA(win) ((GdkWindowWin32Data *)(((GdkDrawablePrivate*)(win))->klass_data)) +#define GDK_GC_WIN32DATA(gc) ((GdkGCWin32Data *)(((GdkGCPrivate*)(gc))->klass_data)) + +struct _GdkGCWin32Data { - GdkDrawable drawable; - - guint8 window_type; - guint ref_count; - - guint16 width; - guint16 height; - - HANDLE xwindow; - GdkColormap *colormap; - - guint destroyed : 2; + /* A Windows Device Context (DC) is not equivalent to an X11 + * GC. We can use a DC only in the window for which it was + * allocated, or (in the case of a memory DC) with the bitmap that + * has been selected into it. Thus, we have to release and + * reallocate a DC each time the GdkGC is used to paint into a new + * window or pixmap. We thus keep all the necessary values in the + * GdkGCWin32Data struct. + */ + HDC xgc; + GdkGCValuesMask values_mask; + gulong foreground; /* Pixel values from GdkColor, */ + gulong background; /* not Win32 COLORREFs */ + GdkFont *font; + gint rop2; + GdkFill fill_style; + GdkPixmap *tile; + GdkPixmap *stipple; + HRGN clip_region; + GdkSubwindowMode subwindow_mode; + gint ts_x_origin; + gint ts_y_origin; + gint clip_x_origin; + gint clip_y_origin; + gint graphics_exposures; + gint pen_width; + DWORD pen_style; + HANDLE hwnd; /* If a DC is allocated, for which window + * or what bitmap is selected into it + */ + int saved_dc; }; -struct _GdkWindowPrivate +struct _GdkDrawableWin32Data { - GdkDrawablePrivate drawable; + HANDLE xid; +}; - GdkWindow *parent; - gint16 x; - gint16 y; - guint8 resize_count; - guint mapped : 1; - guint guffaw_gravity : 1; +struct _GdkWindowWin32Data +{ + GdkDrawableWin32Data drawable; /* We must keep the event mask here to filter them ourselves */ gint event_mask; @@ -193,7 +196,7 @@ struct _GdkWindowPrivate /* We draw the background ourselves at WM_ERASEBKGND */ guchar bg_type; - GdkColor bg_pixel; + gulong bg_pixel; /* GdkColor pixel, not COLORREF */ GdkPixmap *bg_pixmap; HCURSOR xcursor; @@ -204,120 +207,54 @@ struct _GdkWindowPrivate gint hint_min_width, hint_min_height; gint hint_max_width, hint_max_height; - gint extension_events; gboolean extension_events_selected; - GList *filters; - GList *children; + HKL input_locale; + CHARSETINFO charset_info; }; -struct _GdkImagePrivate +struct _GdkCursorPrivate { - GdkImage image; - HBITMAP ximage; - gpointer x_shm_info; - - void (*image_put) (GdkDrawable *window, - GdkGC *gc, - GdkImage *image, - gint xsrc, - gint ysrc, - gint xdest, - gint ydest, - gint width, - gint height); + GdkCursor cursor; + HCURSOR xcursor; }; -struct _GdkGCPrivate +struct _GdkWin32SingleFont { - GdkGC gc; - GC xgc; - /* A Windows Device Context (DC) is not equivalent to an X11 - * GC. We can use a DC only in the window for which it was - * allocated, or (in the case of a memory DC) with the bitmap that - * has been selected into it. Thus, we have to release and - * reallocate a DC each time the GdkGC is used to paint into a new - * window or pixmap. We thus keep all the necessary values in the - * GdkGCPrivate struct. - */ - GdkGCValuesMask values_mask; - GdkColor foreground; - GdkColor background; - HFONT font; - gint rop2; - GdkFill fill_style; - GdkPixmap *tile; - GdkPixmap *stipple; - HRGN clip_region; - GdkSubwindowMode subwindow_mode; - gint ts_x_origin; - gint ts_y_origin; - gint clip_x_origin; - gint clip_y_origin; - gint graphics_exposures; - gint pen_width; - DWORD pen_style; - HANDLE hwnd; /* If a DC is allocated, for which window - or what bitmap is selected into it */ - int saved_dc; - guint ref_count; + HFONT xfont; + UINT charset; + UINT codepage; + FONTSIGNATURE fs; }; -typedef enum { - GDK_COLOR_WRITEABLE = 1 << 0 -} GdkColorInfoFlags; +struct _GdkFontPrivateWin32 +{ + GdkFontPrivate base; + GSList *fonts; /* List of GdkWin32SingleFonts */ + GSList *names; +}; -struct _GdkColorInfo +struct _GdkVisualPrivate { - GdkColorInfoFlags flags; - guint ref_count; + GdkVisual visual; + Visual *xvisual; }; -struct _GdkColormapPrivate +struct _GdkColormapPrivateWin32 { - GdkColormap colormap; + GdkColormapPrivate base; Colormap xcolormap; - GdkVisual *visual; gint private_val; GHashTable *hash; GdkColorInfo *info; time_t last_sync_time; - - guint ref_count; -}; - -struct _GdkVisualPrivate -{ - GdkVisual visual; - Visual *xvisual; -}; - -struct _GdkFontPrivate -{ - GdkFont font; - /* XFontStruct *xfont; */ - /* generic pointer point to XFontStruct or XFontSet */ - /* in Win32 a HFONT */ - gpointer xfont; - guint ref_count; }; -struct _GdkCursorPrivate +struct _GdkImagePrivateWin32 { - GdkCursor cursor; - Cursor xcursor; -}; - -struct _GdkEventFilter { - GdkFilterFunc function; - gpointer data; -}; - -struct _GdkClientFilter { - GdkAtom type; - GdkFilterFunc function; - gpointer data; + GdkImagePrivate base; + HBITMAP ximage; }; struct _GdkRegionPrivate @@ -326,69 +263,72 @@ struct _GdkRegionPrivate HRGN xregion; }; -typedef enum { - GDK_DEBUG_MISC = 1 << 0, - GDK_DEBUG_EVENTS = 1 << 1, - GDK_DEBUG_DND = 1 << 2, - GDK_DEBUG_COLOR_CONTEXT = 1 << 3, - GDK_DEBUG_XIM = 1 << 4, - GDK_DEBUG_SELECTION = 1 << 5 -} GdkDebugFlag; - -void gdk_events_init (void); -void gdk_window_init (void); -void gdk_visual_init (void); -void gdk_selection_init (void); -void gdk_dnd_init (void); -void gdk_dnd_exit (void); -void gdk_image_init (void); -void gdk_image_exit (void); +void gdk_win32_selection_init (void); +void gdk_win32_dnd_exit (void); GdkColormap* gdk_colormap_lookup (Colormap xcolormap); GdkVisual* gdk_visual_lookup (Visual *xvisual); -void gdk_window_add_colormap_windows (GdkWindow *window); -void gdk_window_destroy_notify (GdkWindow *window); - -void gdk_xid_table_insert (XID *xid, - gpointer data); -void gdk_xid_table_remove (XID xid); -gpointer gdk_xid_table_lookup (XID xid); - -/* Internal functions */ - -HDC gdk_gc_predraw (GdkDrawablePrivate *drawable_private, - GdkGCPrivate *gc_private); -void gdk_gc_postdraw (GdkDrawablePrivate *drawable_private, - GdkGCPrivate *gc_private); -HRGN BitmapToRegion (HBITMAP hBmp); - -void gdk_sel_prop_store (GdkWindow *owner, - GdkAtom type, - gint format, - guchar *data, - gint length); - -void gdk_event_queue_append (GdkEvent *event); - -/* Please see gdkwindow.c for comments on how to use */ -HWND gdk_window_xid_at(HWND base, gint bx, gint by, gint x, gint y, GList *excludes, gboolean excl_child); -HWND gdk_window_xid_at_coords(gint x, gint y, GList *excludes, gboolean excl_child); +void gdk_xid_table_insert (HANDLE *hnd, + gpointer data); +void gdk_xid_table_remove (HANDLE xid); +gpointer gdk_xid_table_lookup (HANDLE xid); + +GdkGC * _gdk_win32_gc_new (GdkDrawable *drawable, + GdkGCValues *values, + GdkGCValuesMask values_mask); +COLORREF gdk_colormap_color (GdkColormapPrivateWin32 *colormap_private, + gulong pixel); +HDC gdk_gc_predraw (GdkDrawable *drawable, + GdkGCPrivate *gc_private, + GdkGCValuesMask usage); +void gdk_gc_postdraw (GdkDrawable *drawable, + GdkGCPrivate *gc_private, + GdkGCValuesMask usage); +HRGN BitmapToRegion (HBITMAP hBmp); + +void gdk_sel_prop_store (GdkWindow *owner, + GdkAtom type, + gint format, + guchar *data, + gint length); + +gint gdk_nmbstowcs (GdkWChar *dest, + const gchar *src, + gint src_len, + gint dest_max); +gint gdk_nmbstowchar_ts (wchar_t *dest, + const gchar *src, + gint src_len, + gint dest_max); + +void gdk_wchar_text_handle (GdkFont *font, + const wchar_t *wcstr, + int wclen, + void (*handler)(GdkWin32SingleFont *, + const wchar_t *, + int, + void *), + void *arg); + +gchar *gdk_color_to_string (const GdkColor *); +gchar *gdk_win32_last_error_string (void); +void gdk_win32_api_failed (const gchar *where, + gint line, + const gchar *api); +#ifdef __GNUC__ +#define WIN32_API_FAILED(api) gdk_win32_api_failed (__PRETTY_FUNCTION__, __LINE__, api) +#else +#define WIN32_API_FAILED(api) gdk_win32_api_failed (__FILE__, __LINE__, api) +#endif + +extern LRESULT CALLBACK gdk_WindowProc (HWND, UINT, WPARAM, LPARAM); -extern gint gdk_debug_level; -extern gint gdk_show_events; -extern gint gdk_stack_trace; +extern GdkDrawableClass _gdk_win32_drawable_class; extern HWND gdk_root_window; -extern HWND gdk_leader_window; -GDKVAR GdkWindowPrivate gdk_root_parent; -GDKVAR Atom gdk_selection_property; -extern GdkWindow *selection_owner[]; +GDKVAR ATOM gdk_selection_property; GDKVAR gchar *gdk_progclass; -GDKVAR gint gdk_error_code; -GDKVAR gint gdk_error_warnings; -GDKVAR gint gdk_null_window_warnings; -extern GList *gdk_default_filters; -extern gint gdk_event_func_from_window_proc; +extern gboolean gdk_event_func_from_window_proc; extern HDC gdk_DC; extern HINSTANCE gdk_DLLInstance; @@ -401,31 +341,11 @@ extern GdkAtom gdk_clipboard_atom; extern GdkAtom gdk_win32_dropfiles_atom; extern GdkAtom gdk_ole2_dnd_atom; -extern LRESULT CALLBACK gdk_WindowProc (HWND, UINT, WPARAM, LPARAM); - -/* Debugging support */ - -#ifdef G_ENABLE_DEBUG - -#define GDK_NOTE(type,action) G_STMT_START { \ - if (gdk_debug_flags & GDK_DEBUG_##type) \ - { action; }; } G_STMT_END - -#else /* !G_ENABLE_DEBUG */ - -#define GDK_NOTE(type,action) - -#endif /* G_ENABLE_DEBUG */ - -GDKVAR guint gdk_debug_flags; - -/* Internal functions for debug output etc. */ - -char *gdk_color_to_string (GdkColor *); +extern DWORD windows_version; #ifdef __cplusplus } #endif /* __cplusplus */ -#endif /* __GDK_PRIVATE_H__ */ +#endif /* __GDK_PRIVATE_WIN32_H__ */