From 5124a23c3eff171e45e8473b66e24c816bbc6550 Mon Sep 17 00:00:00 2001 From: Vladimir Nadvornik Date: Fri, 17 Aug 2012 23:08:34 +0200 Subject: [PATCH] added option for clutter renderer --- src/options.h | 1 + src/pixbuf-renderer.c | 29 ++++++++++++++++++----------- src/preferences.c | 6 ++++++ src/rcfile.c | 2 ++ 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/options.h b/src/options.h index cb789068..f6e66b4e 100644 --- a/src/options.h +++ b/src/options.h @@ -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; diff --git a/src/pixbuf-renderer.c b/src/pixbuf-renderer.c index 41e9c44e..420b38ee 100644 --- a/src/pixbuf-renderer.c +++ b/src/pixbuf-renderer.c @@ -25,13 +25,6 @@ #include -#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; diff --git a/src/preferences.c b/src/preferences.c index cf200b58..6cd2165e 100644 --- a/src/preferences.c +++ b/src/preferences.c @@ -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); diff --git a/src/rcfile.c b/src/rcfile.c index df6ef651..4928106b 100644 --- a/src/rcfile.c +++ b/src/rcfile.c @@ -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; -- 2.20.1