mirror of https://github.com/GNOME/gimp.git
respect the selection (fixes bug #301523).
2005-04-23 Sven Neumann <sven@gimp.org> * libgimp/gimpdrawablepreview.c (gimp_drawable_preview_draw_thumb): respect the selection (fixes bug #301523).
This commit is contained in:
parent
25b28a10a2
commit
5590a5f77c
|
@ -1,3 +1,8 @@
|
||||||
|
2005-04-23 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
|
* libgimp/gimpdrawablepreview.c (gimp_drawable_preview_draw_thumb):
|
||||||
|
respect the selection (fixes bug #301523).
|
||||||
|
|
||||||
2005-04-23 Raphaël Quinet <raphael@gimp.org>
|
2005-04-23 Raphaël Quinet <raphael@gimp.org>
|
||||||
|
|
||||||
* plug-ins/metadata/xmp-schemas.[ch]: Added definition of
|
* plug-ins/metadata/xmp-schemas.[ch]: Added definition of
|
||||||
|
|
|
@ -56,6 +56,11 @@ static void gimp_drawable_preview_draw_thumb (GimpPreview *preview,
|
||||||
static void gimp_drawable_preview_draw_buffer (GimpPreview *preview,
|
static void gimp_drawable_preview_draw_buffer (GimpPreview *preview,
|
||||||
const guchar *buffer,
|
const guchar *buffer,
|
||||||
gint rowstride);
|
gint rowstride);
|
||||||
|
static gboolean gimp_drawable_preview_get_bounds (GimpDrawable *drawable,
|
||||||
|
gint *xmin,
|
||||||
|
gint *ymin,
|
||||||
|
gint *xmax,
|
||||||
|
gint *ymax);
|
||||||
|
|
||||||
|
|
||||||
static GimpScrolledPreviewClass *parent_class = NULL;
|
static GimpScrolledPreviewClass *parent_class = NULL;
|
||||||
|
@ -201,13 +206,23 @@ gimp_drawable_preview_draw_thumb (GimpPreview *preview,
|
||||||
GimpDrawablePreview *drawable_preview = GIMP_DRAWABLE_PREVIEW (preview);
|
GimpDrawablePreview *drawable_preview = GIMP_DRAWABLE_PREVIEW (preview);
|
||||||
GimpDrawable *drawable = drawable_preview->drawable;
|
GimpDrawable *drawable = drawable_preview->drawable;
|
||||||
guchar *buffer;
|
guchar *buffer;
|
||||||
|
gint x1, y1, x2, y2;
|
||||||
gint bpp;
|
gint bpp;
|
||||||
|
|
||||||
if (! drawable)
|
if (! drawable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
buffer = gimp_drawable_get_thumbnail_data (drawable->drawable_id,
|
if (gimp_drawable_preview_get_bounds (drawable, &x1, &y1, &x2, &y2))
|
||||||
&width, &height, &bpp);
|
{
|
||||||
|
buffer = gimp_drawable_get_sub_thumbnail_data (drawable->drawable_id,
|
||||||
|
x1, y1, x2 - x1, y2 - y1,
|
||||||
|
&width, &height, &bpp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer = gimp_drawable_get_thumbnail_data (drawable->drawable_id,
|
||||||
|
&width, &height, &bpp);
|
||||||
|
}
|
||||||
|
|
||||||
if (buffer)
|
if (buffer)
|
||||||
{
|
{
|
||||||
|
@ -318,32 +333,18 @@ gimp_drawable_preview_draw_buffer (GimpPreview *preview,
|
||||||
buffer, rowstride);
|
buffer, rowstride);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAX3(a, b, c) (MAX (MAX ((a), (b)), (c)))
|
|
||||||
#define MIN3(a, b, c) (MIN (MIN ((a), (b)), (c)))
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_drawable_preview_set_drawable (GimpDrawablePreview *drawable_preview,
|
gimp_drawable_preview_set_drawable (GimpDrawablePreview *drawable_preview,
|
||||||
GimpDrawable *drawable)
|
GimpDrawable *drawable)
|
||||||
{
|
{
|
||||||
GimpPreview *preview = GIMP_PREVIEW (drawable_preview);
|
GimpPreview *preview = GIMP_PREVIEW (drawable_preview);
|
||||||
gint width = gimp_drawable_width (drawable->drawable_id);
|
gint x1, y1, x2, y2;
|
||||||
gint height = gimp_drawable_height (drawable->drawable_id);
|
|
||||||
gint x1, x2;
|
|
||||||
gint y1, y2;
|
|
||||||
gint xmin, ymin, xmax, ymax;
|
|
||||||
gint offset_x, offset_y;
|
|
||||||
|
|
||||||
drawable_preview->drawable = drawable;
|
drawable_preview->drawable = drawable;
|
||||||
|
|
||||||
gimp_drawable_mask_bounds (drawable->drawable_id, &x1, &y1, &x2, &y2);
|
gimp_drawable_preview_get_bounds (drawable, &x1, &y1, &x2, &y2);
|
||||||
gimp_drawable_offsets (drawable->drawable_id, &offset_x, &offset_y);
|
|
||||||
|
|
||||||
xmin = MAX3 (x1 - SELECTION_BORDER, 0, - offset_x);
|
gimp_preview_set_bounds (preview, x1, y1, x2, y2);
|
||||||
ymin = MAX3 (y1 - SELECTION_BORDER, 0, - offset_y);
|
|
||||||
xmax = MIN3 (x2 + SELECTION_BORDER, width, width + offset_x);
|
|
||||||
ymax = MIN3 (y2 + SELECTION_BORDER, height, height + offset_y);
|
|
||||||
|
|
||||||
gimp_preview_set_bounds (preview, xmin, ymin, xmax, ymax);
|
|
||||||
|
|
||||||
if (gimp_drawable_is_indexed (drawable->drawable_id))
|
if (gimp_drawable_is_indexed (drawable->drawable_id))
|
||||||
{
|
{
|
||||||
|
@ -358,6 +359,42 @@ gimp_drawable_preview_set_drawable (GimpDrawablePreview *drawable_preview,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX3(a, b, c) (MAX (MAX ((a), (b)), (c)))
|
||||||
|
#define MIN3(a, b, c) (MIN (MIN ((a), (b)), (c)))
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gimp_drawable_preview_get_bounds (GimpDrawable *drawable,
|
||||||
|
gint *xmin,
|
||||||
|
gint *ymin,
|
||||||
|
gint *xmax,
|
||||||
|
gint *ymax)
|
||||||
|
{
|
||||||
|
gint width;
|
||||||
|
gint height;
|
||||||
|
gint offset_x;
|
||||||
|
gint offset_y;
|
||||||
|
gint x1, y1;
|
||||||
|
gint x2, y2;
|
||||||
|
gboolean retval;
|
||||||
|
|
||||||
|
width = gimp_drawable_width (drawable->drawable_id);
|
||||||
|
height = gimp_drawable_height (drawable->drawable_id);
|
||||||
|
|
||||||
|
retval = gimp_drawable_mask_bounds (drawable->drawable_id,
|
||||||
|
&x1, &y1, &x2, &y2);
|
||||||
|
|
||||||
|
gimp_drawable_offsets (drawable->drawable_id, &offset_x, &offset_y);
|
||||||
|
|
||||||
|
*xmin = MAX3 (x1 - SELECTION_BORDER, 0, - offset_x);
|
||||||
|
*ymin = MAX3 (y1 - SELECTION_BORDER, 0, - offset_y);
|
||||||
|
*xmax = MIN3 (x2 + SELECTION_BORDER, width, width + offset_x);
|
||||||
|
*ymax = MIN3 (y2 + SELECTION_BORDER, height, height + offset_y);
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_drawable_preview_notify_update (GimpPreview *preview,
|
gimp_drawable_preview_notify_update (GimpPreview *preview,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
|
|
Loading…
Reference in New Issue