From e6e40ada97dd07b629238f845f92c9c0b75dc487 Mon Sep 17 00:00:00 2001 From: dirk Date: Thu, 16 Jan 2014 19:08:42 +0000 Subject: [PATCH] Added fontTypeMetricsMultiline to Image. Added underlinePosition and underlineThickness to TypeMetric. --- Magick++/lib/Image.cpp | 14 ++++++++++ Magick++/lib/Magick++/Image.h | 5 ++++ Magick++/lib/Magick++/Include.h | 1 + Magick++/lib/Magick++/TypeMetric.h | 39 ++++++++++++++------------- Magick++/lib/TypeMetric.cpp | 43 ++++++++++++++++-------------- 5 files changed, 63 insertions(+), 39 deletions(-) diff --git a/Magick++/lib/Image.cpp b/Magick++/lib/Image.cpp index 7d7304546..cc0d526a7 100644 --- a/Magick++/lib/Image.cpp +++ b/Magick++/lib/Image.cpp @@ -2946,6 +2946,20 @@ void Magick::Image::fontTypeMetrics(const std::string &text_, ThrowPPException; } +void Magick::Image::fontTypeMetricsMultiline(const std::string &text_, + TypeMetric *metrics) +{ + DrawInfo + *drawInfo; + + drawInfo=options()->drawInfo(); + drawInfo->text=const_cast(text_.c_str()); + GetPPException; + GetMultilineTypeMetrics(image(),drawInfo,&(metrics->_typeMetric),&exceptionInfo); + drawInfo->text=0; + ThrowPPException; +} + void Magick::Image::frame(const Geometry &geometry_) { FrameInfo diff --git a/Magick++/lib/Magick++/Image.h b/Magick++/lib/Magick++/Image.h index 9e57dc2b7..e3166a974 100644 --- a/Magick++/lib/Magick++/Image.h +++ b/Magick++/lib/Magick++/Image.h @@ -896,6 +896,11 @@ namespace Magick // pointsize, and density settings. void fontTypeMetrics(const std::string &text_,TypeMetric *metrics); + // Obtain multi line font metrics for text string given current font, + // pointsize, and density settings. + void fontTypeMetricsMultiline(const std::string &text_, + TypeMetric *metrics); + // Frame image void frame(const Geometry &geometry_=frameGeometryDefault); void frame(const size_t width_,const size_t height_, diff --git a/Magick++/lib/Magick++/Include.h b/Magick++/lib/Magick++/Include.h index 4cbb5e7be..d0b08735e 100644 --- a/Magick++/lib/Magick++/Include.h +++ b/Magick++/lib/Magick++/Include.h @@ -1161,6 +1161,7 @@ namespace Magick using MagickCore::GetImageQuantizeError; using MagickCore::GetImageType; using MagickCore::GetMagickInfo; + using MagickCore::GetMultilineTypeMetrics; using MagickCore::GetPixelBlue; using MagickCore::GetPixelGreen; using MagickCore::GetPixelInfo; diff --git a/Magick++/lib/Magick++/TypeMetric.h b/Magick++/lib/Magick++/TypeMetric.h index b84baf744..204fbd9d0 100644 --- a/Magick++/lib/Magick++/TypeMetric.h +++ b/Magick++/lib/Magick++/TypeMetric.h @@ -17,41 +17,42 @@ namespace Magick class MagickPPExport TypeMetric { friend class Image; + public: - - TypeMetric ( void ); - ~TypeMetric ( void ); + + // Default constructor + TypeMetric(void); + + // Destructor + ~TypeMetric(void); // Ascent, the distance in pixels from the text baseline to the // highest/upper grid coordinate used to place an outline point. - double ascent ( void ) const; + double ascent(void) const; // Descent, the distance in pixels from the baseline to the lowest // grid coordinate used to place an outline point. Always a // negative value. - double descent ( void ) const; + double descent(void) const; - // Text width in pixels. - double textWidth ( void ) const; + // Maximum horizontal advance in pixels. + double maxHorizontalAdvance(void) const; // Text height in pixels. - double textHeight ( void ) const; + double textHeight(void) const; - // Maximum horizontal advance in pixels. - double maxHorizontalAdvance ( void ) const; + // Text width in pixels. + double textWidth(void) const; + + // Underline position. + double underlinePosition(void) const; - // - // Public methods below this point are for Magick++ use only. - // + // Underline thickness. + double underlineThickness(void) const; private: - MagickCore::TypeMetric _typeMetric; + MagickCore::TypeMetric _typeMetric; }; } // namespace Magick -// -// Inlines -// - - #endif // Magick_TypeMetric_header diff --git a/Magick++/lib/TypeMetric.cpp b/Magick++/lib/TypeMetric.cpp index 68d1cec22..40a6caa04 100644 --- a/Magick++/lib/TypeMetric.cpp +++ b/Magick++/lib/TypeMetric.cpp @@ -11,43 +11,46 @@ #include "Magick++/TypeMetric.h" #include -// Default constructor -Magick::TypeMetric::TypeMetric ( void ) +Magick::TypeMetric::TypeMetric(void) { - memset( &_typeMetric, 0, sizeof(_typeMetric)); + ResetMagickMemory(&_typeMetric,0,sizeof(_typeMetric)); } -Magick::TypeMetric::~TypeMetric ( void ) +Magick::TypeMetric::~TypeMetric(void) { - // Nothing to do } -// Ascent, expressed in pixels -double Magick::TypeMetric::ascent ( void ) const +double Magick::TypeMetric::ascent(void) const { - return _typeMetric.ascent; + return(_typeMetric.ascent); } -// Descent, expressed in pixels -double Magick::TypeMetric::descent ( void ) const +double Magick::TypeMetric::descent(void) const { - return _typeMetric.descent; + return(_typeMetric.descent); } -// Text width, expressed in pixels -double Magick::TypeMetric::textWidth ( void ) const +double Magick::TypeMetric::maxHorizontalAdvance(void) const { - return _typeMetric.width; + return(_typeMetric.max_advance); } -// Text height, expressed in pixels -double Magick::TypeMetric::textHeight ( void ) const +double Magick::TypeMetric::textHeight(void) const { - return _typeMetric.height; + return(_typeMetric.height); } -// Maximum horizontal advance, expressed in pixels -double Magick::TypeMetric::maxHorizontalAdvance ( void ) const +double Magick::TypeMetric::textWidth(void) const { - return _typeMetric.max_advance; + return(_typeMetric.width); +} + +double Magick::TypeMetric::underlinePosition(void) const +{ + return(_typeMetric.underline_position); +} + +double Magick::TypeMetric::underlineThickness(void) const +{ + return(_typeMetric.underline_thickness); } -- 2.40.0