[cairo-commit] Branch '1.10' - 2 commits - src/cairo-path-bounds.c test/bug-extents.c test/bug-extents.image16.ref.png test/bug-extents.ps.ref.png test/bug-extents.quartz.ref.png test/bug-extents.ref.png test/bug-extents.xlib.ref.png test/Makefile.am test/Makefile.sources
Andrea Canciani
ranma42 at kemper.freedesktop.org
Tue Dec 14 13:17:36 PST 2010
src/cairo-path-bounds.c | 2 +
test/Makefile.am | 5 +++
test/Makefile.sources | 1
test/bug-extents.c | 59 +++++++++++++++++++++++++++++++++++++++
test/bug-extents.image16.ref.png |binary
test/bug-extents.ps.ref.png |binary
test/bug-extents.quartz.ref.png |binary
test/bug-extents.ref.png |binary
test/bug-extents.xlib.ref.png |binary
9 files changed, 67 insertions(+)
New commits:
commit 4aabff8f6740e2027febd97c1863f7ba5a46cb92
Author: Andrea Canciani <ranma42 at gmail.com>
Date: Tue Dec 14 17:56:00 2010 +0100
path-bounder: Update current point after curve_to op
Even if the curve_to is completely within the current extents box, the
current point needs to be updated because the shape of following ops
depends on the position of the current point.
Fixes bug-extents.
diff --git a/src/cairo-path-bounds.c b/src/cairo-path-bounds.c
index 75308c6..2e7b6bd 100644
--- a/src/cairo-path-bounds.c
+++ b/src/cairo-path-bounds.c
@@ -131,6 +131,8 @@ _cairo_path_bounder_curve_to (void *closure,
else
{
/* All control points are within the current extents. */
+ bounder->current_point = *d;
+
return CAIRO_STATUS_SUCCESS;
}
}
commit 5996652364efa4fb4ae6c984ddf6ddad8868782b
Author: Andrea Canciani <ranma42 at gmail.com>
Date: Tue Dec 14 20:15:28 2010 +0100
test: Add bug-extents
Add a test for the computation of approximate extents used by most
backends to esimate the region affected by drawing operations.
Based on:
http://lists.cairographics.org/archives/cairo/2010-December/021331.html
diff --git a/test/Makefile.am b/test/Makefile.am
index ad2b959..9b673d2 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -162,6 +162,11 @@ REFERENCE_IMAGES = \
bug-bo-rectangular.ref.png \
bug-bo-rectangular.image16.ref.png \
bug-bo-rectangular.ps.xfail.png \
+ bug-extents.image16.ref.png \
+ bug-extents.quartz.ref.png \
+ bug-extents.ps.ref.png \
+ bug-extents.ref.png \
+ bug-extents.xlib.ref.png \
bug-seams.ref.png \
bug-seams.xlib.ref.png \
bug-seams.xlib-fallback.ref.png \
diff --git a/test/Makefile.sources b/test/Makefile.sources
index b6431d1..487fedd 100644
--- a/test/Makefile.sources
+++ b/test/Makefile.sources
@@ -14,6 +14,7 @@ test_sources = \
big-trap.c \
bilevel-image.c \
bug-bo-rectangular.c \
+ bug-extents.c \
bug-seams.c \
caps.c \
caps-joins.c \
diff --git a/test/bug-extents.c b/test/bug-extents.c
new file mode 100644
index 0000000..4edb4a5
--- /dev/null
+++ b/test/bug-extents.c
@@ -0,0 +1,59 @@
+/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
+/*
+ * Copyright 2010 Andrea Canciani
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Andrea Canciani <ranma42 at gmail.com>
+ */
+
+#include "cairo-test.h"
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_paint (cr);
+
+ cairo_translate (cr, 0, -25);
+
+ cairo_move_to (cr, 50, 200);
+ cairo_curve_to (cr, 50, 150, 100, 50, 150, 50);
+ cairo_curve_to (cr, 200, 50, 250, 250, 200, 250);
+ cairo_curve_to (cr, 150, 250, 200, 50, 50, 100);
+ cairo_curve_to (cr, -100, 150, 200, 150, 200, 200);
+ cairo_curve_to (cr, 200, 250, 50, 250, 50, 200);
+
+ cairo_set_source_rgb (cr, 0, 0, 0);
+ cairo_fill_preserve (cr);
+
+ cairo_set_source_rgb (cr, 1, 0, 0);
+ cairo_stroke (cr);
+
+ return CAIRO_TEST_SUCCESS;
+}
+
+CAIRO_TEST (bug_extents,
+ "Tests a bug in the computation of approximate extents",
+ "extents", /* keywords */
+ NULL, /* requirements */
+ 250, 250,
+ NULL, draw)
diff --git a/test/bug-extents.image16.ref.png b/test/bug-extents.image16.ref.png
new file mode 100644
index 0000000..8eb3d4b
Binary files /dev/null and b/test/bug-extents.image16.ref.png differ
diff --git a/test/bug-extents.ps.ref.png b/test/bug-extents.ps.ref.png
new file mode 100644
index 0000000..2d55405
Binary files /dev/null and b/test/bug-extents.ps.ref.png differ
diff --git a/test/bug-extents.quartz.ref.png b/test/bug-extents.quartz.ref.png
new file mode 100644
index 0000000..2973448
Binary files /dev/null and b/test/bug-extents.quartz.ref.png differ
diff --git a/test/bug-extents.ref.png b/test/bug-extents.ref.png
new file mode 100644
index 0000000..c388bad
Binary files /dev/null and b/test/bug-extents.ref.png differ
diff --git a/test/bug-extents.xlib.ref.png b/test/bug-extents.xlib.ref.png
new file mode 100644
index 0000000..c2db4f0
Binary files /dev/null and b/test/bug-extents.xlib.ref.png differ
More information about the cairo-commit
mailing list