update to cairo 1.12.8

from Brad.

ok ajacoutot@
This commit is contained in:
eric 2012-11-12 12:29:07 +00:00
parent 94a8e79e3b
commit 1e37bce3df
6 changed files with 22 additions and 291 deletions

View File

@ -1,25 +1,23 @@
# $OpenBSD: Makefile,v 1.42 2012/09/26 15:04:09 sthen Exp $
# $OpenBSD: Makefile,v 1.43 2012/11/12 12:29:07 eric Exp $
COMMENT= vector graphics library
DISTNAME= cairo-1.12.2
SHARED_LIBS+= cairo 12.0
DISTNAME= cairo-1.12.8
SHARED_LIBS+= cairo 12.1
SHARED_LIBS+= cairo-gobject 1.0
SHARED_LIBS+= cairo-script-interpreter 1.0
CATEGORIES= graphics
DPB_PROPERTIES= parallel
EXTRACT_SUFX= .tar.xz
REVISION= 2
HOMEPAGE= http://cairographics.org/
MAINTAINER= Eric Faurot <eric@openbsd.org>
WANTLIB= GL X11 Xau Xdamage Xdmcp Xext Xfixes Xrender \
Xxf86vm c drm expat ffi fontconfig freetype \
glib-2.0 gobject-2.0 gthread-2.0 m pcre pixman-1 \
png pthread-stubs pthread stdc++ xcb xcb-render \
xcb-shm z
WANTLIB= GL X11 Xau Xdamage Xdmcp Xext Xfixes Xrender Xxf86vm \
drm expat ffi fontconfig freetype glib-2.0 gobject-2.0 \
gthread-2.0 m pcre pixman-1 png pthread-stubs pthread \
stdc++ xcb xcb-render xcb-shm z
# LGPLv2.1 / MPL 1.1
PERMIT_PACKAGE_CDROM= Yes

View File

@ -1,2 +1,2 @@
SHA256 (cairo-1.12.2.tar.xz) = t4a8SnBUK8sJ8tnRPl5qDIZAjL9tHt3l8N6Afuz5P5Y=
SIZE (cairo-1.12.2.tar.xz) = 42051584
SHA256 (cairo-1.12.8.tar.xz) = j7tvxmEXq0EAutgwy0R5SX5TxvP6y5i/BcjSmFVOvdk=
SIZE (cairo-1.12.8.tar.xz) = 42113752

View File

@ -1,11 +1,11 @@
$OpenBSD: patch-configure,v 1.10 2012/08/16 17:03:18 eric Exp $
$OpenBSD: patch-configure,v 1.11 2012/11/12 12:29:07 eric Exp $
Use `Requires', not `Requires.private', because otherwise libraries
required for linking aren't exposed.
--- configure.orig Sun Apr 29 14:49:59 2012
+++ configure Mon Aug 6 00:31:32 2012
@@ -17696,10 +17696,7 @@ if test "x$PKG_CONFIG" = x; then
--- configure.orig Mon Oct 22 06:08:43 2012
+++ configure Wed Oct 24 03:51:46 2012
@@ -17954,10 +17954,7 @@ if test "x$PKG_CONFIG" = x; then
as_fn_error $? "pkg-config >= $PKGCONFIG_REQUIRED required but not found (http://pkgconfig.freedesktop.org/)" "$LINENO" 5
fi

View File

@ -1,265 +0,0 @@
polygon-reduce: Reduce broken stopped-edge continuation
This is hopefully a lesser used path and the attempted optimisation to
continue a stopped edge with a colinear stopped edge highly unlikely and
lost in the noise of the general inefficiency of the routine. As it was
broken, rather than attempt to rectify the "optimisation" remove it.
$OpenBSD: patch-src_cairo-polygon-reduce_c,v 1.1 2012/08/16 17:03:18 eric Exp $
--- src/cairo-polygon-reduce.c.orig Thu Apr 19 14:17:58 2012
+++ src/cairo-polygon-reduce.c Sun Aug 5 10:17:23 2012
@@ -42,6 +42,8 @@
#include "cairo-freelist-private.h"
#include "cairo-combsort-inline.h"
+#define DEBUG_POLYGON 0
+
typedef cairo_point_t cairo_bo_point32_t;
typedef struct _cairo_bo_intersect_ordinate {
@@ -114,7 +116,6 @@ typedef struct _cairo_bo_event_queue {
typedef struct _cairo_bo_sweep_line {
cairo_bo_edge_t *head;
- cairo_bo_edge_t *stopped;
int32_t current_y;
cairo_bo_edge_t *current_edge;
} cairo_bo_sweep_line_t;
@@ -476,8 +477,8 @@ edges_compare_x_for_y (const cairo_bo_edge_t *a,
static inline int
_line_equal (const cairo_line_t *a, const cairo_line_t *b)
{
- return a->p1.x == b->p1.x && a->p1.y == b->p1.y &&
- a->p2.x == b->p2.x && a->p2.y == b->p2.y;
+ return (a->p1.x == b->p1.x && a->p1.y == b->p1.y &&
+ a->p2.x == b->p2.x && a->p2.y == b->p2.y);
}
static int
@@ -1024,7 +1025,6 @@ static void
_cairo_bo_sweep_line_init (cairo_bo_sweep_line_t *sweep_line)
{
sweep_line->head = NULL;
- sweep_line->stopped = NULL;
sweep_line->current_y = INT32_MIN;
sweep_line->current_edge = NULL;
}
@@ -1139,6 +1139,8 @@ edges_colinear (const cairo_bo_edge_t *a, const cairo_
*/
if (a->edge.line.p1.y == b->edge.line.p1.y) {
return a->edge.line.p1.x == b->edge.line.p1.x;
+ } else if (a->edge.line.p2.y == b->edge.line.p2.y) {
+ return a->edge.line.p2.x == b->edge.line.p2.x;
} else if (a->edge.line.p1.y < b->edge.line.p1.y) {
return edge_compare_for_y_against_x (b,
a->edge.line.p1.y,
@@ -1205,82 +1207,48 @@ _active_edges_to_polygon (cairo_bo_edge_t *left,
cairo_polygon_t *polygon)
{
cairo_bo_edge_t *right;
+ unsigned int mask;
- if (fill_rule == CAIRO_FILL_RULE_WINDING) {
- while (left != NULL) {
- int in_out = left->edge.dir;
+ if (fill_rule == CAIRO_FILL_RULE_WINDING)
+ mask = ~0;
+ else
+ mask = 1;
- right = left->next;
- if (left->deferred.right == NULL) {
- while (right != NULL && right->deferred.right == NULL)
- right = right->next;
+ while (left != NULL) {
+ int in_out = left->edge.dir;
- if (right != NULL && edges_colinear (left, right)) {
- /* continuation on left */
- left->deferred = right->deferred;
- right->deferred.right = NULL;
- }
- }
-
- right = left->next;
- while (right != NULL) {
- if (right->deferred.right != NULL)
- _cairo_bo_edge_end (right, top, polygon);
-
- in_out += right->edge.dir;
- if (in_out == 0) {
- cairo_bo_edge_t *next;
- cairo_bool_t skip = FALSE;
-
- /* skip co-linear edges */
- next = right->next;
- if (next != NULL)
- skip = edges_colinear (right, next);
-
- if (! skip)
- break;
- }
-
+ right = left->next;
+ if (left->deferred.right == NULL) {
+ while (right != NULL && right->deferred.right == NULL)
right = right->next;
- }
- _cairo_bo_edge_start_or_continue (left, right, top, polygon);
-
- left = right;
- if (left != NULL)
- left = left->next;
+ if (right != NULL && edges_colinear (left, right)) {
+ /* continuation on left */
+ left->deferred = right->deferred;
+ right->deferred.right = NULL;
+ }
}
- } else {
- while (left != NULL) {
- int in_out = 0;
- right = left->next;
- while (right != NULL) {
- if (right->deferred.right != NULL)
- _cairo_bo_edge_end (right, top, polygon);
+ right = left->next;
+ while (right != NULL) {
+ if (right->deferred.right != NULL)
+ _cairo_bo_edge_end (right, top, polygon);
- if ((in_out++ & 1) == 0) {
- cairo_bo_edge_t *next;
- cairo_bool_t skip = FALSE;
-
- /* skip co-linear edges */
- next = right->next;
- if (next != NULL)
- skip = edges_colinear (right, next);
-
- if (! skip)
- break;
- }
-
- right = right->next;
+ in_out += right->edge.dir;
+ if ((in_out & mask) == 0) {
+ /* skip co-linear edges */
+ if (right->next == NULL || !edges_colinear (right, right->next))
+ break;
}
- _cairo_bo_edge_start_or_continue (left, right, top, polygon);
-
- left = right;
- if (left != NULL)
- left = left->next;
+ right = right->next;
}
+
+ _cairo_bo_edge_start_or_continue (left, right, top, polygon);
+
+ left = right;
+ if (left != NULL)
+ left = left->next;
}
}
@@ -1303,12 +1271,6 @@ _cairo_bentley_ottmann_tessellate_bo_edges (cairo_bo_e
while ((event = _cairo_bo_event_dequeue (&event_queue))) {
if (event->point.y != sweep_line.current_y) {
- for (e1 = sweep_line.stopped; e1; e1 = e1->next) {
- if (e1->deferred.right != NULL)
- _cairo_bo_edge_end (e1, e1->edge.bottom, polygon);
- }
- sweep_line.stopped = NULL;
-
_active_edges_to_polygon (sweep_line.head,
sweep_line.current_y,
fill_rule, polygon);
@@ -1328,23 +1290,6 @@ _cairo_bentley_ottmann_tessellate_bo_edges (cairo_bo_e
if (unlikely (status))
goto unwind;
- /* check to see if this is a continuation of a stopped edge */
- /* XXX change to an infinitesimal lengthening rule */
- for (left = sweep_line.stopped; left; left = left->next) {
- if (e1->edge.top <= left->edge.bottom &&
- edges_colinear (e1, left))
- {
- e1->deferred = left->deferred;
- if (left->prev != NULL)
- left->prev = left->next;
- else
- sweep_line.stopped = left->next;
- if (left->next != NULL)
- left->next->prev = left->prev;
- break;
- }
- }
-
left = e1->prev;
right = e1->next;
@@ -1371,14 +1316,8 @@ _cairo_bentley_ottmann_tessellate_bo_edges (cairo_bo_e
_cairo_bo_sweep_line_delete (&sweep_line, e1);
- /* first, check to see if we have a continuation via a fresh edge */
- if (e1->deferred.right != NULL) {
- e1->next = sweep_line.stopped;
- if (sweep_line.stopped != NULL)
- sweep_line.stopped->prev = e1;
- sweep_line.stopped = e1;
- e1->prev = NULL;
- }
+ if (e1->deferred.right != NULL)
+ _cairo_bo_edge_end (e1, e1->edge.bottom, polygon);
if (left != NULL && right != NULL) {
status = _cairo_bo_event_queue_insert_if_intersect_below_current_y (&event_queue, left, right);
@@ -1420,10 +1359,6 @@ _cairo_bentley_ottmann_tessellate_bo_edges (cairo_bo_e
}
}
- for (e1 = sweep_line.stopped; e1; e1 = e1->next) {
- if (e1->deferred.right != NULL)
- _cairo_bo_edge_end (e1, e1->edge.bottom, polygon);
- }
unwind:
_cairo_bo_event_queue_fini (&event_queue);
@@ -1447,6 +1382,12 @@ _cairo_polygon_reduce (cairo_polygon_t *polygon,
if (unlikely (0 == num_events))
return CAIRO_STATUS_SUCCESS;
+ if (DEBUG_POLYGON) {
+ FILE *file = fopen ("reduce_in.txt", "w");
+ _cairo_debug_print_polygon (file, polygon);
+ fclose (file);
+ }
+
events = stack_events;
event_ptrs = stack_event_ptrs;
if (num_events > ARRAY_LENGTH (stack_events)) {
@@ -1482,10 +1423,16 @@ _cairo_polygon_reduce (cairo_polygon_t *polygon,
num_events,
fill_rule,
polygon);
- polygon->num_limits = num_limits;
+ polygon->num_limits = num_limits;
if (events != stack_events)
free (events);
+
+ if (DEBUG_POLYGON) {
+ FILE *file = fopen ("reduce_out.txt", "w");
+ _cairo_debug_print_polygon (file, polygon);
+ fclose (file);
+ }
return status;
}

View File

@ -1,14 +1,12 @@
$OpenBSD: patch-util_cairo-fdr_Makefile_in,v 1.1 2012/08/16 17:03:18 eric Exp $
--- util/cairo-fdr/Makefile.in.orig Sun Apr 29 20:49:57 2012
+++ util/cairo-fdr/Makefile.in Thu Aug 16 18:08:18 2012
@@ -376,8 +376,8 @@ AM_CPPFLAGS = -I$(top_srcdir)/src \
$OpenBSD: patch-util_cairo-fdr_Makefile_in,v 1.2 2012/11/12 12:29:07 eric Exp $
--- util/cairo-fdr/Makefile.in.orig Mon Oct 22 06:08:40 2012
+++ util/cairo-fdr/Makefile.in Wed Oct 24 03:52:52 2012
@@ -379,7 +379,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/src \
cairo_fdr_la_SOURCES = fdr.c
cairo_fdr_la_CPPFLAGS = $(AM_CPPFLAGS)
cairo_fdr_la_CFLAGS = $(CAIRO_CFLAGS)
-cairo_fdr_la_LDFLAGS = -module -no-undefined
-cairo_fdr_la_LIBADD = -ldl
+cairo_fdr_la_LDFLAGS = -module -no-undefined -avoid-version
+cairo_fdr_la_LIBADD =
@CAIRO_HAS_DL_TRUE@cairo_fdr_la_LIBADD = -ldl
all: all-am
.SUFFIXES:

View File

@ -1,7 +1,7 @@
$OpenBSD: patch-util_cairo-trace_Makefile_in,v 1.1 2012/08/26 17:22:27 eric Exp $
--- util/cairo-trace/Makefile.in.orig Sun Aug 26 14:51:26 2012
+++ util/cairo-trace/Makefile.in Sun Aug 26 14:51:03 2012
@@ -396,7 +396,7 @@ libcairo_trace_la_CPPFLAGS = -DCAIRO_TRACE_OUTDIR="\"$
$OpenBSD: patch-util_cairo-trace_Makefile_in,v 1.2 2012/11/12 12:29:07 eric Exp $
--- util/cairo-trace/Makefile.in.orig Mon Oct 22 06:08:41 2012
+++ util/cairo-trace/Makefile.in Wed Oct 24 03:51:46 2012
@@ -399,7 +399,7 @@ libcairo_trace_la_CPPFLAGS = -DCAIRO_TRACE_OUTDIR="\"$
$(AM_CPPFLAGS)
libcairo_trace_la_CFLAGS = $(CAIRO_CFLAGS) $(real_pthread_CFLAGS)