summaryrefslogtreecommitdiff
path: root/src/glitz_trap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glitz_trap.c')
-rw-r--r--src/glitz_trap.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/glitz_trap.c b/src/glitz_trap.c
index 0170161..ab1100f 100644
--- a/src/glitz_trap.c
+++ b/src/glitz_trap.c
@@ -187,7 +187,7 @@ glitz_composite_trapezoids (glitz_operator_t op,
int width, height;
if (n_traps == 0)
- return;
+ return;
x_dst = traps[0].left.p1.x >> 16;
y_dst = traps[0].left.p1.y >> 16;
@@ -238,6 +238,17 @@ glitz_composite_trapezoids (glitz_operator_t op,
mask, -bounds.x1, -bounds.y1,
&color, traps, n_traps);
+ if (dst->polyopacity != 0xffff) {
+ glitz_rectangle_t rect;
+ glitz_color_t color;
+
+ rect.x = rect.y = 0;
+ rect.width = mask->width;
+ rect.height = mask->height;
+ color.red = color.green = color.blue = color.alpha = dst->polyopacity;
+ glitz_int_fill_rectangles (GLITZ_OPERATOR_IN, mask, &color, &rect, 1);
+ }
+
glitz_surface_dirty (mask, NULL);
glitz_surface_pop_current (mask);
@@ -267,7 +278,14 @@ glitz_composite_trapezoids (glitz_operator_t op,
y_offset = trap_bounds.y1;
width = trap_bounds.x2 - trap_bounds.x1;
height = trap_bounds.y2 - trap_bounds.y1;
- mask = NULL;
+
+ if (dst->polyopacity != 0xffff) {
+ glitz_color_t color;
+
+ color.red = color.green = color.blue = color.alpha = dst->polyopacity;
+ mask = glitz_surface_create_solid (&color);
+ } else
+ mask = NULL;
}
glitz_composite (op,
@@ -280,9 +298,10 @@ glitz_composite_trapezoids (glitz_operator_t op,
x_offset, y_offset,
width, height);
- if (use_mask) {
+ if (mask)
glitz_surface_destroy (mask);
- } else {
+
+ if (!use_mask) {
glitz_int_clip_operator_t clip_op;
static glitz_rectangle_t rect = { 0, 0, MAXSHORT, MAXSHORT };