From 2ba3e595bc521269b309b93dd56d17c121b5270d Mon Sep 17 00:00:00 2001 From: William Skaggs Date: Thu, 3 Jan 2008 21:53:34 +0000 Subject: [PATCH] Bill Skaggs committing patch by Simon Budig to give an indication when working on a layer mask, updated to fix staleness and respond to "edit-changed". Might fix bug #132204. * app/core/core-enums.[ch]: add GIMP_SELECTION_LAYER_ON. * app/core/gimplayermask.c: add handler for "edit-changed". * app/core/gimpcanvas.[ch]: add new style GIMP_CANVAS_STYLE_LAYER_MASK_ACTIVE. * app/display/gimpdisplayshell-selection.c: use new style when layer mask is active. svn path=/trunk/; revision=24520 --- ChangeLog | 17 +++++++++++++++++ app/core/core-enums.c | 2 ++ app/core/core-enums.h | 1 + app/core/gimplayermask.c | 10 ++++++++++ app/display/gimpcanvas.c | 11 +++++++++++ app/display/gimpcanvas.h | 1 + app/display/gimpdisplayshell-selection.c | 14 ++++++++++++-- 7 files changed, 54 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5388d82eea..45da9984f6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2008-01-03 Bill Skaggs + + committing patch by Simon Budig to give an indication + when working on a layer mask, updated to fix staleness + and respond to "edit-changed". Might fix bug #132204. + + * app/core/core-enums.[ch]: add GIMP_SELECTION_LAYER_ON. + + * app/core/gimplayermask.c: add handler for "edit-changed". + + * app/core/gimpcanvas.[ch]: add new style + GIMP_CANVAS_STYLE_LAYER_MASK_ACTIVE. + + * app/display/gimpdisplayshell-selection.c: use new style + when layer mask is active. + + 2008-01-03 Michael Natterer * app/tools/gimpimagemaptool.[ch]: keep the central processing diff --git a/app/core/core-enums.c b/app/core/core-enums.c index 92252841df..1c9c243292 100644 --- a/app/core/core-enums.c +++ b/app/core/core-enums.c @@ -627,6 +627,7 @@ gimp_selection_control_get_type (void) { { GIMP_SELECTION_OFF, "GIMP_SELECTION_OFF", "off" }, { GIMP_SELECTION_LAYER_OFF, "GIMP_SELECTION_LAYER_OFF", "layer-off" }, + { GIMP_SELECTION_LAYER_ON, "GIMP_SELECTION_LAYER_ON", "layer-on" }, { GIMP_SELECTION_ON, "GIMP_SELECTION_ON", "on" }, { GIMP_SELECTION_PAUSE, "GIMP_SELECTION_PAUSE", "pause" }, { GIMP_SELECTION_RESUME, "GIMP_SELECTION_RESUME", "resume" }, @@ -637,6 +638,7 @@ gimp_selection_control_get_type (void) { { GIMP_SELECTION_OFF, "GIMP_SELECTION_OFF", NULL }, { GIMP_SELECTION_LAYER_OFF, "GIMP_SELECTION_LAYER_OFF", NULL }, + { GIMP_SELECTION_LAYER_ON, "GIMP_SELECTION_LAYER_ON", NULL }, { GIMP_SELECTION_ON, "GIMP_SELECTION_ON", NULL }, { GIMP_SELECTION_PAUSE, "GIMP_SELECTION_PAUSE", NULL }, { GIMP_SELECTION_RESUME, "GIMP_SELECTION_RESUME", NULL }, diff --git a/app/core/core-enums.h b/app/core/core-enums.h index 2da5ccd681..9302b3aff6 100644 --- a/app/core/core-enums.h +++ b/app/core/core-enums.h @@ -299,6 +299,7 @@ typedef enum /*< pdb-skip >*/ { GIMP_SELECTION_OFF, GIMP_SELECTION_LAYER_OFF, + GIMP_SELECTION_LAYER_ON, GIMP_SELECTION_ON, GIMP_SELECTION_PAUSE, GIMP_SELECTION_RESUME diff --git a/app/core/gimplayermask.c b/app/core/gimplayermask.c index 06dbcb85de..3699d2347b 100644 --- a/app/core/gimplayermask.c +++ b/app/core/gimplayermask.c @@ -54,6 +54,7 @@ static gboolean gimp_layer_mask_rename (GimpItem *item, const gchar *undo_desc, GError **error); +static void gimp_layer_mask_real_edit_changed (GimpLayerMask *layer_mask); G_DEFINE_TYPE (GimpLayerMask, gimp_layer_mask, GIMP_TYPE_CHANNEL) @@ -97,6 +98,8 @@ gimp_layer_mask_class_init (GimpLayerMaskClass *klass) viewable_class->default_stock_id = "gimp-layer-mask"; + klass->edit_changed = gimp_layer_mask_real_edit_changed; + item_class->is_attached = gimp_layer_mask_is_attached; item_class->duplicate = gimp_layer_mask_duplicate; item_class->rename = gimp_layer_mask_rename; @@ -281,6 +284,13 @@ gimp_layer_mask_get_edit (const GimpLayerMask *layer_mask) return layer_mask->edit_mask; } +static void +gimp_layer_mask_real_edit_changed (GimpLayerMask *layer_mask) +{ + gimp_image_selection_control (GIMP_ITEM (layer_mask)->image, + GIMP_SELECTION_LAYER_ON); +} + void gimp_layer_mask_set_show (GimpLayerMask *layer_mask, gboolean show, diff --git a/app/display/gimpcanvas.c b/app/display/gimpcanvas.c index 46022c35a0..b9c2dd9f9a 100644 --- a/app/display/gimpcanvas.c +++ b/app/display/gimpcanvas.c @@ -347,6 +347,7 @@ gimp_canvas_gc_new (GimpCanvas *canvas, case GIMP_CANVAS_STYLE_LAYER_BOUNDARY: case GIMP_CANVAS_STYLE_GUIDE_NORMAL: case GIMP_CANVAS_STYLE_GUIDE_ACTIVE: + case GIMP_CANVAS_STYLE_LAYER_MASK_ACTIVE: mask |= GDK_GC_CAP_STYLE | GDK_GC_FILL | GDK_GC_STIPPLE; values.cap_style = GDK_CAP_NOT_LAST; values.fill = GDK_OPAQUE_STIPPLED; @@ -433,6 +434,16 @@ gimp_canvas_gc_new (GimpCanvas *canvas, bg.blue = 0x0; break; + case GIMP_CANVAS_STYLE_LAYER_MASK_ACTIVE: + fg.red = 0x0; + fg.green = 0x0; + fg.blue = 0x0; + + bg.red = 0x0; + bg.green = 0xffff; + bg.blue = 0x0; + break; + case GIMP_CANVAS_STYLE_SAMPLE_POINT_NORMAL: fg.red = 0x0; fg.green = 0x7f7f; diff --git a/app/display/gimpcanvas.h b/app/display/gimpcanvas.h index c47dbbd1c9..eac734f6ad 100644 --- a/app/display/gimpcanvas.h +++ b/app/display/gimpcanvas.h @@ -38,6 +38,7 @@ typedef enum GIMP_CANVAS_STYLE_GUIDE_ACTIVE, GIMP_CANVAS_STYLE_SAMPLE_POINT_NORMAL, GIMP_CANVAS_STYLE_SAMPLE_POINT_ACTIVE, + GIMP_CANVAS_STYLE_LAYER_MASK_ACTIVE, GIMP_CANVAS_STYLE_CUSTOM, GIMP_CANVAS_NUM_STYLES } GimpCanvasStyle; diff --git a/app/display/gimpdisplayshell-selection.c b/app/display/gimpdisplayshell-selection.c index 9d382d1af2..ff81565363 100644 --- a/app/display/gimpdisplayshell-selection.c +++ b/app/display/gimpdisplayshell-selection.c @@ -28,6 +28,7 @@ #include "core/gimp.h" #include "core/gimpchannel.h" +#include "core/gimplayermask.h" #include "core/gimpimage.h" #include "gimpcanvas.h" @@ -75,6 +76,7 @@ static void selection_resume (Selection *selection); static void selection_draw (Selection *selection); static void selection_undraw (Selection *selection); static void selection_layer_undraw (Selection *selection); +static void selection_layer_draw (Selection *selection); static void selection_add_point (GdkPoint *points[8], gint max_npoints[8], @@ -178,6 +180,10 @@ gimp_display_shell_selection_control (GimpDisplayShell *shell, selection_layer_undraw (selection); break; + case GIMP_SELECTION_LAYER_ON: + selection_layer_draw (selection); + break; + case GIMP_SELECTION_ON: selection_start (selection); break; @@ -366,10 +372,14 @@ selection_undraw (Selection *selection) static void selection_layer_draw (Selection *selection) { - GimpCanvas *canvas = GIMP_CANVAS (selection->shell->canvas); + GimpCanvas *canvas = GIMP_CANVAS (selection->shell->canvas); + GimpImage *image = selection->shell->display->image; + GimpDrawable *drawable = gimp_image_get_active_drawable (image); if (selection->segs_layer) - gimp_canvas_draw_segments (canvas, GIMP_CANVAS_STYLE_LAYER_BOUNDARY, + gimp_canvas_draw_segments (canvas, GIMP_IS_LAYER_MASK (drawable) ? + GIMP_CANVAS_STYLE_LAYER_MASK_ACTIVE: + GIMP_CANVAS_STYLE_LAYER_BOUNDARY, selection->segs_layer, selection->num_segs_layer); }