Pārlūkot izejas kodu

More UI and IDE fixes

Ivan Safrin 12 gadi atpakaļ
vecāks
revīzija
499ac73584

+ 2 - 1
Core/Contents/Include/PolyEntity.h

@@ -698,7 +698,8 @@ namespace Polycode {
 			bool blockMouseInput;
 			bool blockMouseInput;
 																					
 																					
 			void setHitbox(Number width, Number height) {}
 			void setHitbox(Number width, Number height) {}
-			Vector2 getScreenPosition() const { return Vector2(); }
+			Vector2 getScreenPosition(Matrix4 projectionMatrix, Matrix4 cameraMatrix);
+			Vector2 getScreenPositionForMainCamera();
 
 
 			bool hitTest(Number x, Number y) const { return false; }
 			bool hitTest(Number x, Number y) const { return false; }
 			bool hitTest(Vector2 v) const { return false; }
 			bool hitTest(Vector2 v) const { return false; }

+ 2 - 0
Core/Contents/Include/PolyGLRenderer.h

@@ -121,6 +121,8 @@ namespace Polycode {
 		void bindFrameBufferTextureDepth(Texture *texture);		
 		void bindFrameBufferTextureDepth(Texture *texture);		
 		void unbindFramebuffers();
 		void unbindFramebuffers();
 		
 		
+		Vector2 Project(const Matrix4 &cameraMatrix, const Matrix4 &projectionMatrix, const Vector3 &coordiante) const;
+		
 		void cullFrontFaces(bool val);
 		void cullFrontFaces(bool val);
 				
 				
 		void pushRenderDataArray(RenderDataArray *array);
 		void pushRenderDataArray(RenderDataArray *array);

+ 2 - 0
Core/Contents/Include/PolyRenderer.h

@@ -241,6 +241,8 @@ namespace Polycode {
 		
 		
 		virtual Vector3 projectRayFrom2DCoordinate(Number x, Number y, Matrix4 cameraMatrix, Matrix4 projectionMatrix) = 0;
 		virtual Vector3 projectRayFrom2DCoordinate(Number x, Number y, Matrix4 cameraMatrix, Matrix4 projectionMatrix) = 0;
 		
 		
+		virtual Vector2 Project(const Matrix4 &cameraMatrix, const Matrix4 &projectionMatrix, const Vector3 &coordiante) const = 0;
+		
 		void enableShaders(bool flag);
 		void enableShaders(bool flag);
 		
 		
 		Number getViewportWidth();
 		Number getViewportWidth();

+ 2 - 0
Core/Contents/Include/PolySceneLabel.h

@@ -66,6 +66,8 @@ namespace Polycode {
 			
 			
 			bool positionAtBaseline;
 			bool positionAtBaseline;
 			
 			
+			static Vector3 defaultAnchor;
+			
 		protected:
 		protected:
 			
 			
 			void updateFromLabel();
 			void updateFromLabel();

+ 12 - 3
Core/Contents/Source/PolyEntity.cpp

@@ -411,6 +411,14 @@ Matrix4 Entity::getConcatenatedRollMatrix() const {
 		return transformMatrix;	
 		return transformMatrix;	
 }
 }
 
 
+Vector2 Entity::getScreenPosition(Matrix4 projectionMatrix, Matrix4 cameraMatrix) {
+	Vector2 pos = renderer->Project(cameraMatrix, projectionMatrix, getConcatenatedMatrix().getPosition());
+	return pos;
+}
+
+Vector2 Entity::getScreenPositionForMainCamera() {
+	return getScreenPosition(renderer->getProjectionMatrix(), renderer->getCameraMatrix());
+}
 
 
 void Entity::transformAndRender() {
 void Entity::transformAndRender() {
 	if(!renderer || !enabled)
 	if(!renderer || !enabled)
@@ -869,7 +877,7 @@ MouseEventResult Entity::onMouseDown(const Ray &ray, int mouseButton, int timest
 			}
 			}
 		}
 		}
 		
 		
-		for(int i=0; i < children.size(); i++) {
+		for(int i=children.size()-1; i>=0; i--) {
 			MouseEventResult childRes = children[i]->onMouseDown(ray, mouseButton, timestamp);
 			MouseEventResult childRes = children[i]->onMouseDown(ray, mouseButton, timestamp);
 				if(childRes.hit)
 				if(childRes.hit)
 					ret.hit = true;
 					ret.hit = true;
@@ -905,7 +913,7 @@ MouseEventResult Entity::onMouseUp(const Ray &ray, int mouseButton, int timestam
 			dispatchEvent(new InputEvent(Vector2(localCoordinate.x, localCoordinate.y), timestamp), InputEvent::EVENT_MOUSEUP_OUTSIDE);
 			dispatchEvent(new InputEvent(Vector2(localCoordinate.x, localCoordinate.y), timestamp), InputEvent::EVENT_MOUSEUP_OUTSIDE);
 		}
 		}
 		
 		
-		for(int i=0; i < children.size(); i++) {
+		for(int i=children.size()-1; i>=0; i--) {
 			MouseEventResult childRes = children[i]->onMouseUp(ray, mouseButton, timestamp);
 			MouseEventResult childRes = children[i]->onMouseUp(ray, mouseButton, timestamp);
 				if(childRes.hit)
 				if(childRes.hit)
 					ret.hit = true;
 					ret.hit = true;
@@ -930,6 +938,7 @@ MouseEventResult Entity::onMouseMove(const Ray &ray, int timestamp) {
 		localCoordinate = inverse * localCoordinate;	
 		localCoordinate = inverse * localCoordinate;	
 	
 	
 		if(ray.boxIntersect(bBox, getAnchorAdjustedMatrix())) {	
 		if(ray.boxIntersect(bBox, getAnchorAdjustedMatrix())) {	
+			//setColor(1.0, 0.0, 0.0, 1.0);
 			ret.hit = true;			
 			ret.hit = true;			
 			dispatchEvent(new InputEvent(Vector2(localCoordinate.x, localCoordinate.y), timestamp), InputEvent::EVENT_MOUSEMOVE);
 			dispatchEvent(new InputEvent(Vector2(localCoordinate.x, localCoordinate.y), timestamp), InputEvent::EVENT_MOUSEMOVE);
 			
 			
@@ -948,7 +957,7 @@ MouseEventResult Entity::onMouseMove(const Ray &ray, int timestamp) {
 			}		
 			}		
 		}
 		}
 		
 		
-		for(int i=0; i < children.size(); i++) {
+		for(int i=children.size()-1; i>=0; i--) {
 			MouseEventResult childRes = children[i]->onMouseMove(ray, timestamp);
 			MouseEventResult childRes = children[i]->onMouseMove(ray, timestamp);
 				if(childRes.hit)
 				if(childRes.hit)
 					ret.hit = true;
 					ret.hit = true;

+ 27 - 1
Core/Contents/Source/PolyGLRenderer.cpp

@@ -249,8 +249,34 @@ Vector3 OpenGLRenderer::Unproject(Number x, Number y) {
 	
 	
 	coords = Vector3( cx, cy, cz );
 	coords = Vector3( cx, cy, cz );
 	
 	
-	return coords;
+	return coords;	
+}
+
+Vector2 OpenGLRenderer::Project(const Matrix4 &cameraMatrix, const Matrix4 &projectionMatrix, const Vector3 &coordiante) const {
+	
+	GLdouble mv[16];
+	Matrix4 camInverse = cameraMatrix.Inverse();	
+	Matrix4 cmv;
+	cmv.identity();
+	cmv = cmv * camInverse;
+
+	GLint vp[4];
+	glGetIntegerv( GL_VIEWPORT, vp );
+
+	for(int i=0; i < 16; i++) {
+		mv[i] = cmv.ml[i];
+	}
+
+	GLdouble _sceneProjectionMatrix[16];
+	for(int i=0; i < 16; i++) {
+		_sceneProjectionMatrix[i] = projectionMatrix.ml[i];
+	}	
+
+	GLdouble coords[3];
+	
+	gluProject(coordiante.x, coordiante.y, coordiante.z, mv, _sceneProjectionMatrix, vp, &coords[0], &coords[1], &coords[2]);
 	
 	
+	return Vector2(coords[0], yRes-coords[1]);
 }
 }
 
 
 Vector3 OpenGLRenderer::projectRayFrom2DCoordinate(Number x, Number y, Matrix4 cameraMatrix, Matrix4 projectionMatrix) {
 Vector3 OpenGLRenderer::projectRayFrom2DCoordinate(Number x, Number y, Matrix4 cameraMatrix, Matrix4 projectionMatrix) {

+ 3 - 0
Core/Contents/Source/PolyRay.cpp

@@ -44,6 +44,9 @@ Ray Ray::tranformByMatrix(const Matrix4& matrix) const {
 
 
 bool Ray::boxIntersect(const Vector3 &box, const Matrix4 &transformMatrix, float near, float far) const {	
 bool Ray::boxIntersect(const Vector3 &box, const Matrix4 &transformMatrix, float near, float far) const {	
 
 
+	if(box.x == 0 || box.y == 0 || box.z == 0)
+		return false;
+
 	Ray r  = tranformByMatrix(transformMatrix.Inverse());
 	Ray r  = tranformByMatrix(transformMatrix.Inverse());
 
 
 	Vector3 bounds[2];
 	Vector3 bounds[2];

+ 2 - 4
Core/Contents/Source/PolyScene.cpp

@@ -162,8 +162,7 @@ Camera *Scene::getDefaultCamera() {
 	return defaultCamera;
 	return defaultCamera;
 }
 }
 
 
-void Scene::Render(Camera *targetCamera) {
-	
+void Scene::Render(Camera *targetCamera) {	
 	if(!targetCamera && !activeCamera)
 	if(!targetCamera && !activeCamera)
 		return;
 		return;
 	
 	
@@ -247,8 +246,7 @@ void Scene::Render(Camera *targetCamera) {
 	
 	
 	if(targetCamera->getOrthoMode()) {
 	if(targetCamera->getOrthoMode()) {
 		CoreServices::getInstance()->getRenderer()->setPerspectiveMode();
 		CoreServices::getInstance()->getRenderer()->setPerspectiveMode();
-	}
-	
+	}	
 }
 }
 
 
 
 

+ 4 - 0
Core/Contents/Source/PolySceneLabel.cpp

@@ -31,10 +31,13 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
+Vector3 SceneLabel::defaultAnchor = Vector3();
+
 SceneLabel::SceneLabel(const String& fontName, const String& text, int size, Number scale, int amode, bool premultiplyAlpha) : ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 1, 1) {
 SceneLabel::SceneLabel(const String& fontName, const String& text, int size, Number scale, int amode, bool premultiplyAlpha) : ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 1, 1) {
 	label = new Label(CoreServices::getInstance()->getFontManager()->getFontByName(fontName), text, size, amode, premultiplyAlpha);
 	label = new Label(CoreServices::getInstance()->getFontManager()->getFontByName(fontName), text, size, amode, premultiplyAlpha);
 	this->labelScale = scale;
 	this->labelScale = scale;
 	positionAtBaseline = false;
 	positionAtBaseline = false;
+	setAnchorPoint(SceneLabel::defaultAnchor);
 	updateFromLabel();
 	updateFromLabel();
 }
 }
 
 
@@ -43,6 +46,7 @@ SceneLabel::SceneLabel(const String& text, int size, const String& fontName, int
 	label = new Label(CoreServices::getInstance()->getFontManager()->getFontByName(fontName), text, size, amode, premultiplyAlpha);
 	label = new Label(CoreServices::getInstance()->getFontManager()->getFontByName(fontName), text, size, amode, premultiplyAlpha);
 	this->labelScale = 1.0;
 	this->labelScale = 1.0;
 	positionAtBaseline = false;
 	positionAtBaseline = false;
+	setAnchorPoint(SceneLabel::defaultAnchor);	
 	updateFromLabel();
 	updateFromLabel();
 }
 }
 			
 			

+ 3 - 1
IDE/Contents/Source/PolycodeConsole.cpp

@@ -343,6 +343,8 @@ void PolycodeConsole::_print(String msg) {
 }
 }
 
 
 void PolycodeConsole::Resize(Number width, Number height) {
 void PolycodeConsole::Resize(Number width, Number height) {
-	backtraceSizer->Resize(getWidth(), getHeight());
+	setWidth(width);
+	setHeight(height);	
+	backtraceSizer->Resize(width, height);
 	backtraceSizer->setPosition(0, 0);
 	backtraceSizer->setPosition(0, 0);
 }
 }

+ 2 - 2
IDE/Contents/Source/PolycodeEditor.cpp

@@ -46,7 +46,7 @@ void PolycodeEditor::setFilePath(String newPath) {
 
 
 PolycodeEditor::PolycodeEditor(bool _isReadOnly) : UIElement(), ClipboardProvider() {
 PolycodeEditor::PolycodeEditor(bool _isReadOnly) : UIElement(), ClipboardProvider() {
 	this->_isReadOnly = _isReadOnly;
 	this->_isReadOnly = _isReadOnly;
-	enableScissor = true;	
+//	enableScissor = true;	
 	processInputEvents = true;
 	processInputEvents = true;
 	_hasChanges = false;
 	_hasChanges = false;
 	
 	
@@ -149,7 +149,7 @@ void PolycodeEditor::didAction(String actionName, PolycodeEditorActionData *befo
 
 
 void PolycodeEditor::Resize(int x, int y) {
 void PolycodeEditor::Resize(int x, int y) {
 	editorSize = Vector2(x,y);
 	editorSize = Vector2(x,y);
-	Vector2 pos = getScreenPosition();
+	Vector2 pos = getScreenPositionForMainCamera();
 	scissorBox.setRect(pos.x,pos.y, x, y);	
 	scissorBox.setRect(pos.x,pos.y, x, y);	
 }
 }
 
 

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

@@ -548,7 +548,7 @@ PolycodeFrame::PolycodeFrame() : UIElement() {
 	topBarBg->blockMouseInput = true;
 	topBarBg->blockMouseInput = true;
 	addChild(topBarBg);
 	addChild(topBarBg);
 	
 	
-	logo = new UIImage("Images/barlogo.png");	
+	logo = new UIImage("Images/barlogo.png");
 	addChild(logo);		
 	addChild(logo);		
 	
 	
 	
 	
@@ -741,7 +741,7 @@ void PolycodeFrame::showEditor(PolycodeEditor *editor) {
 	
 	
 	editorHolder->currentEditor = editor;
 	editorHolder->currentEditor = editor;
 	editorHolder->currentEditor->enabled = true;
 	editorHolder->currentEditor->enabled = true;
-	editorHolder->currentEditor->Activate();
+	editorHolder->currentEditor->Activate();	
 	
 	
 	Resize(frameSizeX, frameSizeY);
 	Resize(frameSizeX, frameSizeY);
 }
 }
@@ -925,7 +925,7 @@ void PolycodeFrame::Resize(int x, int y) {
 		(y-welcomeImage->getHeight()) / 2); 
 		(y-welcomeImage->getHeight()) / 2); 
 	
 	
 	topBarBg->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, x, 45);
 	topBarBg->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, x, 45);
-	logo->setPosition(x-logo->getWidth()-2, 2);	
+	logo->setPosition(x-logo->getWidth()-2, 2);
 	resizer->setPosition(x-resizer->getWidth()-1, y-resizer->getHeight()-1);	
 	resizer->setPosition(x-resizer->getWidth()-1, y-resizer->getHeight()-1);	
 	mainSizer->Resize(x,y-45);	
 	mainSizer->Resize(x,y-45);	
 	
 	

+ 2 - 0
IDE/Contents/Source/PolycodeIDEApp.cpp

@@ -71,6 +71,8 @@ PolycodeIDEApp::PolycodeIDEApp(PolycodeView *view) : EventDispatcher() {
 	
 	
 	willRunProject = false;
 	willRunProject = false;
 
 
+	SceneLabel::defaultAnchor = Vector3(-1.0, -1.0, 0.0);
+
 	globalMenu	= new UIGlobalMenu();
 	globalMenu	= new UIGlobalMenu();
 	UITextInput::setMenuSingleton(globalMenu);
 	UITextInput::setMenuSingleton(globalMenu);
 			
 			

+ 1 - 1
IDE/Contents/Source/PolycodeMaterialEditor.cpp

@@ -982,7 +982,7 @@ MaterialMainWindow::MaterialMainWindow() : UIElement() {
 }
 }
 	
 	
 void MaterialMainWindow::Resize(Number width, Number height) {	
 void MaterialMainWindow::Resize(Number width, Number height) {	
-	Vector2 pos = getScreenPosition();	
+	Vector2 pos = getScreenPositionForMainCamera();	
 	scissorBox.setRect(pos.x,pos.y,width, height);
 	scissorBox.setRect(pos.x,pos.y,width, height);
 	materialPane->Resize(getWidth(), getHeight());
 	materialPane->Resize(getWidth(), getHeight());
 	shaderPane->Resize(getWidth(), getHeight());
 	shaderPane->Resize(getWidth(), getHeight());

+ 29 - 10
Modules/Contents/UI/Source/PolyUIBox.cpp

@@ -36,54 +36,73 @@ UIBox::UIBox(String imageFile, Number t, Number r, Number b, Number l, Number bo
 	tlImage->setImageCoordinates(0,0,l,t);
 	tlImage->setImageCoordinates(0,0,l,t);
 	addChild(tlImage);
 	addChild(tlImage);
 	tlImage->setPosition(0, 0);
 	tlImage->setPosition(0, 0);
+	tlImage->depthTest = false;
+	tlImage->depthWrite = false;	
 	
 	
 	trImage = new SceneImage(imageFile);
 	trImage = new SceneImage(imageFile);
 	trImage->setAnchorPoint(-1.0, -1.0, 0.0);
 	trImage->setAnchorPoint(-1.0, -1.0, 0.0);
 	trImage->setImageCoordinates(trImage->getWidth()-r,0,r,t);
 	trImage->setImageCoordinates(trImage->getWidth()-r,0,r,t);
 	addChild(trImage);	
 	addChild(trImage);	
 	trImage->setPosition(boxWidth-r, 0);
 	trImage->setPosition(boxWidth-r, 0);
+	trImage->depthTest = false;
+	trImage->depthWrite = false;	
+
 
 
 	blImage = new SceneImage(imageFile);
 	blImage = new SceneImage(imageFile);
 	blImage->setAnchorPoint(-1.0, -1.0, 0.0);	
 	blImage->setAnchorPoint(-1.0, -1.0, 0.0);	
 	blImage->setImageCoordinates(0,blImage->getHeight()-b,l,b);
 	blImage->setImageCoordinates(0,blImage->getHeight()-b,l,b);
 	addChild(blImage);	
 	addChild(blImage);	
 	blImage->setPosition(0, boxHeight-b);
 	blImage->setPosition(0, boxHeight-b);
+	blImage->depthTest = false;
+	blImage->depthWrite = false;	
 
 
 	brImage = new SceneImage(imageFile);
 	brImage = new SceneImage(imageFile);
 	brImage->setAnchorPoint(-1.0, -1.0, 0.0);
 	brImage->setAnchorPoint(-1.0, -1.0, 0.0);
 	brImage->setImageCoordinates(brImage->getWidth()-r,brImage->getHeight()-b,r,b);
 	brImage->setImageCoordinates(brImage->getWidth()-r,brImage->getHeight()-b,r,b);
 	addChild(brImage);	
 	addChild(brImage);	
 	brImage->setPosition(boxWidth-r, boxHeight-b);	
 	brImage->setPosition(boxWidth-r, boxHeight-b);	
+	brImage->depthTest = false;
+	brImage->depthWrite = false;	
 	
 	
 	centerImage = new SceneImage(imageFile);
 	centerImage = new SceneImage(imageFile);
 	centerImage->setAnchorPoint(-1.0, -1.0, 0.0);
 	centerImage->setAnchorPoint(-1.0, -1.0, 0.0);
 	centerImage->setImageCoordinates(l,t,centerImage->getWidth()-l-r, centerImage->getHeight()-t-b, boxWidth-l-r, boxHeight-t-b);
 	centerImage->setImageCoordinates(l,t,centerImage->getWidth()-l-r, centerImage->getHeight()-t-b, boxWidth-l-r, boxHeight-t-b);
 	addChild(centerImage);	
 	addChild(centerImage);	
 	centerImage->setPosition(l,t);	
 	centerImage->setPosition(l,t);	
+	centerImage->depthTest = false;
+	centerImage->depthWrite = false;	
 	
 	
 	tImage = new SceneImage(imageFile);
 	tImage = new SceneImage(imageFile);
 	tImage->setAnchorPoint(-1.0, -1.0, 0.0);
 	tImage->setAnchorPoint(-1.0, -1.0, 0.0);
 	tImage->setImageCoordinates(l,0,tImage->getWidth()-l-r,t, boxWidth-l-r, t);
 	tImage->setImageCoordinates(l,0,tImage->getWidth()-l-r,t, boxWidth-l-r, t);
 	addChild(tImage);
 	addChild(tImage);
 	tImage->setPosition(l,0);	
 	tImage->setPosition(l,0);	
+	tImage->depthTest = false;
+	tImage->depthWrite = false;	
 
 
 	bImage = new SceneImage(imageFile);
 	bImage = new SceneImage(imageFile);
 	bImage->setAnchorPoint(-1.0, -1.0, 0.0);	
 	bImage->setAnchorPoint(-1.0, -1.0, 0.0);	
 	bImage->setImageCoordinates(l,bImage->getHeight()-b,bImage->getWidth()-l-r,b, boxWidth-l-r, b);
 	bImage->setImageCoordinates(l,bImage->getHeight()-b,bImage->getWidth()-l-r,b, boxWidth-l-r, b);
 	addChild(bImage);
 	addChild(bImage);
 	bImage->setPosition(l,boxHeight-b);	
 	bImage->setPosition(l,boxHeight-b);	
+	bImage->depthTest = false;
+	bImage->depthWrite = false;	
 
 
 	lImage = new SceneImage(imageFile);
 	lImage = new SceneImage(imageFile);
 	lImage->setAnchorPoint(-1.0, -1.0, 0.0);		
 	lImage->setAnchorPoint(-1.0, -1.0, 0.0);		
 	lImage->setImageCoordinates(0,t,l,lImage->getHeight()-t-b, l, boxHeight-t-b);
 	lImage->setImageCoordinates(0,t,l,lImage->getHeight()-t-b, l, boxHeight-t-b);
 	addChild(lImage);
 	addChild(lImage);
 	lImage->setPosition(0,t);	
 	lImage->setPosition(0,t);	
+	lImage->depthTest = false;
+	lImage->depthWrite = false;	
 
 
 	rImage = new SceneImage(imageFile);
 	rImage = new SceneImage(imageFile);
 	rImage->setAnchorPoint(-1.0, -1.0, 0.0);		
 	rImage->setAnchorPoint(-1.0, -1.0, 0.0);		
 	rImage->setImageCoordinates(rImage->getWidth()-r,t,r,rImage->getHeight()-t-b, r, boxHeight-t-b);
 	rImage->setImageCoordinates(rImage->getWidth()-r,t,r,rImage->getHeight()-t-b, r, boxHeight-t-b);
 	addChild(rImage);
 	addChild(rImage);
 	rImage->setPosition(boxWidth-r,t);	
 	rImage->setPosition(boxWidth-r,t);	
+	rImage->depthTest = false;
+	rImage->depthWrite = false;	
 	
 	
 	this->t = t;
 	this->t = t;
 	this->r = r;
 	this->r = r;
@@ -94,23 +113,23 @@ UIBox::UIBox(String imageFile, Number t, Number r, Number b, Number l, Number bo
 }
 }
 
 
 void UIBox::resizeBox(Number newWidth, Number newHeight) {
 void UIBox::resizeBox(Number newWidth, Number newHeight) {
+
+	setWidth(newWidth);
+	setHeight(newHeight);
+
 	brImage->setPosition(newWidth-brImage->getWidth(), newHeight-brImage->getHeight());
 	brImage->setPosition(newWidth-brImage->getWidth(), newHeight-brImage->getHeight());
 	trImage->setPosition(newWidth-trImage->getWidth(), 0);
 	trImage->setPosition(newWidth-trImage->getWidth(), 0);
 	blImage->setPosition(0, newHeight-blImage->getHeight());
 	blImage->setPosition(0, newHeight-blImage->getHeight());
 	
 	
-	centerImage->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, newWidth-l-r, newHeight-t-b);
-		
-	lImage->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, l, newHeight-t-b);	
-	rImage->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, r, newHeight-t-b);		
-	bImage->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, newWidth-l-r, b);
-	tImage->setPrimitiveOptions(ScenePrimitive::TYPE_VPLANE, newWidth-l-r, t);	
+	centerImage->setImageCoordinates(l,t,centerImage->getImageWidth()-l-r, centerImage->getImageHeight()-t-b, newWidth-l-r, newHeight-t-b);
+	lImage->setImageCoordinates(0,t,l,lImage->getImageHeight()-t-b, l, newHeight-t-b);
+	rImage->setImageCoordinates(rImage->getImageWidth()-r,t,r,rImage->getImageHeight()-t-b, r, newHeight-t-b);
+	bImage->setImageCoordinates(l,bImage->getImageHeight()-b,bImage->getImageWidth()-l-r,b, newWidth-l-r, b);
+	tImage->setImageCoordinates(l,0,tImage->getImageWidth()-l-r,t, newWidth-l-r, t);	
 	
 	
 	bImage->setPosition(bImage->getPosition().x, newHeight-bImage->getHeight());	
 	bImage->setPosition(bImage->getPosition().x, newHeight-bImage->getHeight());	
 	rImage->setPosition(newWidth-rImage->getWidth(),rImage->getPosition().y);
 	rImage->setPosition(newWidth-rImage->getWidth(),rImage->getPosition().y);
-	
-	setWidth(newWidth);
-	setHeight(newHeight);
-	
+		
 	this->rebuildTransformMatrix();
 	this->rebuildTransformMatrix();
 }
 }
 
 

+ 1 - 1
Modules/Contents/UI/Source/PolyUIComboBox.cpp

@@ -144,7 +144,7 @@ UIComboBoxItem *UIComboBox::getSelectedItem() {
 }
 }
 
 
 void UIComboBox::toggleDropDown() {
 void UIComboBox::toggleDropDown() {
-	Vector2 screenPos = this->getScreenPosition();
+	Vector2 screenPos = this->getScreenPositionForMainCamera();
 	dropDownMenu = globalMenu->showMenu(screenPos.x, screenPos.y, getWidth());
 	dropDownMenu = globalMenu->showMenu(screenPos.x, screenPos.y, getWidth());
 	
 	
 	for(int i=0; i < items.size(); i++) {
 	for(int i=0; i < items.size(); i++) {

+ 8 - 1
Modules/Contents/UI/Source/PolyUIElement.cpp

@@ -26,6 +26,9 @@ using namespace Polycode;
 
 
 UIImage::UIImage(String imagePath) : UIElement() {
 UIImage::UIImage(String imagePath) : UIElement() {
 	image = new SceneImage(imagePath);
 	image = new SceneImage(imagePath);
+	image->setAnchorPoint(-1.0, -1.0, 0.0);
+	image->depthTest = false;
+	image->depthWrite = false;		
 	addChild(image);
 	addChild(image);
 	setWidth(image->bBox.x);
 	setWidth(image->bBox.x);
 	setHeight(image->bBox.y);	
 	setHeight(image->bBox.y);	
@@ -43,7 +46,9 @@ UIElement::UIElement() : Entity() {
 	focusable = false;
 	focusable = false;
 	focusParent = NULL;
 	focusParent = NULL;
 	hasDragLimits = false;
 	hasDragLimits = false;
-	dragged = false;	
+	dragged = false;
+	depthTest = false;
+	depthWrite = false;			
 }
 }
 
 
 UIElement::UIElement(Number width, Number height) : Entity() {
 UIElement::UIElement(Number width, Number height) : Entity() {
@@ -52,6 +57,8 @@ UIElement::UIElement(Number width, Number height) : Entity() {
 	focusParent = NULL;
 	focusParent = NULL;
 	hasDragLimits = false;	
 	hasDragLimits = false;	
 	dragged = false;	
 	dragged = false;	
+	depthTest = false;
+	depthWrite = false;		
 	setWidth(width);
 	setWidth(width);
 	setHeight(height);
 	setHeight(height);
 }
 }

+ 1 - 1
Modules/Contents/UI/Source/PolyUIMenu.cpp

@@ -168,7 +168,7 @@ void UIMenu::fitToScreenVertical() {
 	// Make sure the entity doesn't go past the bottom of the screen.
 	// Make sure the entity doesn't go past the bottom of the screen.
 	if(dropDownBox->getHeight() < CoreServices::getInstance()->getCore()->getYRes()) {
 	if(dropDownBox->getHeight() < CoreServices::getInstance()->getCore()->getYRes()) {
 		// If the entity is as high as the screen, no point trying to fit it in vertically.
 		// If the entity is as high as the screen, no point trying to fit it in vertically.
-		Vector2 screenPos = this->getScreenPosition();
+		Vector2 screenPos = this->getScreenPositionForMainCamera();
 		Number exceedScreenBottom = screenPos.y + dropDownBox->getHeight() - CoreServices::getInstance()->getCore()->getYRes();
 		Number exceedScreenBottom = screenPos.y + dropDownBox->getHeight() - CoreServices::getInstance()->getCore()->getYRes();
 		if(exceedScreenBottom > 0) {
 		if(exceedScreenBottom > 0) {
 			this->setPosition(this->getPosition().x, this->getPosition().y - exceedScreenBottom);
 			this->setPosition(this->getPosition().x, this->getPosition().y - exceedScreenBottom);

+ 1 - 1
Modules/Contents/UI/Source/PolyUIScrollContainer.cpp

@@ -163,7 +163,7 @@ void UIScrollContainer::scrollHorizontal(Number amount) {
 
 
 
 
 void UIScrollContainer::Update() {
 void UIScrollContainer::Update() {
-	Vector2 pos = getScreenPosition();
+	Vector2 pos = getScreenPositionForMainCamera();
 	scissorBox.setRect(pos.x, pos.y, getWidth(), getHeight());
 	scissorBox.setRect(pos.x, pos.y, getWidth(), getHeight());
 }
 }
 
 

+ 1 - 1
Modules/Contents/UI/Source/PolyUITextInput.cpp

@@ -2148,7 +2148,7 @@ void UITextInput::Update() {
 	}
 	}
 	linesToDelete.clear();
 	linesToDelete.clear();
 
 
-	textContainer->scissorBox.setRect(textContainer->getScreenPosition().x, textContainer->getScreenPosition().y, textContainer->getWidth(), textContainer->getHeight() + padding);
+	textContainer->scissorBox.setRect(textContainer->getScreenPositionForMainCamera().x, textContainer->getScreenPositionForMainCamera().y, textContainer->getWidth(), textContainer->getHeight() + padding);
 }
 }
 
 
 UITextInput::~UITextInput() {
 UITextInput::~UITextInput() {

+ 4 - 4
Modules/Contents/UI/Source/PolyUITree.cpp

@@ -79,9 +79,10 @@ UITree::UITree(String icon, String text, Number treeWidth, Number treeOffset) :
 	selection->visible = false;
 	selection->visible = false;
 	addChild(selection);
 	addChild(selection);
 	arrowIconImage = new SceneImage(arrowIcon.c_str());
 	arrowIconImage = new SceneImage(arrowIcon.c_str());
-	arrowIconImage->setPosition(cellPadding,(cellHeight-arrowIconImage->getHeight())/2.0f);
+	arrowIconImage->setPosition(cellPadding + arrowIconImage->getWidth()/2.0,(cellHeight)/2.0f);	
 	addChild(arrowIconImage);
 	addChild(arrowIconImage);
 	iconImage = new SceneImage(icon.c_str());
 	iconImage = new SceneImage(icon.c_str());
+	iconImage->setAnchorPoint(-1.0, -1.0, 0.0);
 	addChild(iconImage);
 	addChild(iconImage);
 	iconImage->setPosition(arrowIconImage->getWidth()+(cellPadding*2),(cellHeight-iconImage->getHeight())/2.0f);
 	iconImage->setPosition(arrowIconImage->getWidth()+(cellPadding*2),(cellHeight-iconImage->getHeight())/2.0f);
 
 
@@ -95,8 +96,7 @@ UITree::UITree(String icon, String text, Number treeWidth, Number treeOffset) :
 	parent = NULL;
 	parent = NULL;
 	selectedNode = NULL;
 	selectedNode = NULL;
 	arrowIconImage->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
 	arrowIconImage->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);
-	arrowIconImage->processInputEvents = true;
-	
+	arrowIconImage->processInputEvents = true;	
 	
 	
 	bgBox->addEventListener(this, InputEvent::EVENT_MOUSEUP);
 	bgBox->addEventListener(this, InputEvent::EVENT_MOUSEUP);
 	bgBox->addEventListener(this, InputEvent::EVENT_MOUSEUP_OUTSIDE);	
 	bgBox->addEventListener(this, InputEvent::EVENT_MOUSEUP_OUTSIDE);	
@@ -308,7 +308,7 @@ void UITree::clearTree() {
 }
 }
 
 
 void UITree::Update() {
 void UITree::Update() {
-	arrowIconImage->setRoll(handleRotation);
+	arrowIconImage->setRoll(-handleRotation);
 	if(treeChildren.size() > 0)
 	if(treeChildren.size() > 0)
 		arrowIconImage->visible = true;
 		arrowIconImage->visible = true;
 	else
 	else

+ 3 - 1
Modules/Contents/UI/Source/PolyUITreeContainer.cpp

@@ -82,6 +82,8 @@ void UITreeContainer::Resize(Number width, Number height) {
 //	width = x;
 //	width = x;
 	//	height = y;
 	//	height = y;
 	setHitbox(width, height);
 	setHitbox(width, height);
+	setWidth(width);
+	setHeight(height);
 }
 }
 
 
 void UITreeContainer::handleEvent(Event *event) {
 void UITreeContainer::handleEvent(Event *event) {
@@ -239,7 +241,7 @@ void UITreeContainer::onKeyDown(PolyKEY key, wchar_t charCode) {
 
 
 void UITreeContainer::scrollToNode(UITree *node, bool showAtTop) {
 void UITreeContainer::scrollToNode(UITree *node, bool showAtTop) {
 	
 	
-	Number nodeY = node->getScreenPosition().y - getRootNode()->getScreenPosition().y;
+	Number nodeY = node->getScreenPositionForMainCamera().y - getRootNode()->getScreenPositionForMainCamera().y;
 	Number contentHeight = mainContainer->getContentSize().y;
 	Number contentHeight = mainContainer->getContentSize().y;
 	Number scrollHeight = contentHeight - mainContainer->getHeight();
 	Number scrollHeight = contentHeight - mainContainer->getHeight();
 	Number viewTop = (contentHeight - mainContainer->getHeight()) * mainContainer->getVScrollBar()->getScrollValue();
 	Number viewTop = (contentHeight - mainContainer->getHeight()) * mainContainer->getVScrollBar()->getScrollValue();