xref: /aosp_15_r20/external/pdfium/third_party/agg23/agg_basics.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker 
2*3ac0a46fSAndroid Build Coastguard Worker //----------------------------------------------------------------------------
3*3ac0a46fSAndroid Build Coastguard Worker // Anti-Grain Geometry - Version 2.3
4*3ac0a46fSAndroid Build Coastguard Worker // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
5*3ac0a46fSAndroid Build Coastguard Worker //
6*3ac0a46fSAndroid Build Coastguard Worker // Permission to copy, use, modify, sell and distribute this software
7*3ac0a46fSAndroid Build Coastguard Worker // is granted provided this copyright notice appears in all copies.
8*3ac0a46fSAndroid Build Coastguard Worker // This software is provided "as is" without express or implied
9*3ac0a46fSAndroid Build Coastguard Worker // warranty, and with no claim as to its suitability for any purpose.
10*3ac0a46fSAndroid Build Coastguard Worker //
11*3ac0a46fSAndroid Build Coastguard Worker //----------------------------------------------------------------------------
12*3ac0a46fSAndroid Build Coastguard Worker // Contact: [email protected]
13*3ac0a46fSAndroid Build Coastguard Worker //          [email protected]
14*3ac0a46fSAndroid Build Coastguard Worker //          http://www.antigrain.com
15*3ac0a46fSAndroid Build Coastguard Worker //----------------------------------------------------------------------------
16*3ac0a46fSAndroid Build Coastguard Worker #ifndef AGG_BASICS_INCLUDED
17*3ac0a46fSAndroid Build Coastguard Worker #define AGG_BASICS_INCLUDED
18*3ac0a46fSAndroid Build Coastguard Worker #ifndef AGG_INT8
19*3ac0a46fSAndroid Build Coastguard Worker #define AGG_INT8 signed char
20*3ac0a46fSAndroid Build Coastguard Worker #endif
21*3ac0a46fSAndroid Build Coastguard Worker #ifndef AGG_INT8U
22*3ac0a46fSAndroid Build Coastguard Worker #define AGG_INT8U unsigned char
23*3ac0a46fSAndroid Build Coastguard Worker #endif
24*3ac0a46fSAndroid Build Coastguard Worker #ifndef AGG_INT16
25*3ac0a46fSAndroid Build Coastguard Worker #define AGG_INT16 short
26*3ac0a46fSAndroid Build Coastguard Worker #endif
27*3ac0a46fSAndroid Build Coastguard Worker #ifndef AGG_INT16U
28*3ac0a46fSAndroid Build Coastguard Worker #define AGG_INT16U unsigned short
29*3ac0a46fSAndroid Build Coastguard Worker #endif
30*3ac0a46fSAndroid Build Coastguard Worker #ifndef AGG_INT32
31*3ac0a46fSAndroid Build Coastguard Worker #define AGG_INT32 int
32*3ac0a46fSAndroid Build Coastguard Worker #endif
33*3ac0a46fSAndroid Build Coastguard Worker #ifndef AGG_INT32U
34*3ac0a46fSAndroid Build Coastguard Worker #define AGG_INT32U unsigned
35*3ac0a46fSAndroid Build Coastguard Worker #endif
36*3ac0a46fSAndroid Build Coastguard Worker #ifndef AGG_INT64
37*3ac0a46fSAndroid Build Coastguard Worker #define AGG_INT64 signed long long
38*3ac0a46fSAndroid Build Coastguard Worker #endif
39*3ac0a46fSAndroid Build Coastguard Worker #ifndef AGG_INT64U
40*3ac0a46fSAndroid Build Coastguard Worker #define AGG_INT64U unsigned long long
41*3ac0a46fSAndroid Build Coastguard Worker #endif
42*3ac0a46fSAndroid Build Coastguard Worker #define AGG_INLINE inline
43*3ac0a46fSAndroid Build Coastguard Worker 
44*3ac0a46fSAndroid Build Coastguard Worker #include <math.h>
45*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_system.h"
46*3ac0a46fSAndroid Build Coastguard Worker 
47*3ac0a46fSAndroid Build Coastguard Worker namespace pdfium
48*3ac0a46fSAndroid Build Coastguard Worker {
49*3ac0a46fSAndroid Build Coastguard Worker namespace agg
50*3ac0a46fSAndroid Build Coastguard Worker {
51*3ac0a46fSAndroid Build Coastguard Worker typedef AGG_INT8   int8;
52*3ac0a46fSAndroid Build Coastguard Worker typedef AGG_INT8U  int8u;
53*3ac0a46fSAndroid Build Coastguard Worker typedef AGG_INT16  int16;
54*3ac0a46fSAndroid Build Coastguard Worker typedef AGG_INT16U int16u;
55*3ac0a46fSAndroid Build Coastguard Worker typedef AGG_INT32  int32;
56*3ac0a46fSAndroid Build Coastguard Worker typedef AGG_INT32U int32u;
57*3ac0a46fSAndroid Build Coastguard Worker typedef AGG_INT64  int64;
58*3ac0a46fSAndroid Build Coastguard Worker typedef AGG_INT64U int64u;
59*3ac0a46fSAndroid Build Coastguard Worker typedef unsigned char cover_type;
60*3ac0a46fSAndroid Build Coastguard Worker enum cover_scale_e {
61*3ac0a46fSAndroid Build Coastguard Worker     cover_shift = 8,
62*3ac0a46fSAndroid Build Coastguard Worker     cover_size  = 1 << cover_shift,
63*3ac0a46fSAndroid Build Coastguard Worker     cover_mask  = cover_size - 1,
64*3ac0a46fSAndroid Build Coastguard Worker     cover_none  = 0,
65*3ac0a46fSAndroid Build Coastguard Worker     cover_full  = cover_mask
66*3ac0a46fSAndroid Build Coastguard Worker };
67*3ac0a46fSAndroid Build Coastguard Worker template<class T> struct rect_base  {
68*3ac0a46fSAndroid Build Coastguard Worker     typedef rect_base<T> self_type;
69*3ac0a46fSAndroid Build Coastguard Worker     T x1;
70*3ac0a46fSAndroid Build Coastguard Worker     T y1;
71*3ac0a46fSAndroid Build Coastguard Worker     T x2;
72*3ac0a46fSAndroid Build Coastguard Worker     T y2;
rect_baserect_base73*3ac0a46fSAndroid Build Coastguard Worker     rect_base() {}
rect_baserect_base74*3ac0a46fSAndroid Build Coastguard Worker     rect_base(T x1_, T y1_, T x2_, T y2_) :
75*3ac0a46fSAndroid Build Coastguard Worker         x1(x1_), y1(y1_), x2(x2_), y2(y2_) {}
normalizerect_base76*3ac0a46fSAndroid Build Coastguard Worker     const self_type& normalize()
77*3ac0a46fSAndroid Build Coastguard Worker     {
78*3ac0a46fSAndroid Build Coastguard Worker         T t;
79*3ac0a46fSAndroid Build Coastguard Worker         if(x1 > x2) {
80*3ac0a46fSAndroid Build Coastguard Worker             t = x1;
81*3ac0a46fSAndroid Build Coastguard Worker             x1 = x2;
82*3ac0a46fSAndroid Build Coastguard Worker             x2 = t;
83*3ac0a46fSAndroid Build Coastguard Worker         }
84*3ac0a46fSAndroid Build Coastguard Worker         if(y1 > y2) {
85*3ac0a46fSAndroid Build Coastguard Worker             t = y1;
86*3ac0a46fSAndroid Build Coastguard Worker             y1 = y2;
87*3ac0a46fSAndroid Build Coastguard Worker             y2 = t;
88*3ac0a46fSAndroid Build Coastguard Worker         }
89*3ac0a46fSAndroid Build Coastguard Worker         return *this;
90*3ac0a46fSAndroid Build Coastguard Worker     }
cliprect_base91*3ac0a46fSAndroid Build Coastguard Worker     bool clip(const self_type& r)
92*3ac0a46fSAndroid Build Coastguard Worker     {
93*3ac0a46fSAndroid Build Coastguard Worker         if(x2 > r.x2) {
94*3ac0a46fSAndroid Build Coastguard Worker             x2 = r.x2;
95*3ac0a46fSAndroid Build Coastguard Worker         }
96*3ac0a46fSAndroid Build Coastguard Worker         if(y2 > r.y2) {
97*3ac0a46fSAndroid Build Coastguard Worker             y2 = r.y2;
98*3ac0a46fSAndroid Build Coastguard Worker         }
99*3ac0a46fSAndroid Build Coastguard Worker         if(x1 < r.x1) {
100*3ac0a46fSAndroid Build Coastguard Worker             x1 = r.x1;
101*3ac0a46fSAndroid Build Coastguard Worker         }
102*3ac0a46fSAndroid Build Coastguard Worker         if(y1 < r.y1) {
103*3ac0a46fSAndroid Build Coastguard Worker             y1 = r.y1;
104*3ac0a46fSAndroid Build Coastguard Worker         }
105*3ac0a46fSAndroid Build Coastguard Worker         return x1 <= x2 && y1 <= y2;
106*3ac0a46fSAndroid Build Coastguard Worker     }
is_validrect_base107*3ac0a46fSAndroid Build Coastguard Worker     bool is_valid() const
108*3ac0a46fSAndroid Build Coastguard Worker     {
109*3ac0a46fSAndroid Build Coastguard Worker         return x1 <= x2 && y1 <= y2;
110*3ac0a46fSAndroid Build Coastguard Worker     }
111*3ac0a46fSAndroid Build Coastguard Worker };
112*3ac0a46fSAndroid Build Coastguard Worker template<class Rect>
intersect_rectangles(const Rect & r1,const Rect & r2)113*3ac0a46fSAndroid Build Coastguard Worker inline Rect intersect_rectangles(const Rect& r1, const Rect& r2)
114*3ac0a46fSAndroid Build Coastguard Worker {
115*3ac0a46fSAndroid Build Coastguard Worker     Rect r = r1;
116*3ac0a46fSAndroid Build Coastguard Worker     if(r.x2 > r2.x2) {
117*3ac0a46fSAndroid Build Coastguard Worker         r.x2 = r2.x2;
118*3ac0a46fSAndroid Build Coastguard Worker     }
119*3ac0a46fSAndroid Build Coastguard Worker     if(r.y2 > r2.y2) {
120*3ac0a46fSAndroid Build Coastguard Worker         r.y2 = r2.y2;
121*3ac0a46fSAndroid Build Coastguard Worker     }
122*3ac0a46fSAndroid Build Coastguard Worker     if(r.x1 < r2.x1) {
123*3ac0a46fSAndroid Build Coastguard Worker         r.x1 = r2.x1;
124*3ac0a46fSAndroid Build Coastguard Worker     }
125*3ac0a46fSAndroid Build Coastguard Worker     if(r.y1 < r2.y1) {
126*3ac0a46fSAndroid Build Coastguard Worker         r.y1 = r2.y1;
127*3ac0a46fSAndroid Build Coastguard Worker     }
128*3ac0a46fSAndroid Build Coastguard Worker     return r;
129*3ac0a46fSAndroid Build Coastguard Worker }
130*3ac0a46fSAndroid Build Coastguard Worker template<class Rect>
unite_rectangles(const Rect & r1,const Rect & r2)131*3ac0a46fSAndroid Build Coastguard Worker inline Rect unite_rectangles(const Rect& r1, const Rect& r2)
132*3ac0a46fSAndroid Build Coastguard Worker {
133*3ac0a46fSAndroid Build Coastguard Worker     Rect r = r1;
134*3ac0a46fSAndroid Build Coastguard Worker     if(r.x2 < r2.x2) {
135*3ac0a46fSAndroid Build Coastguard Worker         r.x2 = r2.x2;
136*3ac0a46fSAndroid Build Coastguard Worker     }
137*3ac0a46fSAndroid Build Coastguard Worker     if(r.y2 < r2.y2) {
138*3ac0a46fSAndroid Build Coastguard Worker         r.y2 = r2.y2;
139*3ac0a46fSAndroid Build Coastguard Worker     }
140*3ac0a46fSAndroid Build Coastguard Worker     if(r.x1 > r2.x1) {
141*3ac0a46fSAndroid Build Coastguard Worker         r.x1 = r2.x1;
142*3ac0a46fSAndroid Build Coastguard Worker     }
143*3ac0a46fSAndroid Build Coastguard Worker     if(r.y1 > r2.y1) {
144*3ac0a46fSAndroid Build Coastguard Worker         r.y1 = r2.y1;
145*3ac0a46fSAndroid Build Coastguard Worker     }
146*3ac0a46fSAndroid Build Coastguard Worker     return r;
147*3ac0a46fSAndroid Build Coastguard Worker }
148*3ac0a46fSAndroid Build Coastguard Worker typedef rect_base<int>    rect;
149*3ac0a46fSAndroid Build Coastguard Worker typedef rect_base<float> rect_d;
150*3ac0a46fSAndroid Build Coastguard Worker enum path_commands_e {
151*3ac0a46fSAndroid Build Coastguard Worker     path_cmd_stop     = 0,
152*3ac0a46fSAndroid Build Coastguard Worker     path_cmd_move_to  = 1,
153*3ac0a46fSAndroid Build Coastguard Worker     path_cmd_line_to  = 2,
154*3ac0a46fSAndroid Build Coastguard Worker     path_cmd_curve3   = 3,
155*3ac0a46fSAndroid Build Coastguard Worker     path_cmd_curve4   = 4,
156*3ac0a46fSAndroid Build Coastguard Worker     path_cmd_curveN   = 5,
157*3ac0a46fSAndroid Build Coastguard Worker     path_cmd_catrom   = 6,
158*3ac0a46fSAndroid Build Coastguard Worker     path_cmd_ubspline = 7,
159*3ac0a46fSAndroid Build Coastguard Worker     path_cmd_end_poly = 0x0F,
160*3ac0a46fSAndroid Build Coastguard Worker     path_cmd_mask     = 0x0F
161*3ac0a46fSAndroid Build Coastguard Worker };
162*3ac0a46fSAndroid Build Coastguard Worker enum path_flags_e {
163*3ac0a46fSAndroid Build Coastguard Worker     path_flags_none  = 0,
164*3ac0a46fSAndroid Build Coastguard Worker     path_flags_ccw   = 0x10,
165*3ac0a46fSAndroid Build Coastguard Worker     path_flags_cw    = 0x20,
166*3ac0a46fSAndroid Build Coastguard Worker     path_flags_close = 0x40,
167*3ac0a46fSAndroid Build Coastguard Worker     path_flags_jr	 = 0x80,
168*3ac0a46fSAndroid Build Coastguard Worker     path_flags_mask  = 0xF0
169*3ac0a46fSAndroid Build Coastguard Worker };
is_vertex(unsigned c)170*3ac0a46fSAndroid Build Coastguard Worker inline bool is_vertex(unsigned c)
171*3ac0a46fSAndroid Build Coastguard Worker {
172*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
173*3ac0a46fSAndroid Build Coastguard Worker     return c >= path_cmd_move_to && c < path_cmd_end_poly;
174*3ac0a46fSAndroid Build Coastguard Worker }
is_drawing(unsigned c)175*3ac0a46fSAndroid Build Coastguard Worker inline bool is_drawing(unsigned c)
176*3ac0a46fSAndroid Build Coastguard Worker {
177*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
178*3ac0a46fSAndroid Build Coastguard Worker     return c >= path_cmd_line_to && c < path_cmd_end_poly;
179*3ac0a46fSAndroid Build Coastguard Worker }
is_stop(unsigned c)180*3ac0a46fSAndroid Build Coastguard Worker inline bool is_stop(unsigned c)
181*3ac0a46fSAndroid Build Coastguard Worker {
182*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
183*3ac0a46fSAndroid Build Coastguard Worker     return c == path_cmd_stop;
184*3ac0a46fSAndroid Build Coastguard Worker }
is_move_to(unsigned c)185*3ac0a46fSAndroid Build Coastguard Worker inline bool is_move_to(unsigned c)
186*3ac0a46fSAndroid Build Coastguard Worker {
187*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
188*3ac0a46fSAndroid Build Coastguard Worker     return c == path_cmd_move_to;
189*3ac0a46fSAndroid Build Coastguard Worker }
is_line_to(unsigned c)190*3ac0a46fSAndroid Build Coastguard Worker inline bool is_line_to(unsigned c)
191*3ac0a46fSAndroid Build Coastguard Worker {
192*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
193*3ac0a46fSAndroid Build Coastguard Worker     return c == path_cmd_line_to;
194*3ac0a46fSAndroid Build Coastguard Worker }
is_curve(unsigned c)195*3ac0a46fSAndroid Build Coastguard Worker inline bool is_curve(unsigned c)
196*3ac0a46fSAndroid Build Coastguard Worker {
197*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
198*3ac0a46fSAndroid Build Coastguard Worker     return c == path_cmd_curve3 || c == path_cmd_curve4;
199*3ac0a46fSAndroid Build Coastguard Worker }
is_curve3(unsigned c)200*3ac0a46fSAndroid Build Coastguard Worker inline bool is_curve3(unsigned c)
201*3ac0a46fSAndroid Build Coastguard Worker {
202*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
203*3ac0a46fSAndroid Build Coastguard Worker     return c == path_cmd_curve3;
204*3ac0a46fSAndroid Build Coastguard Worker }
is_curve4(unsigned c)205*3ac0a46fSAndroid Build Coastguard Worker inline bool is_curve4(unsigned c)
206*3ac0a46fSAndroid Build Coastguard Worker {
207*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
208*3ac0a46fSAndroid Build Coastguard Worker     return c == path_cmd_curve4;
209*3ac0a46fSAndroid Build Coastguard Worker }
is_end_poly(unsigned c)210*3ac0a46fSAndroid Build Coastguard Worker inline bool is_end_poly(unsigned c)
211*3ac0a46fSAndroid Build Coastguard Worker {
212*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
213*3ac0a46fSAndroid Build Coastguard Worker     return (c & path_cmd_mask) == path_cmd_end_poly;
214*3ac0a46fSAndroid Build Coastguard Worker }
is_close(unsigned c)215*3ac0a46fSAndroid Build Coastguard Worker inline bool is_close(unsigned c)
216*3ac0a46fSAndroid Build Coastguard Worker {
217*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
218*3ac0a46fSAndroid Build Coastguard Worker     return (c & ~(path_flags_cw | path_flags_ccw)) ==
219*3ac0a46fSAndroid Build Coastguard Worker            (unsigned{path_cmd_end_poly} | path_flags_close);
220*3ac0a46fSAndroid Build Coastguard Worker }
is_next_poly(unsigned c)221*3ac0a46fSAndroid Build Coastguard Worker inline bool is_next_poly(unsigned c)
222*3ac0a46fSAndroid Build Coastguard Worker {
223*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
224*3ac0a46fSAndroid Build Coastguard Worker     return is_stop(c) || is_move_to(c) || is_end_poly(c);
225*3ac0a46fSAndroid Build Coastguard Worker }
is_cw(unsigned c)226*3ac0a46fSAndroid Build Coastguard Worker inline bool is_cw(unsigned c)
227*3ac0a46fSAndroid Build Coastguard Worker {
228*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
229*3ac0a46fSAndroid Build Coastguard Worker     return (c & path_flags_cw) != 0;
230*3ac0a46fSAndroid Build Coastguard Worker }
is_ccw(unsigned c)231*3ac0a46fSAndroid Build Coastguard Worker inline bool is_ccw(unsigned c)
232*3ac0a46fSAndroid Build Coastguard Worker {
233*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
234*3ac0a46fSAndroid Build Coastguard Worker     return (c & path_flags_ccw) != 0;
235*3ac0a46fSAndroid Build Coastguard Worker }
is_oriented(unsigned c)236*3ac0a46fSAndroid Build Coastguard Worker inline bool is_oriented(unsigned c)
237*3ac0a46fSAndroid Build Coastguard Worker {
238*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
239*3ac0a46fSAndroid Build Coastguard Worker     return (c & (path_flags_cw | path_flags_ccw)) != 0;
240*3ac0a46fSAndroid Build Coastguard Worker }
is_closed(unsigned c)241*3ac0a46fSAndroid Build Coastguard Worker inline bool is_closed(unsigned c)
242*3ac0a46fSAndroid Build Coastguard Worker {
243*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
244*3ac0a46fSAndroid Build Coastguard Worker     return (c & path_flags_close) != 0;
245*3ac0a46fSAndroid Build Coastguard Worker }
get_close_flag(unsigned c)246*3ac0a46fSAndroid Build Coastguard Worker inline unsigned get_close_flag(unsigned c)
247*3ac0a46fSAndroid Build Coastguard Worker {
248*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
249*3ac0a46fSAndroid Build Coastguard Worker     return c & path_flags_close;
250*3ac0a46fSAndroid Build Coastguard Worker }
clear_orientation(unsigned c)251*3ac0a46fSAndroid Build Coastguard Worker inline unsigned clear_orientation(unsigned c)
252*3ac0a46fSAndroid Build Coastguard Worker {
253*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
254*3ac0a46fSAndroid Build Coastguard Worker     return c & ~(path_flags_cw | path_flags_ccw);
255*3ac0a46fSAndroid Build Coastguard Worker }
get_orientation(unsigned c)256*3ac0a46fSAndroid Build Coastguard Worker inline unsigned get_orientation(unsigned c)
257*3ac0a46fSAndroid Build Coastguard Worker {
258*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
259*3ac0a46fSAndroid Build Coastguard Worker     return c & (path_flags_cw | path_flags_ccw);
260*3ac0a46fSAndroid Build Coastguard Worker }
set_orientation(unsigned c,unsigned o)261*3ac0a46fSAndroid Build Coastguard Worker inline unsigned set_orientation(unsigned c, unsigned o)
262*3ac0a46fSAndroid Build Coastguard Worker {
263*3ac0a46fSAndroid Build Coastguard Worker     c &= ~path_flags_jr;
264*3ac0a46fSAndroid Build Coastguard Worker     return clear_orientation(c) | o;
265*3ac0a46fSAndroid Build Coastguard Worker }
266*3ac0a46fSAndroid Build Coastguard Worker struct point_type  {
267*3ac0a46fSAndroid Build Coastguard Worker     float x, y;
268*3ac0a46fSAndroid Build Coastguard Worker     unsigned flag;
point_typepoint_type269*3ac0a46fSAndroid Build Coastguard Worker     point_type() {}
xpoint_type270*3ac0a46fSAndroid Build Coastguard Worker     point_type(float x_, float y_, unsigned flag_ = 0) : x(x_), y(y_), flag(flag_) {}
271*3ac0a46fSAndroid Build Coastguard Worker };
272*3ac0a46fSAndroid Build Coastguard Worker struct vertex_type  {
273*3ac0a46fSAndroid Build Coastguard Worker     float   x, y;
274*3ac0a46fSAndroid Build Coastguard Worker     unsigned cmd;
vertex_typevertex_type275*3ac0a46fSAndroid Build Coastguard Worker     vertex_type() {}
vertex_typevertex_type276*3ac0a46fSAndroid Build Coastguard Worker     vertex_type(float x_, float y_, unsigned cmd_) :
277*3ac0a46fSAndroid Build Coastguard Worker         x(x_), y(y_), cmd(cmd_) {}
278*3ac0a46fSAndroid Build Coastguard Worker };
279*3ac0a46fSAndroid Build Coastguard Worker }
280*3ac0a46fSAndroid Build Coastguard Worker }  // namespace pdfium
281*3ac0a46fSAndroid Build Coastguard Worker #endif
282