Bill Skaggs <weskaggs@primate.udavis.edu>

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
This commit is contained in:
William Skaggs 2008-01-03 21:53:34 +00:00
parent 48358e3452
commit 2ba3e595bc
7 changed files with 54 additions and 2 deletions

View File

@ -1,3 +1,20 @@
2008-01-03 Bill Skaggs <weskaggs@primate.udavis.edu>
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 <mitch@gimp.org> 2008-01-03 Michael Natterer <mitch@gimp.org>
* app/tools/gimpimagemaptool.[ch]: keep the central processing * app/tools/gimpimagemaptool.[ch]: keep the central processing

View File

@ -627,6 +627,7 @@ gimp_selection_control_get_type (void)
{ {
{ GIMP_SELECTION_OFF, "GIMP_SELECTION_OFF", "off" }, { GIMP_SELECTION_OFF, "GIMP_SELECTION_OFF", "off" },
{ GIMP_SELECTION_LAYER_OFF, "GIMP_SELECTION_LAYER_OFF", "layer-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_ON, "GIMP_SELECTION_ON", "on" },
{ GIMP_SELECTION_PAUSE, "GIMP_SELECTION_PAUSE", "pause" }, { GIMP_SELECTION_PAUSE, "GIMP_SELECTION_PAUSE", "pause" },
{ GIMP_SELECTION_RESUME, "GIMP_SELECTION_RESUME", "resume" }, { 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_OFF, "GIMP_SELECTION_OFF", NULL },
{ GIMP_SELECTION_LAYER_OFF, "GIMP_SELECTION_LAYER_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_ON, "GIMP_SELECTION_ON", NULL },
{ GIMP_SELECTION_PAUSE, "GIMP_SELECTION_PAUSE", NULL }, { GIMP_SELECTION_PAUSE, "GIMP_SELECTION_PAUSE", NULL },
{ GIMP_SELECTION_RESUME, "GIMP_SELECTION_RESUME", NULL }, { GIMP_SELECTION_RESUME, "GIMP_SELECTION_RESUME", NULL },

View File

@ -299,6 +299,7 @@ typedef enum /*< pdb-skip >*/
{ {
GIMP_SELECTION_OFF, GIMP_SELECTION_OFF,
GIMP_SELECTION_LAYER_OFF, GIMP_SELECTION_LAYER_OFF,
GIMP_SELECTION_LAYER_ON,
GIMP_SELECTION_ON, GIMP_SELECTION_ON,
GIMP_SELECTION_PAUSE, GIMP_SELECTION_PAUSE,
GIMP_SELECTION_RESUME GIMP_SELECTION_RESUME

View File

@ -54,6 +54,7 @@ static gboolean gimp_layer_mask_rename (GimpItem *item,
const gchar *undo_desc, const gchar *undo_desc,
GError **error); GError **error);
static void gimp_layer_mask_real_edit_changed (GimpLayerMask *layer_mask);
G_DEFINE_TYPE (GimpLayerMask, gimp_layer_mask, GIMP_TYPE_CHANNEL) 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"; 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->is_attached = gimp_layer_mask_is_attached;
item_class->duplicate = gimp_layer_mask_duplicate; item_class->duplicate = gimp_layer_mask_duplicate;
item_class->rename = gimp_layer_mask_rename; 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; 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 void
gimp_layer_mask_set_show (GimpLayerMask *layer_mask, gimp_layer_mask_set_show (GimpLayerMask *layer_mask,
gboolean show, gboolean show,

View File

@ -347,6 +347,7 @@ gimp_canvas_gc_new (GimpCanvas *canvas,
case GIMP_CANVAS_STYLE_LAYER_BOUNDARY: case GIMP_CANVAS_STYLE_LAYER_BOUNDARY:
case GIMP_CANVAS_STYLE_GUIDE_NORMAL: case GIMP_CANVAS_STYLE_GUIDE_NORMAL:
case GIMP_CANVAS_STYLE_GUIDE_ACTIVE: case GIMP_CANVAS_STYLE_GUIDE_ACTIVE:
case GIMP_CANVAS_STYLE_LAYER_MASK_ACTIVE:
mask |= GDK_GC_CAP_STYLE | GDK_GC_FILL | GDK_GC_STIPPLE; mask |= GDK_GC_CAP_STYLE | GDK_GC_FILL | GDK_GC_STIPPLE;
values.cap_style = GDK_CAP_NOT_LAST; values.cap_style = GDK_CAP_NOT_LAST;
values.fill = GDK_OPAQUE_STIPPLED; values.fill = GDK_OPAQUE_STIPPLED;
@ -433,6 +434,16 @@ gimp_canvas_gc_new (GimpCanvas *canvas,
bg.blue = 0x0; bg.blue = 0x0;
break; 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: case GIMP_CANVAS_STYLE_SAMPLE_POINT_NORMAL:
fg.red = 0x0; fg.red = 0x0;
fg.green = 0x7f7f; fg.green = 0x7f7f;

View File

@ -38,6 +38,7 @@ typedef enum
GIMP_CANVAS_STYLE_GUIDE_ACTIVE, GIMP_CANVAS_STYLE_GUIDE_ACTIVE,
GIMP_CANVAS_STYLE_SAMPLE_POINT_NORMAL, GIMP_CANVAS_STYLE_SAMPLE_POINT_NORMAL,
GIMP_CANVAS_STYLE_SAMPLE_POINT_ACTIVE, GIMP_CANVAS_STYLE_SAMPLE_POINT_ACTIVE,
GIMP_CANVAS_STYLE_LAYER_MASK_ACTIVE,
GIMP_CANVAS_STYLE_CUSTOM, GIMP_CANVAS_STYLE_CUSTOM,
GIMP_CANVAS_NUM_STYLES GIMP_CANVAS_NUM_STYLES
} GimpCanvasStyle; } GimpCanvasStyle;

View File

@ -28,6 +28,7 @@
#include "core/gimp.h" #include "core/gimp.h"
#include "core/gimpchannel.h" #include "core/gimpchannel.h"
#include "core/gimplayermask.h"
#include "core/gimpimage.h" #include "core/gimpimage.h"
#include "gimpcanvas.h" #include "gimpcanvas.h"
@ -75,6 +76,7 @@ static void selection_resume (Selection *selection);
static void selection_draw (Selection *selection); static void selection_draw (Selection *selection);
static void selection_undraw (Selection *selection); static void selection_undraw (Selection *selection);
static void selection_layer_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], static void selection_add_point (GdkPoint *points[8],
gint max_npoints[8], gint max_npoints[8],
@ -178,6 +180,10 @@ gimp_display_shell_selection_control (GimpDisplayShell *shell,
selection_layer_undraw (selection); selection_layer_undraw (selection);
break; break;
case GIMP_SELECTION_LAYER_ON:
selection_layer_draw (selection);
break;
case GIMP_SELECTION_ON: case GIMP_SELECTION_ON:
selection_start (selection); selection_start (selection);
break; break;
@ -367,9 +373,13 @@ static void
selection_layer_draw (Selection *selection) 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) 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->segs_layer,
selection->num_segs_layer); selection->num_segs_layer);
} }