xref: /haiku/headers/libs/agg/agg_vpgen_clip_polygon.h (revision 39241fe22890fb958b6ba32d6ab9526da98be187)
1 //----------------------------------------------------------------------------
2 // Anti-Grain Geometry - Version 2.2
3 // Copyright (C) 2002-2004 Maxim Shemanarev (http://www.antigrain.com)
4 //
5 // Permission to copy, use, modify, sell and distribute this software
6 // is granted provided this copyright notice appears in all copies.
7 // This software is provided "as is" without express or implied
8 // warranty, and with no claim as to its suitability for any purpose.
9 //
10 //----------------------------------------------------------------------------
11 // Contact: mcseem@antigrain.com
12 //          mcseemagg@yahoo.com
13 //          http://www.antigrain.com
14 //----------------------------------------------------------------------------
15 
16 #ifndef AGG_VPGEN_CLIP_POLYGON_INCLUDED
17 #define AGG_VPGEN_CLIP_POLYGON_INCLUDED
18 
19 #include "agg_basics.h"
20 
21 namespace agg
22 {
23 
24     //======================================================vpgen_clip_polygon
25     //
26     // See Implementation agg_vpgen_clip_polygon.cpp
27     //
28     class vpgen_clip_polygon
29     {
30     public:
31         vpgen_clip_polygon() :
32             m_clip_box(0, 0, 1, 1),
33             m_x1(0),
34             m_y1(0),
35             m_clip_flags(0),
36             m_num_vertices(0),
37             m_vertex(0),
38             m_cmd(path_cmd_move_to)
39         {
40         }
41 
42         void clip_box(double x1, double y1, double x2, double y2)
43         {
44             m_clip_box.x1 = x1;
45             m_clip_box.y1 = y1;
46             m_clip_box.x2 = x2;
47             m_clip_box.y2 = y2;
48             m_clip_box.normalize();
49         }
50 
51 
52         double x1() const { return m_clip_box.x1; }
53         double y1() const { return m_clip_box.y1; }
54         double x2() const { return m_clip_box.x2; }
55         double y2() const { return m_clip_box.y2; }
56 
57         void     reset();
58         void     move_to(double x, double y);
59         void     line_to(double x, double y);
60         unsigned vertex(double* x, double* y);
61 
62     private:
63         unsigned clipping_flags(double x, double y);
64 
65     private:
66         rect_d        m_clip_box;
67         double        m_x1;
68         double        m_y1;
69         unsigned      m_clip_flags;
70         double        m_x[4];
71         double        m_y[4];
72         unsigned      m_num_vertices;
73         unsigned      m_vertex;
74         unsigned      m_cmd;
75     };
76 
77 }
78 
79 
80 #endif
81