Backed out changeset 3d5379dbab72 (bug 1306640) for bustage on a CLOSED TREE

This commit is contained in:
Carsten "Tomcat" Book 2016-10-14 15:08:34 +02:00
Родитель 415f86e41d
Коммит ae82a68a62
14 изменённых файлов: 155 добавлений и 82 удалений

Просмотреть файл

@ -272,13 +272,14 @@ static void
_rectangle_intersect_clip (cairo_rectangle_int_t *extents, cairo_clip_t *clip)
{
const cairo_rectangle_int_t *clip_extents;
cairo_bool_t is_empty;
clip_extents = NULL;
if (clip != NULL)
clip_extents = _cairo_clip_get_extents (clip);
if (clip_extents != NULL)
_cairo_rectangle_intersect (extents, clip_extents);
is_empty = _cairo_rectangle_intersect (extents, clip_extents);
}
static void
@ -288,14 +289,15 @@ _cairo_analysis_surface_operation_extents (cairo_analysis_surface_t *surface,
cairo_clip_t *clip,
cairo_rectangle_int_t *extents)
{
cairo_bool_t is_empty;
_cairo_surface_get_extents (&surface->base, extents);
is_empty = _cairo_surface_get_extents (&surface->base, extents);
if (_cairo_operator_bounded_by_source (op)) {
cairo_rectangle_int_t source_extents;
_cairo_pattern_get_extents (source, &source_extents);
_cairo_rectangle_intersect (extents, &source_extents);
is_empty = _cairo_rectangle_intersect (extents, &source_extents);
}
_rectangle_intersect_clip (extents, clip);
@ -341,6 +343,7 @@ _cairo_analysis_surface_mask (void *abstract_surface,
cairo_analysis_surface_t *surface = abstract_surface;
cairo_int_status_t backend_status;
cairo_rectangle_int_t extents;
cairo_bool_t is_empty;
if (surface->target->backend->mask == NULL) {
backend_status = CAIRO_INT_STATUS_UNSUPPORTED;
@ -389,7 +392,7 @@ _cairo_analysis_surface_mask (void *abstract_surface,
cairo_rectangle_int_t mask_extents;
_cairo_pattern_get_extents (mask, &mask_extents);
_cairo_rectangle_intersect (&extents, &mask_extents);
is_empty = _cairo_rectangle_intersect (&extents, &mask_extents);
}
@ -411,6 +414,7 @@ _cairo_analysis_surface_stroke (void *abstract_surface,
cairo_analysis_surface_t *surface = abstract_surface;
cairo_status_t backend_status;
cairo_rectangle_int_t extents;
cairo_bool_t is_empty;
if (surface->target->backend->stroke == NULL) {
backend_status = CAIRO_INT_STATUS_UNSUPPORTED;
@ -456,7 +460,7 @@ _cairo_analysis_surface_stroke (void *abstract_surface,
return status;
}
_cairo_rectangle_intersect (&extents, &mask_extents);
is_empty = _cairo_rectangle_intersect (&extents, &mask_extents);
}
return _add_operation (surface, &extents, backend_status);
@ -475,6 +479,7 @@ _cairo_analysis_surface_fill (void *abstract_surface,
cairo_analysis_surface_t *surface = abstract_surface;
cairo_status_t backend_status;
cairo_rectangle_int_t extents;
cairo_bool_t is_empty;
if (surface->target->backend->fill == NULL) {
backend_status = CAIRO_INT_STATUS_UNSUPPORTED;
@ -508,7 +513,7 @@ _cairo_analysis_surface_fill (void *abstract_surface,
_cairo_path_fixed_fill_extents (path, fill_rule, tolerance,
&mask_extents);
}
_cairo_rectangle_intersect (&extents, &mask_extents);
is_empty = _cairo_rectangle_intersect (&extents, &mask_extents);
}
return _add_operation (surface, &extents, backend_status);
@ -527,6 +532,7 @@ _cairo_analysis_surface_show_glyphs (void *abstract_surface,
cairo_analysis_surface_t *surface = abstract_surface;
cairo_status_t status, backend_status;
cairo_rectangle_int_t extents, glyph_extents;
cairo_bool_t is_empty;
/* Adapted from _cairo_surface_show_glyphs */
if (surface->target->backend->show_glyphs != NULL) {
@ -575,7 +581,7 @@ _cairo_analysis_surface_show_glyphs (void *abstract_surface,
if (unlikely (status))
return status;
_cairo_rectangle_intersect (&extents, &glyph_extents);
is_empty = _cairo_rectangle_intersect (&extents, &glyph_extents);
}
return _add_operation (surface, &extents, backend_status);
@ -606,6 +612,7 @@ _cairo_analysis_surface_show_text_glyphs (void *abstract_surface,
cairo_analysis_surface_t *surface = abstract_surface;
cairo_status_t status, backend_status;
cairo_rectangle_int_t extents, glyph_extents;
cairo_bool_t is_empty;
/* Adapted from _cairo_surface_show_glyphs */
backend_status = CAIRO_INT_STATUS_UNSUPPORTED;
@ -658,7 +665,7 @@ _cairo_analysis_surface_show_text_glyphs (void *abstract_surface,
if (unlikely (status))
return status;
_cairo_rectangle_intersect (&extents, &glyph_extents);
is_empty = _cairo_rectangle_intersect (&extents, &glyph_extents);
}
return _add_operation (surface, &extents, backend_status);

Просмотреть файл

@ -368,6 +368,7 @@ _cairo_clip_path_reapply_clip_path_transform (cairo_clip_t *clip,
{
cairo_status_t status;
cairo_clip_path_t *clip_path;
cairo_bool_t is_empty;
if (other_path->prev != NULL) {
status = _cairo_clip_path_reapply_clip_path_transform (clip,
@ -393,7 +394,7 @@ _cairo_clip_path_reapply_clip_path_transform (cairo_clip_t *clip,
_cairo_path_fixed_approximate_clip_extents (&clip_path->path,
&clip_path->extents);
if (clip_path->prev != NULL) {
_cairo_rectangle_intersect (&clip_path->extents,
is_empty = _cairo_rectangle_intersect (&clip_path->extents,
&clip_path->prev->extents);
}
@ -515,9 +516,10 @@ static cairo_status_t
_cairo_clip_apply_clip_path (cairo_clip_t *clip,
const cairo_clip_path_t *path)
{
cairo_status_t status;
if (path->prev != NULL)
_cairo_clip_apply_clip_path (clip, path->prev);
status = _cairo_clip_apply_clip_path (clip, path->prev);
return _cairo_clip_intersect_path (clip,
&path->path,
@ -1406,6 +1408,7 @@ intersect_with_boxes (cairo_composite_rectangles_t *extents,
{
cairo_rectangle_int_t rect;
cairo_box_t box;
cairo_bool_t is_empty;
box.p1.x = box.p1.y = INT_MIN;
box.p2.x = box.p2.y = INT_MAX;
@ -1422,8 +1425,8 @@ intersect_with_boxes (cairo_composite_rectangles_t *extents,
}
_cairo_box_round_to_rectangle (&box, &rect);
_cairo_rectangle_intersect (&extents->bounded, &rect);
_cairo_rectangle_intersect (&extents->unbounded, &rect);
is_empty = _cairo_rectangle_intersect (&extents->bounded, &rect);
is_empty = _cairo_rectangle_intersect (&extents->unbounded, &rect);
}
cairo_status_t

Просмотреть файл

@ -736,6 +736,7 @@ _compute_transform (cairo_ft_font_transform_t *sf,
double min_distance = DBL_MAX;
cairo_bool_t magnify = TRUE;
int i;
int best_i = 0;
double best_x_size = 0;
double best_y_size = 0;
@ -754,6 +755,7 @@ _compute_transform (cairo_ft_font_transform_t *sf,
if ((magnify && distance >= 0) || fabs (distance) <= min_distance) {
magnify = distance < 0;
min_distance = fabs (distance);
best_i = i;
best_x_size = x_size;
best_y_size = y_size;
}

Просмотреть файл

@ -1509,8 +1509,10 @@ _cairo_gstate_int_clip_extents (cairo_gstate_t *gstate,
clip_extents = _cairo_clip_get_extents (&gstate->clip);
if (clip_extents != NULL) {
_cairo_rectangle_intersect (extents, clip_extents);
is_bounded = TRUE;
cairo_bool_t is_empty;
is_empty = _cairo_rectangle_intersect (extents, clip_extents);
is_bounded = TRUE;
}
return is_bounded;

Просмотреть файл

@ -1335,6 +1335,7 @@ _cairo_pattern_acquire_surface_for_gradient (const cairo_gradient_pattern_t *pat
pixman_transform_t pixman_transform;
cairo_status_t status;
cairo_bool_t repeat = FALSE;
cairo_bool_t opaque = TRUE;
pixman_gradient_stop_t pixman_stops_static[2];
pixman_gradient_stop_t *pixman_stops = pixman_stops_static;
@ -1358,6 +1359,8 @@ _cairo_pattern_acquire_surface_for_gradient (const cairo_gradient_pattern_t *pat
pixman_stops[i].color.green = pattern->stops[i].color.green_short;
pixman_stops[i].color.blue = pattern->stops[i].color.blue_short;
pixman_stops[i].color.alpha = pattern->stops[i].color.alpha_short;
if (! CAIRO_ALPHA_SHORT_IS_OPAQUE (pixman_stops[i].color.alpha))
opaque = FALSE;
}
if (pattern->base.type == CAIRO_PATTERN_TYPE_LINEAR)
@ -2114,6 +2117,7 @@ _cairo_pattern_acquire_surface_for_surface (const cairo_surface_pattern_t *pat
int tx, ty;
double pad;
cairo_bool_t is_identity;
cairo_bool_t is_empty;
cairo_bool_t is_bounded;
cairo_int_status_t status;
@ -2284,7 +2288,7 @@ _cairo_pattern_acquire_surface_for_surface (const cairo_surface_pattern_t *pat
if ( _cairo_surface_get_extents (surface, &extents)) {
if (attr->extend == CAIRO_EXTEND_NONE) {
/* Never acquire a larger area than the source itself */
_cairo_rectangle_intersect (&extents, &sampled_area);
is_empty = _cairo_rectangle_intersect (&extents, &sampled_area);
} else {
int trim = 0;
@ -2311,6 +2315,7 @@ _cairo_pattern_acquire_surface_for_surface (const cairo_surface_pattern_t *pat
attr->extend = CAIRO_EXTEND_NONE;
}
is_empty = extents.width == 0 || extents.height == 0;
}
}

Просмотреть файл

@ -314,7 +314,7 @@ _cairo_pdf_surface_create_for_stream_internal (cairo_output_stream_t *output,
double height)
{
cairo_pdf_surface_t *surface;
cairo_status_t status;
cairo_status_t status, status_ignored;
surface = malloc (sizeof (cairo_pdf_surface_t));
if (unlikely (surface == NULL)) {
@ -413,7 +413,7 @@ BAIL0:
free (surface);
/* destroy stream on behalf of caller */
_cairo_output_stream_destroy (output);
status_ignored = _cairo_output_stream_destroy (output);
return _cairo_surface_create_in_error (status);
}
@ -511,36 +511,37 @@ _extract_pdf_surface (cairo_surface_t *surface,
cairo_pdf_surface_t **pdf_surface)
{
cairo_surface_t *target;
cairo_status_t status_ignored;
if (surface->status)
return FALSE;
if (surface->finished) {
_cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
status_ignored = _cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
return FALSE;
}
if (! _cairo_surface_is_paginated (surface)) {
_cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
status_ignored = _cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
return FALSE;
}
target = _cairo_paginated_surface_get_target (surface);
if (target->status) {
_cairo_surface_set_error (surface,
target->status);
status_ignored = _cairo_surface_set_error (surface,
target->status);
return FALSE;
}
if (target->finished) {
_cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
status_ignored = _cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
return FALSE;
}
if (! _cairo_surface_is_pdf (target)) {
_cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
status_ignored = _cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
return FALSE;
}
@ -5359,6 +5360,15 @@ _cairo_pdf_surface_analyze_operation (cairo_pdf_surface_t *surface,
return CAIRO_INT_STATUS_UNSUPPORTED;
}
static cairo_bool_t
_cairo_pdf_surface_operation_supported (cairo_pdf_surface_t *surface,
cairo_operator_t op,
const cairo_pattern_t *pattern,
const cairo_rectangle_int_t *extents)
{
return _cairo_pdf_surface_analyze_operation (surface, op, pattern, extents) != CAIRO_INT_STATUS_UNSUPPORTED;
}
static cairo_int_status_t
_cairo_pdf_surface_start_fallback (cairo_pdf_surface_t *surface)
{

Просмотреть файл

@ -474,9 +474,10 @@ _cairo_polygon_line_to (cairo_polygon_t *polygon,
cairo_status_t
_cairo_polygon_close (cairo_polygon_t *polygon)
{
cairo_status_t status;
if (polygon->has_current_point) {
_cairo_polygon_line_to (polygon, &polygon->first_point);
status = _cairo_polygon_line_to (polygon, &polygon->first_point);
polygon->has_current_point = FALSE;
}

Просмотреть файл

@ -916,7 +916,7 @@ _cairo_ps_surface_create_for_stream_internal (cairo_output_stream_t *stream,
double width,
double height)
{
cairo_status_t status;
cairo_status_t status, status_ignored;
cairo_ps_surface_t *surface;
surface = malloc (sizeof (cairo_ps_surface_t));
@ -1003,13 +1003,13 @@ _cairo_ps_surface_create_for_stream_internal (cairo_output_stream_t *stream,
_cairo_scaled_font_subsets_destroy (surface->font_subsets);
CLEANUP_OUTPUT_STREAM:
_cairo_output_stream_destroy (surface->stream);
status_ignored = _cairo_output_stream_destroy (surface->stream);
fclose (surface->tmpfile);
CLEANUP_SURFACE:
free (surface);
CLEANUP:
/* destroy stream on behalf of caller */
_cairo_output_stream_destroy (stream);
status_ignored = _cairo_output_stream_destroy (stream);
return _cairo_surface_create_in_error (status);
}
@ -1118,40 +1118,41 @@ _extract_ps_surface (cairo_surface_t *surface,
cairo_ps_surface_t **ps_surface)
{
cairo_surface_t *target;
cairo_status_t status_ignored;
if (surface->status)
return FALSE;
if (surface->finished) {
if (set_error_on_failure)
_cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
status_ignored = _cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
return FALSE;
}
if (! _cairo_surface_is_paginated (surface)) {
if (set_error_on_failure)
_cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
status_ignored = _cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
return FALSE;
}
target = _cairo_paginated_surface_get_target (surface);
if (target->status) {
if (set_error_on_failure)
_cairo_surface_set_error (surface, target->status);
status_ignored = _cairo_surface_set_error (surface, target->status);
return FALSE;
}
if (target->finished) {
if (set_error_on_failure)
_cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
status_ignored = _cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
return FALSE;
}
if (! _cairo_surface_is_ps (target)) {
if (set_error_on_failure)
_cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
status_ignored = _cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
return FALSE;
}
@ -1815,6 +1816,15 @@ _cairo_ps_surface_analyze_operation (cairo_ps_surface_t *surface,
return CAIRO_INT_STATUS_FLATTEN_TRANSPARENCY;
}
static cairo_bool_t
_cairo_ps_surface_operation_supported (cairo_ps_surface_t *surface,
cairo_operator_t op,
const cairo_pattern_t *pattern,
const cairo_rectangle_int_t *extents)
{
return _cairo_ps_surface_analyze_operation (surface, op, pattern, extents) != CAIRO_INT_STATUS_UNSUPPORTED;
}
/* The "standard" implementation limit for PostScript string sizes is
* 65535 characters (see PostScript Language Reference, Appendix
* B). We go one short of that because we sometimes need two
@ -3766,11 +3776,12 @@ _cairo_ps_surface_set_paginated_mode (void *abstract_surface,
cairo_paginated_mode_t paginated_mode)
{
cairo_ps_surface_t *surface = abstract_surface;
cairo_status_t status;
surface->paginated_mode = paginated_mode;
if (surface->clipper.clip.path != NULL) {
_cairo_pdf_operators_flush (&surface->pdf_operators);
status = _cairo_pdf_operators_flush (&surface->pdf_operators);
_cairo_output_stream_printf (surface->stream, "Q q\n");
_cairo_surface_clipper_reset (&surface->clipper);

Просмотреть файл

@ -371,6 +371,15 @@ _cairo_surface_has_snapshot (cairo_surface_t *surface,
return NULL;
}
static cairo_bool_t
_cairo_surface_is_writable (cairo_surface_t *surface)
{
return ! surface->finished &&
surface->snapshot_of == NULL &&
! _cairo_surface_has_snapshots (surface) &&
! _cairo_surface_has_mime_data (surface);
}
static void
_cairo_surface_begin_modification (cairo_surface_t *surface)
{
@ -1020,6 +1029,7 @@ void
_cairo_surface_set_font_options (cairo_surface_t *surface,
cairo_font_options_t *options)
{
cairo_status_t status;
if (surface->status)
return;
@ -1027,8 +1037,8 @@ _cairo_surface_set_font_options (cairo_surface_t *surface,
assert (surface->snapshot_of == NULL);
if (surface->finished) {
_cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
status = _cairo_surface_set_error (surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
return;
}
@ -1216,7 +1226,7 @@ _cairo_surface_set_device_scale (cairo_surface_t *surface,
assert (surface->snapshot_of == NULL);
if (surface->finished) {
_cairo_surface_set_error (surface, _cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
status = _cairo_surface_set_error (surface, _cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
return;
}
@ -1266,7 +1276,7 @@ cairo_surface_set_device_offset (cairo_surface_t *surface,
assert (surface->snapshot_of == NULL);
if (surface->finished) {
_cairo_surface_set_error (surface, _cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
status = _cairo_surface_set_error (surface, _cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
return;
}
@ -1353,7 +1363,7 @@ cairo_surface_set_fallback_resolution (cairo_surface_t *surface,
assert (surface->snapshot_of == NULL);
if (surface->finished) {
_cairo_surface_set_error (surface, _cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
status = _cairo_surface_set_error (surface, _cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
return;
}
@ -2473,6 +2483,7 @@ _cairo_surface_check_span_renderer (cairo_operator_t op,
void
cairo_surface_copy_page (cairo_surface_t *surface)
{
cairo_status_t status_ignored;
if (surface->status)
return;
@ -2480,8 +2491,8 @@ cairo_surface_copy_page (cairo_surface_t *surface)
assert (surface->snapshot_of == NULL);
if (surface->finished) {
_cairo_surface_set_error (surface,
CAIRO_STATUS_SURFACE_FINISHED);
status_ignored = _cairo_surface_set_error (surface,
CAIRO_STATUS_SURFACE_FINISHED);
return;
}
@ -2489,8 +2500,8 @@ cairo_surface_copy_page (cairo_surface_t *surface)
if (surface->backend->copy_page == NULL)
return;
_cairo_surface_set_error (surface,
surface->backend->copy_page (surface));
status_ignored = _cairo_surface_set_error (surface,
surface->backend->copy_page (surface));
}
slim_hidden_def (cairo_surface_copy_page);
@ -2509,13 +2520,14 @@ slim_hidden_def (cairo_surface_copy_page);
void
cairo_surface_show_page (cairo_surface_t *surface)
{
cairo_status_t status_ignored;
if (surface->status)
return;
if (surface->finished) {
_cairo_surface_set_error (surface,
CAIRO_STATUS_SURFACE_FINISHED);
status_ignored = _cairo_surface_set_error (surface,
CAIRO_STATUS_SURFACE_FINISHED);
return;
}
@ -2525,8 +2537,8 @@ cairo_surface_show_page (cairo_surface_t *surface)
if (surface->backend->show_page == NULL)
return;
_cairo_surface_set_error (surface,
surface->backend->show_page (surface));
status_ignored = _cairo_surface_set_error (surface,
surface->backend->show_page (surface));
}
slim_hidden_def (cairo_surface_show_page);
@ -2594,13 +2606,14 @@ _cairo_surface_get_extents (cairo_surface_t *surface,
cairo_bool_t
cairo_surface_has_show_text_glyphs (cairo_surface_t *surface)
{
cairo_status_t status_ignored;
if (surface->status)
return FALSE;
if (surface->finished) {
_cairo_surface_set_error (surface,
CAIRO_STATUS_SURFACE_FINISHED);
status_ignored = _cairo_surface_set_error (surface,
CAIRO_STATUS_SURFACE_FINISHED);
return FALSE;
}
@ -3107,14 +3120,15 @@ _cairo_surface_operation_extents (cairo_surface_t *surface,
cairo_clip_t *clip,
cairo_rectangle_int_t *extents)
{
cairo_bool_t is_empty;
_cairo_surface_get_extents (surface, extents);
is_empty = _cairo_surface_get_extents (surface, extents);
if (_cairo_operator_bounded_by_source (op)) {
cairo_rectangle_int_t source_extents;
_cairo_pattern_get_extents (source, &source_extents);
_cairo_rectangle_intersect (extents, &source_extents);
is_empty = _cairo_rectangle_intersect (extents, &source_extents);
}
_rectangle_intersect_clip (extents, clip);
@ -3139,6 +3153,7 @@ _cairo_surface_mask_extents (cairo_surface_t *surface,
cairo_clip_t *clip,
cairo_rectangle_int_t *extents)
{
cairo_bool_t is_empty;
_cairo_surface_operation_extents (surface, op, source, clip, extents);
@ -3146,7 +3161,7 @@ _cairo_surface_mask_extents (cairo_surface_t *surface,
cairo_rectangle_int_t mask_extents;
_cairo_pattern_get_extents (mask, &mask_extents);
_cairo_rectangle_intersect (extents, &mask_extents);
is_empty = _cairo_rectangle_intersect (extents, &mask_extents);
}
return CAIRO_STATUS_SUCCESS;
@ -3166,6 +3181,7 @@ _cairo_surface_stroke_extents (cairo_surface_t *surface,
cairo_rectangle_int_t *extents)
{
cairo_status_t status;
cairo_bool_t is_empty;
_cairo_surface_operation_extents (surface, op, source, clip, extents);
@ -3179,7 +3195,7 @@ _cairo_surface_stroke_extents (cairo_surface_t *surface,
if (unlikely (status))
return status;
_cairo_rectangle_intersect (extents, &mask_extents);
is_empty = _cairo_rectangle_intersect (extents, &mask_extents);
}
return CAIRO_STATUS_SUCCESS;
@ -3196,6 +3212,7 @@ _cairo_surface_fill_extents (cairo_surface_t *surface,
cairo_clip_t *clip,
cairo_rectangle_int_t *extents)
{
cairo_bool_t is_empty;
_cairo_surface_operation_extents (surface, op, source, clip, extents);
@ -3204,7 +3221,7 @@ _cairo_surface_fill_extents (cairo_surface_t *surface,
_cairo_path_fixed_fill_extents (path, fill_rule, tolerance,
&mask_extents);
_cairo_rectangle_intersect (extents, &mask_extents);
is_empty = _cairo_rectangle_intersect (extents, &mask_extents);
}
return CAIRO_STATUS_SUCCESS;
@ -3221,6 +3238,7 @@ _cairo_surface_glyphs_extents (cairo_surface_t *surface,
cairo_rectangle_int_t *extents)
{
cairo_status_t status;
cairo_bool_t is_empty;
_cairo_surface_operation_extents (surface, op, source, clip, extents);
@ -3235,7 +3253,7 @@ _cairo_surface_glyphs_extents (cairo_surface_t *surface,
if (unlikely (status))
return status;
_cairo_rectangle_intersect (extents, &glyph_extents);
is_empty = _cairo_rectangle_intersect (extents, &glyph_extents);
}
return CAIRO_STATUS_SUCCESS;

Просмотреть файл

@ -605,25 +605,26 @@ cairo_tee_surface_remove (cairo_surface_t *abstract_surface,
cairo_tee_surface_t *surface;
cairo_surface_wrapper_t *slaves;
int n, num_slaves;
cairo_status_t status;
if (unlikely (abstract_surface->status))
return;
if (unlikely (abstract_surface->finished)) {
_cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
status = _cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
return;
}
if (abstract_surface->backend != &cairo_tee_surface_backend) {
_cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
status = _cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
return;
}
surface = (cairo_tee_surface_t *) abstract_surface;
if (target == surface->master.target) {
_cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_INVALID_INDEX));
status = _cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_INVALID_INDEX));
return;
}
@ -635,8 +636,8 @@ cairo_tee_surface_remove (cairo_surface_t *abstract_surface,
}
if (n == num_slaves) {
_cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_INVALID_INDEX));
status = _cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_INVALID_INDEX));
return;
}

Просмотреть файл

@ -1177,6 +1177,7 @@ _cairo_truetype_reverse_cmap (cairo_scaled_font_t *scaled_font,
uint16_t *end_code;
uint16_t *delta;
uint16_t *range_offset;
uint16_t *glyph_array;
uint16_t c;
backend = scaled_font->backend;
@ -1216,6 +1217,7 @@ _cairo_truetype_reverse_cmap (cairo_scaled_font_t *scaled_font,
start_code = &(end_code[num_segments + 1]);
delta = &(start_code[num_segments]);
range_offset = &(delta[num_segments]);
glyph_array = &(range_offset[num_segments]);
/* search for glyph in segments with rangeOffset=0 */
for (i = 0; i < num_segments; i++) {

Просмотреть файл

@ -1010,7 +1010,7 @@ cairo_type1_font_subset_write_private_dict (cairo_type1_font_subset_t *font,
const char *p, *charstrings, *dict_start;
const char *closefile_token;
char buffer[32], *glyph_count_end;
int length;
int num_charstrings, length;
/* The private dict holds hint information, common subroutines and
* the actual glyph definitions (charstrings).
@ -1034,7 +1034,7 @@ cairo_type1_font_subset_write_private_dict (cairo_type1_font_subset_t *font,
/* Scan past /CharStrings and the integer following it. */
p = charstrings + strlen ("/CharStrings");
strtol (p, &glyph_count_end, 10);
num_charstrings = strtol (p, &glyph_count_end, 10);
if (p == glyph_count_end)
return CAIRO_INT_STATUS_UNSUPPORTED;
@ -1311,7 +1311,7 @@ _cairo_type1_subset_init (cairo_type1_subset_t *type1_subset,
cairo_bool_t hex_encode)
{
cairo_type1_font_subset_t font;
cairo_status_t status;
cairo_status_t status, status_ignored;
unsigned long parent_glyph, length;
unsigned int i;
cairo_unscaled_font_t *unscaled_font;
@ -1387,7 +1387,7 @@ _cairo_type1_subset_init (cairo_type1_subset_t *type1_subset,
fail2:
free (type1_subset->base_font);
fail1:
_cairo_type1_font_subset_fini (&font);
status_ignored = _cairo_type1_font_subset_fini (&font);
return status;
}

Просмотреть файл

@ -3529,24 +3529,25 @@ cairo_xlib_surface_set_size (cairo_surface_t *abstract_surface,
int height)
{
cairo_xlib_surface_t *surface = (cairo_xlib_surface_t *) abstract_surface;
cairo_status_t status;
if (unlikely (abstract_surface->status))
return;
if (unlikely (abstract_surface->finished)) {
_cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
status = _cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
return;
}
if (! _cairo_surface_is_xlib (abstract_surface)) {
_cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
status = _cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
return;
}
if (width > XLIB_COORD_MAX || height > XLIB_COORD_MAX) {
_cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_INVALID_SIZE));
status = _cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_INVALID_SIZE));
return;
}

Просмотреть файл

@ -701,14 +701,15 @@ cairo_push_group_with_content (cairo_t *cr, cairo_content_t content)
const cairo_rectangle_int_t *clip_extents;
cairo_rectangle_int_t extents;
cairo_matrix_t matrix;
cairo_bool_t is_empty;
parent_surface = _cairo_gstate_get_target (cr->gstate);
/* Get the extents that we'll use in creating our new group surface */
_cairo_surface_get_extents (parent_surface, &extents);
is_empty = _cairo_surface_get_extents (parent_surface, &extents);
clip_extents = _cairo_clip_get_extents (_cairo_gstate_get_clip (cr->gstate));
if (clip_extents != NULL)
_cairo_rectangle_intersect (&extents, clip_extents);
is_empty = _cairo_rectangle_intersect (&extents, clip_extents);
group_surface = _cairo_surface_create_similar_solid (parent_surface,
content,
@ -3199,6 +3200,7 @@ cairo_set_scaled_font (cairo_t *cr,
const cairo_scaled_font_t *scaled_font)
{
cairo_status_t status;
cairo_bool_t was_previous;
if (unlikely (cr->status))
return;
@ -3215,6 +3217,7 @@ cairo_set_scaled_font (cairo_t *cr,
if (scaled_font == cr->gstate->scaled_font)
return;
was_previous = scaled_font == cr->gstate->previous_scaled_font;
status = _cairo_gstate_set_font_face (cr->gstate, scaled_font->font_face);
if (unlikely (status))
@ -3226,6 +3229,13 @@ cairo_set_scaled_font (cairo_t *cr,
_cairo_gstate_set_font_options (cr->gstate, &scaled_font->options);
/* XXX: Mozilla code assumes that the ctm of a scaled font doesn't need to
* match the context ctm. This assumption breaks the previous_scaled_font
* cache. So we avoid using the cache for now.
if (was_previous)
cr->gstate->scaled_font = cairo_scaled_font_reference ((cairo_scaled_font_t *) scaled_font);
*/
return;
BAIL: