Kaynağa Gözat

Added proportional resize support to UI Sizers, IDE editor holders will now resize proportionally

Ivan Safrin 12 yıl önce
ebeveyn
işleme
bfec4da339

+ 7 - 3
IDE/Contents/Source/PolycodeFrame.cpp

@@ -585,9 +585,9 @@ void EditorHolder::applyConfig(ObjectEntry *entry) {
 				if(firstChildEntry) {
 					firstChildHolder->applyConfig(firstChildEntry);
 					if(vSizer) {
-						vSizer->setMainHeight((*firstChildEntry)["size"]->NumberVal);
+						vSizer->setMainHeightWithMinimum((*firstChildEntry)["size"]->NumberVal);
 					} else if(hSizer) {
-						hSizer->setMainWidth((*firstChildEntry)["size"]->NumberVal);
+						hSizer->setMainWidthWithMinimum((*firstChildEntry)["size"]->NumberVal);
 					}
 				}
 				ObjectEntry *secondChildEntry = (*childEntries)[1];
@@ -604,7 +604,7 @@ void EditorHolder::setActive(bool val) {
 
 	isActive = val;
 	
-	if(vSizer || hSizer) {
+	if(firstChildHolder) {
 		firstChildHolder->setActive(val);
 		return;
 	}	
@@ -707,6 +707,8 @@ void EditorHolder::makeVSplit() {
 
 	vSizer = new UIVSizer(getWidth(), getHeight(), getHeight()/2.0, true);
 	vSizer->setMinimumSize(200);
+	vSizer->setProportionalResize(true);
+	
 	addChild(vSizer);
 	firstChildHolder = new EditorHolder(project, editorManager, this);
 	firstChildHolder->addEventListener(this, UIEvent::CLOSE_EVENT);
@@ -733,6 +735,8 @@ void EditorHolder::makeHSplit() {
 	
 	hSizer = new UIHSizer(getWidth(), getHeight(), getWidth()/2.0, true);
 	hSizer->setMinimumSize(200);
+	hSizer->setProportionalResize(true);
+	
 	addChild(hSizer);
 	firstChildHolder = new EditorHolder(project, editorManager, this);
 	firstChildHolder->addEventListener(this, UIEvent::CLOSE_EVENT);		

+ 35 - 32
IDE/Contents/Source/PolycodeIDEApp.cpp

@@ -127,7 +127,7 @@ PolycodeIDEApp::PolycodeIDEApp(PolycodeView *view) : EventDispatcher() {
 	projectManager->addEventListener(frame, Event::CHANGE_EVENT);
 	projectManager->addEventListener(this, Event::CHANGE_EVENT);
 			
-	frame->Resize(core->getXRes(), core->getYRes());	
+//	frame->Resize(core->getXRes(), core->getYRes());	
 	
 	debugger = new PolycodeRemoteDebugger(projectManager);
 	frame->console->setDebugger(debugger);
@@ -1074,24 +1074,6 @@ void PolycodeIDEApp::loadConfigFile() {
 	}	
 	config->setStringValue("Polycode", "uiTheme", uiThemeName);
 	
-	
-	ObjectEntry *appWidth = configFile.root["app_width"];
-	ObjectEntry *appHeight = configFile.root["app_height"];
-		
-	bool setResFromConfig = false;
-	if(appWidth && appHeight) {
-		int newXRes = appWidth->intVal;
-		int newYRes = appHeight->intVal;		
-		if(newXRes > 100 && newYRes > 100) {
-			setResFromConfig = true;
-			core->setVideoMode(newXRes, newYRes, false, true, 0, 0);
-		}
-	}
-	
-	if(!setResFromConfig) {
-			core->setVideoMode(1100, 700, false, true, 0, 0);	
-	}
-		
 	String themeName = "default";
 	ObjectEntry *syntaxTheme = configFile.root["syntax_theme"];
 	if(syntaxTheme) {
@@ -1132,6 +1114,40 @@ void PolycodeIDEApp::loadConfigFile() {
 
 void PolycodeIDEApp::applyFinalConfig() {
 
+	ObjectEntry *appWidth = configFile.root["app_width"];
+	ObjectEntry *appHeight = configFile.root["app_height"];
+		
+	bool setResFromConfig = false;
+	if(appWidth && appHeight) {
+		int newXRes = appWidth->intVal;
+		int newYRes = appHeight->intVal;		
+		if(newXRes > 100 && newYRes > 100) {
+			setResFromConfig = true;
+			core->setVideoMode(newXRes, newYRes, false, true, 0, 0);
+			frame->Resize(newXRes, newYRes);
+		}
+	}
+	
+	if(!setResFromConfig) {
+		core->setVideoMode(1100, 700, false, true, 0, 0);	
+		frame->Resize(1100, 700);			
+	}
+
+
+	ObjectEntry *consoleEntry = configFile.root["console"];	
+	if(consoleEntry) {
+		if((*consoleEntry)["size"]) {
+			frame->getConsoleSizer()->setMainHeight((*consoleEntry)["size"]->NumberVal);
+		}
+		if((*consoleEntry)["showing"]) {
+			if((*consoleEntry)["showing"]->boolVal) {
+				frame->showConsole();
+			} else {
+				frame->hideConsole();			
+			}
+		}		
+	}
+
 	PolycodeProject *activeConfigProject = NULL;
 	
 	for(int i=0; i < projectsToOpen.size(); i++) {
@@ -1192,19 +1208,6 @@ void PolycodeIDEApp::applyFinalConfig() {
 		frame->switchToProjectFrame(frame->getProjectFrame(activeConfigProject));
 	}
 
-	ObjectEntry *consoleEntry = configFile.root["console"];	
-	if(consoleEntry) {
-		if((*consoleEntry)["size"]) {
-			frame->getConsoleSizer()->setMainHeight((*consoleEntry)["size"]->NumberVal);
-		}
-		if((*consoleEntry)["showing"]) {
-			if((*consoleEntry)["showing"]->boolVal) {
-				frame->showConsole();
-			} else {
-				frame->hideConsole();			
-			}
-		}		
-	}
 }
 
 PolycodeIDEApp::~PolycodeIDEApp() {	

+ 4 - 0
Modules/Contents/UI/Include/PolyUIHSizer.h

@@ -55,8 +55,12 @@ namespace Polycode {
 			
 			void setMinimumSize(Number minimumSize);
 			
+			void setProportionalResize(bool val);
+			
 		protected:
 		
+			bool proportionalResize;
+		
 			Entity *childElements;			
 			Number mainWidth;
 			

+ 3 - 0
Modules/Contents/UI/Include/PolyUIVSizer.h

@@ -52,9 +52,12 @@ namespace Polycode {
 			void updateSizer();
 			
 			void setMinimumSize(Number minimumSize);
+			void setProportionalResize(bool val);
 			
 		protected:
 		
+			bool proportionalResize;
+					
 			Entity *childElements;			
 			Number mainHeight;
 			

+ 10 - 0
Modules/Contents/UI/Source/PolyUIHSizer.cpp

@@ -33,6 +33,7 @@ using namespace Polycode;
 UIHSizer::UIHSizer(Number width, Number height, Number mainWidth, bool leftSizer) : UIElement() {
 
 	minimumSize = 100;
+	proportionalResize = false;
 
 	setWidth(width);
 	setHeight(height);
@@ -128,7 +129,16 @@ void UIHSizer::handleEvent(Event *event) {
 	}
 }
 
+void UIHSizer::setProportionalResize(bool val) {
+	proportionalResize = val;
+}
+
 void UIHSizer::Resize(Number width, Number height) {
+
+	if(proportionalResize) {
+		mainWidth = mainWidth * (width/getWidth());
+	}
+
 	setWidth(width);
 	setHeight(height);
 	matrixDirty = true;

+ 10 - 0
Modules/Contents/UI/Source/PolyUIVSizer.cpp

@@ -33,6 +33,7 @@ using namespace Polycode;
 UIVSizer::UIVSizer(Number width, Number height, Number mainHeight, bool topSizer) : UIElement() {
 
 	minimumSize = 100;
+	proportionalResize = false;
 
 	setWidth(width);
 	setHeight(height);
@@ -130,7 +131,16 @@ void UIVSizer::handleEvent(Event *event) {
 	}
 }
 
+void UIVSizer::setProportionalResize(bool val) {
+	proportionalResize = val;
+}
+
 void UIVSizer::Resize(Number width, Number height) {
+
+	if(proportionalResize) {
+		mainHeight = mainHeight * (height/getHeight());
+	}
+	
 	setWidth(width);
 	setHeight(height);
 	matrixDirty = true;