Bläddra i källkod

Merge pull request #524 from fodinabor/UIMultilineLabelFixes

Fix UIMultilineLabels to return the correct width and height.
Ivan Safrin 11 år sedan
förälder
incheckning
167c2653a3

+ 13 - 4
Modules/Contents/UI/Include/PolyUIElement.h

@@ -149,6 +149,16 @@ namespace Polycode {
 		*/
 		void setColor(Color color);
 
+		/**
+		* @return the max width as a Number
+		*/
+		Number getWidth();
+
+		/**
+		* @return the max height as a Number
+		*/
+		Number getHeight();
+
         ~UIMultilineLabel();
     protected:
         
@@ -156,13 +166,12 @@ namespace Polycode {
         String labelFontName;
         int labelAAMode;
         int spacing;
-        
+		int linesCount;
+
         void clearLabels();
         std::vector<UILabel*> labels;
 	};
-    
-
-	
+    	
 	class _PolyExport UIImage : public UIRect {
 		public:
 			UIImage(String imagePath);

+ 22 - 3
Modules/Contents/UI/Source/PolyUIElement.cpp

@@ -42,8 +42,9 @@ void UIMultilineLabel::setText(const String& text) {
     clearLabels();
     
     std::vector<String> lines = text.split("\n");
-    
-    Number lineSize = spacing;
+	linesCount = lines.size();
+
+	Number lineSize = spacing;
     Number yPos = 0.0;
     for(int i=0; i < lines.size(); i++) {
         if(lines[i] == "") {
@@ -96,13 +97,31 @@ void UIMultilineLabel::clearLabels() {
     labels.clear();
 }
 
+Number UIMultilineLabel::getWidth(){
+	Number maxWidth = 0;
+	for (int i = 0; i < labels.size(); i++) {
+		if (labels[i]->getWidth() > maxWidth){
+			maxWidth = labels[i]->getWidth();
+		}
+	}
+	return maxWidth;
+}
+
+Number UIMultilineLabel::getHeight(){
+	Number retHeight = 0;
+	for (int i = 0; i < labels.size(); i++) {
+		retHeight += labels[i]->getHeight() + spacing;
+	}
+	retHeight += (linesCount - labels.size()) * (labelSize + spacing);
+	return retHeight;
+}
+
 UIMultilineLabel::~UIMultilineLabel() {
     if(!ownsChildren) {
         clearLabels();
     }
 }
 
-
 UILabel::UILabel(const String& text, int size, const String& fontName, int amode) : UIElement() {
 
 	Config *conf = CoreServices::getInstance()->getConfig();