13
0

use alpha value when drawing simplerect outline

git-svn-id: svn://localhost/ardour2/branches/3.0@9053 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2011-03-03 14:46:23 +00:00
parent 3225b24854
commit 9498b3bfe4
2 changed files with 52 additions and 49 deletions

View File

@ -531,7 +531,6 @@ static void
gnome_canvas_simplerect_update (GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags) gnome_canvas_simplerect_update (GnomeCanvasItem *item, double *affine, ArtSVP *clip_path, int flags)
{ {
GnomeCanvasSimpleRect *simplerect; GnomeCanvasSimpleRect *simplerect;
unsigned char foo;
simplerect = GNOME_CANVAS_SIMPLERECT (item); simplerect = GNOME_CANVAS_SIMPLERECT (item);
@ -550,7 +549,7 @@ gnome_canvas_simplerect_update (GnomeCanvasItem *item, double *affine, ArtSVP *c
} }
UINT_TO_RGBA (simplerect->fill_color, &simplerect->fill_r, &simplerect->fill_g, &simplerect->fill_b, &simplerect->fill_a); UINT_TO_RGBA (simplerect->fill_color, &simplerect->fill_r, &simplerect->fill_g, &simplerect->fill_b, &simplerect->fill_a);
UINT_TO_RGBA (simplerect->outline_color, &simplerect->outline_r, &simplerect->outline_g, &simplerect->outline_b, &foo); UINT_TO_RGBA (simplerect->outline_color, &simplerect->outline_r, &simplerect->outline_g, &simplerect->outline_b, &simplerect->outline_a);
} }
// this can be useful for debugging/understanding how the canvas redraws // this can be useful for debugging/understanding how the canvas redraws
@ -627,26 +626,28 @@ gnome_canvas_simplerect_render (GnomeCanvasItem *item,
} }
if (simplerect->outline_a > 0) {
for (i = 0; i < simplerect->outline_pixels; ++i) { for (i = 0; i < simplerect->outline_pixels; ++i) {
if (simplerect->outline_what & 0x1) { if (simplerect->outline_what & 0x1) {
if (begin == simplerect->bbox_ulx) { if (begin == simplerect->bbox_ulx) {
PAINT_VERT(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, begin + i, sy, ey); PAINT_VERTA(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, simplerect->outline_a, begin + i, sy, ey);
} }
} }
if (simplerect->outline_what & 0x2) { if (simplerect->outline_what & 0x2) {
if (end == (simplerect->bbox_lrx - 1)) { if (end == (simplerect->bbox_lrx - 1)) {
PAINT_VERT(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, end - i, sy, ey + 1); PAINT_VERTA(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, simplerect->outline_a, end - i, sy, ey + 1);
} }
} }
if (simplerect->outline_what & 0x4) { if (simplerect->outline_what & 0x4) {
PAINT_HORIZ(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, begin, end, sy+i); PAINT_HORIZA(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, simplerect->outline_a, begin, end, sy+i);
} }
if (simplerect->outline_what & 0x8) { if (simplerect->outline_what & 0x8) {
PAINT_HORIZ(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, begin, end + 1, ey-i); PAINT_HORIZA(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, simplerect->outline_a, begin, end + 1, ey-i);
}
} }
} }
} }
@ -660,7 +661,7 @@ gnome_canvas_simplerect_render (GnomeCanvasItem *item,
GnomeCanvasSimpleRect *simplerect; GnomeCanvasSimpleRect *simplerect;
int end, begin; int end, begin;
int ey, sy; int ey, sy;
unsigned int i; int i;
simplerect = GNOME_CANVAS_SIMPLERECT (item); simplerect = GNOME_CANVAS_SIMPLERECT (item);
@ -704,26 +705,28 @@ gnome_canvas_simplerect_render (GnomeCanvasItem *item,
#endif #endif
} }
for (i = 0; i < simplerect->outline_pixels; ++i) { if (simplerect->outline_a) {
for (i = 0; i < (int) simplerect->outline_pixels; ++i) {
if (simplerect->outline_what & 0x1) { if (simplerect->outline_what & 0x1) {
if (begin == simplerect->bbox_ulx) { if (begin == simplerect->bbox_ulx) {
PAINT_VERT(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, begin + i, sy, ey); PAINT_VERTA(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, simplerect->outline_a, begin + i, sy, ey);
} }
} }
if (simplerect->outline_what & 0x2) { if (simplerect->outline_what & 0x2) {
if (end == (simplerect->bbox_lrx - 1)) { if (end == (simplerect->bbox_lrx - 1)) {
PAINT_VERT(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, end - i, sy, ey + 1); PAINT_VERTA(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, simplerect->outline_a, end - i, sy, ey + 1);
} }
} }
if (simplerect->outline_what & 0x4) { if (simplerect->outline_what & 0x4) {
PAINT_HORIZ(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, begin, end, sy+i); PAINT_HORIZA(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, simplerect->outline_a, begin, end, sy+i);
} }
if (simplerect->outline_what & 0x8) { if (simplerect->outline_what & 0x8) {
PAINT_HORIZ(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, begin, end + 1, ey-i); PAINT_HORIZA(buf, simplerect->outline_r, simplerect->outline_g, simplerect->outline_b, simplerect->outline_a, begin, end + 1, ey-i);
}
} }
} }
} }

View File

@ -55,7 +55,7 @@ struct _GnomeCanvasSimpleRect
/* cached values set during update/used during render */ /* cached values set during update/used during render */
unsigned char fill_r, fill_b, fill_g, fill_a; unsigned char fill_r, fill_b, fill_g, fill_a;
unsigned char outline_r, outline_b, outline_g; unsigned char outline_r, outline_b, outline_g, outline_a;
unsigned char outline_what; unsigned char outline_what;
gint32 bbox_ulx, bbox_uly; gint32 bbox_ulx, bbox_uly;
gint32 bbox_lrx, bbox_lry; gint32 bbox_lrx, bbox_lry;