diff options
author | Alexander Larsson <alexl@redhat.com> | 2013-05-02 16:23:42 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2013-05-07 16:34:05 +0200 |
commit | 30dc399b724629053cee044a45d8f55b0ae9c7a2 (patch) | |
tree | f429c5c54dd309771e73967f97631de44838c522 /gtk/gtkpixelcacheprivate.h | |
parent | cb2882a273a380bd022b6a7adfc064c5bf04081a (diff) | |
download | gtk+-30dc399b724629053cee044a45d8f55b0ae9c7a2.tar.gz |
Add GtkPixelCache
GtkPixelCache is a helper utility that lets you implement
faster scrolling of a viewport of a canvas by using an
offscreen pixmap cache.
You call _gtk_pixel_cache_draw with a callback function that
does the drawing, and additionally you specify the size and the
position of the viewport in the widget, and the position and size
of the canvas wrt the viewport. The callback will be called to
draw on an offscreen surface, and the surface will be drawn
on the window. The next time you do the same, any already drawn
pieces of the surface are re-used from the offscreen and need
not be rendered again.
If things inside the canvas change you need to call
_gtk_pixel_cache_invalidate to tell the cache about this.
Some other details:
* The offscreen surface is generally a bit larger than
the viewport, so scrolling a small amount can often
be done without redrawing children.
* If the canvas is not larger than the viewport no
offscreen surface is used.
GtkPixelCache: Make sure we always copy using SOURCE
We were using OVER for the first copy (from source to group surface.
GtkPixelCache: Fix x/y typos
GtkPixelCache: Allow NULL for invalidate region
gtkpixelcache: Use CONTENT_COLOR for solid bg windows
Diffstat (limited to 'gtk/gtkpixelcacheprivate.h')
-rw-r--r-- | gtk/gtkpixelcacheprivate.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/gtk/gtkpixelcacheprivate.h b/gtk/gtkpixelcacheprivate.h new file mode 100644 index 0000000000..2b916d0b9c --- /dev/null +++ b/gtk/gtkpixelcacheprivate.h @@ -0,0 +1,48 @@ +/* + * Copyright © 2013 Red Hat Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + * Authors: Alexander Larsson <alexl@gnome.org> + */ + +#ifndef __GTK_PIXEL_CACHE_PRIVATE_H__ +#define __GTK_PIXEL_CACHE_PRIVATE_H__ + +#include <glib-object.h> +#include <gtkwidget.h> + +G_BEGIN_DECLS + +typedef struct _GtkPixelCache GtkPixelCache; + +typedef void (*GtkPixelCacheDrawFunc) (cairo_t *cr, + gpointer user_data); + +GtkPixelCache *_gtk_pixel_cache_new (void); +void _gtk_pixel_cache_free (GtkPixelCache *cache); +void _gtk_pixel_cache_invalidate (GtkPixelCache *cache, + cairo_region_t *region); +void _gtk_pixel_cache_draw (GtkPixelCache *cache, + cairo_t *cr, + GdkWindow *window, + cairo_rectangle_int_t *view_rect, + cairo_rectangle_int_t *canvas_rect, + GtkPixelCacheDrawFunc draw, + gpointer user_data); + + +G_END_DECLS + +#endif /* __GTK_PIXEL_CACHE_PRIVATE_H__ */ |