mirror of https://github.com/GNOME/gimp.git
factored out common code. Reduced indentation level by closing a switch
2004-09-08 Sven Neumann <sven@gimp.org> * libgimpwidgets/gimppreviewarea.c: factored out common code. Reduced indentation level by closing a switch earlier.
This commit is contained in:
parent
c59a6de934
commit
1a9fdcda80
|
@ -1,6 +1,11 @@
|
|||
2004-09-08 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* libgimpwidgets/gimppreviewarea.c: factored out common code.
|
||||
Reduced indentation level by closing a switch earlier.
|
||||
|
||||
2004-09-08 DindinX <david@dindinx.org>
|
||||
|
||||
* libgimpwidgets/gimppreviewarea.c: (gimp_preview_area_blend)
|
||||
* libgimpwidgets/gimppreviewarea.c: (gimp_preview_area_blend)
|
||||
use gimp_preview_area_draw when the opacity is 0 or 255, instead of
|
||||
duplicating code.
|
||||
|
||||
|
|
|
@ -66,6 +66,11 @@ static gboolean gimp_preview_area_expose (GtkWidget *widget,
|
|||
static GtkDrawingAreaClass *parent_class = NULL;
|
||||
|
||||
|
||||
#define CHECK_COLOR(area, row, col) \
|
||||
(((((area)->offset_y + (row)) & size) ^ \
|
||||
(((area)->offset_x + (col)) & size)) ? dark : light)
|
||||
|
||||
|
||||
GType
|
||||
gimp_preview_area_get_type (void)
|
||||
{
|
||||
|
@ -259,6 +264,30 @@ gimp_preview_area_expose (GtkWidget *widget,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static gint
|
||||
gimp_preview_area_image_type_bytes (GimpImageType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case GIMP_GRAY_IMAGE:
|
||||
case GIMP_INDEXED_IMAGE:
|
||||
return 1;
|
||||
|
||||
case GIMP_GRAYA_IMAGE:
|
||||
case GIMP_INDEXEDA_IMAGE:
|
||||
return 2;
|
||||
|
||||
case GIMP_RGB_IMAGE:
|
||||
return 3;
|
||||
|
||||
case GIMP_RGBA_IMAGE:
|
||||
return 4;
|
||||
|
||||
default:
|
||||
g_return_val_if_reached (0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_preview_area_new:
|
||||
|
@ -320,31 +349,11 @@ gimp_preview_area_draw (GimpPreviewArea *area,
|
|||
|
||||
if (x < 0)
|
||||
{
|
||||
gint bpp;
|
||||
gint bpp = gimp_preview_area_image_type_bytes (type);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case GIMP_GRAY_IMAGE:
|
||||
case GIMP_INDEXED_IMAGE:
|
||||
bpp = 1;
|
||||
break;
|
||||
case GIMP_GRAYA_IMAGE:
|
||||
case GIMP_INDEXEDA_IMAGE:
|
||||
bpp = 2;
|
||||
break;
|
||||
case GIMP_RGB_IMAGE:
|
||||
bpp = 3;
|
||||
break;
|
||||
case GIMP_RGBA_IMAGE:
|
||||
bpp = 4;
|
||||
break;
|
||||
default:
|
||||
g_return_if_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
buf += x * bpp;
|
||||
buf += x * bpp;
|
||||
width -= x;
|
||||
|
||||
x = 0;
|
||||
}
|
||||
|
||||
|
@ -353,8 +362,9 @@ gimp_preview_area_draw (GimpPreviewArea *area,
|
|||
|
||||
if (y < 0)
|
||||
{
|
||||
buf += y * rowstride;
|
||||
buf += y * rowstride;
|
||||
height -= y;
|
||||
|
||||
y = 0;
|
||||
}
|
||||
|
||||
|
@ -370,10 +380,6 @@ gimp_preview_area_draw (GimpPreviewArea *area,
|
|||
size = 1 << (2 + area->check_size);
|
||||
gimp_checks_get_shades (area->check_type, &light, &dark);
|
||||
|
||||
#define CHECK_COLOR(area, row, col) \
|
||||
(((((area)->offset_y + (row)) & size) ^ \
|
||||
(((area)->offset_x + (col)) & size)) ? dark : light)
|
||||
|
||||
src = buf;
|
||||
dest = area->buf + x * 3 + y * area->rowstride;
|
||||
|
||||
|
@ -608,303 +614,292 @@ gimp_preview_area_blend (GimpPreviewArea *area,
|
|||
return;
|
||||
|
||||
default:
|
||||
if (x + width < 0 || x >= area->width)
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
if (y + height < 0 || y >= area->height)
|
||||
return;
|
||||
if (x + width < 0 || x >= area->width)
|
||||
return;
|
||||
|
||||
if (x < 0)
|
||||
if (y + height < 0 || y >= area->height)
|
||||
return;
|
||||
|
||||
if (x < 0)
|
||||
{
|
||||
gint bpp = gimp_preview_area_image_type_bytes (type);
|
||||
|
||||
buf1 += x * bpp;
|
||||
buf2 += x * bpp;
|
||||
width -= x;
|
||||
|
||||
x = 0;
|
||||
}
|
||||
|
||||
if (x + width > area->width)
|
||||
width = area->width - x;
|
||||
|
||||
if (y < 0)
|
||||
{
|
||||
buf1 += y * rowstride1;
|
||||
buf2 += y * rowstride2;
|
||||
height -= y;
|
||||
|
||||
y = 0;
|
||||
}
|
||||
|
||||
if (y + height > area->height)
|
||||
height = area->height - y;
|
||||
|
||||
if (! area->buf)
|
||||
{
|
||||
area->rowstride = ((area->width * 3) + 3) & ~3;
|
||||
area->buf = g_new (guchar, area->rowstride * area->height);
|
||||
}
|
||||
|
||||
size = 1 << (2 + area->check_size);
|
||||
gimp_checks_get_shades (area->check_type, &light, &dark);
|
||||
|
||||
src1 = buf1;
|
||||
src2 = buf2;
|
||||
dest = area->buf + x * 3 + y * area->rowstride;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case GIMP_RGB_IMAGE:
|
||||
for (row = 0; row < height; row++)
|
||||
{
|
||||
gint bpp;
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
|
||||
switch (type)
|
||||
for (col = x; col < x + width; col++, s1 += 3, s2 += 3, d+= 3)
|
||||
{
|
||||
case GIMP_GRAY_IMAGE:
|
||||
case GIMP_INDEXED_IMAGE:
|
||||
bpp = 1;
|
||||
break;
|
||||
case GIMP_GRAYA_IMAGE:
|
||||
case GIMP_INDEXEDA_IMAGE:
|
||||
bpp = 2;
|
||||
break;
|
||||
case GIMP_RGB_IMAGE:
|
||||
bpp = 3;
|
||||
break;
|
||||
case GIMP_RGBA_IMAGE:
|
||||
bpp = 4;
|
||||
break;
|
||||
default:
|
||||
g_return_if_reached ();
|
||||
break;
|
||||
d[0] = ((s1[0] << 8) + (s2[0] - s1[0]) * opacity) >> 8;
|
||||
d[1] = ((s1[1] << 8) + (s2[1] - s1[1]) * opacity) >> 8;
|
||||
d[2] = ((s1[2] << 8) + (s2[2] - s1[2]) * opacity) >> 8;
|
||||
}
|
||||
|
||||
buf1 += x * bpp;
|
||||
buf2 += x * bpp;
|
||||
width -= x;
|
||||
x = 0;
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
if (x + width > area->width)
|
||||
width = area->width - x;
|
||||
|
||||
if (y < 0)
|
||||
case GIMP_RGBA_IMAGE:
|
||||
for (row = y; row < y + height; row++)
|
||||
{
|
||||
buf1 += y * rowstride1;
|
||||
buf2 += y * rowstride2;
|
||||
height -= y;
|
||||
y = 0;
|
||||
}
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
|
||||
if (y + height > area->height)
|
||||
height = area->height - y;
|
||||
|
||||
if (! area->buf)
|
||||
{
|
||||
area->rowstride = ((area->width * 3) + 3) & ~3;
|
||||
area->buf = g_new (guchar, area->rowstride * area->height);
|
||||
}
|
||||
|
||||
size = 1 << (2 + area->check_size);
|
||||
gimp_checks_get_shades (area->check_type, &light, &dark);
|
||||
|
||||
#define CHECK_COLOR(area, row, col) \
|
||||
(((((area)->offset_y + (row)) & size) ^ \
|
||||
(((area)->offset_x + (col)) & size)) ? dark : light)
|
||||
|
||||
src1 = buf1;
|
||||
src2 = buf2;
|
||||
dest = area->buf + x * 3 + y * area->rowstride;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case GIMP_RGB_IMAGE:
|
||||
for (row = 0; row < height; row++)
|
||||
for (col = x; col < x + width; col++, s1 += 4, s2 += 4, d+= 3)
|
||||
{
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
guchar inter[4];
|
||||
|
||||
for (col = x; col < x + width; col++, s1 += 3, s2 += 3, d+= 3)
|
||||
inter[3] = ((s1[3] << 8) + (s2[3] - s1[3]) * opacity) >> 8;
|
||||
|
||||
if (inter[3])
|
||||
{
|
||||
d[0] = ((s1[0] << 8) + (s2[0] - s1[0]) * opacity) >> 8;
|
||||
d[1] = ((s1[1] << 8) + (s2[1] - s1[1]) * opacity) >> 8;
|
||||
d[2] = ((s1[2] << 8) + (s2[2] - s1[2]) * opacity) >> 8;
|
||||
}
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_RGBA_IMAGE:
|
||||
for (row = y; row < y + height; row++)
|
||||
{
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
|
||||
for (col = x; col < x + width; col++, s1 += 4, s2 += 4, d+= 3)
|
||||
{
|
||||
guchar inter[4];
|
||||
|
||||
inter[3] = ((s1[3] << 8) + (s2[3] - s1[3]) * opacity) >> 8;
|
||||
|
||||
if (inter[3])
|
||||
for (i=0 ; i<3 ; i++)
|
||||
{
|
||||
for (i=0 ; i<3 ; i++)
|
||||
{
|
||||
gushort a = s1[i] * s1[3];
|
||||
gushort b = s2[i] * s2[3];
|
||||
gushort a = s1[i] * s1[3];
|
||||
gushort b = s2[i] * s2[3];
|
||||
|
||||
inter[i] = (((a << 8) + (b - a) * opacity) >> 8) / inter[3];
|
||||
}
|
||||
}
|
||||
else
|
||||
inter[0] = inter[1] = inter[2] = 0;
|
||||
|
||||
switch (inter[3])
|
||||
{
|
||||
case 0:
|
||||
d[0] = d[1] = d[2] = CHECK_COLOR (area, row, col);
|
||||
break;
|
||||
|
||||
case 255:
|
||||
d[0] = inter[0];
|
||||
d[1] = inter[1];
|
||||
d[2] = inter[2];
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
register guint alpha = inter[3] + 1;
|
||||
register guint check = CHECK_COLOR (area, row, col);
|
||||
|
||||
d[0] = ((check << 8) + (inter[0] - check) * alpha) >> 8;
|
||||
d[1] = ((check << 8) + (inter[1] - check) * alpha) >> 8;
|
||||
d[2] = ((check << 8) + (inter[2] - check) * alpha) >> 8;
|
||||
}
|
||||
break;
|
||||
inter[i] =
|
||||
(((a << 8) + (b - a) * opacity) >> 8) / inter[3];
|
||||
}
|
||||
}
|
||||
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_GRAY_IMAGE:
|
||||
for (row = 0; row < height; row++)
|
||||
{
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
|
||||
for (col = 0; col < width; col++, s1++, s2++, d += 3)
|
||||
else
|
||||
{
|
||||
d[0] = d[1] = d[2] = ((s1[0] << 8) + (s2[0] - s1[0]) * opacity) >> 8;
|
||||
inter[0] = inter[1] = inter[2] = 0;
|
||||
}
|
||||
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_GRAYA_IMAGE:
|
||||
for (row = y; row < y + height; row++)
|
||||
{
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
|
||||
for (col = x; col < x + width; col++, s1 += 2, s2 += 2, d+= 3)
|
||||
switch (inter[3])
|
||||
{
|
||||
guchar inter[1];
|
||||
case 0:
|
||||
d[0] = d[1] = d[2] = CHECK_COLOR (area, row, col);
|
||||
break;
|
||||
|
||||
inter[1] = ((s1[1] << 8) + (s2[1] - s1[1]) * opacity) >> 8;
|
||||
case 255:
|
||||
d[0] = inter[0];
|
||||
d[1] = inter[1];
|
||||
d[2] = inter[2];
|
||||
break;
|
||||
|
||||
if (inter[1])
|
||||
{
|
||||
gushort a = s1[0] * s1[1];
|
||||
gushort b = s2[0] * s2[1];
|
||||
|
||||
inter[0] = (((a << 8) + (b - a) * opacity) >> 8) / inter[1];
|
||||
}
|
||||
else
|
||||
inter[0] = 0;
|
||||
|
||||
switch (inter[1])
|
||||
default:
|
||||
{
|
||||
case 0:
|
||||
d[0] = d[1] = d[2] = CHECK_COLOR (area, row, col);
|
||||
break;
|
||||
register guint alpha = inter[3] + 1;
|
||||
register guint check = CHECK_COLOR (area, row, col);
|
||||
|
||||
case 255:
|
||||
d[0] = d[1] = d[2] = inter[0];
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
register guint alpha = inter[1] + 1;
|
||||
register guint check = CHECK_COLOR (area, row, col);
|
||||
|
||||
d[0] = d[1] = d[2] = ((check << 8) + (inter[0] - check) * alpha) >> 8;
|
||||
}
|
||||
break;
|
||||
d[0] = ((check << 8) + (inter[0] - check) * alpha) >> 8;
|
||||
d[1] = ((check << 8) + (inter[1] - check) * alpha) >> 8;
|
||||
d[2] = ((check << 8) + (inter[2] - check) * alpha) >> 8;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_GRAY_IMAGE:
|
||||
for (row = 0; row < height; row++)
|
||||
{
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
|
||||
for (col = 0; col < width; col++, s1++, s2++, d += 3)
|
||||
{
|
||||
d[0] = d[1] = d[2] =
|
||||
((s1[0] << 8) + (s2[0] - s1[0]) * opacity) >> 8;
|
||||
}
|
||||
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_GRAYA_IMAGE:
|
||||
for (row = y; row < y + height; row++)
|
||||
{
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
|
||||
for (col = x; col < x + width; col++, s1 += 2, s2 += 2, d+= 3)
|
||||
{
|
||||
guchar inter[1];
|
||||
|
||||
inter[1] = ((s1[1] << 8) + (s2[1] - s1[1]) * opacity) >> 8;
|
||||
|
||||
if (inter[1])
|
||||
{
|
||||
gushort a = s1[0] * s1[1];
|
||||
gushort b = s2[0] * s2[1];
|
||||
|
||||
inter[0] = (((a << 8) + (b - a) * opacity) >> 8) / inter[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
inter[0] = 0;
|
||||
}
|
||||
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_INDEXED_IMAGE:
|
||||
g_return_if_fail (area->cmap != NULL);
|
||||
for (row = 0; row < height; row++)
|
||||
{
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
|
||||
for (col = 0; col < width; col++, s1++, s2++, d += 3)
|
||||
switch (inter[1])
|
||||
{
|
||||
const guchar *cmap1 = area->cmap + 3 * s1[0];
|
||||
const guchar *cmap2 = area->cmap + 3 * s2[0];
|
||||
case 0:
|
||||
d[0] = d[1] = d[2] = CHECK_COLOR (area, row, col);
|
||||
break;
|
||||
|
||||
d[0] = ((cmap1[0] << 8) + (cmap2[0] - cmap1[0]) * opacity) >> 8;
|
||||
d[1] = ((cmap1[1] << 8) + (cmap2[1] - cmap1[1]) * opacity) >> 8;
|
||||
d[2] = ((cmap1[2] << 8) + (cmap2[2] - cmap1[2]) * opacity) >> 8;
|
||||
}
|
||||
case 255:
|
||||
d[0] = d[1] = d[2] = inter[0];
|
||||
break;
|
||||
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_INDEXEDA_IMAGE:
|
||||
g_return_if_fail (area->cmap != NULL);
|
||||
for (row = y; row < y + height; row++)
|
||||
{
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
|
||||
for (col = x; col < x + width; col++, s1 += 2, s2 += 2, d += 3)
|
||||
{
|
||||
const guchar *cmap1 = area->cmap + 3 * s1[0];
|
||||
const guchar *cmap2 = area->cmap + 3 * s2[0];
|
||||
guchar inter[4];
|
||||
|
||||
inter[3] = ((s1[1] << 8) + (s2[1] - s1[1]) * opacity) >> 8;
|
||||
|
||||
if (inter[3])
|
||||
{
|
||||
for (i = 0 ; i < 3 ; i++)
|
||||
{
|
||||
gushort a = cmap1[i] * s1[1];
|
||||
gushort b = cmap2[i] * s2[1];
|
||||
|
||||
inter[i] = (((a << 8) + (b - a) * opacity) >> 8) / inter[3];
|
||||
}
|
||||
}
|
||||
else
|
||||
inter[0] = inter[1] = inter[2] = 0;
|
||||
|
||||
switch (inter[3])
|
||||
default:
|
||||
{
|
||||
case 0:
|
||||
d[0] = d[1] = d[2] = CHECK_COLOR (area, row, col);
|
||||
break;
|
||||
register guint alpha = inter[1] + 1;
|
||||
register guint check = CHECK_COLOR (area, row, col);
|
||||
|
||||
case 255:
|
||||
d[0] = inter[0];
|
||||
d[1] = inter[1];
|
||||
d[2] = inter[2];
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
register guint alpha = inter[3] + 1;
|
||||
register guint check = CHECK_COLOR (area, row, col);
|
||||
|
||||
d[0] = ((check << 8) + (inter[0] - check) * alpha) >> 8;
|
||||
d[1] = ((check << 8) + (inter[1] - check) * alpha) >> 8;
|
||||
d[2] = ((check << 8) + (inter[2] - check) * alpha) >> 8;
|
||||
}
|
||||
break;
|
||||
d[0] = d[1] = d[2] =
|
||||
((check << 8) + (inter[0] - check) * alpha) >> 8;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_INDEXED_IMAGE:
|
||||
g_return_if_fail (area->cmap != NULL);
|
||||
for (row = 0; row < height; row++)
|
||||
{
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
|
||||
for (col = 0; col < width; col++, s1++, s2++, d += 3)
|
||||
{
|
||||
const guchar *cmap1 = area->cmap + 3 * s1[0];
|
||||
const guchar *cmap2 = area->cmap + 3 * s2[0];
|
||||
|
||||
d[0] = ((cmap1[0] << 8) + (cmap2[0] - cmap1[0]) * opacity) >> 8;
|
||||
d[1] = ((cmap1[1] << 8) + (cmap2[1] - cmap1[1]) * opacity) >> 8;
|
||||
d[2] = ((cmap1[2] << 8) + (cmap2[2] - cmap1[2]) * opacity) >> 8;
|
||||
}
|
||||
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_INDEXEDA_IMAGE:
|
||||
g_return_if_fail (area->cmap != NULL);
|
||||
for (row = y; row < y + height; row++)
|
||||
{
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
guchar *d = dest;
|
||||
|
||||
for (col = x; col < x + width; col++, s1 += 2, s2 += 2, d += 3)
|
||||
{
|
||||
const guchar *cmap1 = area->cmap + 3 * s1[0];
|
||||
const guchar *cmap2 = area->cmap + 3 * s2[0];
|
||||
guchar inter[4];
|
||||
|
||||
inter[3] = ((s1[1] << 8) + (s2[1] - s1[1]) * opacity) >> 8;
|
||||
|
||||
if (inter[3])
|
||||
{
|
||||
for (i = 0 ; i < 3 ; i++)
|
||||
{
|
||||
gushort a = cmap1[i] * s1[1];
|
||||
gushort b = cmap2[i] * s2[1];
|
||||
|
||||
inter[i] =
|
||||
(((a << 8) + (b - a) * opacity) >> 8) / inter[3];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
inter[0] = inter[1] = inter[2] = 0;
|
||||
}
|
||||
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
switch (inter[3])
|
||||
{
|
||||
case 0:
|
||||
d[0] = d[1] = d[2] = CHECK_COLOR (area, row, col);
|
||||
break;
|
||||
|
||||
case 255:
|
||||
d[0] = inter[0];
|
||||
d[1] = inter[1];
|
||||
d[2] = inter[2];
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
register guint alpha = inter[3] + 1;
|
||||
register guint check = CHECK_COLOR (area, row, col);
|
||||
|
||||
d[0] = ((check << 8) + (inter[0] - check) * alpha) >> 8;
|
||||
d[1] = ((check << 8) + (inter[1] - check) * alpha) >> 8;
|
||||
d[2] = ((check << 8) + (inter[2] - check) * alpha) >> 8;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -977,33 +972,13 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
|
||||
if (x < 0)
|
||||
{
|
||||
gint bpp;
|
||||
gint bpp = gimp_preview_area_image_type_bytes (type);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case GIMP_GRAY_IMAGE:
|
||||
case GIMP_INDEXED_IMAGE:
|
||||
bpp = 1;
|
||||
break;
|
||||
case GIMP_GRAYA_IMAGE:
|
||||
case GIMP_INDEXEDA_IMAGE:
|
||||
bpp = 2;
|
||||
break;
|
||||
case GIMP_RGB_IMAGE:
|
||||
bpp = 3;
|
||||
break;
|
||||
case GIMP_RGBA_IMAGE:
|
||||
bpp = 4;
|
||||
break;
|
||||
default:
|
||||
g_return_if_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
buf1 += x * bpp;
|
||||
buf2 += x * bpp;
|
||||
mask += x;
|
||||
buf1 += x * bpp;
|
||||
buf2 += x * bpp;
|
||||
mask += x;
|
||||
width -= x;
|
||||
|
||||
x = 0;
|
||||
}
|
||||
|
||||
|
@ -1012,10 +987,11 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
|
||||
if (y < 0)
|
||||
{
|
||||
buf1 += y * rowstride1;
|
||||
buf2 += y * rowstride2;
|
||||
mask += y * rowstride_mask;
|
||||
buf1 += y * rowstride1;
|
||||
buf2 += y * rowstride2;
|
||||
mask += y * rowstride_mask;
|
||||
height -= y;
|
||||
|
||||
y = 0;
|
||||
}
|
||||
|
||||
|
@ -1031,14 +1007,10 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
size = 1 << (2 + area->check_size);
|
||||
gimp_checks_get_shades (area->check_type, &light, &dark);
|
||||
|
||||
#define CHECK_COLOR(area, row, col) \
|
||||
(((((area)->offset_y + (row)) & size) ^ \
|
||||
(((area)->offset_x + (col)) & size)) ? dark : light)
|
||||
|
||||
src1 = buf1;
|
||||
src2 = buf2;
|
||||
src_mask = mask;
|
||||
dest = area->buf + x * 3 + y * area->rowstride;
|
||||
dest = area->buf + x * 3 + y * area->rowstride;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
|
@ -1059,7 +1031,7 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
src_mask += rowstride_mask;
|
||||
dest += area->rowstride;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1140,7 +1112,8 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
gushort a = s1[i] * s1[3];
|
||||
gushort b = s2[i] * s2[3];
|
||||
|
||||
inter[i] = (((a << 8) + (b - a) * m[0]) >> 8) / inter[3];
|
||||
inter[i] =
|
||||
(((a << 8) + (b - a) * m[0]) >> 8) / inter[3];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1175,7 +1148,7 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
src_mask += rowstride_mask;
|
||||
dest += area->rowstride;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1195,12 +1168,12 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
src_mask += rowstride_mask;
|
||||
dest += area->rowstride;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
case GIMP_GRAYA_IMAGE:
|
||||
for (row = y; row < y + height; row++)
|
||||
for (row = y; row < y + height; row++)
|
||||
{
|
||||
const guchar *s1 = src1;
|
||||
const guchar *s2 = src2;
|
||||
|
@ -1268,10 +1241,13 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
gushort a = s1[0] * s1[1];
|
||||
gushort b = s2[0] * s2[1];
|
||||
|
||||
inter[0] = (((a << 8) + (b - a) * m[0]) >> 8) / inter[1];
|
||||
inter[0] =
|
||||
(((a << 8) + (b - a) * m[0]) >> 8) / inter[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
inter[0] = 0;
|
||||
}
|
||||
else
|
||||
inter[0] = 0;
|
||||
|
||||
switch (inter[1])
|
||||
{
|
||||
|
@ -1288,7 +1264,8 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
register guint alpha = inter[1] + 1;
|
||||
register guint check = CHECK_COLOR (area, row, col);
|
||||
|
||||
d[0] = d[1] = d[2] = ((check << 8) + (inter[0] - check) * alpha) >> 8;
|
||||
d[0] = d[1] = d[2] =
|
||||
((check << 8) + (inter[0] - check) * alpha) >> 8;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1300,7 +1277,7 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
src_mask += rowstride_mask;
|
||||
dest += area->rowstride;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1326,7 +1303,7 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
src_mask += rowstride_mask;
|
||||
dest += area->rowstride;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1411,11 +1388,14 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
gushort a = cmap1[i] * s1[1];
|
||||
gushort b = cmap2[i] * s2[1];
|
||||
|
||||
inter[i] = (((a << 8) + (b - a) * m[0]) >> 8) / inter[3];
|
||||
inter[i] =
|
||||
(((a << 8) + (b - a) * m[0]) >> 8) / inter[3];
|
||||
}
|
||||
}
|
||||
else
|
||||
inter[0] = inter[1] = inter[2] = 0;
|
||||
else
|
||||
{
|
||||
inter[0] = inter[1] = inter[2] = 0;
|
||||
}
|
||||
|
||||
switch (inter[3])
|
||||
{
|
||||
|
@ -1448,7 +1428,7 @@ gimp_preview_area_mask (GimpPreviewArea *area,
|
|||
src1 += rowstride1;
|
||||
src2 += rowstride2;
|
||||
src_mask += rowstride_mask;
|
||||
dest += area->rowstride;
|
||||
dest += area->rowstride;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -199,11 +199,12 @@ test_run (GtkWidget *area,
|
|||
gdk_flush ();
|
||||
total_time = g_timer_elapsed (timer, NULL) - start_time;
|
||||
g_print ("%-16s "
|
||||
"fill: %5.2fs, %8.1f fps, %8.2f megapixels/s\n",
|
||||
"fill : %5.2fs, %8.1f fps, %8.2f megapixels/s\n",
|
||||
"Color fill",
|
||||
total_time,
|
||||
num_iters / total_time,
|
||||
num_iters * (WIDTH * HEIGHT * 1e-6) / total_time);
|
||||
g_print ("\n");
|
||||
|
||||
g_free (buf);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue