// This may look like C code, but it is really -*- C++ -*- // // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002 // Copyright Dirk Lemstra 2014 // // Geometry Definition // // Representation of an ImageMagick geometry specification // X11 geometry specification plus hints #if !defined (Magick_Geometry_header) #define Magick_Geometry_header #include "Magick++/Include.h" #include namespace Magick { class MagickPPExport Geometry; // Compare two Geometry objects regardless of LHS/RHS MagickPPExport int operator == (const Magick::Geometry& left_,const Magick::Geometry& right_); MagickPPExport int operator != (const Magick::Geometry& left_,const Magick::Geometry& right_); MagickPPExport int operator > (const Magick::Geometry& left_,const Magick::Geometry& right_); MagickPPExport int operator < (const Magick::Geometry& left_,const Magick::Geometry& right_); MagickPPExport int operator >= (const Magick::Geometry& left_,const Magick::Geometry& right_); MagickPPExport int operator <= (const Magick::Geometry& left_,const Magick::Geometry& right_); class MagickPPExport Geometry { public: // Default constructor Geometry(); // Construct Geometry from specified string Geometry(const char *geometry_); // Copy constructor Geometry(const Geometry &geometry_); // Construct Geometry from specified string Geometry(const std::string &geometry_); // Construct Geometry from specified dimensions Geometry(size_t width_,size_t height_,::ssize_t xOff_=0, ::ssize_t yOff_=0); // Destructor ~Geometry(void); // Set via geometry string const Geometry& operator=(const char *geometry_); // Assignment operator Geometry& operator=(const Geometry& Geometry_); // Set via geometry string const Geometry& operator=(const std::string &geometry_); // Return geometry string operator std::string() const; // Resize without preserving aspect ratio (!) void aspect(bool aspect_); bool aspect(void) const; // Resize the image based on the smallest fitting dimension (^) void fillArea(bool fillArea_); bool fillArea(void) const; // Resize if image is greater than size (>) void greater(bool greater_); bool greater(void) const; // Height void height(size_t height_); size_t height(void) const; // Does object contain valid geometry? void isValid(bool isValid_); bool isValid(void) const; // Resize if image is less than size (<) void less(bool less_); bool less(void) const; // Resize using a pixel area count limit (@) void limitPixels(bool limitPixels_); bool limitPixels(void) const; // Width and height are expressed as percentages void percent(bool percent_); bool percent(void) const; // Width void width(size_t width_); size_t width(void) const; // X offset from origin void xOff(::ssize_t xOff_); ::ssize_t xOff(void) const; // Y offset from origin void yOff(::ssize_t yOff_); ::ssize_t yOff(void) const; // // Public methods below this point are for Magick++ use only. // // Construct from RectangleInfo Geometry(const MagickCore::RectangleInfo &rectangle_); // Set via RectangleInfo const Geometry& operator=(const MagickCore::RectangleInfo &rectangle_); // Return an ImageMagick RectangleInfo struct operator MagickCore::RectangleInfo() const; private: size_t _width; size_t _height; ::ssize_t _xOff; ::ssize_t _yOff; bool _isValid; bool _percent; // Interpret width & height as percentages (%) bool _aspect; // Force exact size (!) bool _greater; // Resize only if larger than geometry (>) bool _less; // Resize only if smaller than geometry (<) bool _fillArea; // Resize the image based on the smallest fitting dimension (^) bool _limitPixels; // Resize using a pixel area count limit (@) }; class MagickPPExport Offset; // Compare two Offset objects MagickPPExport int operator == (const Magick::Offset& left_,const Magick::Offset& right_); MagickPPExport int operator != (const Magick::Offset& left_,const Magick::Offset& right_); class MagickPPExport Offset { public: // Default constructor Offset(); // Construct Offset from specified string Offset(const char *offset_); // Copy constructor Offset(const Offset &offset_); // Construct Offset from specified string Offset(const std::string &offset_); // Construct Offset from specified x and y Offset(ssize_t x_,ssize_t y_); // Destructor ~Offset(void); // Set via offset string const Offset& operator=(const char *offset_); // Assignment operator Offset& operator=(const Offset& offset_); // Set via offset string const Offset& operator=(const std::string &offset_); // X offset from origin ssize_t x(void) const; // Y offset from origin ssize_t y(void) const; // // Public methods below this point are for Magick++ use only. // // Return an ImageMagick OffsetInfo struct operator MagickCore::OffsetInfo() const; private: ssize_t _x; ssize_t _y; }; class MagickPPExport Point; // Compare two Point objects MagickPPExport int operator == (const Magick::Point& left_,const Magick::Point& right_); MagickPPExport int operator != (const Magick::Point& left_,const Magick::Point& right_); class MagickPPExport Point { public: // Default constructor Point(); // Construct Point from specified string Point(const char *point_); // Copy constructor Point(const Point &point_); // Construct Point from specified string Point(const std::string &point_); // Construct Point from specified x and y Point(double x_,double y_); // Construct Point from specified x y Point(double xy_); // Destructor ~Point(void); // Set via point string const Point& operator=(const char *point_); // Set via double value const Point& operator=(double xy_); // Assignment operator Point& operator=(const Point& point_); // Set via point string const Point& operator=(const std::string &point_); // Return point string operator std::string() const; // Does object contain valid point? bool isValid() const; // X offset from origin double x(void) const; // Y offset from origin double y(void) const; private: double _x; double _y; }; } // namespace Magick #endif // Magick_Geometry_header