]> Pileus Git - ~andy/gtk/blob - gdk/win32/gdkprivate-win32.h
gdk: Remove pixmap debug category
[~andy/gtk] / gdk / win32 / gdkprivate-win32.h
1 /* GDK - The GIMP Drawing Kit
2  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 /*
21  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
22  * file for a list of people on the GTK+ Team.  See the ChangeLog
23  * files for a list of changes.  These files are distributed with
24  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
25  */
26
27 #ifndef __GDK_PRIVATE_WIN32_H__
28 #define __GDK_PRIVATE_WIN32_H__
29
30 #ifndef WINVER
31 #define WINVER 0x0500
32 #endif
33
34 #ifndef _WIN32_WINNT
35 #define _WIN32_WINNT WINVER
36 #endif
37
38 #include <gdk/gdkprivate.h>
39 #include <gdk/win32/gdkwindow-win32.h>
40
41 #include "gdkinternals.h"
42
43 #include "config.h"
44
45 /* Make up for some minor w32api or MSVC6 header lossage */
46
47 #ifndef PS_JOIN_MASK
48 #define PS_JOIN_MASK (PS_JOIN_BEVEL|PS_JOIN_MITER|PS_JOIN_ROUND)
49 #endif
50
51 #ifndef FS_VIETNAMESE
52 #define FS_VIETNAMESE 0x100
53 #endif
54
55 #ifndef WM_GETOBJECT
56 #define WM_GETOBJECT 0x3D
57 #endif
58 #ifndef WM_NCXBUTTONDOWN
59 #define WM_NCXBUTTONDOWN 0xAB
60 #endif
61 #ifndef WM_NCXBUTTONUP
62 #define WM_NCXBUTTONUP 0xAC
63 #endif
64 #ifndef WM_NCXBUTTONDBLCLK
65 #define WM_NCXBUTTONDBLCLK 0xAD
66 #endif
67 #ifndef WM_CHANGEUISTATE
68 #define WM_CHANGEUISTATE 0x127
69 #endif
70 #ifndef WM_UPDATEUISTATE
71 #define WM_UPDATEUISTATE 0x128
72 #endif
73 #ifndef WM_QUERYUISTATE
74 #define WM_QUERYUISTATE 0x129
75 #endif
76 #ifndef WM_XBUTTONDOWN
77 #define WM_XBUTTONDOWN 0x20B
78 #endif
79 #ifndef WM_XBUTTONUP
80 #define WM_XBUTTONUP 0x20C
81 #endif
82 #ifndef WM_XBUTTONDBLCLK
83 #define WM_XBUTTONDBLCLK 0x20D
84 #endif
85 #ifndef WM_NCMOUSEHOVER
86 #define WM_NCMOUSEHOVER 0x2A0
87 #endif
88 #ifndef WM_NCMOUSELEAVE
89 #define WM_NCMOUSELEAVE 0x2A2
90 #endif
91 #ifndef WM_APPCOMMAND
92 #define WM_APPCOMMAND 0x319
93 #endif
94
95 #ifndef CF_DIBV5
96 #define CF_DIBV5 17
97 #endif
98
99
100 /* Define some combinations of GdkDebugFlags */
101 #define GDK_DEBUG_EVENTS_OR_COLORMAP (GDK_DEBUG_EVENTS|GDK_DEBUG_COLORMAP)
102 #define GDK_DEBUG_EVENTS_OR_INPUT (GDK_DEBUG_EVENTS|GDK_DEBUG_INPUT)
103 #define GDK_DEBUG_MISC_OR_COLORMAP (GDK_DEBUG_MISC|GDK_DEBUG_COLORMAP)
104 #define GDK_DEBUG_MISC_OR_EVENTS (GDK_DEBUG_MISC|GDK_DEBUG_EVENTS)
105
106 //#define GDK_WINDOW_SCREEN(win)         (_gdk_screen)
107 GdkScreen *GDK_WINDOW_SCREEN(GObject *win);
108
109 #define GDK_WINDOW_IS_WIN32(win)        (GDK_IS_WINDOW_IMPL_WIN32 (((GdkWindowObject *)win)->impl))
110
111 typedef struct _GdkColormapPrivateWin32 GdkColormapPrivateWin32;
112 typedef struct _GdkCursorPrivate        GdkCursorPrivate;
113 typedef struct _GdkWin32SingleFont      GdkWin32SingleFont;
114
115 struct _GdkCursorPrivate
116 {
117   GdkCursor cursor;
118   HCURSOR hcursor;
119 };
120
121 struct _GdkWin32SingleFont
122 {
123   HFONT hfont;
124   UINT charset;
125   UINT codepage;
126   FONTSIGNATURE fs;
127 };
128
129 struct _GdkVisualClass
130 {
131   GObjectClass parent_class;
132 };
133
134 typedef enum {
135   GDK_WIN32_PE_STATIC,
136   GDK_WIN32_PE_AVAILABLE,
137   GDK_WIN32_PE_INUSE
138 } GdkWin32PalEntryState;
139
140 struct _GdkColormapPrivateWin32
141 {
142   HPALETTE hpal;
143   gint current_size;            /* Current size of hpal */
144   GdkWin32PalEntryState *use;
145   gint private_val;
146
147   GHashTable *hash;
148   GdkColorInfo *info;
149 };
150
151 GType _gdk_gc_win32_get_type (void);
152
153 gulong _gdk_win32_get_next_tick (gulong suggested_tick);
154
155 void _gdk_window_init_position     (GdkWindow *window);
156 void _gdk_window_move_resize_child (GdkWindow *window,
157                                     gint       x,
158                                     gint       y,
159                                     gint       width,
160                                     gint       height);
161
162 /* GdkWindowImpl methods */
163 void _gdk_win32_window_scroll (GdkWindow *window,
164                                gint       dx,
165                                gint       dy);
166 void _gdk_win32_window_move_region (GdkWindow       *window,
167                                     const cairo_region_t *region,
168                                     gint             dx,
169                                     gint             dy);
170 void _gdk_win32_windowing_window_get_offsets (GdkWindow *window,
171                                               gint      *x_offset,
172                                               gint      *y_offset);
173
174
175 void _gdk_win32_selection_init (void);
176 void _gdk_win32_dnd_exit (void);
177
178 void     gdk_win32_handle_table_insert  (HANDLE   *handle,
179                                          gpointer data);
180 void     gdk_win32_handle_table_remove  (HANDLE handle);
181
182 COLORREF  _gdk_win32_colormap_color     (GdkColormap *colormap,
183                                          gulong       pixel);
184
185 HRGN      _gdk_win32_cairo_region_to_hrgn (const cairo_region_t *region,
186                                            gint                  x_origin,
187                                            gint                  y_origin);
188
189 cairo_region_t *_gdk_win32_hrgn_to_region    (HRGN hrgn);
190
191 void    _gdk_win32_adjust_client_rect   (GdkWindow *window,
192                                          RECT      *RECT);
193
194 void    _gdk_selection_property_delete (GdkWindow *);
195
196 void    _gdk_dropfiles_store (gchar *data);
197
198 void       _gdk_push_modal_window   (GdkWindow *window);
199 void       _gdk_remove_modal_window (GdkWindow *window);
200 GdkWindow *_gdk_modal_current       (void);
201
202
203 #ifdef G_ENABLE_DEBUG
204 gchar *_gdk_win32_color_to_string      (const GdkColor *color);
205 void   _gdk_win32_print_paletteentries (const PALETTEENTRY *pep,
206                                         const int           nentries);
207 void   _gdk_win32_print_system_palette (void);
208 void   _gdk_win32_print_hpalette       (HPALETTE     hpal);
209 void   _gdk_win32_print_dc             (HDC          hdc);
210
211 gchar *_gdk_win32_drag_protocol_to_string (GdkDragProtocol protocol);
212 gchar *_gdk_win32_window_state_to_string (GdkWindowState state);
213 gchar *_gdk_win32_window_style_to_string (LONG style);
214 gchar *_gdk_win32_window_exstyle_to_string (LONG style);
215 gchar *_gdk_win32_window_pos_bits_to_string (UINT flags);
216 gchar *_gdk_win32_drag_action_to_string (GdkDragAction actions);
217 gchar *_gdk_win32_drawable_description (GdkDrawable *d);
218
219 gchar *_gdk_win32_rop2_to_string       (int          rop2);
220 gchar *_gdk_win32_lbstyle_to_string    (UINT         brush_style);
221 gchar *_gdk_win32_pstype_to_string     (DWORD        pen_style);
222 gchar *_gdk_win32_psstyle_to_string    (DWORD        pen_style);
223 gchar *_gdk_win32_psendcap_to_string   (DWORD        pen_style);
224 gchar *_gdk_win32_psjoin_to_string     (DWORD        pen_style);
225 gchar *_gdk_win32_message_to_string    (UINT         msg);
226 gchar *_gdk_win32_key_to_string        (LONG         lParam);
227 gchar *_gdk_win32_cf_to_string         (UINT         format);
228 gchar *_gdk_win32_data_to_string       (const guchar*data,
229                                         int          nbytes);
230 gchar *_gdk_win32_rect_to_string       (const RECT  *rect);
231
232 gchar *_gdk_win32_gdkrectangle_to_string (const GdkRectangle *rect);
233 gchar *_gdk_win32_cairo_region_to_string (const cairo_region_t    *box);
234
235 void   _gdk_win32_print_event            (const GdkEvent     *event);
236
237 #endif
238
239 gchar  *_gdk_win32_last_error_string (void);
240 void    _gdk_win32_api_failed        (const gchar *where,
241                                      const gchar *api);
242 void    _gdk_other_api_failed        (const gchar *where,
243                                      const gchar *api);
244
245 #define WIN32_API_FAILED(api) _gdk_win32_api_failed (G_STRLOC , api)
246 #define WIN32_GDI_FAILED(api) WIN32_API_FAILED (api)
247 #define OTHER_API_FAILED(api) _gdk_other_api_failed (G_STRLOC, api)
248  
249 /* These two macros call a GDI or other Win32 API and if the return
250  * value is zero or NULL, print a warning message. The majority of GDI
251  * calls return zero or NULL on failure. The value of the macros is nonzero
252  * if the call succeeded, zero otherwise.
253  */
254
255 #define GDI_CALL(api, arglist) (api arglist ? 1 : (WIN32_GDI_FAILED (#api), 0))
256 #define API_CALL(api, arglist) (api arglist ? 1 : (WIN32_API_FAILED (#api), 0))
257  
258 extern LRESULT CALLBACK _gdk_win32_window_procedure (HWND, UINT, WPARAM, LPARAM);
259
260 extern GdkWindow        *_gdk_root;
261
262 extern GdkDisplay       *_gdk_display;
263 extern GdkScreen        *_gdk_screen;
264
265 extern gint              _gdk_num_monitors;
266 typedef struct _GdkWin32Monitor GdkWin32Monitor;
267 struct _GdkWin32Monitor
268 {
269   gchar *name;
270   gint width_mm, height_mm;
271   GdkRectangle rect;
272 };
273 extern GdkWin32Monitor  *_gdk_monitors;
274
275 /* Offsets to add to Windows coordinates (which are relative to the
276  * primary monitor's origin, and thus might be negative for monitors
277  * to the left and/or above the primary monitor) to get GDK
278  * coordinates, which should be non-negative on the whole screen.
279  */
280 extern gint              _gdk_offset_x, _gdk_offset_y;
281
282 extern HDC               _gdk_display_hdc;
283 extern HINSTANCE         _gdk_dll_hinstance;
284 extern HINSTANCE         _gdk_app_hmodule;
285
286 /* These are thread specific, but GDK/win32 works OK only when invoked
287  * from a single thread anyway.
288  */
289 extern HKL               _gdk_input_locale;
290 extern gboolean          _gdk_input_locale_is_ime;
291 extern UINT              _gdk_input_codepage;
292
293 extern guint             _gdk_keymap_serial;
294 extern gboolean          _gdk_keyboard_has_altgr;
295 extern guint             _scancode_rshift;
296
297 /* GdkAtoms: properties, targets and types */
298 extern GdkAtom           _gdk_selection;
299 extern GdkAtom           _wm_transient_for;
300 extern GdkAtom           _targets;
301 extern GdkAtom           _delete;
302 extern GdkAtom           _save_targets;
303 extern GdkAtom           _utf8_string;
304 extern GdkAtom           _text;
305 extern GdkAtom           _compound_text;
306 extern GdkAtom           _text_uri_list;
307 extern GdkAtom           _text_html;
308 extern GdkAtom           _image_png;
309 extern GdkAtom           _image_jpeg;
310 extern GdkAtom           _image_bmp;
311 extern GdkAtom           _image_gif;
312
313 /* DND selections */
314 extern GdkAtom           _local_dnd;
315 extern GdkAtom           _gdk_win32_dropfiles;
316 extern GdkAtom           _gdk_ole2_dnd;
317
318 /* Clipboard formats */
319 extern UINT              _cf_png;
320 extern UINT              _cf_jfif;
321 extern UINT              _cf_gif;
322 extern UINT              _cf_url;
323 extern UINT              _cf_html_format;
324 extern UINT              _cf_text_html;
325
326 /* OLE-based DND state */
327 typedef enum {
328   GDK_WIN32_DND_NONE,
329   GDK_WIN32_DND_PENDING,
330   GDK_WIN32_DND_DROPPED,
331   GDK_WIN32_DND_FAILED,
332   GDK_WIN32_DND_DRAGGING,
333 } GdkWin32DndState;
334
335 extern GdkWin32DndState  _dnd_target_state;
336 extern GdkWin32DndState  _dnd_source_state;
337
338 void _gdk_win32_dnd_do_dragdrop (void);
339 void _gdk_win32_ole2_dnd_property_change (GdkAtom       type,
340                                           gint          format,
341                                           const guchar *data,
342                                           gint          nelements);
343
344 void  _gdk_win32_begin_modal_call (void);
345 void  _gdk_win32_end_modal_call (void);
346
347
348 /* Options */
349 extern gboolean          _gdk_input_ignore_wintab;
350 extern gint              _gdk_max_colors;
351
352 #define GDK_WIN32_COLORMAP_DATA(cmap) ((GdkColormapPrivateWin32 *) GDK_COLORMAP (cmap)->windowing_data)
353
354 /* TRUE while a modal sizing, moving, or dnd operation is in progress */
355 extern gboolean         _modal_operation_in_progress;
356
357 /* TRUE when we are emptying the clipboard ourselves */
358 extern gboolean         _ignore_destroy_clipboard;
359
360 /* Mapping from registered clipboard format id (native) to
361  * corresponding GdkAtom
362  */
363 extern GHashTable       *_format_atom_table;
364
365 /* Hold the result of a delayed rendering */
366 extern HGLOBAL          _delayed_rendering_data;
367
368 HGLOBAL _gdk_win32_selection_convert_to_dib (HGLOBAL  hdata,
369                                              GdkAtom  target);
370
371 /* Convert a pixbuf to an HICON (or HCURSOR).  Supports alpha under
372  * Windows XP, thresholds alpha otherwise.
373  */
374 HICON _gdk_win32_pixbuf_to_hicon   (GdkPixbuf *pixbuf);
375 HICON _gdk_win32_pixbuf_to_hcursor (GdkPixbuf *pixbuf,
376                                     gint       x_hotspot,
377                                     gint       y_hotspot);
378 gboolean _gdk_win32_pixbuf_to_hicon_supports_alpha (void);
379
380 /* Initialization */
381 void _gdk_windowing_window_init (GdkScreen *screen);
382 void _gdk_root_window_size_init (void);
383 void _gdk_monitor_init(void);
384 void _gdk_visual_init (void);
385 void _gdk_dnd_init    (void);
386 void _gdk_events_init (void);
387 void _gdk_input_init  (GdkDisplay *display);
388
389 #endif /* __GDK_PRIVATE_WIN32_H__ */