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