[gimp] Custom transparency checkerboard colors
- From: Jehan <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Custom transparency checkerboard colors
- Date: Sat, 14 May 2022 14:36:59 +0000 (UTC)
commit d90b84ba9d1fe8f45e0874adbff5ea5c7248f74a
Author: Ben Rogalski <ben benrogalski com>
Date: Sun May 24 16:26:50 2020 -0400
Custom transparency checkerboard colors
Reviewer (Jehan) note: cherry picked from MR !274. Still deciding
whether this will be pushed to gimp-2-10 branch too.
Fixed Conflicts from !274:
app/dialogs/preferences-dialog.c
app/display/gimpdisplayshell-draw.c
app/plug-in/gimppluginmanager-call.c
libgimp/gimp.c
libgimp/gimp.h
libgimpwidgets/gimppreviewarea.c
libgimpwidgets/gimppreviewarea.h
libgimpwidgets/gimpscrolledpreview.c
app/actions/view-actions.c | 10 +-
app/config/gimpdisplayconfig.c | 28 +++
app/config/gimpdisplayconfig.h | 2 +
app/config/gimprc-blurbs.h | 8 +
app/core/gimpimage.c | 6 +
app/dialogs/preferences-dialog.c | 27 ++-
app/display/gimpdisplayshell-appearance.c | 4 +-
app/display/gimpdisplayshell-draw.c | 16 +-
app/display/gimpdisplayshell-handlers.c | 8 +
app/plug-in/gimppluginmanager-call.c | 2 +
app/widgets/gimprender.c | 32 ++-
app/widgets/gimprender.h | 4 +-
app/widgets/gimpviewrenderer.c | 8 +-
libgimp/gimp.c | 36 +++
libgimp/gimp.h | 2 +
libgimp/gimpaspectpreview.c | 2 +
libgimp/gimpdrawablepreview.c | 2 +
libgimp/gimpzoompreview.c | 2 +
libgimpbase/gimpbaseenums.c | 2 +
libgimpbase/gimpbaseenums.h | 4 +-
libgimpbase/gimpchecks.c | 76 ++++++
libgimpbase/gimpchecks.h | 83 +++++++
libgimpbase/gimpprotocol.c | 12 +
libgimpbase/gimpprotocol.h | 2 +
libgimpwidgets/gimppreview.c | 6 +
libgimpwidgets/gimppreviewarea.c | 373 +++++++++++++++++++++---------
libgimpwidgets/gimpscrolledpreview.c | 6 +
27 files changed, 615 insertions(+), 148 deletions(-)
---
diff --git a/app/actions/view-actions.c b/app/actions/view-actions.c
index 363707b4ad..3943eec056 100644
--- a/app/actions/view-actions.c
+++ b/app/actions/view-actions.c
@@ -813,6 +813,12 @@ view_actions_setup (GimpActionGroup *group)
g_signal_connect_object (group->gimp->config, "notify::check-type",
G_CALLBACK (view_actions_check_type_notify),
group, 0);
+ g_signal_connect_object (group->gimp->config, "notify::check-custom-color1",
+ G_CALLBACK (view_actions_check_type_notify),
+ group, 0);
+ g_signal_connect_object (group->gimp->config, "notify::check-custom-color2",
+ G_CALLBACK (view_actions_check_type_notify),
+ group, 0);
view_actions_check_type_notify (GIMP_DISPLAY_CONFIG (group->gimp->config),
NULL, group);
@@ -1207,9 +1213,9 @@ view_actions_check_type_notify (GimpDisplayConfig *config,
GimpActionGroup *group)
{
gimp_action_group_set_action_color (group, "view-padding-color-light-check",
- gimp_render_light_check_color (),
+ gimp_render_check_color1 (),
FALSE);
gimp_action_group_set_action_color (group, "view-padding-color-dark-check",
- gimp_render_dark_check_color (),
+ gimp_render_check_color2 (),
FALSE);
}
diff --git a/app/config/gimpdisplayconfig.c b/app/config/gimpdisplayconfig.c
index d77f021335..89ecaa3a23 100644
--- a/app/config/gimpdisplayconfig.c
+++ b/app/config/gimpdisplayconfig.c
@@ -47,6 +47,8 @@ enum
PROP_0,
PROP_TRANSPARENCY_SIZE,
PROP_TRANSPARENCY_TYPE,
+ PROP_TRANSPARENCY_CUSTOM_COLOR1,
+ PROP_TRANSPARENCY_CUSTOM_COLOR2,
PROP_SNAP_DISTANCE,
PROP_MARCHING_ANTS_SPEED,
PROP_RESIZE_WINDOWS_ON_ZOOM,
@@ -134,6 +136,20 @@ gimp_display_config_class_init (GimpDisplayConfigClass *klass)
GIMP_CHECK_TYPE_GRAY_CHECKS,
GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_PROP_RGB (object_class, PROP_TRANSPARENCY_CUSTOM_COLOR1,
+ "transparency-custom-color1",
+ "Transparency custom color 1",
+ TRANSPARENCY_CUSTOM_COLOR1_BLURB,
+ FALSE, &GIMP_CHECKS_CUSTOM_COLOR1,
+ GIMP_PARAM_STATIC_STRINGS);
+
+ GIMP_CONFIG_PROP_RGB (object_class, PROP_TRANSPARENCY_CUSTOM_COLOR2,
+ "transparency-custom-color2",
+ "Transparency custom color 2",
+ TRANSPARENCY_CUSTOM_COLOR2_BLURB,
+ FALSE, &GIMP_CHECKS_CUSTOM_COLOR2,
+ GIMP_PARAM_STATIC_STRINGS);
+
GIMP_CONFIG_PROP_INT (object_class, PROP_SNAP_DISTANCE,
"snap-distance",
"Snap distance",
@@ -422,6 +438,12 @@ gimp_display_config_set_property (GObject *object,
case PROP_TRANSPARENCY_TYPE:
display_config->transparency_type = g_value_get_enum (value);
break;
+ case PROP_TRANSPARENCY_CUSTOM_COLOR1:
+ display_config->transparency_custom_color1 = *(GimpRGB *) g_value_get_boxed (value);
+ break;
+ case PROP_TRANSPARENCY_CUSTOM_COLOR2:
+ display_config->transparency_custom_color2 = *(GimpRGB *) g_value_get_boxed (value);
+ break;
case PROP_SNAP_DISTANCE:
display_config->snap_distance = g_value_get_int (value);
break;
@@ -540,6 +562,12 @@ gimp_display_config_get_property (GObject *object,
case PROP_TRANSPARENCY_TYPE:
g_value_set_enum (value, display_config->transparency_type);
break;
+ case PROP_TRANSPARENCY_CUSTOM_COLOR1:
+ g_value_set_boxed (value, &display_config->transparency_custom_color1);
+ break;
+ case PROP_TRANSPARENCY_CUSTOM_COLOR2:
+ g_value_set_boxed (value, &display_config->transparency_custom_color2);
+ break;
case PROP_SNAP_DISTANCE:
g_value_set_int (value, display_config->snap_distance);
break;
diff --git a/app/config/gimpdisplayconfig.h b/app/config/gimpdisplayconfig.h
index 0deab5f08b..008b009a1a 100644
--- a/app/config/gimpdisplayconfig.h
+++ b/app/config/gimpdisplayconfig.h
@@ -43,6 +43,8 @@ struct _GimpDisplayConfig
GimpCheckSize transparency_size;
GimpCheckType transparency_type;
+ GimpRGB transparency_custom_color1;
+ GimpRGB transparency_custom_color2;
gint snap_distance;
gint marching_ants_speed;
gboolean resize_windows_on_zoom;
diff --git a/app/config/gimprc-blurbs.h b/app/config/gimprc-blurbs.h
index 73487fa0d7..e522601d82 100644
--- a/app/config/gimprc-blurbs.h
+++ b/app/config/gimprc-blurbs.h
@@ -716,6 +716,14 @@ _("Show the currently active image in the toolbox.")
#define TOOLBOX_WILBER_BLURB \
_("Show the GIMP mascot at the top of the toolbox.")
+#define TRANSPARENCY_CUSTOM_COLOR1_BLURB \
+_("The first color to use in the transparency checkerboard, " \
+ "when Transparency Type is set to Custom colors.")
+
+#define TRANSPARENCY_CUSTOM_COLOR2_BLURB \
+_("The second color to use in the transparency checkerboard, " \
+ "when Transparency Type is set to Custom colors.")
+
#define TRANSPARENCY_TYPE_BLURB \
_("Sets the manner in which transparency is displayed in images.")
diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c
index 22d1dfd04f..a249e3dc4d 100644
--- a/app/core/gimpimage.c
+++ b/app/core/gimpimage.c
@@ -928,6 +928,12 @@ gimp_image_constructed (GObject *object)
g_signal_connect_object (config, "notify::transparency-size",
G_CALLBACK (gimp_item_stack_invalidate_previews),
private->layers->container, G_CONNECT_SWAPPED);
+ g_signal_connect_object (config, "notify::transparency-custom-color1",
+ G_CALLBACK (gimp_item_stack_invalidate_previews),
+ private->layers->container, G_CONNECT_SWAPPED);
+ g_signal_connect_object (config, "notify::transparency-custom-color2",
+ G_CALLBACK (gimp_item_stack_invalidate_previews),
+ private->layers->container, G_CONNECT_SWAPPED);
g_signal_connect_object (config, "notify::layer-previews",
G_CALLBACK (gimp_viewable_size_changed),
image, G_CONNECT_SWAPPED);
diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c
index 67581ffc4e..4965ba4914 100644
--- a/app/dialogs/preferences-dialog.c
+++ b/app/dialogs/preferences-dialog.c
@@ -2726,9 +2726,34 @@ prefs_dialog_new (Gimp *gimp,
prefs_enum_combo_box_add (object, "transparency-type", 0, 0,
_("_Check style:"),
GTK_GRID (grid), 0, size_group);
+
+ button = gimp_prop_color_button_new (object,
+ "transparency-custom-color1",
+ _("Transparency Custom Color 1"),
+ PREFS_COLOR_BUTTON_WIDTH,
+ PREFS_COLOR_BUTTON_HEIGHT,
+ GIMP_COLOR_AREA_FLAT);
+ gimp_grid_attach_aligned (GTK_GRID (grid), 0, 1,
+ _("_Custom color 1:"), 0.0, 0.5,
+ button, 1);
+ gimp_color_panel_set_context (GIMP_COLOR_PANEL (button),
+ gimp_get_user_context (gimp));
+
+ button = gimp_prop_color_button_new (object,
+ "transparency-custom-color2",
+ _("Transparency Custom Color 2"),
+ PREFS_COLOR_BUTTON_WIDTH,
+ PREFS_COLOR_BUTTON_HEIGHT,
+ GIMP_COLOR_AREA_FLAT);
+ gimp_grid_attach_aligned (GTK_GRID (grid), 0, 2,
+ _("_Custom color 2:"), 0.0, 0.5,
+ button, 1);
+ gimp_color_panel_set_context (GIMP_COLOR_PANEL (button),
+ gimp_get_user_context (gimp));
+
prefs_enum_combo_box_add (object, "transparency-size", 0, 0,
_("Check _size:"),
- GTK_GRID (grid), 1, size_group);
+ GTK_GRID (grid), 3, size_group);
/* Zoom Quality */
vbox2 = prefs_frame_new (_("Zoom Quality"), GTK_CONTAINER (vbox), FALSE);
diff --git a/app/display/gimpdisplayshell-appearance.c b/app/display/gimpdisplayshell-appearance.c
index 958540d959..221263a763 100644
--- a/app/display/gimpdisplayshell-appearance.c
+++ b/app/display/gimpdisplayshell-appearance.c
@@ -484,11 +484,11 @@ gimp_display_shell_set_padding (GimpDisplayShell *shell,
break;
case GIMP_CANVAS_PADDING_MODE_LIGHT_CHECK:
- color = *gimp_render_light_check_color ();
+ color = *gimp_render_check_color1 ();
break;
case GIMP_CANVAS_PADDING_MODE_DARK_CHECK:
- color = *gimp_render_dark_check_color ();
+ color = *gimp_render_check_color2 ();
break;
case GIMP_CANVAS_PADDING_MODE_CUSTOM:
diff --git a/app/display/gimpdisplayshell-draw.c b/app/display/gimpdisplayshell-draw.c
index a6de49e20a..16e591ad6b 100644
--- a/app/display/gimpdisplayshell-draw.c
+++ b/app/display/gimpdisplayshell-draw.c
@@ -38,6 +38,8 @@
#include "gimpdisplayshell-draw.h"
#include "gimpdisplayshell-render.h"
+#include "widgets/gimprender.h"
+
/* public functions */
@@ -106,24 +108,16 @@ gimp_display_shell_draw_checkerboard (GimpDisplayShell *shell,
if (G_UNLIKELY (! shell->checkerboard))
{
GimpCheckSize check_size;
- GimpCheckType check_type;
- guchar check_light;
- guchar check_dark;
- GimpRGB light;
- GimpRGB dark;
g_object_get (shell->display->config,
"transparency-size", &check_size,
- "transparency-type", &check_type,
NULL);
- gimp_checks_get_shades (check_type, &check_light, &check_dark);
- gimp_rgb_set_uchar (&light, check_light, check_light, check_light);
- gimp_rgb_set_uchar (&dark, check_dark, check_dark, check_dark);
-
shell->checkerboard =
gimp_cairo_checkerboard_create (cr,
- 1 << (check_size + 2), &light, &dark);
+ 1 << (check_size + 2),
+ gimp_render_check_color1 (),
+ gimp_render_check_color2 ());
}
cairo_translate (cr, - shell->offset_x, - shell->offset_y);
diff --git a/app/display/gimpdisplayshell-handlers.c b/app/display/gimpdisplayshell-handlers.c
index 1932839907..0cc0915456 100644
--- a/app/display/gimpdisplayshell-handlers.c
+++ b/app/display/gimpdisplayshell-handlers.c
@@ -327,6 +327,14 @@ gimp_display_shell_connect (GimpDisplayShell *shell)
"notify::transparency-type",
G_CALLBACK (gimp_display_shell_check_notify_handler),
shell);
+ g_signal_connect (config,
+ "notify::transparency-custom-color1",
+ G_CALLBACK (gimp_display_shell_check_notify_handler),
+ shell);
+ g_signal_connect (config,
+ "notify::transparency-custom-color2",
+ G_CALLBACK (gimp_display_shell_check_notify_handler),
+ shell);
g_signal_connect (config,
"notify::image-title-format",
diff --git a/app/plug-in/gimppluginmanager-call.c b/app/plug-in/gimppluginmanager-call.c
index a90dcfb014..e653d9f1f4 100644
--- a/app/plug-in/gimppluginmanager-call.c
+++ b/app/plug-in/gimppluginmanager-call.c
@@ -210,6 +210,8 @@ gimp_plug_in_manager_call_run (GimpPlugInManager *manager,
-1);
config.check_size = display_config->transparency_size;
config.check_type = display_config->transparency_type;
+ config.check_custom_color1 = display_config->transparency_custom_color1;
+ config.check_custom_color2 = display_config->transparency_custom_color2;
config.show_help_button = (gui_config->use_help &&
gui_config->show_help_button);
config.use_cpu_accel = manager->gimp->use_cpu_accel;
diff --git a/app/widgets/gimprender.c b/app/widgets/gimprender.c
index 549ed025d4..f332702d2d 100644
--- a/app/widgets/gimprender.c
+++ b/app/widgets/gimprender.c
@@ -37,8 +37,8 @@ static void gimp_render_setup_notify (gpointer config,
Gimp *gimp);
-static GimpRGB light;
-static GimpRGB dark;
+static GimpRGB color1;
+static GimpRGB color2;
void
@@ -50,6 +50,14 @@ gimp_render_init (Gimp *gimp)
G_CALLBACK (gimp_render_setup_notify),
gimp);
+ g_signal_connect (gimp->config, "notify::transparency-custom-color1",
+ G_CALLBACK (gimp_render_setup_notify),
+ gimp);
+
+ g_signal_connect (gimp->config, "notify::transparency-custom-color2",
+ G_CALLBACK (gimp_render_setup_notify),
+ gimp);
+
gimp_render_setup_notify (gimp->config, NULL, gimp);
}
@@ -64,15 +72,15 @@ gimp_render_exit (Gimp *gimp)
}
const GimpRGB *
-gimp_render_light_check_color (void)
+gimp_render_check_color1 (void)
{
- return &light;
+ return &color1;
}
const GimpRGB *
-gimp_render_dark_check_color (void)
+gimp_render_check_color2 (void)
{
- return &dark;
+ return &color2;
}
static void
@@ -81,15 +89,17 @@ gimp_render_setup_notify (gpointer config,
Gimp *gimp)
{
GimpCheckType check_type;
- guchar dark_check;
- guchar light_check;
+ GimpRGB *color1_custom;
+ GimpRGB *color2_custom;
g_object_get (config,
"transparency-type", &check_type,
+ "transparency-custom-color1", &color1_custom,
+ "transparency-custom-color2", &color2_custom,
NULL);
- gimp_checks_get_shades (check_type, &light_check, &dark_check);
+ gimp_checks_get_colors (check_type, &color1, &color2, *color1_custom, *color2_custom);
- gimp_rgba_set_uchar (&light, light_check, light_check, light_check, 255);
- gimp_rgba_set_uchar (&dark, dark_check, dark_check, dark_check, 255);
+ g_free (color1_custom);
+ g_free (color2_custom);
}
diff --git a/app/widgets/gimprender.h b/app/widgets/gimprender.h
index c1ecdb31db..c4964302f3 100644
--- a/app/widgets/gimprender.h
+++ b/app/widgets/gimprender.h
@@ -22,8 +22,8 @@
void gimp_render_init (Gimp *gimp);
void gimp_render_exit (Gimp *gimp);
-const GimpRGB * gimp_render_light_check_color (void);
-const GimpRGB * gimp_render_dark_check_color (void);
+const GimpRGB * gimp_render_check_color1 (void);
+const GimpRGB * gimp_render_check_color2 (void);
#endif /* __GIMP_RENDER_H__ */
diff --git a/app/widgets/gimpviewrenderer.c b/app/widgets/gimpviewrenderer.c
index 53e91e7d4e..a5061f90b8 100644
--- a/app/widgets/gimpviewrenderer.c
+++ b/app/widgets/gimpviewrenderer.c
@@ -775,8 +775,8 @@ gimp_view_renderer_real_draw (GimpViewRenderer *renderer,
if (! renderer->priv->pattern)
renderer->priv->pattern =
gimp_cairo_checkerboard_create (cr, GIMP_CHECK_SIZE_SM,
- gimp_render_light_check_color (),
- gimp_render_dark_check_color ());
+ gimp_render_check_color1 (),
+ gimp_render_check_color2 ());
cairo_set_source (cr, renderer->priv->pattern);
cairo_fill_preserve (cr);
@@ -1129,8 +1129,8 @@ gimp_view_render_temp_buf_to_surface (GimpViewRenderer *renderer,
if (! renderer->priv->pattern)
renderer->priv->pattern =
gimp_cairo_checkerboard_create (cr, GIMP_CHECK_SIZE_SM,
- gimp_render_light_check_color (),
- gimp_render_dark_check_color ());
+ gimp_render_check_color1 (),
+ gimp_render_check_color2 ());
}
switch (outside_bg)
diff --git a/libgimp/gimp.c b/libgimp/gimp.c
index adfc2a4af4..71df47b478 100644
--- a/libgimp/gimp.c
+++ b/libgimp/gimp.c
@@ -141,6 +141,8 @@ static gboolean _export_thumbnail = TRUE;
static gint32 _num_processors = 1;
static GimpCheckSize _check_size = GIMP_CHECK_SIZE_MEDIUM_CHECKS;
static GimpCheckType _check_type = GIMP_CHECK_TYPE_GRAY_CHECKS;
+static GimpRGB _check_custom_color1 = GIMP_CHECKS_CUSTOM_COLOR1;
+static GimpRGB _check_custom_color2 = GIMP_CHECKS_CUSTOM_COLOR2;
static gint _default_display_id = -1;
static gchar *_wm_class = NULL;
static gchar *_display_name = NULL;
@@ -795,6 +797,38 @@ gimp_check_type (void)
return _check_type;
}
+/**
+ * gimp_check_custom_color1:
+ *
+ * Returns the first checkerboard custom color that can
+ * be used in previews.
+ *
+ * This is a constant value given at plug-in configuration time.
+ *
+ * Return value: the _check_custom_color1 value
+ **/
+const GimpRGB *
+gimp_check_custom_color1 (void)
+{
+ return &_check_custom_color1;
+}
+
+/**
+ * gimp_check_custom_color2:
+ *
+ * Returns the second checkerboard custom color that can
+ * be used in previews.
+ *
+ * This is a constant value given at plug-in configuration time.
+ *
+ * Return value: the _check_custom_color2 value
+ **/
+const GimpRGB *
+gimp_check_custom_color2 (void)
+{
+ return &_check_custom_color2;
+}
+
/**
* gimp_default_display:
*
@@ -1037,6 +1071,8 @@ _gimp_config (GPConfig *config)
_tile_height = config->tile_height;
_check_size = config->check_size;
_check_type = config->check_type;
+ _check_custom_color1 = config->check_custom_color1;
+ _check_custom_color2 = config->check_custom_color2;
_show_help_button = config->show_help_button ? TRUE : FALSE;
_export_color_profile = config->export_color_profile ? TRUE : FALSE;
_export_exif = config->export_exif ? TRUE : FALSE;
diff --git a/libgimp/gimp.h b/libgimp/gimp.h
index 42e0fc5632..a449c68a0a 100644
--- a/libgimp/gimp.h
+++ b/libgimp/gimp.h
@@ -183,6 +183,8 @@ gboolean gimp_export_thumbnail (void) G_GNUC_CONST;
gint gimp_get_num_processors (void) G_GNUC_CONST;
GimpCheckSize gimp_check_size (void) G_GNUC_CONST;
GimpCheckType gimp_check_type (void) G_GNUC_CONST;
+const GimpRGB * gimp_check_custom_color1 (void) G_GNUC_CONST;
+const GimpRGB * gimp_check_custom_color2 (void) G_GNUC_CONST;
GimpDisplay * gimp_default_display (void) G_GNUC_CONST;
const gchar * gimp_wm_class (void) G_GNUC_CONST;
const gchar * gimp_display_name (void) G_GNUC_CONST;
diff --git a/libgimp/gimpaspectpreview.c b/libgimp/gimpaspectpreview.c
index 1312a1c698..0fabf205c7 100644
--- a/libgimp/gimpaspectpreview.c
+++ b/libgimp/gimpaspectpreview.c
@@ -144,6 +144,8 @@ gimp_aspect_preview_init (GimpAspectPreview *preview)
g_object_set (gimp_preview_get_area (GIMP_PREVIEW (preview)),
"check-size", gimp_check_size (),
"check-type", gimp_check_type (),
+ "check-custom-color1", gimp_check_custom_color1 (),
+ "check-custom-color2", gimp_check_custom_color2 (),
NULL);
}
diff --git a/libgimp/gimpdrawablepreview.c b/libgimp/gimpdrawablepreview.c
index 0e34964f0c..63be488939 100644
--- a/libgimp/gimpdrawablepreview.c
+++ b/libgimp/gimpdrawablepreview.c
@@ -142,6 +142,8 @@ gimp_drawable_preview_init (GimpDrawablePreview *preview)
g_object_set (gimp_preview_get_area (GIMP_PREVIEW (preview)),
"check-size", gimp_check_size (),
"check-type", gimp_check_type (),
+ "check-custom-color1", gimp_check_custom_color1 (),
+ "check-custom-color2", gimp_check_custom_color2 (),
NULL);
}
diff --git a/libgimp/gimpzoompreview.c b/libgimp/gimpzoompreview.c
index d2aba484f9..cab700ade2 100644
--- a/libgimp/gimpzoompreview.c
+++ b/libgimp/gimpzoompreview.c
@@ -198,6 +198,8 @@ gimp_zoom_preview_init (GimpZoomPreview *preview)
g_object_set (area,
"check-size", gimp_check_size (),
"check-type", gimp_check_type (),
+ "check-custom-color1", gimp_check_custom_color1 (),
+ "check-custom-color2", gimp_check_custom_color2 (),
NULL);
gimp_scrolled_preview_set_policy (GIMP_SCROLLED_PREVIEW (preview),
diff --git a/libgimpbase/gimpbaseenums.c b/libgimpbase/gimpbaseenums.c
index 50e03fe560..dc0968c618 100644
--- a/libgimpbase/gimpbaseenums.c
+++ b/libgimpbase/gimpbaseenums.c
@@ -227,6 +227,7 @@ gimp_check_type_get_type (void)
{ GIMP_CHECK_TYPE_WHITE_ONLY, "GIMP_CHECK_TYPE_WHITE_ONLY", "white-only" },
{ GIMP_CHECK_TYPE_GRAY_ONLY, "GIMP_CHECK_TYPE_GRAY_ONLY", "gray-only" },
{ GIMP_CHECK_TYPE_BLACK_ONLY, "GIMP_CHECK_TYPE_BLACK_ONLY", "black-only" },
+ { GIMP_CHECK_TYPE_CUSTOM_CHECKS, "GIMP_CHECK_TYPE_CUSTOM_CHECKS", "custom-checks" },
{ 0, NULL, NULL }
};
@@ -238,6 +239,7 @@ gimp_check_type_get_type (void)
{ GIMP_CHECK_TYPE_WHITE_ONLY, NC_("check-type", "White only"), NULL },
{ GIMP_CHECK_TYPE_GRAY_ONLY, NC_("check-type", "Gray only"), NULL },
{ GIMP_CHECK_TYPE_BLACK_ONLY, NC_("check-type", "Black only"), NULL },
+ { GIMP_CHECK_TYPE_CUSTOM_CHECKS, NC_("check-type", "Custom checks"), NULL },
{ 0, NULL, NULL }
};
diff --git a/libgimpbase/gimpbaseenums.h b/libgimpbase/gimpbaseenums.h
index bb6686cb32..a147933fcc 100644
--- a/libgimpbase/gimpbaseenums.h
+++ b/libgimpbase/gimpbaseenums.h
@@ -178,6 +178,7 @@ typedef enum /*< pdb-skip >*/
* @GIMP_CHECK_TYPE_WHITE_ONLY: White only
* @GIMP_CHECK_TYPE_GRAY_ONLY: Gray only
* @GIMP_CHECK_TYPE_BLACK_ONLY: Black only
+ * @GIMP_CHECK_TYPE_CUSTOM_CHECKS: Custom checks
*
* Color/Brightness of the checkerboard indicating transparency.
**/
@@ -192,7 +193,8 @@ typedef enum /*< pdb-skip >*/
GIMP_CHECK_TYPE_DARK_CHECKS = 2, /*< desc="Dark checks" >*/
GIMP_CHECK_TYPE_WHITE_ONLY = 3, /*< desc="White only" >*/
GIMP_CHECK_TYPE_GRAY_ONLY = 4, /*< desc="Gray only" >*/
- GIMP_CHECK_TYPE_BLACK_ONLY = 5 /*< desc="Black only" >*/
+ GIMP_CHECK_TYPE_BLACK_ONLY = 5, /*< desc="Black only" >*/
+ GIMP_CHECK_TYPE_CUSTOM_CHECKS = 6 /*< desc="Custom checks" >*/
} GimpCheckType;
diff --git a/libgimpbase/gimpchecks.c b/libgimpbase/gimpchecks.c
index a393b23164..faf13f28d8 100644
--- a/libgimpbase/gimpchecks.c
+++ b/libgimpbase/gimpchecks.c
@@ -44,6 +44,8 @@
* @light: (out) (optional): return location for the light shade
* @dark: (out) (optional): return location for the dark shade
*
+ * Deprecated: use gimp_checks_get_colors() instead.
+ *
* Retrieves the actual shades of gray to use when drawing a
* checkerboard for a certain #GimpCheckType.
*
@@ -71,3 +73,77 @@ gimp_checks_get_shades (GimpCheckType type,
if (dark)
*dark = shades[type][0];
}
+
+/**
+ * gimp_checks_get_colors:
+ * @type: the checkerboard type
+ * @color1: return location for the first color,
+ * usually the light color
+ * @color2: return location for the second color,
+ * usually the dark color
+ * @color1_custom: the first color to return if type is custom
+ * @color2_custom: the second color to return if type is custom
+ **/
+void
+gimp_checks_get_colors (GimpCheckType type,
+ GimpRGB *color1,
+ GimpRGB *color2,
+ GimpRGB color1_custom,
+ GimpRGB color2_custom)
+{
+ if (color1)
+ {
+ switch (type)
+ {
+ case GIMP_CHECK_TYPE_LIGHT_CHECKS:
+ *color1 = GIMP_CHECKS_LIGHT_COLOR_LIGHT;
+ break;
+ case GIMP_CHECK_TYPE_DARK_CHECKS:
+ *color1 = GIMP_CHECKS_DARK_COLOR_LIGHT;
+ break;
+ case GIMP_CHECK_TYPE_WHITE_ONLY:
+ *color1 = GIMP_CHECKS_WHITE_COLOR;
+ break;
+ case GIMP_CHECK_TYPE_GRAY_ONLY:
+ *color1 = GIMP_CHECKS_GRAY_COLOR;
+ break;
+ case GIMP_CHECK_TYPE_BLACK_ONLY:
+ *color1 = GIMP_CHECKS_BLACK_COLOR;
+ break;
+ case GIMP_CHECK_TYPE_CUSTOM_CHECKS:
+ *color1 = color1_custom;
+ break;
+ default:
+ *color1 = GIMP_CHECKS_GRAY_COLOR_LIGHT;
+ break;
+ }
+ }
+
+ if (color2)
+ {
+ switch (type)
+ {
+ case GIMP_CHECK_TYPE_LIGHT_CHECKS:
+ *color2 = GIMP_CHECKS_LIGHT_COLOR_DARK;
+ break;
+ case GIMP_CHECK_TYPE_DARK_CHECKS:
+ *color2 = GIMP_CHECKS_DARK_COLOR_DARK;
+ break;
+ case GIMP_CHECK_TYPE_WHITE_ONLY:
+ *color2 = GIMP_CHECKS_WHITE_COLOR;
+ break;
+ case GIMP_CHECK_TYPE_GRAY_ONLY:
+ *color2 = GIMP_CHECKS_GRAY_COLOR;
+ break;
+ case GIMP_CHECK_TYPE_BLACK_ONLY:
+ *color2 = GIMP_CHECKS_BLACK_COLOR;
+ break;
+ case GIMP_CHECK_TYPE_CUSTOM_CHECKS:
+ *color2 = color2_custom;
+ break;
+ default:
+ *color2 = GIMP_CHECKS_GRAY_COLOR_DARK;
+ break;
+ }
+ }
+}
diff --git a/libgimpbase/gimpchecks.h b/libgimpbase/gimpchecks.h
index c41a4d6667..672786f22e 100644
--- a/libgimpbase/gimpchecks.h
+++ b/libgimpbase/gimpchecks.h
@@ -57,11 +57,94 @@ G_BEGIN_DECLS
**/
#define GIMP_CHECK_LIGHT 0.6
+/**
+ * GIMP_CHECKS_CUSTOM_COLOR1:
+ *
+ * The default color 1 for the custom checkerboard type.
+ **/
+#define GIMP_CHECKS_CUSTOM_COLOR1 ((GimpRGB) { 1.0, 0.0, 0.0, 1.0 })
+
+/**
+ * GIMP_CHECKS_CUSTOM_COLOR2:
+ *
+ * The default color 2 for the custom checkerboard type.
+ **/
+#define GIMP_CHECKS_CUSTOM_COLOR2 ((GimpRGB) { 0.0, 1.0, 0.0, 1.0 })
+
+/**
+ * GIMP_CHECKS_LIGHT_COLOR_DARK:
+ *
+ * The dark color for the light checkerboard type.
+ **/
+#define GIMP_CHECKS_LIGHT_COLOR_DARK ((GimpRGB) { 0.8, 0.8, 0.8, 1.0 })
+
+/**
+ * GIMP_CHECKS_LIGHT_COLOR_LIGHT:
+ *
+ * The light color for the light checkerboard type.
+ **/
+#define GIMP_CHECKS_LIGHT_COLOR_LIGHT ((GimpRGB) { 1.0, 1.0, 1.0, 1.0 })
+
+/**
+ * GIMP_CHECKS_GRAY_COLOR_DARK:
+ *
+ * The dark color for the gray checkerboard type.
+ **/
+#define GIMP_CHECKS_GRAY_COLOR_DARK ((GimpRGB) { 0.4, 0.4, 0.4, 1.0 })
+
+/**
+ * GIMP_CHECKS_GRAY_COLOR_LIGHT:
+ *
+ * The light color for the gray checkerboard type.
+ **/
+#define GIMP_CHECKS_GRAY_COLOR_LIGHT ((GimpRGB) { 0.6, 0.6, 0.6, 1.0 })
+
+/**
+ * GIMP_CHECKS_DARK_COLOR_DARK:
+ *
+ * The dark color for the dark checkerboard type.
+ **/
+#define GIMP_CHECKS_DARK_COLOR_DARK ((GimpRGB) { 0.0, 0.0, 0.0, 1.0 })
+
+/**
+ * GIMP_CHECKS_DARK_COLOR_LIGHT:
+ *
+ * The light color for the dark checkerboard type.
+ **/
+#define GIMP_CHECKS_DARK_COLOR_LIGHT ((GimpRGB) { 0.2, 0.2, 0.2, 1.0 })
+
+/**
+ * GIMP_CHECKS_WHITE_COLOR:
+ *
+ * The light/dark color for the white checkerboard type.
+ **/
+#define GIMP_CHECKS_WHITE_COLOR ((GimpRGB) { 1.0, 1.0, 1.0, 1.0 })
+
+/**
+ * GIMP_CHECKS_GRAY_COLOR:
+ *
+ * The light/dark color for the gray checkerboard type.
+ **/
+#define GIMP_CHECKS_GRAY_COLOR ((GimpRGB) { 0.5, 0.5, 0.5, 1.0 })
+/**
+ * GIMP_CHECKS_BLACK_COLOR:
+ *
+ * The light/dark color for the black checkerboard type.
+ **/
+#define GIMP_CHECKS_BLACK_COLOR ((GimpRGB) { 0.0, 0.0, 0.0, 1.0 })
+
+GIMP_DEPRECATED_FOR(gimp_checks_get_colors)
void gimp_checks_get_shades (GimpCheckType type,
guchar *light,
guchar *dark);
+void gimp_checks_get_colors (GimpCheckType type,
+ GimpRGB *color1,
+ GimpRGB *color2,
+ GimpRGB color1_custom,
+ GimpRGB color2_custom);
+
G_END_DECLS
diff --git a/libgimpbase/gimpprotocol.c b/libgimpbase/gimpprotocol.c
index 97b13b0fc4..ee13e90ab0 100644
--- a/libgimpbase/gimpprotocol.c
+++ b/libgimpbase/gimpprotocol.c
@@ -493,6 +493,12 @@ _gp_config_read (GIOChannel *channel,
if (! _gimp_wire_read_int8 (channel,
(guint8 *) &config->check_type, 1, user_data))
goto cleanup;
+ if (! _gimp_wire_read_color (channel, &config->check_custom_color1,
+ 1, user_data))
+ goto cleanup;
+ if (! _gimp_wire_read_color (channel, &config->check_custom_color2,
+ 1, user_data))
+ goto cleanup;
if (! _gimp_wire_read_int8 (channel,
(guint8 *) &config->show_help_button, 1,
user_data))
@@ -601,6 +607,12 @@ _gp_config_write (GIOChannel *channel,
(const guint8 *) &config->check_type, 1,
user_data))
return;
+ if (! _gimp_wire_write_color (channel, &config->check_custom_color1,
+ 1, user_data))
+ return;
+ if (! _gimp_wire_write_color (channel, &config->check_custom_color2,
+ 1, user_data))
+ return;
if (! _gimp_wire_write_int8 (channel,
(const guint8 *) &config->show_help_button, 1,
user_data))
diff --git a/libgimpbase/gimpprotocol.h b/libgimpbase/gimpprotocol.h
index 91e907f354..88147e5318 100644
--- a/libgimpbase/gimpprotocol.h
+++ b/libgimpbase/gimpprotocol.h
@@ -106,6 +106,8 @@ struct _GPConfig
gint32 shm_id;
gint8 check_size;
gint8 check_type;
+ GimpRGB check_custom_color1;
+ GimpRGB check_custom_color2;
gint8 show_help_button;
gint8 use_cpu_accel;
gint8 use_opencl;
diff --git a/libgimpwidgets/gimppreview.c b/libgimpwidgets/gimppreview.c
index 9a16e5fc6a..dbef1d282b 100644
--- a/libgimpwidgets/gimppreview.c
+++ b/libgimpwidgets/gimppreview.c
@@ -241,6 +241,12 @@ gimp_preview_init (GimpPreview *preview)
g_signal_connect_swapped (priv->area, "notify::check-type",
G_CALLBACK (gimp_preview_notify_checks),
preview);
+ g_signal_connect_swapped (priv->area, "notify::check-custom-color1",
+ G_CALLBACK (gimp_preview_notify_checks),
+ preview);
+ g_signal_connect_swapped (priv->area, "notify::check-custom-color2",
+ G_CALLBACK (gimp_preview_notify_checks),
+ preview);
gtk_widget_add_events (priv->area,
GDK_BUTTON_PRESS_MASK |
diff --git a/libgimpwidgets/gimppreviewarea.c b/libgimpwidgets/gimppreviewarea.c
index 51436f5f02..8e2875b7f3 100644
--- a/libgimpwidgets/gimppreviewarea.c
+++ b/libgimpwidgets/gimppreviewarea.c
@@ -49,22 +49,34 @@ enum
{
PROP_0,
PROP_CHECK_SIZE,
- PROP_CHECK_TYPE
+ PROP_CHECK_TYPE,
+ PROP_CHECK_CUSTOM_COLOR1,
+ PROP_CHECK_CUSTOM_COLOR2
};
#define DEFAULT_CHECK_SIZE GIMP_CHECK_SIZE_MEDIUM_CHECKS
#define DEFAULT_CHECK_TYPE GIMP_CHECK_TYPE_GRAY_CHECKS
-#define CHECK_COLOR(priv, row, col) \
+#define CHECK_R(priv, row, col) \
(((((priv)->offset_y + (row)) & size) ^ \
- (((priv)->offset_x + (col)) & size)) ? dark : light)
+ (((priv)->offset_x + (col)) & size)) ? r1 : r2)
+
+#define CHECK_G(priv, row, col) \
+ (((((priv)->offset_y + (row)) & size) ^ \
+ (((priv)->offset_x + (col)) & size)) ? g1 : g2)
+
+#define CHECK_B(priv, row, col) \
+ (((((priv)->offset_y + (row)) & size) ^ \
+ (((priv)->offset_x + (col)) & size)) ? b1 : b2)
struct _GimpPreviewAreaPrivate
{
GimpCheckSize check_size;
GimpCheckType check_type;
+ GimpRGB check_custom_color1;
+ GimpRGB check_custom_color2;
gint width;
gint height;
gint rowstride;
@@ -144,6 +156,20 @@ gimp_preview_area_class_init (GimpPreviewAreaClass *klass)
GIMP_TYPE_CHECK_TYPE,
DEFAULT_CHECK_TYPE,
GIMP_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class, PROP_CHECK_CUSTOM_COLOR1,
+ g_param_spec_boxed ("check-custom-color1",
+ _("Custom Checks Color 1"),
+ "The first color of the checkerboard pattern
indicating transparency",
+ GIMP_TYPE_RGB,
+ GIMP_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class, PROP_CHECK_CUSTOM_COLOR2,
+ g_param_spec_boxed ("check-custom-color2",
+ _("Custom Checks Color 2"),
+ "The second color of the checkerboard pattern
indicating transparency",
+ GIMP_TYPE_RGB,
+ GIMP_PARAM_READWRITE));
}
static void
@@ -157,6 +183,8 @@ gimp_preview_area_init (GimpPreviewArea *area)
priv->check_size = DEFAULT_CHECK_SIZE;
priv->check_type = DEFAULT_CHECK_TYPE;
+ priv->check_custom_color1 = GIMP_CHECKS_CUSTOM_COLOR1;
+ priv->check_custom_color2 = GIMP_CHECKS_CUSTOM_COLOR2;
priv->max_width = -1;
priv->max_height = -1;
@@ -202,6 +230,12 @@ gimp_preview_area_set_property (GObject *object,
case PROP_CHECK_TYPE:
priv->check_type = g_value_get_enum (value);
break;
+ case PROP_CHECK_CUSTOM_COLOR1:
+ priv->check_custom_color1 = *(GimpRGB *) g_value_get_boxed (value);
+ break;
+ case PROP_CHECK_CUSTOM_COLOR2:
+ priv->check_custom_color2 = *(GimpRGB *) g_value_get_boxed (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -225,6 +259,12 @@ gimp_preview_area_get_property (GObject *object,
case PROP_CHECK_TYPE:
g_value_set_enum (value, priv->check_type);
break;
+ case PROP_CHECK_CUSTOM_COLOR1:
+ g_value_set_boxed (value, &priv->check_custom_color1);
+ break;
+ case PROP_CHECK_CUSTOM_COLOR2:
+ g_value_set_boxed (value, &priv->check_custom_color2);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -460,8 +500,14 @@ gimp_preview_area_draw (GimpPreviewArea *area,
const guchar *src;
guchar *dest;
guint size;
- guchar light;
- guchar dark;
+ GimpRGB color1;
+ GimpRGB color2;
+ guchar r1;
+ guchar g1;
+ guchar b1;
+ guchar r2;
+ guchar g2;
+ guchar b2;
gint row;
gint col;
@@ -513,7 +559,13 @@ gimp_preview_area_draw (GimpPreviewArea *area,
}
size = 1 << (2 + priv->check_size);
- gimp_checks_get_shades (priv->check_type, &light, &dark);
+ gimp_checks_get_colors (priv->check_type,
+ &color1,
+ &color2,
+ priv->check_custom_color1,
+ priv->check_custom_color2);
+ gimp_rgb_get_uchar (&color1, &r1, &g1, &b1);
+ gimp_rgb_get_uchar (&color2, &r2, &g2, &b2);
src = buf;
dest = priv->buf + x * 3 + y * priv->rowstride;
@@ -541,7 +593,9 @@ gimp_preview_area_draw (GimpPreviewArea *area,
switch (s[3])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -552,12 +606,14 @@ gimp_preview_area_draw (GimpPreviewArea *area,
default:
{
- register guint alpha = s[3] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = ((check << 8) + (s[0] - check) * alpha) >> 8;
- d[1] = ((check << 8) + (s[1] - check) * alpha) >> 8;
- d[2] = ((check << 8) + (s[2] - check) * alpha) >> 8;
+ register guint alpha = s[3] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (s[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (s[1] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (s[2] - check_b) * alpha) >> 8;
}
break;
}
@@ -595,7 +651,9 @@ gimp_preview_area_draw (GimpPreviewArea *area,
switch (s[1])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -604,11 +662,14 @@ gimp_preview_area_draw (GimpPreviewArea *area,
default:
{
- register guint alpha = s[1] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = d[1] = d[2] =
- ((check << 8) + (s[0] - check) * alpha) >> 8;
+ register guint alpha = s[1] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (s[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (s[0] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (s[0] - check_b) * alpha) >> 8;
}
break;
}
@@ -654,7 +715,9 @@ gimp_preview_area_draw (GimpPreviewArea *area,
switch (s[1])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -665,12 +728,14 @@ gimp_preview_area_draw (GimpPreviewArea *area,
default:
{
- register guint alpha = s[3] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = ((check << 8) + (colormap[0] - check) * alpha) >> 8;
- d[1] = ((check << 8) + (colormap[1] - check) * alpha) >> 8;
- d[2] = ((check << 8) + (colormap[2] - check) * alpha) >> 8;
+ register guint alpha = s[3] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (colormap[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (colormap[1] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (colormap[2] - check_b) * alpha) >> 8;
}
break;
}
@@ -724,8 +789,14 @@ gimp_preview_area_blend (GimpPreviewArea *area,
const guchar *src2;
guchar *dest;
guint size;
- guchar light;
- guchar dark;
+ GimpRGB color1;
+ GimpRGB color2;
+ guchar r1;
+ guchar g1;
+ guchar b1;
+ guchar r2;
+ guchar g2;
+ guchar b2;
gint row;
gint col;
gint i;
@@ -798,7 +869,13 @@ gimp_preview_area_blend (GimpPreviewArea *area,
}
size = 1 << (2 + priv->check_size);
- gimp_checks_get_shades (priv->check_type, &light, &dark);
+ gimp_checks_get_colors (priv->check_type,
+ &color1,
+ &color2,
+ priv->check_custom_color1,
+ priv->check_custom_color2);
+ gimp_rgb_get_uchar (&color1, &r1, &g1, &b1);
+ gimp_rgb_get_uchar (&color2, &r2, &g2, &b2);
src1 = buf1;
src2 = buf2;
@@ -864,7 +941,9 @@ gimp_preview_area_blend (GimpPreviewArea *area,
switch (inter[3])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -875,12 +954,14 @@ gimp_preview_area_blend (GimpPreviewArea *area,
default:
{
- register guint alpha = inter[3] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = ((check << 8) + (inter[0] - check) * alpha) >> 8;
- d[1] = ((check << 8) + (inter[1] - check) * alpha) >> 8;
- d[2] = ((check << 8) + (inter[2] - check) * alpha) >> 8;
+ register guint alpha = inter[3] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (inter[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (inter[1] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (inter[2] - check_b) * alpha) >> 8;
}
break;
}
@@ -944,7 +1025,9 @@ gimp_preview_area_blend (GimpPreviewArea *area,
switch (inter[1])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -953,11 +1036,14 @@ gimp_preview_area_blend (GimpPreviewArea *area,
default:
{
- register guint alpha = inter[1] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = d[1] = d[2] =
- ((check << 8) + (inter[0] - check) * alpha) >> 8;
+ register guint alpha = inter[1] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (inter[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (inter[0] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (inter[0] - check_b) * alpha) >> 8;
}
break;
}
@@ -1037,7 +1123,9 @@ gimp_preview_area_blend (GimpPreviewArea *area,
switch (inter[3])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -1048,12 +1136,14 @@ gimp_preview_area_blend (GimpPreviewArea *area,
default:
{
- register guint alpha = inter[3] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = ((check << 8) + (inter[0] - check) * alpha) >> 8;
- d[1] = ((check << 8) + (inter[1] - check) * alpha) >> 8;
- d[2] = ((check << 8) + (inter[2] - check) * alpha) >> 8;
+ register guint alpha = inter[3] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (inter[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (inter[1] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (inter[2] - check_b) * alpha) >> 8;
}
break;
}
@@ -1112,8 +1202,14 @@ gimp_preview_area_mask (GimpPreviewArea *area,
const guchar *src_mask;
guchar *dest;
guint size;
- guchar light;
- guchar dark;
+ GimpRGB color1;
+ GimpRGB color2;
+ guchar r1;
+ guchar g1;
+ guchar b1;
+ guchar r2;
+ guchar g2;
+ guchar b2;
gint row;
gint col;
gint i;
@@ -1174,7 +1270,13 @@ gimp_preview_area_mask (GimpPreviewArea *area,
}
size = 1 << (2 + priv->check_size);
- gimp_checks_get_shades (priv->check_type, &light, &dark);
+ gimp_checks_get_colors (priv->check_type,
+ &color1,
+ &color2,
+ priv->check_custom_color1,
+ priv->check_custom_color2);
+ gimp_rgb_get_uchar (&color1, &r1, &g1, &b1);
+ gimp_rgb_get_uchar (&color2, &r2, &g2, &b2);
src1 = buf1;
src2 = buf2;
@@ -1221,7 +1323,9 @@ gimp_preview_area_mask (GimpPreviewArea *area,
switch (s1[3])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -1232,12 +1336,14 @@ gimp_preview_area_mask (GimpPreviewArea *area,
default:
{
- register guint alpha = s1[3] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = ((check << 8) + (s1[0] - check) * alpha) >> 8;
- d[1] = ((check << 8) + (s1[1] - check) * alpha) >> 8;
- d[2] = ((check << 8) + (s1[2] - check) * alpha) >> 8;
+ register guint alpha = s1[3] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (s1[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (s1[1] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (s1[2] - check_b) * alpha) >> 8;
}
break;
}
@@ -1247,7 +1353,9 @@ gimp_preview_area_mask (GimpPreviewArea *area,
switch (s2[3])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -1258,12 +1366,14 @@ gimp_preview_area_mask (GimpPreviewArea *area,
default:
{
- register guint alpha = s2[3] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = ((check << 8) + (s2[0] - check) * alpha) >> 8;
- d[1] = ((check << 8) + (s2[1] - check) * alpha) >> 8;
- d[2] = ((check << 8) + (s2[2] - check) * alpha) >> 8;
+ register guint alpha = s2[3] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (s2[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (s2[1] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (s2[2] - check_b) * alpha) >> 8;
}
break;
}
@@ -1300,7 +1410,9 @@ gimp_preview_area_mask (GimpPreviewArea *area,
switch (inter[3])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -1311,15 +1423,17 @@ gimp_preview_area_mask (GimpPreviewArea *area,
default:
{
- register guint alpha = inter[3] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = (((check << 8) +
- (inter[0] - check) * alpha) >> 8);
- d[1] = (((check << 8) +
- (inter[1] - check) * alpha) >> 8);
- d[2] = (((check << 8) +
- (inter[2] - check) * alpha) >> 8);
+ register guint alpha = inter[3] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = (((check_r << 8) +
+ (inter[0] - check_r) * alpha) >> 8);
+ d[1] = (((check_g << 8) +
+ (inter[1] - check_g) * alpha) >> 8);
+ d[2] = (((check_b << 8) +
+ (inter[2] - check_b) * alpha) >> 8);
}
break;
}
@@ -1369,7 +1483,9 @@ gimp_preview_area_mask (GimpPreviewArea *area,
switch (s1[1])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -1378,11 +1494,14 @@ gimp_preview_area_mask (GimpPreviewArea *area,
default:
{
- register guint alpha = s1[1] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = d[1] = d[2] =
- ((check << 8) + (s1[0] - check) * alpha) >> 8;
+ register guint alpha = s1[1] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (s1[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (s1[0] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (s1[0] - check_b) * alpha) >> 8;
}
break;
}
@@ -1392,7 +1511,9 @@ gimp_preview_area_mask (GimpPreviewArea *area,
switch (s2[1])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -1401,11 +1522,14 @@ gimp_preview_area_mask (GimpPreviewArea *area,
default:
{
- register guint alpha = s2[1] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = d[1] = d[2] =
- ((check << 8) + (s2[0] - check) * alpha) >> 8;
+ register guint alpha = s2[1] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (s2[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (s2[0] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (s2[0] - check_b) * alpha) >> 8;
}
break;
}
@@ -1437,7 +1561,9 @@ gimp_preview_area_mask (GimpPreviewArea *area,
switch (inter[1])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -1446,11 +1572,14 @@ gimp_preview_area_mask (GimpPreviewArea *area,
default:
{
- register guint alpha = inter[1] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = d[1] = d[2] =
- ((check << 8) + (inter[0] - check) * alpha) >> 8;
+ register guint alpha = inter[1] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (inter[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (inter[0] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (inter[0] - check_b) * alpha) >> 8;
}
break;
}
@@ -1512,7 +1641,9 @@ gimp_preview_area_mask (GimpPreviewArea *area,
switch (s1[1])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -1523,12 +1654,14 @@ gimp_preview_area_mask (GimpPreviewArea *area,
default:
{
- register guint alpha = s1[1] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = ((check << 8) + (cmap1[0] - check) * alpha) >> 8;
- d[1] = ((check << 8) + (cmap1[1] - check) * alpha) >> 8;
- d[2] = ((check << 8) + (cmap1[2] - check) * alpha) >> 8;
+ register guint alpha = s1[1] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (cmap1[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (cmap1[1] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (cmap1[2] - check_b) * alpha) >> 8;
}
break;
}
@@ -1538,7 +1671,9 @@ gimp_preview_area_mask (GimpPreviewArea *area,
switch (s2[1])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -1549,12 +1684,14 @@ gimp_preview_area_mask (GimpPreviewArea *area,
default:
{
- register guint alpha = s2[1] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
-
- d[0] = ((check << 8) + (cmap2[0] - check) * alpha) >> 8;
- d[1] = ((check << 8) + (cmap2[1] - check) * alpha) >> 8;
- d[2] = ((check << 8) + (cmap2[2] - check) * alpha) >> 8;
+ register guint alpha = s2[1] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
+
+ d[0] = ((check_r << 8) + (cmap2[0] - check_r) * alpha) >> 8;
+ d[1] = ((check_g << 8) + (cmap2[1] - check_g) * alpha) >> 8;
+ d[2] = ((check_b << 8) + (cmap2[2] - check_b) * alpha) >> 8;
}
break;
}
@@ -1594,7 +1731,9 @@ gimp_preview_area_mask (GimpPreviewArea *area,
switch (inter[3])
{
case 0:
- d[0] = d[1] = d[2] = CHECK_COLOR (priv, row, col);
+ d[0] = CHECK_R (priv, row, col);
+ d[1] = CHECK_G (priv, row, col);
+ d[2] = CHECK_B (priv, row, col);
break;
case 255:
@@ -1605,15 +1744,17 @@ gimp_preview_area_mask (GimpPreviewArea *area,
default:
{
- register guint alpha = inter[3] + 1;
- register guint check = CHECK_COLOR (priv, row, col);
+ register guint alpha = inter[3] + 1;
+ register guint check_r = CHECK_R (priv, row, col);
+ register guint check_g = CHECK_G (priv, row, col);
+ register guint check_b = CHECK_B (priv, row, col);
d[0] =
- ((check << 8) + (inter[0] - check) * alpha) >> 8;
+ ((check_r << 8) + (inter[0] - check_r) * alpha) >> 8;
d[1] =
- ((check << 8) + (inter[1] - check) * alpha) >> 8;
+ ((check_g << 8) + (inter[1] - check_g) * alpha) >> 8;
d[2] =
- ((check << 8) + (inter[2] - check) * alpha) >> 8;
+ ((check_b << 8) + (inter[2] - check_b) * alpha) >> 8;
}
break;
}
@@ -1995,6 +2136,10 @@ gimp_preview_area_menu_popup (GimpPreviewArea *area,
gimp_preview_area_menu_new (area, "check-type"));
gtk_menu_shell_append (GTK_MENU_SHELL (menu),
gimp_preview_area_menu_new (area, "check-size"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu),
+ gimp_preview_area_menu_new (area, "check-custom-color1"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu),
+ gimp_preview_area_menu_new (area, "check-custom-color2"));
gtk_menu_popup_at_pointer (GTK_MENU (menu), (GdkEvent *) event);
}
diff --git a/libgimpwidgets/gimpscrolledpreview.c b/libgimpwidgets/gimpscrolledpreview.c
index 8c166801da..1fdecf1a7a 100644
--- a/libgimpwidgets/gimpscrolledpreview.c
+++ b/libgimpwidgets/gimpscrolledpreview.c
@@ -546,6 +546,8 @@ gimp_scrolled_preview_nav_button_press (GtkWidget *widget,
GdkCursor *cursor;
GtkBorder border;
GimpCheckType check_type;
+ GimpRGB check_custom_color1;
+ GimpRGB check_custom_color2;
gint area_width;
gint area_height;
gint x, y;
@@ -575,11 +577,15 @@ gimp_scrolled_preview_nav_button_press (GtkWidget *widget,
g_object_get (gimp_preview_get_area (gimp_preview),
"check-type", &check_type,
+ "check-custom-color1", &check_custom_color1,
+ "check-custom-color2", &check_custom_color2,
NULL);
area = g_object_new (GIMP_TYPE_PREVIEW_AREA,
"check-size", GIMP_CHECK_SIZE_SMALL_CHECKS,
"check-type", check_type,
+ "check-custom-color1", check_custom_color1,
+ "check-custom-color2", check_custom_color2,
NULL);
gtk_container_add (GTK_CONTAINER (inner), area);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]