13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/**************************************************************************
23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright 2009 VMware, Inc.  All Rights Reserved.
43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a
63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the
73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * "Software"), to deal in the Software without restriction, including
83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * without limitation the rights to use, copy, modify, merge, publish,
93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * distribute, sub license, and/or sell copies of the Software, and to
103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * permit persons to whom the Software is furnished to do so, subject to
113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the following conditions:
123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice (including the
143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * next paragraph) shall be included in all copies or substantial portions
153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * of the Software.
163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **************************************************************************/
263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifndef ARC_H
283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define ARC_H
293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "VG/openvg.h"
313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct polygon;
333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct matrix;
343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct stroker;
353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct path;
363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct arc {
383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   VGPathSegment type;
393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   VGfloat cx, cy;
413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   VGfloat a, b;
433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   VGfloat theta;
453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   VGfloat cos_theta, sin_theta;
463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   VGfloat eta1;
483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   VGfloat eta2;
493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   VGfloat x1, y1, x2, y2;
513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   VGboolean is_valid;
533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org};
543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid arc_init(struct arc *arc,
563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org              VGPathSegment type,
573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org              VGfloat x1, VGfloat y1,
583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org              VGfloat x2, VGfloat y2,
593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org              VGfloat rh, VGfloat rv,
603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org              VGfloat rot);
613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid arc_add_to_polygon(struct arc *arc,
633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                        struct polygon *poly,
643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                        struct matrix *matrix);
653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid arc_to_path(struct arc *arc,
683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                 struct path *p,
693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                 struct matrix *matrix);
703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid arc_stroke_cb(struct arc *arc,
723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                   struct stroker *stroke,
733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                   struct matrix *matrix);
743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid arc_stroker_emit(struct arc *arc,
763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                      struct stroker *stroke,
773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                      struct matrix *matrix);
783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif
81