]> Pileus Git - ~andy/gtk/blob - gdk/linux-fb/gdkprivate-fb.h
We really do need to include gdkfb.h in order to get the GDK_PARENT_ROOT()
[~andy/gtk] / gdk / linux-fb / gdkprivate-fb.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 /*
28  * Private uninstalled header defining things local to X windowing code
29  */
30
31 #ifndef __GDK_PRIVATE_FB_H__
32 #define __GDK_PRIVATE_FB_H__
33
34 #include <gdk/gdkprivate.h>
35 #include <gdk/gdk.h>
36 #include "gdkfb.h"
37 #include "gdkregion-generic.h"
38 #include <linux/fb.h>
39 #include <stdio.h>
40 #include <freetype/freetype.h>
41
42 #define GDK_DRAWABLE_IMPL_FBDATA(win) ((GdkDrawableFBData *)((GdkWindowPrivate *)(win))->impl)
43 #define GDK_DRAWABLE_IMPL(win) ((GdkDrawable *)((GdkWindowPrivate *)(win))->impl)
44 #define GDK_WINDOW_IMPL_FBDATA(win) ((GdkWindowFBData *)((GdkWindowPrivate *)(win))->impl)
45 #define GDK_PIXMAP_IMPL_FBDATA(win) ((GdkPixmapFBData *)((GdkWindowPrivate *)(win))->impl)
46 #define GDK_DRAWABLE_FBDATA(win) ((GdkDrawableFBData *)(win))
47 #define GDK_PIXMAP_FBDATA(win) ((GdkPixmapFBData *)(win))
48 #define GDK_WINDOW_FBDATA(win) ((GdkWindowFBData *)(win))
49 #define GDK_FONT_FB(f) ((GdkFontPrivateFB *)(f))
50 #define GDK_CURSOR_FB(c) ((GdkCursorPrivateFB *)(c))
51
52 #define GDK_CHECK_IMPL(drawable) \
53  g_assert(G_OBJECT_TYPE(drawable) == _gdk_window_impl_get_type() || G_OBJECT_TYPE(drawable) == _gdk_pixmap_impl_get_type())
54 #define GDK_CHECK_INTF(drawable) \
55  g_assert(G_OBJECT_TYPE(drawable) == gdk_window_get_type() || G_OBJECT_TYPE(drawable) == gdk_pixmap_get_type())
56
57 typedef struct _GdkDrawableFBData GdkDrawableFBData;
58 typedef struct _GdkWindowFBData GdkWindowFBData;
59 typedef struct _GdkPixmapFBData GdkPixmapFBData;
60 typedef GdkWindowObject GdkWindowPrivate;
61 #define GDK_DRAWABLE_PIXMAP (GDK_WINDOW_FOREIGN+1)
62
63 struct _GdkDrawableFBData
64 {
65   GdkDrawable parent_object;
66
67   GdkDrawable *wrapper;
68
69   guchar *mem;
70
71   gint abs_x, abs_y, lim_x, lim_y, llim_x, llim_y; /* computed values */
72
73   guint rowstride;
74
75   /* Due to excursions in gdk, this stuff has to be stored here instead of in GdkDrawable where it belongs */
76   gint width, height, depth;
77   GdkColormap *colormap;
78   GdkWindowType window_type;
79 };
80
81 typedef struct {
82   GdkDrawableClass base_class;
83 } GdkDrawableFBClass;
84
85 #define GDK_DRAWABLE_P(x) ((GdkDrawableFBData *)(x))
86
87 struct _GdkPixmapFBData
88 {
89   GdkDrawableFBData drawable_data;
90 };
91
92 typedef struct {
93   GdkDrawableFBClass klass;
94 } GdkPixmapFBClass;
95
96 GType gdk_drawable_impl_fb_get_type (void);
97
98 typedef struct {
99   gulong length;
100   GdkAtom type;
101   gint format;
102   guchar data[1];
103 } GdkWindowProperty;
104
105 struct _GdkWindowFBData
106 {
107   GdkDrawableFBData drawable_data;
108   GdkCursor *cursor;
109   GHashTable *properties;
110
111   GdkEventMask event_mask;
112   gint level;
113   gboolean realized : 1;
114 };
115
116 typedef struct {
117   GdkDrawableFBClass base_class;
118 } GdkWindowFBClass;
119 #define GDK_WINDOW_P(x) ((GdkWindowObject *)(x))
120
121 struct _GdkFBDisplay
122 {
123   int fd;
124   guchar *fbmem;
125   gpointer active_cmap;
126   gulong mem_len;
127   struct fb_fix_screeninfo sinfo;
128   struct fb_var_screeninfo modeinfo;
129   int red_byte, green_byte, blue_byte; /* For truecolor */
130 };
131
132 typedef struct {
133   GdkVisual base;
134 } GdkVisualPrivateFB;
135
136 typedef struct {
137   GdkColormap base;
138
139   GHashTable *hash;
140   GdkColorInfo *info;
141   guint sync_tag;
142 } GdkColormapPrivateFB;
143
144 typedef struct {
145   GdkColormapClass base_class;
146 } GdkColormapFBClass;
147
148 typedef struct {
149   GdkCursor base;
150   GdkPixmap *cursor, *mask;
151   int hot_x, hot_y;
152   int mask_off_x, mask_off_y;
153 } GdkCursorPrivateFB;
154
155 typedef struct {
156   GdkFontPrivate base;
157
158   FT_Face face;
159   double size;
160 } GdkFontPrivateFB;
161
162 void gdk_fb_font_init(void);
163 void gdk_fb_font_fini(void);
164
165 typedef struct {
166   GdkImage base;
167 } GdkImagePrivateFB;
168
169 #define GDK_GC_FBDATA(x) ((GdkGCFBData *)(x))
170 #define GDK_GC_P(x) ((GdkGC *)(x))
171
172 typedef struct {
173   GdkGC parent_instance;
174
175   GdkRegion *clip_region;
176   gchar *dash_list;
177   GdkGCValuesMask values_mask;
178   GdkGCValues values;
179   gint dash_offset;
180   gushort dash_list_len;
181   guchar depth, alu;
182 } GdkGCFBData;
183
184 typedef struct {
185   GdkGCClass parent_class;
186 } GdkGCFBClass;
187
188 GType gdk_gc_fb_get_type (void);
189 #if 0
190 GdkGC *       _gdk_fb_gc_new          (GdkDrawable     *drawable,
191                                        GdkGCValues     *values,
192                                        GdkGCValuesMask  values_mask);
193 #endif
194
195 /* Routines from gdkgeometry-fb.c */
196
197 void _gdk_window_init_position     (GdkWindow    *window);
198 void _gdk_window_move_resize_child (GdkWindow    *window,
199                                     gint          x,
200                                     gint          y,
201                                     gint          width,
202                                     gint          height);
203 void _gdk_window_process_expose    (GdkWindow    *window,
204                                     gulong        serial,
205                                     GdkRectangle *area);
206 void gdk_window_invalidate_region_clear(GdkWindow *window, GdkRegion *region);
207 void gdk_window_invalidate_rect_clear(GdkWindow *window, GdkRectangle *rect);
208 GdkGC *_gdk_fb_gc_new(GdkDrawable *drawable, GdkGCValues *values, GdkGCValuesMask values_mask);
209
210 void gdk_fb_drawable_clear(GdkDrawable *drawable);
211 void gdk_fb_draw_drawable  (GdkDrawable    *drawable,
212                             GdkGC          *gc,
213                             GdkPixmap      *src,
214                             gint            xsrc,
215                             gint            ysrc,
216                             gint            xdest,
217                             gint            ydest,
218                             gint            width,
219                             gint            height);
220
221 typedef struct {
222   GdkWindow *bg_relto;
223   GdkPixmap *bgpm;
224
225   GdkRegion *real_clip_region;
226
227   guchar *mem, *clipmem;
228   gpointer cursor_dc;
229
230   guint rowstride, clip_rowstride;
231   int clipxoff, clipyoff;
232
233   gboolean draw_bg : 1;
234   gboolean copy_region : 1;
235   gboolean handle_cursor : 1;
236 } GdkFBDrawingContext;
237
238 void gdk_fb_drawing_context_init(GdkFBDrawingContext *dc, GdkDrawable *drawable,
239                                  GdkGC *gc, gboolean draw_bg, gboolean do_clipping);
240 void gdk_fb_drawing_context_finalize(GdkFBDrawingContext *dc);
241
242 void gdk_fb_draw_drawable_3 (GdkDrawable *drawable,
243                              GdkGC *gc,
244                              GdkPixmap *src,
245                              GdkFBDrawingContext *dc,
246                              gint xsrc,
247                              gint ysrc,
248                              gint xdest,
249                              gint ydest,
250                              gint width,
251                              gint height);
252
253 void gdk_fb_draw_drawable_2 (GdkDrawable *drawable,
254                              GdkGC       *gc,
255                              GdkPixmap   *src,
256                              gint         xsrc,
257                              gint         ysrc,
258                              gint         xdest,
259                              gint         ydest,
260                              gint         width,
261                              gint         height,
262                              gboolean     draw_bg,
263                              gboolean     do_clipping);
264 void gdk_fb_draw_rectangle (GdkDrawable    *drawable,
265                             GdkGC          *gc,
266                             gint            filled,
267                             gint            x,
268                             gint            y,
269                             gint            width,
270                             gint            height);
271 void gdk_fb_fill_spans(GdkDrawable *real_drawable, GdkGC *gc, GdkRectangle *rects, int nrects);
272 GdkRegion *gdk_fb_clip_region(GdkDrawable *drawable, GdkGC *gc, gboolean do_clipping, gboolean do_children);
273
274 GdkGrabStatus
275 gdk_fb_pointer_grab (GdkWindow *          window,
276                      gint                 owner_events,
277                      GdkEventMask         event_mask,
278                      GdkWindow *          confine_to,
279                      GdkCursor *          cursor,
280                      guint32  time,
281                      gboolean implicit_grab);
282 void gdk_fb_pointer_ungrab (guint32 time, gboolean implicit_grab);
283
284 extern GdkWindow *_gdk_fb_pointer_grab_window, *_gdk_fb_pointer_grab_window_events, *_gdk_fb_keyboard_grab_window, *_gdk_fb_pointer_grab_confine;
285 extern GdkEventMask _gdk_fb_pointer_grab_events, _gdk_fb_keyboard_grab_events;
286 extern GdkCursor *_gdk_fb_pointer_grab_cursor;
287 extern GdkFBDisplay *gdk_display;
288 extern GdkDrawableClass _gdk_fb_drawable_class;
289 extern FILE *debug_out;
290 GdkEvent *gdk_event_make(GdkWindow *window, GdkEventType type, gboolean append_to_queue);
291 GdkEvent *gdk_event_make_2(GdkWindow *window, GdkEventType type, gboolean append_to_queue, gint button_press_num);
292
293 void gdk_fb_get_cursor_rect(GdkRectangle *rect);
294 gboolean gdk_fb_cursor_need_hide(GdkRectangle *rect);
295 gboolean gdk_fb_cursor_region_need_hide(GdkRegion *region);
296 void gdk_fb_cursor_unhide(void);
297 void gdk_fb_cursor_reset(void);
298 void gdk_fb_cursor_hide(void);
299 void gdk_fb_redraw_all(void);
300
301 void gdk_input_ps2_get_mouseinfo(gint *x, gint *y, GdkModifierType *mask);
302 void gdk_fb_window_visibility_crossing(GdkWindow *window, gboolean is_show, gboolean is_grab);
303
304 #define PANGO_TYPE_FB_FONT              (pango_fb_font_get_type ())
305 #define PANGO_FB_FONT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FB_FONT, PangoFBFont))
306 typedef struct _PangoFBFont        PangoFBFont;
307 struct _PangoFBFont
308 {
309   PangoFont parent;
310
311   FT_Face ftf;
312   PangoFontDescription desc;
313   PangoCoverage *coverage;
314   GHashTable *glyph_info;
315 };
316 typedef struct {
317   PangoRectangle extents[2];
318   GdkPixmapFBData fbd;
319   int hbearing;
320 } PangoFBGlyphInfo;
321
322 GType pango_fb_font_get_type (void);
323 gboolean pango_fb_has_glyph(PangoFont *font, PangoGlyph glyph);
324 PangoGlyph pango_fb_get_unknown_glyph(PangoFont *font);
325 PangoFBGlyphInfo *pango_fb_font_get_glyph_info(PangoFont *font, PangoGlyph glyph);
326
327 void gdk_fb_window_move_resize (GdkWindow *window,
328                                 gint       x,
329                                 gint       y,
330                                 gint       width,
331                                 gint       height,
332                                 gboolean   send_expose_events);
333
334 extern void CM(void); /* Check for general mem corruption */
335 extern void RP(GdkDrawable *drawable); /* Same, for pixmaps */
336
337 #endif /* __GDK_PRIVATE_FB_H__ */