[gnome-mag/cairo-port: 7/8] Paint the crosswire with Cairo
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-mag/cairo-port: 7/8] Paint the crosswire with Cairo
- Date: Fri, 13 Aug 2010 02:30:04 +0000 (UTC)
commit 5d89a5887b68b106a2c5e2acb915aff2dddb9cc3
Author: Benjamin Otte <otte redhat com>
Date: Fri Aug 13 04:19:10 2010 +0200
Paint the crosswire with Cairo
magnifier/zoom-region-private.h | 2 -
magnifier/zoom-region.c | 126 ++++++++++++---------------------------
2 files changed, 38 insertions(+), 90 deletions(-)
---
diff --git a/magnifier/zoom-region-private.h b/magnifier/zoom-region-private.h
index d5ad435..8402a6f 100644
--- a/magnifier/zoom-region-private.h
+++ b/magnifier/zoom-region-private.h
@@ -37,8 +37,6 @@ struct _ZoomRegionPrivate {
GtkWidget *border;
GdkDrawable *source_drawable;
GdkGC *default_gc;
- GdkGC *paint_cursor_gc;
- GdkGC *crosswire_gc;
GdkPixbuf *source_pixbuf_cache;
GdkPixbuf *scaled_pixbuf;
GdkPixmap *pixmap;
diff --git a/magnifier/zoom-region.c b/magnifier/zoom-region.c
index 5a60699..10cdb4b 100644
--- a/magnifier/zoom-region.c
+++ b/magnifier/zoom-region.c
@@ -796,14 +796,10 @@ static void
zoom_region_paint_crosswire_cursor (ZoomRegion *zoom_region, GdkRectangle *clip_rect)
{
Magnifier *magnifier = zoom_region->priv->parent;
- static GdkColormap *cmap;
- static GdkColor last_color;
- static gboolean last_color_init = FALSE;
- GdkGCValues values;
GdkRectangle rect, crect;
- GdkColor color = {0, 0, 0, 0};
int x_start = 0, y_start = 0, x_end = 4096, y_end = 4096;
int x_left_clip = 0, x_right_clip = 0, y_top_clip = 0, y_bottom_clip = 0;
+ cairo_t *cr;
#ifdef ZOOM_REGION_DEBUG
g_assert (zoom_region->alive);
@@ -813,57 +809,33 @@ zoom_region_paint_crosswire_cursor (ZoomRegion *zoom_region, GdkRectangle *clip_
GDK_IS_DRAWABLE (gtk_widget_get_window (GTK_WIDGET (zoom_region))) &&
magnifier->crosswire_size > 0)) return;
- if (zoom_region->priv->crosswire_gc == NULL)
- {
- zoom_region->priv->crosswire_gc = gdk_gc_new (gtk_widget_get_window (GTK_WIDGET (zoom_region)));
- cmap = gdk_gc_get_colormap(zoom_region->priv->crosswire_gc);
- last_color_init = FALSE;
- }
+ cr = gdk_cairo_create (gtk_widget_get_window (GTK_WIDGET (zoom_region)));
+
+ if (clip_rect)
+ {
+ gdk_cairo_rectangle (cr, clip_rect);
+ cairo_clip (cr);
+ }
if (magnifier->crosswire_color == 0)
{
- color.red = 0xFFFF;
- color.blue = 0xFFFF;
- color.green = 0xFFFF;
- values.function = GDK_INVERT;
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_set_operator (cr, CAIRO_OPERATOR_DIFFERENCE);
}
else
{
- color.red = (magnifier->crosswire_color & 0xFF0000) >> 8;
- color.green = (magnifier->crosswire_color & 0xFF00);
- color.blue = (magnifier->crosswire_color & 0xFF) << 8;
- values.function = GDK_COPY;
+ cairo_set_source_rgb (cr,
+ ((magnifier->crosswire_color & 0xFF0000) >> 16) / 255.0,
+ ((magnifier->crosswire_color & 0x00FF00) >> 8) / 255.0,
+ (magnifier->crosswire_color & 0x0000FF) / 255.0);
}
- values.foreground = color;
-
- /* Only reset colors if they have changed */
- if (!last_color_init || color.red != last_color.red ||
- color.blue != last_color.blue || color.green != last_color.green)
- {
- if (cmap)
- {
- gdk_rgb_find_color (cmap, &(values.foreground));
- gdk_gc_set_values(zoom_region->priv->crosswire_gc, &values, GDK_GC_FUNCTION | GDK_GC_FOREGROUND);
- }
- else
- {
- gdk_gc_set_values(zoom_region->priv->crosswire_gc, &values, GDK_GC_FUNCTION);
- }
-
- last_color.red = color.red;
- last_color.blue = color.blue;
- last_color.green = color.green;
- last_color_init = TRUE;
- }
rect.x = zoom_region->priv->last_cursor_pos.x;
rect.y = zoom_region->priv->last_cursor_pos.y;
rect.width = 0;
rect.height = 0;
rect = zoom_region_view_rect_from_source_rect (zoom_region, rect);
- if (clip_rect) gdk_gc_set_clip_rectangle (zoom_region->priv->crosswire_gc, clip_rect);
- else gdk_gc_set_clip_rectangle (zoom_region->priv->crosswire_gc, NULL);
magnifier_get_cursor_size (magnifier, &crect);
crect.x += rect.x;
@@ -887,55 +859,33 @@ zoom_region_paint_crosswire_cursor (ZoomRegion *zoom_region, GdkRectangle *clip_
{
y_top_clip = crect.y - magnifier->crosswire_size;
y_bottom_clip = crect.y + crect.height + magnifier->crosswire_size;
- x_left_clip = rect.x - magnifier->crosswire_size;
+ x_left_clip = crect.x - magnifier->crosswire_size;
x_right_clip = crect.x + crect.width + magnifier->crosswire_size;
}
- if (magnifier->crosswire_size == 1) {
- if (magnifier->crosswire_clip) {
- gdk_draw_line (gtk_widget_get_window (GTK_WIDGET (zoom_region)),
- zoom_region->priv->crosswire_gc,
- rect.x, y_top_clip, rect.x,
- y_bottom_clip);
- gdk_draw_line (gtk_widget_get_window (GTK_WIDGET (zoom_region)),
- zoom_region->priv->crosswire_gc,
- x_left_clip, rect.y, x_right_clip,
- rect.y);
- }
- gdk_draw_line (gtk_widget_get_window (GTK_WIDGET (zoom_region)),
- zoom_region->priv->crosswire_gc,
- rect.x, y_start, rect.x, y_end);
- gdk_draw_line (gtk_widget_get_window (GTK_WIDGET (zoom_region)),
- zoom_region->priv->crosswire_gc,
- x_start, rect.y, x_end, rect.y);
- }
- else {
- if (magnifier->crosswire_clip ) {
- gdk_draw_rectangle (
- gtk_widget_get_window (GTK_WIDGET (zoom_region)),
- zoom_region->priv->crosswire_gc, TRUE,
- rect.x - magnifier->crosswire_size / 2,
- y_top_clip, magnifier->crosswire_size,
- y_bottom_clip - y_top_clip);
- gdk_draw_rectangle (
- gtk_widget_get_window (GTK_WIDGET (zoom_region)),
- zoom_region->priv->crosswire_gc, TRUE,
- x_left_clip,
- rect.y - magnifier->crosswire_size / 2,
- x_right_clip - x_left_clip,
- magnifier->crosswire_size);
- }
- gdk_draw_rectangle (
- gtk_widget_get_window (GTK_WIDGET (zoom_region)),
- zoom_region->priv->crosswire_gc, TRUE,
- rect.x - magnifier->crosswire_size / 2, y_start,
- magnifier->crosswire_size, y_end - y_start);
- gdk_draw_rectangle (
- gtk_widget_get_window (GTK_WIDGET (zoom_region)),
- zoom_region->priv->crosswire_gc, TRUE,
- x_start, rect.y - magnifier->crosswire_size / 2,
- x_end - x_start, magnifier->crosswire_size);
- }
+
+ if (magnifier->crosswire_clip ) {
+ cairo_rectangle (cr,
+ rect.x - magnifier->crosswire_size / 2,
+ y_bottom_clip,
+ magnifier->crosswire_size,
+ y_top_clip - y_bottom_clip);
+ cairo_rectangle (cr,
+ x_right_clip,
+ rect.y - magnifier->crosswire_size / 2,
+ x_left_clip - x_right_clip,
+ magnifier->crosswire_size);
+ }
+ cairo_rectangle (cr,
+ rect.x - magnifier->crosswire_size / 2, y_start,
+ magnifier->crosswire_size, y_end - y_start);
+ cairo_rectangle (cr,
+ x_start, rect.y - magnifier->crosswire_size / 2,
+ x_end - x_start, magnifier->crosswire_size);
+
+ cairo_fill (cr);
+
+ cairo_destroy (cr);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]