gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog backend/render_handler_cairo.cp...


From: Bastiaan Jacques
Subject: [Gnash-commit] gnash ChangeLog backend/render_handler_cairo.cp...
Date: Thu, 13 Mar 2008 06:43:55 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Bastiaan Jacques <bjacques>     08/03/13 06:43:55

Modified files:
        .              : ChangeLog 
        backend        : render_handler_cairo.cpp 
        gui            : gtk_glue_cairo.cpp gtk_glue_cairo.h 

Log message:
                * backend/render_handler_cairo.cpp: Store some ints as ints.
                * gui/gtk_glue_cairo.{cpp,h}: Make the GTK window 
single-buffered,
                because we provide our own double-buffering mechanism. 
configure():
                Try to create a buffer that's similar to the GDK buffer. This
                significantly improves performance. render(): Implement 
invalidated
                bounds.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5892&r2=1.5893
http://cvs.savannah.gnu.org/viewcvs/gnash/backend/render_handler_cairo.cpp?cvsroot=gnash&r1=1.38&r2=1.39
http://cvs.savannah.gnu.org/viewcvs/gnash/gui/gtk_glue_cairo.cpp?cvsroot=gnash&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/gnash/gui/gtk_glue_cairo.h?cvsroot=gnash&r1=1.14&r2=1.15

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5892
retrieving revision 1.5893
diff -u -b -r1.5892 -r1.5893
--- ChangeLog   12 Mar 2008 23:19:02 -0000      1.5892
+++ ChangeLog   13 Mar 2008 06:43:54 -0000      1.5893
@@ -1,5 +1,14 @@
 2008-03-12 Bastiaan Jacques <address@hidden>
 
+       * backend/render_handler_cairo.cpp: Store some ints as ints.
+       * gui/gtk_glue_cairo.{cpp,h}: Make the GTK window single-buffered,
+       because we provide our own double-buffering mechanism. configure():
+       Try to create a buffer that's similar to the GDK buffer. This
+       significantly improves performance. render(): Implement invalidated
+       bounds.
+
+2008-03-12 Bastiaan Jacques <address@hidden>
+
        * backend/render_handler_ogl.cpp: Compliation fix.
 
 2008-03-12 Sandro Santilli <address@hidden>

Index: backend/render_handler_cairo.cpp
===================================================================
RCS file: /sources/gnash/gnash/backend/render_handler_cairo.cpp,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -b -r1.38 -r1.39
--- backend/render_handler_cairo.cpp    21 Jan 2008 20:56:05 -0000      1.38
+++ backend/render_handler_cairo.cpp    13 Mar 2008 06:43:55 -0000      1.39
@@ -436,7 +436,7 @@
   {  
     cairo_move_to(cr, cur_path.ap.x, cur_path.ap.y);
     
-    float prev_x = cur_path.ap.x,
+    int prev_x = cur_path.ap.x,
           prev_y = cur_path.ap.y;
     
     for (std::vector<edge>::const_iterator it = cur_path.m_edges.begin(),
@@ -459,8 +459,8 @@
         float x2 = cur_edge.cp.x + one_third * (cur_edge.ap.x - cur_edge.cp.x);
         float y2 = cur_edge.cp.y + one_third * (cur_edge.ap.y - cur_edge.cp.y);
         
-        const float& x3 = cur_edge.ap.x;
-        const float& y3 = cur_edge.ap.y;
+        const int& x3 = cur_edge.ap.x;
+        const int& y3 = cur_edge.ap.y;
     
     
         cairo_curve_to(cr, x1, y1, x2, y2, x3, y3);

Index: gui/gtk_glue_cairo.cpp
===================================================================
RCS file: /sources/gnash/gnash/gui/gtk_glue_cairo.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- gui/gtk_glue_cairo.cpp      21 Jan 2008 20:55:40 -0000      1.15
+++ gui/gtk_glue_cairo.cpp      13 Mar 2008 06:43:55 -0000      1.16
@@ -51,6 +51,7 @@
     _drawing_area = drawing_area;
     assert(_drawing_area);
     assert(_drawing_area->window);
+    gtk_widget_set_double_buffered(_drawing_area, FALSE);
 }
 
 render_handler*
@@ -62,6 +63,23 @@
 }
 
 void
+GtkCairoGlue::render(int minx, int miny, int maxx, int maxy)
+{
+    if (!_cairo_offscreen) {
+      return;
+    }
+
+    cairo_save(_cairo_offscreen);
+
+    cairo_rectangle(_cairo_offscreen, minx, miny, maxx - minx, maxy - miny);
+    cairo_clip(_cairo_offscreen);
+
+    render();
+
+    cairo_restore(_cairo_offscreen);
+}
+
+void
 GtkCairoGlue::render()
 {
     if (!_cairo_offscreen)  return;
@@ -81,9 +99,17 @@
     // Create cairo handle for output window
     _cairo_handle = gdk_cairo_create(_drawing_area->window);
 
-    // Create offscreen image for rendering
-    cairo_surface_t* surface = cairo_image_surface_create(
+    cairo_surface_t* target = cairo_get_target(_cairo_handle);
+
+    cairo_surface_t* surface = cairo_surface_create_similar(target,
+      cairo_surface_get_content(target), event->width, event->height);
+
+    if (cairo_surface_status(surface) != CAIRO_STATUS_SUCCESS) {
+      // fallback image surface
+      surface = cairo_image_surface_create(
       CAIRO_FORMAT_ARGB32, event->width, event->height);
+    }
+
     _cairo_offscreen = cairo_create(surface);
     cairo_surface_destroy(surface);
 

Index: gui/gtk_glue_cairo.h
===================================================================
RCS file: /sources/gnash/gnash/gui/gtk_glue_cairo.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- gui/gtk_glue_cairo.h        21 Jan 2008 20:55:42 -0000      1.14
+++ gui/gtk_glue_cairo.h        13 Mar 2008 06:43:55 -0000      1.15
@@ -35,9 +35,7 @@
     void prepDrawingArea(GtkWidget *drawing_area);
     render_handler* createRenderHandler();
     void render();
-    void render(int /*minx*/, int /*miny*/, int /*maxx*/, int /*maxy*/) {
-       render();
-    };
+    void render(int minx, int miny, int maxx, int maxy);
     void configure(GtkWidget *const widget, GdkEventConfigure *const event);
   private:
     cairo_t     *_cairo_handle;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]