diff options
author | Tor Lillqvist <tml@iki.fi> | 2000-05-01 22:06:49 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@src.gnome.org> | 2000-05-01 22:06:49 +0000 |
commit | 1f149b3a8d4180024df25f700307406520159bec (patch) | |
tree | 937f197543fe407b6f4d80869f61db344df010c4 /gdk/win32/gdkwin32.h | |
parent | 33dc3d6d4cf6ec76376c8ad30e165969db5324e9 (diff) | |
download | gtk+-1f149b3a8d4180024df25f700307406520159bec.tar.gz |
Large changes to the Win32 backend, partially made necessary by the
2000-05-02 Tor Lillqvist <tml@iki.fi>
Large changes to the Win32 backend, partially made necessary by
the changes to the backend-independent internal
structures. Attempts to implement similar backing store stuff as
on X11. The current (CVS) version of the Win32 backend is *not* as
stable as it was before the no-flicker branch was merged. A
zipfile with that version is available from
http://www.gimp.org/win32/. That should be use by "production"
code until this CVS version is usable. (But note, the Win32
backend has never been claimed to be "production quality".)
* README.win32: Add the above comment about versions.
* gdk/gdkwindow.c: Don't use backing store for now on Win32.
* gdk/gdk.def: Update.
* gdk/gdkfont.h: Declare temporary Win32-only functions. Will
presumably be replaced by some more better mechanism as 1.4 gets
closer to release shape.
* gdk/makefile.{cygwin,msc}: Update.
* gdk/win32/*.c: Correct inclusions of the backend-specific and
internal headers. Change code according to changes in these. Use
gdk_drawable_*, not gdk_window_* where necessary.
* gdk/win32/gdkdnd-win32.c: Use MISC selector for GDK_NOTE, not
our old DND.
* gdk/win32/gdkdrawable-win32.c (gdk_win32_draw_text): Don't try
to interpret single characters as UTF-8. Thanks to Hans Breuer.
Use correct function name in warning messages.
* gdk/win32/gdkevents-win32.c: Use correct parameter lists for the
GSourceFuncs gdk_event_prepare and gdk_event_check.
(gdk_event_get_graphics_expose): Do implement, use
PeekMessage. Thanks to Hans Breuer.
(event_mask_string): Debugging function to print an GdkEventMask.
(gdk_pointer_grab): Use it.
* gdk/win32/gdkfont-win32.c: The Unicode subrange that the
(old) book I used claimed was Hangul actually is CJK Unified
Ideographs Extension A. Also, Hangul Syllables were missing.
Improve logging.
* gdk/win32/gdkgc-win32.c: Largish changes.
* gdk/win32/gdkim-win32.c (gdk_set_locale): Use
g_win32_getlocale() from GLib, and not setlocale() to get current
locale name.
* gdk/win32/gdkprivate-win32.h
* gdk/win32/gdkwin32.h: Move stuff from gdkprivate-win32.h to
gdkwin32.h, similarily as in the X11 backend.
* gdk/win32/gdkwindow-win32.c (gdk_propagate_shapes): Bugfix,
assignment was used instead of equals in if test. Thanks to Hans
Breuer.
* gdk/win32/makefile.{cygwin,msc}
* gtk/makefile.{cygwin,msc}: Updates. Better kludge to get the
path to the Win32 headers that works also with the mingw compiler.
* gtk/gtkstyle.c: Include <string.h>.
Diffstat (limited to 'gdk/win32/gdkwin32.h')
-rw-r--r-- | gdk/win32/gdkwin32.h | 276 |
1 files changed, 270 insertions, 6 deletions
diff --git a/gdk/win32/gdkwin32.h b/gdk/win32/gdkwin32.h index 8b8c61905b..7ba6cd67ae 100644 --- a/gdk/win32/gdkwin32.h +++ b/gdk/win32/gdkwin32.h @@ -27,10 +27,271 @@ #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) @@ -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__ */ |