mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-01-06 12:00:22 +01:00
pattern: remove content field from solid patterns
The content field in solid patterns had ill-defined semantic (or no semantic at all), thus it can be removed.
This commit is contained in:
parent
7461947eb1
commit
baaf312e04
10 changed files with 47 additions and 55 deletions
|
|
@ -210,3 +210,19 @@ _cairo_color_stop_equal (const cairo_color_stop_t *color_a,
|
|||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
cairo_content_t
|
||||
_cairo_color_get_content (const cairo_color_t *color)
|
||||
{
|
||||
if (CAIRO_COLOR_IS_OPAQUE (color))
|
||||
return CAIRO_CONTENT_COLOR;
|
||||
|
||||
if (color->red_short == 0 &&
|
||||
color->green_short == 0 &&
|
||||
color->blue_short == 0)
|
||||
{
|
||||
return CAIRO_CONTENT_ALPHA;
|
||||
}
|
||||
|
||||
return CAIRO_CONTENT_COLOR_ALPHA;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1022,7 +1022,7 @@ _cairo_gl_surface_fill_rectangles (void *abstract_dst,
|
|||
if (unlikely (status))
|
||||
goto CLEANUP;
|
||||
|
||||
_cairo_pattern_init_solid (&solid, color, CAIRO_CONTENT_COLOR_ALPHA);
|
||||
_cairo_pattern_init_solid (&solid, color);
|
||||
status = _cairo_gl_composite_set_source (&setup, &solid.base,
|
||||
0, 0,
|
||||
0, 0,
|
||||
|
|
|
|||
|
|
@ -415,8 +415,7 @@ _cairo_gstate_get_source (cairo_gstate_t *gstate)
|
|||
{
|
||||
if (gstate->source == &_cairo_pattern_black.base) {
|
||||
/* do not expose the static object to the user */
|
||||
gstate->source = _cairo_pattern_create_solid (CAIRO_COLOR_BLACK,
|
||||
CAIRO_CONTENT_COLOR);
|
||||
gstate->source = _cairo_pattern_create_solid (CAIRO_COLOR_BLACK);
|
||||
}
|
||||
|
||||
return gstate->source;
|
||||
|
|
@ -861,7 +860,7 @@ _init_solid_for_color_stop (cairo_solid_pattern_t *solid,
|
|||
color->green,
|
||||
color->blue,
|
||||
color->alpha);
|
||||
_cairo_pattern_init_solid (solid, &premult, CAIRO_CONTENT_COLOR_ALPHA);
|
||||
_cairo_pattern_init_solid (solid, &premult);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -884,8 +883,7 @@ _cairo_gstate_copy_pattern (cairo_pattern_t *pattern,
|
|||
if (_cairo_surface_get_extents (surface->surface, &extents) &&
|
||||
(extents.width == 0 || extents.height == 0)) {
|
||||
_cairo_pattern_init_solid ((cairo_solid_pattern_t *) pattern,
|
||||
CAIRO_COLOR_TRANSPARENT,
|
||||
surface->surface->content);
|
||||
CAIRO_COLOR_TRANSPARENT);
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
@ -904,8 +902,7 @@ _cairo_gstate_copy_pattern (cairo_pattern_t *pattern,
|
|||
&src->stops->color);
|
||||
} else {
|
||||
_cairo_pattern_init_solid ((cairo_solid_pattern_t *) pattern,
|
||||
CAIRO_COLOR_TRANSPARENT,
|
||||
CAIRO_CONTENT_ALPHA);
|
||||
CAIRO_COLOR_TRANSPARENT);
|
||||
}
|
||||
|
||||
return;
|
||||
|
|
@ -1147,8 +1144,7 @@ _cairo_gstate_mask (cairo_gstate_t *gstate,
|
|||
_cairo_color_multiply_alpha (&combined, mask_pattern.solid.color.alpha);
|
||||
}
|
||||
|
||||
_cairo_pattern_init_solid (&source_pattern.solid, &combined,
|
||||
solid->content | mask_pattern.solid.content);
|
||||
_cairo_pattern_init_solid (&source_pattern.solid, &combined);
|
||||
|
||||
status = _cairo_surface_paint (gstate->target, op,
|
||||
&source_pattern.base,
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@ const cairo_solid_pattern_t _cairo_pattern_black = {
|
|||
CAIRO_FILTER_DEFAULT, /* filter */
|
||||
CAIRO_EXTEND_GRADIENT_DEFAULT}, /* extend */
|
||||
{ 0., 0., 0., 1., 0, 0, 0, 0xffff },/* color (double rgba, short rgba) */
|
||||
CAIRO_CONTENT_COLOR, /* content */
|
||||
};
|
||||
|
||||
const cairo_solid_pattern_t _cairo_pattern_clear = {
|
||||
|
|
@ -77,7 +76,6 @@ const cairo_solid_pattern_t _cairo_pattern_clear = {
|
|||
CAIRO_FILTER_DEFAULT, /* filter */
|
||||
CAIRO_EXTEND_GRADIENT_DEFAULT}, /* extend */
|
||||
{ 0., 0., 0., 0., 0, 0, 0, 0 },/* color (double rgba, short rgba) */
|
||||
CAIRO_CONTENT_ALPHA, /* content */
|
||||
};
|
||||
|
||||
const cairo_solid_pattern_t _cairo_pattern_white = {
|
||||
|
|
@ -89,7 +87,6 @@ const cairo_solid_pattern_t _cairo_pattern_white = {
|
|||
CAIRO_FILTER_DEFAULT, /* filter */
|
||||
CAIRO_EXTEND_GRADIENT_DEFAULT}, /* extend */
|
||||
{ 1., 1., 1., 1., 0xffff, 0xffff, 0xffff, 0xffff },/* color (double rgba, short rgba) */
|
||||
CAIRO_CONTENT_COLOR_ALPHA, /* content */
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -420,15 +417,10 @@ _cairo_pattern_create_copy (cairo_pattern_t **pattern_out,
|
|||
|
||||
void
|
||||
_cairo_pattern_init_solid (cairo_solid_pattern_t *pattern,
|
||||
const cairo_color_t *color,
|
||||
cairo_content_t content)
|
||||
const cairo_color_t *color)
|
||||
{
|
||||
if (content == CAIRO_CONTENT_COLOR_ALPHA && CAIRO_COLOR_IS_OPAQUE (color))
|
||||
content = CAIRO_CONTENT_COLOR;
|
||||
|
||||
_cairo_pattern_init (&pattern->base, CAIRO_PATTERN_TYPE_SOLID);
|
||||
pattern->color = *color;
|
||||
pattern->content = content;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -486,8 +478,7 @@ _cairo_pattern_init_radial (cairo_radial_pattern_t *pattern,
|
|||
}
|
||||
|
||||
cairo_pattern_t *
|
||||
_cairo_pattern_create_solid (const cairo_color_t *color,
|
||||
cairo_content_t content)
|
||||
_cairo_pattern_create_solid (const cairo_color_t *color)
|
||||
{
|
||||
cairo_solid_pattern_t *pattern;
|
||||
|
||||
|
|
@ -502,7 +493,7 @@ _cairo_pattern_create_solid (const cairo_color_t *color,
|
|||
}
|
||||
}
|
||||
|
||||
_cairo_pattern_init_solid (pattern, color, content);
|
||||
_cairo_pattern_init_solid (pattern, color);
|
||||
CAIRO_REFERENCE_COUNT_INIT (&pattern->base.ref_count, 1);
|
||||
|
||||
return &pattern->base;
|
||||
|
|
@ -518,7 +509,7 @@ _cairo_pattern_create_in_error (cairo_status_t status)
|
|||
|
||||
CAIRO_MUTEX_INITIALIZE ();
|
||||
|
||||
pattern = _cairo_pattern_create_solid (CAIRO_COLOR_BLACK, CAIRO_CONTENT_COLOR);
|
||||
pattern = _cairo_pattern_create_solid (CAIRO_COLOR_BLACK);
|
||||
if (pattern->status == CAIRO_STATUS_SUCCESS)
|
||||
status = _cairo_pattern_set_error (pattern, status);
|
||||
|
||||
|
|
@ -558,7 +549,7 @@ cairo_pattern_create_rgb (double red, double green, double blue)
|
|||
|
||||
CAIRO_MUTEX_INITIALIZE ();
|
||||
|
||||
return _cairo_pattern_create_solid (&color, CAIRO_CONTENT_COLOR);
|
||||
return _cairo_pattern_create_solid (&color);
|
||||
}
|
||||
slim_hidden_def (cairo_pattern_create_rgb);
|
||||
|
||||
|
|
@ -598,7 +589,7 @@ cairo_pattern_create_rgba (double red, double green, double blue,
|
|||
|
||||
CAIRO_MUTEX_INITIALIZE ();
|
||||
|
||||
return _cairo_pattern_create_solid (&color, CAIRO_CONTENT_COLOR_ALPHA);
|
||||
return _cairo_pattern_create_solid (&color);
|
||||
}
|
||||
slim_hidden_def (cairo_pattern_create_rgba);
|
||||
|
||||
|
|
@ -1566,7 +1557,6 @@ _cairo_pattern_acquire_surface_for_gradient (const cairo_gradient_pattern_t *pat
|
|||
#define MAX_SURFACE_CACHE_SIZE 16
|
||||
static struct {
|
||||
struct _cairo_pattern_solid_surface_cache{
|
||||
cairo_content_t content;
|
||||
cairo_color_t color;
|
||||
cairo_surface_t *surface;
|
||||
} cache[MAX_SURFACE_CACHE_SIZE];
|
||||
|
|
@ -1579,7 +1569,7 @@ _cairo_pattern_solid_surface_matches (
|
|||
const cairo_solid_pattern_t *pattern,
|
||||
cairo_surface_t *dst)
|
||||
{
|
||||
if (cache->content != pattern->content)
|
||||
if (cairo_surface_get_content (cache->surface) != _cairo_color_get_content (&pattern->color))
|
||||
return FALSE;
|
||||
|
||||
if (CAIRO_REFERENCE_COUNT_GET_VALUE (&cache->surface->ref_count) != 1)
|
||||
|
|
@ -1690,7 +1680,6 @@ _cairo_pattern_acquire_surface_for_solid (const cairo_solid_pattern_t *patt
|
|||
to_destroy = solid_surface_cache.cache[i].surface;
|
||||
solid_surface_cache.cache[i].surface = surface;
|
||||
solid_surface_cache.cache[i].color = pattern->color;
|
||||
solid_surface_cache.cache[i].content = pattern->content;
|
||||
|
||||
DONE:
|
||||
*out = cairo_surface_reference (solid_surface_cache.cache[i].surface);
|
||||
|
|
@ -2210,7 +2199,7 @@ _init_solid_for_color_stop (cairo_solid_pattern_t *solid,
|
|||
color->green,
|
||||
color->blue,
|
||||
color->alpha);
|
||||
_cairo_pattern_init_solid (solid, &premult, CAIRO_CONTENT_COLOR_ALPHA);
|
||||
_cairo_pattern_init_solid (solid, &premult);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -2275,8 +2264,7 @@ _cairo_pattern_acquire_surface (const cairo_pattern_t *pattern,
|
|||
_init_solid_for_color_stop (&solid, &src->stops->color);
|
||||
} else {
|
||||
_cairo_pattern_init_solid (&solid,
|
||||
CAIRO_COLOR_TRANSPARENT,
|
||||
CAIRO_CONTENT_ALPHA);
|
||||
CAIRO_COLOR_TRANSPARENT);
|
||||
}
|
||||
|
||||
status = _cairo_pattern_acquire_surface_for_solid (&solid, dst,
|
||||
|
|
@ -2393,8 +2381,7 @@ _cairo_pattern_acquire_surfaces (const cairo_pattern_t *src,
|
|||
combined = src_solid->color;
|
||||
_cairo_color_multiply_alpha (&combined, mask_solid->color.alpha);
|
||||
|
||||
_cairo_pattern_init_solid (&src_tmp.solid, &combined,
|
||||
src_solid->content | mask_solid->content);
|
||||
_cairo_pattern_init_solid (&src_tmp.solid, &combined);
|
||||
|
||||
src = &src_tmp.base;
|
||||
mask = NULL;
|
||||
|
|
@ -2608,7 +2595,6 @@ _cairo_solid_pattern_hash (unsigned long hash,
|
|||
{
|
||||
const cairo_solid_pattern_t *solid = (cairo_solid_pattern_t *) pattern;
|
||||
|
||||
hash = _cairo_hash_bytes (hash, &solid->content, sizeof (solid->content));
|
||||
hash = _cairo_hash_bytes (hash, &solid->color, sizeof (solid->color));
|
||||
|
||||
return hash;
|
||||
|
|
@ -2748,9 +2734,6 @@ _cairo_solid_pattern_equal (const cairo_pattern_t *A,
|
|||
const cairo_solid_pattern_t *a = (cairo_solid_pattern_t *) A;
|
||||
const cairo_solid_pattern_t *b = (cairo_solid_pattern_t *) B;
|
||||
|
||||
if (a->content != b->content)
|
||||
return FALSE;
|
||||
|
||||
return _cairo_color_equal (&a->color, &b->color);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -855,11 +855,9 @@ _emit_solid_pattern (cairo_script_surface_t *surface,
|
|||
cairo_solid_pattern_t *solid = (cairo_solid_pattern_t *) pattern;
|
||||
cairo_script_context_t *ctx = to_context (surface);
|
||||
|
||||
if (solid->content & CAIRO_CONTENT_ALPHA &&
|
||||
! CAIRO_COLOR_IS_OPAQUE (&solid->color))
|
||||
if (! CAIRO_COLOR_IS_OPAQUE (&solid->color))
|
||||
{
|
||||
if (! (solid->content & CAIRO_CONTENT_COLOR) ||
|
||||
! (surface->base.content & CAIRO_CONTENT_COLOR) ||
|
||||
if (! (surface->base.content & CAIRO_CONTENT_COLOR) ||
|
||||
((solid->color.red_short == 0 || solid->color.red_short == 0xffff) &&
|
||||
(solid->color.green_short == 0 || solid->color.green_short == 0xffff) &&
|
||||
(solid->color.blue_short == 0 || solid->color.blue_short == 0xffff) ))
|
||||
|
|
@ -3379,8 +3377,7 @@ _cairo_script_implicit_context_init (cairo_script_implicit_context_t *cr)
|
|||
cr->current_antialias = CAIRO_ANTIALIAS_DEFAULT;
|
||||
_cairo_stroke_style_init (&cr->current_style);
|
||||
_cairo_pattern_init_solid (&cr->current_source.solid,
|
||||
CAIRO_COLOR_BLACK,
|
||||
CAIRO_CONTENT_COLOR);
|
||||
CAIRO_COLOR_BLACK);
|
||||
_cairo_path_fixed_init (&cr->current_path);
|
||||
cairo_matrix_init_identity (&cr->current_ctm);
|
||||
cairo_matrix_init_identity (&cr->current_stroke_matrix);
|
||||
|
|
|
|||
|
|
@ -480,7 +480,7 @@ _cairo_surface_create_similar_solid (cairo_surface_t *other,
|
|||
if (surface == NULL || surface->status)
|
||||
return surface;
|
||||
|
||||
_cairo_pattern_init_solid (&pattern, color, content);
|
||||
_cairo_pattern_init_solid (&pattern, color);
|
||||
status = _cairo_surface_paint (surface,
|
||||
color == CAIRO_COLOR_TRANSPARENT ?
|
||||
CAIRO_OPERATOR_CLEAR : CAIRO_OPERATOR_SOURCE,
|
||||
|
|
@ -507,7 +507,7 @@ _cairo_surface_create_solid_pattern_surface (cairo_surface_t *other,
|
|||
}
|
||||
|
||||
return _cairo_surface_create_similar_solid (other,
|
||||
solid_pattern->content,
|
||||
_cairo_color_get_content (&solid_pattern->color),
|
||||
1, 1,
|
||||
&solid_pattern->color,
|
||||
FALSE);
|
||||
|
|
|
|||
|
|
@ -356,7 +356,6 @@ struct _cairo_pattern {
|
|||
struct _cairo_solid_pattern {
|
||||
cairo_pattern_t base;
|
||||
cairo_color_t color;
|
||||
cairo_content_t content;
|
||||
};
|
||||
|
||||
typedef struct _cairo_surface_pattern {
|
||||
|
|
|
|||
|
|
@ -1432,8 +1432,8 @@ _cairo_xlib_surface_create_solid_pattern_surface (void *abstrac
|
|||
return NULL;
|
||||
|
||||
image = (cairo_image_surface_t *)
|
||||
_cairo_image_surface_create_with_content (solid_pattern->content,
|
||||
width, height);
|
||||
_cairo_image_surface_create_with_content (_cairo_color_get_content (&solid_pattern->color),
|
||||
width, height);
|
||||
status = image->base.status;
|
||||
if (unlikely (status))
|
||||
goto BAIL;
|
||||
|
|
@ -2427,7 +2427,7 @@ _cairo_xlib_surface_solid_fill_rectangles (cairo_xlib_surface_t *surface,
|
|||
GC gc;
|
||||
int i;
|
||||
|
||||
_cairo_pattern_init_solid (&solid, color, CAIRO_CONTENT_COLOR);
|
||||
_cairo_pattern_init_solid (&solid, color);
|
||||
|
||||
status = _cairo_xlib_display_acquire (surface->base.device, &display);
|
||||
if (unlikely (status))
|
||||
|
|
|
|||
|
|
@ -2144,8 +2144,8 @@ cairo_paint_with_alpha (cairo_t *cr,
|
|||
return;
|
||||
}
|
||||
|
||||
_cairo_color_init_rgba (&color, 1., 1., 1., alpha);
|
||||
_cairo_pattern_init_solid (&pattern, &color, CAIRO_CONTENT_ALPHA);
|
||||
_cairo_color_init_rgba (&color, 0., 0., 0., alpha);
|
||||
_cairo_pattern_init_solid (&pattern, &color);
|
||||
|
||||
status = _cairo_gstate_mask (cr->gstate, &pattern.base);
|
||||
if (unlikely (status))
|
||||
|
|
|
|||
|
|
@ -1017,6 +1017,9 @@ cairo_private cairo_bool_t
|
|||
_cairo_color_stop_equal (const cairo_color_stop_t *color_a,
|
||||
const cairo_color_stop_t *color_b) cairo_pure;
|
||||
|
||||
cairo_content_t
|
||||
_cairo_color_get_content (const cairo_color_t *color) cairo_pure;
|
||||
|
||||
/* cairo-font-face.c */
|
||||
|
||||
extern const cairo_private cairo_font_face_t _cairo_font_face_nil;
|
||||
|
|
@ -2180,8 +2183,7 @@ _cairo_pattern_init_snapshot (cairo_pattern_t *pattern,
|
|||
|
||||
cairo_private void
|
||||
_cairo_pattern_init_solid (cairo_solid_pattern_t *pattern,
|
||||
const cairo_color_t *color,
|
||||
cairo_content_t content);
|
||||
const cairo_color_t *color);
|
||||
|
||||
cairo_private void
|
||||
_cairo_pattern_init_for_surface (cairo_surface_pattern_t *pattern,
|
||||
|
|
@ -2203,8 +2205,7 @@ cairo_private void
|
|||
_cairo_pattern_fini_snapshot (cairo_pattern_t *pattern);
|
||||
|
||||
cairo_private cairo_pattern_t *
|
||||
_cairo_pattern_create_solid (const cairo_color_t *color,
|
||||
cairo_content_t content);
|
||||
_cairo_pattern_create_solid (const cairo_color_t *color);
|
||||
|
||||
cairo_private void
|
||||
_cairo_pattern_transform (cairo_pattern_t *pattern,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue