Viewport clipping now works with both GL and Gallium.
[cairo/gpu.git] / test / rel-path.c
blobd1ef259200c643a5ee10671d249ce2c849186a4f
1 /*
2 * Copyright © 2005 Keith Packard
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of Keith Packard not be used in
9 * advertising or publicity pertaining to distribution of the software without
10 * specific, written prior permission. Keith Packard makes no
11 * representations about the suitability of this software for any purpose. It
12 * is provided "as is" without express or implied warranty.
14 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20 * PERFORMANCE OF THIS SOFTWARE.
23 #include "cairo-test.h"
25 #define SIZE 10
27 static cairo_status_t
28 invalid_rel_move_to (cairo_surface_t *target)
30 cairo_t *cr;
31 cairo_status_t status;
33 cr = cairo_create (target);
34 cairo_rel_move_to (cr, SIZE, SIZE/2);
35 status = cairo_status (cr);
36 cairo_destroy (cr);
38 return status;
41 static cairo_status_t
42 invalid_rel_line_to (cairo_surface_t *target)
44 cairo_t *cr;
45 cairo_status_t status;
47 cr = cairo_create (target);
48 cairo_rel_line_to (cr, -SIZE, SIZE/2);
49 status = cairo_status (cr);
50 cairo_destroy (cr);
52 return status;
55 static cairo_status_t
56 invalid_rel_curve_to (cairo_surface_t *target)
58 cairo_t *cr;
59 cairo_status_t status;
61 cr = cairo_create (target);
62 cairo_rel_curve_to (cr,
63 SIZE/2, -SIZE/2,
64 SIZE*2/3, -SIZE/3,
65 SIZE/2, -SIZE);
66 status = cairo_status (cr);
67 cairo_destroy (cr);
69 return status;
72 static cairo_test_status_t
73 draw (cairo_t *cr, int width, int height)
75 const cairo_test_context_t *ctx = cairo_test_get_context (cr);
76 cairo_status_t status;
77 cairo_test_status_t result;
79 /* first test that a relative move without a current point fails... */
80 status = invalid_rel_move_to (cairo_get_target (cr));
81 if (status != CAIRO_STATUS_NO_CURRENT_POINT) {
82 result = cairo_test_status_from_status (ctx, status);
83 if (result == CAIRO_TEST_NO_MEMORY)
84 return result;
86 cairo_test_log (ctx, "Error: invalid cairo_rel_move_to() did not raise NO_CURRENT_POINT\n");
87 return result;
90 status = invalid_rel_line_to (cairo_get_target (cr));
91 if (status != CAIRO_STATUS_NO_CURRENT_POINT) {
92 result = cairo_test_status_from_status (ctx, status);
93 if (result == CAIRO_TEST_NO_MEMORY)
94 return result;
96 cairo_test_log (ctx, "Error: invalid cairo_rel_line_to() did not raise NO_CURRENT_POINT\n");
97 return result;
100 status = invalid_rel_curve_to (cairo_get_target (cr));
101 if (status != CAIRO_STATUS_NO_CURRENT_POINT) {
102 result = cairo_test_status_from_status (ctx, status);
103 if (result == CAIRO_TEST_NO_MEMORY)
104 return result;
106 cairo_test_log (ctx, "Error: invalid cairo_rel_curve_to() did not raise NO_CURRENT_POINT\n");
107 return result;
110 cairo_set_source_rgb (cr, 1, 1, 1);
111 cairo_move_to (cr, 0, 0);
112 cairo_rel_move_to (cr, SIZE, SIZE/2);
113 cairo_rel_line_to (cr, -SIZE, SIZE/2);
114 cairo_rel_curve_to (cr,
115 SIZE/2, -SIZE/2,
116 SIZE*2/3, -SIZE/3,
117 SIZE/2, -SIZE);
119 cairo_stroke (cr);
121 return CAIRO_TEST_SUCCESS;
124 CAIRO_TEST (rel_path,
125 "Tests calls to various relative path functions",
126 "path", /* keywords */
127 NULL, /* requirements */
128 SIZE, SIZE,
129 NULL, draw)