[gtk-vnc] Mandate the use of Cairo for all drawing



commit 01461f75f2ec1f8019af163146470ebf5739345e
Author: Daniel P. Berrange <berrange redhat com>
Date:   Fri Aug 20 12:08:02 2010 +0100

    Mandate the use of Cairo for all drawing
    
    Cairo has been used for GTK drawing for a long time and is now
    mandatory in GTK3. Drop support for non-Cairo drawing ops since
    they're obsolete.
    
    * configure.ac: Check for Cairo
    * src/vncdisplay.c: Drop non-cairo drawing

 configure.ac     |   20 ++++----------------
 src/vncdisplay.c |   52 ----------------------------------------------------
 2 files changed, 4 insertions(+), 68 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 864b431..1254196 100644
--- a/configure.ac
+++ b/configure.ac
@@ -39,6 +39,7 @@ PYGTK_REQUIRED=2.0.0
 VIEW_REQUIRED=0.6.0
 GTHREAD_REQUIRED=2.0.0
 PYTHON_REQUIRED=2.4
+CAIRO_REQUIRED=1.2.0
 
 FIREFOX_PLUGIN_REQUIRED=2.0.0
 MOZILLA_PLUGIN_REQUIRED=1.8
@@ -169,15 +170,9 @@ PKG_CHECK_MODULES(X11, x11,,AC_MSG_NOTICE([Not building against X11]))
 AC_SUBST(X11_CFLAGS)
 AC_SUBST(X11_LIBS)
 
-save_CFLAGS="$CFLAGS"
-save_LIBS="$LIBS"
-CFLAGS="$CFLAGS $GTK_CFLAGS"
-LIBS="$LIBS $GTK_LIBS"
-AC_CHECK_FUNC([gdk_cairo_create], [WITH_GTK_CAIRO=1], [WITH_GTK_CAIRO=0])
-CFLAGS="$save_CFLAGS"
-LIBS="$save_LIBS"
-
-AC_DEFINE_UNQUOTED(WITH_GTK_CAIRO, [$WITH_GTK_CAIRO], [Whether to use cairo for GTK rendering])
+PKG_CHECK_MODULES(CAIRO, cairo >= $CAIRO_REQUIRED)
+AC_SUBST(CAIRO_CFLAGS)
+AC_SUBST(CAIRO_LIBS)
 
 
 AC_ARG_WITH(libview,
@@ -396,12 +391,6 @@ AC_CONFIG_FILES(
 
 AC_OUTPUT
 
-if [ test "$WITH_GTK_CAIRO" = 1 ]; then
-  with_scaling=yes
-else
-  with_scaling=no
-fi
-
 echo "
 Configure summary:
 
@@ -413,7 +402,6 @@ Configure summary:
 	Python binding .............:  ${WITH_PYTHON}
 	Install example programs ...:  ${WITH_EXAMPLES}
 	Browser plugin .............:  ${enable_plugin}
-	Scaling support.............:  ${with_scaling}
 	SASL support................:  ${enable_sasl}
 	GTK+ version................:  ${GTK_API_VERSION}
 "
diff --git a/src/vncdisplay.c b/src/vncdisplay.c
index 3c522cc..60a25fd 100644
--- a/src/vncdisplay.c
+++ b/src/vncdisplay.c
@@ -279,13 +279,7 @@ static gboolean expose_event(GtkWidget *widget, GdkEventExpose *expose)
 	VncDisplayPrivate *priv = obj->priv;
 	int ww, wh;
 	int mx = 0, my = 0;
-#if WITH_GTK_CAIRO
 	cairo_t *cr;
-#else
-	int x, y, w, h;
-	GdkRectangle drawn;
-	GdkRegion *clear, *copy;
-#endif
 	int fbw = 0, fbh = 0;
 
 	if (priv->fb) {
@@ -306,7 +300,6 @@ static gboolean expose_event(GtkWidget *widget, GdkEventExpose *expose)
 	if (wh > fbh)
 		my = (wh - fbh) / 2;
 
-#if WITH_GTK_CAIRO
 	cr = gdk_cairo_create(gtk_widget_get_window(GTK_WIDGET(obj)));
 	cairo_rectangle(cr,
 			expose->area.x,
@@ -351,43 +344,6 @@ static gboolean expose_event(GtkWidget *widget, GdkEventExpose *expose)
 	}
 
 	cairo_destroy(cr);
-#else
-	x = MIN(expose->area.x - mx, fbw);
-	y = MIN(expose->area.y - my, fbh);
-	w = MIN(expose->area.x + expose->area.width - mx, fbw);
-	h = MIN(expose->area.y + expose->area.height - my, fbh);
-	x = MAX(0, x);
-	y = MAX(0, y);
-	w = MAX(0, w);
-	h = MAX(0, h);
-
-	w -= x;
-	h -= y;
-
-	drawn.x = x + mx;
-	drawn.y = y + my;
-	drawn.width = w;
-	drawn.height = h;
-
-	clear = gdk_region_rectangle(&expose->area);
-	copy = gdk_region_rectangle(&drawn);
-	gdk_region_subtract(clear, copy);
-
-	if (priv->pixmap != NULL) {
-		gdk_gc_set_clip_region(priv->gc, copy);
-		gdk_draw_drawable(widget->window, priv->gc, priv->pixmap,
-				  x, y, x + mx, y + my, w, h);
-	}
-
-	gdk_gc_set_clip_region(priv->gc, clear);
-	gdk_draw_rectangle(widget->window, priv->gc, TRUE,
-			   expose->area.x, expose->area.y,
-			   expose->area.width, expose->area.height);
-
-	gdk_region_destroy(clear);
-	gdk_region_destroy(copy);
-#endif
-
 
 	return TRUE;
 }
@@ -2084,7 +2040,6 @@ void vnc_display_set_shared_flag(VncDisplay *obj, gboolean shared)
 	obj->priv->shared_flag = shared;
 }
 
-#if WITH_GTK_CAIRO
 gboolean vnc_display_set_scaling(VncDisplay *obj,
 				 gboolean enable)
 {
@@ -2099,13 +2054,6 @@ gboolean vnc_display_set_scaling(VncDisplay *obj,
 
 	return TRUE;
 }
-#else
-gboolean vnc_display_set_scaling(VncDisplay *obj G_GNUC_UNUSED,
-				 gboolean enable G_GNUC_UNUSED)
-{
-	return FALSE;
-}
-#endif
 
 
 void vnc_display_set_force_size(VncDisplay *obj, gboolean enabled)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]