]> git.mxchange.org Git - simgear.git/commitdiff
canvas::Text: get maximum width (if displayed on a single line).
authorThomas Geymayer <tomgey@gmail.com>
Tue, 17 Jun 2014 14:12:29 +0000 (16:12 +0200)
committerThomas Geymayer <tomgey@gmail.com>
Tue, 17 Jun 2014 14:12:29 +0000 (16:12 +0200)
simgear/canvas/elements/CanvasText.cxx
simgear/canvas/elements/CanvasText.hxx

index 8beed49c1ba5227406185fb5fba290cfa2a8c581..d99760a35d82eb0c8dab8fcb6c3d84794d3cf1c6 100644 (file)
@@ -40,7 +40,7 @@ namespace canvas
       void setFill(const std::string& fill);
       void setBackgroundColor(const std::string& fill);
 
-      int heightForWidth(int w) const;
+      SGVec2i sizeForWidth(int w) const;
       osg::Vec2 handleHit(const osg::Vec2f& pos);
 
       virtual osg::BoundingBox computeBound() const;
@@ -98,16 +98,16 @@ namespace canvas
 
   //----------------------------------------------------------------------------
   // simplified version of osgText::Text::computeGlyphRepresentation() to
-  // just calculate the height for a given weight. Glpyh calculations/creating
+  // just calculate the size for a given weight. Glpyh calculations/creating
   // is not necessary for this...
-  int Text::TextOSG::heightForWidth(int w) const
+  SGVec2i Text::TextOSG::sizeForWidth(int w) const
   {
     if( _text.empty() )
-      return 0;
+      return SGVec2i(0, 0);
 
     osgText::Font* activefont = const_cast<osgText::Font*>(getActiveFont());
     if( !activefont )
-      return -1;
+      return SGVec2i(-1, -1);
 
     float max_width_safe = _maximumWidth;
     const_cast<TextOSG*>(this)->_maximumWidth = w;
@@ -368,7 +368,7 @@ namespace canvas
 
     const_cast<TextOSG*>(this)->_maximumWidth = max_width_safe;
 
-    return bb.height();
+    return bb.size();
   }
 
   //----------------------------------------------------------------------------
@@ -648,7 +648,13 @@ namespace canvas
   //----------------------------------------------------------------------------
   int Text::heightForWidth(int w) const
   {
-    return _text->heightForWidth(w);
+    return _text->sizeForWidth(w).y();
+  }
+
+  //----------------------------------------------------------------------------
+  int Text::maxWidth() const
+  {
+    return _text->sizeForWidth(INT_MAX).x();
   }
 
   //----------------------------------------------------------------------------
index 57ccd290a7bf805c61153f15f80a6f70338be16b..b198d05a365b1d2a13450d5118ca1ffae8711bb4 100644 (file)
@@ -47,6 +47,7 @@ namespace canvas
       void setAlignment(const char* align);
 
       int heightForWidth(int w) const;
+      int maxWidth() const;
       osg::Vec2 getNearestCursor(const osg::Vec2& pos) const;
 
     protected: