diff options
author | Alexander Larsson <alla@lysator.liu.se> | 2000-11-15 12:45:30 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2000-11-15 12:45:30 +0000 |
commit | 2eb744a3c4a2d15223828a65aec02f7b070b516c (patch) | |
tree | c402ea9611b1e2514378993212f9e2c5a7f036d4 /gdk/linux-fb/gdkprivate-fb.h | |
parent | 376d6c19147bd8c255e1af41f39cb1e61a7d8855 (diff) | |
download | gdk-pixbuf-2eb744a3c4a2d15223828a65aec02f7b070b516c.tar.gz |
Added virtual functions set_pixel, get_color, fill_span and draw_drawable
2000-11-15 Alexander Larsson <alla@lysator.liu.se>
* gdk/linux-fb/gdkprivate-fb.h:
Added virtual functions set_pixel, get_color,
fill_span and draw_drawable to the GC.
Added global _gdk_fb_screen_gc to use instead of
NULL when drawing to the screen.
Added _gdk_fb_gc_calc_state() prototype.
* gdk/linux-fb/gdkgc-fb.c:
Call _gdk_fb_gc_calc_state() on any gc state change.
* gdk/linux-fb/gdkglobals-fb.c:
Add _gdk_fb_screen_gc
* gdk/linux-fb/gdkdrawable-fb2.c:
_gdk_fb_gc_calc_state() calculates best functions
for the GC state and depth.
Moved bpp specialized code to separate functions.
Added optimized 24 bpp AA draw_drawable.
* gdk/linux-fb/gdkevents-fb.c:
Silence gcc warning.
* gdk/linux-fb/gdkimage-fb.c:
Use _gdk_fb_screen_gc
* gdk/linux-fb/gdkwindow-fb.c:
Init and use _gdk_fb_screen_gc
* gdk/linux-fb/mitypes.h:
Remove unused types.
Diffstat (limited to 'gdk/linux-fb/gdkprivate-fb.h')
-rw-r--r-- | gdk/linux-fb/gdkprivate-fb.h | 138 |
1 files changed, 105 insertions, 33 deletions
diff --git a/gdk/linux-fb/gdkprivate-fb.h b/gdk/linux-fb/gdkprivate-fb.h index 76d029f6e..c71572f24 100644 --- a/gdk/linux-fb/gdkprivate-fb.h +++ b/gdk/linux-fb/gdkprivate-fb.h @@ -57,6 +57,8 @@ typedef struct _GdkDrawableFBData GdkDrawableFBData; typedef struct _GdkWindowFBData GdkWindowFBData; typedef struct _GdkPixmapFBData GdkPixmapFBData; +typedef struct _GdkFBDrawingContext GdkFBDrawingContext; + #define GDK_DRAWABLE_PIXMAP (GDK_WINDOW_FOREIGN+1) struct _GdkDrawableFBData @@ -161,6 +163,36 @@ typedef struct { #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; @@ -170,48 +202,88 @@ typedef struct { 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, + GdkSegment *cur, + GdkColor *color); + + gdk_fb_draw_drawable_func *draw_drawable[GDK_NUM_FB_SRCBPP]; } GdkGCFBData; typedef struct { GdkGCClass parent_class; } GdkGCFBClass; + +extern GdkGC *_gdk_fb_screen_gc; + 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); - -typedef struct { +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); + +#define _GDK_FB_GC_DEPTH (1<<31) +void _gdk_fb_gc_calc_state (GdkGC *gc, + GdkGCValuesMask changed); + +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); + +struct _GdkFBDrawingContext { GdkWindow *bg_relto; GdkPixmap *bgpm; @@ -226,7 +298,7 @@ typedef struct { 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); |