gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] /srv/bzr/gnash/trunk r10830: Add AGG support that works w


From: rob
Subject: [Gnash-commit] /srv/bzr/gnash/trunk r10830: Add AGG support that works with the canvas in addition to the existing cairo support.
Date: Thu, 23 Apr 2009 12:14:24 -0600
User-agent: Bazaar (1.5)

------------------------------------------------------------
revno: 10830
committer: address@hidden
branch nick: trunk
timestamp: Thu 2009-04-23 12:14:24 -0600
message:
  Add AGG support that works with the canvas in addition to the existing cairo 
support.
modified:
  gui/am-frag/gtk.am
  gui/gtk.cpp
  gui/gtk_canvas.cpp
  gui/pythonmod/gnash-view.cpp
=== modified file 'gui/am-frag/gtk.am'
--- a/gui/am-frag/gtk.am        2009-04-22 16:37:31 +0000
+++ b/gui/am-frag/gtk.am        2009-04-23 18:14:24 +0000
@@ -19,12 +19,10 @@
 # Build the GTK gui
 #
 
-# Build the optional GTK Widget, which currently only works with Cairo
+# Build the optional GTK Widget
 if BUILD_GTK_WIDGET
-if BUILD_CAIRO_RENDERER
 GTK_CANVAS = gtk_canvas.cpp gtk_canvas.h
 endif
-endif
 
 if BUILD_GTK_GUI
 bin_PROGRAMS += gtk-gnash
@@ -47,7 +45,7 @@
 if BUILD_AGG_RENDERER
 gtk_gnash_CPPFLAGS += $(AGG_CFLAGS)
 gtk_gnash_SOURCES += gtk_glue_agg.cpp gtk_glue_agg.h \
-               gtk.cpp gtksup.h gtk_glue.h $(GTK_WIDGET)
+               gtk.cpp gtksup.h gtk_glue.h $(GTK_CANVAS)
 gtk_gnash_LDADD = $(top_builddir)/backend/libgnashagg.la \
                $(GNASH_LIBS) $(GTK_LIBS) $(AGG_LIBS) $(CAIRO_LIBS)
 if HAVE_XV

=== modified file 'gui/gtk.cpp'
--- a/gui/gtk.cpp       2009-04-22 16:37:31 +0000
+++ b/gui/gtk.cpp       2009-04-23 18:14:24 +0000
@@ -177,7 +177,6 @@
 #ifdef BUILD_CANVAS
     _canvas = gnash_canvas_new();
     gnash_canvas_setup(GNASH_CANVAS(_canvas), argc, argv);
-    _renderer = gnash_canvas_get_renderer(GNASH_CANVAS(_canvas));
     // Increase reference count to prevent its destruction (which could happen
     // later if we remove it from its container).
     g_object_ref(G_OBJECT(_canvas));
@@ -238,6 +237,14 @@
     }
 #endif
 
+#ifdef BUILD_CANVAS
+    _renderer = gnash_canvas_get_renderer(GNASH_CANVAS(_canvas));
+#else
+    _renderer = _glue->createRenderHandler();
+    if ( ! _renderer ) return false;
+    set_render_handler(_renderer);
+#endif
+
     // The first time stop() was called, stopHook() might not have had a chance
     // to do anything, because GTK+ wasn't garanteed to be initialised.
     //if (isStopped()) stopHook();

=== modified file 'gui/gtk_canvas.cpp'
--- a/gui/gtk_canvas.cpp        2009-04-22 16:37:31 +0000
+++ b/gui/gtk_canvas.cpp        2009-04-23 18:14:24 +0000
@@ -60,6 +60,7 @@
 static void gnash_canvas_size_allocate(GtkWidget *widget, GtkAllocation 
*allocation);
 static gboolean gnash_canvas_expose_event(GtkWidget *widget, GdkEventExpose 
*event);
 static gboolean gnash_canvas_configure_event(GtkWidget *widget, 
GdkEventConfigure *event);
+static void gnash_canvas_realize(GtkWidget *widget);
 
 GtkWidget *
 gnash_canvas_new (void)
@@ -79,12 +80,17 @@
     widget_class->size_allocate = gnash_canvas_size_allocate;
     widget_class->expose_event = gnash_canvas_expose_event;
     widget_class->configure_event = gnash_canvas_configure_event;
+    widget_class->configure_event = gnash_canvas_configure_event;
+    widget_class->realize = gnash_canvas_realize;
 }
 
 static void
 gnash_canvas_init(GnashCanvas *canvas)
 {
     GNASH_REPORT_FUNCTION;
+
+    canvas->renderer = NULL;
+
     gtk_widget_set_double_buffered(GTK_WIDGET(canvas), FALSE);
 
     // If we don't set this flag we won't be able to grab focus
@@ -100,7 +106,9 @@
 
     gnash::log_debug("gnash_canvas_size_allocate %d %d", allocation->width, 
allocation->height);
 
-    canvas->glue->setRenderHandlerSize(allocation->width, allocation->height);
+    if (canvas->renderer != NULL)
+        canvas->glue->setRenderHandlerSize(allocation->width, 
allocation->height);
+    
     GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation);
 }
 
@@ -133,11 +141,51 @@
 {
     GNASH_REPORT_FUNCTION;
     GnashCanvas *canvas = GNASH_CANVAS(widget);
+
     canvas->glue->configure(widget, event);
 
     return FALSE;
 }
 
+static void 
+gnash_canvas_realize(GtkWidget *widget)
+{
+    GNASH_REPORT_FUNCTION;
+    GnashCanvas *canvas = GNASH_CANVAS(widget);
+    GdkWindowAttr attributes;
+    gint attributes_mask;
+
+    GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
+
+    attributes.window_type = GDK_WINDOW_CHILD;
+    attributes.x = widget->allocation.x;
+    attributes.y = widget->allocation.y;
+    attributes.width = widget->allocation.width;
+    attributes.height = widget->allocation.height;
+    attributes.wclass = GDK_INPUT_OUTPUT;
+    attributes.visual = gtk_widget_get_visual (widget);
+    attributes.colormap = gtk_widget_get_colormap (widget);
+    attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK;
+
+    attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+
+    widget->window = gdk_window_new (gtk_widget_get_parent_window (widget),
+                                    &attributes, attributes_mask);
+    gdk_window_set_user_data (widget->window, widget);
+
+#if defined(RENDERER_CAIRO) || defined(RENDERER_AGG)
+    // cairo needs the _drawingArea.window to prepare it ..
+    // TODO: find a way to make 'glue' use independent from actual renderer in 
use
+    canvas->glue->prepDrawingArea(GTK_WIDGET(canvas));
+#endif
+
+    canvas->renderer = canvas->glue->createRenderHandler();
+    set_render_handler(canvas->renderer);
+
+    canvas->glue->setRenderHandlerSize(widget->allocation.width,
+                                       widget->allocation.height);
+}
+
 void
 gnash_canvas_setup(GnashCanvas *canvas, int argc, char **argv[])
 {
@@ -174,15 +222,6 @@
     // TODO: find a way to make '_glue' use independent from actual renderer 
in use
     canvas->glue->prepDrawingArea(canvas);
 #endif
-
-#if defined(RENDERER_CAIRO) || defined(RENDERER_AGG)
-    // cairo needs the _drawingArea.window to prepare it ..
-    // TODO: find a way to make 'glue' use independent from actual renderer in 
use
-    canvas->glue->prepDrawingArea(GTK_WIDGET(canvas));
-#endif
-
-    canvas->renderer = canvas->glue->createRenderHandler();
-    set_render_handler(canvas->renderer);
 }
 
 void

=== modified file 'gui/pythonmod/gnash-view.cpp'
--- a/gui/pythonmod/gnash-view.cpp      2009-04-21 18:40:48 +0000
+++ b/gui/pythonmod/gnash-view.cpp      2009-04-23 18:14:24 +0000
@@ -18,7 +18,7 @@
 //
 
 #include "gnash-view.h"
-#include "gnash-canvas.h"
+#include "gtk_canvas.h"
 
 #include <gdk/gdk.h>
 #include <gdk/gdkkeysyms.h>


reply via email to

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