]> Pileus Git - ~andy/gtk/blobdiff - gdk/win32/gdkprivate-win32.h
Store just pixel value of background colour.
[~andy/gtk] / gdk / win32 / gdkprivate-win32.h
index a35bd703b0b80b9a4e24314139b1d11c3e56ccf8..d4a06fc1a960b2de04ad137f21e09c4328724f4c 100644 (file)
  * 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>
@@ -58,23 +70,9 @@ extern int *__imp___mb_cur_max;
 #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 */
@@ -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__ */