gdkprivate-fb.h 9.63 KB
Newer Older
Elliot Lee's avatar
Elliot Lee committed
1 2 3 4
/* GDK - The GIMP Drawing Kit
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
 *
 * This library is free software; you can redistribute it and/or
5
 * modify it under the terms of the GNU Lesser General Public
Elliot Lee's avatar
Elliot Lee committed
6 7 8 9 10 11
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 * Lesser General Public License for more details.
Elliot Lee's avatar
Elliot Lee committed
13
 *
14
 * You should have received a copy of the GNU Lesser General Public
Elliot Lee's avatar
Elliot Lee committed
15 16 17 18 19 20
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

/*
21
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
Elliot Lee's avatar
Elliot Lee committed
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
 * file for a list of people on the GTK+ Team.  See the ChangeLog
 * files for a list of changes.  These files are distributed with
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
 */

/*
 * Private uninstalled header defining things local to X windowing code
 */

#ifndef __GDK_PRIVATE_FB_H__
#define __GDK_PRIVATE_FB_H__

#include <gdk/gdkprivate.h>
#include <gdk/gdk.h>
#include "gdkfb.h"
#include "gdkregion-generic.h"
#include <linux/fb.h>
#include <stdio.h>
Elliot Lee's avatar
Elliot Lee committed
40
#include <freetype/freetype.h>
Elliot Lee's avatar
Elliot Lee committed
41

42 43 44 45 46 47 48
#define GDK_DRAWABLE_IMPL_FBDATA(win) ((GdkDrawableFBData *)((GdkWindowPrivate *)(win))->impl)
#define GDK_DRAWABLE_IMPL(win) ((GdkDrawable *)((GdkWindowPrivate *)(win))->impl)
#define GDK_WINDOW_IMPL_FBDATA(win) ((GdkWindowFBData *)((GdkWindowPrivate *)(win))->impl)
#define GDK_PIXMAP_IMPL_FBDATA(win) ((GdkPixmapFBData *)((GdkWindowPrivate *)(win))->impl)
#define GDK_DRAWABLE_FBDATA(win) ((GdkDrawableFBData *)(win))
#define GDK_PIXMAP_FBDATA(win) ((GdkPixmapFBData *)(win))
#define GDK_WINDOW_FBDATA(win) ((GdkWindowFBData *)(win))
Elliot Lee's avatar
Elliot Lee committed
49 50 51
#define GDK_FONT_FB(f) ((GdkFontPrivateFB *)(f))
#define GDK_CURSOR_FB(c) ((GdkCursorPrivateFB *)(c))

52 53 54 55 56
#define GDK_CHECK_IMPL(drawable) \
 g_assert(G_OBJECT_TYPE(drawable) == _gdk_window_impl_get_type() || G_OBJECT_TYPE(drawable) == _gdk_pixmap_impl_get_type())
#define GDK_CHECK_INTF(drawable) \
 g_assert(G_OBJECT_TYPE(drawable) == gdk_window_get_type() || G_OBJECT_TYPE(drawable) == gdk_pixmap_get_type())

Elliot Lee's avatar
Elliot Lee committed
57 58
typedef struct _GdkDrawableFBData GdkDrawableFBData;
typedef struct _GdkWindowFBData GdkWindowFBData;
Elliot Lee's avatar
Elliot Lee committed
59
typedef struct _GdkPixmapFBData GdkPixmapFBData;
60 61
typedef GdkWindowObject GdkWindowPrivate;
#define GDK_DRAWABLE_PIXMAP (GDK_WINDOW_FOREIGN+1)
Elliot Lee's avatar
Elliot Lee committed
62 63 64

struct _GdkDrawableFBData
{
65 66 67 68
  GdkDrawable parent_object;

  GdkDrawable *wrapper;

Elliot Lee's avatar
Elliot Lee committed
69 70 71 72 73
  guchar *mem;

  gint abs_x, abs_y, lim_x, lim_y, llim_x, llim_y; /* computed values */

  guint rowstride;
74 75 76 77 78

  /* Due to excursions in gdk, this stuff has to be stored here instead of in GdkDrawable where it belongs */
  gint width, height, depth;
  GdkColormap *colormap;
  GdkWindowType window_type;
Elliot Lee's avatar
Elliot Lee committed
79 80
};

81 82 83 84 85 86
typedef struct {
  GdkDrawableClass base_class;
} GdkDrawableFBClass;

#define GDK_DRAWABLE_P(x) ((GdkDrawableFBData *)(x))

Elliot Lee's avatar
Elliot Lee committed
87 88 89 90 91
struct _GdkPixmapFBData
{
  GdkDrawableFBData drawable_data;
};

92 93 94 95
typedef struct {
  GdkDrawableFBClass klass;
} GdkPixmapFBClass;

Elliot Lee's avatar
Elliot Lee committed
96
GType gdk_drawable_impl_fb_get_type (void) G_GNUC_CONST;
97

Elliot Lee's avatar
Elliot Lee committed
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
typedef struct {
  gulong length;
  GdkAtom type;
  gint format;
  guchar data[1];
} GdkWindowProperty;

struct _GdkWindowFBData
{
  GdkDrawableFBData drawable_data;
  GdkCursor *cursor;
  GHashTable *properties;

  GdkEventMask event_mask;
  gint level;
  gboolean realized : 1;
};

116 117 118 119 120
typedef struct {
  GdkDrawableFBClass base_class;
} GdkWindowFBClass;
#define GDK_WINDOW_P(x) ((GdkWindowObject *)(x))

Elliot Lee's avatar
Elliot Lee committed
121 122 123 124 125 126 127 128
struct _GdkFBDisplay
{
  int fd;
  guchar *fbmem;
  gpointer active_cmap;
  gulong mem_len;
  struct fb_fix_screeninfo sinfo;
  struct fb_var_screeninfo modeinfo;
Elliot Lee's avatar
Elliot Lee committed
129
  int red_byte, green_byte, blue_byte; /* For truecolor */
Elliot Lee's avatar
Elliot Lee committed
130 131 132 133 134 135 136
};

typedef struct {
  GdkVisual base;
} GdkVisualPrivateFB;

typedef struct {
137
  GdkColormap base;
Elliot Lee's avatar
Elliot Lee committed
138 139 140 141 142 143

  GHashTable *hash;
  GdkColorInfo *info;
  guint sync_tag;
} GdkColormapPrivateFB;

144 145 146 147
typedef struct {
  GdkColormapClass base_class;
} GdkColormapFBClass;

Elliot Lee's avatar
Elliot Lee committed
148 149 150
typedef struct {
  GdkCursor base;
  GdkPixmap *cursor, *mask;
Elliot Lee's avatar
Elliot Lee committed
151
  int hot_x, hot_y;
152
  int mask_off_x, mask_off_y;
Elliot Lee's avatar
Elliot Lee committed
153 154 155 156 157
} GdkCursorPrivateFB;

typedef struct {
  GdkFontPrivate base;

Elliot Lee's avatar
Elliot Lee committed
158
  FT_Face face;
Elliot Lee's avatar
Elliot Lee committed
159 160 161
  double size;
} GdkFontPrivateFB;

Elliot Lee's avatar
Elliot Lee committed
162 163 164
void gdk_fb_font_init(void);
void gdk_fb_font_fini(void);

Elliot Lee's avatar
Elliot Lee committed
165
typedef struct {
166
  GdkImage base;
Elliot Lee's avatar
Elliot Lee committed
167 168
} GdkImagePrivateFB;

169 170 171
#define GDK_GC_FBDATA(x) ((GdkGCFBData *)(x))
#define GDK_GC_P(x) ((GdkGC *)(x))

Elliot Lee's avatar
Elliot Lee committed
172
typedef struct {
173 174
  GdkGC parent_instance;

Elliot Lee's avatar
Elliot Lee committed
175 176 177 178 179 180 181 182 183
  GdkRegion *clip_region;
  gchar *dash_list;
  GdkGCValuesMask values_mask;
  GdkGCValues values;
  gint dash_offset;
  gushort dash_list_len;
  guchar depth, alu;
} GdkGCFBData;

184 185 186 187
typedef struct {
  GdkGCClass parent_class;
} GdkGCFBClass;

Elliot Lee's avatar
Elliot Lee committed
188
GType gdk_gc_fb_get_type (void) G_GNUC_CONST;
Elliot Lee's avatar
Elliot Lee committed
189 190 191 192 193 194 195 196 197 198 199 200

/* Routines from gdkgeometry-fb.c */

void _gdk_window_init_position     (GdkWindow    *window);
void _gdk_window_move_resize_child (GdkWindow    *window,
				    gint          x,
				    gint          y,
				    gint          width,
				    gint          height);
void _gdk_window_process_expose    (GdkWindow    *window,
				    gulong        serial,
				    GdkRectangle *area);
201 202
void gdk_window_invalidate_region_clear(GdkWindow *window, GdkRegion *region);
void gdk_window_invalidate_rect_clear(GdkWindow *window, GdkRectangle *rect);
Elliot Lee's avatar
Elliot Lee committed
203 204 205 206 207 208 209 210 211 212 213 214
GdkGC *_gdk_fb_gc_new(GdkDrawable *drawable, GdkGCValues *values, GdkGCValuesMask values_mask);

void gdk_fb_drawable_clear(GdkDrawable *drawable);
void gdk_fb_draw_drawable  (GdkDrawable    *drawable,
			    GdkGC          *gc,
			    GdkPixmap      *src,
			    gint            xsrc,
			    gint            ysrc,
			    gint            xdest,
			    gint            ydest,
			    gint            width,
			    gint            height);
Elliot Lee's avatar
Elliot Lee committed
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247

typedef struct {
  GdkWindow *bg_relto;
  GdkPixmap *bgpm;

  GdkRegion *real_clip_region;

  guchar *mem, *clipmem;
  gpointer cursor_dc;

  guint rowstride, clip_rowstride;
  int clipxoff, clipyoff;

  gboolean draw_bg : 1;
  gboolean copy_region : 1;
  gboolean handle_cursor : 1;
} GdkFBDrawingContext;

void gdk_fb_drawing_context_init(GdkFBDrawingContext *dc, GdkDrawable *drawable,
				 GdkGC *gc, gboolean draw_bg, gboolean do_clipping);
void gdk_fb_drawing_context_finalize(GdkFBDrawingContext *dc);

void gdk_fb_draw_drawable_3 (GdkDrawable *drawable,
			     GdkGC *gc,
			     GdkPixmap *src,
			     GdkFBDrawingContext *dc,
			     gint xsrc,
			     gint ysrc,
			     gint xdest,
			     gint ydest,
			     gint width,
			     gint height);

Elliot Lee's avatar
Elliot Lee committed
248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
void gdk_fb_draw_drawable_2 (GdkDrawable *drawable,
			     GdkGC       *gc,
			     GdkPixmap   *src,
			     gint         xsrc,
			     gint         ysrc,
			     gint         xdest,
			     gint         ydest,
			     gint         width,
			     gint         height,
			     gboolean     draw_bg,
			     gboolean     do_clipping);
void gdk_fb_draw_rectangle (GdkDrawable    *drawable,
			    GdkGC          *gc,
			    gint            filled,
			    gint            x,
			    gint            y,
			    gint            width,
			    gint            height);
266 267
void gdk_fb_fill_spans(GdkDrawable *real_drawable, GdkGC *gc, GdkRectangle *rects, int nrects);
GdkRegion *gdk_fb_clip_region(GdkDrawable *drawable, GdkGC *gc, gboolean do_clipping, gboolean do_children);
Elliot Lee's avatar
Elliot Lee committed
268

269 270 271 272 273 274 275 276 277 278 279
GdkGrabStatus
gdk_fb_pointer_grab (GdkWindow *	  window,
		     gint		  owner_events,
		     GdkEventMask	  event_mask,
		     GdkWindow *	  confine_to,
		     GdkCursor *	  cursor,
		     guint32  time,
		     gboolean implicit_grab);
void gdk_fb_pointer_ungrab (guint32 time, gboolean implicit_grab);

extern GdkWindow *_gdk_fb_pointer_grab_window, *_gdk_fb_pointer_grab_window_events, *_gdk_fb_keyboard_grab_window, *_gdk_fb_pointer_grab_confine;
Elliot Lee's avatar
Elliot Lee committed
280 281 282 283 284 285
extern GdkEventMask _gdk_fb_pointer_grab_events, _gdk_fb_keyboard_grab_events;
extern GdkCursor *_gdk_fb_pointer_grab_cursor;
extern GdkFBDisplay *gdk_display;
extern GdkDrawableClass _gdk_fb_drawable_class;
extern FILE *debug_out;
GdkEvent *gdk_event_make(GdkWindow *window, GdkEventType type, gboolean append_to_queue);
286
GdkEvent *gdk_event_make_2(GdkWindow *window, GdkEventType type, gboolean append_to_queue, gint button_press_num);
Elliot Lee's avatar
Elliot Lee committed
287 288

void gdk_fb_get_cursor_rect(GdkRectangle *rect);
289 290
gboolean gdk_fb_cursor_need_hide(GdkRectangle *rect);
gboolean gdk_fb_cursor_region_need_hide(GdkRegion *region);
Elliot Lee's avatar
Elliot Lee committed
291
void gdk_fb_cursor_unhide(void);
292
void gdk_fb_cursor_reset(void);
Elliot Lee's avatar
Elliot Lee committed
293 294 295 296
void gdk_fb_cursor_hide(void);
void gdk_fb_redraw_all(void);

void gdk_input_ps2_get_mouseinfo(gint *x, gint *y, GdkModifierType *mask);
297
void gdk_fb_window_visibility_crossing(GdkWindow *window, gboolean is_show, gboolean is_grab);
Elliot Lee's avatar
Elliot Lee committed
298

Elliot Lee's avatar
Elliot Lee committed
299 300 301 302 303 304 305 306 307 308
#define PANGO_TYPE_FB_FONT              (pango_fb_font_get_type ())
#define PANGO_FB_FONT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FB_FONT, PangoFBFont))
typedef struct _PangoFBFont        PangoFBFont;
struct _PangoFBFont
{
  PangoFont parent;

  FT_Face ftf;
  PangoFontDescription desc;
  PangoCoverage *coverage;
309
  GHashTable *glyph_info;
Elliot Lee's avatar
Elliot Lee committed
310
};
311 312 313 314 315 316
typedef struct {
  PangoRectangle extents[2];
  GdkPixmapFBData fbd;
  int hbearing;
} PangoFBGlyphInfo;

Elliot Lee's avatar
Elliot Lee committed
317
GType pango_fb_font_get_type (void) G_GNUC_CONST;
Elliot Lee's avatar
Elliot Lee committed
318 319
gboolean pango_fb_has_glyph(PangoFont *font, PangoGlyph glyph);
PangoGlyph pango_fb_get_unknown_glyph(PangoFont *font);
320 321 322 323 324 325 326 327
PangoFBGlyphInfo *pango_fb_font_get_glyph_info(PangoFont *font, PangoGlyph glyph);

void gdk_fb_window_move_resize (GdkWindow *window,
				gint       x,
				gint       y,
				gint       width,
				gint       height,
				gboolean   send_expose_events);
Elliot Lee's avatar
Elliot Lee committed
328 329 330 331

extern void CM(void); /* Check for general mem corruption */
extern void RP(GdkDrawable *drawable); /* Same, for pixmaps */

Elliot Lee's avatar
Elliot Lee committed
332
#endif /* __GDK_PRIVATE_FB_H__ */