Fix #219: Ability to set solid colour for transparency layer
authorColin Clark <cclark@mcb.net>
Tue, 21 Mar 2017 17:28:55 +0000 (17:28 +0000)
committerColin Clark <cclark@mcb.net>
Tue, 21 Mar 2017 17:28:55 +0000 (17:28 +0000)
https://github.com/BestImageViewer/geeqie/issues/219

The checkerboard colours can be set on the Preferences/Image tab

doc/docbook/GuideOptionsImage.xml
src/options.c
src/options.h
src/preferences.c
src/rcfile.c
src/renderer-tiles.c

index 076b8f2..9f58360 100644 (file)
         </listitem>\r
       </varlistentry>\r
     </variablelist>\r
+    <variablelist>\r
+      <varlistentry>\r
+        <term>\r
+          <guilabel>Alpha channel color 1/2</guilabel>\r
+        </term>\r
+        <listitem>\r
+          <para>These two colors define the checkerboard background used when images with an alpha channel are displayed.</para>\r
+        </listitem>\r
+      </varlistentry>\r
+    </variablelist>\r
   </section>\r
   <section id="Convenience">\r
     <title>Convenience</title>\r
index 0cdb936..e60d692 100644 (file)
@@ -77,6 +77,15 @@ ConfOptions *init_options(ConfOptions *options)
        options->fullscreen.screen = -1;
 
        memset(&options->image.border_color, 0, sizeof(options->image.border_color));
+       memset(&options->image.alpha_color_1, 0, sizeof(options->image.alpha_color_1));
+       memset(&options->image.alpha_color_2, 0, sizeof(options->image.alpha_color_2));
+/* alpha channel checkerboard background (same as gimp) */
+       options->image.alpha_color_1.red = 0x009999;
+       options->image.alpha_color_1.green = 0x009999;
+       options->image.alpha_color_1.blue = 0x009999;
+       options->image.alpha_color_2.red = 0x006666;
+       options->image.alpha_color_2.green = 0x006666;
+       options->image.alpha_color_2.blue = 0x006666;
        options->image.enable_read_ahead = TRUE;
        options->image.exif_rotate_enable = TRUE;
        options->image.exif_proof_rotate_enable = TRUE;
index 43a41d4..15ac65b 100644 (file)
@@ -89,6 +89,8 @@ struct _ConfOptions
                gboolean use_custom_border_color_in_fullscreen;
                gboolean use_custom_border_color;
                GdkColor border_color;
+               GdkColor alpha_color_1;
+               GdkColor alpha_color_2;
        } image;
 
        /* thumbnails */
index fce03ad..046ed43 100644 (file)
@@ -297,6 +297,9 @@ static void config_window_apply(void)
                view_window_colors_update();
                }
 
+       options->image.alpha_color_1 = c_options->image.alpha_color_1;
+       options->image.alpha_color_2 = c_options->image.alpha_color_2;
+
        options->fullscreen.screen = c_options->fullscreen.screen;
        options->fullscreen.clean_flip = c_options->fullscreen.clean_flip;
        options->fullscreen.disable_saver = c_options->fullscreen.disable_saver;
@@ -1548,6 +1551,17 @@ static void config_tab_image(GtkWidget *notebook)
        pref_color_button_new(group, _("Border color"), &options->image.border_color,
                              G_CALLBACK(pref_color_button_set_cb), &c_options->image.border_color);
 
+       c_options->image.border_color = options->image.border_color;
+
+       pref_color_button_new(group, _("Alpha channel color 1"), &options->image.alpha_color_1,
+                             G_CALLBACK(pref_color_button_set_cb), &c_options->image.alpha_color_1);
+
+       pref_color_button_new(group, _("Alpha channel color 2"), &options->image.alpha_color_2,
+                             G_CALLBACK(pref_color_button_set_cb), &c_options->image.alpha_color_2);
+
+       c_options->image.alpha_color_1 = options->image.alpha_color_1;
+       c_options->image.alpha_color_2 = options->image.alpha_color_2;
+
        group = pref_group_new(vbox, FALSE, _("Convenience"), GTK_ORIENTATION_VERTICAL);
 
        pref_checkbox_new_int(group, _("Auto rotate proofs using Exif information"),
index 834a9a9..5da858a 100644 (file)
@@ -366,6 +366,8 @@ 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_COLOR(*options, image.alpha_color_1);
+       WRITE_NL(); WRITE_COLOR(*options, image.alpha_color_2);
        WRITE_NL(); WRITE_BOOL(*options, image.use_clutter_renderer);
 
        /* Thumbnails Options */
@@ -640,6 +642,8 @@ 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_COLOR(*options, image.alpha_color_1)) continue;
+               if (READ_COLOR(*options, image.alpha_color_2)) continue;
                if (READ_BOOL(*options, image.use_clutter_renderer)) continue;
 
                /* Thumbnails options */
index c6d87cb..6a034e1 100644 (file)
@@ -1272,7 +1272,13 @@ static void rt_tile_get_region(gboolean has_alpha,
                                         scale_x, scale_y,
                                         interp_type,
                                         255, check_x, check_y,
-                                        PR_ALPHA_CHECK_SIZE, PR_ALPHA_CHECK1, PR_ALPHA_CHECK2);
+                                        PR_ALPHA_CHECK_SIZE,
+                                        ((options->image.alpha_color_1.red << 8 & 0x00FF0000) +
+                                        (options->image.alpha_color_1.green & 0x00FF00) +
+                                        (options->image.alpha_color_1.blue >> 8 & 0x00FF)),
+                                        ((options->image.alpha_color_2.red << 8 & 0x00FF0000) +
+                                        (options->image.alpha_color_2.green & 0x00FF00) +
+                                        (options->image.alpha_color_2.blue >> 8 & 0x00FF)));
                }
 }