added new function gimp_preview_area_set_offsets().

2004-09-01  Sven Neumann  <sven@gimp.org>

	* libgimpwidgets/gimppreviewarea.[ch]: added new function
	gimp_preview_area_set_offsets().

	* libgimpwidgets/gimppreview.c: use the new function to let the
	checkerboard scroll with the preview.
This commit is contained in:
Sven Neumann 2004-09-01 01:18:19 +00:00 committed by Sven Neumann
parent 6f7adcf985
commit 3a0e874522
6 changed files with 92 additions and 42 deletions

View File

@ -1,3 +1,11 @@
2004-09-01 Sven Neumann <sven@gimp.org>
* libgimpwidgets/gimppreviewarea.[ch]: added new function
gimp_preview_area_set_offsets().
* libgimpwidgets/gimppreview.c: use the new function to let the
checkerboard scroll with the preview.
2004-09-01 Sven Neumann <sven@gimp.org>
* libgimpwidgets/gimppreview.[ch]: delay the emission of the

View File

@ -781,6 +781,7 @@ GimpPreviewArea
gimp_preview_area_new
gimp_preview_area_draw
gimp_preview_area_fill
gimp_preview_area_set_offsets
gimp_preview_area_set_cmap
<SUBSECTION Standard>
GimpPreviewAreaClass

View File

@ -60,6 +60,16 @@ GimpPreviewArea
@blue:
<!-- ##### FUNCTION gimp_preview_area_set_offsets ##### -->
<para>
</para>
@area:
@x:
@y:
<!-- ##### FUNCTION gimp_preview_area_set_cmap ##### -->
<para>

View File

@ -371,6 +371,9 @@ gimp_preview_h_scroll (GtkAdjustment *hadj,
{
preview->xoff = hadj->value;
gimp_preview_area_set_offsets (GIMP_PREVIEW_AREA (preview->area),
preview->xoff, preview->yoff);
if (! preview->in_drag)
gimp_preview_draw (preview);
@ -383,6 +386,9 @@ gimp_preview_v_scroll (GtkAdjustment *vadj,
{
preview->yoff = vadj->value;
gimp_preview_area_set_offsets (GIMP_PREVIEW_AREA (preview->area),
preview->xoff, preview->yoff);
if (! preview->in_drag)
gimp_preview_draw (preview);
@ -434,11 +440,13 @@ gimp_preview_area_event (GtkWidget *area,
yoff = CLAMP (preview->drag_yoff - dy,
0, preview->ymax - preview->ymin - preview->height);
gtk_adjustment_set_value (GTK_ADJUSTMENT (preview->hadj), xoff);
gtk_adjustment_set_value (GTK_ADJUSTMENT (preview->vadj), yoff);
if (preview->xoff != xoff || preview->yoff != yoff)
{
gtk_adjustment_set_value (GTK_ADJUSTMENT (preview->hadj), xoff);
gtk_adjustment_set_value (GTK_ADJUSTMENT (preview->vadj), yoff);
gimp_preview_draw (preview);
gimp_preview_invalidate (preview);
gimp_preview_draw (preview);
}
}
break;

View File

@ -30,9 +30,10 @@
#include "gimppreviewarea.h"
#define CHECK_COLOR(row,col) \
((((row) & GIMP_CHECK_SIZE) ^ ((col) & GIMP_CHECK_SIZE)) ? \
(GIMP_CHECK_LIGHT * 255) : \
#define CHECK_COLOR(area, row, col) \
(((((area)->offset_x + (row)) & GIMP_CHECK_SIZE) ^ \
(((area)->offset_y + (col)) & GIMP_CHECK_SIZE)) ? \
(GIMP_CHECK_LIGHT * 255) : \
(GIMP_CHECK_DARK * 255))
@ -97,8 +98,8 @@ gimp_preview_area_init (GimpPreviewArea *area)
{
area->buf = NULL;
area->cmap = NULL;
area->dither_x = 0;
area->dither_y = 0;
area->offset_x = 0;
area->offset_y = 0;
area->width = 0;
area->height = 0;
area->rowstride = 0;
@ -173,8 +174,8 @@ gimp_preview_area_expose (GtkWidget *widget,
GDK_RGB_DITHER_MAX,
buf,
area->rowstride,
area->dither_x - event->area.x,
area->dither_y - event->area.y);
area->offset_x - event->area.x,
area->offset_y - event->area.y);
return FALSE;
}
@ -310,7 +311,7 @@ gimp_preview_area_draw (GimpPreviewArea *area,
switch (s[3])
{
case 0:
d[0] = d[1] = d[2] = CHECK_COLOR (row, col);
d[0] = d[1] = d[2] = CHECK_COLOR (area, row, col);
break;
case 255:
@ -322,7 +323,7 @@ gimp_preview_area_draw (GimpPreviewArea *area,
default:
{
register guint alpha = s[3] + 1;
register guint check = CHECK_COLOR (row, col);
register guint check = CHECK_COLOR (area, row, col);
d[0] = ((check << 8) + (s[0] - check) * alpha) >> 8;
d[1] = ((check << 8) + (s[1] - check) * alpha) >> 8;
@ -364,7 +365,7 @@ gimp_preview_area_draw (GimpPreviewArea *area,
switch (s[1])
{
case 0:
d[0] = d[1] = d[2] = CHECK_COLOR (row, col);
d[0] = d[1] = d[2] = CHECK_COLOR (area, row, col);
break;
case 255:
@ -374,7 +375,7 @@ gimp_preview_area_draw (GimpPreviewArea *area,
default:
{
register guint alpha = s[1] + 1;
register guint check = CHECK_COLOR (row, col);
register guint check = CHECK_COLOR (area, row, col);
d[0] = d[1] = d[2] =
((check << 8) + (s[0] - check) * alpha) >> 8;
@ -423,7 +424,7 @@ gimp_preview_area_draw (GimpPreviewArea *area,
switch (s[1])
{
case 0:
d[0] = d[1] = d[2] = CHECK_COLOR (row, col);
d[0] = d[1] = d[2] = CHECK_COLOR (area, row, col);
break;
case 255:
@ -435,7 +436,7 @@ gimp_preview_area_draw (GimpPreviewArea *area,
default:
{
register guint alpha = s[3] + 1;
register guint check = CHECK_COLOR (row, col);
register guint check = CHECK_COLOR (area, row, col);
d[0] = ((check << 8) + (cmap[0] - check) * alpha) >> 8;
d[1] = ((check << 8) + (cmap[1] - check) * alpha) >> 8;
@ -535,6 +536,27 @@ gimp_preview_area_fill (GimpPreviewArea *area,
gtk_widget_queue_draw_area (GTK_WIDGET (area), x, y, width, height);
}
/**
* gimp_preview_area_set_offsets:
* @area: a #GimpPreviewArea
* @x: horizontal offset
* @y: vertical offset
*
* Sets the offsets of the previewed area. This information is used
* when drawing the checkerboard and to determine the dither offsets.
*
* Since: GIMP 2.2
**/
void
gimp_preview_area_set_offsets (GimpPreviewArea *area,
gint x,
gint y)
{
g_return_if_fail (GIMP_IS_PREVIEW_AREA (area));
area->offset_x = x;
area->offset_y = y;
}
/**
* gimp_preview_area_set_cmap:

View File

@ -40,8 +40,8 @@ struct _GimpPreviewArea
gint width;
gint height;
gint rowstride;
gint dither_x;
gint dither_y;
gint offset_x;
gint offset_y;
guchar *buf;
guchar *cmap;
};
@ -52,31 +52,32 @@ struct _GimpPreviewAreaClass
};
GType gimp_preview_area_get_type (void) G_GNUC_CONST;
GType gimp_preview_area_get_type (void) G_GNUC_CONST;
GtkWidget * gimp_preview_area_new (void);
GtkWidget * gimp_preview_area_new (void);
void gimp_preview_area_draw (GimpPreviewArea *area,
gint x,
gint y,
gint width,
gint height,
GimpImageType type,
const guchar *buf,
gint rowstride);
void gimp_preview_area_fill (GimpPreviewArea *area,
gint x,
gint y,
gint width,
gint height,
guchar red,
guchar green,
guchar blue);
void gimp_preview_area_set_cmap (GimpPreviewArea *area,
const guchar *cmap,
gint num_colors);
void gimp_preview_area_draw (GimpPreviewArea *area,
gint x,
gint y,
gint width,
gint height,
GimpImageType type,
const guchar *buf,
gint rowstride);
void gimp_preview_area_fill (GimpPreviewArea *area,
gint x,
gint y,
gint width,
gint height,
guchar red,
guchar green,
guchar blue);
void gimp_preview_area_set_offsets (GimpPreviewArea *area,
gint x,
gint y);
void gimp_preview_area_set_cmap (GimpPreviewArea *area,
const guchar *cmap,
gint num_colors);
#endif /* __GIMP_PREVIEW_AREA_H__ */