libgimp/gimpdrawablepreview.[ch] reduced code duplication by exporting two
2006-02-07 Sven Neumann <sven@gimp.org> * libgimp/gimpdrawablepreview.[ch] * libgimp/gimpzoompreview.c: reduced code duplication by exporting two GimpDrawablePreview functions for internal use.
This commit is contained in:

committed by
Sven Neumann

parent
cf4de2eef1
commit
39c5fcbea9
@ -1,3 +1,9 @@
|
|||||||
|
2006-02-07 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
|
* libgimp/gimpdrawablepreview.[ch]
|
||||||
|
* libgimp/gimpzoompreview.c: reduced code duplication by exporting
|
||||||
|
two GimpDrawablePreview functions for internal use.
|
||||||
|
|
||||||
2006-02-07 Sven Neumann <sven@gimp.org>
|
2006-02-07 Sven Neumann <sven@gimp.org>
|
||||||
|
|
||||||
* libgimpwidgets/gimpscrolledpreview.c
|
* libgimpwidgets/gimpscrolledpreview.c
|
||||||
|
@ -54,11 +54,6 @@ 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);
|
|
||||||
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (GimpDrawablePreview, gimp_drawable_preview,
|
G_DEFINE_TYPE (GimpDrawablePreview, gimp_drawable_preview,
|
||||||
@ -177,16 +172,27 @@ 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;
|
|
||||||
gint x1, y1, x2, y2;
|
|
||||||
gint bpp;
|
|
||||||
gint size = 100;
|
|
||||||
gint nav_width, nav_height;
|
|
||||||
|
|
||||||
if (! drawable)
|
if (drawable)
|
||||||
return;
|
_gimp_drawable_preview_area_draw_thumb (area, drawable, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
if (gimp_drawable_preview_get_bounds (drawable, &x1, &y1, &x2, &y2))
|
void
|
||||||
|
_gimp_drawable_preview_area_draw_thumb (GimpPreviewArea *area,
|
||||||
|
GimpDrawable *drawable,
|
||||||
|
gint width,
|
||||||
|
gint height)
|
||||||
|
{
|
||||||
|
guchar *buffer;
|
||||||
|
gint x1, y1, x2, y2;
|
||||||
|
gint bpp;
|
||||||
|
gint size = 100;
|
||||||
|
gint nav_width, nav_height;
|
||||||
|
|
||||||
|
g_return_if_fail (GIMP_IS_PREVIEW_AREA (area));
|
||||||
|
g_return_if_fail (drawable != NULL);
|
||||||
|
|
||||||
|
if (_gimp_drawable_preview_get_bounds (drawable, &x1, &y1, &x2, &y2))
|
||||||
{
|
{
|
||||||
width = x2 - x1;
|
width = x2 - x1;
|
||||||
height = y2 - y1;
|
height = y2 - y1;
|
||||||
@ -208,16 +214,18 @@ gimp_drawable_preview_draw_thumb (GimpPreview *preview,
|
|||||||
nav_width = (width * nav_height) / height;
|
nav_width = (width * nav_height) / height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gimp_drawable_preview_get_bounds (drawable, &x1, &y1, &x2, &y2))
|
if (_gimp_drawable_preview_get_bounds (drawable, &x1, &y1, &x2, &y2))
|
||||||
{
|
{
|
||||||
buffer = gimp_drawable_get_sub_thumbnail_data (drawable->drawable_id,
|
buffer = gimp_drawable_get_sub_thumbnail_data (drawable->drawable_id,
|
||||||
x1, y1, x2 - x1, y2 - y1,
|
x1, y1, x2 - x1, y2 - y1,
|
||||||
&nav_width, &nav_height, &bpp);
|
&nav_width, &nav_height,
|
||||||
|
&bpp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buffer = gimp_drawable_get_thumbnail_data (drawable->drawable_id,
|
buffer = gimp_drawable_get_thumbnail_data (drawable->drawable_id,
|
||||||
&nav_width, &nav_height, &bpp);
|
&nav_width, &nav_height,
|
||||||
|
&bpp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffer)
|
if (buffer)
|
||||||
@ -338,7 +346,7 @@ gimp_drawable_preview_set_drawable (GimpDrawablePreview *drawable_preview,
|
|||||||
|
|
||||||
drawable_preview->drawable = drawable;
|
drawable_preview->drawable = drawable;
|
||||||
|
|
||||||
gimp_drawable_preview_get_bounds (drawable, &x1, &y1, &x2, &y2);
|
_gimp_drawable_preview_get_bounds (drawable, &x1, &y1, &x2, &y2);
|
||||||
|
|
||||||
gimp_preview_set_bounds (preview, x1, y1, x2, y2);
|
gimp_preview_set_bounds (preview, x1, y1, x2, y2);
|
||||||
|
|
||||||
@ -359,12 +367,12 @@ gimp_drawable_preview_set_drawable (GimpDrawablePreview *drawable_preview,
|
|||||||
#define MAX3(a, b, c) (MAX (MAX ((a), (b)), (c)))
|
#define MAX3(a, b, c) (MAX (MAX ((a), (b)), (c)))
|
||||||
#define MIN3(a, b, c) (MIN (MIN ((a), (b)), (c)))
|
#define MIN3(a, b, c) (MIN (MIN ((a), (b)), (c)))
|
||||||
|
|
||||||
static gboolean
|
gboolean
|
||||||
gimp_drawable_preview_get_bounds (GimpDrawable *drawable,
|
_gimp_drawable_preview_get_bounds (GimpDrawable *drawable,
|
||||||
gint *xmin,
|
gint *xmin,
|
||||||
gint *ymin,
|
gint *ymin,
|
||||||
gint *xmax,
|
gint *xmax,
|
||||||
gint *ymax)
|
gint *ymax)
|
||||||
{
|
{
|
||||||
gint width;
|
gint width;
|
||||||
gint height;
|
gint height;
|
||||||
@ -374,6 +382,8 @@ gimp_drawable_preview_get_bounds (GimpDrawable *drawable,
|
|||||||
gint x2, y2;
|
gint x2, y2;
|
||||||
gboolean retval;
|
gboolean retval;
|
||||||
|
|
||||||
|
g_return_val_if_fail (drawable != NULL, FALSE);
|
||||||
|
|
||||||
width = gimp_drawable_width (drawable->drawable_id);
|
width = gimp_drawable_width (drawable->drawable_id);
|
||||||
height = gimp_drawable_height (drawable->drawable_id);
|
height = gimp_drawable_height (drawable->drawable_id);
|
||||||
|
|
||||||
|
@ -68,6 +68,17 @@ GimpDrawable * gimp_drawable_preview_get_drawable (GimpDrawablePreview *preview)
|
|||||||
void gimp_drawable_preview_draw_region (GimpDrawablePreview *preview,
|
void gimp_drawable_preview_draw_region (GimpDrawablePreview *preview,
|
||||||
const GimpPixelRgn *region);
|
const GimpPixelRgn *region);
|
||||||
|
|
||||||
|
/* for internal use only */
|
||||||
|
void _gimp_drawable_preview_area_draw_thumb (GimpPreviewArea *area,
|
||||||
|
GimpDrawable *drawable,
|
||||||
|
gint width,
|
||||||
|
gint height) G_GNUC_INTERNAL;
|
||||||
|
gboolean _gimp_drawable_preview_get_bounds (GimpDrawable *drawable,
|
||||||
|
gint *xmin,
|
||||||
|
gint *ymin,
|
||||||
|
gint *xmax,
|
||||||
|
gint *ymax) G_GNUC_INTERNAL;
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@ -69,11 +69,6 @@ static void gimp_zoom_preview_draw_thumb (GimpPreview *preview,
|
|||||||
gint width,
|
gint width,
|
||||||
gint height);
|
gint height);
|
||||||
static void gimp_zoom_preview_set_cursor (GimpPreview *preview);
|
static void gimp_zoom_preview_set_cursor (GimpPreview *preview);
|
||||||
static gboolean gimp_zoom_preview_get_bounds (GimpDrawable *drawable,
|
|
||||||
gint *xmin,
|
|
||||||
gint *ymin,
|
|
||||||
gint *xmax,
|
|
||||||
gint *ymax);
|
|
||||||
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (GimpZoomPreview, gimp_zoom_preview, GIMP_TYPE_SCROLLED_PREVIEW)
|
G_DEFINE_TYPE (GimpZoomPreview, gimp_zoom_preview, GIMP_TYPE_SCROLLED_PREVIEW)
|
||||||
@ -231,7 +226,7 @@ gimp_zoom_preview_style_set (GtkWidget *widget,
|
|||||||
|
|
||||||
gtk_widget_style_get (widget, "size", &size, NULL);
|
gtk_widget_style_get (widget, "size", &size, NULL);
|
||||||
|
|
||||||
if (gimp_zoom_preview_get_bounds (drawable, &x1, &y1, &x2, &y2))
|
if (_gimp_drawable_preview_get_bounds (drawable, &x1, &y1, &x2, &y2))
|
||||||
{
|
{
|
||||||
width = x2 - x1;
|
width = x2 - x1;
|
||||||
height = y2 - y1;
|
height = y2 - y1;
|
||||||
@ -344,7 +339,6 @@ gimp_zoom_preview_draw_buffer (GimpPreview *preview,
|
|||||||
|
|
||||||
image_id = gimp_drawable_get_image (drawable->drawable_id);
|
image_id = gimp_drawable_get_image (drawable->drawable_id);
|
||||||
|
|
||||||
|
|
||||||
if (gimp_selection_is_empty (image_id))
|
if (gimp_selection_is_empty (image_id))
|
||||||
{
|
{
|
||||||
gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview->area),
|
gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview->area),
|
||||||
@ -410,75 +404,9 @@ gimp_zoom_preview_draw_thumb (GimpPreview *preview,
|
|||||||
{
|
{
|
||||||
GimpZoomPreviewPrivate *priv = GIMP_ZOOM_PREVIEW_GET_PRIVATE (preview);
|
GimpZoomPreviewPrivate *priv = GIMP_ZOOM_PREVIEW_GET_PRIVATE (preview);
|
||||||
GimpDrawable *drawable = priv->drawable;
|
GimpDrawable *drawable = priv->drawable;
|
||||||
guchar *buffer;
|
|
||||||
gint x1, y1, x2, y2;
|
|
||||||
gint bpp;
|
|
||||||
gint size = 100;
|
|
||||||
gint nav_width, nav_height;
|
|
||||||
|
|
||||||
if (! drawable)
|
if (drawable)
|
||||||
return;
|
_gimp_drawable_preview_area_draw_thumb (area, drawable, width, height);
|
||||||
|
|
||||||
if (gimp_zoom_preview_get_bounds (drawable, &x1, &y1, &x2, &y2))
|
|
||||||
{
|
|
||||||
width = x2 - x1;
|
|
||||||
height = y2 - y1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
width = gimp_drawable_width (drawable->drawable_id);
|
|
||||||
height = gimp_drawable_height (drawable->drawable_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (width > height)
|
|
||||||
{
|
|
||||||
nav_width = MIN (width, size);
|
|
||||||
nav_height = (height * nav_width) / width;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nav_height = MIN (height, size);
|
|
||||||
nav_width = (width * nav_height) / height;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gimp_zoom_preview_get_bounds (drawable, &x1, &y1, &x2, &y2))
|
|
||||||
{
|
|
||||||
buffer = gimp_drawable_get_sub_thumbnail_data (drawable->drawable_id,
|
|
||||||
x1, y1, x2 - x1, y2 - y1,
|
|
||||||
&nav_width, &nav_height,
|
|
||||||
&bpp);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buffer = gimp_drawable_get_thumbnail_data (drawable->drawable_id,
|
|
||||||
&nav_width, &nav_height, &bpp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buffer)
|
|
||||||
{
|
|
||||||
GimpImageType type;
|
|
||||||
|
|
||||||
gtk_widget_set_size_request (GTK_WIDGET (area), nav_width, nav_height);
|
|
||||||
gtk_widget_show (GTK_WIDGET (area));
|
|
||||||
gtk_widget_realize (GTK_WIDGET (area));
|
|
||||||
|
|
||||||
switch (bpp)
|
|
||||||
{
|
|
||||||
case 1: type = GIMP_GRAY_IMAGE; break;
|
|
||||||
case 2: type = GIMP_GRAYA_IMAGE; break;
|
|
||||||
case 3: type = GIMP_RGB_IMAGE; break;
|
|
||||||
case 4: type = GIMP_RGBA_IMAGE; break;
|
|
||||||
default:
|
|
||||||
g_free (buffer);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
gimp_preview_area_draw (area,
|
|
||||||
0, 0, nav_width, nav_height,
|
|
||||||
type, buffer, bpp * nav_width);
|
|
||||||
|
|
||||||
g_free (buffer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -498,41 +426,6 @@ gimp_zoom_preview_set_cursor (GimpPreview *preview)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define MAX3(a, b, c) (MAX (MAX ((a), (b)), (c)))
|
|
||||||
#define MIN3(a, b, c) (MIN (MIN ((a), (b)), (c)))
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
gimp_zoom_preview_get_bounds (GimpDrawable *drawable,
|
|
||||||
gint *xmin,
|
|
||||||
gint *ymin,
|
|
||||||
gint *xmax,
|
|
||||||
gint *ymax)
|
|
||||||
{
|
|
||||||
gboolean retval;
|
|
||||||
gint width;
|
|
||||||
gint height;
|
|
||||||
gint offset_x;
|
|
||||||
gint offset_y;
|
|
||||||
gint x1, y1;
|
|
||||||
gint x2, y2;
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gimp_zoom_preview_new:
|
* gimp_zoom_preview_new:
|
||||||
* @drawable: a #GimpDrawable
|
* @drawable: a #GimpDrawable
|
||||||
@ -557,7 +450,7 @@ gimp_zoom_preview_new (GimpDrawable *drawable)
|
|||||||
|
|
||||||
priv->drawable = drawable;
|
priv->drawable = drawable;
|
||||||
|
|
||||||
if (gimp_zoom_preview_get_bounds (drawable, &x1, &y1, &x2, &y2))
|
if (_gimp_drawable_preview_get_bounds (drawable, &x1, &y1, &x2, &y2))
|
||||||
{
|
{
|
||||||
width = x2 - x1;
|
width = x2 - x1;
|
||||||
height = y2 - y1;
|
height = y2 - y1;
|
||||||
|
Reference in New Issue
Block a user