* 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 <windows.h>
+#include <commctrl.h>
/* Make up for some minor mingw32 lossage */
#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 <time.h>
#include <gdk/gdktypes.h>
+#include <gdk/gdkprivate.h>
#include <gdk/gdkcursor.h>
#include <gdk/gdkevents.h>
#include <gdk/gdkgc.h>
#include <gdk/gdkim.h>
#include <gdk/gdkimage.h>
-#include <gdk/gdkregion.h>
#include <gdk/gdkvisual.h>
#include <gdk/gdkwindow.h>
-#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 */
/* 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 */
#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 {
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;
/* 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;
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
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;
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__ */