// This may look like C code, but it is really -*- C++ -*- // // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003 // Copyright Dirk Lemstra 2014-2017 // // Implementation of Drawable (Graphic objects) // #define MAGICKCORE_IMPLEMENTATION 1 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1 #define MAGICK_DRAWABLE_IMPLEMENTATION #include "Magick++/Include.h" #include #include #include "Magick++/Drawable.h" #include "Magick++/Image.h" using namespace std; MagickPPExport int Magick::operator == (const Magick::Coordinate& left_, const Magick::Coordinate& right_) { return((left_.x() == right_.x()) && (left_.y() == right_.y())); } MagickPPExport int Magick::operator != (const Magick::Coordinate& left_, const Magick::Coordinate& right_) { return(!(left_ == right_)); } MagickPPExport int Magick::operator > (const Magick::Coordinate& left_, const Magick::Coordinate& right_) { return (!(left_ < right_) && (left_ != right_)); } MagickPPExport int Magick::operator < (const Magick::Coordinate& left_, const Magick::Coordinate& right_) { // Based on distance from origin return((sqrt(left_.x()*left_.x() + left_.y()*left_.y())) < (sqrt(right_.x()*right_.x() + right_.y()*right_.y()))); } MagickPPExport int Magick::operator >= (const Magick::Coordinate& left_, const Magick::Coordinate& right_) { return((left_ > right_) || (left_ == right_)); } MagickPPExport int Magick::operator <= (const Magick::Coordinate& left_, const Magick::Coordinate& right_) { return((left_ < right_) || (left_ == right_)); } /* DrawableBase */ Magick::DrawableBase::DrawableBase() { } Magick::DrawableBase::~DrawableBase(void) { } void Magick::DrawableBase::operator()(MagickCore::DrawingWand * context_) const { (void) context_; } Magick::DrawableBase* Magick::DrawableBase::copy() const { return new DrawableBase(*this); } /* Drawable */ Magick::Drawable::Drawable(void) : dp((Magick::DrawableBase *) NULL) { } Magick::Drawable::Drawable(const Magick::DrawableBase& original_) : dp(original_.copy()) { } Magick::Drawable::~Drawable(void) { delete dp; dp=(Magick::DrawableBase *) NULL; } Magick::Drawable::Drawable(const Magick::Drawable& original_) : dp((original_.dp != (Magick::DrawableBase *) NULL ? original_.dp->copy() : (Magick::DrawableBase *) NULL)) { } Magick::Drawable& Magick::Drawable::operator= ( const Magick::Drawable& original_) { DrawableBase *temp_dp; if (this != &original_) { temp_dp=(original_.dp != (Magick::DrawableBase *) NULL ? original_.dp->copy() : (Magick::DrawableBase *) NULL); delete dp; dp=temp_dp; } return(*this); } void Magick::Drawable::operator()(MagickCore::DrawingWand * context_) const { if (dp != (Magick::DrawableBase *) NULL) dp->operator()(context_); } /*virtual*/ Magick::VPathBase::~VPathBase ( void ) { } // Constructor Magick::VPath::VPath ( void ) : dp(0) { } // Construct from VPathBase Magick::VPath::VPath ( const Magick::VPathBase& original_ ) : dp(original_.copy()) { } // Destructor /* virtual */ Magick::VPath::~VPath ( void ) { delete dp; dp = 0; } // Copy constructor Magick::VPath::VPath ( const Magick::VPath& original_ ) : dp(original_.dp? original_.dp->copy(): 0) { } // Assignment operator Magick::VPath& Magick::VPath::operator= (const Magick::VPath& original_ ) { if (this != &original_) { VPathBase* temp_dp = (original_.dp ? original_.dp->copy() : 0); delete dp; dp = temp_dp; } return *this; } // Operator to invoke contained object void Magick::VPath::operator()( MagickCore::DrawingWand * context_ ) const { if(dp) dp->operator()( context_ ); } // // Drawable Objects // // Affine (scaling, rotation, and translation) Magick::DrawableAffine::DrawableAffine( double sx_, double sy_, double rx_, double ry_, double tx_, double ty_ ) { _affine.sx = sx_; _affine.rx = rx_; _affine.ry = ry_; _affine.sy = sy_; _affine.tx = tx_; _affine.ty = ty_; } Magick::DrawableAffine::DrawableAffine( void ) { GetAffineMatrix(&_affine); } Magick::DrawableAffine::~DrawableAffine( void ) { } void Magick::DrawableAffine::operator()( MagickCore::DrawingWand * context_ ) const { DrawAffine( context_, &_affine ); } Magick::DrawableBase* Magick::DrawableAffine::copy() const { return new DrawableAffine(*this); } Magick::DrawableAlpha::~DrawableAlpha(void) { } void Magick::DrawableAlpha::operator()(MagickCore::DrawingWand * context_) const { DrawAlpha(context_,_x,_y,_paintMethod); } Magick::DrawableBase* Magick::DrawableAlpha::copy() const { return new DrawableAlpha(*this); } // Arc Magick::DrawableArc::~DrawableArc( void ) { } void Magick::DrawableArc::operator()( MagickCore::DrawingWand * context_ ) const { DrawArc( context_, _startX, _startY, _endX, _endY, _startDegrees, _endDegrees ); } Magick::DrawableBase* Magick::DrawableArc::copy() const { return new DrawableArc(*this); } // // Bezier curve // // Construct from coordinates (Coordinate list must contain at least three members) Magick::DrawableBezier::DrawableBezier ( const CoordinateList &coordinates_ ) : _coordinates(coordinates_) { } // Copy constructor Magick::DrawableBezier::DrawableBezier( const Magick::DrawableBezier& original_ ) : DrawableBase (original_), _coordinates(original_._coordinates) { } // Destructor Magick::DrawableBezier::~DrawableBezier( void ) { } void Magick::DrawableBezier::operator()( MagickCore::DrawingWand * context_ ) const { size_t num_coords = (size_t) _coordinates.size(); PointInfo *coordinates = new PointInfo[num_coords]; PointInfo *q = coordinates; CoordinateList::const_iterator p = _coordinates.begin(); while( p != _coordinates.end() ) { q->x = p->x(); q->y = p->y(); q++; p++; } DrawBezier( context_, num_coords, coordinates ); delete [] coordinates; } Magick::DrawableBase* Magick::DrawableBezier::copy() const { return new DrawableBezier(*this); } /* DrawableBorderColor */ Magick::DrawableBorderColor::DrawableBorderColor(const Magick::Color &color_) : _color(color_) { } Magick::DrawableBorderColor::DrawableBorderColor (const Magick::DrawableBorderColor &original_) : DrawableBase(original_), _color(original_._color) { } Magick::DrawableBorderColor::~DrawableBorderColor(void) { } void Magick::DrawableBorderColor::operator()( MagickCore::DrawingWand *context_) const { PixelInfo color; PixelWand *pixel_wand; color=static_cast(_color); pixel_wand=NewPixelWand(); PixelSetPixelColor(pixel_wand,&color); DrawSetBorderColor(context_,pixel_wand); pixel_wand=DestroyPixelWand(pixel_wand); } void Magick::DrawableBorderColor::color(const Color &color_) { _color=color_; } Magick::Color Magick::DrawableBorderColor::color(void) const { return(_color); } Magick::DrawableBase* Magick::DrawableBorderColor::copy() const { return(new DrawableBorderColor(*this)); } /* DrawableClipRule */ Magick::DrawableClipRule::DrawableClipRule(const FillRule fillRule_) { _fillRule=fillRule_; } Magick::DrawableClipRule::~DrawableClipRule(void) { } void Magick::DrawableClipRule::operator()( MagickCore::DrawingWand * context_) const { DrawSetClipRule(context_,_fillRule); } void Magick::DrawableClipRule::fillRule(const FillRule fillRule_) { _fillRule=fillRule_; } Magick::FillRule Magick::DrawableClipRule::fillRule(void) const { return(_fillRule); } Magick::DrawableBase* Magick::DrawableClipRule::copy() const { return(new DrawableClipRule(*this)); } /* DrawableClipUnits */ Magick::DrawableClipUnits::DrawableClipUnits(const ClipPathUnits units_) { _units = units_; } Magick::DrawableClipUnits::~DrawableClipUnits(void) { } void Magick::DrawableClipUnits::operator()( MagickCore::DrawingWand * context_) const { DrawSetClipUnits(context_, _units); } void Magick::DrawableClipUnits::units(const ClipPathUnits units_) { _units = units_; } Magick::ClipPathUnits Magick::DrawableClipUnits::units(void) const { return(_units); } Magick::DrawableBase* Magick::DrawableClipUnits::copy() const { return(new DrawableClipUnits(*this)); } // //Clip Path // // Pop (terminate) Clip path definition Magick::DrawablePopClipPath::~DrawablePopClipPath ( void ) { } void Magick::DrawablePopClipPath::operator() ( MagickCore::DrawingWand * context_ ) const { DrawPopClipPath( context_ ); DrawPopDefs(context_); } Magick::DrawableBase* Magick::DrawablePopClipPath::copy() const { return new DrawablePopClipPath(*this); } // Push clip path definition Magick::DrawablePushClipPath::DrawablePushClipPath( const std::string &id_) : _id(id_.c_str()) //multithread safe const char* { } Magick::DrawablePushClipPath::DrawablePushClipPath ( const Magick::DrawablePushClipPath& original_ ) //multithread safe const char* : DrawableBase (original_), _id(original_._id.c_str()) { } Magick::DrawablePushClipPath::~DrawablePushClipPath( void ) { } void Magick::DrawablePushClipPath::operator() ( MagickCore::DrawingWand * context_ ) const { DrawPushDefs(context_); DrawPushClipPath( context_, _id.c_str()); } Magick::DrawableBase* Magick::DrawablePushClipPath::copy() const { return new DrawablePushClipPath(*this); } // // ClipPath // Magick::DrawableClipPath::DrawableClipPath( const std::string &id_ ) :_id(id_.c_str()) { } Magick::DrawableClipPath::DrawableClipPath ( const Magick::DrawableClipPath& original_ ) : DrawableBase (original_), _id(original_._id.c_str()) { } Magick::DrawableClipPath::~DrawableClipPath( void ) { } void Magick::DrawableClipPath::operator()( MagickCore::DrawingWand * context_ ) const { (void) DrawSetClipPath( context_, _id.c_str()); } Magick::DrawableBase* Magick::DrawableClipPath::copy() const { return new DrawableClipPath(*this); } // Circle Magick::DrawableCircle::~DrawableCircle ( void ) { } void Magick::DrawableCircle::operator()( MagickCore::DrawingWand * context_ ) const { DrawCircle( context_, _originX, _originY, _perimX, _perimY ); } Magick::DrawableBase* Magick::DrawableCircle::copy() const { return new DrawableCircle(*this); } // Colorize at point using PaintMethod Magick::DrawableColor::~DrawableColor( void ) { } void Magick::DrawableColor::operator()( MagickCore::DrawingWand * context_ ) const { DrawColor( context_, _x, _y, _paintMethod ); } Magick::DrawableBase* Magick::DrawableColor::copy() const { return new DrawableColor(*this); } // Draw image at point Magick::DrawableCompositeImage::DrawableCompositeImage ( double x_, double y_, double width_, double height_, const std::string &filename_, Magick::CompositeOperator composition_ ) : _composition(composition_), _x(x_), _y(y_), _width(width_), _height(height_), _image(new Image(filename_)) { } Magick::DrawableCompositeImage::DrawableCompositeImage ( double x_, double y_, double width_, double height_, const Magick::Image &image_, Magick::CompositeOperator composition_ ) : _composition(composition_), _x(x_), _y(y_), _width(width_), _height(height_), _image(new Image(image_)) { } Magick::DrawableCompositeImage::DrawableCompositeImage ( double x_, double y_, double width_, double height_, const std::string &filename_ ) :_composition(CopyCompositeOp), _x(x_), _y(y_), _width(width_), _height(height_), _image(new Image(filename_)) { } Magick::DrawableCompositeImage::DrawableCompositeImage ( double x_, double y_, double width_, double height_, const Magick::Image &image_ ) :_composition(CopyCompositeOp), _x(x_), _y(y_), _width(width_), _height(height_), _image(new Image(image_)) { } Magick::DrawableCompositeImage::DrawableCompositeImage ( double x_, double y_, const std::string &filename_ ) : _composition(CopyCompositeOp), _x(x_), _y(y_), _width(0), _height(0), _image(new Image(filename_)) { _width=_image->columns(); _height=_image->rows(); } Magick::DrawableCompositeImage::DrawableCompositeImage ( double x_, double y_, const Magick::Image &image_ ) : _composition(CopyCompositeOp), _x(x_), _y(y_), _width(0), _height(0), _image(new Image(image_)) { _width=_image->columns(); _height=_image->rows(); } // Copy constructor Magick::DrawableCompositeImage::DrawableCompositeImage ( const Magick::DrawableCompositeImage& original_ ) : Magick::DrawableBase(original_), _composition(original_._composition), _x(original_._x), _y(original_._y), _width(original_._width), _height(original_._height), _image(new Image(*original_._image)) { } Magick::DrawableCompositeImage::~DrawableCompositeImage( void ) { delete _image; } // Assignment operator Magick::DrawableCompositeImage& Magick::DrawableCompositeImage::operator= (const Magick::DrawableCompositeImage& original_ ) { // If not being set to ourself if ( this != &original_ ) { _composition = original_._composition; _x = original_._x; _y = original_._y; _width = original_._width; _height = original_._height; Image* temp_image = new Image(*original_._image); delete _image; _image = temp_image; } return *this; } void Magick::DrawableCompositeImage::filename( const std::string &filename_ ) { Image* temp_image = new Image(filename_); delete _image; _image = temp_image; } std::string Magick::DrawableCompositeImage::filename( void ) const { return _image->fileName(); } void Magick::DrawableCompositeImage::image( const Magick::Image &image_ ) { Image* temp_image = new Image(image_); delete _image; _image = temp_image; } Magick::Image Magick::DrawableCompositeImage::image( void ) const { return *_image; } // Specify image format used to output Base64 inlined image data. void Magick::DrawableCompositeImage::magick( std::string magick_ ) { _image->magick( magick_ ); } std::string Magick::DrawableCompositeImage::magick( void ) { return _image->magick(); } void Magick::DrawableCompositeImage::operator() ( MagickCore::DrawingWand * context_ ) const { MagickWand *magick_wand; magick_wand=NewMagickWandFromImage(_image->constImage()); (void) DrawComposite( context_, _composition, _x, _y, _width, _height, magick_wand ); magick_wand=DestroyMagickWand(magick_wand); } Magick::DrawableBase* Magick::DrawableCompositeImage::copy() const { return new DrawableCompositeImage(*this); } Magick::DrawableDensity::DrawableDensity(const Point &density_) : _density(density_) { } Magick::DrawableDensity::DrawableDensity(const std::string &density_) : _density(density_) { } Magick::DrawableDensity::~DrawableDensity(void) { } void Magick::DrawableDensity::operator()( MagickCore::DrawingWand *context_) const { DrawSetDensity(context_,_density.c_str()); } Magick::DrawableBase* Magick::DrawableDensity::copy() const { return(new DrawableDensity(*this)); } // Ellipse Magick::DrawableEllipse::~DrawableEllipse( void ) { } void Magick::DrawableEllipse::operator() ( MagickCore::DrawingWand * context_ ) const { DrawEllipse( context_, _originX, _originY, _radiusX, _radiusY, _arcStart, _arcEnd ); } Magick::DrawableBase* Magick::DrawableEllipse::copy() const { return new DrawableEllipse(*this); } // Specify drawing fill color Magick::DrawableFillColor::DrawableFillColor( const Magick::Color &color_ ) : _color(color_) { } Magick::DrawableFillColor::DrawableFillColor ( const Magick::DrawableFillColor& original_ ) : DrawableBase (original_), _color(original_._color) { } Magick::DrawableFillColor::~DrawableFillColor( void ) { } void Magick::DrawableFillColor::operator() ( MagickCore::DrawingWand * context_ ) const { PixelInfo color = static_cast(_color); PixelWand *pixel_wand=NewPixelWand(); PixelSetPixelColor(pixel_wand,&color); DrawSetFillColor(context_,pixel_wand); pixel_wand=DestroyPixelWand(pixel_wand); } Magick::DrawableBase* Magick::DrawableFillColor::copy() const { return new DrawableFillColor(*this); } /* DrawableFillPatternUrl */ Magick::DrawableFillPatternUrl::DrawableFillPatternUrl(const std::string &url_) : _url(url_) { } Magick::DrawableFillPatternUrl::DrawableFillPatternUrl( const Magick::DrawableFillPatternUrl& original_) : DrawableBase(original_), _url(original_._url) { } Magick::DrawableFillPatternUrl::~DrawableFillPatternUrl(void) { } void Magick::DrawableFillPatternUrl::operator()( MagickCore::DrawingWand * context_) const { DrawSetFillPatternURL(context_, _url.c_str()); } void Magick::DrawableFillPatternUrl::url(const std::string &url_) { _url = url_; } std::string Magick::DrawableFillPatternUrl::url(void) const { return(_url); } Magick::DrawableBase* Magick::DrawableFillPatternUrl::copy() const { return(new DrawableFillPatternUrl(*this)); } // Specify drawing fill fule Magick::DrawableFillRule::~DrawableFillRule ( void ) { } void Magick::DrawableFillRule::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetFillRule( context_, _fillRule ); } Magick::DrawableBase* Magick::DrawableFillRule::copy() const { return new DrawableFillRule(*this); } Magick::DrawableFillOpacity::~DrawableFillOpacity(void) { } void Magick::DrawableFillOpacity::operator() (MagickCore::DrawingWand *context_) const { DrawSetFillOpacity(context_,_opacity); } Magick::DrawableBase* Magick::DrawableFillOpacity::copy() const { return new DrawableFillOpacity(*this); } // Specify text font Magick::DrawableFont::DrawableFont ( const std::string &font_ ) : _font(font_), _family(), _style(Magick::AnyStyle), _weight(400), _stretch(Magick::NormalStretch) { } Magick::DrawableFont::DrawableFont ( const std::string &family_, Magick::StyleType style_, const unsigned int weight_, Magick::StretchType stretch_ ) : _font(), _family(family_), _style(style_), _weight(weight_), _stretch(stretch_) { } Magick::DrawableFont::DrawableFont ( const Magick::DrawableFont& original_ ) : DrawableBase (original_), _font(original_._font), _family(original_._family), _style(original_._style), _weight(original_._weight), _stretch(original_._stretch) { } Magick::DrawableFont::~DrawableFont ( void ) { } void Magick::DrawableFont::operator()( MagickCore::DrawingWand * context_ ) const { // font if(_font.length()) { (void) DrawSetFont( context_, _font.c_str() ); } if(_family.length()) { // font-family (void) DrawSetFontFamily( context_, _family.c_str() ); // font-style DrawSetFontStyle( context_, _style ); // font-weight DrawSetFontWeight( context_, _weight ); // font-stretch DrawSetFontStretch( context_, _stretch ); } } Magick::DrawableBase* Magick::DrawableFont::copy() const { return new DrawableFont(*this); } // Specify text positioning gravity Magick::DrawableGravity::~DrawableGravity ( void ) { } void Magick::DrawableGravity::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetGravity( context_, _gravity ); } Magick::DrawableBase* Magick::DrawableGravity::copy() const { return new DrawableGravity(*this); } // Line Magick::DrawableLine::~DrawableLine ( void ) { } void Magick::DrawableLine::operator()( MagickCore::DrawingWand * context_ ) const { DrawLine( context_, _startX, _startY, _endX, _endY ); } Magick::DrawableBase* Magick::DrawableLine::copy() const { return new DrawableLine(*this); } // Drawable Path Magick::DrawablePath::DrawablePath ( const VPathList &path_ ) : _path(path_) { } Magick::DrawablePath::DrawablePath ( const Magick::DrawablePath& original_ ) : DrawableBase (original_), _path(original_._path) { } Magick::DrawablePath::~DrawablePath ( void ) { } void Magick::DrawablePath::operator()( MagickCore::DrawingWand * context_ ) const { DrawPathStart( context_ ); for( VPathList::const_iterator p = _path.begin(); p != _path.end(); p++ ) p->operator()( context_ ); // FIXME, how to quit loop on error? DrawPathFinish( context_ ); } Magick::DrawableBase* Magick::DrawablePath::copy() const { return new DrawablePath(*this); } // Point Magick::DrawablePoint::~DrawablePoint ( void ) { } void Magick::DrawablePoint::operator()( MagickCore::DrawingWand * context_ ) const { DrawPoint( context_, _x, _y ); } Magick::DrawableBase* Magick::DrawablePoint::copy() const { return new DrawablePoint(*this); } // Text pointsize Magick::DrawablePointSize::~DrawablePointSize ( void ) { } void Magick::DrawablePointSize::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetFontSize( context_, _pointSize ); } Magick::DrawableBase* Magick::DrawablePointSize::copy() const { return new DrawablePointSize(*this); } // Polygon (Coordinate list must contain at least three members) Magick::DrawablePolygon::DrawablePolygon ( const CoordinateList &coordinates_ ) : _coordinates(coordinates_) { } Magick::DrawablePolygon::DrawablePolygon ( const Magick::DrawablePolygon& original_ ) : DrawableBase (original_), _coordinates(original_._coordinates) { } Magick::DrawablePolygon::~DrawablePolygon ( void ) { } void Magick::DrawablePolygon::operator() ( MagickCore::DrawingWand * context_ ) const { size_t num_coords = (size_t) _coordinates.size(); PointInfo *coordinates = new PointInfo[num_coords]; PointInfo *q = coordinates; CoordinateList::const_iterator p = _coordinates.begin(); while( p != _coordinates.end() ) { q->x = p->x(); q->y = p->y(); q++; p++; } DrawPolygon( context_, num_coords, coordinates ); delete [] coordinates; } Magick::DrawableBase* Magick::DrawablePolygon::copy() const { return new DrawablePolygon(*this); } // Polyline (Coordinate list must contain at least three members) Magick::DrawablePolyline::DrawablePolyline ( const CoordinateList &coordinates_ ) : _coordinates(coordinates_) { } Magick::DrawablePolyline::DrawablePolyline ( const Magick::DrawablePolyline& original_ ) : DrawableBase (original_), _coordinates(original_._coordinates) { } Magick::DrawablePolyline::~DrawablePolyline ( void ) { } void Magick::DrawablePolyline::operator() ( MagickCore::DrawingWand * context_ ) const { size_t num_coords = (size_t) _coordinates.size(); PointInfo *coordinates = new PointInfo[num_coords]; PointInfo *q = coordinates; CoordinateList::const_iterator p = _coordinates.begin(); while( p != _coordinates.end() ) { q->x = p->x(); q->y = p->y(); q++; p++; } DrawPolyline( context_, num_coords, coordinates ); delete [] coordinates; } Magick::DrawableBase* Magick::DrawablePolyline::copy() const { return new DrawablePolyline(*this); } // Pop Graphic Context Magick::DrawablePopGraphicContext::~DrawablePopGraphicContext ( void ) { } void Magick::DrawablePopGraphicContext::operator() ( MagickCore::DrawingWand * context_ ) const { PopDrawingWand( context_ ); } Magick::DrawableBase* Magick::DrawablePopGraphicContext::copy() const { return new DrawablePopGraphicContext(*this); } // Push Graphic Context Magick::DrawablePushGraphicContext::~DrawablePushGraphicContext ( void ) { } void Magick::DrawablePushGraphicContext::operator() ( MagickCore::DrawingWand * context_ ) const { PushDrawingWand( context_ ); } Magick::DrawableBase* Magick::DrawablePushGraphicContext::copy() const { return new DrawablePushGraphicContext(*this); } // Pop (terminate) Pattern definition Magick::DrawablePopPattern::~DrawablePopPattern ( void ) { } void Magick::DrawablePopPattern::operator() ( MagickCore::DrawingWand * context_ ) const { (void) DrawPopPattern( context_ ); } Magick::DrawableBase* Magick::DrawablePopPattern::copy() const { return new DrawablePopPattern(*this); } // Push Pattern definition Magick::DrawablePushPattern::DrawablePushPattern ( const std::string &id_, ssize_t x_, ssize_t y_, size_t width_, size_t height_ ) : _id(id_), _x(x_), _y(y_), _width(width_), _height(height_) { } Magick::DrawablePushPattern::DrawablePushPattern ( const Magick::DrawablePushPattern& original_ ) : DrawableBase (original_), _id(original_._id), _x(original_._x), _y(original_._y), _width(original_._width), _height(original_._height) { } Magick::DrawablePushPattern::~DrawablePushPattern ( void ) { } void Magick::DrawablePushPattern::operator() ( MagickCore::DrawingWand * context_ ) const { (void) DrawPushPattern( context_, _id.c_str(), _x, _y, _width, _height ); } Magick::DrawableBase* Magick::DrawablePushPattern::copy() const { return new DrawablePushPattern(*this); } // Rectangle Magick::DrawableRectangle::~DrawableRectangle ( void ) { } void Magick::DrawableRectangle::operator() ( MagickCore::DrawingWand * context_ ) const { DrawRectangle( context_, _upperLeftX, _upperLeftY, _lowerRightX, _lowerRightY ); } Magick::DrawableBase* Magick::DrawableRectangle::copy() const { return new DrawableRectangle(*this); } // Apply Rotation Magick::DrawableRotation::~DrawableRotation ( void ) { } void Magick::DrawableRotation::operator() ( MagickCore::DrawingWand * context_ ) const { DrawRotate( context_, _angle ); } Magick::DrawableBase* Magick::DrawableRotation::copy() const { return new DrawableRotation(*this); } // Round Rectangle Magick::DrawableRoundRectangle::~DrawableRoundRectangle ( void ) { } void Magick::DrawableRoundRectangle::operator() ( MagickCore::DrawingWand * context_ ) const { DrawRoundRectangle(context_,_upperLeftX,_upperLeftY,_lowerRightX, _lowerRightY,_cornerWidth, _cornerHeight); } Magick::DrawableBase* Magick::DrawableRoundRectangle::copy() const { return new DrawableRoundRectangle(*this); } // Apply Scaling Magick::DrawableScaling::~DrawableScaling ( void ) { } void Magick::DrawableScaling::operator() ( MagickCore::DrawingWand * context_ ) const { DrawScale( context_, _x, _y ); } Magick::DrawableBase* Magick::DrawableScaling::copy() const { return new DrawableScaling(*this); } // Apply Skew in the X direction Magick::DrawableSkewX::~DrawableSkewX ( void ) { } void Magick::DrawableSkewX::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSkewX( context_, _angle ); } Magick::DrawableBase* Magick::DrawableSkewX::copy() const { return new DrawableSkewX(*this); } // Apply Skew in the Y direction Magick::DrawableSkewY::~DrawableSkewY ( void ) { } void Magick::DrawableSkewY::operator()( MagickCore::DrawingWand * context_ ) const { DrawSkewY( context_, _angle ); } Magick::DrawableBase* Magick::DrawableSkewY::copy() const { return new DrawableSkewY(*this); } /* DrawableStrokeDashArray */ Magick::DrawableStrokeDashArray::DrawableStrokeDashArray(const double* dasharray_) : _size(0), _dasharray(0) { dasharray(dasharray_); } Magick::DrawableStrokeDashArray::DrawableStrokeDashArray( const Magick::DrawableStrokeDashArray& original_) : DrawableBase (original_), _size(original_._size), _dasharray(new double[_size+1]) { // Copy elements { for (size_t i=0; i < _size; i++) _dasharray[i]=original_._dasharray[i]; _dasharray[_size]=0.0; } } Magick::DrawableStrokeDashArray::~DrawableStrokeDashArray(void) { delete [] _dasharray; _size=0; _dasharray=(double *) NULL; } Magick::DrawableStrokeDashArray& Magick::DrawableStrokeDashArray::operator=( const Magick::DrawableStrokeDashArray &original_) { if (this != &original_) { delete [] _dasharray; _size=original_._size; _dasharray = new double[_size+1]; // Copy elements { for (size_t i=0; i < _size; i++) _dasharray[i]=original_._dasharray[i]; _dasharray[_size]=0.0; } } return(*this); } void Magick::DrawableStrokeDashArray::operator()( MagickCore::DrawingWand *context_) const { (void) DrawSetStrokeDashArray(context_,(const unsigned long) _size, _dasharray); } Magick::DrawableBase *Magick::DrawableStrokeDashArray::copy() const { return(new DrawableStrokeDashArray(*this)); } void Magick::DrawableStrokeDashArray::dasharray(const double* dasharray_) { size_t n; delete [] _dasharray; _size=0; _dasharray=0; if (dasharray_ != (const double *) NULL) { const double *p; // Count elements in dash array n=0; { p = dasharray_; while(*p++ != 0.0) n++; } _size=n; // Allocate elements _dasharray=new double[_size+1]; // Copy elements { for (size_t i=0; i < _size; i++) _dasharray[i]=dasharray_[i]; _dasharray[_size]=0.0; } } } const double* Magick::DrawableStrokeDashArray::dasharray(void) const { return(_dasharray); } /* DrawableStrokeDashOffset */ Magick::DrawableStrokeDashOffset::~DrawableStrokeDashOffset(void) { } void Magick::DrawableStrokeDashOffset::operator() ( MagickCore::DrawingWand * context_) const { DrawSetStrokeDashOffset(context_,_offset); } Magick::DrawableBase* Magick::DrawableStrokeDashOffset::copy() const { return(new DrawableStrokeDashOffset(*this)); } void Magick::DrawableStrokeDashOffset::offset(const double offset_) { _offset=offset_; } double Magick::DrawableStrokeDashOffset::offset(void) const { return(_offset); } // Stroke linecap Magick::DrawableStrokeLineCap::~DrawableStrokeLineCap ( void ) { } void Magick::DrawableStrokeLineCap::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetStrokeLineCap( context_, _linecap ); } Magick::DrawableBase* Magick::DrawableStrokeLineCap::copy() const { return new DrawableStrokeLineCap(*this); } // Stroke linejoin Magick::DrawableStrokeLineJoin::~DrawableStrokeLineJoin ( void ) { } void Magick::DrawableStrokeLineJoin::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetStrokeLineJoin( context_, _linejoin ); } Magick::DrawableBase* Magick::DrawableStrokeLineJoin::copy() const { return new DrawableStrokeLineJoin(*this); } // Stroke miterlimit Magick::DrawableMiterLimit::~DrawableMiterLimit ( void ) { } void Magick::DrawableMiterLimit::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetStrokeMiterLimit( context_, _miterlimit ); } Magick::DrawableBase* Magick::DrawableMiterLimit::copy() const { return new DrawableMiterLimit(*this); } /* DrawableStrokePatternUrl */ Magick::DrawableStrokePatternUrl::DrawableStrokePatternUrl( const std::string &url_) : _url(url_) { } Magick::DrawableStrokePatternUrl::DrawableStrokePatternUrl( const Magick::DrawableStrokePatternUrl& original_) : DrawableBase(original_), _url(original_._url) { } Magick::DrawableStrokePatternUrl::~DrawableStrokePatternUrl(void) { } void Magick::DrawableStrokePatternUrl::operator()( MagickCore::DrawingWand * context_) const { DrawSetStrokePatternURL(context_, _url.c_str()); } void Magick::DrawableStrokePatternUrl::url(const std::string &url_) { _url = url_; } std::string Magick::DrawableStrokePatternUrl::url(void) const { return(_url); } Magick::DrawableBase* Magick::DrawableStrokePatternUrl::copy() const { return(new DrawableStrokePatternUrl(*this)); } // Stroke antialias Magick::DrawableStrokeAntialias::~DrawableStrokeAntialias ( void ) { } void Magick::DrawableStrokeAntialias::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetStrokeAntialias( context_, static_cast (_flag ? MagickTrue : MagickFalse) ); } Magick::DrawableBase* Magick::DrawableStrokeAntialias::copy() const { return new DrawableStrokeAntialias(*this); } // Stroke color Magick::DrawableStrokeColor::DrawableStrokeColor ( const Magick::Color &color_ ) : _color(color_) { } Magick::DrawableStrokeColor::DrawableStrokeColor ( const Magick::DrawableStrokeColor& original_ ) : DrawableBase (original_), _color(original_._color) { } Magick::DrawableStrokeColor::~DrawableStrokeColor ( void ) { } void Magick::DrawableStrokeColor::operator() ( MagickCore::DrawingWand * context_ ) const { PixelInfo color = static_cast(_color); PixelWand *pixel_wand=NewPixelWand(); PixelSetPixelColor(pixel_wand,&color); DrawSetStrokeColor(context_,pixel_wand); pixel_wand=DestroyPixelWand(pixel_wand); } Magick::DrawableBase* Magick::DrawableStrokeColor::copy() const { return new DrawableStrokeColor(*this); } Magick::DrawableStrokeOpacity::~DrawableStrokeOpacity(void) { } void Magick::DrawableStrokeOpacity::operator() (MagickCore::DrawingWand * context_) const { DrawSetStrokeOpacity(context_,_opacity); } Magick::DrawableBase* Magick::DrawableStrokeOpacity::copy() const { return new DrawableStrokeOpacity(*this); } // Stroke width Magick::DrawableStrokeWidth::~DrawableStrokeWidth ( void ) { } void Magick::DrawableStrokeWidth::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetStrokeWidth( context_, _width ); } Magick::DrawableBase* Magick::DrawableStrokeWidth::copy() const { return new DrawableStrokeWidth(*this); } // Draw text at point Magick::DrawableText::DrawableText ( const double x_, const double y_, const std::string &text_ ) : _x(x_), _y(y_), _text(text_), _encoding() { } Magick::DrawableText::DrawableText ( const double x_, const double y_, const std::string &text_, const std::string &encoding_) : _x(x_), _y(y_), _text(text_), _encoding(encoding_) { } Magick::DrawableText::DrawableText( const Magick::DrawableText& original_ ) : DrawableBase (original_), _x(original_._x), _y(original_._y), _text(original_._text), _encoding(original_._encoding) { } Magick::DrawableText::~DrawableText ( void ) { } void Magick::DrawableText::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetTextEncoding( context_, _encoding.c_str() ); DrawAnnotation( context_, _x, _y, reinterpret_cast(_text.c_str()) ); } Magick::DrawableBase* Magick::DrawableText::copy() const { return new DrawableText(*this); } /* DrawableTextAlignment */ Magick::DrawableTextAlignment::DrawableTextAlignment( Magick::AlignType alignment_) : _alignment(alignment_) { } Magick::DrawableTextAlignment::DrawableTextAlignment (const Magick::DrawableTextAlignment &original_) : DrawableBase(original_), _alignment(original_._alignment) { } Magick::DrawableTextAlignment::~DrawableTextAlignment(void) { } void Magick::DrawableTextAlignment::operator()( MagickCore::DrawingWand * context_) const { DrawSetTextAlignment(context_, _alignment); } void Magick::DrawableTextAlignment::alignment(AlignType alignment_) { _alignment=alignment_; } Magick::AlignType Magick::DrawableTextAlignment::alignment(void) const { return(_alignment); } Magick::DrawableBase* Magick::DrawableTextAlignment::copy() const { return new DrawableTextAlignment(*this); } // Text antialias Magick::DrawableTextAntialias::DrawableTextAntialias ( bool flag_ ) : _flag(flag_) { } Magick::DrawableTextAntialias::DrawableTextAntialias( const Magick::DrawableTextAntialias &original_ ) : DrawableBase (original_), _flag(original_._flag) { } Magick::DrawableTextAntialias::~DrawableTextAntialias ( void ) { } void Magick::DrawableTextAntialias::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetTextAntialias( context_, static_cast (_flag ? MagickTrue : MagickFalse) ); } Magick::DrawableBase* Magick::DrawableTextAntialias::copy() const { return new DrawableTextAntialias(*this); } // Decoration (text decoration) Magick::DrawableTextDecoration::DrawableTextDecoration ( Magick::DecorationType decoration_ ) : _decoration(decoration_) { } Magick::DrawableTextDecoration::DrawableTextDecoration ( const Magick::DrawableTextDecoration &original_ ) : DrawableBase (original_), _decoration(original_._decoration) { } Magick::DrawableTextDecoration::~DrawableTextDecoration( void ) { } void Magick::DrawableTextDecoration::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetTextDecoration( context_, _decoration ); } Magick::DrawableBase* Magick::DrawableTextDecoration::copy() const { return new DrawableTextDecoration(*this); } // DrawableTextDirection Magick::DrawableTextDirection::DrawableTextDirection( DirectionType direction_) : _direction(direction_) { } Magick::DrawableTextDirection::~DrawableTextDirection(void) { } void Magick::DrawableTextDirection::operator()( MagickCore::DrawingWand *context_) const { DrawSetTextDirection(context_,_direction); } void Magick::DrawableTextDirection::direction(DirectionType direction_) { _direction=direction_; } Magick::DirectionType Magick::DrawableTextDirection::direction(void) const { return(_direction); } Magick::DrawableBase *Magick::DrawableTextDirection::copy() const { return new DrawableTextDirection(*this); } // DrawableTextInterlineSpacing Magick::DrawableTextInterlineSpacing::DrawableTextInterlineSpacing( double spacing_) : _spacing(spacing_) { } Magick::DrawableTextInterlineSpacing::~DrawableTextInterlineSpacing(void) { } void Magick::DrawableTextInterlineSpacing::operator()( MagickCore::DrawingWand *context_) const { DrawSetTextInterlineSpacing(context_,_spacing); } void Magick::DrawableTextInterlineSpacing::spacing(double spacing_) { _spacing=spacing_; } double Magick::DrawableTextInterlineSpacing::spacing(void) const { return(_spacing); } Magick::DrawableBase *Magick::DrawableTextInterlineSpacing::copy() const { return new DrawableTextInterlineSpacing(*this); } // DrawableTextInterwordSpacing Magick::DrawableTextInterwordSpacing::DrawableTextInterwordSpacing( double spacing_) : _spacing(spacing_) { } Magick::DrawableTextInterwordSpacing::~DrawableTextInterwordSpacing(void) { } void Magick::DrawableTextInterwordSpacing::operator()( MagickCore::DrawingWand *context_) const { DrawSetTextInterwordSpacing(context_,_spacing); } void Magick::DrawableTextInterwordSpacing::spacing(double spacing_) { _spacing=spacing_; } double Magick::DrawableTextInterwordSpacing::spacing(void) const { return(_spacing); } Magick::DrawableBase *Magick::DrawableTextInterwordSpacing::copy() const { return new DrawableTextInterwordSpacing(*this); } // DrawableTextKerning Magick::DrawableTextKerning::DrawableTextKerning( double kerning_) : _kerning(kerning_) { } Magick::DrawableTextKerning::~DrawableTextKerning(void) { } void Magick::DrawableTextKerning::operator()( MagickCore::DrawingWand *context_) const { DrawSetTextKerning(context_,_kerning); } void Magick::DrawableTextKerning::kerning(double kerning_) { _kerning=kerning_; } double Magick::DrawableTextKerning::kerning(void) const { return(_kerning); } Magick::DrawableBase *Magick::DrawableTextKerning::copy() const { return new DrawableTextKerning(*this); } // Set text undercolor Magick::DrawableTextUnderColor::DrawableTextUnderColor ( const Magick::Color &color_ ) : _color(color_) { } Magick::DrawableTextUnderColor::DrawableTextUnderColor ( const Magick::DrawableTextUnderColor& original_ ) : DrawableBase (original_), _color(original_._color) { } Magick::DrawableTextUnderColor::~DrawableTextUnderColor ( void ) { } void Magick::DrawableTextUnderColor::operator() ( MagickCore::DrawingWand * context_ ) const { PixelInfo color = static_cast(_color); PixelWand *pixel_wand=NewPixelWand(); PixelSetPixelColor(pixel_wand,&color); DrawSetTextUnderColor(context_,pixel_wand); pixel_wand=DestroyPixelWand(pixel_wand); } Magick::DrawableBase* Magick::DrawableTextUnderColor::copy() const { return new DrawableTextUnderColor(*this); } // Apply Translation Magick::DrawableTranslation::~DrawableTranslation ( void ) { } void Magick::DrawableTranslation::operator() ( MagickCore::DrawingWand * context_ ) const { DrawTranslate( context_, _x, _y ); } Magick::DrawableBase* Magick::DrawableTranslation::copy() const { return new DrawableTranslation(*this); } // Set the size of the viewbox Magick::DrawableViewbox::~DrawableViewbox ( void ) { } void Magick::DrawableViewbox::operator() ( MagickCore::DrawingWand * context_ ) const { DrawSetViewbox( context_, _x1, _y1, _x2, _y2 ); } Magick::DrawableBase* Magick::DrawableViewbox::copy() const { return new DrawableViewbox(*this); } // // Path Classes // // // PathArcArgs // MagickPPExport int Magick::operator == ( const Magick::PathArcArgs& /*left_*/, const Magick::PathArcArgs& /*right_*/ ) { return ( 1 ); } MagickPPExport int Magick::operator != ( const Magick::PathArcArgs& /*left_*/, const Magick::PathArcArgs& /*right_*/ ) { return ( 0 ); } MagickPPExport int Magick::operator > ( const Magick::PathArcArgs& /*left_*/, const Magick::PathArcArgs& /*right_*/ ) { return ( 0 ); } MagickPPExport int Magick::operator < ( const Magick::PathArcArgs& /*left_*/, const Magick::PathArcArgs& /*right_*/ ) { return ( false ); } MagickPPExport int Magick::operator >= ( const Magick::PathArcArgs& left_, const Magick::PathArcArgs& right_ ) { return ( ( left_ > right_ ) || ( left_ == right_ ) ); } MagickPPExport int Magick::operator <= ( const Magick::PathArcArgs& left_, const Magick::PathArcArgs& right_ ) { return ( ( left_ < right_ ) || ( left_ == right_ ) ); } // Default constructor Magick::PathArcArgs::PathArcArgs( void ) : _radiusX(0), _radiusY(0), _xAxisRotation(0), _largeArcFlag(false), _sweepFlag(false), _x(0), _y(0) { } // Normal constructor Magick::PathArcArgs::PathArcArgs( double radiusX_, double radiusY_, double xAxisRotation_, bool largeArcFlag_, bool sweepFlag_, double x_, double y_ ) : _radiusX(radiusX_), _radiusY(radiusY_), _xAxisRotation(xAxisRotation_), _largeArcFlag(largeArcFlag_), _sweepFlag(sweepFlag_), _x(x_), _y(y_) { } // Copy constructor Magick::PathArcArgs::PathArcArgs( const Magick::PathArcArgs &original_ ) : _radiusX(original_._radiusX), _radiusY(original_._radiusY), _xAxisRotation(original_._xAxisRotation), _largeArcFlag(original_._largeArcFlag), _sweepFlag(original_._sweepFlag), _x(original_._x), _y(original_._y) { } // Destructor Magick::PathArcArgs::~PathArcArgs ( void ) { } // Path Arc Magick::PathArcAbs::PathArcAbs ( const Magick::PathArcArgs &coordinates_ ) : _coordinates(1,coordinates_) { } Magick::PathArcAbs::PathArcAbs ( const PathArcArgsList &coordinates_ ) : _coordinates(coordinates_) { } Magick::PathArcAbs::PathArcAbs ( const Magick::PathArcAbs& original_ ) : VPathBase (original_), _coordinates(original_._coordinates) { } Magick::PathArcAbs::~PathArcAbs ( void ) { } void Magick::PathArcAbs::operator()( MagickCore::DrawingWand * context_ ) const { for( PathArcArgsList::const_iterator p = _coordinates.begin(); p != _coordinates.end(); p++ ) { DrawPathEllipticArcAbsolute( context_, p->radiusX(), p->radiusY(), p->xAxisRotation(), (MagickBooleanType) p->largeArcFlag(), (MagickBooleanType) p->sweepFlag(), p->x(), p->y() ); } } Magick::VPathBase* Magick::PathArcAbs::copy() const { return new PathArcAbs(*this); } Magick::PathArcRel::PathArcRel ( const Magick::PathArcArgs &coordinates_ ) : _coordinates(1,coordinates_) { } Magick::PathArcRel::PathArcRel ( const PathArcArgsList &coordinates_ ) : _coordinates(coordinates_) { } Magick::PathArcRel::PathArcRel ( const Magick::PathArcRel& original_ ) : VPathBase (original_), _coordinates(original_._coordinates) { } Magick::PathArcRel::~PathArcRel ( void ) { } void Magick::PathArcRel::operator()( MagickCore::DrawingWand * context_ ) const { for( PathArcArgsList::const_iterator p = _coordinates.begin(); p != _coordinates.end(); p++ ) { DrawPathEllipticArcRelative( context_, p->radiusX(), p->radiusY(), p->xAxisRotation(), (MagickBooleanType) p->largeArcFlag(), (MagickBooleanType) p->sweepFlag(), p->x(), p->y() ); } } Magick::VPathBase* Magick::PathArcRel::copy() const { return new PathArcRel(*this); } // // Path Closepath // Magick::PathClosePath::~PathClosePath ( void ) { } void Magick::PathClosePath::operator()( MagickCore::DrawingWand * context_ ) const { DrawPathClose( context_ ); } Magick::VPathBase* Magick::PathClosePath::copy() const { return new PathClosePath(*this); } // // Path Curveto (Cubic Bezier) // MagickPPExport int Magick::operator == ( const Magick::PathCurvetoArgs& /*left_*/, const Magick::PathCurvetoArgs& /*right_*/ ) { return ( 1 ); } MagickPPExport int Magick::operator != ( const Magick::PathCurvetoArgs& /*left_*/, const Magick::PathCurvetoArgs& /*right_*/ ) { return ( 0 ); } MagickPPExport int Magick::operator > ( const Magick::PathCurvetoArgs& /*left_*/, const Magick::PathCurvetoArgs& /*right_*/ ) { return ( 0 ); } MagickPPExport int Magick::operator < ( const Magick::PathCurvetoArgs& /*left_*/, const Magick::PathCurvetoArgs& /*right_*/ ) { return ( false ); } MagickPPExport int Magick::operator >= ( const Magick::PathCurvetoArgs& left_, const Magick::PathCurvetoArgs& right_ ) { return ( ( left_ > right_ ) || ( left_ == right_ ) ); } MagickPPExport int Magick::operator <= ( const Magick::PathCurvetoArgs& left_, const Magick::PathCurvetoArgs& right_ ) { return ( ( left_ < right_ ) || ( left_ == right_ ) ); } // Default constructor Magick::PathCurvetoArgs::PathCurvetoArgs( void ) : _x1(0), _y1(0), _x2(0), _y2(0), _x(0), _y(0) { } // Normal constructor Magick::PathCurvetoArgs::PathCurvetoArgs( double x1_, double y1_, double x2_, double y2_, double x_, double y_ ) : _x1(x1_), _y1(y1_), _x2(x2_), _y2(y2_), _x(x_), _y(y_) { } // Copy constructor Magick::PathCurvetoArgs::PathCurvetoArgs( const PathCurvetoArgs &original_ ) : _x1(original_._x1), _y1(original_._y1), _x2(original_._x2), _y2(original_._y2), _x(original_._x), _y(original_._y) { } // Destructor Magick::PathCurvetoArgs::~PathCurvetoArgs ( void ) { } Magick::PathCurvetoAbs::PathCurvetoAbs ( const Magick::PathCurvetoArgs &args_ ) : _args(1,args_) { } Magick::PathCurvetoAbs::PathCurvetoAbs ( const PathCurveToArgsList &args_ ) : _args(args_) { } Magick::PathCurvetoAbs::PathCurvetoAbs ( const Magick::PathCurvetoAbs& original_ ) : VPathBase (original_), _args(original_._args) { } Magick::PathCurvetoAbs::~PathCurvetoAbs ( void ) { } void Magick::PathCurvetoAbs::operator() ( MagickCore::DrawingWand * context_ ) const { for( PathCurveToArgsList::const_iterator p = _args.begin(); p != _args.end(); p++ ) { DrawPathCurveToAbsolute( context_, p->x1(), p->y1(), p->x2(), p->y2(), p->x(), p->y() ); } } Magick::VPathBase* Magick::PathCurvetoAbs::copy() const { return new PathCurvetoAbs(*this); } Magick::PathCurvetoRel::PathCurvetoRel ( const Magick::PathCurvetoArgs &args_ ) : _args(1,args_) { } Magick::PathCurvetoRel::PathCurvetoRel ( const PathCurveToArgsList &args_ ) : _args(args_) { } Magick::PathCurvetoRel::PathCurvetoRel ( const Magick::PathCurvetoRel& original_ ) : VPathBase (original_), _args(original_._args) { } Magick::PathCurvetoRel::~PathCurvetoRel ( void ) { } void Magick::PathCurvetoRel::operator() ( MagickCore::DrawingWand * context_ ) const { for( PathCurveToArgsList::const_iterator p = _args.begin(); p != _args.end(); p++ ) { DrawPathCurveToRelative( context_, p->x1(), p->y1(), p->x2(), p->y2(), p->x(), p->y() ); } } Magick::VPathBase* Magick::PathCurvetoRel::copy() const { return new PathCurvetoRel(*this); } Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs ( const Magick::Coordinate &coordinates_ ) : _coordinates(1,coordinates_) { } Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs ( const CoordinateList &coordinates_ ) : _coordinates(coordinates_) { } Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs ( const Magick::PathSmoothCurvetoAbs& original_ ) : VPathBase (original_), _coordinates(original_._coordinates) { } Magick::PathSmoothCurvetoAbs::~PathSmoothCurvetoAbs ( void ) { } void Magick::PathSmoothCurvetoAbs::operator() ( MagickCore::DrawingWand * context_ ) const { for( CoordinateList::const_iterator p = _coordinates.begin(); p != _coordinates.end(); p++ ) { double x2 = p->x(); double y2 = p->y(); p++; if (p == _coordinates.end() ) break; DrawPathCurveToSmoothAbsolute( context_, x2, y2, p->x(), p->y() ); } } Magick::VPathBase* Magick::PathSmoothCurvetoAbs::copy() const { return new PathSmoothCurvetoAbs(*this); } Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel ( const Magick::Coordinate &coordinates_ ) : _coordinates(1,coordinates_) { } Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel ( const CoordinateList &coordinates_ ) : _coordinates(coordinates_) { } Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel ( const Magick::PathSmoothCurvetoRel& original_ ) : VPathBase (original_), _coordinates(original_._coordinates) { } Magick::PathSmoothCurvetoRel::~PathSmoothCurvetoRel ( void ) { } void Magick::PathSmoothCurvetoRel::operator() ( MagickCore::DrawingWand * context_ ) const { for( CoordinateList::const_iterator p = _coordinates.begin(); p != _coordinates.end(); p++ ) { double x2 = p->x(); double y2 = p->y(); p++; if (p == _coordinates.end() ) break; DrawPathCurveToSmoothRelative( context_, x2, y2, p->x(), p->y() ); } } Magick::VPathBase* Magick::PathSmoothCurvetoRel::copy() const { return new PathSmoothCurvetoRel(*this); } // // Quadratic Curveto (Quadratic Bezier) // MagickPPExport int Magick::operator == ( const Magick::PathQuadraticCurvetoArgs& /*left_*/, const Magick::PathQuadraticCurvetoArgs& /*right_*/ ) { return ( 1 ); } MagickPPExport int Magick::operator != ( const Magick::PathQuadraticCurvetoArgs& /*left_*/, const Magick::PathQuadraticCurvetoArgs& /*right_*/ ) { return ( 0 ); } MagickPPExport int Magick::operator > ( const Magick::PathQuadraticCurvetoArgs& /*left_*/, const Magick::PathQuadraticCurvetoArgs& /*right_*/ ) { return ( 0 ); } MagickPPExport int Magick::operator < ( const Magick::PathQuadraticCurvetoArgs& /*left_*/, const Magick::PathQuadraticCurvetoArgs& /*right_*/ ) { return ( 0 ); } MagickPPExport int Magick::operator >= ( const Magick::PathQuadraticCurvetoArgs& left_, const Magick::PathQuadraticCurvetoArgs& right_ ) { return ( ( left_ > right_ ) || ( left_ == right_ ) ); } MagickPPExport int Magick::operator <= ( const Magick::PathQuadraticCurvetoArgs& left_, const Magick::PathQuadraticCurvetoArgs& right_ ) { return ( ( left_ < right_ ) || ( left_ == right_ ) ); } // Default Constructor Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( void ) : _x1(0), _y1(0), _x(0), _y(0) { } // Normal Constructor Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( double x1_, double y1_, double x_, double y_ ) : _x1(x1_), _y1(y1_), _x(x_), _y(y_) { } // Copy Constructor Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( const PathQuadraticCurvetoArgs &original_ ) : _x1(original_._x1), _y1(original_._y1), _x(original_._x), _y(original_._y) { } // Destructor Magick::PathQuadraticCurvetoArgs::~PathQuadraticCurvetoArgs ( void ) { } Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs ( const Magick::PathQuadraticCurvetoArgs &args_ ) : _args(1,args_) { } Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs ( const PathQuadraticCurvetoArgsList &args_ ) : _args(args_) { } Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs ( const Magick::PathQuadraticCurvetoAbs& original_ ) : VPathBase (original_), _args(original_._args) { } Magick::PathQuadraticCurvetoAbs::~PathQuadraticCurvetoAbs ( void ) { } void Magick::PathQuadraticCurvetoAbs::operator() ( MagickCore::DrawingWand * context_ ) const { for( PathQuadraticCurvetoArgsList::const_iterator p = _args.begin(); p != _args.end(); p++ ) { DrawPathCurveToQuadraticBezierAbsolute( context_, p->x1(), p->y1(), p->x(), p->y() ); } } Magick::VPathBase* Magick::PathQuadraticCurvetoAbs::copy() const { return new PathQuadraticCurvetoAbs(*this); } Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel ( const Magick::PathQuadraticCurvetoArgs &args_ ) : _args(1,args_) { } Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel ( const PathQuadraticCurvetoArgsList &args_ ) : _args(args_) { } Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel ( const Magick::PathQuadraticCurvetoRel& original_ ) : VPathBase (original_), _args(original_._args) { } Magick::PathQuadraticCurvetoRel::~PathQuadraticCurvetoRel ( void ) { } void Magick::PathQuadraticCurvetoRel::operator() ( MagickCore::DrawingWand * context_ ) const { for( PathQuadraticCurvetoArgsList::const_iterator p = _args.begin(); p != _args.end(); p++ ) { DrawPathCurveToQuadraticBezierRelative( context_, p->x1(), p->y1(), p->x(), p->y() ); } } Magick::VPathBase* Magick::PathQuadraticCurvetoRel::copy() const { return new PathQuadraticCurvetoRel(*this); } Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs ( const Magick::Coordinate &coordinate_ ) : _coordinates(1,coordinate_) { } Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs ( const CoordinateList &coordinates_ ) : _coordinates(coordinates_) { } Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs ( const Magick::PathSmoothQuadraticCurvetoAbs& original_ ) : VPathBase (original_), _coordinates(original_._coordinates) { } Magick::PathSmoothQuadraticCurvetoAbs::~PathSmoothQuadraticCurvetoAbs ( void ) { } void Magick::PathSmoothQuadraticCurvetoAbs::operator() ( MagickCore::DrawingWand * context_ ) const { for( CoordinateList::const_iterator p = _coordinates.begin(); p != _coordinates.end(); p++ ) { DrawPathCurveToQuadraticBezierSmoothAbsolute( context_, p->x(), p->y() ); } } Magick::VPathBase* Magick::PathSmoothQuadraticCurvetoAbs::copy() const { return new PathSmoothQuadraticCurvetoAbs(*this); } Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel ( const Magick::Coordinate &coordinate_ ) : _coordinates(1,coordinate_) { } Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel ( const CoordinateList &coordinates_ ) : _coordinates(coordinates_) { } Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel ( const PathSmoothQuadraticCurvetoRel& original_ ) : VPathBase (original_), _coordinates(original_._coordinates) { } Magick::PathSmoothQuadraticCurvetoRel::~PathSmoothQuadraticCurvetoRel ( void ) { } void Magick::PathSmoothQuadraticCurvetoRel::operator() ( MagickCore::DrawingWand * context_ ) const { for( CoordinateList::const_iterator p = _coordinates.begin(); p != _coordinates.end(); p++ ) { DrawPathCurveToQuadraticBezierSmoothRelative( context_, p->x(), p->y() ); } } Magick::VPathBase* Magick::PathSmoothQuadraticCurvetoRel::copy() const { return new PathSmoothQuadraticCurvetoRel(*this); } // // Path Lineto // Magick::PathLinetoAbs::PathLinetoAbs ( const Magick::Coordinate& coordinate_ ) : _coordinates(1,coordinate_) { } Magick::PathLinetoAbs::PathLinetoAbs ( const CoordinateList &coordinates_ ) : _coordinates(coordinates_) { } Magick::PathLinetoAbs::PathLinetoAbs ( const Magick::PathLinetoAbs& original_ ) : VPathBase (original_), _coordinates(original_._coordinates) { } Magick::PathLinetoAbs::~PathLinetoAbs ( void ) { } void Magick::PathLinetoAbs::operator()( MagickCore::DrawingWand * context_ ) const { for( CoordinateList::const_iterator p = _coordinates.begin(); p != _coordinates.end(); p++ ) { DrawPathLineToAbsolute( context_, p->x(), p->y() ); } } Magick::VPathBase* Magick::PathLinetoAbs::copy() const { return new PathLinetoAbs(*this); } Magick::PathLinetoRel::PathLinetoRel ( const Magick::Coordinate& coordinate_ ) : _coordinates(1,coordinate_) { } Magick::PathLinetoRel::PathLinetoRel ( const CoordinateList &coordinates_ ) : _coordinates(coordinates_) { } Magick::PathLinetoRel::PathLinetoRel ( const Magick::PathLinetoRel& original_ ) : VPathBase (original_), _coordinates(original_._coordinates) { } Magick::PathLinetoRel::~PathLinetoRel ( void ) { } void Magick::PathLinetoRel::operator()( MagickCore::DrawingWand * context_ ) const { for( CoordinateList::const_iterator p = _coordinates.begin(); p != _coordinates.end(); p++ ) { DrawPathLineToRelative( context_, p->x(), p->y() ); } } Magick::VPathBase* Magick::PathLinetoRel::copy() const { return new PathLinetoRel(*this); } // // Path Horizontal Lineto // Magick::PathLinetoHorizontalAbs::~PathLinetoHorizontalAbs ( void ) { } void Magick::PathLinetoHorizontalAbs::operator() ( MagickCore::DrawingWand * context_ ) const { DrawPathLineToHorizontalAbsolute( context_, _x ); } Magick::VPathBase* Magick::PathLinetoHorizontalAbs::copy() const { return new PathLinetoHorizontalAbs(*this); } Magick::PathLinetoHorizontalRel::~PathLinetoHorizontalRel ( void ) { } void Magick::PathLinetoHorizontalRel::operator() ( MagickCore::DrawingWand * context_ ) const { DrawPathLineToHorizontalRelative( context_, _x ); } Magick::VPathBase* Magick::PathLinetoHorizontalRel::copy() const { return new PathLinetoHorizontalRel(*this); } // // Path Vertical Lineto // Magick::PathLinetoVerticalAbs::~PathLinetoVerticalAbs ( void ) { } void Magick::PathLinetoVerticalAbs::operator() ( MagickCore::DrawingWand * context_ ) const { DrawPathLineToVerticalAbsolute( context_, _y ); } Magick::VPathBase* Magick::PathLinetoVerticalAbs::copy() const { return new PathLinetoVerticalAbs(*this); } Magick::PathLinetoVerticalRel::~PathLinetoVerticalRel ( void ) { } void Magick::PathLinetoVerticalRel::operator() ( MagickCore::DrawingWand * context_ ) const { DrawPathLineToVerticalRelative( context_, _y ); } Magick::VPathBase* Magick::PathLinetoVerticalRel::copy() const { return new PathLinetoVerticalRel(*this); } // // Path Moveto // Magick::PathMovetoAbs::PathMovetoAbs ( const Magick::Coordinate &coordinate_ ) : _coordinates(1,coordinate_) { } Magick::PathMovetoAbs::PathMovetoAbs ( const CoordinateList &coordinates_ ) : _coordinates(coordinates_) { } Magick::PathMovetoAbs::PathMovetoAbs ( const Magick::PathMovetoAbs& original_ ) : VPathBase (original_), _coordinates(original_._coordinates) { } Magick::PathMovetoAbs::~PathMovetoAbs ( void ) { } void Magick::PathMovetoAbs::operator()( MagickCore::DrawingWand * context_ ) const { for( CoordinateList::const_iterator p = _coordinates.begin(); p != _coordinates.end(); p++ ) { DrawPathMoveToAbsolute( context_, p->x(), p->y() ); } } Magick::VPathBase* Magick::PathMovetoAbs::copy() const { return new PathMovetoAbs(*this); } Magick::PathMovetoRel::PathMovetoRel ( const Magick::Coordinate &coordinate_ ) : _coordinates(1,coordinate_) { } Magick::PathMovetoRel::PathMovetoRel ( const CoordinateList &coordinates_ ) : _coordinates(coordinates_) { } Magick::PathMovetoRel::PathMovetoRel ( const Magick::PathMovetoRel& original_ ) : VPathBase (original_), _coordinates(original_._coordinates) { } Magick::PathMovetoRel::~PathMovetoRel ( void ) { } void Magick::PathMovetoRel::operator()( MagickCore::DrawingWand * context_ ) const { for( CoordinateList::const_iterator p = _coordinates.begin(); p != _coordinates.end(); p++ ) { DrawPathMoveToRelative( context_, p->x(), p->y() ); } } Magick::VPathBase* Magick::PathMovetoRel::copy() const { return new PathMovetoRel(*this); } #if defined(EXPLICIT_TEMPLATE_INSTANTIATION) // template class std::vector; // template class std::vector; // template class std::vector; // template class std::vector; // template class std::vector; // template class std::vector; #endif