]> Pileus Git - ~andy/gtk/blobdiff - gdk/win32/gdkwin32.h
Large changes to the Win32 backend, partially made necessary by the
[~andy/gtk] / gdk / win32 / gdkwin32.h
index 8b8c61905b40dff44ff03927075aa6886742c2bb..7ba6cd67aeec0b64d6994d142aac971973312fc4 100644 (file)
 #ifndef __GDK_WIN32_H__
 #define __GDK_WIN32_H__
 
-#include <gdk/win32/gdkprivate-win32.h>
+#include <gdk/gdkprivate.h>
+#include <gdk/gdkcursor.h>
 
-#include <time.h>
-#include <locale.h>
+#define STRICT                 /* We want strict type checks */
+#include <windows.h>
+#include <commctrl.h>
+
+/* Make up for some minor w32api header lossage */
+
+/* PS_JOIN_MASK is missing */
+#ifndef PS_JOIN_MASK
+#define PS_JOIN_MASK (PS_JOIN_BEVEL|PS_JOIN_MITER|PS_JOIN_ROUND)
+#endif
+
+/* CLR_INVALID is missing */
+#ifndef CLR_INVALID
+#define CLR_INVALID CLR_NONE
+#endif
+
+/* 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
+
+
+#ifndef WM_GETOBJECT
+#define WM_GETOBJECT 0x3D
+#endif
+
+#ifndef WM_NCXBUTTONDOWN
+#define WM_NCXBUTTONDOWN 0xAB
+#define WM_NCXBUTTONUP 0xAC
+#define WM_NCXBUTTONDBLCLK 0xAD
+#endif
+
+#ifndef WM_CHANGEUISTATE
+#define WM_CHANGEUISTATE 0x127
+#define WM_UPDATEUISTATE 0x128
+#define WM_QUERYUISTATE 0x129
+#endif
+
+#ifndef WM_XBUTTONDOWN
+#define WM_XBUTTONDOWN 0x20B
+#define WM_XBUTTONUP 0x20C
+#define WM_XBUTTONDBLCLK 0x20D
+#endif
+
+#ifndef WM_IME_REQUEST
+#define WM_IME_REQUEST 0x288
+#endif
+
+#ifndef WM_NCMOUSEHOVER
+#define WM_NCMOUSEHOVER 0x2A0
+#define WM_NCMOUSELEAVE 0x2A2
+#endif
+
+#ifndef WM_APPCOMMAND
+#define WM_APPCOMMAND 0x319
+#endif
+
+
+#include <gdk/gdkprivate.h>
+#include "gdkwin32.h"
+
+/* Define corresponding Windows types for some X11 types, just for laziness. */
+typedef PALETTEENTRY XColor;
+
+/* Define some of the X11 constants also here, again just for laziness */
+
+/* Error codes */
+#define Success            0
+
+/* Grabbing status */
+#define GrabSuccess       0
+#define AlreadyGrabbed    2
+
+/* Some structs are somewhat useful to emulate internally, just to
+ * keep the code less #ifdefed.
+ */
+typedef struct {
+  HPALETTE palette;            /* Palette handle used when drawing. */
+  guint size;                  /* Number of entries in the palette. */
+  gboolean stale;              /* 1 if palette needs to be realized,
+                                * otherwise 0. */
+  gboolean *in_use;
+  gboolean rc_palette;         /* If RC_PALETTE is on in the RASTERCAPS */
+  gulong sizepalette;          /* SIZEPALETTE if rc_palette */
+} ColormapStruct, *Colormap;
+  
+typedef struct {
+  gint map_entries;
+  guint visualid;
+  guint bitspixel;
+} Visual;
+
+typedef struct {
+  Colormap colormap;
+  unsigned long red_max;
+  unsigned long red_mult;
+  unsigned long green_max;
+  unsigned long green_mult;
+  unsigned long blue_max;
+  unsigned long blue_mult;
+  unsigned long base_pixel;
+} XStandardColormap;
+
+typedef struct _GdkGCWin32Data          GdkGCWin32Data;
+typedef struct _GdkDrawableWin32Data    GdkDrawableWin32Data;
+typedef struct _GdkWindowWin32Data      GdkWindowWin32Data;
+typedef struct _GdkWin32PositionInfo    GdkWin32PositionInfo;
+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
+{
+  GdkRegion *clip_region;
+
+  /* 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;
+  HRGN hcliprgn;
+  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;
+  GdkSubwindowMode subwindow_mode;
+  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 _GdkDrawableWin32Data
+{
+  HANDLE xid;
+};
+
+struct _GdkWin32PositionInfo
+{
+  gint x;
+  gint y;
+  gint width;
+  gint height;
+  gint x_offset;               /* Offsets to add to Win32 coordinates */
+  gint y_offset;               /* within window to get GDK coodinates */
+  gboolean big : 1;
+  gboolean mapped : 1;
+  gboolean no_bg : 1;          /* Set when the window background is 
+                                * temporarily unset during resizing
+                                * and scaling */
+  GdkRectangle clip_rect;      /* visible rectangle of window */
+};
+
+struct _GdkWindowWin32Data
+{
+  GdkDrawableWin32Data drawable;
+
+  GdkWin32PositionInfo position_info;
+
+  /* We must keep the event mask here to filter them ourselves */
+  gint event_mask;
+
+  /* Values for bg_type */
+#define GDK_WIN32_BG_NORMAL 0
+#define GDK_WIN32_BG_PIXEL 1
+#define GDK_WIN32_BG_PIXMAP 2
+#define GDK_WIN32_BG_PARENT_RELATIVE 3
+#define GDK_WIN32_BG_TRANSPARENT 4
+
+  /* We draw the background ourselves at WM_ERASEBKGND  */
+  guchar bg_type;
+  gulong bg_pixel;
+  GdkPixmap *bg_pixmap;
+
+  HCURSOR xcursor;
+
+  /* Window size hints */
+  gint hint_flags;
+  gint hint_x, hint_y;
+  gint hint_min_width, hint_min_height;
+  gint hint_max_width, hint_max_height;
+
+  gboolean extension_events_selected;
+
+  HKL input_locale;
+  CHARSETINFO charset_info;
+};
+
+struct _GdkCursorPrivate
+{
+  GdkCursor cursor;
+  HCURSOR xcursor;
+};
+
+struct _GdkWin32SingleFont
+{
+  HFONT xfont;
+  UINT charset;
+  UINT codepage;
+  FONTSIGNATURE fs;
+};
+
+struct _GdkFontPrivateWin32
+{
+  GdkFontPrivate base;
+  GSList *fonts;               /* List of GdkWin32SingleFonts */
+  GSList *names;
+};
+
+struct _GdkVisualPrivate
+{
+  GdkVisual visual;
+  Visual *xvisual;
+};
+
+struct _GdkColormapPrivateWin32
+{
+  GdkColormapPrivate base;
+  Colormap xcolormap;
+  gint private_val;
+
+  GHashTable *hash;
+  GdkColorInfo *info;
+  DWORD last_sync_time;
+};
+
+struct _GdkImagePrivateWin32
+{
+  GdkImagePrivate base;
+  HBITMAP ximage;
+};
 
 #define GDK_ROOT_WINDOW()             ((guint32) HWND_DESKTOP)
 #define GDK_ROOT_PARENT()             ((GdkWindow *) gdk_parent_root)
 #define GDK_COLORMAP_WIN32COLORMAP(cmap)(((GdkColormapPrivateWin32 *) cmap)->xcolormap)
 #define GDK_VISUAL_XVISUAL(vis)       (((GdkVisualPrivate *) vis)->xvisual)
 
-#define GDK_WINDOW_XDISPLAY          GDK_DRAWABLE_XDISPLAY
 #define GDK_WINDOW_XWINDOW           GDK_DRAWABLE_XID
-#define GDK_FONT_XFONT(font)          (((GdkWin32SingleFont *)((GdkFontPrivateWin32 *)font)->fonts->data)->xfont)
+#define GDK_WINDOW_XDISPLAY          GDK_DRAWABLE_XDISPLAY
 
-GdkVisual*   gdkx_visual_get   (VisualID xvisualid);
+GDKVAR gchar           *gdk_progclass;
+GDKVAR ATOM             gdk_selection_property;
 
 /* Functions to create GDK pixmaps and windows from their native equivalents */
 GdkPixmap    *gdk_pixmap_foreign_new (guint32     anid);
 GdkWindow    *gdk_window_foreign_new (guint32     anid);
 
+/* Return the Gdk* for a particular HANDLE */
+gpointer      gdk_xid_table_lookup     (HANDLE handle);
+
 #endif /* __GDK_WIN32_H__ */