[glade3/offscreen-gtk3] gladeui: First try to fix offscreen drawing



commit 47b610f3345f9643ed25ef4795aa5f78a2660b3e
Author: Johannes Schmid <jhs gnome org>
Date:   Mon Nov 15 16:48:48 2010 +0100

    gladeui: First try to fix offscreen drawing

 gladeui/glade-design-layout.c |   31 +++++++++++++++----------------
 gladeui/glade-placeholder.c   |    3 ++-
 2 files changed, 17 insertions(+), 17 deletions(-)
---
diff --git a/gladeui/glade-design-layout.c b/gladeui/glade-design-layout.c
index e2bf57a..c59e361 100644
--- a/gladeui/glade-design-layout.c
+++ b/gladeui/glade-design-layout.c
@@ -170,7 +170,6 @@ glade_design_layout_update_child (GladeDesignLayout *layout,
 
 	gtk_widget_size_allocate (child, allocation);
 	gtk_widget_queue_resize (GTK_WIDGET (layout));
-//	gtk_window_resize (GTK_WINDOW (child), allocation->width, allocation->height);
 }
 
 
@@ -452,7 +451,7 @@ glade_design_layout_get_preferred_height (GtkWidget *widget,
 	priv = GLADE_DESIGN_LAYOUT_GET_PRIVATE (widget);
 
 	*minimum = 0;
-	*natural = 0;
+	*natural = 0;	
 
 	child = GLADE_DESIGN_LAYOUT (widget)->child;
 
@@ -476,8 +475,8 @@ glade_design_layout_get_preferred_height (GtkWidget *widget,
 		
 	}
 
-	minimum += border_width * 2;
-	natural += border_width * 2;
+	*minimum += border_width * 2;
+	*natural += border_width * 2;
 }
                                           
 
@@ -519,8 +518,8 @@ glade_design_layout_get_preferred_width (GtkWidget *widget,
 	}
 
 	border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
-	minimum += border_width * 2;
-	natural += border_width * 2;
+	*minimum += border_width * 2;
+	*natural += border_width * 2;
 }
 
 static void
@@ -567,6 +566,7 @@ glade_design_layout_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
 		gdk_window_resize (gtk_widget_get_window (child), child_allocation.width, child_allocation.height);
 		
 		gtk_widget_size_allocate (child, &child_allocation);
+		g_message ("size: %d %d", child_allocation.width, child_allocation.height);
 	}
 }
 
@@ -752,7 +752,7 @@ glade_design_layout_draw (GtkWidget *widget, cairo_t *cr)
 		window = gtk_widget_get_window (widget);
 		style = gtk_widget_get_style (widget);
 		gtk_widget_get_allocation (widget, &allocation);
-
+		
 		child = layout->child;
 
 		/* draw a white widget background */
@@ -766,28 +766,27 @@ glade_design_layout_draw (GtkWidget *widget, cairo_t *cr)
 
 		if (child && gtk_widget_get_visible (child))
 		{
-			GdkWindow* child_window = gtk_widget_get_window (child);
-
-			w = gdk_window_get_width (child_window);
-			h = gdk_window_get_height (child_window);
+			cairo_surface_t *surface = 
+				gdk_offscreen_window_get_surface (gtk_widget_get_window (child));
+			
+			w = gdk_window_get_width (gtk_widget_get_window (child));
+			h = gdk_window_get_height (gtk_widget_get_window (child));
 
 			x = allocation.x + border_width;
 			y = allocation.y + border_width;
 
 			g_message ("aaaa %d %d %d %d ", x, y, w, h);
 
-			
-			gdk_cairo_set_source_window (cr, child_window, 0, 0);
+			cairo_set_source_surface (cr, surface, 0, 0);
 			cairo_rectangle (cr, x + OUTLINE_WIDTH/2, y + OUTLINE_WIDTH/2, w, h);
-			cairo_paint (cr);
+			cairo_fill (cr);
 
 			w += border_width + OUTLINE_WIDTH;
 			h += border_width + OUTLINE_WIDTH;
-
+			
 			/* draw frame */
 			draw_frame (widget, cr, x, y, w, h);
 		}
-
 		return TRUE;
 	}
 
diff --git a/gladeui/glade-placeholder.c b/gladeui/glade-placeholder.c
index ac821f7..f9dc0ee 100644
--- a/gladeui/glade-placeholder.c
+++ b/gladeui/glade-placeholder.c
@@ -248,7 +248,7 @@ glade_placeholder_draw_background (GtkWidget* widget, cairo_t *cr)
 	cairo_t *cr2;
 	const gint width = 10;
 	const gint height = 10;
-
+	
 	surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
 	cr2 = cairo_create (surface);
 	cairo_surface_destroy (surface);
@@ -270,6 +270,7 @@ glade_placeholder_draw_background (GtkWidget* widget, cairo_t *cr)
 	cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
 	cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT);
 	cairo_paint (cr);
+	cairo_restore (cr);
 }
 
 static gboolean



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