]> Pileus Git - ~andy/gtk/blob - gdk/directfb/gdkprivate-directfb.h
Use G_DEFINE_TYPE.
[~andy/gtk] / gdk / directfb / gdkprivate-directfb.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.
23  */
24
25 /*
26  * GTK+ DirectFB backend
27  * Copyright (C) 2001-2002  convergence integrated media GmbH
28  * Copyright (C) 2002-2004  convergence GmbH
29  * Written by Denis Oliver Kropp <dok@convergence.de> and
30  *            Sven Neumann <sven@convergence.de>
31  */
32
33 #ifndef __GDK_PRIVATE_DIRECTFB_H__
34 #define __GDK_PRIVATE_DIRECTFB_H__
35
36 //#include <gdk/gdk.h>
37 #include <gdk/gdkprivate.h>
38 #include "gdkinternals.h"
39 #include "gdkcursor.h"
40 #include "gdkdisplay-directfb.h"
41 #include <cairo.h>
42
43
44
45 #define GDK_TYPE_DRAWABLE_IMPL_DIRECTFB       (gdk_drawable_impl_directfb_get_type ())
46 #define GDK_DRAWABLE_IMPL_DIRECTFB(object)    (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_DRAWABLE_IMPL_DIRECTFB, GdkDrawableImplDirectFB))
47 #define GDK_IS_DRAWABLE_IMPL_DIRECTFB(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_DRAWABLE_IMPL_DIRECTFB))
48
49 #define GDK_TYPE_WINDOW_IMPL_DIRECTFB         (gdk_window_impl_directfb_get_type ())
50 #define GDK_WINDOW_IMPL_DIRECTFB(object)      (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WINDOW_IMPL_DIRECTFB, GdkWindowImplDirectFB))
51 #define GDK_IS_WINDOW_IMPL_DIRECTFB(object)   (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WINDOW_IMPL_DIRECTFB))
52
53 #define GDK_TYPE_PIXMAP_IMPL_DIRECTFB         (gdk_pixmap_impl_directfb_get_type ())
54 #define GDK_PIXMAP_IMPL_DIRECTFB(object)      (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_PIXMAP_IMPL_DIRECTFB, GdkPixmapImplDirectFB))
55 #define GDK_IS_PIXMAP_IMPL_DIRECTFB(object)   (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_PIXMAP_IMPL_DIRECTFB))
56
57
58 typedef struct _GdkDrawableImplDirectFB GdkDrawableImplDirectFB;
59 typedef struct _GdkWindowImplDirectFB   GdkWindowImplDirectFB;
60 typedef struct _GdkPixmapImplDirectFB   GdkPixmapImplDirectFB;
61
62
63 struct _GdkDrawableImplDirectFB
64 {
65   GdkDrawable             parent_object;
66
67   GdkDrawable            *wrapper;
68
69   gboolean                buffered;
70
71   GdkRegion              *paint_region;
72   gint                    paint_depth;
73
74   gint                    width;
75   gint                    height;
76   gint                    abs_x;
77   gint                    abs_y;
78
79   GdkColormap            *colormap;
80
81   IDirectFBSurface       *surface;
82   DFBSurfacePixelFormat   format;
83   cairo_surface_t *  cairo_surface;
84
85 };
86
87 typedef struct
88 {
89   GdkDrawableClass  parent_class;
90 } GdkDrawableImplDirectFBClass;
91
92 GType      gdk_drawable_impl_directfb_get_type (void);
93
94 void       _gdk_directfb_draw_rectangle (GdkDrawable *drawable,
95                                          GdkGC       *gc,
96                                          gint         filled,
97                                          gint         x,
98                                          gint         y,
99                                          gint         width,
100                                          gint         height);
101
102 void       _gdk_directfb_update         (GdkDrawableImplDirectFB *impl,
103                                          DFBRegion               *region);
104
105 GdkEvent *  gdk_directfb_event_make     (GdkWindow               *window,
106                                          GdkEventType             type);
107
108
109 /*
110  * Pixmap
111  */
112
113 struct _GdkPixmapImplDirectFB
114 {
115   GdkDrawableImplDirectFB parent_instance;
116 };
117
118 typedef struct
119 {
120   GdkDrawableImplDirectFBClass parent_class;
121 } GdkPixmapImplDirectFBClass;
122
123 GType gdk_pixmap_impl_directfb_get_type (void);
124
125
126
127 /*
128  * Window
129  */
130
131 typedef struct
132 {
133   gulong   length;
134   GdkAtom  type;
135   gint     format;
136   guchar   data[1];
137 } GdkWindowProperty;
138
139
140 struct _GdkWindowImplDirectFB
141 {
142   GdkDrawableImplDirectFB drawable;
143
144   IDirectFBWindow        *window;
145
146   DFBWindowID             dfb_id;
147
148   GdkCursor              *cursor;
149   GHashTable             *properties;
150
151   guint8                  opacity;
152
153   GdkWindowTypeHint       type_hint;
154 };
155
156 typedef struct
157 {
158   GdkDrawableImplDirectFBClass parent_class;
159 } GdkWindowImplDirectFBClass;
160
161 GType gdk_window_impl_directfb_get_type        (void);
162
163 void  gdk_directfb_window_send_crossing_events (GdkWindow       *src,
164                                                 GdkWindow       *dest,
165                                                 GdkCrossingMode  mode);
166
167 void  _gdk_directfb_calc_abs                   (GdkWindow       *window);
168
169 GdkWindow * gdk_directfb_window_find_toplevel  (GdkWindow       *window);
170
171
172 void        gdk_directfb_window_id_table_insert (DFBWindowID  dfb_id,
173                                                  GdkWindow   *window);
174 void        gdk_directfb_window_id_table_remove (DFBWindowID  dfb_id);
175 GdkWindow * gdk_directfb_window_id_table_lookup (DFBWindowID  dfb_id);
176
177
178 typedef struct
179 {
180   GdkCursor         cursor;
181
182   gint              hot_x;
183   gint              hot_y;
184   IDirectFBSurface *shape;
185 } GdkCursorDirectFB;
186
187 typedef struct
188 {
189   GdkVisual              visual;
190   DFBSurfacePixelFormat  format;
191 } GdkVisualDirectFB;
192
193 typedef struct
194 {
195   IDirectFBSurface *surface;
196 } GdkImageDirectFB;
197
198
199 #define GDK_TYPE_GC_DIRECTFB       (gdk_gc_directfb_get_type ())
200 #define GDK_GC_DIRECTFB(object)    (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GC_DIRECTFB, GdkGCDirectFB))
201 #define GDK_IS_GC_DIRECTFB(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GC_DIRECTFB))
202
203 typedef struct
204 {
205   GdkGC             parent_instance;
206
207   GdkRegion        *clip_region;
208
209   GdkGCValuesMask   values_mask;
210   GdkGCValues       values;
211 } GdkGCDirectFB;
212
213 typedef struct
214 {
215   GdkGCClass        parent_class;
216 } GdkGCDirectFBClass;
217
218 GType     gdk_gc_directfb_get_type (void);
219
220 GdkGC *  _gdk_directfb_gc_new      (GdkDrawable     *drawable,
221                                     GdkGCValues     *values,
222                                     GdkGCValuesMask  values_mask);
223
224 GdkImage* _gdk_directfb_copy_to_image (GdkDrawable  *drawable,
225                                        GdkImage     *image,
226                                        gint          src_x,
227                                        gint          src_y,
228                                        gint          dest_x,
229                                        gint          dest_y,
230                                        gint          width,
231                                        gint          height);
232
233 void       gdk_directfb_event_windows_add (GdkWindow *window);
234
235 GdkGrabStatus gdk_directfb_pointer_grab   (GdkWindow           *window,
236                                            gint                 owner_events,
237                                            GdkEventMask         event_mask,
238                                            GdkWindow           *confine_to,
239                                            GdkCursor           *cursor,
240                                            guint32              time,
241                                            gboolean             implicit_grab);
242 void          gdk_directfb_pointer_ungrab (guint32              time,
243                                            gboolean             implicit_grab);
244
245 guint32       gdk_directfb_get_time       (void);
246
247 GdkWindow * gdk_directfb_pointer_event_window  (GdkWindow    *window,
248                                                 GdkEventType  type);
249 GdkWindow * gdk_directfb_keyboard_event_window (GdkWindow    *window,
250                                                 GdkEventType  type);
251 GdkWindow * gdk_directfb_other_event_window    (GdkWindow    *window,
252                                                 GdkEventType  type);
253 void       _gdk_selection_window_destroyed    (GdkWindow       *window);
254
255 void       _gdk_directfb_move_resize_child (GdkWindow *window,
256                                             gint       x,
257                                             gint       y,
258                                             gint       width,
259                                             gint       height);
260
261 GdkWindow * gdk_directfb_child_at          (GdkWindow *window,
262                                             gint      *x,
263                                             gint      *y);
264
265 GdkWindow * gdk_directfb_window_find_focus (void);
266
267 void        gdk_directfb_change_focus      (GdkWindow *new_focus_window);
268
269 void        gdk_directfb_mouse_get_info    (gint            *x,
270                                             gint            *y,
271                                             GdkModifierType *mask);
272
273 /**********************/
274 /*  Global variables  */
275 /**********************/
276
277 extern GdkDisplayDFB *_gdk_display;
278
279 /* Pointer grab info */
280 extern GdkWindow           * _gdk_directfb_pointer_grab_window;
281 extern gboolean              _gdk_directfb_pointer_grab_owner_events;
282 extern GdkWindow           * _gdk_directfb_pointer_grab_confine;
283 extern GdkEventMask          _gdk_directfb_pointer_grab_events;
284 extern GdkCursor           * _gdk_directfb_pointer_grab_cursor;
285
286 /* Keyboard grab info */
287 extern GdkWindow           * _gdk_directfb_keyboard_grab_window;
288 extern GdkEventMask          _gdk_directfb_keyboard_grab_events;
289 extern gboolean              _gdk_directfb_keyboard_grab_owner_events;
290
291 extern GdkScreen  *  _gdk_screen;
292
293 extern GdkAtom               _gdk_selection_property;
294
295
296 IDirectFBPalette * gdk_directfb_colormap_get_palette (GdkColormap *colormap);
297
298
299 /* these are Linux-FB specific functions used for window decorations */
300
301 typedef gboolean (* GdkWindowChildChanged) (GdkWindow *window,
302                                             gint       x,
303                                             gint       y,
304                                             gint       width,
305                                             gint       height,
306                                             gpointer   user_data);
307 typedef void     (* GdkWindowChildGetPos)  (GdkWindow *window,
308                                             gint      *x,
309                                             gint      *y,
310                                             gpointer   user_data);
311
312 void gdk_fb_window_set_child_handler (GdkWindow              *window,
313                                       GdkWindowChildChanged  changed,
314                                       GdkWindowChildGetPos   get_pos,
315                                       gpointer               user_data);
316
317
318 #endif /* __GDK_PRIVATE_DIRECTFB_H__ */