Parcourir la source

Inactive layers in 2d editor no longer block mouse input

Ivan Safrin il y a 12 ans
Parent
commit
a2208b5627

+ 4 - 2
IDE/Contents/Include/PolycodeScreenEditor.h

@@ -147,6 +147,9 @@ class PolycodeScreenEditorMain : public UIElement {
 		
 		
 		void adjustForSnap(Vector2 *position);
 		void adjustForSnap(Vector2 *position);
 		
 		
+		void setCurrentLayer(ScreenEntity *newLayer);
+		ScreenEntity *getCurrentLayer();
+		
 		String Copy(void **data);
 		String Copy(void **data);
 		void Paste(void *data, String clipboardType);
 		void Paste(void *data, String clipboardType);
 		void destroyClipboardData(void *data, String type);
 		void destroyClipboardData(void *data, String type);
@@ -166,8 +169,6 @@ class PolycodeScreenEditorMain : public UIElement {
 																
 																
 		std::vector<ScreenEntity*> layers;
 		std::vector<ScreenEntity*> layers;
 		
 		
-		ScreenEntity *currentLayer;
-		
 		PropList *entityProps;
 		PropList *entityProps;
 		
 		
 		ScreenEntity *layerBaseEntity;		
 		ScreenEntity *layerBaseEntity;		
@@ -194,6 +195,7 @@ class PolycodeScreenEditorMain : public UIElement {
 		bool multiSelect;
 		bool multiSelect;
 	protected:
 	protected:
 	
 	
+		ScreenEntity *currentLayer;	
 	
 	
 		int gridSize;
 		int gridSize;
 		bool gridSnap;
 		bool gridSnap;

+ 29 - 14
IDE/Contents/Source/PolycodeScreenEditor.cpp

@@ -274,6 +274,8 @@ PolycodeScreenEditorMain::PolycodeScreenEditorMain() {
 	treeView = NULL;
 	treeView = NULL;
 	placementCount = 0;
 	placementCount = 0;
 	
 	
+	currentLayer = NULL;
+	
 	Config *conf = CoreServices::getInstance()->getConfig();	
 	Config *conf = CoreServices::getInstance()->getConfig();	
 	String fontName = conf->getStringValue("Polycode", "uiDefaultFontName");
 	String fontName = conf->getStringValue("Polycode", "uiDefaultFontName");
 	int fontSize = conf->getNumericValue("Polycode", "uiDefaultFontSize");	
 	int fontSize = conf->getNumericValue("Polycode", "uiDefaultFontSize");	
@@ -310,7 +312,7 @@ PolycodeScreenEditorMain::PolycodeScreenEditorMain() {
 	layerBaseEntity->processInputEvents = true;
 	layerBaseEntity->processInputEvents = true;
 	objectBaseEntity->addChild(layerBaseEntity);
 	objectBaseEntity->addChild(layerBaseEntity);
 	
 	
-	currentLayer = layerBaseEntity;
+	setCurrentLayer(layerBaseEntity);
 
 
 	placingPreviewEntity = new ScreenEntity();
 	placingPreviewEntity = new ScreenEntity();
 	objectBaseEntity->addChild(placingPreviewEntity);
 	objectBaseEntity->addChild(placingPreviewEntity);
@@ -1816,8 +1818,8 @@ void PolycodeScreenEditorMain::handleEvent(Event *event) {
 							}
 							}
 							
 							
 							if(selectedEntity == currentLayer) {
 							if(selectedEntity == currentLayer) {
-								currentLayer = NULL;
-								currentLayer = layers[0];
+								setCurrentLayer(NULL);
+								setCurrentLayer(layers[0]);
 								treeView->targetLayer = currentLayer;
 								treeView->targetLayer = currentLayer;
 							}							
 							}							
 							delete selectedEntity;
 							delete selectedEntity;
@@ -2118,13 +2120,10 @@ void PolycodeScreenEditorMain::processEventForEntity(ScreenEntity *childEntity,
 ScreenEntity *PolycodeScreenEditorMain::addNewLayer(String layerName) {
 ScreenEntity *PolycodeScreenEditorMain::addNewLayer(String layerName) {
 	ScreenEntity *newLayer = new ScreenEntity();
 	ScreenEntity *newLayer = new ScreenEntity();
 	newLayer->id = layerName;
 	newLayer->id = layerName;
-	newLayer->processInputEvents = true;
 	layerBaseEntity->addChild(newLayer);
 	layerBaseEntity->addChild(newLayer);
-	currentLayer = newLayer;
-	treeView->targetLayer = newLayer;
-	
-	newLayer->setEntityProp("editor_type", "layer");
-	
+	setCurrentLayer(newLayer);
+	treeView->targetLayer = newLayer;	
+	newLayer->setEntityProp("editor_type", "layer");	
 	selectEntity(currentLayer);	
 	selectEntity(currentLayer);	
 	layers.push_back(newLayer);
 	layers.push_back(newLayer);
 	treeView->Refresh();	
 	treeView->Refresh();	
@@ -2193,6 +2192,20 @@ void PolycodeScreenEditorMain::setMode(int newMode) {
 
 
 }
 }
 
 
+ScreenEntity *PolycodeScreenEditorMain::getCurrentLayer() {
+	return currentLayer;
+}
+
+void PolycodeScreenEditorMain::setCurrentLayer(ScreenEntity *newLayer) {
+	if(currentLayer) {
+		currentLayer->processInputEvents = false;
+	}
+	currentLayer = newLayer;
+	if(currentLayer) {
+		currentLayer->processInputEvents = true;
+	}
+}
+
 void PolycodeScreenEditorMain::Resize(Number width, Number height) {
 void PolycodeScreenEditorMain::Resize(Number width, Number height) {
 
 
 
 
@@ -2565,8 +2578,8 @@ void PolycodeScreenEditor::handleEvent(Event *event) {
 		if(event->getDispatcher() == treeView->targetLayerButton) {
 		if(event->getDispatcher() == treeView->targetLayerButton) {
 			if(treeView->selectedEntity->getEntityProp("editor_type") == "layer") {
 			if(treeView->selectedEntity->getEntityProp("editor_type") == "layer") {
 				printf("setting new layer\n");
 				printf("setting new layer\n");
-				editorMain->currentLayer = (ScreenEntity*)treeView->selectedEntity;
-				treeView->targetLayer = editorMain->currentLayer;
+				editorMain->setCurrentLayer((ScreenEntity*)treeView->selectedEntity);
+				treeView->targetLayer = editorMain->getCurrentLayer();
 				treeView->Refresh();				
 				treeView->Refresh();				
 			} else {
 			} else {
 				PolycodeConsole::print("Select a layer to set as default layer.\n");
 				PolycodeConsole::print("Select a layer to set as default layer.\n");
@@ -2627,7 +2640,9 @@ void PolycodeScreenEditorMain::applyEditorProperties(ScreenEntity *entity) {
 		}
 		}
 	}
 	}
 	
 	
-	entity->processInputEvents = true;
+	if(entity->getEntityProp("editor_type") != "layer") {
+		entity->processInputEvents = true;
+	}
 	entity->blockMouseInput = true;
 	entity->blockMouseInput = true;
 	entity->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);	
 	entity->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);	
 	entity->addEventListener(this, InputEvent::EVENT_MOUSEUP);	
 	entity->addEventListener(this, InputEvent::EVENT_MOUSEUP);	
@@ -2648,8 +2663,8 @@ bool PolycodeScreenEditor::openFile(OSFileEntry filePath) {
 	if(editorMain->layerBaseEntity->getNumChildren() == 0) {
 	if(editorMain->layerBaseEntity->getNumChildren() == 0) {
 		ScreenEntity *newLayer = editorMain->addNewLayer("default_layer");
 		ScreenEntity *newLayer = editorMain->addNewLayer("default_layer");
 	} else {
 	} else {
-		editorMain->currentLayer = (ScreenEntity*)editorMain->layerBaseEntity->getChildAtIndex(0);
-		treeView->targetLayer = editorMain->currentLayer;
+		editorMain->setCurrentLayer((ScreenEntity*)editorMain->layerBaseEntity->getChildAtIndex(0));
+		treeView->targetLayer = editorMain->getCurrentLayer();
 		
 		
 		for(int i=0; i < editorMain->layerBaseEntity->getNumChildren(); i++) {
 		for(int i=0; i < editorMain->layerBaseEntity->getNumChildren(); i++) {
 			editorMain->layers.push_back((ScreenEntity*)editorMain->layerBaseEntity->getChildAtIndex(i));
 			editorMain->layers.push_back((ScreenEntity*)editorMain->layerBaseEntity->getChildAtIndex(i));