added option for clutter renderer
authorVladimir Nadvornik <nadvornik@suse.cz>
Fri, 17 Aug 2012 21:08:34 +0000 (23:08 +0200)
committerVladimir Nadvornik <nadvornik@suse.cz>
Sat, 18 Aug 2012 17:20:07 +0000 (19:20 +0200)
src/options.h
src/pixbuf-renderer.c
src/preferences.c
src/rcfile.c

index cb78906..f6e66b4 100644 (file)
@@ -67,6 +67,7 @@ struct _ConfOptions
                gboolean zoom_to_fit_allow_expand;
                guint zoom_quality;
                gint zoom_increment;    /* 10 is 1.0, 5 is 0.05, 20 is 2.0, etc. */
+               gboolean use_clutter_renderer;
 
                gboolean use_custom_border_color_in_fullscreen;
                gboolean use_custom_border_color;
index 41e9c44..420b38e 100644 (file)
 
 #include <gtk/gtk.h>
 
-#ifdef HAVE_CLUTTER
-/* FIXME: make this configurable */
-#define RENDERER_NEW(pr) renderer_clutter_new(pr)
-#else
-#define RENDERER_NEW(pr) renderer_tiles_new(pr)
-#endif
-
 /* comment this out if not using this from within Geeqie
  * defining GQ_BUILD does these things:
  *   - Sets the shift-click scroller pixbuf to a nice icon instead of a black box
@@ -386,6 +379,20 @@ static void pixbuf_renderer_class_init(PixbufRendererClass *class)
                             G_TYPE_NONE, 0);
 }
 
+static RendererFuncs *pr_backend_renderer_new(PixbufRenderer *pr)
+{
+       if (options->image.use_clutter_renderer)
+               {
+#ifdef HAVE_CLUTTER
+               return renderer_clutter_new(pr);
+#else
+               DEBUG_0("Geeqie is built without clutter renderer support");
+#endif
+               }
+       return renderer_tiles_new(pr);
+}      
+
+
 static void pixbuf_renderer_init(PixbufRenderer *pr)
 {
        GtkWidget *box;
@@ -419,7 +426,7 @@ static void pixbuf_renderer_init(PixbufRenderer *pr)
        
        pr->stereo_mode = PR_STEREO_NONE;
        
-       pr->renderer = RENDERER_NEW(pr);
+       pr->renderer = pr_backend_renderer_new(pr);
        
        pr->renderer2 = NULL;
 
@@ -2605,13 +2612,13 @@ void pixbuf_renderer_zoom_set_limits(PixbufRenderer *pr, gdouble min, gdouble ma
 
 static void pr_stereo_set(PixbufRenderer *pr)
 {
-       if (!pr->renderer) pr->renderer = RENDERER_NEW(pr);
+       if (!pr->renderer) pr->renderer = pr_backend_renderer_new(pr);
        
        pr->renderer->stereo_set(pr->renderer, pr->stereo_mode & ~PR_STEREO_MIRROR_RIGHT & ~PR_STEREO_FLIP_RIGHT);
        
        if (pr->stereo_mode & (PR_STEREO_HORIZ | PR_STEREO_VERT | PR_STEREO_FIXED))
                {
-               if (!pr->renderer2) pr->renderer2 = RENDERER_NEW(pr);
+               if (!pr->renderer2) pr->renderer2 = pr_backend_renderer_new(pr);
                pr->renderer2->stereo_set(pr->renderer2, (pr->stereo_mode & ~PR_STEREO_MIRROR_LEFT & ~PR_STEREO_FLIP_LEFT) | PR_STEREO_RIGHT);
                }
        else
@@ -2669,7 +2676,7 @@ static void pr_stereo_temp_disable(PixbufRenderer *pr, gboolean disable)
        pr->stereo_temp_disable = disable;
        if (disable)
                {
-               if (!pr->renderer) pr->renderer = RENDERER_NEW(pr);
+               if (!pr->renderer) pr->renderer = pr_backend_renderer_new(pr);
                pr->renderer->stereo_set(pr->renderer, PR_STEREO_NONE);
                if (pr->renderer2) pr->renderer2->free(pr->renderer2);
                pr->renderer2 = NULL;
index cf200b5..6cd2165 100644 (file)
@@ -216,6 +216,7 @@ static void config_window_apply(void)
        options->image.max_window_size = c_options->image.max_window_size;
        options->image.limit_autofit_size = c_options->image.limit_autofit_size;
        options->image.max_autofit_size = c_options->image.max_autofit_size;
+       options->image.use_clutter_renderer = c_options->image.use_clutter_renderer;
        options->progressive_key_scrolling = c_options->progressive_key_scrolling;
        if (options->thumbnails.max_width != c_options->thumbnails.max_width
            || options->thumbnails.max_height != c_options->thumbnails.max_height
@@ -1405,6 +1406,11 @@ static void config_tab_image(GtkWidget *notebook)
        table = pref_table_new(group, 2, 1, FALSE, FALSE);
        add_quality_menu(table, 0, 0, _("Quality:"), options->image.zoom_quality, &c_options->image.zoom_quality);
 
+#ifdef HAVE_CLUTTER
+       pref_checkbox_new_int(group, _("Use GPU acceleration via Clutter library"),
+                             options->image.use_clutter_renderer, &c_options->image.use_clutter_renderer);
+#endif
+
        pref_checkbox_new_int(group, _("Two pass rendering (apply HQ zoom and color correction in second pass)"),
                              options->image.zoom_2pass, &c_options->image.zoom_2pass);
 
index df6ef65..4928106 100644 (file)
@@ -340,6 +340,7 @@ static void write_global_attributes(GString *outstr, gint indent)
        WRITE_NL(); WRITE_BOOL(*options, image.use_custom_border_color);
        WRITE_NL(); WRITE_BOOL(*options, image.use_custom_border_color_in_fullscreen);
        WRITE_NL(); WRITE_COLOR(*options, image.border_color);
+       WRITE_NL(); WRITE_BOOL(*options, image.use_clutter_renderer);
 
 //     WRITE_SUBTITLE("Thumbnails Options");
 
@@ -632,6 +633,7 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
                if (READ_BOOL(*options, image.use_custom_border_color)) continue;
                if (READ_BOOL(*options, image.use_custom_border_color_in_fullscreen)) continue;
                if (READ_COLOR(*options, image.border_color)) continue;
+               if (READ_BOOL(*options, image.use_clutter_renderer)) continue;
 
                /* thumbnails options */
                if (READ_INT_CLAMP(*options, thumbnails.max_width, 16, 512)) continue;