To work with my system Fiesty libgoffice-0-3 0.3.5-1ubuntu1 I needed to change src/gnome-utils/gnc-html-graph-gog.c to use cairo. Attached is a patch I've wrapped these with HAVE_CAIRO. I've not attepted any automake foo the set HAVE_CAIRO.
Index: src/gnome-utils/gnc-html-graph-gog.c =================================================================== --- src/gnome-utils/gnc-html-graph-gog.c (revision 15675) +++ src/gnome-utils/gnc-html-graph-gog.c (working copy) @@ -35,7 +35,12 @@ #include <goffice/goffice.h> #include <goffice/graph/gog-graph.h> #include <goffice/graph/gog-object.h> +#define WITH_CAIRO +#ifdef WITH_CAIRO +#include <goffice/graph/gog-renderer-cairo.h> +#else #include <goffice/graph/gog-renderer-pixbuf.h> +#endif #include <goffice/graph/gog-renderer-gnome-print.h> #include <goffice/graph/gog-style.h> #include <goffice/graph/gog-styled-object.h> @@ -43,7 +48,9 @@ #include <goffice/graph/gog-series.h> #include <goffice/utils/go-color.h> #include <goffice/graph/gog-data-set.h> +#if 0 #include <goffice/graph/gog-renderer-svg.h> +#endif #include <goffice/data/go-data-simple.h> #include <goffice/app/go-plugin.h> #include <goffice/app/go-plugin-loader-module.h> @@ -159,10 +166,56 @@ return retval; } +#ifdef WITH_CAIRO static void -add_pixbuf_graph_widget( GtkHTMLEmbedded *eb, GogObject *graph ) +add_cairo_graph_widget ( GtkHTMLEmbedded *eb, GogObject *graph ) { GtkWidget *widget; + GogRendererCairo *cairo_renderer; + GdkPixbuf *buf; + gboolean update_status; + + // Note that this shouldn't be necessary as per discussion with Jody... + // ... but it is because we don't embed in a control which passes the + // update requests back to the graph widget, a-la the foo-canvas that + // gnumeric uses. We probably _should_ do something like that, though. + gog_object_update (GOG_OBJECT (graph)); + +#if 0 + // example SVG use. Also, nice for debugging. + { + GsfOutput *mem; + gboolean output; + + mem = gsf_output_memory_new(); + output = gog_graph_export_to_svg( graph, mem, eb->width, eb->height, 1. ); + printf( "svg: [%s]\n", (guchar*)gsf_output_memory_get_bytes( GSF_OUTPUT_MEMORY(mem) ) ); + } +#endif // 0 + + cairo_renderer = GOG_RENDERER_CAIRO (g_object_new (GOG_RENDERER_CAIRO_TYPE, + "model", graph, + NULL)); + update_status = gog_renderer_cairo_update (cairo_renderer, + eb->width, eb->height, 1.0); + buf = gog_renderer_cairo_get_pixbuf (cairo_renderer); + widget = gtk_image_new_from_pixbuf (buf); + gtk_widget_set_size_request (widget, eb->width, eb->height); + gtk_widget_show_all (widget); + gtk_container_add (GTK_CONTAINER (eb), widget); + + // blindly copied from gnc-html-guppi.c.. + gtk_widget_set_size_request (GTK_WIDGET (eb), eb->width, eb->height); + + g_object_set_data_full (G_OBJECT (eb), "graph", graph, g_object_unref); + g_signal_connect (G_OBJECT (eb), "draw_print", + G_CALLBACK (draw_print_cb), NULL); +} +#else +static void +add_pixbuf_graph_widget ( GtkHTMLEmbedded *eb, GogObject *graph ) +{ + GtkWidget *widget; GogRendererPixbuf *pixbuf_renderer; GdkPixbuf *buf; gboolean update_status; @@ -203,6 +256,7 @@ g_signal_connect (G_OBJECT (eb), "draw_print", G_CALLBACK (draw_print_cb), NULL); } +#endif static gboolean create_basic_plot_elements(const char *plot_type_name, @@ -359,7 +413,11 @@ // fixme: colors set_chart_titles_from_hash(chart, eb); +#ifdef WITH_CAIRO + add_cairo_graph_widget (eb, graph); +#else add_pixbuf_graph_widget (eb, graph); +#endif return TRUE; } @@ -494,7 +552,11 @@ // we need to do this twice for the barchart... :p gog_object_update (GOG_OBJECT (graph)); +#ifdef WITH_CAIRO + add_cairo_graph_widget (eb, graph); +#else add_pixbuf_graph_widget (eb, graph); +#endif g_debug("barchart rendered."); return TRUE; @@ -546,7 +608,11 @@ // And twice for the scatter, too... :p gog_object_update(GOG_OBJECT(graph)); +#ifdef WITH_CAIRO + add_cairo_graph_widget (eb, graph); +#else add_pixbuf_graph_widget (eb, graph); +#endif return TRUE; }
_______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel