some cleanup. Made the Selection struct private and removed unused state
2006-09-04 Sven Neumann <sven@gimp.org> * app/display/gimpdisplayshell-selection.[ch]: some cleanup. Made the Selection struct private and removed unused state member. Removed redundant parameter from gimp_display_shell_selection_start(). * app/display/gimpdisplayshell-callbacks.c * app/display/gimpdisplayshell.c: changed accordingly.
This commit is contained in:

committed by
Sven Neumann

parent
4d96ae5f5a
commit
969d40caf1
@ -1,3 +1,12 @@
|
|||||||
|
2006-09-04 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
|
* app/display/gimpdisplayshell-selection.[ch]: some cleanup. Made
|
||||||
|
the Selection struct private and removed unused state member.
|
||||||
|
Removed redundant parameter from gimp_display_shell_selection_start().
|
||||||
|
|
||||||
|
* app/display/gimpdisplayshell-callbacks.c
|
||||||
|
* app/display/gimpdisplayshell.c: changed accordingly.
|
||||||
|
|
||||||
2006-09-04 Michael Natterer <mitch@gimp.org>
|
2006-09-04 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
* app/paint/paint-enums.[ch]: removed enum GimpHealAlignMode, we
|
* app/paint/paint-enums.[ch]: removed enum GimpHealAlignMode, we
|
||||||
|
@ -434,7 +434,7 @@ gimp_display_shell_canvas_expose (GtkWidget *widget,
|
|||||||
gimp_display_shell_draw_cursor (shell);
|
gimp_display_shell_draw_cursor (shell);
|
||||||
|
|
||||||
/* restart (and recalculate) the selection boundaries */
|
/* restart (and recalculate) the selection boundaries */
|
||||||
gimp_display_shell_selection_start (shell->select, TRUE);
|
gimp_display_shell_selection_start (shell->select);
|
||||||
|
|
||||||
gimp_display_shell_resume (shell);
|
gimp_display_shell_resume (shell);
|
||||||
|
|
||||||
|
@ -38,15 +38,30 @@
|
|||||||
#include "gimpdisplayshell-transform.h"
|
#include "gimpdisplayshell-transform.h"
|
||||||
|
|
||||||
|
|
||||||
#define USE_DRAWPOINTS
|
|
||||||
#undef VERBOSE
|
#undef VERBOSE
|
||||||
|
|
||||||
/* The possible internal drawing states... */
|
|
||||||
#define INVISIBLE 0
|
|
||||||
#define INTRO 1
|
|
||||||
#define MARCHING 2
|
|
||||||
|
|
||||||
#define INITIAL_DELAY 15 /* in milleseconds */
|
#define INITIAL_DELAY 15 /* in milleseconds */
|
||||||
|
#define USE_DRAWPOINTS 1
|
||||||
|
|
||||||
|
|
||||||
|
struct _Selection
|
||||||
|
{
|
||||||
|
GimpDisplayShell *shell; /* shell that owns the selection */
|
||||||
|
GdkSegment *segs_in; /* gdk segments of area boundary */
|
||||||
|
GdkSegment *segs_out; /* gdk segments of area boundary */
|
||||||
|
GdkSegment *segs_layer; /* gdk segments of layer boundary */
|
||||||
|
gint num_segs_in; /* number of segments in segs1 */
|
||||||
|
gint num_segs_out; /* number of segments in segs2 */
|
||||||
|
gint num_segs_layer; /* number of segments in segs3 */
|
||||||
|
guint index; /* index of current stipple pattern */
|
||||||
|
gint paused; /* count of pause requests */
|
||||||
|
gboolean recalc; /* flag to recalculate the selection */
|
||||||
|
gboolean hidden; /* is the selection hidden? */
|
||||||
|
gboolean layer_hidden; /* is the layer boundary hidden? */
|
||||||
|
guint timeout_id; /* timer for successive draws */
|
||||||
|
GdkPoint *points_in[8]; /* points of segs_in for fast ants */
|
||||||
|
gint num_points_in[8]; /* number of points in points_in */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* local function prototypes */
|
/* local function prototypes */
|
||||||
@ -64,8 +79,8 @@ static void selection_transform_segs (Selection *select,
|
|||||||
gint num_segs);
|
gint num_segs);
|
||||||
static void selection_generate_segs (Selection *select);
|
static void selection_generate_segs (Selection *select);
|
||||||
static void selection_free_segs (Selection *select);
|
static void selection_free_segs (Selection *select);
|
||||||
static gboolean selection_start_marching (gpointer data);
|
static gboolean selection_start_marching (Selection *select);
|
||||||
static gboolean selection_march_ants (gpointer data);
|
static gboolean selection_march_ants (Selection *select);
|
||||||
|
|
||||||
|
|
||||||
/* public functions */
|
/* public functions */
|
||||||
@ -81,7 +96,6 @@ gimp_display_shell_selection_new (GimpDisplayShell *shell)
|
|||||||
new = g_new0 (Selection, 1);
|
new = g_new0 (Selection, 1);
|
||||||
|
|
||||||
new->shell = shell;
|
new->shell = shell;
|
||||||
new->state = INVISIBLE;
|
|
||||||
new->recalc = TRUE;
|
new->recalc = TRUE;
|
||||||
new->hidden = ! gimp_display_shell_get_show_selection (shell);
|
new->hidden = ! gimp_display_shell_get_show_selection (shell);
|
||||||
new->layer_hidden = ! gimp_display_shell_get_show_layer (shell);
|
new->layer_hidden = ! gimp_display_shell_get_show_layer (shell);
|
||||||
@ -112,8 +126,6 @@ gimp_display_shell_selection_pause (Selection *select)
|
|||||||
select->timeout_id = 0;
|
select->timeout_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
select->state = INVISIBLE;
|
|
||||||
|
|
||||||
select->paused++;
|
select->paused++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,40 +133,27 @@ void
|
|||||||
gimp_display_shell_selection_resume (Selection *select)
|
gimp_display_shell_selection_resume (Selection *select)
|
||||||
{
|
{
|
||||||
if (select->paused == 1)
|
if (select->paused == 1)
|
||||||
{
|
select->timeout_id = g_timeout_add (INITIAL_DELAY,
|
||||||
select->state = INTRO;
|
(GSourceFunc) selection_start_marching,
|
||||||
select->timeout_id = g_timeout_add (INITIAL_DELAY,
|
select);
|
||||||
selection_start_marching,
|
|
||||||
select);
|
|
||||||
}
|
|
||||||
|
|
||||||
select->paused--;
|
select->paused--;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gimp_display_shell_selection_start (Selection *select,
|
gimp_display_shell_selection_start (Selection *select)
|
||||||
gboolean recalc)
|
|
||||||
{
|
{
|
||||||
/* A call to selection_start with recalc == TRUE means that
|
select->recalc = TRUE;
|
||||||
* we want to recalculate the selection boundary--usually
|
|
||||||
* after scaling or panning the display, or modifying the
|
|
||||||
* selection in some way. If recalc == FALSE, the already
|
|
||||||
* calculated boundary is simply redrawn.
|
|
||||||
*/
|
|
||||||
if (recalc)
|
|
||||||
select->recalc = TRUE;
|
|
||||||
|
|
||||||
/* If this selection is paused, do not start it */
|
/* If this selection is paused, do not start it */
|
||||||
if (select->paused > 0)
|
if (select->paused > 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
select->state = INTRO; /* The state before the first draw */
|
|
||||||
|
|
||||||
if (select->timeout_id)
|
if (select->timeout_id)
|
||||||
g_source_remove (select->timeout_id);
|
g_source_remove (select->timeout_id);
|
||||||
|
|
||||||
select->timeout_id = g_timeout_add (INITIAL_DELAY,
|
select->timeout_id = g_timeout_add (INITIAL_DELAY,
|
||||||
selection_start_marching,
|
(GSourceFunc) selection_start_marching,
|
||||||
select);
|
select);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,8 +168,6 @@ gimp_display_shell_selection_invis (Selection *select)
|
|||||||
select->timeout_id = 0;
|
select->timeout_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
select->state = INVISIBLE;
|
|
||||||
|
|
||||||
/* Find the bounds of the selection */
|
/* Find the bounds of the selection */
|
||||||
if (gimp_display_shell_mask_bounds (select->shell, &x1, &y1, &x2, &y2))
|
if (gimp_display_shell_mask_bounds (select->shell, &x1, &y1, &x2, &y2))
|
||||||
{
|
{
|
||||||
@ -179,7 +176,7 @@ gimp_display_shell_selection_invis (Selection *select)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gimp_display_shell_selection_start (select, TRUE);
|
gimp_display_shell_selection_start (select);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,8 +195,6 @@ gimp_display_shell_selection_layer_invis (Selection *select)
|
|||||||
select->timeout_id = 0;
|
select->timeout_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
select->state = INVISIBLE;
|
|
||||||
|
|
||||||
if (select->segs_layer != NULL && select->num_segs_layer == 4)
|
if (select->segs_layer != NULL && select->num_segs_layer == 4)
|
||||||
{
|
{
|
||||||
x1 = select->segs_layer[0].x1 - 1;
|
x1 = select->segs_layer[0].x1 - 1;
|
||||||
@ -236,7 +231,7 @@ gimp_display_shell_selection_set_hidden (Selection *select,
|
|||||||
|
|
||||||
select->hidden = hidden;
|
select->hidden = hidden;
|
||||||
|
|
||||||
gimp_display_shell_selection_start (select, TRUE);
|
gimp_display_shell_selection_start (select);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -251,7 +246,7 @@ gimp_display_shell_selection_layer_set_hidden (Selection *select,
|
|||||||
|
|
||||||
select->layer_hidden = hidden;
|
select->layer_hidden = hidden;
|
||||||
|
|
||||||
gimp_display_shell_selection_start (select, TRUE);
|
gimp_display_shell_selection_start (select);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -592,30 +587,23 @@ selection_free_segs (Selection *select)
|
|||||||
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
selection_start_marching (gpointer data)
|
selection_start_marching (Selection *select)
|
||||||
{
|
{
|
||||||
Selection *select = (Selection *) data;
|
GimpCanvas *canvas = GIMP_CANVAS (select->shell->canvas);
|
||||||
GimpCanvas *canvas;
|
|
||||||
GimpDisplayConfig *config;
|
GimpDisplayConfig *config;
|
||||||
|
|
||||||
canvas = GIMP_CANVAS (select->shell->canvas);
|
|
||||||
config = GIMP_DISPLAY_CONFIG (select->shell->display->image->gimp->config);
|
config = GIMP_DISPLAY_CONFIG (select->shell->display->image->gimp->config);
|
||||||
|
|
||||||
/* if the RECALC bit is set, reprocess the boundaries */
|
|
||||||
if (select->recalc)
|
if (select->recalc)
|
||||||
{
|
{
|
||||||
selection_free_segs (select);
|
selection_free_segs (select);
|
||||||
selection_generate_segs (select);
|
selection_generate_segs (select);
|
||||||
|
|
||||||
/* Toggle the RECALC flag */
|
|
||||||
select->recalc = FALSE;
|
select->recalc = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
select->index = 0;
|
select->index = 0;
|
||||||
|
|
||||||
/* Make sure the state is set to marching */
|
|
||||||
select->state = MARCHING;
|
|
||||||
|
|
||||||
if (! select->layer_hidden && select->segs_layer)
|
if (! select->layer_hidden && select->segs_layer)
|
||||||
gimp_canvas_draw_segments (canvas, GIMP_CANVAS_STYLE_LAYER_BOUNDARY,
|
gimp_canvas_draw_segments (canvas, GIMP_CANVAS_STYLE_LAYER_BOUNDARY,
|
||||||
select->segs_layer, select->num_segs_layer);
|
select->segs_layer, select->num_segs_layer);
|
||||||
@ -632,7 +620,7 @@ selection_start_marching (gpointer data)
|
|||||||
|
|
||||||
/* Reset the timer */
|
/* Reset the timer */
|
||||||
select->timeout_id = g_timeout_add (config->marching_ants_speed,
|
select->timeout_id = g_timeout_add (config->marching_ants_speed,
|
||||||
selection_march_ants,
|
(GSourceFunc) selection_march_ants,
|
||||||
select);
|
select);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -640,10 +628,8 @@ selection_start_marching (gpointer data)
|
|||||||
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
selection_march_ants (gpointer data)
|
selection_march_ants (Selection *select)
|
||||||
{
|
{
|
||||||
Selection *select = data;
|
|
||||||
|
|
||||||
select->index++;
|
select->index++;
|
||||||
selection_draw (select);
|
selection_draw (select);
|
||||||
|
|
||||||
|
@ -20,35 +20,14 @@
|
|||||||
#define __GIMP_DISPLAY_SHELL_SELECTION_H__
|
#define __GIMP_DISPLAY_SHELL_SELECTION_H__
|
||||||
|
|
||||||
|
|
||||||
struct _Selection
|
|
||||||
{
|
|
||||||
GimpDisplayShell *shell; /* shell that owns the selection */
|
|
||||||
GdkSegment *segs_in; /* gdk segments of area boundary */
|
|
||||||
GdkSegment *segs_out; /* gdk segments of area boundary */
|
|
||||||
GdkSegment *segs_layer; /* gdk segments of area boundary */
|
|
||||||
gint num_segs_in; /* number of segments in segs1 */
|
|
||||||
gint num_segs_out; /* number of segments in segs2 */
|
|
||||||
gint num_segs_layer; /* number of segments in segs3 */
|
|
||||||
guint index; /* index of current stipple pattern */
|
|
||||||
gint state; /* internal drawing state */
|
|
||||||
gint paused; /* count of pause requests */
|
|
||||||
gboolean recalc; /* flag to recalculate the selection */
|
|
||||||
gboolean hidden; /* is the selection hidden? */
|
|
||||||
gboolean layer_hidden; /* is the layer boundary hidden? */
|
|
||||||
guint timeout_id; /* timer for successive draws */
|
|
||||||
GdkPoint *points_in[8]; /* points of segs_in for fast ants */
|
|
||||||
gint num_points_in[8]; /* number of points in points_in */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
Selection * gimp_display_shell_selection_new (GimpDisplayShell *shell);
|
Selection * gimp_display_shell_selection_new (GimpDisplayShell *shell);
|
||||||
|
|
||||||
void gimp_display_shell_selection_free (Selection *select);
|
void gimp_display_shell_selection_free (Selection *select);
|
||||||
|
|
||||||
void gimp_display_shell_selection_pause (Selection *select);
|
void gimp_display_shell_selection_pause (Selection *select);
|
||||||
void gimp_display_shell_selection_resume (Selection *select);
|
void gimp_display_shell_selection_resume (Selection *select);
|
||||||
|
|
||||||
void gimp_display_shell_selection_start (Selection *select,
|
void gimp_display_shell_selection_start (Selection *select);
|
||||||
gboolean recalc);
|
|
||||||
void gimp_display_shell_selection_invis (Selection *select);
|
void gimp_display_shell_selection_invis (Selection *select);
|
||||||
void gimp_display_shell_selection_layer_invis (Selection *select);
|
void gimp_display_shell_selection_layer_invis (Selection *select);
|
||||||
|
|
||||||
|
@ -1562,7 +1562,7 @@ gimp_display_shell_selection_visibility (GimpDisplayShell *shell,
|
|||||||
gimp_display_shell_selection_layer_invis (shell->select);
|
gimp_display_shell_selection_layer_invis (shell->select);
|
||||||
break;
|
break;
|
||||||
case GIMP_SELECTION_ON:
|
case GIMP_SELECTION_ON:
|
||||||
gimp_display_shell_selection_start (shell->select, TRUE);
|
gimp_display_shell_selection_start (shell->select);
|
||||||
break;
|
break;
|
||||||
case GIMP_SELECTION_PAUSE:
|
case GIMP_SELECTION_PAUSE:
|
||||||
gimp_display_shell_selection_pause (shell->select);
|
gimp_display_shell_selection_pause (shell->select);
|
||||||
|
Reference in New Issue
Block a user