image-surface/software rendering as preference
authorRobin Gareus <robin@gareus.org>
Mon, 7 Sep 2015 11:35:11 +0000 (13:35 +0200)
committerRobin Gareus <robin@gareus.org>
Mon, 7 Sep 2015 11:35:11 +0000 (13:35 +0200)
gtk2_ardour/rc_option_editor.cc
gtk2_ardour/ui_config.cc
gtk2_ardour/ui_config_vars.h

index 1543dfae0e01ba2ba03bcbf7495f1311f1837a7c..fce5a4a780fb015665e818ea365f3948e8c4b9b1 100644 (file)
 #include "gtk2ardour-config.h"
 #endif
 
+#if !defined USE_CAIRO_IMAGE_SURFACE && !defined NDEBUG
+#define OPTIONAL_CAIRO_IMAGE_SURFACE
+#endif
+
 #include <cairo/cairo.h>
 
 #include <boost/algorithm/string.hpp>    
@@ -2776,18 +2780,31 @@ RCOptionEditor::RCOptionEditor ()
 
        /* INTERFACE */
 
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+       BoolOption* bgo = new BoolOption (
+               "cairo-image-surface",
+               _("Disable Graphics Hardware Acceleration (requires restart)"),
+               sigc::mem_fun (*_ui_config, &UIConfiguration::get_cairo_image_surface),
+               sigc::mem_fun (*_ui_config, &UIConfiguration::set_cairo_image_surface)
+               );
+
+       Gtkmm2ext::UI::instance()->set_tip (bgo->tip_widget(), string_compose (
+                               _("Render large parts of the application user-interface in software, instead of using 2D-graphics acceleration.\nThis requires restarting %1 before having an effect"), PROGRAM_NAME));
+       add_option (S_("Preferences|GUI"), bgo);
+#endif
+
 #ifdef CAIRO_SUPPORTS_FORCE_BUGGY_GRADIENTS_ENVIRONMENT_VARIABLE
        BoolOption* bgo = new BoolOption (
                "buggy-gradients",
-               _("Possibly improve slow graphical performance"),
+               _("Possibly improve slow graphical performance (requires restart)"),
                sigc::mem_fun (*_ui_config, &UIConfiguration::get_buggy_gradients),
                sigc::mem_fun (*_ui_config, &UIConfiguration::set_buggy_gradients)
                );
 
-       Gtkmm2ext::UI::instance()->set_tip (bgo->tip_widget(), string_compose (_("This requires restarting %1 before having an effect"), PROGRAM_NAME));
+       Gtkmm2ext::UI::instance()->set_tip (bgo->tip_widget(), string_compose (_("Disables hardware gradient rendering on buggy video drivers (\"buggy gradients patch\").\nThis requires restarting %1 before having an effect"), PROGRAM_NAME));
        add_option (S_("Preferences|GUI"), bgo);
 #endif
-       
+
        add_option (S_("Preferences|GUI"),
             new BoolOption (
                     "widget-prelight",
index 1fe2d4135f74fcf8f91f3b0cee1e515841aad755..e20eb6fc7268ff433afde4ece6b53ad87314d8bb 100644 (file)
 
 */
 
+#if !defined USE_CAIRO_IMAGE_SURFACE && !defined NDEBUG
+#define OPTIONAL_CAIRO_IMAGE_SURFACE
+#endif
+
 #include <iostream>
 #include <sstream>
 #include <unistd.h>
@@ -156,6 +160,11 @@ UIConfiguration::pre_gui_init ()
        if (get_buggy_gradients()) {
                g_setenv ("FORCE_BUGGY_GRADIENTS", "1", 1);
        }
+#endif
+#ifdef OPTIONAL_CAIRO_IMAGE_SURFACE
+       if (get_cairo_image_surface()) {
+               g_setenv ("ARDOUR_IMAGE_SURFACE", "1", 1);
+       }
 #endif
        return 0;
 }
index ae6648ab96b5a1fedcd41b9e18027c79fa6e5497..04865674e746aa1f61a4d4c769f9dc24f97f2b4f 100644 (file)
@@ -72,4 +72,5 @@ UI_CONFIG_VARIABLE (double, waveform_clip_level, "waveform-clip-level", -0.09339
 UI_CONFIG_VARIABLE (bool, hiding_groups_deactivates_groups, "hiding-groups-deactivates-groups", true)
 UI_CONFIG_VARIABLE (bool, no_new_session_dialog, "no-new-session-dialog", false)
 UI_CONFIG_VARIABLE (bool, buggy_gradients, "buggy-gradients", false)
+UI_CONFIG_VARIABLE (bool, cairo_image_surface, "cairo-image-surface", false)
 UI_CONFIG_VARIABLE (uint64_t, waveform_cache_size, "waveform-cache-size", 100) /* units of megagbytes */