1 // This may look like C code, but it is really -*- C++ -*-
3 // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
4 // Copyright Dirk Lemstra 2014
6 // Implementation of Drawable (Graphic objects)
9 #define MAGICKCORE_IMPLEMENTATION 1
10 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1
11 #define MAGICK_DRAWABLE_IMPLEMENTATION
13 #include "Magick++/Include.h"
17 #include "Magick++/Drawable.h"
18 #include "Magick++/Image.h"
22 MagickPPExport int Magick::operator == ( const Magick::Coordinate& left_,
23 const Magick::Coordinate& right_ )
25 return ( ( left_.x() == right_.x() ) && ( left_.y() == right_.y() ) );
27 MagickPPExport int Magick::operator != ( const Magick::Coordinate& left_,
28 const Magick::Coordinate& right_ )
30 return ( ! (left_ == right_) );
32 MagickPPExport int Magick::operator > ( const Magick::Coordinate& left_,
33 const Magick::Coordinate& right_ )
35 return ( !( left_ < right_ ) && ( left_ != right_ ) );
37 MagickPPExport int Magick::operator < ( const Magick::Coordinate& left_,
38 const Magick::Coordinate& right_ )
40 // Based on distance from origin
41 return ( (sqrt(left_.x()*left_.x() + left_.y()*left_.y())) <
42 (sqrt(right_.x()*right_.x() + right_.y()*right_.y())) );
44 MagickPPExport int Magick::operator >= ( const Magick::Coordinate& left_,
45 const Magick::Coordinate& right_ )
47 return ( ( left_ > right_ ) || ( left_ == right_ ) );
49 MagickPPExport int Magick::operator <= ( const Magick::Coordinate& left_,
50 const Magick::Coordinate& right_ )
52 return ( ( left_ < right_ ) || ( left_ == right_ ) );
56 Magick::DrawableBase::~DrawableBase ( void )
61 Magick::Drawable::Drawable ( void )
66 // Construct from DrawableBase
67 Magick::Drawable::Drawable ( const Magick::DrawableBase& original_ )
68 : dp(original_.copy())
73 Magick::Drawable::~Drawable ( void )
80 Magick::Drawable::Drawable ( const Magick::Drawable& original_ )
81 : dp(original_.dp? original_.dp->copy(): 0)
85 // Assignment operator
86 Magick::Drawable& Magick::Drawable::operator= (const Magick::Drawable& original_ )
88 if (this != &original_)
90 DrawableBase* temp_dp = (original_.dp ? original_.dp->copy() : 0);
97 // Operator to invoke contained object
98 void Magick::Drawable::operator()( MagickCore::DrawingWand * context_ ) const
101 dp->operator()( context_ );
104 MagickPPExport int Magick::operator == ( const Magick::Drawable& /*left_*/,
105 const Magick::Drawable& /*right_*/ )
109 MagickPPExport int Magick::operator != ( const Magick::Drawable& /*left_*/,
110 const Magick::Drawable& /*right_*/ )
114 MagickPPExport int Magick::operator > ( const Magick::Drawable& /*left_*/,
115 const Magick::Drawable& /*right_*/ )
119 MagickPPExport int Magick::operator < ( const Magick::Drawable& /*left_*/,
120 const Magick::Drawable& /*right_*/ )
124 MagickPPExport int Magick::operator >= ( const Magick::Drawable& left_,
125 const Magick::Drawable& right_ )
127 return ( ( left_ > right_ ) || ( left_ == right_ ) );
129 MagickPPExport int Magick::operator <= ( const Magick::Drawable& left_,
130 const Magick::Drawable& right_ )
132 return ( ( left_ < right_ ) || ( left_ == right_ ) );
136 Magick::VPathBase::~VPathBase ( void )
141 Magick::VPath::VPath ( void )
146 // Construct from VPathBase
147 Magick::VPath::VPath ( const Magick::VPathBase& original_ )
148 : dp(original_.copy())
153 /* virtual */ Magick::VPath::~VPath ( void )
160 Magick::VPath::VPath ( const Magick::VPath& original_ )
161 : dp(original_.dp? original_.dp->copy(): 0)
165 // Assignment operator
166 Magick::VPath& Magick::VPath::operator= (const Magick::VPath& original_ )
168 if (this != &original_)
170 VPathBase* temp_dp = (original_.dp ? original_.dp->copy() : 0);
177 // Operator to invoke contained object
178 void Magick::VPath::operator()( MagickCore::DrawingWand * context_ ) const
181 dp->operator()( context_ );
184 MagickPPExport int Magick::operator == ( const Magick::VPath& /*left_*/,
185 const Magick::VPath& /*right_*/ )
189 MagickPPExport int Magick::operator != ( const Magick::VPath& /*left_*/,
190 const Magick::VPath& /*right_*/ )
194 MagickPPExport int Magick::operator > ( const Magick::VPath& /*left_*/,
195 const Magick::VPath& /*right_*/ )
199 MagickPPExport int Magick::operator < ( const Magick::VPath& /*left_*/,
200 const Magick::VPath& /*right_*/ )
204 MagickPPExport int Magick::operator >= ( const Magick::VPath& left_,
205 const Magick::VPath& right_ )
207 return ( ( left_ > right_ ) || ( left_ == right_ ) );
209 MagickPPExport int Magick::operator <= ( const Magick::VPath& left_,
210 const Magick::VPath& right_ )
212 return ( ( left_ < right_ ) || ( left_ == right_ ) );
219 // Affine (scaling, rotation, and translation)
220 Magick::DrawableAffine::DrawableAffine( double sx_, double sy_,
221 double rx_, double ry_,
222 double tx_, double ty_ )
231 Magick::DrawableAffine::DrawableAffine( void )
233 GetAffineMatrix(&_affine);
235 Magick::DrawableAffine::~DrawableAffine( void )
238 void Magick::DrawableAffine::operator()( MagickCore::DrawingWand * context_ ) const
240 DrawAffine( context_, &_affine );
242 Magick::DrawableBase* Magick::DrawableAffine::copy() const
244 return new DrawableAffine(*this);
247 // Change pixel matte value to transparent using PaintMethod
248 Magick::DrawableAlpha::~DrawableAlpha(void)
252 void Magick::DrawableAlpha::operator()(MagickCore::DrawingWand * context_) const
254 DrawAlpha(context_,_x,_y,_paintMethod);
257 Magick::DrawableBase* Magick::DrawableAlpha::copy() const
259 return new DrawableAlpha(*this);
263 Magick::DrawableArc::~DrawableArc( void )
266 void Magick::DrawableArc::operator()( MagickCore::DrawingWand * context_ ) const
268 DrawArc( context_, _startX, _startY, _endX, _endY, _startDegrees, _endDegrees );
270 Magick::DrawableBase* Magick::DrawableArc::copy() const
272 return new DrawableArc(*this);
278 // Construct from coordinates (Coordinate list must contain at least three members)
279 Magick::DrawableBezier::DrawableBezier ( const CoordinateList &coordinates_ )
280 : _coordinates(coordinates_)
284 Magick::DrawableBezier::DrawableBezier( const Magick::DrawableBezier& original_ )
285 : DrawableBase (original_),
286 _coordinates(original_._coordinates)
290 Magick::DrawableBezier::~DrawableBezier( void )
293 void Magick::DrawableBezier::operator()( MagickCore::DrawingWand * context_ ) const
295 size_t num_coords = (size_t) _coordinates.size();
296 PointInfo *coordinates = new PointInfo[num_coords];
298 PointInfo *q = coordinates;
299 CoordinateList::const_iterator p = _coordinates.begin();
301 while( p != _coordinates.end() )
309 DrawBezier( context_, num_coords, coordinates );
310 delete [] coordinates;
312 Magick::DrawableBase* Magick::DrawableBezier::copy() const
314 return new DrawableBezier(*this);
321 // Pop (terminate) Clip path definition
322 Magick::DrawablePopClipPath::~DrawablePopClipPath ( void )
325 void Magick::DrawablePopClipPath::operator() ( MagickCore::DrawingWand * context_ ) const
327 DrawPopClipPath( context_ );
328 DrawPopDefs(context_);
330 Magick::DrawableBase* Magick::DrawablePopClipPath::copy() const
332 return new DrawablePopClipPath(*this);
335 // Push clip path definition
336 Magick::DrawablePushClipPath::DrawablePushClipPath( const std::string &id_)
337 : _id(id_.c_str()) //multithread safe const char*
340 Magick::DrawablePushClipPath::DrawablePushClipPath
341 ( const Magick::DrawablePushClipPath& original_ ) //multithread safe const char*
342 : DrawableBase (original_),
343 _id(original_._id.c_str())
346 Magick::DrawablePushClipPath::~DrawablePushClipPath( void )
349 void Magick::DrawablePushClipPath::operator()
350 ( MagickCore::DrawingWand * context_ ) const
352 DrawPushDefs(context_);
353 DrawPushClipPath( context_, _id.c_str());
355 Magick::DrawableBase* Magick::DrawablePushClipPath::copy() const
357 return new DrawablePushClipPath(*this);
362 Magick::DrawableClipPath::DrawableClipPath( const std::string &id_ )
367 Magick::DrawableClipPath::DrawableClipPath ( const Magick::DrawableClipPath& original_ )
368 : DrawableBase (original_),
369 _id(original_._id.c_str())
372 Magick::DrawableClipPath::~DrawableClipPath( void )
375 void Magick::DrawableClipPath::operator()( MagickCore::DrawingWand * context_ ) const
377 (void) DrawSetClipPath( context_, _id.c_str());
379 Magick::DrawableBase* Magick::DrawableClipPath::copy() const
381 return new DrawableClipPath(*this);
385 Magick::DrawableCircle::~DrawableCircle ( void )
388 void Magick::DrawableCircle::operator()( MagickCore::DrawingWand * context_ ) const
390 DrawCircle( context_, _originX, _originY, _perimX, _perimY );
392 Magick::DrawableBase* Magick::DrawableCircle::copy() const
394 return new DrawableCircle(*this);
397 // Colorize at point using PaintMethod
398 Magick::DrawableColor::~DrawableColor( void )
401 void Magick::DrawableColor::operator()( MagickCore::DrawingWand * context_ ) const
403 DrawColor( context_, _x, _y, _paintMethod );
405 Magick::DrawableBase* Magick::DrawableColor::copy() const
407 return new DrawableColor(*this);
410 // Draw image at point
411 Magick::DrawableCompositeImage::DrawableCompositeImage
412 ( double x_, double y_,
413 double width_, double height_,
414 const std::string &filename_,
415 Magick::CompositeOperator composition_ )
416 : _composition(composition_),
421 _image(new Image(filename_))
424 Magick::DrawableCompositeImage::DrawableCompositeImage
425 ( double x_, double y_,
426 double width_, double height_,
427 const Magick::Image &image_,
428 Magick::CompositeOperator composition_ )
429 : _composition(composition_),
434 _image(new Image(image_))
437 Magick::DrawableCompositeImage::DrawableCompositeImage
438 ( double x_, double y_,
439 double width_, double height_,
440 const std::string &filename_ )
441 :_composition(CopyCompositeOp),
446 _image(new Image(filename_))
449 Magick::DrawableCompositeImage::DrawableCompositeImage
450 ( double x_, double y_,
451 double width_, double height_,
452 const Magick::Image &image_ )
453 :_composition(CopyCompositeOp),
458 _image(new Image(image_))
461 Magick::DrawableCompositeImage::DrawableCompositeImage
462 ( double x_, double y_,
463 const std::string &filename_ )
464 : _composition(CopyCompositeOp),
469 _image(new Image(filename_))
471 _width=_image->columns();
472 _height=_image->rows();
474 Magick::DrawableCompositeImage::DrawableCompositeImage
475 ( double x_, double y_,
476 const Magick::Image &image_ )
477 : _composition(CopyCompositeOp),
482 _image(new Image(image_))
484 _width=_image->columns();
485 _height=_image->rows();
488 Magick::DrawableCompositeImage::DrawableCompositeImage
489 ( const Magick::DrawableCompositeImage& original_ )
490 : Magick::DrawableBase(original_),
491 _composition(original_._composition),
494 _width(original_._width),
495 _height(original_._height),
496 _image(new Image(*original_._image))
499 Magick::DrawableCompositeImage::~DrawableCompositeImage( void )
503 // Assignment operator
504 Magick::DrawableCompositeImage& Magick::DrawableCompositeImage::operator=
505 (const Magick::DrawableCompositeImage& original_ )
507 // If not being set to ourself
508 if ( this != &original_ )
510 _composition = original_._composition;
513 _width = original_._width;
514 _height = original_._height;
515 Image* temp_image = new Image(*original_._image);
521 void Magick::DrawableCompositeImage::filename( const std::string &filename_ )
523 Image* temp_image = new Image(filename_);
527 std::string Magick::DrawableCompositeImage::filename( void ) const
529 return _image->fileName();
532 void Magick::DrawableCompositeImage::image( const Magick::Image &image_ )
534 Image* temp_image = new Image(image_);
538 Magick::Image Magick::DrawableCompositeImage::image( void ) const
543 // Specify image format used to output Base64 inlined image data.
544 void Magick::DrawableCompositeImage::magick( std::string magick_ )
546 _image->magick( magick_ );
548 std::string Magick::DrawableCompositeImage::magick( void )
550 return _image->magick();
553 void Magick::DrawableCompositeImage::operator()
554 ( MagickCore::DrawingWand * context_ ) const
559 magick_wand=NewMagickWandFromImage(_image->constImage());
560 (void) DrawComposite( context_, _composition, _x, _y, _width, _height,
562 magick_wand=DestroyMagickWand(magick_wand);
565 Magick::DrawableBase* Magick::DrawableCompositeImage::copy() const
567 return new DrawableCompositeImage(*this);
571 Magick::DrawableEllipse::~DrawableEllipse( void )
574 void Magick::DrawableEllipse::operator()
575 ( MagickCore::DrawingWand * context_ ) const
577 DrawEllipse( context_, _originX, _originY, _radiusX, _radiusY,
578 _arcStart, _arcEnd );
580 Magick::DrawableBase* Magick::DrawableEllipse::copy() const
582 return new DrawableEllipse(*this);
585 // Specify drawing fill color
586 Magick::DrawableFillColor::DrawableFillColor( const Magick::Color &color_ )
590 Magick::DrawableFillColor::DrawableFillColor
591 ( const Magick::DrawableFillColor& original_ )
592 : DrawableBase (original_),
593 _color(original_._color)
596 Magick::DrawableFillColor::~DrawableFillColor( void )
599 void Magick::DrawableFillColor::operator()
600 ( MagickCore::DrawingWand * context_ ) const
602 PixelInfo color = static_cast<PixelInfo>(_color);
603 PixelWand *pixel_wand=NewPixelWand();
604 PixelSetPixelColor(pixel_wand,&color);
605 DrawSetFillColor(context_,pixel_wand);
606 pixel_wand=DestroyPixelWand(pixel_wand);
608 Magick::DrawableBase* Magick::DrawableFillColor::copy() const
610 return new DrawableFillColor(*this);
613 // Specify drawing fill fule
614 Magick::DrawableFillRule::~DrawableFillRule ( void )
617 void Magick::DrawableFillRule::operator()
618 ( MagickCore::DrawingWand * context_ ) const
620 DrawSetFillRule( context_, _fillRule );
622 Magick::DrawableBase* Magick::DrawableFillRule::copy() const
624 return new DrawableFillRule(*this);
627 // Specify drawing fill alpha
628 Magick::DrawableFillAlpha::~DrawableFillAlpha ( void )
631 void Magick::DrawableFillAlpha::operator()
632 ( MagickCore::DrawingWand * context_ ) const
634 DrawSetFillAlpha( context_, _alpha );
636 Magick::DrawableBase* Magick::DrawableFillAlpha::copy() const
638 return new DrawableFillAlpha(*this);
642 Magick::DrawableFont::DrawableFont ( const std::string &font_ )
645 _style(Magick::AnyStyle),
647 _stretch(Magick::NormalStretch)
650 Magick::DrawableFont::DrawableFont ( const std::string &family_,
651 Magick::StyleType style_,
652 const unsigned int weight_,
653 Magick::StretchType stretch_ )
661 Magick::DrawableFont::DrawableFont ( const Magick::DrawableFont& original_ )
662 : DrawableBase (original_),
663 _font(original_._font),
664 _family(original_._family),
665 _style(original_._style),
666 _weight(original_._weight),
667 _stretch(original_._stretch)
670 Magick::DrawableFont::~DrawableFont ( void )
673 void Magick::DrawableFont::operator()( MagickCore::DrawingWand * context_ ) const
678 (void) DrawSetFont( context_, _font.c_str() );
684 (void) DrawSetFontFamily( context_, _family.c_str() );
687 DrawSetFontStyle( context_, _style );
690 DrawSetFontWeight( context_, _weight );
693 DrawSetFontStretch( context_, _stretch );
696 Magick::DrawableBase* Magick::DrawableFont::copy() const
698 return new DrawableFont(*this);
701 // Specify text positioning gravity
702 Magick::DrawableGravity::~DrawableGravity ( void )
705 void Magick::DrawableGravity::operator()
706 ( MagickCore::DrawingWand * context_ ) const
708 DrawSetGravity( context_, _gravity );
710 Magick::DrawableBase* Magick::DrawableGravity::copy() const
712 return new DrawableGravity(*this);
716 Magick::DrawableLine::~DrawableLine ( void )
719 void Magick::DrawableLine::operator()( MagickCore::DrawingWand * context_ ) const
721 DrawLine( context_, _startX, _startY, _endX, _endY );
723 Magick::DrawableBase* Magick::DrawableLine::copy() const
725 return new DrawableLine(*this);
729 Magick::DrawablePath::DrawablePath ( const VPathList &path_ )
733 Magick::DrawablePath::DrawablePath ( const Magick::DrawablePath& original_ )
734 : DrawableBase (original_),
735 _path(original_._path)
738 Magick::DrawablePath::~DrawablePath ( void )
741 void Magick::DrawablePath::operator()( MagickCore::DrawingWand * context_ ) const
743 DrawPathStart( context_ );
745 for( VPathList::const_iterator p = _path.begin();
746 p != _path.end(); p++ )
747 p->operator()( context_ ); // FIXME, how to quit loop on error?
749 DrawPathFinish( context_ );
751 Magick::DrawableBase* Magick::DrawablePath::copy() const
753 return new DrawablePath(*this);
757 Magick::DrawablePoint::~DrawablePoint ( void )
760 void Magick::DrawablePoint::operator()( MagickCore::DrawingWand * context_ ) const
762 DrawPoint( context_, _x, _y );
764 Magick::DrawableBase* Magick::DrawablePoint::copy() const
766 return new DrawablePoint(*this);
770 Magick::DrawablePointSize::~DrawablePointSize ( void )
773 void Magick::DrawablePointSize::operator()
774 ( MagickCore::DrawingWand * context_ ) const
776 DrawSetFontSize( context_, _pointSize );
778 Magick::DrawableBase* Magick::DrawablePointSize::copy() const
780 return new DrawablePointSize(*this);
783 // Polygon (Coordinate list must contain at least three members)
784 Magick::DrawablePolygon::DrawablePolygon ( const CoordinateList &coordinates_ )
785 : _coordinates(coordinates_)
788 Magick::DrawablePolygon::DrawablePolygon
789 ( const Magick::DrawablePolygon& original_ )
790 : DrawableBase (original_),
791 _coordinates(original_._coordinates)
794 Magick::DrawablePolygon::~DrawablePolygon ( void )
797 void Magick::DrawablePolygon::operator()
798 ( MagickCore::DrawingWand * context_ ) const
800 size_t num_coords = (size_t) _coordinates.size();
801 PointInfo *coordinates = new PointInfo[num_coords];
803 PointInfo *q = coordinates;
804 CoordinateList::const_iterator p = _coordinates.begin();
806 while( p != _coordinates.end() )
814 DrawPolygon( context_, num_coords, coordinates );
815 delete [] coordinates;
817 Magick::DrawableBase* Magick::DrawablePolygon::copy() const
819 return new DrawablePolygon(*this);
822 // Polyline (Coordinate list must contain at least three members)
823 Magick::DrawablePolyline::DrawablePolyline
824 ( const CoordinateList &coordinates_ )
825 : _coordinates(coordinates_)
828 Magick::DrawablePolyline::DrawablePolyline
829 ( const Magick::DrawablePolyline& original_ )
830 : DrawableBase (original_),
831 _coordinates(original_._coordinates)
834 Magick::DrawablePolyline::~DrawablePolyline ( void )
837 void Magick::DrawablePolyline::operator()
838 ( MagickCore::DrawingWand * context_ ) const
840 size_t num_coords = (size_t) _coordinates.size();
841 PointInfo *coordinates = new PointInfo[num_coords];
843 PointInfo *q = coordinates;
844 CoordinateList::const_iterator p = _coordinates.begin();
846 while( p != _coordinates.end() )
854 DrawPolyline( context_, num_coords, coordinates );
855 delete [] coordinates;
857 Magick::DrawableBase* Magick::DrawablePolyline::copy() const
859 return new DrawablePolyline(*this);
862 // Pop Graphic Context
863 Magick::DrawablePopGraphicContext::~DrawablePopGraphicContext ( void )
866 void Magick::DrawablePopGraphicContext::operator()
867 ( MagickCore::DrawingWand * context_ ) const
869 PopDrawingWand( context_ );
871 Magick::DrawableBase* Magick::DrawablePopGraphicContext::copy() const
873 return new DrawablePopGraphicContext(*this);
876 // Push Graphic Context
877 Magick::DrawablePushGraphicContext::~DrawablePushGraphicContext ( void )
880 void Magick::DrawablePushGraphicContext::operator()
881 ( MagickCore::DrawingWand * context_ ) const
883 PushDrawingWand( context_ );
885 Magick::DrawableBase* Magick::DrawablePushGraphicContext::copy() const
887 return new DrawablePushGraphicContext(*this);
890 // Pop (terminate) Pattern definition
891 Magick::DrawablePopPattern::~DrawablePopPattern ( void )
894 void Magick::DrawablePopPattern::operator()
895 ( MagickCore::DrawingWand * context_ ) const
897 (void) DrawPopPattern( context_ );
899 Magick::DrawableBase* Magick::DrawablePopPattern::copy() const
901 return new DrawablePopPattern(*this);
904 // Push Pattern definition
905 Magick::DrawablePushPattern::DrawablePushPattern
906 ( const std::string &id_, ssize_t x_, ssize_t y_,
907 size_t width_, size_t height_ )
915 Magick::DrawablePushPattern::DrawablePushPattern
916 ( const Magick::DrawablePushPattern& original_ )
917 : DrawableBase (original_),
921 _width(original_._width),
922 _height(original_._height)
925 Magick::DrawablePushPattern::~DrawablePushPattern ( void )
928 void Magick::DrawablePushPattern::operator()
929 ( MagickCore::DrawingWand * context_ ) const
931 (void) DrawPushPattern( context_, _id.c_str(), _x, _y, _width, _height );
933 Magick::DrawableBase* Magick::DrawablePushPattern::copy() const
935 return new DrawablePushPattern(*this);
939 Magick::DrawableRectangle::~DrawableRectangle ( void )
942 void Magick::DrawableRectangle::operator()
943 ( MagickCore::DrawingWand * context_ ) const
945 DrawRectangle( context_, _upperLeftX, _upperLeftY,
946 _lowerRightX, _lowerRightY );
948 Magick::DrawableBase* Magick::DrawableRectangle::copy() const
950 return new DrawableRectangle(*this);
954 Magick::DrawableRotation::~DrawableRotation ( void )
957 void Magick::DrawableRotation::operator()
958 ( MagickCore::DrawingWand * context_ ) const
960 DrawRotate( context_, _angle );
962 Magick::DrawableBase* Magick::DrawableRotation::copy() const
964 return new DrawableRotation(*this);
968 Magick::DrawableRoundRectangle::~DrawableRoundRectangle ( void )
971 void Magick::DrawableRoundRectangle::operator()
972 ( MagickCore::DrawingWand * context_ ) const
974 DrawRoundRectangle( context_, _centerX,_centerY, _width,_hight,
975 _cornerWidth, _cornerHeight);
977 Magick::DrawableBase* Magick::DrawableRoundRectangle::copy() const
979 return new DrawableRoundRectangle(*this);
983 Magick::DrawableScaling::~DrawableScaling ( void )
986 void Magick::DrawableScaling::operator()
987 ( MagickCore::DrawingWand * context_ ) const
989 DrawScale( context_, _x, _y );
991 Magick::DrawableBase* Magick::DrawableScaling::copy() const
993 return new DrawableScaling(*this);
996 // Apply Skew in the X direction
997 Magick::DrawableSkewX::~DrawableSkewX ( void )
1000 void Magick::DrawableSkewX::operator()
1001 ( MagickCore::DrawingWand * context_ ) const
1003 DrawSkewX( context_, _angle );
1005 Magick::DrawableBase* Magick::DrawableSkewX::copy() const
1007 return new DrawableSkewX(*this);
1010 // Apply Skew in the Y direction
1011 Magick::DrawableSkewY::~DrawableSkewY ( void )
1014 void Magick::DrawableSkewY::operator()( MagickCore::DrawingWand * context_ ) const
1016 DrawSkewY( context_, _angle );
1018 Magick::DrawableBase* Magick::DrawableSkewY::copy() const
1020 return new DrawableSkewY(*this);
1023 Magick::DrawableDashArray::DrawableDashArray(const double* dasharray_)
1027 dasharray(dasharray_);
1030 Magick::DrawableDashArray::DrawableDashArray(
1031 const Magick::DrawableDashArray& original_)
1032 : DrawableBase (original_),
1033 _size(original_._size),
1034 _dasharray(new double[_size+1])
1038 for (size_t i=0; i < _size; i++)
1039 _dasharray[i]=original_._dasharray[i];
1040 _dasharray[_size]=0.0;
1044 Magick::DrawableDashArray::~DrawableDashArray(void)
1046 delete [] _dasharray;
1051 Magick::DrawableDashArray& Magick::DrawableDashArray::operator=(
1052 const Magick::DrawableDashArray &original_)
1054 if( this != &original_ )
1056 delete [] _dasharray;
1057 _size=original_._size;
1058 _dasharray = new double[_size+1];
1061 for (size_t i=0; i < _size; i++)
1062 _dasharray[i]=original_._dasharray[i];
1063 _dasharray[_size]=0.0;
1069 void Magick::DrawableDashArray::operator()(
1070 MagickCore::DrawingWand *context_) const
1072 (void) DrawSetStrokeDashArray(context_,(const unsigned long) _size,_dasharray);
1075 Magick::DrawableBase *Magick::DrawableDashArray::copy() const
1077 return(new DrawableDashArray(*this));
1080 void Magick::DrawableDashArray::dasharray(const double* dasharray_)
1085 delete [] _dasharray;
1091 // Count elements in dash array
1094 const double *p = dasharray_;
1100 // Allocate elements
1101 _dasharray=new double[_size+1];
1104 for (size_t i=0; i < _size; i++)
1105 _dasharray[i]=dasharray_[i];
1106 _dasharray[_size]=0.0;
1111 // Stroke dashoffset
1112 Magick::DrawableDashOffset::~DrawableDashOffset ( void )
1115 void Magick::DrawableDashOffset::operator()
1116 ( MagickCore::DrawingWand * context_ ) const
1118 DrawSetStrokeDashOffset( context_, _offset );
1120 Magick::DrawableBase* Magick::DrawableDashOffset::copy() const
1122 return new DrawableDashOffset(*this);
1126 Magick::DrawableStrokeLineCap::~DrawableStrokeLineCap ( void )
1129 void Magick::DrawableStrokeLineCap::operator()
1130 ( MagickCore::DrawingWand * context_ ) const
1132 DrawSetStrokeLineCap( context_, _linecap );
1134 Magick::DrawableBase* Magick::DrawableStrokeLineCap::copy() const
1136 return new DrawableStrokeLineCap(*this);
1140 Magick::DrawableStrokeLineJoin::~DrawableStrokeLineJoin ( void )
1143 void Magick::DrawableStrokeLineJoin::operator()
1144 ( MagickCore::DrawingWand * context_ ) const
1146 DrawSetStrokeLineJoin( context_, _linejoin );
1148 Magick::DrawableBase* Magick::DrawableStrokeLineJoin::copy() const
1150 return new DrawableStrokeLineJoin(*this);
1153 // Stroke miterlimit
1154 Magick::DrawableMiterLimit::~DrawableMiterLimit ( void )
1157 void Magick::DrawableMiterLimit::operator()
1158 ( MagickCore::DrawingWand * context_ ) const
1160 DrawSetStrokeMiterLimit( context_, _miterlimit );
1162 Magick::DrawableBase* Magick::DrawableMiterLimit::copy() const
1164 return new DrawableMiterLimit(*this);
1168 Magick::DrawableStrokeAntialias::~DrawableStrokeAntialias ( void )
1171 void Magick::DrawableStrokeAntialias::operator()
1172 ( MagickCore::DrawingWand * context_ ) const
1174 DrawSetStrokeAntialias( context_, static_cast<MagickBooleanType>
1175 (_flag ? MagickTrue : MagickFalse) );
1177 Magick::DrawableBase* Magick::DrawableStrokeAntialias::copy() const
1179 return new DrawableStrokeAntialias(*this);
1183 Magick::DrawableStrokeColor::DrawableStrokeColor
1184 ( const Magick::Color &color_ )
1188 Magick::DrawableStrokeColor::DrawableStrokeColor
1189 ( const Magick::DrawableStrokeColor& original_ )
1190 : DrawableBase (original_),
1191 _color(original_._color)
1194 Magick::DrawableStrokeColor::~DrawableStrokeColor ( void )
1197 void Magick::DrawableStrokeColor::operator()
1198 ( MagickCore::DrawingWand * context_ ) const
1200 PixelInfo color = static_cast<PixelInfo>(_color);
1201 PixelWand *pixel_wand=NewPixelWand();
1202 PixelSetPixelColor(pixel_wand,&color);
1203 DrawSetStrokeColor(context_,pixel_wand);
1204 pixel_wand=DestroyPixelWand(pixel_wand);
1206 Magick::DrawableBase* Magick::DrawableStrokeColor::copy() const
1208 return new DrawableStrokeColor(*this);
1212 Magick::DrawableStrokeAlpha::~DrawableStrokeAlpha ( void )
1215 void Magick::DrawableStrokeAlpha::operator()
1216 ( MagickCore::DrawingWand * context_ ) const
1218 DrawSetStrokeAlpha( context_, _alpha );
1220 Magick::DrawableBase* Magick::DrawableStrokeAlpha::copy() const
1222 return new DrawableStrokeAlpha(*this);
1226 Magick::DrawableStrokeWidth::~DrawableStrokeWidth ( void )
1229 void Magick::DrawableStrokeWidth::operator()
1230 ( MagickCore::DrawingWand * context_ ) const
1232 DrawSetStrokeWidth( context_, _width );
1234 Magick::DrawableBase* Magick::DrawableStrokeWidth::copy() const
1236 return new DrawableStrokeWidth(*this);
1239 // Draw text at point
1240 Magick::DrawableText::DrawableText ( const double x_, const double y_,
1241 const std::string &text_ )
1248 Magick::DrawableText::DrawableText ( const double x_, const double y_,
1249 const std::string &text_, const std::string &encoding_)
1253 _encoding(encoding_)
1256 Magick::DrawableText::DrawableText( const Magick::DrawableText& original_ )
1257 : DrawableBase (original_),
1260 _text(original_._text),
1261 _encoding(original_._encoding)
1264 Magick::DrawableText::~DrawableText ( void )
1267 void Magick::DrawableText::operator()
1268 ( MagickCore::DrawingWand * context_ ) const
1270 DrawSetTextEncoding( context_, _encoding.c_str() );
1271 DrawAnnotation( context_, _x, _y,
1272 reinterpret_cast<const unsigned char*>(_text.c_str()) );
1274 Magick::DrawableBase* Magick::DrawableText::copy() const
1276 return new DrawableText(*this);
1280 Magick::DrawableTextAntialias::DrawableTextAntialias ( bool flag_ )
1284 Magick::DrawableTextAntialias::DrawableTextAntialias( const Magick::DrawableTextAntialias &original_ )
1285 : DrawableBase (original_),
1286 _flag(original_._flag)
1289 Magick::DrawableTextAntialias::~DrawableTextAntialias ( void )
1292 void Magick::DrawableTextAntialias::operator()
1293 ( MagickCore::DrawingWand * context_ ) const
1295 DrawSetTextAntialias( context_, static_cast<MagickBooleanType>
1296 (_flag ? MagickTrue : MagickFalse) );
1298 Magick::DrawableBase* Magick::DrawableTextAntialias::copy() const
1300 return new DrawableTextAntialias(*this);
1303 // Decoration (text decoration)
1304 Magick::DrawableTextDecoration::DrawableTextDecoration
1305 ( Magick::DecorationType decoration_ )
1306 : _decoration(decoration_)
1309 Magick::DrawableTextDecoration::DrawableTextDecoration
1310 ( const Magick::DrawableTextDecoration &original_ )
1311 : DrawableBase (original_),
1312 _decoration(original_._decoration)
1315 Magick::DrawableTextDecoration::~DrawableTextDecoration( void )
1318 void Magick::DrawableTextDecoration::operator()
1319 ( MagickCore::DrawingWand * context_ ) const
1321 DrawSetTextDecoration( context_, _decoration );
1323 Magick::DrawableBase* Magick::DrawableTextDecoration::copy() const
1325 return new DrawableTextDecoration(*this);
1328 // DrawableTextDirection
1329 Magick::DrawableTextDirection::DrawableTextDirection(
1330 DirectionType direction_)
1331 : _direction(direction_)
1335 Magick::DrawableTextDirection::~DrawableTextDirection(void)
1339 void Magick::DrawableTextDirection::operator()(
1340 MagickCore::DrawingWand *context_) const
1342 DrawSetTextDirection(context_,_direction);
1345 void Magick::DrawableTextDirection::direction(DirectionType direction_)
1347 _direction=direction_;
1350 Magick::DirectionType Magick::DrawableTextDirection::direction(void) const
1355 Magick::DrawableBase *Magick::DrawableTextDirection::copy() const
1357 return new DrawableTextDirection(*this);
1360 // DrawableTextInterlineSpacing
1361 Magick::DrawableTextInterlineSpacing::DrawableTextInterlineSpacing(
1363 : _spacing(spacing_)
1367 Magick::DrawableTextInterlineSpacing::~DrawableTextInterlineSpacing(void)
1371 void Magick::DrawableTextInterlineSpacing::operator()(
1372 MagickCore::DrawingWand *context_) const
1374 DrawSetTextInterlineSpacing(context_,_spacing);
1377 void Magick::DrawableTextInterlineSpacing::spacing(double spacing_)
1382 double Magick::DrawableTextInterlineSpacing::spacing(void) const
1387 Magick::DrawableBase *Magick::DrawableTextInterlineSpacing::copy() const
1389 return new DrawableTextInterlineSpacing(*this);
1392 // DrawableTextInterwordSpacing
1393 Magick::DrawableTextInterwordSpacing::DrawableTextInterwordSpacing(
1395 : _spacing(spacing_)
1399 Magick::DrawableTextInterwordSpacing::~DrawableTextInterwordSpacing(void)
1403 void Magick::DrawableTextInterwordSpacing::operator()(
1404 MagickCore::DrawingWand *context_) const
1406 DrawSetTextInterwordSpacing(context_,_spacing);
1409 void Magick::DrawableTextInterwordSpacing::spacing(double spacing_)
1414 double Magick::DrawableTextInterwordSpacing::spacing(void) const
1419 Magick::DrawableBase *Magick::DrawableTextInterwordSpacing::copy() const
1421 return new DrawableTextInterwordSpacing(*this);
1424 // DrawableTextKerning
1425 Magick::DrawableTextKerning::DrawableTextKerning(
1427 : _kerning(kerning_)
1431 Magick::DrawableTextKerning::~DrawableTextKerning(void)
1435 void Magick::DrawableTextKerning::operator()(
1436 MagickCore::DrawingWand *context_) const
1438 DrawSetTextKerning(context_,_kerning);
1441 void Magick::DrawableTextKerning::kerning(double kerning_)
1446 double Magick::DrawableTextKerning::kerning(void) const
1451 Magick::DrawableBase *Magick::DrawableTextKerning::copy() const
1453 return new DrawableTextKerning(*this);
1456 // Set text undercolor
1457 Magick::DrawableTextUnderColor::DrawableTextUnderColor
1458 ( const Magick::Color &color_ )
1462 Magick::DrawableTextUnderColor::DrawableTextUnderColor
1463 ( const Magick::DrawableTextUnderColor& original_ )
1464 : DrawableBase (original_),
1465 _color(original_._color)
1468 Magick::DrawableTextUnderColor::~DrawableTextUnderColor ( void )
1471 void Magick::DrawableTextUnderColor::operator()
1472 ( MagickCore::DrawingWand * context_ ) const
1474 PixelInfo color = static_cast<PixelInfo>(_color);
1475 PixelWand *pixel_wand=NewPixelWand();
1476 PixelSetPixelColor(pixel_wand,&color);
1477 DrawSetTextUnderColor(context_,pixel_wand);
1478 pixel_wand=DestroyPixelWand(pixel_wand);
1480 Magick::DrawableBase* Magick::DrawableTextUnderColor::copy() const
1482 return new DrawableTextUnderColor(*this);
1485 // Apply Translation
1486 Magick::DrawableTranslation::~DrawableTranslation ( void )
1489 void Magick::DrawableTranslation::operator()
1490 ( MagickCore::DrawingWand * context_ ) const
1492 DrawTranslate( context_, _x, _y );
1494 Magick::DrawableBase* Magick::DrawableTranslation::copy() const
1496 return new DrawableTranslation(*this);
1499 // Set the size of the viewbox
1500 Magick::DrawableViewbox::~DrawableViewbox ( void )
1503 void Magick::DrawableViewbox::operator()
1504 ( MagickCore::DrawingWand * context_ ) const
1506 DrawSetViewbox( context_, _x1, _y1, _x2, _y2 );
1508 Magick::DrawableBase* Magick::DrawableViewbox::copy() const
1510 return new DrawableViewbox(*this);
1520 MagickPPExport int Magick::operator == ( const Magick::PathArcArgs& /*left_*/,
1521 const Magick::PathArcArgs& /*right_*/ )
1525 MagickPPExport int Magick::operator != ( const Magick::PathArcArgs& /*left_*/,
1526 const Magick::PathArcArgs& /*right_*/ )
1530 MagickPPExport int Magick::operator > ( const Magick::PathArcArgs& /*left_*/,
1531 const Magick::PathArcArgs& /*right_*/ )
1535 MagickPPExport int Magick::operator < ( const Magick::PathArcArgs& /*left_*/,
1536 const Magick::PathArcArgs& /*right_*/ )
1540 MagickPPExport int Magick::operator >= ( const Magick::PathArcArgs& left_,
1541 const Magick::PathArcArgs& right_ )
1543 return ( ( left_ > right_ ) || ( left_ == right_ ) );
1545 MagickPPExport int Magick::operator <= ( const Magick::PathArcArgs& left_,
1546 const Magick::PathArcArgs& right_ )
1548 return ( ( left_ < right_ ) || ( left_ == right_ ) );
1550 // Default constructor
1551 Magick::PathArcArgs::PathArcArgs( void )
1555 _largeArcFlag(false),
1561 // Normal constructor
1562 Magick::PathArcArgs::PathArcArgs( double radiusX_, double radiusY_,
1563 double xAxisRotation_, bool largeArcFlag_,
1564 bool sweepFlag_, double x_, double y_ )
1565 : _radiusX(radiusX_),
1567 _xAxisRotation(xAxisRotation_),
1568 _largeArcFlag(largeArcFlag_),
1569 _sweepFlag(sweepFlag_),
1575 Magick::PathArcArgs::PathArcArgs( const Magick::PathArcArgs &original_ )
1576 : _radiusX(original_._radiusX),
1577 _radiusY(original_._radiusY),
1578 _xAxisRotation(original_._xAxisRotation),
1579 _largeArcFlag(original_._largeArcFlag),
1580 _sweepFlag(original_._sweepFlag),
1586 Magick::PathArcArgs::~PathArcArgs ( void )
1591 Magick::PathArcAbs::PathArcAbs ( const Magick::PathArcArgs &coordinates_ )
1592 : _coordinates(1,coordinates_)
1595 Magick::PathArcAbs::PathArcAbs ( const PathArcArgsList &coordinates_ )
1596 : _coordinates(coordinates_)
1599 Magick::PathArcAbs::PathArcAbs ( const Magick::PathArcAbs& original_ )
1600 : VPathBase (original_),
1601 _coordinates(original_._coordinates)
1604 Magick::PathArcAbs::~PathArcAbs ( void )
1607 void Magick::PathArcAbs::operator()( MagickCore::DrawingWand * context_ ) const
1609 for( PathArcArgsList::const_iterator p = _coordinates.begin();
1610 p != _coordinates.end(); p++ )
1612 DrawPathEllipticArcAbsolute( context_, p->radiusX(), p->radiusY(),
1613 p->xAxisRotation(), (MagickBooleanType) p->largeArcFlag(),
1614 (MagickBooleanType) p->sweepFlag(), p->x(), p->y() );
1617 Magick::VPathBase* Magick::PathArcAbs::copy() const
1619 return new PathArcAbs(*this);
1622 Magick::PathArcRel::PathArcRel ( const Magick::PathArcArgs &coordinates_ )
1623 : _coordinates(1,coordinates_)
1626 Magick::PathArcRel::PathArcRel ( const PathArcArgsList &coordinates_ )
1627 : _coordinates(coordinates_)
1630 Magick::PathArcRel::PathArcRel ( const Magick::PathArcRel& original_ )
1631 : VPathBase (original_),
1632 _coordinates(original_._coordinates)
1635 Magick::PathArcRel::~PathArcRel ( void )
1638 void Magick::PathArcRel::operator()( MagickCore::DrawingWand * context_ ) const
1640 for( PathArcArgsList::const_iterator p = _coordinates.begin();
1641 p != _coordinates.end(); p++ )
1643 DrawPathEllipticArcRelative( context_, p->radiusX(), p->radiusY(),
1644 p->xAxisRotation(), (MagickBooleanType) p->largeArcFlag(),
1645 (MagickBooleanType) p->sweepFlag(), p->x(), p->y() );
1648 Magick::VPathBase* Magick::PathArcRel::copy() const
1650 return new PathArcRel(*this);
1656 Magick::PathClosePath::~PathClosePath ( void )
1659 void Magick::PathClosePath::operator()( MagickCore::DrawingWand * context_ ) const
1661 DrawPathClose( context_ );
1663 Magick::VPathBase* Magick::PathClosePath::copy() const
1665 return new PathClosePath(*this);
1669 // Path Curveto (Cubic Bezier)
1671 MagickPPExport int Magick::operator == ( const Magick::PathCurvetoArgs& /*left_*/,
1672 const Magick::PathCurvetoArgs& /*right_*/ )
1676 MagickPPExport int Magick::operator != ( const Magick::PathCurvetoArgs& /*left_*/,
1677 const Magick::PathCurvetoArgs& /*right_*/ )
1681 MagickPPExport int Magick::operator > ( const Magick::PathCurvetoArgs& /*left_*/,
1682 const Magick::PathCurvetoArgs& /*right_*/ )
1686 MagickPPExport int Magick::operator < ( const Magick::PathCurvetoArgs& /*left_*/,
1687 const Magick::PathCurvetoArgs& /*right_*/ )
1691 MagickPPExport int Magick::operator >= ( const Magick::PathCurvetoArgs& left_,
1692 const Magick::PathCurvetoArgs& right_ )
1694 return ( ( left_ > right_ ) || ( left_ == right_ ) );
1696 MagickPPExport int Magick::operator <= ( const Magick::PathCurvetoArgs& left_,
1697 const Magick::PathCurvetoArgs& right_ )
1699 return ( ( left_ < right_ ) || ( left_ == right_ ) );
1701 // Default constructor
1702 Magick::PathCurvetoArgs::PathCurvetoArgs( void )
1711 // Normal constructor
1712 Magick::PathCurvetoArgs::PathCurvetoArgs( double x1_, double y1_,
1713 double x2_, double y2_,
1714 double x_, double y_ )
1724 Magick::PathCurvetoArgs::PathCurvetoArgs( const PathCurvetoArgs &original_ )
1725 : _x1(original_._x1),
1734 Magick::PathCurvetoArgs::~PathCurvetoArgs ( void )
1738 Magick::PathCurvetoAbs::PathCurvetoAbs ( const Magick::PathCurvetoArgs &args_ )
1742 Magick::PathCurvetoAbs::PathCurvetoAbs ( const PathCurveToArgsList &args_ )
1746 Magick::PathCurvetoAbs::PathCurvetoAbs
1747 ( const Magick::PathCurvetoAbs& original_ )
1748 : VPathBase (original_),
1749 _args(original_._args)
1752 Magick::PathCurvetoAbs::~PathCurvetoAbs ( void )
1755 void Magick::PathCurvetoAbs::operator()
1756 ( MagickCore::DrawingWand * context_ ) const
1758 for( PathCurveToArgsList::const_iterator p = _args.begin();
1759 p != _args.end(); p++ )
1761 DrawPathCurveToAbsolute( context_, p->x1(), p->y1(), p->x2(), p->y2(),
1765 Magick::VPathBase* Magick::PathCurvetoAbs::copy() const
1767 return new PathCurvetoAbs(*this);
1769 Magick::PathCurvetoRel::PathCurvetoRel ( const Magick::PathCurvetoArgs &args_ )
1773 Magick::PathCurvetoRel::PathCurvetoRel ( const PathCurveToArgsList &args_ )
1777 Magick::PathCurvetoRel::PathCurvetoRel
1778 ( const Magick::PathCurvetoRel& original_ )
1779 : VPathBase (original_),
1780 _args(original_._args)
1783 Magick::PathCurvetoRel::~PathCurvetoRel ( void )
1786 void Magick::PathCurvetoRel::operator()
1787 ( MagickCore::DrawingWand * context_ ) const
1789 for( PathCurveToArgsList::const_iterator p = _args.begin();
1790 p != _args.end(); p++ )
1792 DrawPathCurveToRelative( context_, p->x1(), p->y1(), p->x2(), p->y2(),
1796 Magick::VPathBase* Magick::PathCurvetoRel::copy() const
1798 return new PathCurvetoRel(*this);
1800 Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs
1801 ( const Magick::Coordinate &coordinates_ )
1802 : _coordinates(1,coordinates_)
1805 Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs
1806 ( const CoordinateList &coordinates_ )
1807 : _coordinates(coordinates_)
1810 Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs
1811 ( const Magick::PathSmoothCurvetoAbs& original_ )
1812 : VPathBase (original_),
1813 _coordinates(original_._coordinates)
1816 Magick::PathSmoothCurvetoAbs::~PathSmoothCurvetoAbs ( void )
1819 void Magick::PathSmoothCurvetoAbs::operator()
1820 ( MagickCore::DrawingWand * context_ ) const
1822 for( CoordinateList::const_iterator p = _coordinates.begin();
1823 p != _coordinates.end(); p++ )
1828 if(p != _coordinates.end() )
1829 DrawPathCurveToSmoothAbsolute( context_, x2, y2, p->x(), p->y() );
1832 Magick::VPathBase* Magick::PathSmoothCurvetoAbs::copy() const
1834 return new PathSmoothCurvetoAbs(*this);
1836 Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel
1837 ( const Magick::Coordinate &coordinates_ )
1838 : _coordinates(1,coordinates_)
1841 Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel
1842 ( const CoordinateList &coordinates_ )
1843 : _coordinates(coordinates_)
1846 Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel
1847 ( const Magick::PathSmoothCurvetoRel& original_ )
1848 : VPathBase (original_),
1849 _coordinates(original_._coordinates)
1852 Magick::PathSmoothCurvetoRel::~PathSmoothCurvetoRel ( void )
1855 void Magick::PathSmoothCurvetoRel::operator()
1856 ( MagickCore::DrawingWand * context_ ) const
1858 for( CoordinateList::const_iterator p = _coordinates.begin();
1859 p != _coordinates.end(); p++ )
1864 if(p != _coordinates.end() )
1865 DrawPathCurveToSmoothRelative( context_, x2, y2, p->x(), p->y() );
1868 Magick::VPathBase* Magick::PathSmoothCurvetoRel::copy() const
1870 return new PathSmoothCurvetoRel(*this);
1874 // Quadratic Curveto (Quadratic Bezier)
1876 MagickPPExport int Magick::operator ==
1877 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
1878 const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
1882 MagickPPExport int Magick::operator !=
1883 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
1884 const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
1888 MagickPPExport int Magick::operator >
1889 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
1890 const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
1894 MagickPPExport int Magick::operator <
1895 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
1896 const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
1900 MagickPPExport int Magick::operator >=
1901 ( const Magick::PathQuadraticCurvetoArgs& left_,
1902 const Magick::PathQuadraticCurvetoArgs& right_ )
1904 return ( ( left_ > right_ ) || ( left_ == right_ ) );
1906 MagickPPExport int Magick::operator <=
1907 ( const Magick::PathQuadraticCurvetoArgs& left_,
1908 const Magick::PathQuadraticCurvetoArgs& right_ )
1910 return ( ( left_ < right_ ) || ( left_ == right_ ) );
1912 // Default Constructor
1913 Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( void )
1920 // Normal Constructor
1921 Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( double x1_,
1932 Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( const PathQuadraticCurvetoArgs &original_ )
1933 : _x1(original_._x1),
1940 Magick::PathQuadraticCurvetoArgs::~PathQuadraticCurvetoArgs ( void )
1944 Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs
1945 ( const Magick::PathQuadraticCurvetoArgs &args_ )
1949 Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs
1950 ( const PathQuadraticCurvetoArgsList &args_ )
1954 Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs
1955 ( const Magick::PathQuadraticCurvetoAbs& original_ )
1956 : VPathBase (original_),
1957 _args(original_._args)
1960 Magick::PathQuadraticCurvetoAbs::~PathQuadraticCurvetoAbs ( void )
1963 void Magick::PathQuadraticCurvetoAbs::operator()
1964 ( MagickCore::DrawingWand * context_ ) const
1966 for( PathQuadraticCurvetoArgsList::const_iterator p = _args.begin();
1967 p != _args.end(); p++ )
1969 DrawPathCurveToQuadraticBezierAbsolute( context_, p->x1(), p->y1(),
1973 Magick::VPathBase* Magick::PathQuadraticCurvetoAbs::copy() const
1975 return new PathQuadraticCurvetoAbs(*this);
1977 Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel
1978 ( const Magick::PathQuadraticCurvetoArgs &args_ )
1982 Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel
1983 ( const PathQuadraticCurvetoArgsList &args_ )
1987 Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel
1988 ( const Magick::PathQuadraticCurvetoRel& original_ )
1989 : VPathBase (original_),
1990 _args(original_._args)
1993 Magick::PathQuadraticCurvetoRel::~PathQuadraticCurvetoRel ( void )
1996 void Magick::PathQuadraticCurvetoRel::operator()
1997 ( MagickCore::DrawingWand * context_ ) const
1999 for( PathQuadraticCurvetoArgsList::const_iterator p = _args.begin();
2000 p != _args.end(); p++ )
2002 DrawPathCurveToQuadraticBezierRelative( context_, p->x1(), p->y1(),
2006 Magick::VPathBase* Magick::PathQuadraticCurvetoRel::copy() const
2008 return new PathQuadraticCurvetoRel(*this);
2010 Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs
2011 ( const Magick::Coordinate &coordinate_ )
2012 : _coordinates(1,coordinate_)
2015 Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs
2016 ( const CoordinateList &coordinates_ )
2017 : _coordinates(coordinates_)
2020 Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs
2021 ( const Magick::PathSmoothQuadraticCurvetoAbs& original_ )
2022 : VPathBase (original_),
2023 _coordinates(original_._coordinates)
2026 Magick::PathSmoothQuadraticCurvetoAbs::~PathSmoothQuadraticCurvetoAbs ( void )
2029 void Magick::PathSmoothQuadraticCurvetoAbs::operator()
2030 ( MagickCore::DrawingWand * context_ ) const
2032 for( CoordinateList::const_iterator p = _coordinates.begin();
2033 p != _coordinates.end(); p++ )
2035 DrawPathCurveToQuadraticBezierSmoothAbsolute( context_, p->x(), p->y() );
2038 Magick::VPathBase* Magick::PathSmoothQuadraticCurvetoAbs::copy() const
2040 return new PathSmoothQuadraticCurvetoAbs(*this);
2042 Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel
2043 ( const Magick::Coordinate &coordinate_ )
2044 : _coordinates(1,coordinate_)
2047 Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel
2048 ( const CoordinateList &coordinates_ )
2049 : _coordinates(coordinates_)
2052 Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel
2053 ( const PathSmoothQuadraticCurvetoRel& original_ )
2054 : VPathBase (original_),
2055 _coordinates(original_._coordinates)
2058 Magick::PathSmoothQuadraticCurvetoRel::~PathSmoothQuadraticCurvetoRel ( void )
2061 void Magick::PathSmoothQuadraticCurvetoRel::operator()
2062 ( MagickCore::DrawingWand * context_ ) const
2064 for( CoordinateList::const_iterator p = _coordinates.begin();
2065 p != _coordinates.end(); p++ )
2067 DrawPathCurveToQuadraticBezierSmoothRelative( context_, p->x(), p->y() );
2070 Magick::VPathBase* Magick::PathSmoothQuadraticCurvetoRel::copy() const
2072 return new PathSmoothQuadraticCurvetoRel(*this);
2078 Magick::PathLinetoAbs::PathLinetoAbs ( const Magick::Coordinate& coordinate_ )
2079 : _coordinates(1,coordinate_)
2082 Magick::PathLinetoAbs::PathLinetoAbs ( const CoordinateList &coordinates_ )
2083 : _coordinates(coordinates_)
2086 Magick::PathLinetoAbs::PathLinetoAbs ( const Magick::PathLinetoAbs& original_ )
2087 : VPathBase (original_),
2088 _coordinates(original_._coordinates)
2091 Magick::PathLinetoAbs::~PathLinetoAbs ( void )
2094 void Magick::PathLinetoAbs::operator()( MagickCore::DrawingWand * context_ ) const
2096 for( CoordinateList::const_iterator p = _coordinates.begin();
2097 p != _coordinates.end(); p++ )
2099 DrawPathLineToAbsolute( context_, p->x(), p->y() );
2102 Magick::VPathBase* Magick::PathLinetoAbs::copy() const
2104 return new PathLinetoAbs(*this);
2106 Magick::PathLinetoRel::PathLinetoRel ( const Magick::Coordinate& coordinate_ )
2107 : _coordinates(1,coordinate_)
2110 Magick::PathLinetoRel::PathLinetoRel ( const CoordinateList &coordinates_ )
2111 : _coordinates(coordinates_)
2114 Magick::PathLinetoRel::PathLinetoRel ( const Magick::PathLinetoRel& original_ )
2115 : VPathBase (original_),
2116 _coordinates(original_._coordinates)
2119 Magick::PathLinetoRel::~PathLinetoRel ( void )
2122 void Magick::PathLinetoRel::operator()( MagickCore::DrawingWand * context_ ) const
2124 for( CoordinateList::const_iterator p = _coordinates.begin();
2125 p != _coordinates.end(); p++ )
2127 DrawPathLineToRelative( context_, p->x(), p->y() );
2130 Magick::VPathBase* Magick::PathLinetoRel::copy() const
2132 return new PathLinetoRel(*this);
2136 // Path Horizontal Lineto
2139 Magick::PathLinetoHorizontalAbs::~PathLinetoHorizontalAbs ( void )
2142 void Magick::PathLinetoHorizontalAbs::operator()
2143 ( MagickCore::DrawingWand * context_ ) const
2145 DrawPathLineToHorizontalAbsolute( context_, _x );
2147 Magick::VPathBase* Magick::PathLinetoHorizontalAbs::copy() const
2149 return new PathLinetoHorizontalAbs(*this);
2151 Magick::PathLinetoHorizontalRel::~PathLinetoHorizontalRel ( void )
2154 void Magick::PathLinetoHorizontalRel::operator()
2155 ( MagickCore::DrawingWand * context_ ) const
2157 DrawPathLineToHorizontalRelative( context_, _x );
2159 Magick::VPathBase* Magick::PathLinetoHorizontalRel::copy() const
2161 return new PathLinetoHorizontalRel(*this);
2165 // Path Vertical Lineto
2167 Magick::PathLinetoVerticalAbs::~PathLinetoVerticalAbs ( void )
2170 void Magick::PathLinetoVerticalAbs::operator()
2171 ( MagickCore::DrawingWand * context_ ) const
2173 DrawPathLineToVerticalAbsolute( context_, _y );
2175 Magick::VPathBase* Magick::PathLinetoVerticalAbs::copy() const
2177 return new PathLinetoVerticalAbs(*this);
2179 Magick::PathLinetoVerticalRel::~PathLinetoVerticalRel ( void )
2182 void Magick::PathLinetoVerticalRel::operator()
2183 ( MagickCore::DrawingWand * context_ ) const
2185 DrawPathLineToVerticalRelative( context_, _y );
2187 Magick::VPathBase* Magick::PathLinetoVerticalRel::copy() const
2189 return new PathLinetoVerticalRel(*this);
2196 Magick::PathMovetoAbs::PathMovetoAbs ( const Magick::Coordinate &coordinate_ )
2197 : _coordinates(1,coordinate_)
2200 Magick::PathMovetoAbs::PathMovetoAbs ( const CoordinateList &coordinates_ )
2201 : _coordinates(coordinates_)
2204 Magick::PathMovetoAbs::PathMovetoAbs ( const Magick::PathMovetoAbs& original_ )
2205 : VPathBase (original_),
2206 _coordinates(original_._coordinates)
2209 Magick::PathMovetoAbs::~PathMovetoAbs ( void )
2212 void Magick::PathMovetoAbs::operator()( MagickCore::DrawingWand * context_ ) const
2214 for( CoordinateList::const_iterator p = _coordinates.begin();
2215 p != _coordinates.end(); p++ )
2217 DrawPathMoveToAbsolute( context_, p->x(), p->y() );
2220 Magick::VPathBase* Magick::PathMovetoAbs::copy() const
2222 return new PathMovetoAbs(*this);
2224 Magick::PathMovetoRel::PathMovetoRel ( const Magick::Coordinate &coordinate_ )
2225 : _coordinates(1,coordinate_)
2228 Magick::PathMovetoRel::PathMovetoRel ( const CoordinateList &coordinates_ )
2229 : _coordinates(coordinates_)
2232 Magick::PathMovetoRel::PathMovetoRel ( const Magick::PathMovetoRel& original_ )
2233 : VPathBase (original_),
2234 _coordinates(original_._coordinates)
2237 Magick::PathMovetoRel::~PathMovetoRel ( void )
2240 void Magick::PathMovetoRel::operator()( MagickCore::DrawingWand * context_ ) const
2242 for( CoordinateList::const_iterator p = _coordinates.begin();
2243 p != _coordinates.end(); p++ )
2245 DrawPathMoveToRelative( context_, p->x(), p->y() );
2248 Magick::VPathBase* Magick::PathMovetoRel::copy() const
2250 return new PathMovetoRel(*this);
2253 #if defined(EXPLICIT_TEMPLATE_INSTANTIATION)
2254 // template class std::vector<Magick::Coordinate>;
2255 // template class std::vector<const Magick::Drawable>;
2256 // template class std::vector<const Magick::PathArcArgs>;
2257 // template class std::vector<const Magick::PathCurvetoArgs>;
2258 // template class std::vector<const Magick::PathQuadraticCurvetoArgs>;
2259 // template class std::vector<const Magick::VPath>;