+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>.
+
2000-04-26 Havoc Pennington <hp@redhat.com>
* gtk/gtklabel.c (gtk_label_get_text): Add this function,
+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>.
+
2000-04-26 Havoc Pennington <hp@redhat.com>
* gtk/gtklabel.c (gtk_label_get_text): Add this function,
+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>.
+
2000-04-26 Havoc Pennington <hp@redhat.com>
* gtk/gtklabel.c (gtk_label_get_text): Add this function,
+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>.
+
2000-04-26 Havoc Pennington <hp@redhat.com>
* gtk/gtklabel.c (gtk_label_get_text): Add this function,
+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>.
+
2000-04-26 Havoc Pennington <hp@redhat.com>
* gtk/gtklabel.c (gtk_label_get_text): Add this function,
+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>.
+
2000-04-26 Havoc Pennington <hp@redhat.com>
* gtk/gtklabel.c (gtk_label_get_text): Add this function,
+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>.
+
2000-04-26 Havoc Pennington <hp@redhat.com>
* gtk/gtklabel.c (gtk_label_get_text): Add this function,
port, see http://www.gimp.org/tml/gimp/win32/ or
http://www.iki.fi/tml/gimp/win32/ .
+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".)
+
To build GTk+ on Win32, you need either the Microsoft compiler and
-tools, or gcc-2.95 or later running under cygwin-b20.1 or
-later. Compile in gdk\win32, gdk and gtk with `nmake -f makefile.msc` or
-`make -f makefile.cygwin`.
+tools, or gcc-2.95 or later. The mingw setup of gcc is preferred, but
+you can run gcc also under cygwin-b20.1 or later. Compile in
+gdk\win32, gdk and gtk with `nmake -f makefile.msc` or `make -f
+makefile.cygwin`. The name makefile.cygwin is misleading, it should
+really be called makefile.mingw.
See the README.win32 file in the GLib distribution for instructions
how to build with gcc.
from the makefiles.
Note that while the GNU gettext package is under the GPL, the "intl"
-part of it as distributed with GNU libc is under the LGPL (like GTk+
-or GLib). We want the LGPL one, even if they are the same, more or
-less.
+part of it which is distributed with GNU libc is under the LGPL (like
+GTk+ or GLib). We want the LGPL one, even if they are the same, more
+or less.
gdk_region_empty
gdk_region_equal
gdk_region_get_clipbox
+ gdk_region_intersect
gdk_region_new
gdk_region_offset
gdk_region_point_in
gdk_region_polygon
gdk_region_rect_in
gdk_region_shrink
+ gdk_region_subtract
+ gdk_region_union
gdk_region_union_with_rect
- gdk_regions_intersect
- gdk_regions_subtract
- gdk_regions_union
- gdk_regions_xor
+ gdk_region_xor
gdk_rgb_cmap_free
gdk_rgb_cmap_new
gdk_rgb_ditherable
gdk_selection_send_notify
gdk_set_locale
gdk_set_show_events
+ gdk_set_sm_client_id
gdk_set_use_xshm
gdk_string_extents
gdk_string_height
gdk_wcstombs
gdk_window_add_filter
gdk_window_at_pointer
+ gdk_window_begin_paint_rect
gdk_window_clear
gdk_window_clear_area
gdk_window_clear_area_e
gdk_window_destroy
+ gdk_window_end_paint
gdk_window_foreign_new
gdk_window_get_children
gdk_window_get_deskrelative_origin
gdk_window_get_toplevels
gdk_window_get_user_data
gdk_window_hide
+ gdk_window_invalidate_rect
gdk_window_is_viewable
gdk_window_is_visible
gdk_window_lower
gdk_window_move
gdk_window_move_resize
gdk_window_new
+ gdk_window_process_all_updates
+ gdk_window_process_updates
gdk_window_raise
gdk_window_register_dnd
gdk_window_remove_filter
gint descent;
};
+#ifdef GDK_WINDOWING_WIN32
+/* Temporary functions, will be replaced by something else for all backends
+ * eventually. Don't use!
+ */
+gchar** gdk_font_list_new (const gchar *font_pattern, gint *n_returned);
+void gdk_font_list_free (gchar **font_list);
+#endif
GdkFont* gdk_font_load (const gchar *font_name);
GdkFont* gdk_fontset_load (const gchar *fontset_name);
GdkFont* gdk_font_ref (GdkFont *font);
gint *ascent,
gint *descent);
+#ifdef GDK_WINDOWING_WIN32
+/* Ditto temporary */
+gchar* gdk_font_full_name_get (GdkFont *font);
+void gdk_font_full_name_free (gchar *name);
+#endif
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
#include "gdk.h" /* For gdk_rectangle_union() */
#include "gdkpixmap.h"
+#ifndef USE_BACKING_STORE
+#ifndef GDK_WINDOWING_WIN32
+#define USE_BACKING_STORE /* Doesn't work yet on Win32 */
+#endif
+#endif
+
typedef struct _GdkWindowPaint GdkWindowPaint;
struct _GdkWindowPaint
gdk_window_begin_paint_region (GdkWindow *window,
GdkRegion *region)
{
+#ifdef USE_BACKING_STORE
GdkWindowPrivate *private = (GdkWindowPrivate *)window;
GdkRectangle clip_box;
GdkWindowPaint *paint;
gdk_region_destroy (init_region);
private->paint_stack = g_slist_prepend (private->paint_stack, paint);
+#endif /* USE_BACKING_STORE */
}
void
gdk_window_end_paint (GdkWindow *window)
{
+#ifdef USE_BACKING_STORE
GdkWindowPrivate *private = (GdkWindowPrivate *)window;
GdkWindowPaint *paint;
GdkGC *tmp_gc;
gdk_region_destroy (paint->region);
g_free (paint);
+#endif /* USE_BACKING_STORE */
}
static void
## There is no install target, you have to decide where and
## how to install for yourself.
-OPTIMIZE = -g -O
+OPTIMIZE = -g
################################################################
CC = gcc -mno-cygwin -mpentium -fnative-struct
CP = cp
-LD = ld
GLIB_VER=1.3
GTK_VER=1.3
#include "gdkcc.h"
#include "gdkcolor.h"
#include "gdkwin32.h"
+#include "gdkinternals.h"
#define MAX_IMAGE_COLORS 256
#include <time.h>
#include "gdkcolor.h"
-#include "gdkwin32.h"
+#include "gdkprivate-win32.h"
static gint gdk_colormap_match_color (GdkColormap *cmap,
GdkColor *color,
static GHashTable *colormap_hash = NULL;
-static Status
+static gboolean
alloc_color_cells(Colormap colormap,
gboolean contig,
unsigned long plane_masks_return[],
GdkColormap*
gdk_colormap_new (GdkVisual *visual,
- gint private_cmap)
+ gboolean private_cmap)
{
GdkColormap *colormap;
GdkColormapPrivateWin32 *private;
gboolean
gdk_colors_alloc (GdkColormap *colormap,
- gint contiguous,
+ gboolean contiguous,
gulong *planes,
gint nplanes,
gulong *pixels,
{
GdkColormapPrivateWin32 *private;
gulong *pixels;
- Status status;
+ gboolean status;
gint i, index;
private = (GdkColormapPrivateWin32 *) colormap;
#include "config.h"
#include "gdkcursor.h"
-#include "gdkwin32.h"
+#include "gdkinternals.h"
+#include "gdkprivate-win32.h"
static const struct { const char *name; int type; } cursors[] = {
{ "x_cursor", 0 },
#include "gdkdnd.h"
#include "gdkproperty.h"
-#include "gdkprivate.h"
-#include "gdkwin32.h"
+#include "gdkinternals.h"
+#include "gdkprivate-win32.h"
#ifdef OLE2_DND
#include <ole2.h>
private->ref_count--;
- GDK_NOTE (DND, g_print ("gdk_drag_context_unref: %d%s\n",
- private->ref_count,
- (private->ref_count == 0 ? " freeing" : "")));
+ GDK_NOTE (MISC, g_print ("gdk_drag_context_unref: %d%s\n",
+ private->ref_count,
+ (private->ref_count == 0 ? " freeing" : "")));
if (private->ref_count == 0)
{
g_list_free (context->targets);
if (context->source_window)
- gdk_window_unref (context->source_window);
+ gdk_drawable_unref (context->source_window);
if (context->dest_window)
- gdk_window_unref (context->dest_window);
+ gdk_drawable_unref (context->dest_window);
contexts = g_list_remove (contexts, private);
g_free (private);
target_drag_context *ctx = (target_drag_context *) This;
GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
- GDK_NOTE (DND, g_print ("m_add_ref_target\n"));
+ GDK_NOTE (MISC, g_print ("m_add_ref_target\n"));
gdk_drag_context_ref (ctx->context);
return private->ref_count;
REFIID riid,
void __RPC_FAR *__RPC_FAR *ppvObject)
{
- GDK_NOTE (DND, g_print ("m_query_interface_target\n"));
+ GDK_NOTE (MISC, g_print ("m_query_interface_target\n"));
*ppvObject = NULL;
target_drag_context *ctx = (target_drag_context *) This;
GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
- GDK_NOTE (DND, g_print ("m_release_target\n"));
+ GDK_NOTE (MISC, g_print ("m_release_target\n"));
gdk_drag_context_unref (ctx->context);
if (private->ref_count == 1)
POINTL pt,
DWORD __RPC_FAR *pdwEffect)
{
- GDK_NOTE (DND, g_print ("m_drag_enter\n"));
+ GDK_NOTE (MISC, g_print ("m_drag_enter\n"));
return E_UNEXPECTED;
}
POINTL pt,
DWORD __RPC_FAR *pdwEffect)
{
- GDK_NOTE (DND, g_print ("m_drag_over\n"));
+ GDK_NOTE (MISC, g_print ("m_drag_over\n"));
return E_UNEXPECTED;
}
static HRESULT STDMETHODCALLTYPE
m_drag_leave (IDropTarget __RPC_FAR *This)
{
- GDK_NOTE (DND, g_print ("m_drag_leave\n"));
+ GDK_NOTE (MISC, g_print ("m_drag_leave\n"));
return E_UNEXPECTED;
}
POINTL pt,
DWORD __RPC_FAR *pdwEffect)
{
- GDK_NOTE (DND, g_print ("m_drop\n"));
+ GDK_NOTE (MISC, g_print ("m_drop\n"));
return E_UNEXPECTED;
}
source_drag_context *ctx = (source_drag_context *) This;
GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
- GDK_NOTE (DND, g_print ("m_add_ref_source\n"));
+ GDK_NOTE (MISC, g_print ("m_add_ref_source\n"));
gdk_drag_context_ref (ctx->context);
return private->ref_count;
REFIID riid,
void __RPC_FAR *__RPC_FAR *ppvObject)
{
- GDK_NOTE (DND, g_print ("m_query_interface_source\n"));
+ GDK_NOTE (MISC, g_print ("m_query_interface_source\n"));
*ppvObject = NULL;
source_drag_context *ctx = (source_drag_context *) This;
GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
- GDK_NOTE (DND, g_print ("m_release_source\n"));
+ GDK_NOTE (MISC, g_print ("m_release_source\n"));
gdk_drag_context_unref (ctx->context);
if (private->ref_count == 1)
BOOL fEscapePressed,
DWORD grfKeyState)
{
- GDK_NOTE (DND, g_print ("m_query_continue_drag\n"));
+ GDK_NOTE (MISC, g_print ("m_query_continue_drag\n"));
return E_UNEXPECTED;
}
m_give_feedback (IDropSource __RPC_FAR *This,
DWORD dwEffect)
{
- GDK_NOTE (DND, g_print ("m_give_feedback\n"));
+ GDK_NOTE (MISC, g_print ("m_give_feedback\n"));
return E_UNEXPECTED;
}
if (msg->message == WM_DROPFILES)
{
- GDK_NOTE (DND, g_print ("WM_DROPFILES: %#x\n", msg->hwnd));
+ GDK_NOTE (MISC, g_print ("WM_DROPFILES: %#x\n", msg->hwnd));
context = gdk_drag_context_new ();
private = (GdkDragContextPrivate *) context;
context->is_source = FALSE;
context->source_window = gdk_parent_root;
context->dest_window = event->any.window;
- gdk_window_ref (context->dest_window);
+ gdk_drawable_ref (context->dest_window);
/* WM_DROPFILES drops are always file names */
context->targets =
g_list_append (NULL, GUINT_TO_POINTER (text_uri_list_atom));
if (resolve_link (msg->hwnd, fileName, linkedFile, NULL))
{
g_string_append (result, linkedFile);
- GDK_NOTE (DND, g_print ("...%s link to %s\n",
+ GDK_NOTE (MISC, g_print ("...%s link to %s\n",
fileName, linkedFile));
}
else
{
g_string_append (result, fileName);
- GDK_NOTE (DND, g_print ("...%s\n", fileName));
+ GDK_NOTE (MISC, g_print ("...%s\n", fileName));
}
g_string_append (result, "\015\012");
}
{
if (context->dest_window)
{
- GDK_NOTE (DND, g_print ("gdk_drag_do_leave\n"));
- gdk_window_unref (context->dest_window);
+ GDK_NOTE (MISC, g_print ("gdk_drag_do_leave\n"));
+ gdk_drawable_unref (context->dest_window);
context->dest_window = NULL;
}
}
g_return_val_if_fail (window != NULL, NULL);
- GDK_NOTE (DND, g_print ("gdk_drag_begin\n"));
+ GDK_NOTE (MISC, g_print ("gdk_drag_begin\n"));
ctx = source_context_new ();
ctx->context->is_source = TRUE;
ctx->context->source_window = window;
- gdk_window_ref (window);
+ gdk_drawable_ref (window);
tmp_list = g_list_last (targets);
ctx->context->targets = NULL;
HWND recipient;
POINT pt;
- GDK_NOTE (DND, g_print ("gdk_drag_find_window: %#x +%d+%d\n",
- (drag_window ? GDK_DRAWABLE_XID (drag_window) : 0),
- x_root, y_root));
+ GDK_NOTE (MISC, g_print ("gdk_drag_find_window: %#x +%d+%d\n",
+ (drag_window ? GDK_DRAWABLE_XID (drag_window) : 0),
+ x_root, y_root));
pt.x = x_root;
pt.y = y_root;
{
*dest_window = gdk_window_lookup (recipient);
if (*dest_window)
- gdk_window_ref (*dest_window);
+ gdk_drawable_ref (*dest_window);
*protocol = GDK_DRAG_PROTO_WIN32_DROPFILES;
}
}
GdkDragAction action,
guint32 time)
{
- GDK_NOTE (DND, g_print ("gdk_drag_status\n"));
+ GDK_NOTE (MISC, g_print ("gdk_drag_status\n"));
}
void
{
IDropTarget *idtp = (IDropTarget *) data;
- GDK_NOTE (DND, g_print ("gdk_destroy_filter: WM_DESTROY: %#x\n", msg->hwnd));
+ GDK_NOTE (MISC, g_print ("gdk_destroy_filter: WM_DESTROY: %#x\n", msg->hwnd));
RevokeDragDrop (msg->hwnd);
CoLockObjectExternal (idtp, FALSE, TRUE);
}
g_return_if_fail (window != NULL);
- GDK_NOTE (DND, g_print ("gdk_window_register_dnd: %#x\n",
- GDK_DRAWABLE_XID (window)));
+ GDK_NOTE (MISC, g_print ("gdk_window_register_dnd: %#x\n",
+ GDK_DRAWABLE_XID (window)));
/* We always claim to accept dropped files, but in fact we might not,
* of course. This function is called in such a way that it cannot know
#define G_PI 3.14159265358979323846
#endif
-#include "gdkdrawable.h"
-#include "gdkprivate.h"
-#include "gdkwindow.h"
-#include "gdkwin32.h"
+#include "gdkinternals.h"
+#include "gdkprivate-win32.h"
static void gdk_win32_drawable_destroy (GdkDrawable *drawable);
text, text_length));
wcstr = g_new (wchar_t, text_length);
- if ((wlen = gdk_nmbstowchar_ts (wcstr, text, text_length, text_length)) == -1)
- g_warning ("gdk_draw_text: gdk_nmbstowchar_ts failed");
+ if (text_length == 1)
+ {
+ /* For single characters, don't try to interpret as UTF-8. */
+ wcstr[0] = (guchar) text[0];
+ gdk_wchar_text_handle (font, wcstr, 1, gdk_draw_text_handler, &arg);
+ }
else
- gdk_wchar_text_handle (font, wcstr, wlen,
- gdk_draw_text_handler, &arg);
+ {
+ if ((wlen = gdk_nmbstowchar_ts (wcstr, text, text_length, text_length)) == -1)
+ g_warning ("gdk_win32_draw_text: gdk_nmbstowchar_ts failed");
+ else
+ gdk_wchar_text_handle (font, wcstr, wlen, gdk_draw_text_handler, &arg);
+ }
g_free (wcstr);
#if 1 /* Don't know if this is necessary */
if (CombineRgn (draw_rgn, draw_rgn, src_rgn, RGN_AND) == COMPLEXREGION)
- g_warning ("gdk_draw_pixmap: CombineRgn returned a COMPLEXREGION");
+ g_warning ("gdk_win32_draw_drawable: CombineRgn returned a COMPLEXREGION");
GetRgnBox (draw_rgn, &r);
if (r.left != xsrc
#include <stdio.h>
#include "gdk.h"
-#include "gdkwin32.h"
+#include "gdkinternals.h"
+#include "gdkprivate-win32.h"
#include "gdkkeysyms.h"
gint *ret_valp);
static gboolean gdk_event_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout);
+ gint *timeout,
+ gpointer user_data);
static gboolean gdk_event_check (gpointer source_data,
- GTimeVal *current_time);
+ GTimeVal *current_time,
+ gpointer user_data);
static gboolean gdk_event_dispatch (gpointer source_data,
GTimeVal *current_time,
gpointer user_data);
GDK_NOTE (EVENTS, g_print ("... compressing an CONFIGURE event\n"));
*((GdkEvent *)list->data) = event;
- gdk_window_unref (event.any.window);
+ gdk_drawable_unref (event.any.window);
/* Wake up WaitMessage */
PostMessage (NULL, gdk_ping_msg, 0, 0);
return FALSE;
&((GdkEvent *)list->data)->expose.area,
&u);
((GdkEvent *)list->data)->expose.area = u;
- gdk_window_unref (event.any.window);
+ gdk_drawable_unref (event.any.window);
#if 0
/* Wake up WaitMessage */
PostMessage (NULL, gdk_ping_msg, 0, 0);
{
MSG xevent;
GdkEvent *event;
- GdkWindowPrivate *private = (GdkWindowPrivate *) window;
g_return_val_if_fail (window != NULL, NULL);
GDK_NOTE (EVENTS, g_print ("gdk_event_get_graphics_expose\n"));
-#if 1
+#if 0 /* ??? */
/* Some nasty bugs here, just return NULL for now. */
return NULL;
#else
- if (GetMessage (&xevent, private->xwindow, WM_PAINT, WM_PAINT))
+ if (PeekMessage (&xevent, GDK_DRAWABLE_XID (window), WM_PAINT, WM_PAINT, PM_REMOVE))
{
event = gdk_event_new ();
#endif
}
+static char *
+event_mask_string (GdkEventMask mask)
+{
+ static char bfr[500];
+ char *p = bfr;
+
+ *p = '\0';
+#define BIT(x) \
+ if (mask & GDK_##x##_MASK) \
+ p += sprintf (p, "%s" #x, (p > bfr ? " " : ""))
+ BIT(EXPOSURE);
+ BIT(POINTER_MOTION);
+ BIT(POINTER_MOTION_HINT);
+ BIT(BUTTON_MOTION);
+ BIT(BUTTON1_MOTION);
+ BIT(BUTTON2_MOTION);
+ BIT(BUTTON3_MOTION);
+ BIT(BUTTON_PRESS);
+ BIT(BUTTON_RELEASE);
+ BIT(KEY_PRESS);
+ BIT(KEY_RELEASE);
+ BIT(ENTER_NOTIFY);
+ BIT(LEAVE_NOTIFY);
+ BIT(FOCUS_CHANGE);
+ BIT(STRUCTURE);
+ BIT(PROPERTY_CHANGE);
+ BIT(VISIBILITY_NOTIFY);
+ BIT(PROXIMITY_IN);
+ BIT(PROXIMITY_OUT);
+ BIT(SUBSTRUCTURE);
+ BIT(SCROLL);
+#undef BIT
+
+ return bfr;
+}
+
/*
*--------------------------------------------------------------
* gdk_pointer_grab
gint
gdk_pointer_grab (GdkWindow * window,
- gint owner_events,
+ gboolean owner_events,
GdkEventMask event_mask,
GdkWindow * confine_to,
GdkCursor * cursor,
{
if (!GDK_DRAWABLE_DESTROYED (window))
{
- GDK_NOTE (EVENTS, g_print ("gdk_pointer_grab: %#x %s %#x%s%s\n",
+ GDK_NOTE (EVENTS, g_print ("gdk_pointer_grab: %#x %s %#x %s\n",
xwindow,
(owner_events ? "TRUE" : "FALSE"),
xcursor,
- (event_mask & GDK_BUTTON_PRESS_MASK) ?
- " PRESS" : "",
- (event_mask & GDK_BUTTON_RELEASE_MASK) ?
- " RELEASE" : ""));
+ event_mask_string (event_mask)));
p_grab_mask = event_mask;
p_grab_owner_events = (owner_events != 0);
p_grab_automatic = FALSE;
*--------------------------------------------------------------
*/
-gint
+gboolean
gdk_pointer_is_grabbed (void)
{
return p_grab_window != NULL;
gint
gdk_keyboard_grab (GdkWindow * window,
- gint owner_events,
+ gboolean owner_events,
guint32 time)
{
gint return_val;
event = gdk_event_new ();
event->crossing.type = GDK_LEAVE_NOTIFY;
event->crossing.window = curWnd;
- gdk_window_ref (event->crossing.window);
+ gdk_drawable_ref (event->crossing.window);
event->crossing.subwindow = NULL;
event->crossing.time = xevent->time;
event->crossing.x = curX;
event = gdk_event_new ();
event->crossing.type = GDK_ENTER_NOTIFY;
event->crossing.window = window;
- gdk_window_ref (event->crossing.window);
+ gdk_drawable_ref (event->crossing.window);
event->crossing.subwindow = NULL;
event->crossing.time = xevent->time;
event->crossing.x = LOWORD (xevent->lParam);
}
if (curWnd)
- gdk_window_unref (curWnd);
+ gdk_drawable_unref (curWnd);
curWnd = window;
- gdk_window_ref (curWnd);
+ gdk_drawable_ref (curWnd);
#ifdef USE_TRACKMOUSEEVENT
if (p_TrackMouseEvent != NULL)
{
{
GDK_NOTE (EVENTS, g_print ("...sending to grabber %#x\n",
GDK_DRAWABLE_XID (grab_window)));
- gdk_window_unref (*window);
+ gdk_drawable_unref (*window);
*window = grab_window;
- gdk_window_ref (*window);
+ gdk_drawable_ref (*window);
return TRUE;
}
}
/* Grabbed! */
GDK_NOTE (EVENTS, g_print ("...sending to grabber %#x\n",
GDK_DRAWABLE_XID (grab_window)));
- gdk_window_unref (*window);
+ gdk_drawable_unref (*window);
*window = grab_window;
- gdk_window_ref (*window);
+ gdk_drawable_ref (*window);
return TRUE;
}
}
}
else
{
- gdk_window_unref (*window);
+ gdk_drawable_unref (*window);
*window = ((GdkWindowPrivate *) *window)->parent;
- gdk_window_ref (*window);
+ gdk_drawable_ref (*window);
GDK_NOTE (EVENTS, g_print ("...propagating to %#x\n",
GDK_DRAWABLE_XID (*window)));
/* The only branch where we actually continue the loop */
orig_window = window;
if (window != NULL)
- gdk_window_ref (window);
+ gdk_drawable_ref (window);
else
{
/* Handle WM_QUIT here ? */
* removed it. Repost the same message to our queue so that
* we will get it later when we are prepared.
*/
+ GDK_NOTE(MISC, g_print("gdk_event_translate: %#x %s posted.\n",
+ xevent->hwnd,
+ xevent->message == WM_MOVE ?
+ "WM_MOVE" : "WM_SIZE"));
+
PostMessage (xevent->hwnd, xevent->message,
xevent->wParam, xevent->lParam);
}
GdkEvent *event2 = gdk_event_new ();
build_keypress_event (GDK_WINDOW_WIN32DATA (window), event2, xevent);
event2->key.window = window;
- gdk_window_ref (window);
+ gdk_drawable_ref (window);
gdk_event_queue_append (event2);
GDK_NOTE (EVENTS, print_event (event2));
}
if (curWnd)
{
- gdk_window_unref (curWnd);
+ gdk_drawable_unref (curWnd);
curWnd = NULL;
}
break;
if (newwindow != window)
{
- gdk_window_unref (window);
+ gdk_drawable_unref (window);
window = newwindow;
- gdk_window_ref (window);
+ gdk_drawable_ref (window);
}
ScreenToClient (xevent->hwnd, &pt);
if (!propagate (&window, xevent,
if (curWnd)
{
- gdk_window_unref (curWnd);
+ gdk_drawable_unref (curWnd);
curWnd = NULL;
}
while (window
&& GDK_WINDOW_WIN32DATA (window)->bg_type == GDK_WIN32_BG_PARENT_RELATIVE)
{
- gdk_window_unref (window);
+ gdk_drawable_unref (window);
window = ((GdkWindowPrivate *) window)->parent;
- gdk_window_ref (window);
+ gdk_drawable_ref (window);
}
}
break;
case WM_PAINT:
+ if (!GetUpdateRect(xevent->hwnd, NULL, FALSE))
+ {
+ GDK_NOTE (EVENTS, g_print ("WM_PAINT: %#x no update rect\n",
+ xevent->hwnd));
+ break;
+ }
+
hdc = BeginPaint (xevent->hwnd, &paintstruct);
GDK_NOTE (EVENTS,
if (!(GDK_WINDOW_WIN32DATA (window)->event_mask & GDK_EXPOSURE_MASK))
break;
+ if ((paintstruct.rcPaint.right == paintstruct.rcPaint.left)
+ || (paintstruct.rcPaint.bottom == paintstruct.rcPaint.top))
+ break;
+
event->expose.type = GDK_EXPOSE;
event->expose.window = window;
event->expose.area.x = paintstruct.rcPaint.left;
event->any.window = window;
if (window != NULL && window == curWnd)
{
- gdk_window_unref (curWnd);
+ gdk_drawable_unref (curWnd);
curWnd = NULL;
}
if (return_val)
{
if (event->any.window)
- gdk_window_ref (event->any.window);
+ gdk_drawable_ref (event->any.window);
if (((event->any.type == GDK_ENTER_NOTIFY) ||
(event->any.type == GDK_LEAVE_NOTIFY)) &&
(event->crossing.subwindow != NULL))
- gdk_window_ref (event->crossing.subwindow);
+ gdk_drawable_ref (event->crossing.subwindow);
GDK_NOTE (EVENTS, print_event (event));
}
}
if (window)
- gdk_window_unref (window);
+ gdk_drawable_unref (window);
return return_val;
}
static gboolean
gdk_event_prepare (gpointer source_data,
GTimeVal *current_time,
- gint *timeout)
+ gint *timeout,
+ gpointer user_data)
{
MSG msg;
gboolean retval;
static gboolean
gdk_event_check (gpointer source_data,
- GTimeVal *current_time)
+ GTimeVal *current_time,
+ gpointer user_data)
{
MSG msg;
gboolean retval;
#include <ctype.h>
#include "gdkfont.h"
-#include "gdkwin32.h"
+#include "gdkinternals.h"
+#include "gdkprivate-win32.h"
static GHashTable *font_name_hash = NULL;
static GHashTable *fontset_name_hash = NULL;
}
/* This table classifies Unicode characters according to the Microsoft
- * Unicode subset numbering. This is from the table in "Developing
+ * Unicode subset numbering. This is based on the table in "Developing
* International Software for Windows 95 and Windows NT". This is almost,
* but not quite, the same as the official Unicode block table in
* Blocks.txt from ftp.unicode.org. The bit number field is the bitfield
* number as in the FONTSIGNATURE struct's fsUsb field.
+ * There are some grave bugs in the table in the books. For instance
+ * it claims there are Hangul at U+3400..U+4DFF while this range in
+ * fact contains CJK Unified Ideographs Extension A. Also, the whole
+ * block of Hangul Syllables U+AC00..U+D7A3 is missing from the book.
*/
typedef enum
U_ENCLOSED_CJK, "Enclosed CJK" },
{ 0x3300, 0x33FF,
U_CJK_COMPATIBILITY, "CJK Compatibility" },
- { 0x3400, 0x3D2D,
- U_HANGUL, "Hangul" },
- { 0x3D2E, 0x44B7,
- U_HANGUL_SUPPLEMENTARY_A, "Hangul Supplementary-A" },
- { 0x44B8, 0x4DFF,
- U_HANGUL_SUPPLEMENTARY_B, "Hangul Supplementary-B" },
+ /* The book claims:
+ * U+3400..U+3D2D = Hangul
+ * U+3D2E..U+44B7 = Hangul Supplementary A
+ * U+44B8..U+4DFF = Hangul Supplementary B
+ * but actually in Unicode
+ * U+3400..U+4DB5 = CJK Unified Ideographs Extension A
+ */
+ { 0x3400, 0x4DB5,
+ U_CJK_UNIFIED_IDEOGRAPHS, "CJK Unified Ideographs Extension A" },
{ 0x4E00, 0x9FFF,
U_CJK_UNIFIED_IDEOGRAPHS, "CJK Unified Ideographs" },
+ /* This was missing completely from the book's table. */
+ { 0xAC00, 0xD7A3,
+ U_HANGUL, "Hangul Syllables" },
{ 0xE000, 0xF8FF,
U_PRIVATE_USE_AREA, "Private Use Area" },
{ 0xF900, 0xFAFF,
set_bit (U_SPACING_MODIFIER_LETTERS);
set_bit (U_BASIC_GREEK);
set_bit (U_CYRILLIC);
+ set_bit (U_HANGUL_JAMO);
set_bit (U_GENERAL_PUNCTUATION);
set_bit (U_SUPERSCRIPTS_AND_SUBSCRIPTS);
set_bit (U_CURRENCY_SYMBOLS);
set_bit (U_COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS);
set_bit (U_BASIC_GREEK);
set_bit (U_CYRILLIC);
+ set_bit (U_HANGUL_JAMO);
set_bit (U_GENERAL_PUNCTUATION);
set_bit (U_SUPERSCRIPTS_AND_SUBSCRIPTS);
set_bit (U_CURRENCY_SYMBOLS);
for (tries = 0; ; tries++)
{
- GDK_NOTE (MISC, g_print ("...trying CreateFont(%d,%d,%d,%d,"
+ GDK_NOTE (MISC, g_print ("... trying CreateFont(%d,%d,%d,%d,"
"%d,%d,%d,%d,"
"%d,%d,%d,"
"%d,%#.02x,\"%s\")\n",
else
singlefont->codepage = 0;
- GDK_NOTE (MISC, (g_print ("... = %#x %s cs %s cp%d ",
+ GDK_NOTE (MISC, (g_print ("... = %#x %s cs %s cp%d\n",
singlefont->xfont, face,
charset_name (singlefont->charset),
singlefont->codepage),
g_assert (private->base.ref_count > 0);
+ GDK_NOTE (MISC, g_print ("gdk_wchar_text_handle: "));
+
while (wcp < end)
{
/* Split Unicode string into pieces of the same class */
if (!list)
singlefont = NULL;
+ GDK_NOTE (MISC, g_print ("%d:%d:%d:%#x ",
+ start-wcstr, wcp-wcstr, block,
+ (singlefont ? singlefont->xfont : 0)));
+
/* Call the callback function */
(*handler) (singlefont, start, wcp+1 - start, arg);
wcp++;
}
+ GDK_NOTE (MISC, g_print ("\n"));
}
typedef struct
#include "gdkgc.h"
#include "gdkfont.h"
#include "gdkpixmap.h"
-#include "gdkprivate.h"
-#include "gdkwin32.h"
+#include "gdkregion-generic.h"
+#include "gdkinternals.h"
+#include "gdkprivate-win32.h"
static void gdk_win32_gc_destroy (GdkGC *gc);
static void gdk_win32_gc_get_values (GdkGC *gc,
static void
gdk_win32_gc_values_to_win32values (GdkGCValues *values,
GdkGCValuesMask mask,
- GdkGCWin32Data *data)
+ GdkGC *gc)
{
+ GdkGCWin32Data *data = GDK_GC_WIN32DATA (gc);
char *s = "";
gint sw, sh;
if (mask & GDK_GC_CLIP_MASK)
{
if (data->clip_region != NULL)
- if (!DeleteObject (data->clip_region))
- WIN32_GDI_FAILED ("DeleteObject");
+ {
+ gdk_region_destroy (data->clip_region);
+ data->clip_region = NULL;
+ }
+ if (data->hcliprgn != NULL)
+ DeleteObject (data->hcliprgn);
+
if (values->clip_mask != NULL)
{
- data->clip_region =
+ data->hcliprgn =
BitmapToRegion ((HBITMAP) GDK_DRAWABLE_XID (values->clip_mask));
data->values_mask |= GDK_GC_CLIP_MASK;
+ OffsetRgn (data->hcliprgn,
+ ((GdkGCPrivate *) gc)->clip_x_origin,
+ ((GdkGCPrivate *) gc)->clip_y_origin);
}
else
{
- data->clip_region = NULL;
+ data->hcliprgn = NULL;
data->values_mask &= ~GDK_GC_CLIP_MASK;
}
- GDK_NOTE (MISC, (g_print ("%sclip=%#x", s, data->clip_region),
+ GDK_NOTE (MISC, (g_print ("%sclip=%#x", s, data->hcliprgn),
s = ","));
}
if (mask & GDK_GC_TS_X_ORIGIN)
{
- data->ts_x_origin = values->ts_x_origin;
data->values_mask |= GDK_GC_TS_X_ORIGIN;
- GDK_NOTE (MISC, (g_print ("%sts_x=%d", s, data->ts_x_origin),
+ GDK_NOTE (MISC, (g_print ("%sts_x=%d", s, values->ts_x_origin),
s = ","));
}
if (mask & GDK_GC_TS_Y_ORIGIN)
{
- data->ts_y_origin = values->ts_y_origin;
data->values_mask |= GDK_GC_TS_Y_ORIGIN;
- GDK_NOTE (MISC, (g_print ("%sts_y=%d", s, data->ts_y_origin),
+ GDK_NOTE (MISC, (g_print ("%sts_y=%d", s, values->ts_y_origin),
s = ","));
}
if (mask & GDK_GC_CLIP_X_ORIGIN)
{
- data->clip_x_origin = values->clip_x_origin;
data->values_mask |= GDK_GC_CLIP_X_ORIGIN;
- GDK_NOTE (MISC, (g_print ("%sclip_x=%d", s, data->clip_x_origin),
+ GDK_NOTE (MISC, (g_print ("%sclip_x=%d", s, values->clip_x_origin),
s = ","));
}
if (mask & GDK_GC_CLIP_Y_ORIGIN)
{
- data->clip_y_origin = values->clip_y_origin;
data->values_mask |= GDK_GC_CLIP_Y_ORIGIN;
- GDK_NOTE (MISC, (g_print ("%sclip_y=%d", s, data->clip_y_origin),
+ GDK_NOTE (MISC, (g_print ("%sclip_y=%d", s, values->clip_y_origin),
s = ","));
}
private->klass = &gdk_win32_gc_class;
private->klass_data = data = g_new (GdkGCWin32Data, 1);
+ data->clip_region = NULL;
+
data->foreground = black.pixel;
data->background = white.pixel;
data->font = NULL;
data->fill_style = GDK_SOLID;
data->tile = NULL;
data->stipple = NULL;
- data->clip_region = NULL;
- data->ts_x_origin = data->ts_y_origin =
- data->clip_x_origin = data->clip_y_origin = 0;
data->pen_style = PS_GEOMETRIC;
data->pen_width = 1;
data->values_mask = GDK_GC_FUNCTION | GDK_GC_FILL;
GDK_NOTE (MISC, g_print ("_gdk_win32_gc_new: "));
- gdk_win32_gc_values_to_win32values (values, mask, data);
+ gdk_win32_gc_values_to_win32values (values, mask, gc);
data->hwnd = NULL;
data->xgc = NULL;
+ data->hcliprgn = NULL;
GDK_NOTE (MISC, g_print (" = %p\n", gc));
{
GdkGCWin32Data *data = GDK_GC_WIN32DATA (gc);
+ if (data->clip_region)
+ gdk_region_destroy (data->clip_region);
+
if (data->values_mask & GDK_GC_FONT)
gdk_font_unref (data->font);
if (data->values_mask & GDK_GC_STIPPLE)
gdk_drawable_unref (data->stipple);
- if (data->values_mask & GDK_GC_CLIP_MASK)
- DeleteObject (data->clip_region);
-
g_free (GDK_GC_WIN32DATA (gc));
}
gdk_win32_gc_get_values (GdkGC *gc,
GdkGCValues *values)
{
+ GdkGCPrivate *private = (GdkGCPrivate *) gc;
GdkGCWin32Data *data = GDK_GC_WIN32DATA (gc);
values->foreground.pixel = data->foreground;
values->tile = data->tile;
values->stipple = data->stipple;
- if (data->clip_region != NULL)
- {
- RECT rect;
- HBRUSH hbr;
- HDC hdc;
- HGDIOBJ oldbitmap;
- GdkPixmap *pixmap;
-
- GetRgnBox (data->clip_region, &rect);
- pixmap =
- gdk_pixmap_new (NULL, rect.right - rect.left, rect.bottom - rect.top,
- 1);
- hbr = GetStockObject (WHITE_BRUSH);
- if ((hdc = CreateCompatibleDC (NULL)) == NULL)
- WIN32_GDI_FAILED ("CreateCompatibleDC");
- if ((oldbitmap =
- SelectObject (hdc, GDK_DRAWABLE_XID (pixmap))) == NULL)
- WIN32_GDI_FAILED ("SelectObject");
- hbr = GetStockObject (BLACK_BRUSH);
- if (!FillRect (hdc, &rect, hbr))
- WIN32_GDI_FAILED ("FillRect");
- hbr = GetStockObject (WHITE_BRUSH);
- if (!FillRgn (hdc, data->clip_region, hbr))
- WIN32_GDI_FAILED ("FillRgn");
- if (SelectObject (hdc, oldbitmap) == NULL)
- WIN32_GDI_FAILED ("SelectObject");
- DeleteDC (hdc);
- values->clip_mask = pixmap;
- }
- else
- values->clip_mask = NULL;
+ /* Also the X11 backend always returns a NULL clip_mask */
+ values->clip_mask = NULL;
+
values->subwindow_mode = data->subwindow_mode;
- values->ts_x_origin = data->ts_x_origin;
- values->ts_y_origin = data->ts_y_origin;
- values->clip_x_origin = data->clip_x_origin;
- values->clip_y_origin = data->clip_y_origin;
+ values->ts_x_origin = private->ts_x_origin;
+ values->ts_y_origin = private->ts_y_origin;
+ values->clip_x_origin = private->clip_x_origin;
+ values->clip_y_origin = private->clip_y_origin;
values->graphics_exposures = data->graphics_exposures;
values->line_width = data->pen_width;
GdkGCValues *values,
GdkGCValuesMask mask)
{
- GdkGCWin32Data *data = GDK_GC_WIN32DATA (gc);
-
GDK_NOTE (MISC, g_print ("gdk_win32_gc_set_values: "));
-
- gdk_win32_gc_values_to_win32values (values, mask, data);
+ gdk_win32_gc_values_to_win32values (values, mask, gc);
+ GDK_NOTE (MISC, g_print ("\n"));
}
static void
data = GDK_GC_WIN32DATA (gc);
- if (data->clip_region != NULL)
- if (!DeleteObject (data->clip_region))
- WIN32_GDI_FAILED ("DeleteObject");
+ if (data->clip_region)
+ gdk_region_destroy (data->clip_region);
+
if (rectangle)
{
GDK_NOTE (MISC,
data,
rectangle->width, rectangle->height,
rectangle->x, rectangle->y));
- if ((data->clip_region =
- CreateRectRgn (rectangle->x, rectangle->y,
- rectangle->x + rectangle->width,
- rectangle->y + rectangle->height)) == NULL)
- WIN32_GDI_FAILED ("CreateRectRgn");
-
+ data->clip_region = gdk_region_rectangle (rectangle);
data->values_mask |= GDK_GC_CLIP_MASK;
}
else
gdk_gc_set_clip_region (GdkGC *gc,
GdkRegion *region)
{
+ GdkGCPrivate *private = (GdkGCPrivate *) gc;
GdkGCWin32Data *data;
g_return_if_fail (gc != NULL);
data = GDK_GC_WIN32DATA (gc);
- GDK_NOTE (MISC, g_print ("gdk_gc_set_clip_region: (%d) %s\n",
- data, (region != NULL ? "xxx" : "None")));
+ if (data->clip_region)
+ gdk_region_destroy (data->clip_region);
- if (data->clip_region != NULL)
- if (!DeleteObject (data->clip_region))
- WIN32_GDI_FAILED ("DeleteObject");
if (region)
{
- GdkRegionPrivate *region_private;
-
- region_private = (GdkRegionPrivate*) region;
- data->clip_region = CreateRectRgn (1, 1, 0, 0);
- CombineRgn (data->clip_region, region_private->xregion, NULL, RGN_COPY);
+ GDK_NOTE (MISC, g_print ("gdk_gc_set_clip_region: %d %dx%d+%d+%d\n",
+ data,
+ region->extents.x2 - region->extents.x1,
+ region->extents.y2 - region->extents.y1,
+ region->extents.x1, region->extents.y1));
+ data->clip_region = gdk_region_copy (region);
data->values_mask |= GDK_GC_CLIP_MASK;
}
else
{
+ GDK_NOTE (MISC, g_print ("gdk_gc_set_clip_region: %d NULL\n",
+ data));
data->clip_region = NULL;
data->values_mask &= ~GDK_GC_CLIP_MASK;
}
+
+ private->clip_x_origin = 0;
+ private->clip_y_origin = 0;
+
+ data->values_mask &= ~(GDK_GC_CLIP_X_ORIGIN | GDK_GC_CLIP_Y_ORIGIN);
}
void
if (dst_data->stipple != NULL)
gdk_drawable_unref (dst_data->stipple);
if (dst_data->clip_region != NULL)
- if (!DeleteObject (dst_data->clip_region))
- WIN32_GDI_FAILED ("DeleteObject");
+ gdk_region_destroy (dst_data->clip_region);
*dst_data = *src_data;
if (dst_data->clip_region != NULL)
- {
- nbytes = GetRegionData (dst_data->clip_region, 0, NULL);
- rgn = g_malloc (nbytes);
- GetRegionData (dst_data->clip_region, nbytes, rgn);
- if ((dst_data->clip_region = ExtCreateRegion (NULL, nbytes, rgn)) == NULL)
- WIN32_GDI_FAILED ("ExtCreateRegion");
- g_free (rgn);
- }
-
+ dst_data->clip_region = gdk_region_copy (dst_data->clip_region);
if (dst_data->font != NULL)
gdk_font_ref (dst_data->font);
if (dst_data->tile != NULL)
}
static void
-predraw_set_foreground (GdkGCWin32Data *data,
- GdkColormapPrivateWin32 *colormap_private)
+predraw_set_foreground (GdkGCPrivate *gc_private,
+ GdkColormapPrivateWin32 *colormap_private,
+ gboolean *ok)
{
COLORREF fg;
LOGBRUSH logbrush;
HPEN hpen;
HBRUSH hbr;
+ GdkGCWin32Data *data = GDK_GC_WIN32DATA (gc_private);
if (colormap_private == NULL)
{
logpal.palPalEntry[1].peBlue = 0xFF;
logpal.palPalEntry[1].peFlags = 0x00;
if ((hpal = CreatePalette ((LOGPALETTE *) &logpal)) == NULL)
- WIN32_GDI_FAILED ("CreatePalette");
+ WIN32_GDI_FAILED ("CreatePalette"), *ok = FALSE;
}
SelectPalette (data->xgc, hpal, FALSE);
RealizePalette (data->xgc);
int k;
if (SelectPalette (data->xgc, colormap_private->xcolormap->palette,
FALSE) == NULL)
- WIN32_GDI_FAILED ("SelectPalette");
+ WIN32_GDI_FAILED ("SelectPalette"), *ok = FALSE;
if (TRUE || colormap_private->xcolormap->stale)
{
if ((k = RealizePalette (data->xgc)) == GDI_ERROR)
- WIN32_GDI_FAILED ("RealizePalette");
+ WIN32_GDI_FAILED ("RealizePalette"), *ok = FALSE;
colormap_private->xcolormap->stale = FALSE;
}
#if 0
fg = gdk_colormap_color (colormap_private, data->foreground);
if (SetTextColor (data->xgc, fg) == CLR_INVALID)
- WIN32_GDI_FAILED ("SetTextColor");
+ WIN32_GDI_FAILED ("SetTextColor"), *ok = FALSE;
/* Create and select pen and brush. */
logbrush.lbStyle = BS_SOLID;
logbrush.lbColor = fg;
- if ((hpen = ExtCreatePen (data->pen_style, data->pen_width,
- &logbrush, 0, NULL)) == NULL)
+ if (*ok && (hpen = ExtCreatePen (data->pen_style, data->pen_width,
+ &logbrush, 0, NULL)) == NULL)
WIN32_GDI_FAILED ("ExtCreatePen");
if (SelectObject (data->xgc, hpen) == NULL)
- WIN32_GDI_FAILED ("SelectObject");
+ WIN32_GDI_FAILED ("SelectObject"), *ok = FALSE;
switch (data->fill_style)
{
case GDK_OPAQUE_STIPPLED:
- if ((hbr = CreatePatternBrush (GDK_DRAWABLE_XID (data->stipple))) == NULL)
- WIN32_GDI_FAILED ("CreatePatternBrush");
+ if (*ok && (hbr = CreatePatternBrush (GDK_DRAWABLE_XID (data->stipple))) == NULL)
+ WIN32_GDI_FAILED ("CreatePatternBrush"), *ok = FALSE;
- SetBrushOrgEx(data->xgc, data->ts_x_origin,
- data->ts_y_origin, NULL);
-
+ if (*ok && !SetBrushOrgEx(data->xgc, gc_private->ts_x_origin,
+ gc_private->ts_y_origin, NULL))
+ WIN32_GDI_FAILED ("SetBrushOrgEx"), *ok = FALSE;
break;
case GDK_SOLID:
default:
- if ((hbr = CreateSolidBrush (fg)) == NULL)
- WIN32_GDI_FAILED ("CreateSolidBrush");
+ if (*ok && (hbr = CreateSolidBrush (fg)) == NULL)
+ WIN32_GDI_FAILED ("CreateSolidBrush"), *ok = FALSE;
break;
}
- if (SelectObject (data->xgc, hbr) == NULL)
- WIN32_GDI_FAILED ("SelectObject");
+ if (*ok && SelectObject (data->xgc, hbr) == NULL)
+ WIN32_GDI_FAILED ("SelectObject"), *ok = FALSE;
}
void
predraw_set_background (GdkGCWin32Data *data,
- GdkColormapPrivateWin32 *colormap_private)
+ GdkColormapPrivateWin32 *colormap_private,
+ gboolean *ok)
{
COLORREF bg = gdk_colormap_color (colormap_private, data->background);
if (SetBkColor (data->xgc, bg) == CLR_INVALID)
- WIN32_GDI_FAILED ("SetBkColor");
+ WIN32_GDI_FAILED ("SetBkColor"), *ok = FALSE;
}
HDC
GdkColormapPrivateWin32 *colormap_private =
(GdkColormapPrivateWin32 *) drawable_private->colormap;
GdkGCWin32Data *data = GDK_GC_WIN32DATA (gc_private);
+ gboolean ok = TRUE;
+ int flag;
g_assert (data->xgc == NULL);
if (GDK_DRAWABLE_TYPE (drawable) == GDK_DRAWABLE_PIXMAP)
{
if ((data->xgc = CreateCompatibleDC (NULL)) == NULL)
- WIN32_GDI_FAILED ("CreateCompatibleDC");
+ WIN32_GDI_FAILED ("CreateCompatibleDC"), ok = FALSE;
- if ((data->saved_dc = SaveDC (data->xgc)) == 0)
- WIN32_GDI_FAILED ("SaveDC");
+ if (ok && (data->saved_dc = SaveDC (data->xgc)) == 0)
+ WIN32_GDI_FAILED ("SaveDC"), ok = FALSE;
- if (SelectObject (data->xgc, data->hwnd) == NULL)
- WIN32_GDI_FAILED ("SelectObject");
+ if (ok && SelectObject (data->xgc, data->hwnd) == NULL)
+ WIN32_GDI_FAILED ("SelectObject"), ok = FALSE;
}
else
{
if ((data->xgc = GetDC (data->hwnd)) == NULL)
WIN32_GDI_FAILED ("GetDC");
- if ((data->saved_dc = SaveDC (data->xgc)) == 0)
+ if (ok && (data->saved_dc = SaveDC (data->xgc)) == 0)
WIN32_GDI_FAILED ("SaveDC");
}
- if (usage & GDK_GC_FOREGROUND)
- predraw_set_foreground (data, colormap_private);
+ if (ok && (usage & GDK_GC_FOREGROUND))
+ predraw_set_foreground (gc_private, colormap_private, &ok);
- if ((usage & GDK_GC_BACKGROUND) && (data->values_mask & GDK_GC_BACKGROUND))
- predraw_set_background (data, colormap_private);
+ if (ok
+ && (usage & GDK_GC_BACKGROUND)
+ && (data->values_mask & GDK_GC_BACKGROUND))
+ predraw_set_background (data, colormap_private, &ok);
- if (usage & GDK_GC_FONT)
+ if (ok && (usage & GDK_GC_FONT))
{
if (SetBkMode (data->xgc, TRANSPARENT) == 0)
- WIN32_GDI_FAILED ("SetBkMode");
+ WIN32_GDI_FAILED ("SetBkMode"), ok = FALSE;
- if (SetTextAlign (data->xgc, TA_BASELINE) == GDI_ERROR)
- WIN32_GDI_FAILED ("SetTextAlign");
+ if (ok && SetTextAlign (data->xgc, TA_BASELINE) == GDI_ERROR)
+ WIN32_GDI_FAILED ("SetTextAlign"), ok = FALSE;
}
- if (data->values_mask & GDK_GC_FUNCTION)
+ if (ok && (data->values_mask & GDK_GC_FUNCTION))
if (SetROP2 (data->xgc, data->rop2) == 0)
- WIN32_GDI_FAILED ("SetROP2");
+ WIN32_GDI_FAILED ("SetROP2"), ok = FALSE;
- if ((data->values_mask & GDK_GC_CLIP_MASK)
+ if (data->values_mask & GDK_GC_CLIP_MASK)
+ g_assert ((data->clip_region != NULL) != (data->hcliprgn != NULL));
+
+ if (ok
+ && (data->values_mask & GDK_GC_CLIP_MASK)
&& data->clip_region != NULL)
{
- if (data->values_mask & (GDK_GC_CLIP_X_ORIGIN | GDK_GC_CLIP_Y_ORIGIN))
- OffsetRgn (data->clip_region,
- data->clip_x_origin, data->clip_y_origin);
- SelectClipRgn (data->xgc, data->clip_region);
+ HRGN hrgn;
+ RGNDATA *rgndata;
+ RECT *rect;
+ GdkRegionBox *boxes = data->clip_region->rects;
+ guint nbytes =
+ sizeof (RGNDATAHEADER) + (sizeof (RECT) * data->clip_region->numRects);
+ int i;
+
+ rgndata = g_malloc (nbytes);
+ rgndata->rdh.dwSize = sizeof (RGNDATAHEADER);
+ rgndata->rdh.iType = RDH_RECTANGLES;
+ rgndata->rdh.nCount = rgndata->rdh.nRgnSize = 0;
+ SetRect (&rgndata->rdh.rcBound,
+ G_MAXSHORT, G_MAXSHORT, G_MINSHORT, G_MINSHORT);
+
+ for (i = 0; i < data->clip_region->numRects; i++)
+ {
+ rect = ((RECT *) rgndata->Buffer) + rgndata->rdh.nCount++;
+
+ rect->left = CLAMP (boxes[i].x1 + gc_private->clip_x_origin,
+ G_MINSHORT, G_MAXSHORT);
+ rect->right = CLAMP (boxes[i].x2 + gc_private->clip_x_origin,
+ G_MINSHORT, G_MAXSHORT);
+ rect->top = CLAMP (boxes[i].y1 + gc_private->clip_y_origin,
+ G_MINSHORT, G_MAXSHORT);
+ rect->bottom = CLAMP (boxes[i].y2 + gc_private->clip_y_origin,
+ G_MINSHORT, G_MAXSHORT);
+
+ GDK_NOTE (MISC, g_print ("clip rgn box %d: %dx%d@+%d+%d\n",
+ i,
+ rect->right-rect->left,
+ rect->bottom-rect->top,
+ rect->left, rect->top));
+
+ if (rect->left < rgndata->rdh.rcBound.left)
+ rgndata->rdh.rcBound.left = rect->left;
+ if (rect->right > rgndata->rdh.rcBound.right)
+ rgndata->rdh.rcBound.right = rect->right;
+ if (rect->top < rgndata->rdh.rcBound.top)
+ rgndata->rdh.rcBound.top = rect->top;
+ if (rect->bottom > rgndata->rdh.rcBound.bottom)
+ rgndata->rdh.rcBound.bottom = rect->bottom;
+ }
+ if ((hrgn = ExtCreateRegion (NULL, nbytes, rgndata)) == NULL)
+ WIN32_API_FAILED ("ExtCreateRegion"), ok = FALSE;
+
+ if (ok && SelectClipRgn (data->xgc, hrgn) == ERROR)
+ WIN32_API_FAILED ("SelectClipRgn"), ok = FALSE;
+
+ if (hrgn != NULL)
+ DeleteObject (hrgn);
+ }
+ else if (ok
+ && (data->values_mask & GDK_GC_CLIP_MASK)
+ && data->hcliprgn != NULL)
+ {
+ if (SelectClipRgn (data->xgc, data->hcliprgn) == ERROR)
+ WIN32_API_FAILED ("SelectClipRgn"), ok = FALSE;
+ }
+
+ if (gdk_debug_flags & GDK_DEBUG_MISC)
+ {
+ HGDIOBJ obj;
+ LOGBRUSH logbrush;
+ EXTLOGPEN extlogpen;
+ HRGN hrgn;
+ RECT rect;
+
+ g_print ("gdk_gc_predraw: %d: %#x\n", data, data->xgc);
+ obj = GetCurrentObject (data->xgc, OBJ_BRUSH);
+ GetObject (obj, sizeof (LOGBRUSH), &logbrush);
+ g_print ("brush: style: %s color: %.06x hatch: %#x\n",
+ (logbrush.lbStyle == BS_HOLLOW ? "HOLLOW" :
+ (logbrush.lbStyle == BS_PATTERN ? "PATTERN" :
+ (logbrush.lbStyle == BS_SOLID ? "SOLID" :
+ "???"))),
+ logbrush.lbColor,
+ logbrush.lbHatch);
+ obj = GetCurrentObject (data->xgc, OBJ_PEN);
+ GetObject (obj, sizeof (EXTLOGPEN), &extlogpen);
+ g_print ("pen: type: %s style: %s endcap: %s join: %s width: %d brush: %s\n",
+ ((extlogpen.elpPenStyle & PS_TYPE_MASK) ==
+ PS_GEOMETRIC ? "GEOMETRIC" : "COSMETIC"),
+ ((extlogpen.elpPenStyle & PS_STYLE_MASK) ==
+ PS_NULL ? "NULL" :
+ ((extlogpen.elpPenStyle & PS_STYLE_MASK) ==
+ PS_SOLID ? "SOLID" : "???")),
+ ((extlogpen.elpPenStyle & PS_ENDCAP_MASK) ==
+ PS_ENDCAP_FLAT ? "FLAT" :
+ ((extlogpen.elpPenStyle & PS_ENDCAP_MASK) ==
+ PS_ENDCAP_ROUND ? "ROUND" :
+ ((extlogpen.elpPenStyle & PS_ENDCAP_MASK) ==
+ PS_ENDCAP_SQUARE ? "ROUND" :
+ ((extlogpen.elpPenStyle & PS_ENDCAP_MASK) ==
+ PS_ENDCAP_SQUARE ? "ROUND" : "???")))),
+ ((extlogpen.elpPenStyle & PS_JOIN_MASK) ==
+ PS_JOIN_BEVEL ? "BEVEL" :
+ ((extlogpen.elpPenStyle & PS_JOIN_MASK) ==
+ PS_JOIN_MITER ? "MITER" :
+ ((extlogpen.elpPenStyle & PS_JOIN_MASK) ==
+ PS_JOIN_ROUND ? "ROUND" : "???"))),
+ extlogpen.elpWidth,
+ (extlogpen.elpBrushStyle == BS_DIBPATTERN ? "DIBPATTERN" :
+ (extlogpen.elpBrushStyle == BS_DIBPATTERNPT ? "DIBPATTERNPT" :
+ (extlogpen.elpBrushStyle == BS_HATCHED ? "HATCHED" :
+ (extlogpen.elpBrushStyle == BS_HOLLOW ? "HOLLOW" :
+ (extlogpen.elpBrushStyle == BS_PATTERN ? "PATTERN" :
+ (extlogpen.elpBrushStyle == BS_SOLID ? "SOLID" : "???")))))));
+ hrgn = CreateRectRgn (0, 0, 0, 0);
+ if ((flag = GetClipRgn (data->xgc, hrgn)) == -1)
+ WIN32_API_FAILED ("GetClipRgn");
+ else if (flag == 0)
+ g_print ("no clip region\n");
+ else if (flag == 1)
+ {
+ GetRgnBox (hrgn, &rect);
+ g_print ("clip region bbox: %dx%d@+%d+%d\n",
+ rect.right - rect.left,
+ rect.bottom - rect.top,
+ rect.left, rect.top);
+ }
}
return data->xgc;
if (!DeleteObject (hbr))
WIN32_GDI_FAILED ("DeleteObject");
- if ((data->values_mask & GDK_GC_CLIP_MASK)
- && data->clip_region != NULL
- && (data->values_mask & (GDK_GC_CLIP_X_ORIGIN | GDK_GC_CLIP_Y_ORIGIN)))
- OffsetRgn (data->clip_region,
- -data->clip_x_origin, -data->clip_y_origin);
data->xgc = NULL;
}
hDC = CreateCompatibleDC (hMemDC);
if (!hDC)
{
- WIN32_GDI_FAILED ("CreateCompatibleDC #2");
+ WIN32_GDI_FAILED ("CreateCompatibleDC");
SelectObject (hMemDC, holdBmp);
DeleteObject (hbm8);
DeleteDC (hMemDC);
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
#include <stdlib.h>
#include <string.h>
+#include <locale.h>
#include "gdkim.h"
#include "gdkpixmap.h"
-#include "gdkprivate.h"
+#include "gdkinternals.h"
#include "gdki18n.h"
#include "gdkwin32.h"
gchar*
gdk_set_locale (void)
{
- gchar *current_locale;
-
- if (!setlocale (LC_ALL,""))
+ if (!setlocale (LC_ALL, ""))
g_warning ("locale not supported by C library");
- current_locale = setlocale (LC_ALL, NULL);
-
- return current_locale;
+ return g_win32_getlocale ();
}
void
#include "config.h"
-#include "gdk.h" /* For gdk_error_trap_* / gdk_flush_* */
#include "gdkimage.h"
-#include "gdkprivate.h"
-#include "gdkwin32.h"
+#include "gdkinternals.h"
+#include "gdkprivate-win32.h"
static void gdk_win32_image_destroy (GdkImage *image);
static void gdk_image_put (GdkImage *image,
private->base.klass = &image_class;
image->type = GDK_IMAGE_SHARED;
- image->visual = gdk_window_get_visual (window);
+ image->visual = gdk_drawable_get_visual (window);
image->width = width;
image->height = height;
#include <stdio.h>
#include <math.h>
-#include "gdk.h"
#include "gdkinput.h"
+#include "gdkinternals.h"
#include "gdkprivate.h"
#include "gdkwin32.h"
g_warning ("gdk_input_init: gdk_window_new failed");
return;
}
- gdk_window_ref (wintab_window);
+ gdk_drawable_ref (wintab_window);
for (devix = 0; devix < ndevices; devix++)
{
if (window == NULL)
window = gdk_parent_root;
- gdk_window_ref (window);
+ gdk_drawable_ref (window);
GDK_NOTE (EVENTS,
g_print ("gdk_input_win32_other_event: window=%#x (%d,%d)\n",
pt.x = x;
pt.y = y;
ClientToScreen (GDK_DRAWABLE_XID (window), &pt);
- gdk_window_unref (window);
+ gdk_drawable_unref (window);
window = ((GdkWindowPrivate *) window)->parent;
- gdk_window_ref (window);
+ gdk_drawable_ref (window);
ScreenToClient (GDK_DRAWABLE_XID (window), &pt);
x = pt.x;
y = pt.y;
g_list_free (gdk_input_windows);
gdk_input_windows = NULL;
- gdk_window_unref (wintab_window);
+ gdk_drawable_unref (wintab_window);
wintab_window = NULL;
#if 1
#include <io.h>
#include "gdk.h"
+#include "gdkinternals.h"
#include "gdkprivate-win32.h"
#include "gdkinputprivate.h"
#include "gdkkeysyms.h"
}
void
-gdk_set_use_xshm (gint use_xshm)
+gdk_set_use_xshm (gboolean use_xshm)
{
/* Always on */
}
-gint
+gboolean
gdk_get_use_xshm (void)
{
return TRUE;
return GetDeviceCaps (gdk_DC, VERTSIZE);
}
+void
+gdk_set_sm_client_id (const gchar* sm_client_id)
+{
+ g_warning("gdk_set_sm_client_id %s", sm_client_id ? sm_client_id : "NULL");
+}
+
void
gdk_key_repeat_disable (void)
{
#include <string.h>
#include "gdkpixmap.h"
-#include "gdkprivate.h"
-#include "gdkwin32.h"
+#include "gdkinternals.h"
+#include "gdkprivate-win32.h"
typedef struct
{
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
g_return_val_if_fail ((window != NULL) || (depth != -1), NULL);
+#if 1
g_return_val_if_fail ((width != 0) && (height != 0), NULL);
+#else
+ /* HB: Not The Right Thing to do, but a nice way to debug
+ * the backing store facility without immediate crashes ...
+ */
+ if (width == 0 || height == 0)
+ {
+ g_warning("gdk_pixmap_new: size requested: %ld %ld", width, height);
+ /* testing: where does it crash next? */
+ if (width == 0) width = 1;
+ if (height == 0) height = 1;
+ }
+#endif
if (!window)
window = gdk_parent_root;
{
char instr[1024];
- while (!feof (infile))
+ while (1)
{
- fscanf (infile, "%1023s", instr);
+ if (fscanf (infile, "%1023s", instr) != 1)
+ return FALSE;
+
if (skip_comments == TRUE && strcmp (instr, "/*") == 0)
{
- fscanf (infile, "%1023s", instr);
- while (!feof (infile) && strcmp (instr, "*/") != 0)
- fscanf (infile, "%1023s", instr);
- fscanf(infile, "%1023s", instr);
+ do
+ {
+ if (fscanf (infile, "%1023s", instr) != 1)
+ return FALSE;
+ }
+ while (strcmp (instr, "*/") != 0);
}
- if (strcmp (instr, str)==0)
+ else if (strcmp (instr, str) == 0)
return TRUE;
}
-
- return FALSE;
}
static gint
#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 */
-
-/* PS_JOIN_MASK is missing from the mingw32 headers */
-#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
-
-#include <time.h>
-
-#include <gdk/gdktypes.h>
#include <gdk/gdkprivate.h>
-
-#include <gdk/gdkcursor.h>
-#include <gdk/gdkevents.h>
-#include <gdk/gdkfont.h>
-#include <gdk/gdkgc.h>
-#include <gdk/gdkim.h>
-#include <gdk/gdkimage.h>
-#include <gdk/gdkvisual.h>
-#include <gdk/gdkwindow.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* Define corresponding Windows types for some X11 types, just for laziness.
- */
-
-typedef PALETTEENTRY XColor;
-typedef guint VisualID;
-typedef int Status;
-
-/* Define some of the X11 constants also here, again just for laziness */
-
-/* Generic null resource */
-#define None 0
-
-/* 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 _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
-{
- /* 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 _GdkDrawableWin32Data
-{
- HANDLE xid;
-};
-
-struct _GdkWindowWin32Data
-{
- GdkDrawableWin32Data drawable;
-
- /* 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; /* GdkColor pixel, not COLORREF */
- 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;
- time_t last_sync_time;
-};
-
-struct _GdkImagePrivateWin32
-{
- GdkImagePrivate base;
- HBITMAP ximage;
-};
-
-struct _GdkRegionPrivate
-{
- GdkRegion region;
- HRGN xregion;
-};
-
-void gdk_win32_selection_init (void);
-void gdk_win32_dnd_exit (void);
-
-GdkColormap* gdk_colormap_lookup (Colormap xcolormap);
-GdkVisual* gdk_visual_lookup (Visual *xvisual);
+#include "gdkwin32.h"
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 usage);
HRGN BitmapToRegion (HBITMAP hBmp);
+gchar *gdk_font_full_name_get (GdkFont *font);
+
void gdk_sel_prop_store (GdkWindow *owner,
GdkAtom type,
gint format,
guchar *data,
gint length);
-gint gdk_nmbstowcs (GdkWChar *dest,
+gint gdk_nmbstowcs (GdkWChar *dest,
const gchar *src,
gint src_len,
gint dest_max);
-gint gdk_nmbstowchar_ts (wchar_t *dest,
+gint gdk_nmbstowchar_ts (wchar_t *dest,
const gchar *src,
gint src_len,
gint dest_max);
-void gdk_wchar_text_handle (GdkFont *font,
+void gdk_wchar_text_handle (GdkFont *font,
const wchar_t *wcstr,
int wclen,
void (*handler)(GdkWin32SingleFont *,
void *),
void *arg);
-gchar *gdk_color_to_string (const GdkColor *);
-void gdk_win32_api_failed (const gchar *where,
- gint line,
- const gchar *api);
-void gdk_other_api_failed (const gchar *where,
- gint line,
- const gchar *api);
-void gdk_win32_gdi_failed (const gchar *where,
- gint line,
- const gchar *api);
+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 (__FILE__ ":" __PRETTY_FUNCTION__, __LINE__, api)
#define WIN32_GDI_FAILED(api) gdk_win32_gdi_failed (__FILE__ ":" __PRETTY_FUNCTION__, __LINE__, api)
extern GdkDrawableClass _gdk_win32_drawable_class;
extern HWND gdk_root_window;
-GDKVAR ATOM gdk_selection_property;
-GDKVAR gchar *gdk_progclass;
extern gboolean gdk_event_func_from_window_proc;
extern HDC gdk_DC;
extern DWORD windows_version;
#define IS_WIN_NT(dwVersion) (dwVersion < 0x80000000)
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
#endif /* __GDK_PRIVATE_WIN32_H__ */
#include "gdkproperty.h"
#include "gdkselection.h"
-#include "gdkprivate.h"
-#include "gdkwin32.h"
+#include "gdkinternals.h"
+#include "gdkprivate-win32.h"
GdkAtom
gdk_atom_intern (const gchar *atom_name,
+#error this file should not be used, I think
+
/* GDK - The GIMP Drawing Kit
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
#include <string.h>
-#include <gdk/gdk.h>
-#include "gdkwin32.h"
+#include "gdkproperty.h"
+#include "gdkselection.h"
+#include "gdkinternals.h"
+#include "gdkprivate.h"
+#include "gdkprivate-win32.h"
/* We emulate the GDK_SELECTION window properties by storing
* it's data in a per-window hashtable.
g_hash_table_insert (sel_prop_table, &GDK_DRAWABLE_XID (owner), prop);
}
-gint
+gboolean
gdk_selection_owner_set (GdkWindow *owner,
GdkAtom selection,
guint32 time,
- gint send_event)
+ gboolean send_event)
{
gchar *sel_name;
HWND xwindow;
return NULL;
}
-GdkVisual*
-gdkx_visual_get (VisualID xvisualid)
-{
- if (xvisualid == system_visual->xvisual->visualid)
- return (GdkVisual*) system_visual;
- else
- return NULL;
-}
-
static void
gdk_visual_decompose_mask (gulong mask,
gint *shift,
#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__ */
#include "gdkevents.h"
#include "gdkpixmap.h"
#include "gdkwindow.h"
+#include "gdkinternals.h"
+#include "gdkprivate.h"
#include "gdkprivate-win32.h"
#include "gdkinputprivate.h"
#include "gdkwin32.h"
return TRUE;
}
+GdkDrawableClass _gdk_windowing_window_class;
+
static void
gdk_win32_window_destroy (GdkDrawable *drawable)
{
GdkWindow *window;
GdkWindowPrivate *private;
- static GdkDrawableClass klass;
static gboolean initialized = FALSE;
if (!initialized)
{
initialized = TRUE;
- klass = _gdk_win32_drawable_class;
- klass.destroy = gdk_win32_window_destroy;
+ _gdk_windowing_window_class = _gdk_win32_drawable_class;
+ _gdk_win32_drawable_class.destroy = gdk_win32_window_destroy;
}
window = _gdk_window_alloc ();
private = (GdkWindowPrivate *) window;
- private->drawable.klass = &klass;
+ private->drawable.klass = &_gdk_windowing_window_class;
private->drawable.klass_data = g_new (GdkWindowWin32Data, 1);
GDK_WINDOW_WIN32DATA (window)->event_mask = 0;
void
-gdk_window_clear_area (GdkWindow *window,
- gint x,
- gint y,
- gint width,
- gint height)
+_gdk_windowing_window_clear_area (GdkWindow *window,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
{
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
width = ((GdkDrawablePrivate *) window)->width - x;
if (height == 0)
height = ((GdkDrawablePrivate *) window)->height - y;
- GDK_NOTE (MISC, g_print ("gdk_window_clear_area: %#x %dx%d@+%d+%d\n",
+ GDK_NOTE (MISC, g_print ("_gdk_windowing_window_clear_area: "
+ "%#x %dx%d@+%d+%d\n",
GDK_DRAWABLE_XID (window), width, height, x, y));
hdc = GetDC (GDK_DRAWABLE_XID (window));
- IntersectClipRect (hdc, x, y, x + width, y + height);
+ IntersectClipRect (hdc, x, y, x + width + 1, y + height + 1);
SendMessage (GDK_DRAWABLE_XID (window), WM_ERASEBKGND, (WPARAM) hdc, 0);
ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
}
}
void
-gdk_window_clear_area_e (GdkWindow *window,
- gint x,
- gint y,
- gint width,
- gint height)
+_gdk_windowing_window_clear_area_e (GdkWindow *window,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
{
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
{
RECT rect;
- GDK_NOTE (MISC, g_print ("gdk_window_clear_area_e: %#x %dx%d@+%d+%d\n",
+ GDK_NOTE (MISC, g_print ("_gdk_windowing_window_clear_area_e: "
+ "%#x %dx%d@+%d+%d\n",
GDK_DRAWABLE_XID (window), width, height, x, y));
rect.left = x;
- rect.right = x + width;
+ rect.right = x + width + 1;
rect.top = y;
- rect.bottom = y + height;
+ rect.bottom = y + height + 1;
if (!InvalidateRect (GDK_DRAWABLE_XID (window), &rect, TRUE))
WIN32_GDI_FAILED ("InvalidateRect");
UpdateWindow (GDK_DRAWABLE_XID (window));
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_IS_WINDOW (window));
+ g_return_if_fail (title != NULL);
+ g_return_if_fail (strlen (title) > 0);
GDK_NOTE (MISC, g_print ("gdk_window_set_title: %#x %s\n",
GDK_DRAWABLE_XID (window), title));
for (i = 0; i < num; i++)
{
GetWindowPlacement (list[i], &placement);
- if (placement.showCmd = SW_SHOWNORMAL)
+ if (placement.showCmd == SW_SHOWNORMAL)
{
childRegion = CreateRectRgnIndirect (&emptyRect);
GetWindowRgn (list[i], childRegion);
-## Makefile for building the machine dependent part of GDK with gcc on cygwin
+## Makefile for building the machine dependent part of GDK on Win32 with gcc
## Use: make -f makefile.cygwin
# Location of the Wintab toolkit. Downloadable from http://www.pointing.com.
# We use the wntab32x.lib archive library directly (copy it as libwntab32x.a).
WTKIT = ../../../wtkit126
-OPTIMIZE = -g -O
+OPTIMIZE = -g
################################################################
gdkevents-win32.o \
gdkfont-win32.o \
gdkgc-win32.o \
+ gdkgeometry-win32.o \
gdkglobals-win32.o \
gdkim-win32.o \
gdkimage-win32.o \
gdkmain-win32.o \
gdkpixmap-win32.o \
gdkproperty-win32.o \
- gdkregion-win32.o \
+ gdkpolyreg-generic.o \
+ gdkregion-generic.o \
gdkselection-win32.o \
gdkvisual-win32.o \
gdkwin32id.o \
gdkwindow-win32.o
../../config.h : ../../config.h.win32
- cp ../../config.h.win32 ../../config.h
+ cp $< $@
../gdkconfig.h : ../gdkconfig.h.win32
- cp ../gdkconfig.h.win32 ../gdkconfig.h
+ cp $< $@
+
+gdkregion-generic.c: ../x11/gdkregion-generic.c
+ cp $< $@
+
+gdkpolyreg-generic.c: ../x11/gdkpolyreg-generic.c
+ cp $< $@
+
+gdkregion-generic.h: ../x11/gdkregion-generic.h
+ cp $< $@
+
+gdkpoly-generic.h: ../x11/gdkpoly-generic.h
+ cp $< $@
+
+gdkgc-win32.o:: gdkregion-generic.h
+gdkpolyreg-generic.o:: gdkpoly-generic.h
# Kludge to get the path to the win32 headers
-WIN32APIHEADERS = $(shell echo "\#include <winver.h>" | $(CC) -M -E - | tail -1 | sed -e 's!/winver.h!!')
+WIN32APIHEADERS = $(shell echo "\#include <winver.h>" | $(CC) -M -E - | tail -1 | sed -e 's![\\/]winver.h!!' | tr -d '\015')
gdk-win32res.o : rc/gdk.rc gdk-build.tmp
m4 -DBUILDNUMBER=`cat gdk-build.tmp` <rc/gdk.rc >gdk-win32res.rc
all: \
..\..\config.h \
+ ..\gdkconfig.h \
gdk-win32.lib \
gdk.res
gdkevents-win32.obj \
gdkfont-win32.obj \
gdkgc-win32.obj \
+ gdkgeometry-win32.obj \
gdkglobals-win32.obj \
gdkim-win32.obj \
gdkimage-win32.obj \
gdkpixmap-win32.obj \
gdkproperty-win32.obj \
gdkregion-win32.obj \
+ gdkpolyreg-generic.obj \
+ gdkregion-generic.obj \
gdkselection-win32.obj \
gdkvisual-win32.obj \
gdkwin32id.obj \
..\..\config.h : ..\..\config.h.win32
copy ..\..\config.h.win32 ..\..\config.h
+..\gdkconfig.h : ..\gdkconfig.h.win32
+ copy ..\gdkconfig.h.win32 ..\gdkconfig.h
+
+gdkregion-generic.c: ..\x11\gdkregion-generic.c
+ copy ..\x11\gdkregion-generic.c gdkregion-generic.c
+
+gdkpolyreg-generic.c: ..\x11\gdkpolyreg-generic.c
+ copy ..\x11\gdkpolyreg-generic.c gdkpolyreg-generic.c
+
+gdkregion-generic.h: ..\x11\gdkregion-generic.h
+ copy ..\x11\gdkregion-generic.h gdkregion-generic.h
+
+gdkpoly-generic.h: ..\x11\gdkpoly-generic.h
+ copy ..\x11\gdkpoly-generic.h gdkpoly-generic.h
+
+gdkgc-win32.o:: gdkregion-generic.h
+gdkpolyreg-generic.o:: gdkpoly-generic.h
+
gdk.res : rc\gdk.rc
- rc -r -fo gdk.res rc\gdk.rc
+ rc -DBUILDNUMBER=0 -r -fo gdk.res rc\gdk.rc
gdk-win32.lib : $(gdk_win32_OBJECTS)
lib -out:gdk-win32.lib $(gdk_win32_OBJECTS)
*/
#include <math.h>
+#include <string.h>
#include "gtkgc.h"
#include "gtkrc.h"
#include "gtkstyle.h"
PTHREAD_LIB = -L $(PTHREADS) -lpthread
PTHREAD_INC = -I $(PTHREADS)
-OPTIMIZE = -g -O
+OPTIMIZE = -g
################################################################
.SUFFIXES: .c .o .i
# Kludge to get the path to the win32 headers
-WIN32APIHEADERS = $(shell echo "\#include <winver.h>" | $(CC) -M -E - | tail -1 | sed -e 's!/winver.h!!')
+WIN32APIHEADERS = $(shell echo "\#include <winver.h>" | $(CC) -M -E - | tail -1 | sed -e 's![\\/]winver.h!!' | tr -d '\015')
gtk-win32res.o : gtk.rc gtk-build.tmp
m4 -DBUILDNUMBER=`cat gtk-build.tmp` <gtk.rc >gtk-win32res.rc
$(PERL) makeenums.pl arrays $(source_headers) $(gdk_headers) >gtktypebuiltins_evals.c
gtkmarshal.h gtkmarshal.c : gtkmarshal.list genmarshal.pl
- $(PERL) genmarshal.pl
+ $(PERL) genmarshal.pl gtkmarshal.list s-gmh s-gmc
del gtkmarshal.c
rename s-gmc gtkmarshal.c
del gtkmarshal.h
# Linking:
#
gtk-$(GTK_VER).dll : $(gtk_OBJECTS) gtk.def
- $(CC) $(CFLAGS) -LD -Fegtk-$(GTK_VER).dll $(gtk_OBJECTS) ..\gdk\gdk-$(GTK_VER).lib $(INTL)\gnu-intl.lib $(GLIB)\glib-$(GLIB_VER).lib $(GLIB)\gmodule-$(GLIB_VER).lib gdi32.lib user32.lib $(LDFLAGS) /def:gtk.def
+ $(CC) $(CFLAGS) -LD -Fegtk-$(GTK_VER).dll $(gtk_OBJECTS) ..\gdk\gdk-$(GTK_VER).lib $(INTL)\gnu-intl.lib $(GLIB)\glib-$(GLIB_VER).lib $(GLIB)\gmodule-$(GLIB_VER).lib gdi32.lib user32.lib advapi32.lib $(LDFLAGS) /def:gtk.def
# General rule for compiling the objects into the DLL
.c.obj :
$(CC) $(CFLAGS) -c -DG_LOG_DOMAIN=\"testdnd\" testdnd.c
testgtk.exe : gtk-$(GTK_VER).dll testgtk.obj
- $(CC) $(CFLAGS) testgtk.obj gtk-$(GTK_VER).lib ..\gdk\gdk-$(GTK_VER).lib $(GLIB)\glib-$(GLIB_VER).lib $(LDFLAGS)
+ $(CC) $(CFLAGS) testgtk.obj gtk-$(GTK_VER).lib ..\gdk\gdk-$(GTK_VER).lib $(GLIB)\glib-$(GLIB_VER).lib $(GLIB)\gthread-$[GLIB_VER).lib $(LDFLAGS)
testgtk.obj : testgtk.c
$(CC) $(CFLAGS) -c -DG_LOG_DOMAIN=\"testgtk\" testgtk.c