added "gint bytes" to the GimpPreviewRenderer struct and pass it to

2003-03-01  Michael Natterer  <mitch@gimp.org>

	* app/widgets/gimppreviewrenderer.[ch]: added "gint bytes" to the
	GimpPreviewRenderer struct and pass it to
	gimp_preview_render_to_buffer().

	* app/widgets/gimppreviewrendererbrush.[ch]: render the indicators
	to the renderer's buffer, not to the TempBuf so they always appear
	in the corner again.

	Misc cleanups:

	* app/core/gimpbuffer.c (gimp_buffer_get_new_preview)
	* app/core/gimppattern.c (gimp_pattern_get_new_preview): no need
	to center the TempBuf if smaller than requested because
	GimpPreviewRenderer::render()'s default implementation adjusts the
	offsets itself.

	* app/widgets/gimppreview.c (gimp_preview_set_viewable): no need
	to update ourselves after we changed the renderer because the
	renderer's signal will update us.

	* app/widgets/gimppreviewrenderer.c (gimp_preview_renderer_draw):
	replaced my stupid buf_rect calculation overkill by something
	simple that does the same.
This commit is contained in:
Michael Natterer 2003-03-01 12:55:43 +00:00 committed by Michael Natterer
parent 48bf4fb7b2
commit 251f6b0483
12 changed files with 122 additions and 124 deletions

View file

@ -1,3 +1,29 @@
2003-03-01 Michael Natterer <mitch@gimp.org>
* app/widgets/gimppreviewrenderer.[ch]: added "gint bytes" to the
GimpPreviewRenderer struct and pass it to
gimp_preview_render_to_buffer().
* app/widgets/gimppreviewrendererbrush.[ch]: render the indicators
to the renderer's buffer, not to the TempBuf so they always appear
in the corner again.
Misc cleanups:
* app/core/gimpbuffer.c (gimp_buffer_get_new_preview)
* app/core/gimppattern.c (gimp_pattern_get_new_preview): no need
to center the TempBuf if smaller than requested because
GimpPreviewRenderer::render()'s default implementation adjusts the
offsets itself.
* app/widgets/gimppreview.c (gimp_preview_set_viewable): no need
to update ourselves after we changed the renderer because the
renderer's signal will update us.
* app/widgets/gimppreviewrenderer.c (gimp_preview_renderer_draw):
replaced my stupid buf_rect calculation overkill by something
simple that does the same.
2003-03-01 Michael Natterer <mitch@gimp.org>
* app/core/gimpbuffer.c: don't scale the preview up if the

View file

@ -269,12 +269,6 @@ gimp_buffer_get_new_preview (GimpViewable *viewable,
copy_region (&srcPR, &destPR);
}
if (buffer_width < width)
temp_buf->x = (width - buffer_width) / 2;
if (buffer_height < height)
temp_buf->y = (height - buffer_height) / 2;
return temp_buf;
}

View file

@ -213,12 +213,6 @@ gimp_pattern_get_new_preview (GimpViewable *viewable,
temp_buf_copy_area (pattern->mask, temp_buf,
0, 0, copy_width, copy_height, 0, 0);
if (width > copy_width)
temp_buf->x = (width - copy_width) / 2;
if (height > copy_height)
temp_buf->y = (height - copy_height) / 2;
return temp_buf;
}

View file

@ -213,12 +213,6 @@ gimp_pattern_get_new_preview (GimpViewable *viewable,
temp_buf_copy_area (pattern->mask, temp_buf,
0, 0, copy_width, copy_height, 0, 0);
if (width > copy_width)
temp_buf->x = (width - copy_width) / 2;
if (height > copy_height)
temp_buf->y = (height - copy_height) / 2;
return temp_buf;
}

View file

@ -590,8 +590,6 @@ gimp_preview_set_viewable (GimpPreview *preview,
{
g_object_add_weak_pointer (G_OBJECT (preview->viewable),
(gpointer *) &preview->viewable);
gimp_preview_update (preview);
}
}

View file

@ -48,9 +48,6 @@
#include "gimppreviewrenderer-utils.h"
#define PREVIEW_BYTES 3
enum
{
UPDATE,
@ -143,6 +140,7 @@ gimp_preview_renderer_init (GimpPreviewRenderer *renderer)
renderer->buffer = NULL;
renderer->rowstride = 0;
renderer->bytes = 3;
renderer->no_preview_pixbuf = NULL;
@ -392,7 +390,7 @@ gimp_preview_renderer_set_size_full (GimpPreviewRenderer *renderer,
renderer->height = height;
renderer->border_width = border_width;
renderer->rowstride = (renderer->width * PREVIEW_BYTES + 3) & ~3;
renderer->rowstride = (renderer->width * renderer->bytes + 3) & ~3;
if (renderer->buffer)
{
@ -543,17 +541,10 @@ gimp_preview_renderer_draw (GimpPreviewRenderer *renderer,
}
else if (renderer->buffer)
{
if (renderer->border_width > 0)
{
buf_rect.x = border_rect.x + renderer->border_width;
buf_rect.y = border_rect.y + renderer->border_width;
buf_rect.width = border_rect.width - 2 * renderer->border_width;
buf_rect.height = border_rect.height - 2 * renderer->border_width;
}
else
{
buf_rect = border_rect;
}
buf_rect.x = border_rect.x + renderer->border_width;
buf_rect.y = border_rect.y + renderer->border_width;
buf_rect.width = renderer->width;
buf_rect.height = renderer->height;
if (gdk_rectangle_intersect (&buf_rect, expose_area, &render_rect))
{
@ -561,7 +552,7 @@ gimp_preview_renderer_draw (GimpPreviewRenderer *renderer,
buf = (renderer->buffer +
(render_rect.y - buf_rect.y) * renderer->rowstride +
(render_rect.x - buf_rect.x) * PREVIEW_BYTES);
(render_rect.x - buf_rect.x) * renderer->bytes);
gdk_draw_rgb_image_dithalign (window,
widget->style->black_gc,
@ -762,7 +753,8 @@ gimp_preview_render_to_buffer (TempBuf *temp_buf,
guchar *dest_buffer,
gint dest_width,
gint dest_height,
gint dest_rowstride)
gint dest_rowstride,
gint dest_bytes)
{
guchar *src, *s;
guchar *cb;
@ -860,8 +852,8 @@ gimp_preview_render_to_buffer (TempBuf *temp_buf,
{
/* Handle the leading transparency */
for (j = 0; j < x1; j++)
for (b = 0; b < PREVIEW_BYTES; b++)
render_temp_buf[j * PREVIEW_BYTES + b] = cb[j * 3 + b];
for (b = 0; b < dest_bytes; b++)
render_temp_buf[j * dest_bytes + b] = cb[j * 3 + b];
/* The stuff in the middle */
s = src;
@ -914,21 +906,21 @@ gimp_preview_render_to_buffer (TempBuf *temp_buf,
/* Handle the trailing transparency */
for (j = x2; j < dest_width; j++)
for (b = 0; b < PREVIEW_BYTES; b++)
render_temp_buf[j * PREVIEW_BYTES + b] = cb[j * 3 + b];
for (b = 0; b < dest_bytes; b++)
render_temp_buf[j * dest_bytes + b] = cb[j * 3 + b];
src += rowstride;
}
else
{
for (j = 0; j < dest_width; j++)
for (b = 0; b < PREVIEW_BYTES; b++)
render_temp_buf[j * PREVIEW_BYTES + b] = cb[j * 3 + b];
for (b = 0; b < dest_bytes; b++)
render_temp_buf[j * dest_bytes + b] = cb[j * 3 + b];
}
memcpy (dest_buffer + i * dest_rowstride,
render_temp_buf,
dest_width * PREVIEW_BYTES);
dest_width * dest_bytes);
}
}
@ -949,7 +941,8 @@ gimp_preview_renderer_render_preview (GimpPreviewRenderer *renderer,
renderer->buffer,
renderer->width,
renderer->height,
renderer->rowstride);
renderer->rowstride,
renderer->bytes);
renderer->needs_render = FALSE;
}

View file

@ -55,6 +55,7 @@ struct _GimpPreviewRenderer
/*< private >*/
guchar *buffer;
gint rowstride;
gint bytes;
GdkPixbuf *no_preview_pixbuf;
@ -124,7 +125,8 @@ void gimp_preview_render_to_buffer (TempBuf *temp_buf,
guchar *dest_buffer,
gint dest_width,
gint dest_height,
gint dest_rowstride);
gint dest_rowstride,
gint dest_bytes);
void gimp_preview_renderer_render_preview (GimpPreviewRenderer *renderer,
TempBuf *temp_buf,
gint channel,

View file

@ -174,11 +174,17 @@ gimp_preview_renderer_brush_render (GimpPreviewRenderer *renderer,
return;
}
gimp_preview_renderer_render_preview (renderer, temp_buf, -1,
GIMP_PREVIEW_BG_WHITE,
GIMP_PREVIEW_BG_WHITE);
temp_buf_free (temp_buf);
#define INDICATOR_WIDTH 7
#define INDICATOR_HEIGHT 7
if (temp_buf->width >= INDICATOR_WIDTH &&
temp_buf->height >= INDICATOR_HEIGHT &&
if (renderer->width >= INDICATOR_WIDTH * 2 &&
renderer->height >= INDICATOR_HEIGHT * 2&&
(renderer->width < brush_width ||
renderer->height < brush_height ||
GIMP_IS_BRUSH_PIPE (brush)))
@ -225,6 +231,7 @@ gimp_preview_renderer_brush_render (GimpPreviewRenderer *renderer,
#undef RED
guchar *buf;
guchar *b;
gint x, y;
gint offset_x;
gint offset_y;
@ -232,60 +239,55 @@ gimp_preview_renderer_brush_render (GimpPreviewRenderer *renderer,
gboolean pipe;
gboolean scale;
buf = temp_buf_data (temp_buf);
offset_x = renderer->width - INDICATOR_WIDTH;
offset_y = renderer->height - INDICATOR_HEIGHT;
offset_x = temp_buf->width - INDICATOR_WIDTH;
offset_y = temp_buf->height - INDICATOR_HEIGHT;
buf += (offset_y * temp_buf->width + offset_x) * temp_buf->bytes;
buf = renderer->buffer + (offset_y * renderer->rowstride +
offset_x * renderer->bytes);
pipe = GIMP_IS_BRUSH_PIPE (brush);
scale = (renderer->width < brush_width ||
renderer->height < brush_height);
alpha = (temp_buf->bytes == 4);
alpha = (renderer->bytes == 4);
for (y = 0; y < INDICATOR_HEIGHT; y++)
{
b = buf;
for (x = 0; x < INDICATOR_WIDTH; x++)
{
if (scale)
{
if (pipe)
{
*buf++ = scale_pipe_indicator_bits[y][x][0];
*buf++ = scale_pipe_indicator_bits[y][x][1];
*buf++ = scale_pipe_indicator_bits[y][x][2];
*b++ = scale_pipe_indicator_bits[y][x][0];
*b++ = scale_pipe_indicator_bits[y][x][1];
*b++ = scale_pipe_indicator_bits[y][x][2];
}
else
{
*buf++ = scale_indicator_bits[y][x][0];
*buf++ = scale_indicator_bits[y][x][1];
*buf++ = scale_indicator_bits[y][x][2];
*b++ = scale_indicator_bits[y][x][0];
*b++ = scale_indicator_bits[y][x][1];
*b++ = scale_indicator_bits[y][x][2];
}
}
else if (pipe)
{
*buf++ = pipe_indicator_bits[y][x][0];
*buf++ = pipe_indicator_bits[y][x][1];
*buf++ = pipe_indicator_bits[y][x][2];
*b++ = pipe_indicator_bits[y][x][0];
*b++ = pipe_indicator_bits[y][x][1];
*b++ = pipe_indicator_bits[y][x][2];
}
if (alpha)
*buf++ = 255;
*b++ = 255;
}
buf += (temp_buf->width - INDICATOR_WIDTH) * temp_buf->bytes;
buf += renderer->rowstride;
}
}
#undef INDICATOR_WIDTH
#undef INDICATOR_HEIGHT
gimp_preview_renderer_render_preview (renderer, temp_buf, -1,
GIMP_PREVIEW_BG_WHITE,
GIMP_PREVIEW_BG_WHITE);
temp_buf_free (temp_buf);
}
static gboolean

View file

@ -590,8 +590,6 @@ gimp_preview_set_viewable (GimpPreview *preview,
{
g_object_add_weak_pointer (G_OBJECT (preview->viewable),
(gpointer *) &preview->viewable);
gimp_preview_update (preview);
}
}

View file

@ -48,9 +48,6 @@
#include "gimppreviewrenderer-utils.h"
#define PREVIEW_BYTES 3
enum
{
UPDATE,
@ -143,6 +140,7 @@ gimp_preview_renderer_init (GimpPreviewRenderer *renderer)
renderer->buffer = NULL;
renderer->rowstride = 0;
renderer->bytes = 3;
renderer->no_preview_pixbuf = NULL;
@ -392,7 +390,7 @@ gimp_preview_renderer_set_size_full (GimpPreviewRenderer *renderer,
renderer->height = height;
renderer->border_width = border_width;
renderer->rowstride = (renderer->width * PREVIEW_BYTES + 3) & ~3;
renderer->rowstride = (renderer->width * renderer->bytes + 3) & ~3;
if (renderer->buffer)
{
@ -543,17 +541,10 @@ gimp_preview_renderer_draw (GimpPreviewRenderer *renderer,
}
else if (renderer->buffer)
{
if (renderer->border_width > 0)
{
buf_rect.x = border_rect.x + renderer->border_width;
buf_rect.y = border_rect.y + renderer->border_width;
buf_rect.width = border_rect.width - 2 * renderer->border_width;
buf_rect.height = border_rect.height - 2 * renderer->border_width;
}
else
{
buf_rect = border_rect;
}
buf_rect.x = border_rect.x + renderer->border_width;
buf_rect.y = border_rect.y + renderer->border_width;
buf_rect.width = renderer->width;
buf_rect.height = renderer->height;
if (gdk_rectangle_intersect (&buf_rect, expose_area, &render_rect))
{
@ -561,7 +552,7 @@ gimp_preview_renderer_draw (GimpPreviewRenderer *renderer,
buf = (renderer->buffer +
(render_rect.y - buf_rect.y) * renderer->rowstride +
(render_rect.x - buf_rect.x) * PREVIEW_BYTES);
(render_rect.x - buf_rect.x) * renderer->bytes);
gdk_draw_rgb_image_dithalign (window,
widget->style->black_gc,
@ -762,7 +753,8 @@ gimp_preview_render_to_buffer (TempBuf *temp_buf,
guchar *dest_buffer,
gint dest_width,
gint dest_height,
gint dest_rowstride)
gint dest_rowstride,
gint dest_bytes)
{
guchar *src, *s;
guchar *cb;
@ -860,8 +852,8 @@ gimp_preview_render_to_buffer (TempBuf *temp_buf,
{
/* Handle the leading transparency */
for (j = 0; j < x1; j++)
for (b = 0; b < PREVIEW_BYTES; b++)
render_temp_buf[j * PREVIEW_BYTES + b] = cb[j * 3 + b];
for (b = 0; b < dest_bytes; b++)
render_temp_buf[j * dest_bytes + b] = cb[j * 3 + b];
/* The stuff in the middle */
s = src;
@ -914,21 +906,21 @@ gimp_preview_render_to_buffer (TempBuf *temp_buf,
/* Handle the trailing transparency */
for (j = x2; j < dest_width; j++)
for (b = 0; b < PREVIEW_BYTES; b++)
render_temp_buf[j * PREVIEW_BYTES + b] = cb[j * 3 + b];
for (b = 0; b < dest_bytes; b++)
render_temp_buf[j * dest_bytes + b] = cb[j * 3 + b];
src += rowstride;
}
else
{
for (j = 0; j < dest_width; j++)
for (b = 0; b < PREVIEW_BYTES; b++)
render_temp_buf[j * PREVIEW_BYTES + b] = cb[j * 3 + b];
for (b = 0; b < dest_bytes; b++)
render_temp_buf[j * dest_bytes + b] = cb[j * 3 + b];
}
memcpy (dest_buffer + i * dest_rowstride,
render_temp_buf,
dest_width * PREVIEW_BYTES);
dest_width * dest_bytes);
}
}
@ -949,7 +941,8 @@ gimp_preview_renderer_render_preview (GimpPreviewRenderer *renderer,
renderer->buffer,
renderer->width,
renderer->height,
renderer->rowstride);
renderer->rowstride,
renderer->bytes);
renderer->needs_render = FALSE;
}

View file

@ -55,6 +55,7 @@ struct _GimpPreviewRenderer
/*< private >*/
guchar *buffer;
gint rowstride;
gint bytes;
GdkPixbuf *no_preview_pixbuf;
@ -124,7 +125,8 @@ void gimp_preview_render_to_buffer (TempBuf *temp_buf,
guchar *dest_buffer,
gint dest_width,
gint dest_height,
gint dest_rowstride);
gint dest_rowstride,
gint dest_bytes);
void gimp_preview_renderer_render_preview (GimpPreviewRenderer *renderer,
TempBuf *temp_buf,
gint channel,

View file

@ -174,11 +174,17 @@ gimp_preview_renderer_brush_render (GimpPreviewRenderer *renderer,
return;
}
gimp_preview_renderer_render_preview (renderer, temp_buf, -1,
GIMP_PREVIEW_BG_WHITE,
GIMP_PREVIEW_BG_WHITE);
temp_buf_free (temp_buf);
#define INDICATOR_WIDTH 7
#define INDICATOR_HEIGHT 7
if (temp_buf->width >= INDICATOR_WIDTH &&
temp_buf->height >= INDICATOR_HEIGHT &&
if (renderer->width >= INDICATOR_WIDTH * 2 &&
renderer->height >= INDICATOR_HEIGHT * 2&&
(renderer->width < brush_width ||
renderer->height < brush_height ||
GIMP_IS_BRUSH_PIPE (brush)))
@ -225,6 +231,7 @@ gimp_preview_renderer_brush_render (GimpPreviewRenderer *renderer,
#undef RED
guchar *buf;
guchar *b;
gint x, y;
gint offset_x;
gint offset_y;
@ -232,60 +239,55 @@ gimp_preview_renderer_brush_render (GimpPreviewRenderer *renderer,
gboolean pipe;
gboolean scale;
buf = temp_buf_data (temp_buf);
offset_x = renderer->width - INDICATOR_WIDTH;
offset_y = renderer->height - INDICATOR_HEIGHT;
offset_x = temp_buf->width - INDICATOR_WIDTH;
offset_y = temp_buf->height - INDICATOR_HEIGHT;
buf += (offset_y * temp_buf->width + offset_x) * temp_buf->bytes;
buf = renderer->buffer + (offset_y * renderer->rowstride +
offset_x * renderer->bytes);
pipe = GIMP_IS_BRUSH_PIPE (brush);
scale = (renderer->width < brush_width ||
renderer->height < brush_height);
alpha = (temp_buf->bytes == 4);
alpha = (renderer->bytes == 4);
for (y = 0; y < INDICATOR_HEIGHT; y++)
{
b = buf;
for (x = 0; x < INDICATOR_WIDTH; x++)
{
if (scale)
{
if (pipe)
{
*buf++ = scale_pipe_indicator_bits[y][x][0];
*buf++ = scale_pipe_indicator_bits[y][x][1];
*buf++ = scale_pipe_indicator_bits[y][x][2];
*b++ = scale_pipe_indicator_bits[y][x][0];
*b++ = scale_pipe_indicator_bits[y][x][1];
*b++ = scale_pipe_indicator_bits[y][x][2];
}
else
{
*buf++ = scale_indicator_bits[y][x][0];
*buf++ = scale_indicator_bits[y][x][1];
*buf++ = scale_indicator_bits[y][x][2];
*b++ = scale_indicator_bits[y][x][0];
*b++ = scale_indicator_bits[y][x][1];
*b++ = scale_indicator_bits[y][x][2];
}
}
else if (pipe)
{
*buf++ = pipe_indicator_bits[y][x][0];
*buf++ = pipe_indicator_bits[y][x][1];
*buf++ = pipe_indicator_bits[y][x][2];
*b++ = pipe_indicator_bits[y][x][0];
*b++ = pipe_indicator_bits[y][x][1];
*b++ = pipe_indicator_bits[y][x][2];
}
if (alpha)
*buf++ = 255;
*b++ = 255;
}
buf += (temp_buf->width - INDICATOR_WIDTH) * temp_buf->bytes;
buf += renderer->rowstride;
}
}
#undef INDICATOR_WIDTH
#undef INDICATOR_HEIGHT
gimp_preview_renderer_render_preview (renderer, temp_buf, -1,
GIMP_PREVIEW_BG_WHITE,
GIMP_PREVIEW_BG_WHITE);
temp_buf_free (temp_buf);
}
static gboolean