1 // This may look like C code, but it is really -*- C++ -*-
2 //
3 // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
4 // Copyright Dirk Lemstra 2014-2017
5 //
6 // Implementation of Drawable (Graphic objects)
7 //
8 
9 #define MAGICKCORE_IMPLEMENTATION  1
10 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1
11 #define MAGICK_DRAWABLE_IMPLEMENTATION
12 
13 #include "Magick++/Include.h"
14 #include <math.h>
15 #include <string>
16 
17 #include "Magick++/Drawable.h"
18 #include "Magick++/Image.h"
19 
20 using namespace std;
21 
operator ==(const Magick::Coordinate & left_,const Magick::Coordinate & right_)22 MagickPPExport int Magick::operator == (const Magick::Coordinate& left_,
23   const Magick::Coordinate& right_)
24 {
25   return((left_.x() == right_.x()) && (left_.y() == right_.y()));
26 }
27 
operator !=(const Magick::Coordinate & left_,const Magick::Coordinate & right_)28 MagickPPExport int Magick::operator != (const Magick::Coordinate& left_,
29   const Magick::Coordinate& right_)
30 {
31   return(!(left_ == right_));
32 }
33 
operator >(const Magick::Coordinate & left_,const Magick::Coordinate & right_)34 MagickPPExport int Magick::operator > (const Magick::Coordinate& left_,
35   const Magick::Coordinate& right_)
36 {
37   return (!(left_ < right_) && (left_ != right_));
38 }
39 
operator <(const Magick::Coordinate & left_,const Magick::Coordinate & right_)40 MagickPPExport int Magick::operator < (const Magick::Coordinate& left_,
41   const Magick::Coordinate& right_)
42 {
43   // Based on distance from origin
44   return((sqrt(left_.x()*left_.x() + left_.y()*left_.y())) <
45     (sqrt(right_.x()*right_.x() + right_.y()*right_.y())));
46 }
47 
operator >=(const Magick::Coordinate & left_,const Magick::Coordinate & right_)48 MagickPPExport int Magick::operator >= (const Magick::Coordinate& left_,
49   const Magick::Coordinate& right_)
50 {
51   return((left_ > right_) || (left_ == right_));
52 }
53 
operator <=(const Magick::Coordinate & left_,const Magick::Coordinate & right_)54 MagickPPExport int Magick::operator <= (const Magick::Coordinate& left_,
55   const Magick::Coordinate& right_)
56 {
57   return((left_ < right_) || (left_ == right_));
58 }
59 
60 /* DrawableBase */
DrawableBase()61 Magick::DrawableBase::DrawableBase()
62 {
63 }
64 
~DrawableBase(void)65 Magick::DrawableBase::~DrawableBase(void)
66 {
67 }
68 
operator ()(MagickCore::DrawingWand * context_) const69 void Magick::DrawableBase::operator()(MagickCore::DrawingWand * context_) const
70 {
71   (void) context_;
72 }
73 
copy() const74 Magick::DrawableBase* Magick::DrawableBase::copy() const
75 {
76   return new DrawableBase(*this);
77 }
78 
79 /* Drawable */
Drawable(void)80 Magick::Drawable::Drawable(void)
81   : dp((Magick::DrawableBase *) NULL)
82 {
83 }
84 
Drawable(const Magick::DrawableBase & original_)85 Magick::Drawable::Drawable(const Magick::DrawableBase& original_)
86   : dp(original_.copy())
87 {
88 }
89 
~Drawable(void)90 Magick::Drawable::~Drawable(void)
91 {
92   delete dp;
93   dp=(Magick::DrawableBase *) NULL;
94 }
95 
Drawable(const Magick::Drawable & original_)96 Magick::Drawable::Drawable(const Magick::Drawable& original_)
97   : dp((original_.dp != (Magick::DrawableBase *) NULL ? original_.dp->copy() :
98     (Magick::DrawableBase *) NULL))
99 {
100 }
101 
operator =(const Magick::Drawable & original_)102 Magick::Drawable& Magick::Drawable::operator= (
103   const Magick::Drawable& original_)
104 {
105   DrawableBase
106     *temp_dp;
107 
108   if (this != &original_)
109     {
110       temp_dp=(original_.dp != (Magick::DrawableBase *) NULL ?
111         original_.dp->copy() : (Magick::DrawableBase *) NULL);
112       delete dp;
113       dp=temp_dp;
114     }
115   return(*this);
116 }
117 
operator ()(MagickCore::DrawingWand * context_) const118 void Magick::Drawable::operator()(MagickCore::DrawingWand * context_) const
119 {
120   if (dp != (Magick::DrawableBase *) NULL)
121     dp->operator()(context_);
122 }
123 
124 /*virtual*/
~VPathBase(void)125 Magick::VPathBase::~VPathBase ( void )
126 {
127 }
128 
129 // Constructor
VPath(void)130 Magick::VPath::VPath ( void )
131   : dp(0)
132 {
133 }
134 
135 // Construct from VPathBase
VPath(const Magick::VPathBase & original_)136 Magick::VPath::VPath ( const Magick::VPathBase& original_ )
137   : dp(original_.copy())
138 {
139 }
140 
141 // Destructor
~VPath(void)142 /* virtual */ Magick::VPath::~VPath ( void )
143 {
144   delete dp;
145   dp = 0;
146 }
147 
148 // Copy constructor
VPath(const Magick::VPath & original_)149 Magick::VPath::VPath ( const Magick::VPath& original_ )
150   : dp(original_.dp? original_.dp->copy(): 0)
151 {
152 }
153 
154 // Assignment operator
operator =(const Magick::VPath & original_)155 Magick::VPath& Magick::VPath::operator= (const Magick::VPath& original_ )
156 {
157   if (this != &original_)
158     {
159       VPathBase* temp_dp = (original_.dp ? original_.dp->copy() : 0);
160       delete dp;
161       dp = temp_dp;
162     }
163   return *this;
164 }
165 
166 // Operator to invoke contained object
operator ()(MagickCore::DrawingWand * context_) const167 void Magick::VPath::operator()( MagickCore::DrawingWand * context_ ) const
168 {
169   if(dp)
170     dp->operator()( context_ );
171 }
172 
173 //
174 // Drawable Objects
175 //
176 
177 // Affine (scaling, rotation, and translation)
DrawableAffine(double sx_,double sy_,double rx_,double ry_,double tx_,double ty_)178 Magick::DrawableAffine::DrawableAffine( double sx_, double sy_,
179                                         double rx_, double ry_,
180                                         double tx_, double ty_ )
181 {
182   _affine.sx = sx_;
183   _affine.rx = rx_;
184   _affine.ry = ry_;
185   _affine.sy = sy_;
186   _affine.tx = tx_;
187   _affine.ty = ty_;
188 }
DrawableAffine(void)189 Magick::DrawableAffine::DrawableAffine( void )
190 {
191   GetAffineMatrix(&_affine);
192 }
~DrawableAffine(void)193 Magick::DrawableAffine::~DrawableAffine( void )
194 {
195 }
operator ()(MagickCore::DrawingWand * context_) const196 void Magick::DrawableAffine::operator()( MagickCore::DrawingWand * context_ ) const
197 {
198   DrawAffine( context_, &_affine );
199 }
copy() const200 Magick::DrawableBase* Magick::DrawableAffine::copy() const
201 {
202   return new DrawableAffine(*this);
203 }
204 
~DrawableAlpha(void)205 Magick::DrawableAlpha::~DrawableAlpha(void)
206 {
207 }
208 
operator ()(MagickCore::DrawingWand * context_) const209 void Magick::DrawableAlpha::operator()(MagickCore::DrawingWand * context_) const
210 {
211   DrawAlpha(context_,_x,_y,_paintMethod);
212 }
213 
copy() const214 Magick::DrawableBase* Magick::DrawableAlpha::copy() const
215 {
216   return new DrawableAlpha(*this);
217 }
218 
219 // Arc
~DrawableArc(void)220 Magick::DrawableArc::~DrawableArc( void )
221 {
222 }
operator ()(MagickCore::DrawingWand * context_) const223 void Magick::DrawableArc::operator()( MagickCore::DrawingWand * context_ ) const
224 {
225   DrawArc( context_, _startX, _startY, _endX, _endY, _startDegrees, _endDegrees );
226 }
copy() const227 Magick::DrawableBase* Magick::DrawableArc::copy() const
228 {
229   return new DrawableArc(*this);
230 }
231 
232 //
233 // Bezier curve
234 //
235 // Construct from coordinates (Coordinate list must contain at least three members)
DrawableBezier(const CoordinateList & coordinates_)236 Magick::DrawableBezier::DrawableBezier ( const CoordinateList &coordinates_ )
237   : _coordinates(coordinates_)
238 {
239 }
240 // Copy constructor
DrawableBezier(const Magick::DrawableBezier & original_)241 Magick::DrawableBezier::DrawableBezier( const Magick::DrawableBezier& original_ )
242   : DrawableBase (original_),
243     _coordinates(original_._coordinates)
244 {
245 }
246 // Destructor
~DrawableBezier(void)247 Magick::DrawableBezier::~DrawableBezier( void )
248 {
249 }
operator ()(MagickCore::DrawingWand * context_) const250 void Magick::DrawableBezier::operator()( MagickCore::DrawingWand * context_ ) const
251 {
252   size_t num_coords = (size_t) _coordinates.size();
253   PointInfo *coordinates = new PointInfo[num_coords];
254 
255   PointInfo *q = coordinates;
256   CoordinateList::const_iterator p = _coordinates.begin();
257 
258   while( p != _coordinates.end() )
259     {
260       q->x = p->x();
261       q->y = p->y();
262       q++;
263       p++;
264     }
265 
266   DrawBezier( context_, num_coords, coordinates );
267   delete [] coordinates;
268 }
copy() const269 Magick::DrawableBase* Magick::DrawableBezier::copy() const
270 {
271   return new DrawableBezier(*this);
272 }
273 
274 
275 /* DrawableBorderColor */
DrawableBorderColor(const Magick::Color & color_)276 Magick::DrawableBorderColor::DrawableBorderColor(const Magick::Color &color_)
277   : _color(color_)
278 {
279 }
280 
DrawableBorderColor(const Magick::DrawableBorderColor & original_)281 Magick::DrawableBorderColor::DrawableBorderColor
282   (const Magick::DrawableBorderColor &original_)
283   : DrawableBase(original_),
284     _color(original_._color)
285 {
286 }
287 
~DrawableBorderColor(void)288 Magick::DrawableBorderColor::~DrawableBorderColor(void)
289 {
290 }
291 
operator ()(MagickCore::DrawingWand * context_) const292 void Magick::DrawableBorderColor::operator()(
293   MagickCore::DrawingWand *context_) const
294 {
295   PixelInfo
296     color;
297 
298   PixelWand
299     *pixel_wand;
300 
301   color=static_cast<PixelInfo>(_color);
302   pixel_wand=NewPixelWand();
303   PixelSetPixelColor(pixel_wand,&color);
304   DrawSetBorderColor(context_,pixel_wand);
305   pixel_wand=DestroyPixelWand(pixel_wand);
306 }
307 
color(const Color & color_)308 void Magick::DrawableBorderColor::color(const Color &color_)
309 {
310   _color=color_;
311 }
312 
color(void) const313 Magick::Color Magick::DrawableBorderColor::color(void) const
314 {
315   return(_color);
316 }
317 
copy() const318 Magick::DrawableBase* Magick::DrawableBorderColor::copy() const
319 {
320   return(new DrawableBorderColor(*this));
321 }
322 
323 
324 /* DrawableClipRule */
DrawableClipRule(const FillRule fillRule_)325 Magick::DrawableClipRule::DrawableClipRule(const FillRule fillRule_)
326 {
327   _fillRule=fillRule_;
328 }
329 
~DrawableClipRule(void)330 Magick::DrawableClipRule::~DrawableClipRule(void)
331 {
332 }
333 
operator ()(MagickCore::DrawingWand * context_) const334 void Magick::DrawableClipRule::operator()(
335   MagickCore::DrawingWand * context_) const
336 {
337   DrawSetClipRule(context_,_fillRule);
338 }
339 
fillRule(const FillRule fillRule_)340 void Magick::DrawableClipRule::fillRule(const FillRule fillRule_)
341 {
342   _fillRule=fillRule_;
343 }
344 
fillRule(void) const345 Magick::FillRule Magick::DrawableClipRule::fillRule(void) const
346 {
347   return(_fillRule);
348 }
349 
copy() const350 Magick::DrawableBase* Magick::DrawableClipRule::copy() const
351 {
352   return(new DrawableClipRule(*this));
353 }
354 
355 
356 /* DrawableClipUnits */
DrawableClipUnits(const ClipPathUnits units_)357 Magick::DrawableClipUnits::DrawableClipUnits(const ClipPathUnits units_)
358 {
359   _units = units_;
360 }
361 
~DrawableClipUnits(void)362 Magick::DrawableClipUnits::~DrawableClipUnits(void)
363 {
364 }
365 
operator ()(MagickCore::DrawingWand * context_) const366 void Magick::DrawableClipUnits::operator()(
367   MagickCore::DrawingWand * context_) const
368 {
369   DrawSetClipUnits(context_, _units);
370 }
371 
units(const ClipPathUnits units_)372 void Magick::DrawableClipUnits::units(const ClipPathUnits units_)
373 {
374   _units = units_;
375 }
376 
units(void) const377 Magick::ClipPathUnits Magick::DrawableClipUnits::units(void) const
378 {
379   return(_units);
380 }
381 
copy() const382 Magick::DrawableBase* Magick::DrawableClipUnits::copy() const
383 {
384   return(new DrawableClipUnits(*this));
385 }
386 
387 
388 //
389 //Clip Path
390 //
391 
392 // Pop (terminate) Clip path definition
~DrawablePopClipPath(void)393 Magick::DrawablePopClipPath::~DrawablePopClipPath ( void )
394 {
395 }
operator ()(MagickCore::DrawingWand * context_) const396 void Magick::DrawablePopClipPath::operator() ( MagickCore::DrawingWand * context_ ) const
397 {
398   DrawPopClipPath( context_ );
399   DrawPopDefs(context_);
400 }
copy() const401 Magick::DrawableBase* Magick::DrawablePopClipPath::copy() const
402 {
403   return new DrawablePopClipPath(*this);
404 }
405 
406 // Push clip path definition
DrawablePushClipPath(const std::string & id_)407 Magick::DrawablePushClipPath::DrawablePushClipPath( const std::string &id_)
408   : _id(id_.c_str())    //multithread safe const char*
409 {
410 }
DrawablePushClipPath(const Magick::DrawablePushClipPath & original_)411 Magick::DrawablePushClipPath::DrawablePushClipPath
412 ( const Magick::DrawablePushClipPath& original_ ) //multithread safe const char*
413   : DrawableBase (original_),
414     _id(original_._id.c_str())
415 {
416 }
~DrawablePushClipPath(void)417 Magick::DrawablePushClipPath::~DrawablePushClipPath( void )
418 {
419 }
operator ()(MagickCore::DrawingWand * context_) const420 void Magick::DrawablePushClipPath::operator()
421   ( MagickCore::DrawingWand * context_ ) const
422 {
423   DrawPushDefs(context_);
424   DrawPushClipPath( context_, _id.c_str());
425 }
copy() const426 Magick::DrawableBase* Magick::DrawablePushClipPath::copy() const
427 {
428   return new DrawablePushClipPath(*this);
429 }
430 //
431 // ClipPath
432 //
DrawableClipPath(const std::string & id_)433 Magick::DrawableClipPath::DrawableClipPath( const std::string &id_ )
434 :_id(id_.c_str())
435 {
436 }
437 
DrawableClipPath(const Magick::DrawableClipPath & original_)438 Magick::DrawableClipPath::DrawableClipPath ( const Magick::DrawableClipPath& original_ )
439   : DrawableBase (original_),
440     _id(original_._id.c_str())
441 {
442 }
~DrawableClipPath(void)443 Magick::DrawableClipPath::~DrawableClipPath( void )
444 {
445 }
operator ()(MagickCore::DrawingWand * context_) const446 void Magick::DrawableClipPath::operator()( MagickCore::DrawingWand * context_ ) const
447 {
448 	(void) DrawSetClipPath( context_, _id.c_str());
449 }
copy() const450 Magick::DrawableBase* Magick::DrawableClipPath::copy() const
451 {
452   return new DrawableClipPath(*this);
453 }
454 
455 // Circle
~DrawableCircle(void)456 Magick::DrawableCircle::~DrawableCircle ( void )
457 {
458 }
operator ()(MagickCore::DrawingWand * context_) const459 void Magick::DrawableCircle::operator()( MagickCore::DrawingWand * context_ ) const
460 {
461   DrawCircle( context_, _originX, _originY, _perimX, _perimY );
462 }
copy() const463 Magick::DrawableBase* Magick::DrawableCircle::copy() const
464 {
465   return new DrawableCircle(*this);
466 }
467 
468 // Colorize at point using PaintMethod
~DrawableColor(void)469 Magick::DrawableColor::~DrawableColor( void )
470 {
471 }
operator ()(MagickCore::DrawingWand * context_) const472 void Magick::DrawableColor::operator()( MagickCore::DrawingWand * context_ ) const
473 {
474   DrawColor( context_, _x, _y, _paintMethod );
475 }
copy() const476 Magick::DrawableBase* Magick::DrawableColor::copy() const
477 {
478   return new DrawableColor(*this);
479 }
480 
481 // Draw image at point
DrawableCompositeImage(double x_,double y_,double width_,double height_,const std::string & filename_,Magick::CompositeOperator composition_)482 Magick::DrawableCompositeImage::DrawableCompositeImage
483 ( double x_, double y_,
484   double width_, double height_,
485   const std::string &filename_,
486   Magick::CompositeOperator composition_ )
487   : _composition(composition_),
488     _x(x_),
489     _y(y_),
490     _width(width_),
491     _height(height_),
492     _image(new Image(filename_))
493 {
494 }
DrawableCompositeImage(double x_,double y_,double width_,double height_,const Magick::Image & image_,Magick::CompositeOperator composition_)495 Magick::DrawableCompositeImage::DrawableCompositeImage
496 ( double x_, double y_,
497   double width_, double height_,
498   const Magick::Image &image_,
499   Magick::CompositeOperator composition_ )
500   : _composition(composition_),
501     _x(x_),
502     _y(y_),
503     _width(width_),
504     _height(height_),
505     _image(new Image(image_))
506 {
507 }
DrawableCompositeImage(double x_,double y_,double width_,double height_,const std::string & filename_)508 Magick::DrawableCompositeImage::DrawableCompositeImage
509 ( double x_, double y_,
510   double width_, double height_,
511   const std::string &filename_ )
512   :_composition(CopyCompositeOp),
513    _x(x_),
514    _y(y_),
515    _width(width_),
516    _height(height_),
517    _image(new Image(filename_))
518 {
519 }
DrawableCompositeImage(double x_,double y_,double width_,double height_,const Magick::Image & image_)520 Magick::DrawableCompositeImage::DrawableCompositeImage
521 ( double x_, double y_,
522   double width_, double height_,
523   const Magick::Image &image_ )
524   :_composition(CopyCompositeOp),
525    _x(x_),
526    _y(y_),
527    _width(width_),
528    _height(height_),
529    _image(new Image(image_))
530 {
531 }
DrawableCompositeImage(double x_,double y_,const std::string & filename_)532 Magick::DrawableCompositeImage::DrawableCompositeImage
533 ( double x_, double y_,
534   const std::string &filename_ )
535   : _composition(CopyCompositeOp),
536     _x(x_),
537     _y(y_),
538     _width(0),
539     _height(0),
540     _image(new Image(filename_))
541 {
542   _width=_image->columns();
543   _height=_image->rows();
544 }
DrawableCompositeImage(double x_,double y_,const Magick::Image & image_)545 Magick::DrawableCompositeImage::DrawableCompositeImage
546 ( double x_, double y_,
547   const Magick::Image &image_ )
548   : _composition(CopyCompositeOp),
549     _x(x_),
550     _y(y_),
551     _width(0),
552     _height(0),
553     _image(new Image(image_))
554 {
555   _width=_image->columns();
556   _height=_image->rows();
557 }
558 // Copy constructor
DrawableCompositeImage(const Magick::DrawableCompositeImage & original_)559 Magick::DrawableCompositeImage::DrawableCompositeImage
560 ( const Magick::DrawableCompositeImage& original_ )
561   :  Magick::DrawableBase(original_),
562      _composition(original_._composition),
563      _x(original_._x),
564      _y(original_._y),
565      _width(original_._width),
566      _height(original_._height),
567      _image(new Image(*original_._image))
568 {
569 }
~DrawableCompositeImage(void)570 Magick::DrawableCompositeImage::~DrawableCompositeImage( void )
571 {
572   delete _image;
573 }
574 // Assignment operator
operator =(const Magick::DrawableCompositeImage & original_)575 Magick::DrawableCompositeImage& Magick::DrawableCompositeImage::operator=
576 (const Magick::DrawableCompositeImage& original_ )
577 {
578   // If not being set to ourself
579   if ( this != &original_ )
580     {
581       _composition = original_._composition;
582       _x = original_._x;
583       _y = original_._y;
584       _width = original_._width;
585       _height = original_._height;
586       Image* temp_image = new Image(*original_._image);
587       delete _image;
588       _image = temp_image;
589     }
590   return *this;
591 }
filename(const std::string & filename_)592 void Magick::DrawableCompositeImage::filename( const std::string &filename_ )
593 {
594   Image* temp_image = new Image(filename_);
595   delete _image;
596   _image = temp_image;
597 }
filename(void) const598 std::string Magick::DrawableCompositeImage::filename( void ) const
599 {
600   return _image->fileName();
601 }
602 
image(const Magick::Image & image_)603 void Magick::DrawableCompositeImage::image( const Magick::Image &image_ )
604 {
605   Image* temp_image = new Image(image_);
606   delete _image;
607   _image = temp_image;
608 }
image(void) const609 Magick::Image Magick::DrawableCompositeImage::image( void ) const
610 {
611   return *_image;
612 }
613 
614 // Specify image format used to output Base64 inlined image data.
magick(std::string magick_)615 void Magick::DrawableCompositeImage::magick( std::string magick_ )
616 {
617   _image->magick( magick_ );
618 }
magick(void)619 std::string Magick::DrawableCompositeImage::magick( void )
620 {
621   return _image->magick();
622 }
623 
operator ()(MagickCore::DrawingWand * context_) const624 void Magick::DrawableCompositeImage::operator()
625   ( MagickCore::DrawingWand * context_ ) const
626 {
627   MagickWand
628     *magick_wand;
629 
630   magick_wand=NewMagickWandFromImage(_image->constImage());
631   (void) DrawComposite( context_, _composition, _x, _y, _width, _height,
632      magick_wand );
633   magick_wand=DestroyMagickWand(magick_wand);
634 }
635 
copy() const636 Magick::DrawableBase* Magick::DrawableCompositeImage::copy() const
637 {
638   return new DrawableCompositeImage(*this);
639 }
640 
DrawableDensity(const Point & density_)641 Magick::DrawableDensity::DrawableDensity(const Point &density_)
642   : _density(density_)
643 {
644 }
645 
DrawableDensity(const std::string & density_)646 Magick::DrawableDensity::DrawableDensity(const std::string &density_)
647   : _density(density_)
648 {
649 }
650 
~DrawableDensity(void)651 Magick::DrawableDensity::~DrawableDensity(void)
652 {
653 }
654 
operator ()(MagickCore::DrawingWand * context_) const655 void Magick::DrawableDensity::operator()(
656   MagickCore::DrawingWand *context_) const
657 {
658   DrawSetDensity(context_,_density.c_str());
659 }
660 
copy() const661 Magick::DrawableBase* Magick::DrawableDensity::copy() const
662 {
663   return(new DrawableDensity(*this));
664 }
665 
666 // Ellipse
~DrawableEllipse(void)667 Magick::DrawableEllipse::~DrawableEllipse( void )
668 {
669 }
operator ()(MagickCore::DrawingWand * context_) const670 void Magick::DrawableEllipse::operator()
671   ( MagickCore::DrawingWand * context_ ) const
672 {
673   DrawEllipse( context_, _originX, _originY, _radiusX, _radiusY,
674                _arcStart, _arcEnd );
675 }
copy() const676 Magick::DrawableBase* Magick::DrawableEllipse::copy() const
677 {
678   return new DrawableEllipse(*this);
679 }
680 
681 // Specify drawing fill color
DrawableFillColor(const Magick::Color & color_)682 Magick::DrawableFillColor::DrawableFillColor( const Magick::Color &color_ )
683   : _color(color_)
684 {
685 }
DrawableFillColor(const Magick::DrawableFillColor & original_)686 Magick::DrawableFillColor::DrawableFillColor
687 ( const Magick::DrawableFillColor& original_ )
688   : DrawableBase (original_),
689     _color(original_._color)
690 {
691 }
~DrawableFillColor(void)692 Magick::DrawableFillColor::~DrawableFillColor( void )
693 {
694 }
operator ()(MagickCore::DrawingWand * context_) const695 void Magick::DrawableFillColor::operator()
696   ( MagickCore::DrawingWand * context_ ) const
697 {
698   PixelInfo color = static_cast<PixelInfo>(_color);
699   PixelWand *pixel_wand=NewPixelWand();
700   PixelSetPixelColor(pixel_wand,&color);
701   DrawSetFillColor(context_,pixel_wand);
702   pixel_wand=DestroyPixelWand(pixel_wand);
703 }
copy() const704 Magick::DrawableBase* Magick::DrawableFillColor::copy() const
705 {
706   return new DrawableFillColor(*this);
707 }
708 
709 /* DrawableFillPatternUrl */
DrawableFillPatternUrl(const std::string & url_)710 Magick::DrawableFillPatternUrl::DrawableFillPatternUrl(const std::string &url_)
711   : _url(url_)
712 {
713 }
714 
DrawableFillPatternUrl(const Magick::DrawableFillPatternUrl & original_)715 Magick::DrawableFillPatternUrl::DrawableFillPatternUrl(
716   const Magick::DrawableFillPatternUrl& original_)
717   : DrawableBase(original_),
718   _url(original_._url)
719 {
720 }
721 
~DrawableFillPatternUrl(void)722 Magick::DrawableFillPatternUrl::~DrawableFillPatternUrl(void)
723 {
724 }
725 
operator ()(MagickCore::DrawingWand * context_) const726 void Magick::DrawableFillPatternUrl::operator()(
727   MagickCore::DrawingWand * context_) const
728 {
729   DrawSetFillPatternURL(context_, _url.c_str());
730 }
731 
url(const std::string & url_)732 void Magick::DrawableFillPatternUrl::url(const std::string &url_)
733 {
734   _url = url_;
735 }
736 
url(void) const737 std::string Magick::DrawableFillPatternUrl::url(void) const
738 {
739   return(_url);
740 }
741 
copy() const742 Magick::DrawableBase* Magick::DrawableFillPatternUrl::copy() const
743 {
744   return(new DrawableFillPatternUrl(*this));
745 }
746 
747 // Specify drawing fill fule
~DrawableFillRule(void)748 Magick::DrawableFillRule::~DrawableFillRule ( void )
749 {
750 }
operator ()(MagickCore::DrawingWand * context_) const751 void Magick::DrawableFillRule::operator()
752   ( MagickCore::DrawingWand * context_ ) const
753 {
754   DrawSetFillRule( context_, _fillRule );
755 }
copy() const756 Magick::DrawableBase* Magick::DrawableFillRule::copy() const
757 {
758   return new DrawableFillRule(*this);
759 }
760 
~DrawableFillOpacity(void)761 Magick::DrawableFillOpacity::~DrawableFillOpacity(void)
762 {
763 }
764 
operator ()(MagickCore::DrawingWand * context_) const765 void Magick::DrawableFillOpacity::operator()
766   (MagickCore::DrawingWand *context_) const
767 {
768   DrawSetFillOpacity(context_,_opacity);
769 }
770 
copy() const771 Magick::DrawableBase* Magick::DrawableFillOpacity::copy() const
772 {
773   return new DrawableFillOpacity(*this);
774 }
775 
776 // Specify text font
DrawableFont(const std::string & font_)777 Magick::DrawableFont::DrawableFont ( const std::string &font_ )
778   : _font(font_),
779     _family(),
780     _style(Magick::AnyStyle),
781     _weight(400),
782     _stretch(Magick::NormalStretch)
783 {
784 }
DrawableFont(const std::string & family_,Magick::StyleType style_,const unsigned int weight_,Magick::StretchType stretch_)785 Magick::DrawableFont::DrawableFont ( const std::string &family_,
786                                      Magick::StyleType style_,
787                                      const unsigned int weight_,
788                                      Magick::StretchType stretch_ )
789   : _font(),
790     _family(family_),
791     _style(style_),
792     _weight(weight_),
793     _stretch(stretch_)
794 {
795 }
DrawableFont(const Magick::DrawableFont & original_)796 Magick::DrawableFont::DrawableFont ( const Magick::DrawableFont& original_ )
797   : DrawableBase (original_),
798     _font(original_._font),
799     _family(original_._family),
800     _style(original_._style),
801     _weight(original_._weight),
802     _stretch(original_._stretch)
803 {
804 }
~DrawableFont(void)805 Magick::DrawableFont::~DrawableFont ( void )
806 {
807 }
operator ()(MagickCore::DrawingWand * context_) const808 void Magick::DrawableFont::operator()( MagickCore::DrawingWand * context_ ) const
809 {
810   // font
811   if(_font.length())
812     {
813       (void) DrawSetFont( context_, _font.c_str() );
814     }
815 
816   if(_family.length())
817     {
818       // font-family
819       (void) DrawSetFontFamily( context_, _family.c_str() );
820 
821       // font-style
822       DrawSetFontStyle( context_, _style );
823 
824       // font-weight
825       DrawSetFontWeight( context_, _weight );
826 
827       // font-stretch
828       DrawSetFontStretch( context_, _stretch );
829     }
830 }
copy() const831 Magick::DrawableBase* Magick::DrawableFont::copy() const
832 {
833   return new DrawableFont(*this);
834 }
835 
836 // Specify text positioning gravity
~DrawableGravity(void)837 Magick::DrawableGravity::~DrawableGravity ( void )
838 {
839 }
operator ()(MagickCore::DrawingWand * context_) const840 void Magick::DrawableGravity::operator()
841   ( MagickCore::DrawingWand * context_ ) const
842 {
843   DrawSetGravity( context_, _gravity );
844 }
copy() const845 Magick::DrawableBase* Magick::DrawableGravity::copy() const
846 {
847   return new DrawableGravity(*this);
848 }
849 
850 // Line
~DrawableLine(void)851 Magick::DrawableLine::~DrawableLine ( void )
852 {
853 }
operator ()(MagickCore::DrawingWand * context_) const854 void Magick::DrawableLine::operator()( MagickCore::DrawingWand * context_ ) const
855 {
856   DrawLine( context_, _startX, _startY, _endX, _endY );
857 }
copy() const858 Magick::DrawableBase* Magick::DrawableLine::copy() const
859 {
860   return new DrawableLine(*this);
861 }
862 
863 // Drawable Path
DrawablePath(const VPathList & path_)864 Magick::DrawablePath::DrawablePath ( const VPathList &path_ )
865   : _path(path_)
866 {
867 }
DrawablePath(const Magick::DrawablePath & original_)868 Magick::DrawablePath::DrawablePath ( const Magick::DrawablePath& original_ )
869   : DrawableBase (original_),
870     _path(original_._path)
871 {
872 }
~DrawablePath(void)873 Magick::DrawablePath::~DrawablePath ( void )
874 {
875 }
operator ()(MagickCore::DrawingWand * context_) const876 void Magick::DrawablePath::operator()( MagickCore::DrawingWand * context_ ) const
877 {
878   DrawPathStart( context_ );
879 
880   for( VPathList::const_iterator p = _path.begin();
881        p != _path.end(); p++ )
882     p->operator()( context_ ); // FIXME, how to quit loop on error?
883 
884   DrawPathFinish( context_ );
885 }
copy() const886 Magick::DrawableBase* Magick::DrawablePath::copy() const
887 {
888   return new DrawablePath(*this);
889 }
890 
891 // Point
~DrawablePoint(void)892 Magick::DrawablePoint::~DrawablePoint ( void )
893 {
894 }
operator ()(MagickCore::DrawingWand * context_) const895 void Magick::DrawablePoint::operator()( MagickCore::DrawingWand * context_ ) const
896 {
897   DrawPoint( context_, _x, _y );
898 }
copy() const899 Magick::DrawableBase* Magick::DrawablePoint::copy() const
900 {
901   return new DrawablePoint(*this);
902 }
903 
904 // Text pointsize
~DrawablePointSize(void)905 Magick::DrawablePointSize::~DrawablePointSize ( void )
906 {
907 }
operator ()(MagickCore::DrawingWand * context_) const908 void Magick::DrawablePointSize::operator()
909   ( MagickCore::DrawingWand * context_ ) const
910 {
911   DrawSetFontSize( context_, _pointSize );
912 }
copy() const913 Magick::DrawableBase* Magick::DrawablePointSize::copy() const
914 {
915   return new DrawablePointSize(*this);
916 }
917 
918 // Polygon (Coordinate list must contain at least three members)
DrawablePolygon(const CoordinateList & coordinates_)919 Magick::DrawablePolygon::DrawablePolygon ( const CoordinateList &coordinates_ )
920   : _coordinates(coordinates_)
921 {
922 }
DrawablePolygon(const Magick::DrawablePolygon & original_)923 Magick::DrawablePolygon::DrawablePolygon
924 ( const Magick::DrawablePolygon& original_ )
925   : DrawableBase (original_),
926     _coordinates(original_._coordinates)
927 {
928 }
~DrawablePolygon(void)929 Magick::DrawablePolygon::~DrawablePolygon ( void )
930 {
931 }
operator ()(MagickCore::DrawingWand * context_) const932 void Magick::DrawablePolygon::operator()
933   ( MagickCore::DrawingWand * context_ ) const
934 {
935   size_t num_coords = (size_t) _coordinates.size();
936   PointInfo *coordinates = new PointInfo[num_coords];
937 
938   PointInfo *q = coordinates;
939   CoordinateList::const_iterator p = _coordinates.begin();
940 
941   while( p != _coordinates.end() )
942     {
943       q->x = p->x();
944       q->y = p->y();
945       q++;
946       p++;
947     }
948 
949   DrawPolygon( context_, num_coords, coordinates );
950   delete [] coordinates;
951 }
copy() const952 Magick::DrawableBase* Magick::DrawablePolygon::copy() const
953 {
954   return new DrawablePolygon(*this);
955 }
956 
957 // Polyline (Coordinate list must contain at least three members)
DrawablePolyline(const CoordinateList & coordinates_)958 Magick::DrawablePolyline::DrawablePolyline
959 ( const CoordinateList &coordinates_ )
960   : _coordinates(coordinates_)
961 {
962 }
DrawablePolyline(const Magick::DrawablePolyline & original_)963 Magick::DrawablePolyline::DrawablePolyline
964 ( const Magick::DrawablePolyline& original_ )
965   : DrawableBase (original_),
966     _coordinates(original_._coordinates)
967 {
968 }
~DrawablePolyline(void)969 Magick::DrawablePolyline::~DrawablePolyline ( void )
970 {
971 }
operator ()(MagickCore::DrawingWand * context_) const972 void Magick::DrawablePolyline::operator()
973   ( MagickCore::DrawingWand * context_ ) const
974 {
975   size_t num_coords = (size_t) _coordinates.size();
976   PointInfo *coordinates = new PointInfo[num_coords];
977 
978   PointInfo *q = coordinates;
979   CoordinateList::const_iterator p = _coordinates.begin();
980 
981   while( p != _coordinates.end() )
982     {
983       q->x = p->x();
984       q->y = p->y();
985       q++;
986       p++;
987     }
988 
989   DrawPolyline( context_, num_coords, coordinates );
990   delete [] coordinates;
991 }
copy() const992 Magick::DrawableBase* Magick::DrawablePolyline::copy() const
993 {
994   return new DrawablePolyline(*this);
995 }
996 
997 // Pop Graphic Context
~DrawablePopGraphicContext(void)998 Magick::DrawablePopGraphicContext::~DrawablePopGraphicContext ( void )
999 {
1000 }
operator ()(MagickCore::DrawingWand * context_) const1001 void Magick::DrawablePopGraphicContext::operator()
1002   ( MagickCore::DrawingWand * context_ ) const
1003 {
1004   PopDrawingWand( context_ );
1005 }
copy() const1006 Magick::DrawableBase* Magick::DrawablePopGraphicContext::copy() const
1007 {
1008   return new DrawablePopGraphicContext(*this);
1009 }
1010 
1011 // Push Graphic Context
~DrawablePushGraphicContext(void)1012 Magick::DrawablePushGraphicContext::~DrawablePushGraphicContext ( void )
1013 {
1014 }
operator ()(MagickCore::DrawingWand * context_) const1015 void Magick::DrawablePushGraphicContext::operator()
1016   ( MagickCore::DrawingWand * context_ ) const
1017 {
1018   PushDrawingWand( context_ );
1019 }
copy() const1020 Magick::DrawableBase* Magick::DrawablePushGraphicContext::copy() const
1021 {
1022   return new DrawablePushGraphicContext(*this);
1023 }
1024 
1025 // Pop (terminate) Pattern definition
~DrawablePopPattern(void)1026 Magick::DrawablePopPattern::~DrawablePopPattern ( void )
1027 {
1028 }
operator ()(MagickCore::DrawingWand * context_) const1029 void Magick::DrawablePopPattern::operator()
1030   ( MagickCore::DrawingWand * context_ ) const
1031 {
1032   (void) DrawPopPattern( context_ );
1033 }
copy() const1034 Magick::DrawableBase* Magick::DrawablePopPattern::copy() const
1035 {
1036   return new DrawablePopPattern(*this);
1037 }
1038 
1039 // Push Pattern definition
DrawablePushPattern(const std::string & id_,ssize_t x_,ssize_t y_,size_t width_,size_t height_)1040 Magick::DrawablePushPattern::DrawablePushPattern
1041 ( const std::string &id_, ssize_t x_, ssize_t y_,
1042   size_t width_, size_t height_ )
1043   : _id(id_),
1044     _x(x_),
1045     _y(y_),
1046     _width(width_),
1047     _height(height_)
1048 {
1049 }
DrawablePushPattern(const Magick::DrawablePushPattern & original_)1050 Magick::DrawablePushPattern::DrawablePushPattern
1051 ( const Magick::DrawablePushPattern& original_ )
1052   : DrawableBase (original_),
1053     _id(original_._id),
1054     _x(original_._x),
1055     _y(original_._y),
1056     _width(original_._width),
1057     _height(original_._height)
1058 {
1059 }
~DrawablePushPattern(void)1060 Magick::DrawablePushPattern::~DrawablePushPattern ( void )
1061 {
1062 }
operator ()(MagickCore::DrawingWand * context_) const1063 void Magick::DrawablePushPattern::operator()
1064   ( MagickCore::DrawingWand * context_ ) const
1065 {
1066   (void) DrawPushPattern( context_, _id.c_str(), _x, _y, _width, _height );
1067 }
copy() const1068 Magick::DrawableBase* Magick::DrawablePushPattern::copy() const
1069 {
1070   return new DrawablePushPattern(*this);
1071 }
1072 
1073 // Rectangle
~DrawableRectangle(void)1074 Magick::DrawableRectangle::~DrawableRectangle ( void )
1075 {
1076 }
operator ()(MagickCore::DrawingWand * context_) const1077 void Magick::DrawableRectangle::operator()
1078   ( MagickCore::DrawingWand * context_ ) const
1079 {
1080   DrawRectangle( context_, _upperLeftX, _upperLeftY,
1081                  _lowerRightX, _lowerRightY );
1082 }
copy() const1083 Magick::DrawableBase* Magick::DrawableRectangle::copy() const
1084 {
1085   return new DrawableRectangle(*this);
1086 }
1087 
1088 // Apply Rotation
~DrawableRotation(void)1089 Magick::DrawableRotation::~DrawableRotation ( void )
1090 {
1091 }
operator ()(MagickCore::DrawingWand * context_) const1092 void Magick::DrawableRotation::operator()
1093   ( MagickCore::DrawingWand * context_ ) const
1094 {
1095   DrawRotate( context_, _angle );
1096 }
copy() const1097 Magick::DrawableBase* Magick::DrawableRotation::copy() const
1098 {
1099   return new DrawableRotation(*this);
1100 }
1101 
1102 // Round Rectangle
~DrawableRoundRectangle(void)1103 Magick::DrawableRoundRectangle::~DrawableRoundRectangle ( void )
1104 {
1105 }
operator ()(MagickCore::DrawingWand * context_) const1106 void Magick::DrawableRoundRectangle::operator()
1107   ( MagickCore::DrawingWand * context_ ) const
1108 {
1109   DrawRoundRectangle(context_,_upperLeftX,_upperLeftY,_lowerRightX,
1110     _lowerRightY,_cornerWidth, _cornerHeight);
1111 }
copy() const1112 Magick::DrawableBase* Magick::DrawableRoundRectangle::copy() const
1113 {
1114   return new DrawableRoundRectangle(*this);
1115 }
1116 
1117 // Apply Scaling
~DrawableScaling(void)1118 Magick::DrawableScaling::~DrawableScaling ( void )
1119 {
1120 }
operator ()(MagickCore::DrawingWand * context_) const1121 void Magick::DrawableScaling::operator()
1122   ( MagickCore::DrawingWand * context_ ) const
1123 {
1124   DrawScale( context_, _x, _y );
1125 }
copy() const1126 Magick::DrawableBase* Magick::DrawableScaling::copy() const
1127 {
1128   return new DrawableScaling(*this);
1129 }
1130 
1131 // Apply Skew in the X direction
~DrawableSkewX(void)1132 Magick::DrawableSkewX::~DrawableSkewX ( void )
1133 {
1134 }
operator ()(MagickCore::DrawingWand * context_) const1135 void Magick::DrawableSkewX::operator()
1136   ( MagickCore::DrawingWand * context_ ) const
1137 {
1138   DrawSkewX( context_, _angle );
1139 }
copy() const1140 Magick::DrawableBase* Magick::DrawableSkewX::copy() const
1141 {
1142   return new DrawableSkewX(*this);
1143 }
1144 
1145 // Apply Skew in the Y direction
~DrawableSkewY(void)1146 Magick::DrawableSkewY::~DrawableSkewY ( void )
1147 {
1148 }
operator ()(MagickCore::DrawingWand * context_) const1149 void Magick::DrawableSkewY::operator()( MagickCore::DrawingWand * context_ ) const
1150 {
1151   DrawSkewY( context_, _angle );
1152 }
copy() const1153 Magick::DrawableBase* Magick::DrawableSkewY::copy() const
1154 {
1155   return new DrawableSkewY(*this);
1156 }
1157 
1158 /* DrawableStrokeDashArray */
DrawableStrokeDashArray(const double * dasharray_)1159 Magick::DrawableStrokeDashArray::DrawableStrokeDashArray(const double* dasharray_)
1160   : _size(0),
1161     _dasharray(0)
1162 {
1163   dasharray(dasharray_);
1164 }
1165 
DrawableStrokeDashArray(const Magick::DrawableStrokeDashArray & original_)1166 Magick::DrawableStrokeDashArray::DrawableStrokeDashArray(
1167   const Magick::DrawableStrokeDashArray& original_)
1168   : DrawableBase (original_),
1169     _size(original_._size),
1170     _dasharray(new double[_size+1])
1171 {
1172   // Copy elements
1173   {
1174     for (size_t i=0; i < _size; i++)
1175       _dasharray[i]=original_._dasharray[i];
1176     _dasharray[_size]=0.0;
1177   }
1178 }
1179 
~DrawableStrokeDashArray(void)1180 Magick::DrawableStrokeDashArray::~DrawableStrokeDashArray(void)
1181 {
1182   delete [] _dasharray;
1183   _size=0;
1184   _dasharray=(double *) NULL;
1185 }
1186 
operator =(const Magick::DrawableStrokeDashArray & original_)1187 Magick::DrawableStrokeDashArray& Magick::DrawableStrokeDashArray::operator=(
1188   const Magick::DrawableStrokeDashArray &original_)
1189 {
1190   if (this != &original_)
1191     {
1192       delete [] _dasharray;
1193       _size=original_._size;
1194       _dasharray = new double[_size+1];
1195       // Copy elements
1196       {
1197         for (size_t i=0; i < _size; i++)
1198           _dasharray[i]=original_._dasharray[i];
1199         _dasharray[_size]=0.0;
1200       }
1201     }
1202   return(*this);
1203 }
1204 
operator ()(MagickCore::DrawingWand * context_) const1205 void Magick::DrawableStrokeDashArray::operator()(
1206   MagickCore::DrawingWand *context_) const
1207 {
1208   (void) DrawSetStrokeDashArray(context_,(const unsigned long) _size,
1209     _dasharray);
1210 }
1211 
copy() const1212 Magick::DrawableBase *Magick::DrawableStrokeDashArray::copy() const
1213 {
1214   return(new DrawableStrokeDashArray(*this));
1215 }
1216 
dasharray(const double * dasharray_)1217 void Magick::DrawableStrokeDashArray::dasharray(const double* dasharray_)
1218 {
1219   size_t
1220     n;
1221 
1222   delete [] _dasharray;
1223   _size=0;
1224   _dasharray=0;
1225 
1226   if (dasharray_ != (const double *) NULL)
1227     {
1228       const double
1229         *p;
1230 
1231       // Count elements in dash array
1232       n=0;
1233       {
1234         p = dasharray_;
1235         while(*p++ != 0.0)
1236           n++;
1237       }
1238       _size=n;
1239 
1240       // Allocate elements
1241       _dasharray=new double[_size+1];
1242       // Copy elements
1243       {
1244         for (size_t i=0; i < _size; i++)
1245           _dasharray[i]=dasharray_[i];
1246         _dasharray[_size]=0.0;
1247       }
1248     }
1249 }
1250 
dasharray(void) const1251 const double* Magick::DrawableStrokeDashArray::dasharray(void) const
1252 {
1253   return(_dasharray);
1254 }
1255 
1256 /* DrawableStrokeDashOffset */
~DrawableStrokeDashOffset(void)1257 Magick::DrawableStrokeDashOffset::~DrawableStrokeDashOffset(void)
1258 {
1259 }
1260 
operator ()(MagickCore::DrawingWand * context_) const1261 void Magick::DrawableStrokeDashOffset::operator()
1262   ( MagickCore::DrawingWand * context_) const
1263 {
1264   DrawSetStrokeDashOffset(context_,_offset);
1265 }
1266 
copy() const1267 Magick::DrawableBase* Magick::DrawableStrokeDashOffset::copy() const
1268 {
1269   return(new DrawableStrokeDashOffset(*this));
1270 }
1271 
offset(const double offset_)1272 void Magick::DrawableStrokeDashOffset::offset(const double offset_)
1273 {
1274   _offset=offset_;
1275 }
1276 
offset(void) const1277 double Magick::DrawableStrokeDashOffset::offset(void) const
1278 {
1279   return(_offset);
1280 }
1281 
1282 // Stroke linecap
~DrawableStrokeLineCap(void)1283 Magick::DrawableStrokeLineCap::~DrawableStrokeLineCap ( void )
1284 {
1285 }
operator ()(MagickCore::DrawingWand * context_) const1286 void Magick::DrawableStrokeLineCap::operator()
1287   ( MagickCore::DrawingWand * context_ ) const
1288 {
1289   DrawSetStrokeLineCap( context_, _linecap );
1290 }
copy() const1291 Magick::DrawableBase* Magick::DrawableStrokeLineCap::copy() const
1292 {
1293   return new DrawableStrokeLineCap(*this);
1294 }
1295 
1296 // Stroke linejoin
~DrawableStrokeLineJoin(void)1297 Magick::DrawableStrokeLineJoin::~DrawableStrokeLineJoin ( void )
1298 {
1299 }
operator ()(MagickCore::DrawingWand * context_) const1300 void Magick::DrawableStrokeLineJoin::operator()
1301   ( MagickCore::DrawingWand * context_ ) const
1302 {
1303   DrawSetStrokeLineJoin( context_, _linejoin );
1304 }
copy() const1305 Magick::DrawableBase* Magick::DrawableStrokeLineJoin::copy() const
1306 {
1307   return new DrawableStrokeLineJoin(*this);
1308 }
1309 
1310 // Stroke miterlimit
~DrawableMiterLimit(void)1311 Magick::DrawableMiterLimit::~DrawableMiterLimit ( void )
1312 {
1313 }
operator ()(MagickCore::DrawingWand * context_) const1314 void Magick::DrawableMiterLimit::operator()
1315   ( MagickCore::DrawingWand * context_ ) const
1316 {
1317   DrawSetStrokeMiterLimit( context_, _miterlimit );
1318 }
copy() const1319 Magick::DrawableBase* Magick::DrawableMiterLimit::copy() const
1320 {
1321   return new DrawableMiterLimit(*this);
1322 }
1323 
1324 
1325 /* DrawableStrokePatternUrl */
DrawableStrokePatternUrl(const std::string & url_)1326 Magick::DrawableStrokePatternUrl::DrawableStrokePatternUrl(
1327   const std::string &url_)
1328   : _url(url_)
1329 {
1330 }
1331 
DrawableStrokePatternUrl(const Magick::DrawableStrokePatternUrl & original_)1332 Magick::DrawableStrokePatternUrl::DrawableStrokePatternUrl(
1333   const Magick::DrawableStrokePatternUrl& original_)
1334   : DrawableBase(original_),
1335   _url(original_._url)
1336 {
1337 }
1338 
~DrawableStrokePatternUrl(void)1339 Magick::DrawableStrokePatternUrl::~DrawableStrokePatternUrl(void)
1340 {
1341 }
1342 
operator ()(MagickCore::DrawingWand * context_) const1343 void Magick::DrawableStrokePatternUrl::operator()(
1344   MagickCore::DrawingWand * context_) const
1345 {
1346   DrawSetStrokePatternURL(context_, _url.c_str());
1347 }
1348 
url(const std::string & url_)1349 void Magick::DrawableStrokePatternUrl::url(const std::string &url_)
1350 {
1351   _url = url_;
1352 }
1353 
url(void) const1354 std::string Magick::DrawableStrokePatternUrl::url(void) const
1355 {
1356   return(_url);
1357 }
1358 
copy() const1359 Magick::DrawableBase* Magick::DrawableStrokePatternUrl::copy() const
1360 {
1361   return(new DrawableStrokePatternUrl(*this));
1362 }
1363 
1364 // Stroke antialias
~DrawableStrokeAntialias(void)1365 Magick::DrawableStrokeAntialias::~DrawableStrokeAntialias ( void )
1366 {
1367 }
operator ()(MagickCore::DrawingWand * context_) const1368 void Magick::DrawableStrokeAntialias::operator()
1369 ( MagickCore::DrawingWand * context_ ) const
1370 {
1371   DrawSetStrokeAntialias( context_, static_cast<MagickBooleanType>
1372     (_flag ? MagickTrue : MagickFalse) );
1373 }
copy() const1374 Magick::DrawableBase* Magick::DrawableStrokeAntialias::copy() const
1375 {
1376   return new DrawableStrokeAntialias(*this);
1377 }
1378 
1379 // Stroke color
DrawableStrokeColor(const Magick::Color & color_)1380 Magick::DrawableStrokeColor::DrawableStrokeColor
1381 ( const Magick::Color &color_ )
1382   : _color(color_)
1383 {
1384 }
DrawableStrokeColor(const Magick::DrawableStrokeColor & original_)1385 Magick::DrawableStrokeColor::DrawableStrokeColor
1386 ( const Magick::DrawableStrokeColor& original_ )
1387   : DrawableBase (original_),
1388     _color(original_._color)
1389 {
1390 }
~DrawableStrokeColor(void)1391 Magick::DrawableStrokeColor::~DrawableStrokeColor ( void )
1392 {
1393 }
operator ()(MagickCore::DrawingWand * context_) const1394 void Magick::DrawableStrokeColor::operator()
1395   ( MagickCore::DrawingWand * context_ ) const
1396 {
1397   PixelInfo color = static_cast<PixelInfo>(_color);
1398   PixelWand *pixel_wand=NewPixelWand();
1399   PixelSetPixelColor(pixel_wand,&color);
1400   DrawSetStrokeColor(context_,pixel_wand);
1401   pixel_wand=DestroyPixelWand(pixel_wand);
1402 }
copy() const1403 Magick::DrawableBase* Magick::DrawableStrokeColor::copy() const
1404 {
1405   return new DrawableStrokeColor(*this);
1406 }
1407 
~DrawableStrokeOpacity(void)1408 Magick::DrawableStrokeOpacity::~DrawableStrokeOpacity(void)
1409 {
1410 }
1411 
operator ()(MagickCore::DrawingWand * context_) const1412 void Magick::DrawableStrokeOpacity::operator()
1413   (MagickCore::DrawingWand * context_) const
1414 {
1415   DrawSetStrokeOpacity(context_,_opacity);
1416 }
1417 
copy() const1418 Magick::DrawableBase* Magick::DrawableStrokeOpacity::copy() const
1419 {
1420   return new DrawableStrokeOpacity(*this);
1421 }
1422 
1423 // Stroke width
~DrawableStrokeWidth(void)1424 Magick::DrawableStrokeWidth::~DrawableStrokeWidth ( void )
1425 {
1426 }
operator ()(MagickCore::DrawingWand * context_) const1427 void Magick::DrawableStrokeWidth::operator()
1428   ( MagickCore::DrawingWand * context_ ) const
1429 {
1430   DrawSetStrokeWidth( context_, _width );
1431 }
copy() const1432 Magick::DrawableBase* Magick::DrawableStrokeWidth::copy() const
1433 {
1434   return new DrawableStrokeWidth(*this);
1435 }
1436 
1437 // Draw text at point
DrawableText(const double x_,const double y_,const std::string & text_)1438 Magick::DrawableText::DrawableText ( const double x_, const double y_,
1439                                      const std::string &text_ )
1440   : _x(x_),
1441     _y(y_),
1442     _text(text_),
1443     _encoding()
1444 {
1445 }
DrawableText(const double x_,const double y_,const std::string & text_,const std::string & encoding_)1446 Magick::DrawableText::DrawableText ( const double x_, const double y_,
1447                                      const std::string &text_,  const std::string &encoding_)
1448   : _x(x_),
1449     _y(y_),
1450     _text(text_),
1451     _encoding(encoding_)
1452 {
1453 }
DrawableText(const Magick::DrawableText & original_)1454 Magick::DrawableText::DrawableText( const Magick::DrawableText& original_ )
1455   : DrawableBase (original_),
1456     _x(original_._x),
1457     _y(original_._y),
1458     _text(original_._text),
1459     _encoding(original_._encoding)
1460 {
1461 }
~DrawableText(void)1462 Magick::DrawableText::~DrawableText ( void )
1463 {
1464 }
operator ()(MagickCore::DrawingWand * context_) const1465 void Magick::DrawableText::operator()
1466   ( MagickCore::DrawingWand * context_ ) const
1467 {
1468   DrawSetTextEncoding( context_, _encoding.c_str() );
1469   DrawAnnotation( context_, _x, _y,
1470                   reinterpret_cast<const unsigned char*>(_text.c_str()) );
1471 }
copy() const1472 Magick::DrawableBase* Magick::DrawableText::copy() const
1473 {
1474   return new DrawableText(*this);
1475 }
1476 
1477 /* DrawableTextAlignment */
DrawableTextAlignment(Magick::AlignType alignment_)1478 Magick::DrawableTextAlignment::DrawableTextAlignment(
1479   Magick::AlignType alignment_)
1480   : _alignment(alignment_)
1481 {
1482 }
1483 
DrawableTextAlignment(const Magick::DrawableTextAlignment & original_)1484 Magick::DrawableTextAlignment::DrawableTextAlignment
1485 (const Magick::DrawableTextAlignment &original_)
1486   : DrawableBase(original_),
1487   _alignment(original_._alignment)
1488 {
1489 }
1490 
~DrawableTextAlignment(void)1491 Magick::DrawableTextAlignment::~DrawableTextAlignment(void)
1492 {
1493 }
1494 
operator ()(MagickCore::DrawingWand * context_) const1495 void Magick::DrawableTextAlignment::operator()(
1496   MagickCore::DrawingWand * context_) const
1497 {
1498   DrawSetTextAlignment(context_, _alignment);
1499 }
1500 
alignment(AlignType alignment_)1501 void Magick::DrawableTextAlignment::alignment(AlignType alignment_)
1502 {
1503   _alignment=alignment_;
1504 }
1505 
alignment(void) const1506 Magick::AlignType Magick::DrawableTextAlignment::alignment(void) const
1507 {
1508   return(_alignment);
1509 }
1510 
copy() const1511 Magick::DrawableBase* Magick::DrawableTextAlignment::copy() const
1512 {
1513   return new DrawableTextAlignment(*this);
1514 }
1515 
1516 // Text antialias
DrawableTextAntialias(bool flag_)1517 Magick::DrawableTextAntialias::DrawableTextAntialias ( bool flag_ )
1518   : _flag(flag_)
1519 {
1520 }
DrawableTextAntialias(const Magick::DrawableTextAntialias & original_)1521 Magick::DrawableTextAntialias::DrawableTextAntialias( const Magick::DrawableTextAntialias &original_ )
1522   : DrawableBase (original_),
1523     _flag(original_._flag)
1524 {
1525 }
~DrawableTextAntialias(void)1526 Magick::DrawableTextAntialias::~DrawableTextAntialias ( void )
1527 {
1528 }
operator ()(MagickCore::DrawingWand * context_) const1529 void Magick::DrawableTextAntialias::operator()
1530   ( MagickCore::DrawingWand * context_ ) const
1531 {
1532   DrawSetTextAntialias( context_, static_cast<MagickBooleanType>
1533     (_flag ? MagickTrue : MagickFalse) );
1534 }
copy() const1535 Magick::DrawableBase* Magick::DrawableTextAntialias::copy() const
1536 {
1537   return new DrawableTextAntialias(*this);
1538 }
1539 
1540 
1541 // Decoration (text decoration)
DrawableTextDecoration(Magick::DecorationType decoration_)1542 Magick::DrawableTextDecoration::DrawableTextDecoration
1543   ( Magick::DecorationType decoration_ )
1544     : _decoration(decoration_)
1545 {
1546 }
DrawableTextDecoration(const Magick::DrawableTextDecoration & original_)1547 Magick::DrawableTextDecoration::DrawableTextDecoration
1548   ( const Magick::DrawableTextDecoration &original_ )
1549     : DrawableBase (original_),
1550       _decoration(original_._decoration)
1551 {
1552 }
~DrawableTextDecoration(void)1553 Magick::DrawableTextDecoration::~DrawableTextDecoration( void )
1554 {
1555 }
operator ()(MagickCore::DrawingWand * context_) const1556 void Magick::DrawableTextDecoration::operator()
1557   ( MagickCore::DrawingWand * context_ ) const
1558 {
1559   DrawSetTextDecoration( context_, _decoration );
1560 }
copy() const1561 Magick::DrawableBase* Magick::DrawableTextDecoration::copy() const
1562 {
1563   return new DrawableTextDecoration(*this);
1564 }
1565 
1566 // DrawableTextDirection
DrawableTextDirection(DirectionType direction_)1567 Magick::DrawableTextDirection::DrawableTextDirection(
1568   DirectionType direction_)
1569   : _direction(direction_)
1570 {
1571 }
1572 
~DrawableTextDirection(void)1573 Magick::DrawableTextDirection::~DrawableTextDirection(void)
1574 {
1575 }
1576 
operator ()(MagickCore::DrawingWand * context_) const1577 void Magick::DrawableTextDirection::operator()(
1578   MagickCore::DrawingWand *context_) const
1579 {
1580   DrawSetTextDirection(context_,_direction);
1581 }
1582 
direction(DirectionType direction_)1583 void Magick::DrawableTextDirection::direction(DirectionType direction_)
1584 {
1585   _direction=direction_;
1586 }
1587 
direction(void) const1588 Magick::DirectionType Magick::DrawableTextDirection::direction(void) const
1589 {
1590   return(_direction);
1591 }
1592 
copy() const1593 Magick::DrawableBase *Magick::DrawableTextDirection::copy() const
1594 {
1595   return new DrawableTextDirection(*this);
1596 }
1597 
1598 // DrawableTextInterlineSpacing
DrawableTextInterlineSpacing(double spacing_)1599 Magick::DrawableTextInterlineSpacing::DrawableTextInterlineSpacing(
1600   double spacing_)
1601   : _spacing(spacing_)
1602 {
1603 }
1604 
~DrawableTextInterlineSpacing(void)1605 Magick::DrawableTextInterlineSpacing::~DrawableTextInterlineSpacing(void)
1606 {
1607 }
1608 
operator ()(MagickCore::DrawingWand * context_) const1609 void Magick::DrawableTextInterlineSpacing::operator()(
1610   MagickCore::DrawingWand *context_) const
1611 {
1612   DrawSetTextInterlineSpacing(context_,_spacing);
1613 }
1614 
spacing(double spacing_)1615 void Magick::DrawableTextInterlineSpacing::spacing(double spacing_)
1616 {
1617   _spacing=spacing_;
1618 }
1619 
spacing(void) const1620 double Magick::DrawableTextInterlineSpacing::spacing(void) const
1621 {
1622   return(_spacing);
1623 }
1624 
copy() const1625 Magick::DrawableBase *Magick::DrawableTextInterlineSpacing::copy() const
1626 {
1627   return new DrawableTextInterlineSpacing(*this);
1628 }
1629 
1630 // DrawableTextInterwordSpacing
DrawableTextInterwordSpacing(double spacing_)1631 Magick::DrawableTextInterwordSpacing::DrawableTextInterwordSpacing(
1632   double spacing_)
1633   : _spacing(spacing_)
1634 {
1635 }
1636 
~DrawableTextInterwordSpacing(void)1637 Magick::DrawableTextInterwordSpacing::~DrawableTextInterwordSpacing(void)
1638 {
1639 }
1640 
operator ()(MagickCore::DrawingWand * context_) const1641 void Magick::DrawableTextInterwordSpacing::operator()(
1642   MagickCore::DrawingWand *context_) const
1643 {
1644   DrawSetTextInterwordSpacing(context_,_spacing);
1645 }
1646 
spacing(double spacing_)1647 void Magick::DrawableTextInterwordSpacing::spacing(double spacing_)
1648 {
1649   _spacing=spacing_;
1650 }
1651 
spacing(void) const1652 double Magick::DrawableTextInterwordSpacing::spacing(void) const
1653 {
1654   return(_spacing);
1655 }
1656 
copy() const1657 Magick::DrawableBase *Magick::DrawableTextInterwordSpacing::copy() const
1658 {
1659   return new DrawableTextInterwordSpacing(*this);
1660 }
1661 
1662 // DrawableTextKerning
DrawableTextKerning(double kerning_)1663 Magick::DrawableTextKerning::DrawableTextKerning(
1664   double kerning_)
1665   : _kerning(kerning_)
1666 {
1667 }
1668 
~DrawableTextKerning(void)1669 Magick::DrawableTextKerning::~DrawableTextKerning(void)
1670 {
1671 }
1672 
operator ()(MagickCore::DrawingWand * context_) const1673 void Magick::DrawableTextKerning::operator()(
1674   MagickCore::DrawingWand *context_) const
1675 {
1676   DrawSetTextKerning(context_,_kerning);
1677 }
1678 
kerning(double kerning_)1679 void Magick::DrawableTextKerning::kerning(double kerning_)
1680 {
1681   _kerning=kerning_;
1682 }
1683 
kerning(void) const1684 double Magick::DrawableTextKerning::kerning(void) const
1685 {
1686   return(_kerning);
1687 }
1688 
copy() const1689 Magick::DrawableBase *Magick::DrawableTextKerning::copy() const
1690 {
1691   return new DrawableTextKerning(*this);
1692 }
1693 
1694 // Set text undercolor
DrawableTextUnderColor(const Magick::Color & color_)1695 Magick::DrawableTextUnderColor::DrawableTextUnderColor
1696 ( const Magick::Color &color_ )
1697   : _color(color_)
1698 {
1699 }
DrawableTextUnderColor(const Magick::DrawableTextUnderColor & original_)1700 Magick::DrawableTextUnderColor::DrawableTextUnderColor
1701 ( const Magick::DrawableTextUnderColor& original_ )
1702   : DrawableBase (original_),
1703     _color(original_._color)
1704 {
1705 }
~DrawableTextUnderColor(void)1706 Magick::DrawableTextUnderColor::~DrawableTextUnderColor ( void )
1707 {
1708 }
operator ()(MagickCore::DrawingWand * context_) const1709 void Magick::DrawableTextUnderColor::operator()
1710   ( MagickCore::DrawingWand * context_ ) const
1711 {
1712   PixelInfo color = static_cast<PixelInfo>(_color);
1713   PixelWand *pixel_wand=NewPixelWand();
1714   PixelSetPixelColor(pixel_wand,&color);
1715   DrawSetTextUnderColor(context_,pixel_wand);
1716   pixel_wand=DestroyPixelWand(pixel_wand);
1717 }
copy() const1718 Magick::DrawableBase* Magick::DrawableTextUnderColor::copy() const
1719 {
1720   return new DrawableTextUnderColor(*this);
1721 }
1722 
1723 // Apply Translation
~DrawableTranslation(void)1724 Magick::DrawableTranslation::~DrawableTranslation ( void )
1725 {
1726 }
operator ()(MagickCore::DrawingWand * context_) const1727 void Magick::DrawableTranslation::operator()
1728   ( MagickCore::DrawingWand * context_ ) const
1729 {
1730   DrawTranslate( context_, _x, _y );
1731 }
copy() const1732 Magick::DrawableBase* Magick::DrawableTranslation::copy() const
1733 {
1734   return new DrawableTranslation(*this);
1735 }
1736 
1737 // Set the size of the viewbox
~DrawableViewbox(void)1738 Magick::DrawableViewbox::~DrawableViewbox ( void )
1739 {
1740 }
operator ()(MagickCore::DrawingWand * context_) const1741 void Magick::DrawableViewbox::operator()
1742   ( MagickCore::DrawingWand * context_ ) const
1743 {
1744   DrawSetViewbox( context_, _x1, _y1, _x2, _y2 );
1745 }
copy() const1746 Magick::DrawableBase* Magick::DrawableViewbox::copy() const
1747 {
1748   return new DrawableViewbox(*this);
1749 }
1750 
1751 //
1752 // Path Classes
1753 //
1754 
1755 //
1756 // PathArcArgs
1757 //
operator ==(const Magick::PathArcArgs &,const Magick::PathArcArgs &)1758 MagickPPExport int Magick::operator == ( const Magick::PathArcArgs& /*left_*/,
1759                                         const Magick::PathArcArgs& /*right_*/ )
1760 {
1761   return ( 1 );
1762 }
operator !=(const Magick::PathArcArgs &,const Magick::PathArcArgs &)1763 MagickPPExport int Magick::operator != ( const Magick::PathArcArgs& /*left_*/,
1764                                         const Magick::PathArcArgs& /*right_*/ )
1765 {
1766   return ( 0 );
1767 }
operator >(const Magick::PathArcArgs &,const Magick::PathArcArgs &)1768 MagickPPExport int Magick::operator > ( const Magick::PathArcArgs& /*left_*/,
1769                                        const Magick::PathArcArgs& /*right_*/ )
1770 {
1771   return ( 0 );
1772 }
operator <(const Magick::PathArcArgs &,const Magick::PathArcArgs &)1773 MagickPPExport int Magick::operator <  ( const Magick::PathArcArgs& /*left_*/,
1774                                         const Magick::PathArcArgs& /*right_*/ )
1775 {
1776   return  ( false );
1777 }
operator >=(const Magick::PathArcArgs & left_,const Magick::PathArcArgs & right_)1778 MagickPPExport int Magick::operator >= ( const Magick::PathArcArgs& left_,
1779                                         const Magick::PathArcArgs& right_ )
1780 {
1781   return ( ( left_ > right_ ) || ( left_ == right_ ) );
1782 }
operator <=(const Magick::PathArcArgs & left_,const Magick::PathArcArgs & right_)1783 MagickPPExport int Magick::operator <= ( const Magick::PathArcArgs& left_,
1784                                         const Magick::PathArcArgs& right_ )
1785 {
1786   return ( ( left_ < right_ ) || ( left_ == right_ ) );
1787 }
1788 // Default constructor
PathArcArgs(void)1789 Magick::PathArcArgs::PathArcArgs( void )
1790   :  _radiusX(0),
1791      _radiusY(0),
1792      _xAxisRotation(0),
1793      _largeArcFlag(false),
1794      _sweepFlag(false),
1795      _x(0),
1796      _y(0)
1797 {
1798 }
1799 // Normal constructor
PathArcArgs(double radiusX_,double radiusY_,double xAxisRotation_,bool largeArcFlag_,bool sweepFlag_,double x_,double y_)1800 Magick::PathArcArgs::PathArcArgs( double radiusX_, double radiusY_,
1801                                   double xAxisRotation_, bool largeArcFlag_,
1802                                   bool sweepFlag_, double x_, double y_ )
1803   : _radiusX(radiusX_),
1804     _radiusY(radiusY_),
1805     _xAxisRotation(xAxisRotation_),
1806     _largeArcFlag(largeArcFlag_),
1807     _sweepFlag(sweepFlag_),
1808     _x(x_),
1809     _y(y_)
1810 {
1811 }
1812 // Copy constructor
PathArcArgs(const Magick::PathArcArgs & original_)1813 Magick::PathArcArgs::PathArcArgs( const Magick::PathArcArgs &original_ )
1814   :  _radiusX(original_._radiusX),
1815      _radiusY(original_._radiusY),
1816      _xAxisRotation(original_._xAxisRotation),
1817      _largeArcFlag(original_._largeArcFlag),
1818      _sweepFlag(original_._sweepFlag),
1819      _x(original_._x),
1820      _y(original_._y)
1821 {
1822 }
1823 // Destructor
~PathArcArgs(void)1824 Magick::PathArcArgs::~PathArcArgs ( void )
1825 {
1826 }
1827 
1828 // Path Arc
PathArcAbs(const Magick::PathArcArgs & coordinates_)1829 Magick::PathArcAbs::PathArcAbs ( const Magick::PathArcArgs &coordinates_ )
1830   : _coordinates(1,coordinates_)
1831 {
1832 }
PathArcAbs(const PathArcArgsList & coordinates_)1833 Magick::PathArcAbs::PathArcAbs ( const PathArcArgsList &coordinates_ )
1834   : _coordinates(coordinates_)
1835 {
1836 }
PathArcAbs(const Magick::PathArcAbs & original_)1837 Magick::PathArcAbs::PathArcAbs ( const Magick::PathArcAbs& original_ )
1838   : VPathBase (original_),
1839     _coordinates(original_._coordinates)
1840 {
1841 }
~PathArcAbs(void)1842 Magick::PathArcAbs::~PathArcAbs ( void )
1843 {
1844 }
operator ()(MagickCore::DrawingWand * context_) const1845 void Magick::PathArcAbs::operator()( MagickCore::DrawingWand * context_ ) const
1846 {
1847   for( PathArcArgsList::const_iterator p = _coordinates.begin();
1848        p != _coordinates.end(); p++ )
1849     {
1850       DrawPathEllipticArcAbsolute( context_, p->radiusX(), p->radiusY(),
1851                                    p->xAxisRotation(), (MagickBooleanType) p->largeArcFlag(),
1852                                    (MagickBooleanType) p->sweepFlag(), p->x(), p->y() );
1853     }
1854 }
copy() const1855 Magick::VPathBase* Magick::PathArcAbs::copy() const
1856 {
1857   return new PathArcAbs(*this);
1858 }
1859 
PathArcRel(const Magick::PathArcArgs & coordinates_)1860 Magick::PathArcRel::PathArcRel ( const Magick::PathArcArgs &coordinates_ )
1861   : _coordinates(1,coordinates_)
1862 {
1863 }
PathArcRel(const PathArcArgsList & coordinates_)1864 Magick::PathArcRel::PathArcRel ( const PathArcArgsList &coordinates_ )
1865   : _coordinates(coordinates_)
1866 {
1867 }
PathArcRel(const Magick::PathArcRel & original_)1868 Magick::PathArcRel::PathArcRel ( const Magick::PathArcRel& original_ )
1869   : VPathBase (original_),
1870     _coordinates(original_._coordinates)
1871 {
1872 }
~PathArcRel(void)1873 Magick::PathArcRel::~PathArcRel ( void )
1874 {
1875 }
operator ()(MagickCore::DrawingWand * context_) const1876 void Magick::PathArcRel::operator()( MagickCore::DrawingWand * context_ ) const
1877 {
1878   for( PathArcArgsList::const_iterator p = _coordinates.begin();
1879        p != _coordinates.end(); p++ )
1880     {
1881       DrawPathEllipticArcRelative( context_, p->radiusX(), p->radiusY(),
1882                                    p->xAxisRotation(), (MagickBooleanType) p->largeArcFlag(),
1883                                    (MagickBooleanType) p->sweepFlag(), p->x(), p->y() );
1884     }
1885 }
copy() const1886 Magick::VPathBase* Magick::PathArcRel::copy() const
1887 {
1888   return new PathArcRel(*this);
1889 }
1890 
1891 //
1892 // Path Closepath
1893 //
~PathClosePath(void)1894 Magick::PathClosePath::~PathClosePath ( void )
1895 {
1896 }
operator ()(MagickCore::DrawingWand * context_) const1897 void Magick::PathClosePath::operator()( MagickCore::DrawingWand * context_ ) const
1898 {
1899   DrawPathClose( context_ );
1900 }
copy() const1901 Magick::VPathBase* Magick::PathClosePath::copy() const
1902 {
1903   return new PathClosePath(*this);
1904 }
1905 
1906 //
1907 // Path Curveto (Cubic Bezier)
1908 //
operator ==(const Magick::PathCurvetoArgs &,const Magick::PathCurvetoArgs &)1909 MagickPPExport int Magick::operator == ( const Magick::PathCurvetoArgs& /*left_*/,
1910                                         const Magick::PathCurvetoArgs& /*right_*/ )
1911 {
1912   return ( 1 );
1913 }
operator !=(const Magick::PathCurvetoArgs &,const Magick::PathCurvetoArgs &)1914 MagickPPExport int Magick::operator != ( const Magick::PathCurvetoArgs& /*left_*/,
1915                                         const Magick::PathCurvetoArgs& /*right_*/ )
1916 {
1917   return ( 0 );
1918 }
operator >(const Magick::PathCurvetoArgs &,const Magick::PathCurvetoArgs &)1919 MagickPPExport int Magick::operator > ( const Magick::PathCurvetoArgs& /*left_*/,
1920                                        const Magick::PathCurvetoArgs& /*right_*/ )
1921 {
1922   return ( 0 );
1923 }
operator <(const Magick::PathCurvetoArgs &,const Magick::PathCurvetoArgs &)1924 MagickPPExport int Magick::operator <  ( const Magick::PathCurvetoArgs& /*left_*/,
1925                                         const Magick::PathCurvetoArgs& /*right_*/ )
1926 {
1927   return  ( false );
1928 }
operator >=(const Magick::PathCurvetoArgs & left_,const Magick::PathCurvetoArgs & right_)1929 MagickPPExport int Magick::operator >= ( const Magick::PathCurvetoArgs& left_,
1930                                         const Magick::PathCurvetoArgs& right_ )
1931 {
1932   return ( ( left_ > right_ ) || ( left_ == right_ ) );
1933 }
operator <=(const Magick::PathCurvetoArgs & left_,const Magick::PathCurvetoArgs & right_)1934 MagickPPExport int Magick::operator <= ( const Magick::PathCurvetoArgs& left_,
1935                                         const Magick::PathCurvetoArgs& right_ )
1936 {
1937   return ( ( left_ < right_ ) || ( left_ == right_ ) );
1938 }
1939 // Default constructor
PathCurvetoArgs(void)1940 Magick::PathCurvetoArgs::PathCurvetoArgs( void )
1941   : _x1(0),
1942     _y1(0),
1943     _x2(0),
1944     _y2(0),
1945     _x(0),
1946     _y(0)
1947 {
1948 }
1949 // Normal constructor
PathCurvetoArgs(double x1_,double y1_,double x2_,double y2_,double x_,double y_)1950 Magick::PathCurvetoArgs::PathCurvetoArgs( double x1_, double y1_,
1951                                           double x2_, double y2_,
1952                                           double x_, double y_ )
1953   : _x1(x1_),
1954     _y1(y1_),
1955     _x2(x2_),
1956     _y2(y2_),
1957     _x(x_),
1958     _y(y_)
1959 {
1960 }
1961 // Copy constructor
PathCurvetoArgs(const PathCurvetoArgs & original_)1962 Magick::PathCurvetoArgs::PathCurvetoArgs( const PathCurvetoArgs &original_ )
1963   : _x1(original_._x1),
1964     _y1(original_._y1),
1965     _x2(original_._x2),
1966     _y2(original_._y2),
1967     _x(original_._x),
1968     _y(original_._y)
1969 {
1970 }
1971 // Destructor
~PathCurvetoArgs(void)1972 Magick::PathCurvetoArgs::~PathCurvetoArgs ( void )
1973 {
1974 }
1975 
PathCurvetoAbs(const Magick::PathCurvetoArgs & args_)1976 Magick::PathCurvetoAbs::PathCurvetoAbs ( const Magick::PathCurvetoArgs &args_ )
1977   : _args(1,args_)
1978 {
1979 }
PathCurvetoAbs(const PathCurveToArgsList & args_)1980 Magick::PathCurvetoAbs::PathCurvetoAbs ( const PathCurveToArgsList &args_ )
1981   : _args(args_)
1982 {
1983 }
PathCurvetoAbs(const Magick::PathCurvetoAbs & original_)1984 Magick::PathCurvetoAbs::PathCurvetoAbs
1985  ( const Magick::PathCurvetoAbs& original_ )
1986    : VPathBase (original_),
1987      _args(original_._args)
1988 {
1989 }
~PathCurvetoAbs(void)1990 Magick::PathCurvetoAbs::~PathCurvetoAbs ( void )
1991 {
1992 }
operator ()(MagickCore::DrawingWand * context_) const1993 void Magick::PathCurvetoAbs::operator()
1994   ( MagickCore::DrawingWand * context_ ) const
1995 {
1996   for( PathCurveToArgsList::const_iterator p = _args.begin();
1997        p != _args.end(); p++ )
1998     {
1999       DrawPathCurveToAbsolute( context_, p->x1(), p->y1(), p->x2(), p->y2(),
2000                                p->x(), p->y() );
2001     }
2002 }
copy() const2003 Magick::VPathBase* Magick::PathCurvetoAbs::copy() const
2004 {
2005   return new PathCurvetoAbs(*this);
2006 }
PathCurvetoRel(const Magick::PathCurvetoArgs & args_)2007 Magick::PathCurvetoRel::PathCurvetoRel ( const Magick::PathCurvetoArgs &args_ )
2008   : _args(1,args_)
2009 {
2010 }
PathCurvetoRel(const PathCurveToArgsList & args_)2011 Magick::PathCurvetoRel::PathCurvetoRel ( const PathCurveToArgsList &args_ )
2012   : _args(args_)
2013 {
2014 }
PathCurvetoRel(const Magick::PathCurvetoRel & original_)2015 Magick::PathCurvetoRel::PathCurvetoRel
2016 ( const Magick::PathCurvetoRel& original_ )
2017   : VPathBase (original_),
2018     _args(original_._args)
2019 {
2020 }
~PathCurvetoRel(void)2021 Magick::PathCurvetoRel::~PathCurvetoRel ( void )
2022 {
2023 }
operator ()(MagickCore::DrawingWand * context_) const2024 void Magick::PathCurvetoRel::operator()
2025   ( MagickCore::DrawingWand * context_ ) const
2026 {
2027   for( PathCurveToArgsList::const_iterator p = _args.begin();
2028        p != _args.end(); p++ )
2029     {
2030       DrawPathCurveToRelative( context_, p->x1(), p->y1(), p->x2(), p->y2(),
2031                                p->x(), p->y() );
2032     }
2033 }
copy() const2034 Magick::VPathBase* Magick::PathCurvetoRel::copy() const
2035 {
2036   return new PathCurvetoRel(*this);
2037 }
PathSmoothCurvetoAbs(const Magick::Coordinate & coordinates_)2038 Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs
2039 ( const Magick::Coordinate &coordinates_ )
2040   : _coordinates(1,coordinates_)
2041 {
2042 }
PathSmoothCurvetoAbs(const CoordinateList & coordinates_)2043 Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs
2044 ( const CoordinateList &coordinates_ )
2045   : _coordinates(coordinates_)
2046 {
2047 }
PathSmoothCurvetoAbs(const Magick::PathSmoothCurvetoAbs & original_)2048 Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs
2049 ( const Magick::PathSmoothCurvetoAbs& original_ )
2050   : VPathBase (original_),
2051     _coordinates(original_._coordinates)
2052 {
2053 }
~PathSmoothCurvetoAbs(void)2054 Magick::PathSmoothCurvetoAbs::~PathSmoothCurvetoAbs ( void )
2055 {
2056 }
operator ()(MagickCore::DrawingWand * context_) const2057 void Magick::PathSmoothCurvetoAbs::operator()
2058   ( MagickCore::DrawingWand * context_ ) const
2059 {
2060   for( CoordinateList::const_iterator p = _coordinates.begin();
2061        p != _coordinates.end(); p++ )
2062     {
2063       double x2 = p->x();
2064       double y2 = p->y();
2065       p++;
2066       if (p == _coordinates.end() )
2067         break;
2068       DrawPathCurveToSmoothAbsolute( context_, x2, y2, p->x(), p->y() );
2069     }
2070 }
copy() const2071 Magick::VPathBase* Magick::PathSmoothCurvetoAbs::copy() const
2072 {
2073   return new PathSmoothCurvetoAbs(*this);
2074 }
PathSmoothCurvetoRel(const Magick::Coordinate & coordinates_)2075 Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel
2076 ( const Magick::Coordinate &coordinates_ )
2077   : _coordinates(1,coordinates_)
2078 {
2079 }
PathSmoothCurvetoRel(const CoordinateList & coordinates_)2080 Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel
2081 ( const CoordinateList &coordinates_ )
2082   : _coordinates(coordinates_)
2083 {
2084 }
PathSmoothCurvetoRel(const Magick::PathSmoothCurvetoRel & original_)2085 Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel
2086 ( const Magick::PathSmoothCurvetoRel& original_ )
2087   : VPathBase (original_),
2088     _coordinates(original_._coordinates)
2089 {
2090 }
~PathSmoothCurvetoRel(void)2091 Magick::PathSmoothCurvetoRel::~PathSmoothCurvetoRel ( void )
2092 {
2093 }
operator ()(MagickCore::DrawingWand * context_) const2094 void Magick::PathSmoothCurvetoRel::operator()
2095   ( MagickCore::DrawingWand * context_ ) const
2096 {
2097   for( CoordinateList::const_iterator p = _coordinates.begin();
2098        p != _coordinates.end(); p++ )
2099     {
2100       double x2 = p->x();
2101       double y2 = p->y();
2102       p++;
2103       if (p == _coordinates.end() )
2104         break;
2105       DrawPathCurveToSmoothRelative( context_, x2, y2, p->x(), p->y() );
2106     }
2107 }
copy() const2108 Magick::VPathBase* Magick::PathSmoothCurvetoRel::copy() const
2109 {
2110   return new PathSmoothCurvetoRel(*this);
2111 }
2112 
2113 //
2114 // Quadratic Curveto (Quadratic Bezier)
2115 //
operator ==(const Magick::PathQuadraticCurvetoArgs &,const Magick::PathQuadraticCurvetoArgs &)2116 MagickPPExport int Magick::operator ==
2117 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
2118   const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
2119 {
2120   return ( 1 );
2121 }
operator !=(const Magick::PathQuadraticCurvetoArgs &,const Magick::PathQuadraticCurvetoArgs &)2122 MagickPPExport int Magick::operator !=
2123 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
2124   const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
2125 {
2126   return ( 0 );
2127 }
operator >(const Magick::PathQuadraticCurvetoArgs &,const Magick::PathQuadraticCurvetoArgs &)2128 MagickPPExport int Magick::operator >
2129 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
2130   const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
2131 {
2132   return ( 0 );
2133 }
operator <(const Magick::PathQuadraticCurvetoArgs &,const Magick::PathQuadraticCurvetoArgs &)2134 MagickPPExport int Magick::operator <
2135 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
2136   const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
2137 {
2138   return  ( 0 );
2139 }
operator >=(const Magick::PathQuadraticCurvetoArgs & left_,const Magick::PathQuadraticCurvetoArgs & right_)2140 MagickPPExport int Magick::operator >=
2141 ( const Magick::PathQuadraticCurvetoArgs& left_,
2142   const Magick::PathQuadraticCurvetoArgs& right_ )
2143 {
2144   return ( ( left_ > right_ ) || ( left_ == right_ ) );
2145 }
operator <=(const Magick::PathQuadraticCurvetoArgs & left_,const Magick::PathQuadraticCurvetoArgs & right_)2146 MagickPPExport int Magick::operator <=
2147 ( const Magick::PathQuadraticCurvetoArgs& left_,
2148   const Magick::PathQuadraticCurvetoArgs& right_ )
2149 {
2150   return ( ( left_ < right_ ) || ( left_ == right_ ) );
2151 }
2152 // Default Constructor
PathQuadraticCurvetoArgs(void)2153 Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( void )
2154   : _x1(0),
2155     _y1(0),
2156     _x(0),
2157     _y(0)
2158 {
2159 }
2160 // Normal Constructor
PathQuadraticCurvetoArgs(double x1_,double y1_,double x_,double y_)2161 Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( double x1_,
2162                                                             double y1_,
2163                                                             double x_,
2164                                                             double y_ )
2165   : _x1(x1_),
2166     _y1(y1_),
2167     _x(x_),
2168     _y(y_)
2169 {
2170 }
2171 // Copy Constructor
PathQuadraticCurvetoArgs(const PathQuadraticCurvetoArgs & original_)2172 Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( const PathQuadraticCurvetoArgs &original_ )
2173   : _x1(original_._x1),
2174     _y1(original_._y1),
2175     _x(original_._x),
2176     _y(original_._y)
2177 {
2178 }
2179 // Destructor
~PathQuadraticCurvetoArgs(void)2180 Magick::PathQuadraticCurvetoArgs::~PathQuadraticCurvetoArgs ( void )
2181 {
2182 }
2183 
PathQuadraticCurvetoAbs(const Magick::PathQuadraticCurvetoArgs & args_)2184 Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs
2185 ( const Magick::PathQuadraticCurvetoArgs &args_ )
2186   : _args(1,args_)
2187 {
2188 }
PathQuadraticCurvetoAbs(const PathQuadraticCurvetoArgsList & args_)2189 Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs
2190 ( const PathQuadraticCurvetoArgsList &args_ )
2191   : _args(args_)
2192 {
2193 }
PathQuadraticCurvetoAbs(const Magick::PathQuadraticCurvetoAbs & original_)2194 Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs
2195 ( const Magick::PathQuadraticCurvetoAbs& original_ )
2196   : VPathBase (original_),
2197     _args(original_._args)
2198 {
2199 }
~PathQuadraticCurvetoAbs(void)2200 Magick::PathQuadraticCurvetoAbs::~PathQuadraticCurvetoAbs ( void )
2201 {
2202 }
operator ()(MagickCore::DrawingWand * context_) const2203 void Magick::PathQuadraticCurvetoAbs::operator()
2204   ( MagickCore::DrawingWand * context_ ) const
2205 {
2206   for( PathQuadraticCurvetoArgsList::const_iterator p = _args.begin();
2207        p != _args.end(); p++ )
2208     {
2209       DrawPathCurveToQuadraticBezierAbsolute( context_, p->x1(), p->y1(),
2210                                               p->x(), p->y() );
2211     }
2212 }
copy() const2213 Magick::VPathBase* Magick::PathQuadraticCurvetoAbs::copy() const
2214 {
2215   return new PathQuadraticCurvetoAbs(*this);
2216 }
PathQuadraticCurvetoRel(const Magick::PathQuadraticCurvetoArgs & args_)2217 Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel
2218 ( const Magick::PathQuadraticCurvetoArgs &args_ )
2219   : _args(1,args_)
2220 {
2221 }
PathQuadraticCurvetoRel(const PathQuadraticCurvetoArgsList & args_)2222 Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel
2223 ( const PathQuadraticCurvetoArgsList &args_ )
2224   : _args(args_)
2225 {
2226 }
PathQuadraticCurvetoRel(const Magick::PathQuadraticCurvetoRel & original_)2227 Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel
2228 ( const Magick::PathQuadraticCurvetoRel& original_ )
2229   : VPathBase (original_),
2230     _args(original_._args)
2231 {
2232 }
~PathQuadraticCurvetoRel(void)2233 Magick::PathQuadraticCurvetoRel::~PathQuadraticCurvetoRel ( void )
2234 {
2235 }
operator ()(MagickCore::DrawingWand * context_) const2236 void Magick::PathQuadraticCurvetoRel::operator()
2237   ( MagickCore::DrawingWand * context_ ) const
2238 {
2239   for( PathQuadraticCurvetoArgsList::const_iterator p = _args.begin();
2240        p != _args.end(); p++ )
2241     {
2242       DrawPathCurveToQuadraticBezierRelative( context_, p->x1(), p->y1(),
2243                                               p->x(), p->y() );
2244     }
2245 }
copy() const2246 Magick::VPathBase* Magick::PathQuadraticCurvetoRel::copy() const
2247 {
2248   return new PathQuadraticCurvetoRel(*this);
2249 }
PathSmoothQuadraticCurvetoAbs(const Magick::Coordinate & coordinate_)2250 Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs
2251 ( const Magick::Coordinate &coordinate_ )
2252   : _coordinates(1,coordinate_)
2253 {
2254 }
PathSmoothQuadraticCurvetoAbs(const CoordinateList & coordinates_)2255 Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs
2256 ( const CoordinateList &coordinates_ )
2257   : _coordinates(coordinates_)
2258 {
2259 }
PathSmoothQuadraticCurvetoAbs(const Magick::PathSmoothQuadraticCurvetoAbs & original_)2260 Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs
2261 ( const Magick::PathSmoothQuadraticCurvetoAbs& original_ )
2262   : VPathBase (original_),
2263     _coordinates(original_._coordinates)
2264 {
2265 }
~PathSmoothQuadraticCurvetoAbs(void)2266 Magick::PathSmoothQuadraticCurvetoAbs::~PathSmoothQuadraticCurvetoAbs ( void )
2267 {
2268 }
operator ()(MagickCore::DrawingWand * context_) const2269 void Magick::PathSmoothQuadraticCurvetoAbs::operator()
2270   ( MagickCore::DrawingWand * context_ ) const
2271 {
2272   for( CoordinateList::const_iterator p = _coordinates.begin();
2273        p != _coordinates.end(); p++ )
2274     {
2275       DrawPathCurveToQuadraticBezierSmoothAbsolute( context_, p->x(), p->y() );
2276     }
2277 }
copy() const2278 Magick::VPathBase* Magick::PathSmoothQuadraticCurvetoAbs::copy() const
2279 {
2280   return new PathSmoothQuadraticCurvetoAbs(*this);
2281 }
PathSmoothQuadraticCurvetoRel(const Magick::Coordinate & coordinate_)2282 Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel
2283 ( const Magick::Coordinate &coordinate_ )
2284   : _coordinates(1,coordinate_)
2285 {
2286 }
PathSmoothQuadraticCurvetoRel(const CoordinateList & coordinates_)2287 Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel
2288 ( const CoordinateList &coordinates_ )
2289   : _coordinates(coordinates_)
2290 {
2291 }
PathSmoothQuadraticCurvetoRel(const PathSmoothQuadraticCurvetoRel & original_)2292 Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel
2293 ( const PathSmoothQuadraticCurvetoRel& original_ )
2294   : VPathBase (original_),
2295     _coordinates(original_._coordinates)
2296 {
2297 }
~PathSmoothQuadraticCurvetoRel(void)2298 Magick::PathSmoothQuadraticCurvetoRel::~PathSmoothQuadraticCurvetoRel ( void )
2299 {
2300 }
operator ()(MagickCore::DrawingWand * context_) const2301 void Magick::PathSmoothQuadraticCurvetoRel::operator()
2302   ( MagickCore::DrawingWand * context_ ) const
2303 {
2304   for( CoordinateList::const_iterator p = _coordinates.begin();
2305        p != _coordinates.end(); p++ )
2306     {
2307       DrawPathCurveToQuadraticBezierSmoothRelative( context_, p->x(), p->y() );
2308     }
2309 }
copy() const2310 Magick::VPathBase* Magick::PathSmoothQuadraticCurvetoRel::copy() const
2311 {
2312   return new PathSmoothQuadraticCurvetoRel(*this);
2313 }
2314 
2315 //
2316 // Path Lineto
2317 //
PathLinetoAbs(const Magick::Coordinate & coordinate_)2318 Magick::PathLinetoAbs::PathLinetoAbs ( const Magick::Coordinate& coordinate_  )
2319   : _coordinates(1,coordinate_)
2320 {
2321 }
PathLinetoAbs(const CoordinateList & coordinates_)2322 Magick::PathLinetoAbs::PathLinetoAbs ( const CoordinateList &coordinates_ )
2323   : _coordinates(coordinates_)
2324 {
2325 }
PathLinetoAbs(const Magick::PathLinetoAbs & original_)2326 Magick::PathLinetoAbs::PathLinetoAbs ( const Magick::PathLinetoAbs& original_ )
2327   : VPathBase (original_),
2328     _coordinates(original_._coordinates)
2329 {
2330 }
~PathLinetoAbs(void)2331 Magick::PathLinetoAbs::~PathLinetoAbs ( void )
2332 {
2333 }
operator ()(MagickCore::DrawingWand * context_) const2334 void Magick::PathLinetoAbs::operator()( MagickCore::DrawingWand * context_ ) const
2335 {
2336   for( CoordinateList::const_iterator p = _coordinates.begin();
2337        p != _coordinates.end(); p++ )
2338     {
2339       DrawPathLineToAbsolute( context_, p->x(), p->y() );
2340     }
2341 }
copy() const2342 Magick::VPathBase* Magick::PathLinetoAbs::copy() const
2343 {
2344   return new PathLinetoAbs(*this);
2345 }
PathLinetoRel(const Magick::Coordinate & coordinate_)2346 Magick::PathLinetoRel::PathLinetoRel ( const Magick::Coordinate& coordinate_  )
2347   : _coordinates(1,coordinate_)
2348 {
2349 }
PathLinetoRel(const CoordinateList & coordinates_)2350 Magick::PathLinetoRel::PathLinetoRel ( const CoordinateList &coordinates_ )
2351   : _coordinates(coordinates_)
2352 {
2353 }
PathLinetoRel(const Magick::PathLinetoRel & original_)2354 Magick::PathLinetoRel::PathLinetoRel ( const Magick::PathLinetoRel& original_ )
2355   : VPathBase (original_),
2356     _coordinates(original_._coordinates)
2357 {
2358 }
~PathLinetoRel(void)2359 Magick::PathLinetoRel::~PathLinetoRel ( void )
2360 {
2361 }
operator ()(MagickCore::DrawingWand * context_) const2362 void Magick::PathLinetoRel::operator()( MagickCore::DrawingWand * context_ ) const
2363 {
2364   for( CoordinateList::const_iterator p = _coordinates.begin();
2365        p != _coordinates.end(); p++ )
2366     {
2367       DrawPathLineToRelative( context_, p->x(), p->y() );
2368     }
2369 }
copy() const2370 Magick::VPathBase* Magick::PathLinetoRel::copy() const
2371 {
2372   return new PathLinetoRel(*this);
2373 }
2374 
2375 //
2376 // Path Horizontal Lineto
2377 //
2378 
~PathLinetoHorizontalAbs(void)2379 Magick::PathLinetoHorizontalAbs::~PathLinetoHorizontalAbs ( void )
2380 {
2381 }
operator ()(MagickCore::DrawingWand * context_) const2382 void Magick::PathLinetoHorizontalAbs::operator()
2383   ( MagickCore::DrawingWand * context_ ) const
2384 {
2385   DrawPathLineToHorizontalAbsolute( context_, _x );
2386 }
copy() const2387 Magick::VPathBase* Magick::PathLinetoHorizontalAbs::copy() const
2388 {
2389   return new PathLinetoHorizontalAbs(*this);
2390 }
~PathLinetoHorizontalRel(void)2391 Magick::PathLinetoHorizontalRel::~PathLinetoHorizontalRel ( void )
2392 {
2393 }
operator ()(MagickCore::DrawingWand * context_) const2394 void Magick::PathLinetoHorizontalRel::operator()
2395   ( MagickCore::DrawingWand * context_ ) const
2396 {
2397   DrawPathLineToHorizontalRelative( context_, _x );
2398 }
copy() const2399 Magick::VPathBase* Magick::PathLinetoHorizontalRel::copy() const
2400 {
2401   return new PathLinetoHorizontalRel(*this);
2402 }
2403 
2404 //
2405 // Path Vertical Lineto
2406 //
~PathLinetoVerticalAbs(void)2407 Magick::PathLinetoVerticalAbs::~PathLinetoVerticalAbs ( void )
2408 {
2409 }
operator ()(MagickCore::DrawingWand * context_) const2410 void Magick::PathLinetoVerticalAbs::operator()
2411   ( MagickCore::DrawingWand * context_ ) const
2412 {
2413   DrawPathLineToVerticalAbsolute( context_, _y );
2414 }
copy() const2415 Magick::VPathBase* Magick::PathLinetoVerticalAbs::copy() const
2416 {
2417   return new PathLinetoVerticalAbs(*this);
2418 }
~PathLinetoVerticalRel(void)2419 Magick::PathLinetoVerticalRel::~PathLinetoVerticalRel ( void )
2420 {
2421 }
operator ()(MagickCore::DrawingWand * context_) const2422 void Magick::PathLinetoVerticalRel::operator()
2423   ( MagickCore::DrawingWand * context_ ) const
2424 {
2425   DrawPathLineToVerticalRelative( context_, _y );
2426 }
copy() const2427 Magick::VPathBase* Magick::PathLinetoVerticalRel::copy() const
2428 {
2429   return new PathLinetoVerticalRel(*this);
2430 }
2431 
2432 //
2433 // Path Moveto
2434 //
2435 
PathMovetoAbs(const Magick::Coordinate & coordinate_)2436 Magick::PathMovetoAbs::PathMovetoAbs ( const Magick::Coordinate &coordinate_ )
2437   : _coordinates(1,coordinate_)
2438 {
2439 }
PathMovetoAbs(const CoordinateList & coordinates_)2440 Magick::PathMovetoAbs::PathMovetoAbs ( const CoordinateList &coordinates_ )
2441   : _coordinates(coordinates_)
2442 {
2443 }
PathMovetoAbs(const Magick::PathMovetoAbs & original_)2444 Magick::PathMovetoAbs::PathMovetoAbs ( const Magick::PathMovetoAbs& original_ )
2445   : VPathBase (original_),
2446     _coordinates(original_._coordinates)
2447 {
2448 }
~PathMovetoAbs(void)2449 Magick::PathMovetoAbs::~PathMovetoAbs ( void )
2450 {
2451 }
operator ()(MagickCore::DrawingWand * context_) const2452 void Magick::PathMovetoAbs::operator()( MagickCore::DrawingWand * context_ ) const
2453 {
2454   for( CoordinateList::const_iterator p = _coordinates.begin();
2455        p != _coordinates.end(); p++ )
2456     {
2457       DrawPathMoveToAbsolute( context_, p->x(), p->y() );
2458     }
2459 }
copy() const2460 Magick::VPathBase* Magick::PathMovetoAbs::copy() const
2461 {
2462   return new PathMovetoAbs(*this);
2463 }
PathMovetoRel(const Magick::Coordinate & coordinate_)2464 Magick::PathMovetoRel::PathMovetoRel ( const Magick::Coordinate &coordinate_ )
2465   : _coordinates(1,coordinate_)
2466 {
2467 }
PathMovetoRel(const CoordinateList & coordinates_)2468 Magick::PathMovetoRel::PathMovetoRel ( const CoordinateList &coordinates_ )
2469   : _coordinates(coordinates_)
2470 {
2471 }
PathMovetoRel(const Magick::PathMovetoRel & original_)2472 Magick::PathMovetoRel::PathMovetoRel ( const Magick::PathMovetoRel& original_ )
2473   : VPathBase (original_),
2474     _coordinates(original_._coordinates)
2475 {
2476 }
~PathMovetoRel(void)2477 Magick::PathMovetoRel::~PathMovetoRel ( void )
2478 {
2479 }
operator ()(MagickCore::DrawingWand * context_) const2480 void Magick::PathMovetoRel::operator()( MagickCore::DrawingWand * context_ ) const
2481 {
2482   for( CoordinateList::const_iterator p = _coordinates.begin();
2483        p != _coordinates.end(); p++ )
2484     {
2485       DrawPathMoveToRelative( context_, p->x(), p->y() );
2486     }
2487 }
copy() const2488 Magick::VPathBase* Magick::PathMovetoRel::copy() const
2489 {
2490   return new PathMovetoRel(*this);
2491 }
2492 
2493 #if defined(EXPLICIT_TEMPLATE_INSTANTIATION)
2494 // template class std::vector<Magick::Coordinate>;
2495 // template class std::vector<const Magick::Drawable>;
2496 // template class std::vector<const Magick::PathArcArgs>;
2497 // template class std::vector<const Magick::PathCurvetoArgs>;
2498 // template class std::vector<const Magick::PathQuadraticCurvetoArgs>;
2499 // template class std::vector<const Magick::VPath>;
2500 #endif
2501