1544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin/**************************************************************************
2544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin *
3544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * Copyright 2009 VMware, Inc.  All Rights Reserved.
4544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin *
5544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * Permission is hereby granted, free of charge, to any person obtaining a
6544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * copy of this software and associated documentation files (the
7544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * "Software"), to deal in the Software without restriction, including
8544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * without limitation the rights to use, copy, modify, merge, publish,
9544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * distribute, sub license, and/or sell copies of the Software, and to
10544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * permit persons to whom the Software is furnished to do so, subject to
11544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * the following conditions:
12544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin *
13544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * The above copyright notice and this permission notice (including the
14544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * next paragraph) shall be included in all copies or substantial portions
15544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * of the Software.
16544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin *
17544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
20544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
21544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin *
25544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin **************************************************************************/
26544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
27544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#ifndef ARC_H
28544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#define ARC_H
29544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
30544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#include "VG/openvg.h"
31544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
32544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinstruct polygon;
33544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinstruct matrix;
34544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinstruct stroker;
35544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinstruct path;
36544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
37544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinstruct arc {
38544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin   VGPathSegment type;
39544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
40544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin   VGfloat cx, cy;
41544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
42544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin   VGfloat a, b;
43544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
44544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin   VGfloat theta;
45544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin   VGfloat cos_theta, sin_theta;
46544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
47544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin   VGfloat eta1;
48544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin   VGfloat eta2;
49544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
50544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin   VGfloat x1, y1, x2, y2;
51544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
52544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin   VGboolean is_valid;
53544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin};
54544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
55544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinvoid arc_init(struct arc *arc,
56544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin              VGPathSegment type,
57544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin              VGfloat x1, VGfloat y1,
58544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin              VGfloat x2, VGfloat y2,
59544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin              VGfloat rh, VGfloat rv,
60544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin              VGfloat rot);
61544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
62544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinvoid arc_add_to_polygon(struct arc *arc,
63544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                        struct polygon *poly,
64544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                        struct matrix *matrix);
65544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
66544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
67544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinvoid arc_to_path(struct arc *arc,
68544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                 struct path *p,
69544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                 struct matrix *matrix);
70544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
71544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinvoid arc_stroke_cb(struct arc *arc,
72544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                   struct stroker *stroke,
73544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                   struct matrix *matrix);
74544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
75544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusinvoid arc_stroker_emit(struct arc *arc,
76544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                      struct stroker *stroke,
77544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin                      struct matrix *matrix);
78544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
79544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin
80544dd4b11f7be76bb00fe29a60eaf2772dcc69caZack Rusin#endif
81