#define __GDK_PRIVATE_FB_H__
#include <gdk/gdkprivate.h>
+#include <gdk/gdkinternals.h>
#include <gdk/gdk.h>
#include "gdkfb.h"
#include "gdkregion-generic.h"
#include <stdio.h>
#include <freetype/freetype.h>
-#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))
-#define GDK_FONT_FB(f) ((GdkFontPrivateFB *)(f))
-#define GDK_CURSOR_FB(c) ((GdkCursorPrivateFB *)(c))
-
+#define GDK_TYPE_DRAWABLE_IMPL_FBDATA (gdk_drawable_impl_fb_get_type ())
+#define GDK_DRAWABLE_IMPL_FBDATA(win) ((GdkDrawableFBData *)((GdkWindowObject *)(win))->impl)
+#define GDK_IS_DRAWABLE_IMPL_FBDATA(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_DRAWABLE_IMPL_FBDATA))
+#define GDK_DRAWABLE_IMPL(win) ((GdkDrawable *)((GdkWindowObject *)(win))->impl)
+#define GDK_WINDOW_IMPL_FBDATA(win) ((GdkWindowFBData *)((GdkWindowObject *)(win))->impl)
+#define GDK_PIXMAP_IMPL_FBDATA(win) ((GdkPixmapFBData *)((GdkWindowObject *)(win))->impl)
+#define GDK_DRAWABLE_FBDATA(win) ((GdkDrawableFBData *)(win))
+#define GDK_PIXMAP_FBDATA(win) ((GdkPixmapFBData *)(win))
+#define GDK_WINDOW_FBDATA(win) ((GdkWindowFBData *)(win))
+#define GDK_FONT_FB(f) ((GdkFontPrivateFB *)(f))
+#define GDK_CURSOR_FB(c) ((GdkCursorPrivateFB *)(c))
+
+#define CHECK_IMPL_AND_INTF
+
+#ifdef CHECK_IMPL_AND_INTF
#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())
-
+ g_assert(G_OBJECT_TYPE(drawable) == gdk_window_object_get_type() || G_OBJECT_TYPE(drawable) == gdk_pixmap_get_type())
+#else
+#define GDK_CHECK_IMPL(drawable)
+#define GDK_CHECK_INTF(drawable)
+#endif
typedef struct _GdkDrawableFBData GdkDrawableFBData;
typedef struct _GdkWindowFBData GdkWindowFBData;
typedef struct _GdkPixmapFBData GdkPixmapFBData;
-typedef GdkWindowObject GdkWindowPrivate;
+typedef struct _GdkFBDrawingContext GdkFBDrawingContext;
+
#define GDK_DRAWABLE_PIXMAP (GDK_WINDOW_FOREIGN+1)
struct _GdkDrawableFBData
GdkDrawableClass base_class;
} GdkDrawableFBClass;
-#define GDK_DRAWABLE_P(x) ((GdkDrawableFBData *)(x))
-
struct _GdkPixmapFBData
{
GdkDrawableFBData drawable_data;
GdkCursor *cursor;
GHashTable *properties;
- GdkEventMask event_mask;
- gint level;
+ GdkRegion *shape; /* Can also be GDK_FB_USE_CHILD_SHAPE */
+
gboolean realized : 1;
};
struct _GdkFBDisplay
{
- int fd;
- guchar *fbmem;
+ int tty_fd;
+ int console_fd;
+ int vt, start_vt;
+
+ /* Used by rendering code: */
+ guchar *fb_mem;
+ gint fb_width; /* In pixels */
+ gint fb_height; /* In pixels */
+ gint fb_stride; /* In bytes */
+
+ int fb_fd;
+ guchar *fb_mmap;
gpointer active_cmap;
gulong mem_len;
struct fb_fix_screeninfo sinfo;
struct fb_var_screeninfo modeinfo;
+ struct fb_var_screeninfo orig_modeinfo;
int red_byte, green_byte, blue_byte; /* For truecolor */
+
+ /* fb manager */
+ int manager_fd;
+ int manager_tag;
+ int manager_blocked;
};
-typedef struct {
- GdkVisual base;
-} GdkVisualPrivateFB;
+struct _GdkVisualClass
+{
+ GObjectClass parent_class;
+};
-typedef struct {
- GdkColormap base;
+typedef struct {
GHashTable *hash;
GdkColorInfo *info;
guint sync_tag;
} GdkColormapPrivateFB;
-typedef struct {
- GdkColormapClass base_class;
-} GdkColormapFBClass;
-
typedef struct {
GdkCursor base;
GdkPixmap *cursor, *mask;
int hot_x, hot_y;
- int mask_off_x, mask_off_y;
} GdkCursorPrivateFB;
+/* Define this to emulate slow emulation of
+ GdkFonts using PangoFont */
+#define EMULATE_GDKFONT
+
typedef struct {
GdkFontPrivate base;
-
- FT_Face face;
- double size;
+#ifdef EMULATE_GDKFONT
+ /* For PangoFont emulation: */
+ char *name;
+ PangoFont *pango_font;
+#else
+ /* For bogus GdkFonts: */
+ int size;
+#endif
} GdkFontPrivateFB;
-void gdk_fb_font_init(void);
-void gdk_fb_font_fini(void);
-
typedef struct {
- GdkImage base;
+ /* Empty */
} GdkImagePrivateFB;
#define GDK_GC_FBDATA(x) ((GdkGCFBData *)(x))
#define GDK_GC_P(x) ((GdkGC *)(x))
+typedef enum {
+ GPR_USED_BG,
+ GPR_AA_GRAYVAL,
+ GPR_NONE,
+ GPR_ERR_BOUNDS
+} GetPixelRet;
+
+typedef enum {
+ GDK_FB_SRC_BPP_1,
+ GDK_FB_SRC_BPP_8,
+ GDK_FB_SRC_BPP_16,
+ GDK_FB_SRC_BPP_24,
+ GDK_FB_SRC_BPP_32,
+ GDK_FB_SRC_BPP_7_AA_GRAYVAL,
+ GDK_FB_SRC_BPP_8_AA_GRAYVAL,
+ GDK_NUM_FB_SRCBPP
+} GdkFbSrcBPP;
+
+typedef void gdk_fb_draw_drawable_func (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkPixmap *src,
+ GdkFBDrawingContext *dc,
+ gint start_y,
+ gint end_y,
+ gint start_x,
+ gint end_x,
+ gint src_x_off,
+ gint src_y_off,
+ gint draw_direction);
+
typedef struct {
GdkGC parent_instance;
GdkGCValues values;
gint dash_offset;
gushort dash_list_len;
- guchar depth, alu;
+ guchar alu;
+
+ /* The GC can only be used with target drawables of
+ * the same depth as the initial drawable
+ * specified in gd_gc_new().
+ */
+ guchar depth;
+
+ /* Calculated state: */
+ /* These functions can only be called for drawables
+ * that have the same depth as the gc.
+ */
+ void (*set_pixel) (GdkDrawable *drawable,
+ GdkGC *gc,
+ int x,
+ int y,
+ gulong pixel);
+
+ GetPixelRet (*get_color) (GdkDrawable *drawable,
+ GdkGC *gc,
+ int x,
+ int y,
+ GdkColor *color);
+
+ void (*fill_span) (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkSpan *span,
+ GdkColor *color);
+
+ void (*fill_rectangle) (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkRectangle *rect,
+ GdkColor *color);
+
+ gdk_fb_draw_drawable_func *draw_drawable[GDK_NUM_FB_SRCBPP];
} GdkGCFBData;
typedef struct {
GdkGCClass parent_class;
} GdkGCFBClass;
-GType gdk_gc_fb_get_type (void) G_GNUC_CONST;
-/* 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);
-void gdk_window_invalidate_region_clear(GdkWindow *window, GdkRegion *region);
-void gdk_window_invalidate_rect_clear(GdkWindow *window, GdkRectangle *rect);
-GdkGC *_gdk_fb_gc_new(GdkDrawable *drawable, GdkGCValues *values, GdkGCValuesMask values_mask);
-
-GdkImage*_gdk_fb_get_image (GdkDrawable *drawable,
- gint x,
- gint y,
- gint width,
- gint height);
-
-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);
+extern GdkGC *_gdk_fb_screen_gc;
-typedef struct {
+GType gdk_gc_fb_get_type (void) G_GNUC_CONST;
+
+void _gdk_selection_window_destroyed (GdkWindow *window);
+void gdk_window_invalidate_region_clear (GdkWindow *window,
+ GdkRegion *region);
+void gdk_window_invalidate_rect_clear (GdkWindow *window,
+ GdkRectangle *rect);
+void gdk_fb_window_send_crossing_events (GdkWindow *src,
+ GdkWindow *dest,
+ GdkCrossingMode mode);
+void gdk_fb_window_move_resize (GdkWindow *window,
+ gint x,
+ gint y,
+ gint width,
+ gint height,
+ gboolean send_expose_events);
+GdkWindow *gdk_fb_window_find_focus (void);
+GdkRegion *gdk_fb_window_get_abs_shape (GdkDrawable *window);
+GdkRegion *gdk_fb_window_peek_shape (GdkDrawable *window,
+ gint *dx,
+ gint *dy);
+GdkGC * _gdk_fb_gc_new (GdkDrawable *drawable,
+ GdkGCValues *values,
+ GdkGCValuesMask values_mask);
+
+#define _GDK_FB_GC_DEPTH (1<<31)
+void _gdk_fb_gc_calc_state (GdkGC *gc,
+ GdkGCValuesMask changed);
+
+GdkImage *_gdk_fb_copy_to_image (GdkDrawable *drawable,
+ GdkImage *image,
+ gint src_x,
+ gint src_y,
+ gint dest_x,
+ gint dest_y,
+ gint width,
+ gint height);
+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);
+
+struct _GdkFBDrawingContext {
GdkWindow *bg_relto;
GdkPixmap *bgpm;
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);
-
-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);
-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);
-
-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;
-extern GdkEventMask _gdk_fb_pointer_grab_events, _gdk_fb_keyboard_grab_events;
+};
+
+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);
+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,
+ gboolean filled,
+ gint x,
+ gint y,
+ gint width,
+ gint height);
+void gdk_fb_fill_spans (GdkDrawable *real_drawable,
+ GdkGC *gc,
+ GdkSpan *spans,
+ int nspans,
+ gboolean sorted);
+GdkRegion *gdk_fb_clip_region (GdkDrawable *drawable,
+ GdkGC *gc,
+ gboolean do_clipping,
+ gboolean do_children,
+ gboolean full_shapes);
+
+
+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);
+
+guint32 gdk_fb_get_time (void);
+
+void gdk_shadow_fb_update (gint minx,
+ gint miny,
+ gint maxx,
+ gint maxy);
+void gdk_shadow_fb_init (void);
+void gdk_shadow_fb_stop_updates (void);
+void gdk_fb_recompute_all (void);
+
+extern GdkAtom _gdk_selection_property;
+
+extern GdkFBAngle _gdk_fb_screen_angle;
+
+/* Pointer grab info */
+extern GdkWindow *_gdk_fb_pointer_grab_window;
+extern gboolean _gdk_fb_pointer_grab_owner_events;
+extern GdkWindow *_gdk_fb_pointer_grab_confine;
+extern GdkEventMask _gdk_fb_pointer_grab_events;
extern GdkCursor *_gdk_fb_pointer_grab_cursor;
+/* Keyboard grab info */
+extern GdkWindow *_gdk_fb_keyboard_grab_window;
+extern GdkEventMask _gdk_fb_keyboard_grab_events;
+extern gboolean _gdk_fb_keyboard_grab_owner_events;
+
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);
-GdkEvent *gdk_event_make_2(GdkWindow *window, GdkEventType type, gboolean append_to_queue, gint button_press_num);
+extern GdkDisplay *_gdk_display;
+extern GdkScreen *_gdk_screen;
+
+extern volatile gboolean _gdk_fb_is_active_vt;
+
+GdkEvent *gdk_event_make(GdkWindow *window,
+ GdkEventType type,
+ gboolean append_to_queue);
+GdkWindow * gdk_fb_pointer_event_window (GdkWindow *window,
+ GdkEventType type);
+GdkWindow *gdk_fb_keyboard_event_window (GdkWindow *window,
+ GdkEventType type);
+GdkWindow *gdk_fb_other_event_window (GdkWindow *window,
+ GdkEventType type);
void gdk_fb_get_cursor_rect(GdkRectangle *rect);
gboolean gdk_fb_cursor_need_hide(GdkRectangle *rect);
void gdk_fb_cursor_reset(void);
void gdk_fb_cursor_hide(void);
void gdk_fb_redraw_all(void);
-
-void gdk_input_get_mouseinfo(gint *x, gint *y, GdkModifierType *mask);
-void gdk_fb_window_visibility_crossing(GdkWindow *window, gboolean is_show, gboolean is_grab);
-
-#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;
- GHashTable *glyph_info;
-};
-typedef struct {
- PangoRectangle extents[2];
- GdkPixmapFBData fbd;
- int hbearing;
-} PangoFBGlyphInfo;
-
-GType pango_fb_font_get_type (void) G_GNUC_CONST;
-gboolean pango_fb_has_glyph(PangoFont *font, PangoGlyph glyph);
-PangoGlyph pango_fb_get_unknown_glyph(PangoFont *font);
-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);
-
-extern void CM(void); /* Check for general mem corruption */
-extern void RP(GdkDrawable *drawable); /* Same, for pixmaps */
+void gdk_fb_cursor_move (gint x, gint y, GdkWindow *in_window);
+
+guint gdk_fb_keyboard_modifiers (void);
+gboolean gdk_fb_keyboard_init (gboolean open_dev);
+gboolean gdk_fb_keyboard_open (void);
+void gdk_fb_keyboard_close (void);
+gboolean gdk_fb_mouse_init (gboolean open_dev);
+gboolean gdk_fb_mouse_open (void);
+void gdk_fb_mouse_close (void);
+void gdk_fb_mouse_get_info (gint *x,
+ gint *y,
+ GdkModifierType *mask);
+
+/* Initialization */
+void _gdk_windowing_window_init (void);
+void _gdk_visual_init (void);
+void _gdk_dnd_init (void);
+void _gdk_windowing_image_init (void);
+void _gdk_events_init (void);
+void _gdk_input_init (void);
#endif /* __GDK_PRIVATE_FB_H__ */