applied a patch from Pedro Gimeno that fixes incorrect drawing of the

2003-04-05  Sven Neumann  <sven@gimp.org>

	* app/display/gimpdisplayshell-selection.c: applied a patch from
	Pedro Gimeno that fixes incorrect drawing of the selection border
	caused by overflowing 16bit X coordinates (bug #110014).
This commit is contained in:
Sven Neumann 2003-04-04 22:33:01 +00:00 committed by Sven Neumann
parent fd4743a9c4
commit 55d8075293
2 changed files with 34 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2003-04-05 Sven Neumann <sven@gimp.org>
* app/display/gimpdisplayshell-selection.c: applied a patch from
Pedro Gimeno that fixes incorrect drawing of the selection border
caused by overflowing 16bit X coordinates (bug #110014).
2003-04-04 Sven Neumann <sven@gimp.org>
* themes/Default/images/Makefile.am

View File

@ -486,10 +486,14 @@ selection_render_points (Selection *select)
gint dx, dy;
gint dxa, dya;
gint r;
gint xsize, ysize;
gint x2, y2;
if (select->segs_in == NULL)
return;
g_return_if_fail (select->shell != NULL);
for (j = 0; j < 8; j++)
{
max_npoints[j] = MAX_POINTS_INC;
@ -497,6 +501,9 @@ selection_render_points (Selection *select)
select->num_points_in[j] = 0;
}
xsize = select->shell->disp_width;
ysize = select->shell->disp_height;
for (i = 0; i < select->num_segs_in; i++)
{
#ifdef VERBOSE
@ -506,8 +513,9 @@ selection_render_points (Selection *select)
select->segs_in[i].x2,
select->segs_in[i].y2);
#endif
x = select->segs_in[i].x1;
dxa = select->segs_in[i].x2 - x;
x = CLAMP (select->segs_in[i].x1, -1, xsize);
x2 = CLAMP (select->segs_in[i].x2, -1, xsize);
dxa = x2 - x;
if (dxa > 0)
{
dx = 1;
@ -517,8 +525,9 @@ selection_render_points (Selection *select)
dxa = -dxa;
dx = -1;
}
y = select->segs_in[i].y1;
dya = select->segs_in[i].y2 - y;
y = CLAMP (select->segs_in[i].y1, -1, ysize);
y2 = CLAMP (select->segs_in[i].y2, -1, ysize);
dya = y2 - y;
if (dya > 0)
{
dy = 1;
@ -542,7 +551,7 @@ selection_render_points (Selection *select)
y += dy;
r -= (dxa << 1);
}
} while (x != select->segs_in[i].x2);
} while (x != x2);
}
else if (dxa < dya)
{
@ -558,7 +567,7 @@ selection_render_points (Selection *select)
x += dx;
r -= (dya << 1);
}
} while (y != select->segs_in[i].y2);
} while (y != y2);
}
else
selection_add_point (select->points_in,
@ -724,9 +733,22 @@ selection_generate_segs (Selection *select)
if (select->num_segs_layer)
{
gint i;
GdkSegment *seg;
select->segs_layer = g_new (GdkSegment, select->num_segs_layer);
selection_transform_segs (select, segs_layer, select->segs_layer,
select->num_segs_layer);
seg = select->segs_layer;
for (i = 0; i < select->num_segs_layer; i++)
{
seg->x1 = CLAMP (seg->x1, -1, select->shell->disp_width);
seg->y1 = CLAMP (seg->y1, -1, select->shell->disp_height);
seg->x2 = CLAMP (seg->x2, -1, select->shell->disp_width);
seg->y2 = CLAMP (seg->y2, -1, select->shell->disp_height);
seg++;
}
}
else
{