X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gdk%2Fwin32%2Fgdkwin32.h;h=7ba6cd67aeec0b64d6994d142aac971973312fc4;hb=1f149b3a8d4180024df25f700307406520159bec;hp=8b8c61905b40dff44ff03927075aa6886742c2bb;hpb=33dc3d6d4cf6ec76376c8ad30e165969db5324e9;p=~andy%2Fgtk diff --git a/gdk/win32/gdkwin32.h b/gdk/win32/gdkwin32.h index 8b8c61905..7ba6cd67a 100644 --- a/gdk/win32/gdkwin32.h +++ b/gdk/win32/gdkwin32.h @@ -27,10 +27,271 @@ #ifndef __GDK_WIN32_H__ #define __GDK_WIN32_H__ -#include +#include +#include -#include -#include +#define STRICT /* We want strict type checks */ +#include +#include + +/* 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 +#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) @@ -41,14 +302,17 @@ #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__ */