Преглед изворни кода

Merge pull request #355 from samiamwork/cleanup_and_screenentity_2

Remove need for parentAdjust in ScreenEntity and add UIMenuDivider (with scissor fixed)
Ivan Safrin пре 12 година
родитељ
комит
f0d7a3b15a
53 измењених фајлова са 505 додато и 432 уклоњено
  1. 5 1
      Bindings/Scripts/create_lua_library/CppHeaderParser.py
  2. 5 5
      Core/Contents/Include/PolyEntity.h
  3. 3 0
      Core/Contents/Include/PolyGlobals.h
  4. 4 4
      Core/Contents/Include/PolyParticleEmitter.h
  5. 31 0
      Core/Contents/Include/PolyRectangle.h
  6. 14 13
      Core/Contents/Include/PolyScreenEntity.h
  7. 2 2
      Core/Contents/Include/PolyScreenEntityInstance.h
  8. 2 2
      Core/Contents/Include/PolyScreenImage.h
  9. 2 2
      Core/Contents/Include/PolyScreenLabel.h
  10. 2 2
      Core/Contents/Include/PolyScreenShape.h
  11. 2 2
      Core/Contents/Include/PolyScreenSound.h
  12. 2 2
      Core/Contents/Include/PolyScreenSprite.h
  13. 11 27
      Core/Contents/Source/PolyEntity.cpp
  14. 2 2
      Core/Contents/Source/PolyGLES1Renderer.cpp
  15. 2 2
      Core/Contents/Source/PolyGLRenderer.cpp
  16. 0 1
      Core/Contents/Source/PolyGLSLShader.cpp
  17. 1 1
      Core/Contents/Source/PolyGLSLShaderModule.cpp
  18. 4 4
      Core/Contents/Source/PolyParticleEmitter.cpp
  19. 22 0
      Core/Contents/Source/PolyRectangle.cpp
  20. 168 217
      Core/Contents/Source/PolyScreenEntity.cpp
  21. 2 2
      Core/Contents/Source/PolyScreenEntityInstance.cpp
  22. 5 5
      Core/Contents/Source/PolyScreenImage.cpp
  23. 3 3
      Core/Contents/Source/PolyScreenLabel.cpp
  24. 4 4
      Core/Contents/Source/PolyScreenShape.cpp
  25. 2 2
      Core/Contents/Source/PolyScreenSound.cpp
  26. 2 2
      Core/Contents/Source/PolyScreenSprite.cpp
  27. 80 17
      IDE/Build/Mac OS X/English.lproj/MainMenu.xib
  28. 4 24
      IDE/Build/Mac OS X/Polycode.xcodeproj/project.pbxproj
  29. 5 9
      IDE/Build/Mac OS X/PolycodeAppDelegate.h
  30. 8 0
      IDE/Build/Mac OS X/PolycodeAppDelegate.m
  31. 0 1
      IDE/Contents/Source/ExampleBrowserWindow.cpp
  32. 0 1
      IDE/Contents/Source/NewFileWindow.cpp
  33. 0 1
      IDE/Contents/Source/NewProjectWindow.cpp
  34. 0 1
      IDE/Contents/Source/PolycodeConsole.cpp
  35. 0 3
      IDE/Contents/Source/PolycodeProject.cpp
  36. 6 6
      IDE/Contents/Source/PolycodeProjectBrowser.cpp
  37. 0 1
      IDE/Contents/Source/PolycodeRemoteDebugger.cpp
  38. 9 9
      IDE/Contents/Source/PolycodeScreenEditor.cpp
  39. 0 1
      IDE/Contents/Source/PolycodeTextEditor.cpp
  40. 0 1
      IDE/Contents/Source/TextureBrowser.cpp
  41. 2 2
      Modules/Contents/UI/Include/PolyUIBox.h
  42. 2 1
      Modules/Contents/UI/Include/PolyUIHScrollBar.h
  43. 22 0
      Modules/Contents/UI/Include/PolyUIMenu.h
  44. 4 1
      Modules/Contents/UI/Include/PolyUITree.h
  45. 4 1
      Modules/Contents/UI/Include/PolyUIVScrollBar.h
  46. 1 1
      Modules/Contents/UI/Source/PolyUIBox.cpp
  47. 1 1
      Modules/Contents/UI/Source/PolyUIHScrollBar.cpp
  48. 48 8
      Modules/Contents/UI/Source/PolyUIMenu.cpp
  49. 2 2
      Modules/Contents/UI/Source/PolyUIScrollContainer.cpp
  50. 2 2
      Modules/Contents/UI/Source/PolyUITextInput.cpp
  51. 1 1
      Modules/Contents/UI/Source/PolyUITree.cpp
  52. 1 1
      Modules/Contents/UI/Source/PolyUIVScrollBar.cpp
  53. 1 29
      Player/Contents/Source/PolycodePlayer.cpp

+ 5 - 1
Bindings/Scripts/create_lua_library/CppHeaderParser.py

@@ -1974,7 +1974,11 @@ class CppHeader( _CppHeader ):
             num_newlines = len(filter(lambda a: a=="\n", m))
             num_newlines = len(filter(lambda a: a=="\n", m))
             headerFileStr = headerFileStr.replace(m, "\n" * num_newlines)        
             headerFileStr = headerFileStr.replace(m, "\n" * num_newlines)        
         headerFileStr = re.sub(r'extern[ ]+"[Cc]"[ ]*', "", headerFileStr)
         headerFileStr = re.sub(r'extern[ ]+"[Cc]"[ ]*', "", headerFileStr)
-                
+
+        #Filter out "using" statements since they aren't properly handled currently
+        # TODO: properly handle "using" statements
+        headerFileStr = re.sub(r'using[\t ]+[^\n\r]+', "", headerFileStr)
+
         self.braceDepth = 0
         self.braceDepth = 0
         lex.lex()
         lex.lex()
         lex.input(headerFileStr)
         lex.input(headerFileStr)

+ 5 - 5
Core/Contents/Include/PolyEntity.h

@@ -86,12 +86,12 @@ namespace Polycode {
  			* @param ignoreEditorOnly If true, ignore all child entities where editorOnly is set to true (will still clone the entity you call Clone() on even if its editorOnly flag is set to true.
  			* @param ignoreEditorOnly If true, ignore all child entities where editorOnly is set to true (will still clone the entity you call Clone() on even if its editorOnly flag is set to true.
  			* @return The clone of the entity.
  			* @return The clone of the entity.
  			*/
  			*/
-			virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly);
+			virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly) const;
 
 
 			/**
 			/**
  			* This method must be implemented by all subvlasses implementing Clone.
  			* This method must be implemented by all subvlasses implementing Clone.
  			*/
  			*/
-			virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly);
+			virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const;
 		
 		
 		
 		
 			// ----------------------------------------------------------------------------------------------------------------
 			// ----------------------------------------------------------------------------------------------------------------
@@ -603,7 +603,7 @@ namespace Polycode {
 			* Returns the user data pointer.
 			* Returns the user data pointer.
 			* @return User data pointer
 			* @return User data pointer
 			*/			
 			*/			
-			void *getUserData();
+			void *getUserData() const;
 				
 				
 			/**
 			/**
 			* Sets the entity's blending mode.
 			* Sets the entity's blending mode.
@@ -612,8 +612,8 @@ namespace Polycode {
 			*/
 			*/
 			void setBlendingMode(int newBlendingMode);
 			void setBlendingMode(int newBlendingMode);
 			
 			
-			Entity *getEntityById(String id, bool recursive);
-			std::vector<Entity*> getEntitiesByTag(String tag, bool recursive);
+			Entity *getEntityById(String id, bool recursive) const;
+			std::vector<Entity*> getEntitiesByTag(String tag, bool recursive) const;
 						
 						
 			Vector3 getChildCenter() const;
 			Vector3 getChildCenter() const;
 			
 			

+ 3 - 0
Core/Contents/Include/PolyGlobals.h

@@ -39,6 +39,9 @@ THE SOFTWARE.
 	#pragma warning(disable:4996)
 	#pragma warning(disable:4996)
 	#pragma warning(disable:4309)
 	#pragma warning(disable:4309)
 	#define NULL 0
 	#define NULL 0
+	// Prevent windows.h includes from generating min/max macros that
+	// clash with the templates in <algorithm>
+	#define NOMINMAX
 
 
 
 
 #endif
 #endif

+ 4 - 4
Core/Contents/Include/PolyParticleEmitter.h

@@ -228,7 +228,7 @@ namespace Polycode {
 			
 			
 			Number particleSize;
 			Number particleSize;
 			
 			
-			Texture *getParticleTexture();
+			Texture *getParticleTexture() const;
 			
 			
 			void setParticleTexture(Texture *texture);
 			void setParticleTexture(Texture *texture);
 		
 		
@@ -242,7 +242,7 @@ namespace Polycode {
 							
 							
 			int emitterType;
 			int emitterType;
 			
 			
-			bool getIgnoreParentMatrix();			
+			bool getIgnoreParentMatrix() const;
 			void setIgnoreParentMatrix(bool val);
 			void setIgnoreParentMatrix(bool val);
 											
 											
 		protected:
 		protected:
@@ -332,8 +332,8 @@ namespace Polycode {
 		ScreenParticleEmitter(const String& imageFile, int particleType, int emitterType, Number lifespan, unsigned int numParticles, Vector3 direction, Vector3 gravity, Vector3 deviation, Vector3 emitterRadius, Mesh *particleMesh = NULL, ScreenMesh *emitter = NULL);
 		ScreenParticleEmitter(const String& imageFile, int particleType, int emitterType, Number lifespan, unsigned int numParticles, Vector3 direction, Vector3 gravity, Vector3 deviation, Vector3 emitterRadius, Mesh *particleMesh = NULL, ScreenMesh *emitter = NULL);
 		virtual ~ScreenParticleEmitter();		
 		virtual ~ScreenParticleEmitter();		
 		
 		
-		virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly);
-		virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly);
+		virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly) const;
+		virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const;
 		
 		
 		/**
 		/**
 		* Returns the emitter (helper method for LUA).
 		* Returns the emitter (helper method for LUA).

+ 31 - 0
Core/Contents/Include/PolyRectangle.h

@@ -45,6 +45,37 @@ namespace Polycode {
 			*/						
 			*/						
 			void setRect(Number x, Number y, Number w, Number h);
 			void setRect(Number x, Number y, Number w, Number h);
 
 
+			/**
+			* Return a Rectangle formed by clipping this rectangle to the
+			* bounds of the passed rectangle.
+			*/
+			Rectangle Clipped(const Rectangle& rect) const;
+
+			/**
+			* Return the minimum X coordinate (the left edge).
+			*/
+			Number minX() const { return x; }
+
+			/**
+			* Return the maximum X coordinate (the right edge).
+			*/
+			Number maxX() const { return x + w; }
+
+			/**
+			 * Return the minimum Y coordinate (the top edge in a Y-down coordinate
+			 * system).
+			 */
+			Number minY() const { return y; }
+
+			/**
+			* Return the maximum Y coordinate (the bottom edge in a Y-down coordinate
+			* system).
+			*/
+			Number maxY() const { return y + h; }
+
+			bool operator==(const Rectangle& rect) const;
+			bool operator!=(const Rectangle& rect) const { return !(*this == rect); }
+
 			/**
 			/**
 			* X position
 			* X position
 			*/									
 			*/									

+ 14 - 13
Core/Contents/Include/PolyScreenEntity.h

@@ -53,8 +53,8 @@ class _PolyExport ScreenEntity : public Entity {
 		ScreenEntity();
 		ScreenEntity();
 		virtual ~ScreenEntity();
 		virtual ~ScreenEntity();
 		
 		
-		virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly);
-		virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly);
+		virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly) const;
+		virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const;
 
 
 		void addEntity(Entity *newChild);
 		void addEntity(Entity *newChild);
 		
 		
@@ -98,11 +98,11 @@ class _PolyExport ScreenEntity : public Entity {
 		*/						
 		*/						
 		Number getRotation() const;
 		Number getRotation() const;
 			
 			
-		MouseEventResult _onMouseDown(Number x, Number y, int mouseButton, int timestamp, Vector2 parentAdjust = Vector2(0,0));
-		MouseEventResult _onMouseUp(Number x, Number y, int mouseButton, int timestamp, Vector2 parentAdjust = Vector2(0,0));
-		MouseEventResult _onMouseMove(Number x, Number y, int timestamp, Vector2 parentAdjust = Vector2(0,0));
-		MouseEventResult _onMouseWheelUp(Number x, Number y, int timestamp, Vector2 parentAdjust = Vector2(0,0));
-		MouseEventResult _onMouseWheelDown(Number x, Number y, int timestamp, Vector2 parentAdjust = Vector2(0,0));
+		MouseEventResult _onMouseDown(Number x, Number y, int mouseButton, int timestamp);
+		MouseEventResult _onMouseUp(Number x, Number y, int mouseButton, int timestamp);
+		MouseEventResult _onMouseMove(Number x, Number y, int timestamp);
+		MouseEventResult _onMouseWheelUp(Number x, Number y, int timestamp);
+		MouseEventResult _onMouseWheelDown(Number x, Number y, int timestamp);
 	
 	
 		virtual void onMouseDown(Number x, Number y){}
 		virtual void onMouseDown(Number x, Number y){}
 		virtual void onMouseUp(Number x, Number y){}
 		virtual void onMouseUp(Number x, Number y){}
@@ -113,12 +113,13 @@ class _PolyExport ScreenEntity : public Entity {
 		void _onKeyDown(PolyKEY key, wchar_t charCode);	
 		void _onKeyDown(PolyKEY key, wchar_t charCode);	
 		void _onKeyUp(PolyKEY key, wchar_t charCode);	
 		void _onKeyUp(PolyKEY key, wchar_t charCode);	
 		
 		
-		Matrix4 getScreenConcatenatedMatrix();
+		Matrix4 getScreenConcatenatedMatrix() const;
 		
 		
 		virtual void onKeyDown(PolyKEY key, wchar_t charCode){}
 		virtual void onKeyDown(PolyKEY key, wchar_t charCode){}
 		virtual void onKeyUp(PolyKEY key, wchar_t charCode){}
 		virtual void onKeyUp(PolyKEY key, wchar_t charCode){}
 		
 		
-		bool hitTest(Number x, Number y);
+		bool hitTest(Number x, Number y) const;
+		bool hitTest(Vector2 v) const;
 	
 	
 		Matrix4 buildPositionMatrix();
 		Matrix4 buildPositionMatrix();
 		void adjustMatrixForChildren();
 		void adjustMatrixForChildren();
@@ -168,7 +169,7 @@ class _PolyExport ScreenEntity : public Entity {
 		 * Get the position mode.
 		 * Get the position mode.
 		 * @see setPositionMode()
 		 * @see setPositionMode()
 		 */
 		 */
-		int getPositionMode();
+		int getPositionMode() const;
 
 
 		/**
 		/**
 		 * Set a rectangle to which dragging will be restricted.
 		 * Set a rectangle to which dragging will be restricted.
@@ -273,7 +274,7 @@ class _PolyExport ScreenEntity : public Entity {
 		 * Note: Make sure only entities of type ScreenEntity have the tag you're
 		 * Note: Make sure only entities of type ScreenEntity have the tag you're
 		 *       querying, or otherwise you will be treating an Entity as ScreenEntity.
 		 *       querying, or otherwise you will be treating an Entity as ScreenEntity.
 		 */
 		 */
-		ScreenEntity *getScreenEntityById(String id, bool recursive);
+		ScreenEntity *getScreenEntityById(String id, bool recursive) const;
 
 
 		/**
 		/**
 		 * Does the same as getEntitiesByID, but casts each result to ScreenEntity.
 		 * Does the same as getEntitiesByID, but casts each result to ScreenEntity.
@@ -281,7 +282,7 @@ class _PolyExport ScreenEntity : public Entity {
 		 * Note: Make sure only entities of type ScreenEntity have the tag you're
 		 * Note: Make sure only entities of type ScreenEntity have the tag you're
 		 *       querying, or otherwise you will be treating an Entity as ScreenEntity.
 		 *       querying, or otherwise you will be treating an Entity as ScreenEntity.
 		 */
 		 */
-		std::vector<ScreenEntity*> getScreenEntitiesByTag(String tag, bool recursive);
+		std::vector<ScreenEntity*> getScreenEntitiesByTag(String tag, bool recursive) const;
 		
 		
 		/**
 		/**
 		* If set to true, will block mouse events for underlaying entities.
 		* If set to true, will block mouse events for underlaying entities.
@@ -299,7 +300,7 @@ class _PolyExport ScreenEntity : public Entity {
 		 * Get the hitbox of this ScreenEntity.
 		 * Get the hitbox of this ScreenEntity.
 		 * @see setHitBox()
 		 * @see setHitBox()
 		 */
 		 */
-		Rectangle getHitbox();
+		Rectangle getHitbox() const;
 
 
 
 
 		void setHitbox(Number width, Number height);
 		void setHitbox(Number width, Number height);

+ 2 - 2
Core/Contents/Include/PolyScreenEntityInstance.h

@@ -48,8 +48,8 @@ class ScreenEntityInstance : public ScreenEntity {
 
 
 		virtual ~ScreenEntityInstance();
 		virtual ~ScreenEntityInstance();
 	
 	
-		virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly);
-		virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly);
+		virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly) const;
+		virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const;
 		
 		
 		void reloadEntityInstance();
 		void reloadEntityInstance();
 
 

+ 2 - 2
Core/Contents/Include/PolyScreenImage.h

@@ -63,8 +63,8 @@ namespace Polycode {
 		
 		
 		virtual ~ScreenImage();
 		virtual ~ScreenImage();
 		
 		
-		virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly);
-		virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly);
+		virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly) const;
+		virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const;
 
 
 		/**
 		/**
 		* Changes which part of the image is displayed.
 		* Changes which part of the image is displayed.

+ 2 - 2
Core/Contents/Include/PolyScreenLabel.h

@@ -45,8 +45,8 @@ namespace Polycode {
 			ScreenLabel(const String& text, int size, const String& fontName = "sans", int amode = 0, bool premultiplyAlpha = false);
 			ScreenLabel(const String& text, int size, const String& fontName = "sans", int amode = 0, bool premultiplyAlpha = false);
 			virtual ~ScreenLabel();		
 			virtual ~ScreenLabel();		
 		
 		
-			virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly);
-			virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly);
+			virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly) const;
+			virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const;
 					
 					
 			/**
 			/**
 			* Sets a new text to the screen label.
 			* Sets a new text to the screen label.

+ 2 - 2
Core/Contents/Include/PolyScreenShape.h

@@ -44,8 +44,8 @@ namespace Polycode {
 			*/
 			*/
 			ScreenShape(int shapeType, Number option1=0, Number option2=0, Number option3=0, Number option4=0);
 			ScreenShape(int shapeType, Number option1=0, Number option2=0, Number option3=0, Number option4=0);
 		
 		
-			virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly);
-			virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly);
+			virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly) const;
+			virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const;
 				
 				
 			virtual ~ScreenShape();
 			virtual ~ScreenShape();
 			void Render();
 			void Render();

+ 2 - 2
Core/Contents/Include/PolyScreenSound.h

@@ -47,8 +47,8 @@ namespace Polycode {
 			ScreenSound(const String& fileName, Number referenceDistance, Number maxDistance);
 			ScreenSound(const String& fileName, Number referenceDistance, Number maxDistance);
 			virtual ~ScreenSound();			
 			virtual ~ScreenSound();			
 
 
-			virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly);
-			virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly);
+			virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly) const;
+			virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const;
 
 
 			void Update();			
 			void Update();			
 			
 			

+ 2 - 2
Core/Contents/Include/PolyScreenSprite.h

@@ -75,8 +75,8 @@ class _PolyExport ScreenSprite : public ScreenShape
 		
 		
 		virtual ~ScreenSprite();
 		virtual ~ScreenSprite();
 		
 		
-		virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly);
-		virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly);
+		virtual Entity *Clone(bool deepClone, bool ignoreEditorOnly) const;
+		virtual void applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const;
 
 
 		/**
 		/**
 		* Adds a new animation to the sprite. Animations are added by specifying a list of frame indexes and then can be played back by the specified name.
 		* Adds a new animation to the sprite. Animations are added by specifying a list of frame indexes and then can be played back by the specified name.

+ 11 - 27
Core/Contents/Source/PolyEntity.cpp

@@ -63,7 +63,7 @@ Entity::Entity() : EventDispatcher() {
 	tags = NULL;
 	tags = NULL;
 }
 }
 
 
-Entity *Entity::getEntityById(String id, bool recursive) {
+Entity *Entity::getEntityById(String id, bool recursive) const {
 	for(int i=0;i<children.size();i++) {
 	for(int i=0;i<children.size();i++) {
 		if(children[i]->id == id) {
 		if(children[i]->id == id) {
 			return children[i];
 			return children[i];
@@ -79,13 +79,13 @@ Entity *Entity::getEntityById(String id, bool recursive) {
 	return NULL;
 	return NULL;
 }
 }
 
 
-Entity *Entity::Clone(bool deepClone, bool ignoreEditorOnly) {
+Entity *Entity::Clone(bool deepClone, bool ignoreEditorOnly) const {
 	Entity *newEntity = new Entity();
 	Entity *newEntity = new Entity();
 	applyClone(newEntity, deepClone, ignoreEditorOnly);
 	applyClone(newEntity, deepClone, ignoreEditorOnly);
 	return newEntity;
 	return newEntity;
 }
 }
 
 
-void Entity::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) {
+void Entity::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const {
 	clone->ownsChildren = ownsChildren;
 	clone->ownsChildren = ownsChildren;
 	clone->position = position;
 	clone->position = position;
 	clone->rotation = rotation;
 	clone->rotation = rotation;
@@ -139,7 +139,7 @@ void Entity::setOwnsChildrenRecursive(bool val) {
 	}
 	}
 }
 }
 
 
-std::vector<Entity*> Entity::getEntitiesByTag(String tag, bool recursive) {
+std::vector<Entity*> Entity::getEntitiesByTag(String tag, bool recursive) const {
 
 
 	std::vector<Entity*> retVector;
 	std::vector<Entity*> retVector;
 
 
@@ -162,7 +162,7 @@ void Entity::setUserData(void *userData) {
 	this->userData = userData;
 	this->userData = userData;
 }
 }
 
 
-void *Entity::getUserData() {
+void *Entity::getUserData() const {
 	return userData;
 	return userData;
 }
 }
 
 
@@ -405,31 +405,15 @@ void Entity::transformAndRender() {
 		isScissorEnabled = renderer->isScissorEnabled();
 		isScissorEnabled = renderer->isScissorEnabled();
 		oldScissorBox = renderer->getScissorBox();
 		oldScissorBox = renderer->getScissorBox();
 		renderer->enableScissor(true);
 		renderer->enableScissor(true);
-		
-		Polycode::Rectangle finalScrissorBox = scissorBox;		
-		
-		// make sure that our scissor box is constrained to the parent one if it exists
-		if(isScissorEnabled) {
-			if(finalScrissorBox.x < oldScissorBox.x)
-				finalScrissorBox.x = oldScissorBox.x;
-			if(finalScrissorBox.x > oldScissorBox.x + oldScissorBox.w)
-				finalScrissorBox.x = oldScissorBox.x + oldScissorBox.w;
-
-				
-			if(finalScrissorBox.x+finalScrissorBox.w > oldScissorBox.x + oldScissorBox.w)
-				finalScrissorBox.w = oldScissorBox.x + oldScissorBox.w - finalScrissorBox.x;
 
 
-			if(finalScrissorBox.y < oldScissorBox.y)
-				finalScrissorBox.y = oldScissorBox.y;
-			if(finalScrissorBox.y > oldScissorBox.y + oldScissorBox.h)
-				finalScrissorBox.y = oldScissorBox.y + oldScissorBox.h;
-
-			if(finalScrissorBox.y+finalScrissorBox.h > oldScissorBox.y + oldScissorBox.h)
-				finalScrissorBox.h = oldScissorBox.y + oldScissorBox.h - finalScrissorBox.y;
+		Rectangle finalScissorBox = scissorBox;
 
 
+		// make sure that our scissor box is constrained to the parent one if it exists
+		if(isScissorEnabled) {
+			finalScissorBox = finalScissorBox.Clipped(renderer->getScissorBox());
 		}
 		}
-		
-		renderer->setScissorBox(finalScrissorBox);
+
+		renderer->setScissorBox(finalScissorBox);
 	}
 	}
 		
 		
 	renderer->pushMatrix();
 	renderer->pushMatrix();

+ 2 - 2
Core/Contents/Source/PolyGLES1Renderer.cpp

@@ -47,7 +47,7 @@ void OpenGLES1Renderer::Resize(int xRes, int yRes) {
     glLoadIdentity();
     glLoadIdentity();
 	gluPerspective(fov,(GLfloat)xRes/(GLfloat)yRes,nearPlane,farPlane);
 	gluPerspective(fov,(GLfloat)xRes/(GLfloat)yRes,nearPlane,farPlane);
 	glViewport(0, 0, xRes, yRes);
 	glViewport(0, 0, xRes, yRes);
-	glScissor(0, 0, xRes, yRes);
+	setScissorBox(0, 0, xRex, yRes);
 	
 	
 	glMatrixMode(GL_MODELVIEW);
 	glMatrixMode(GL_MODELVIEW);
 	glLineWidth(1);
 	glLineWidth(1);
@@ -707,4 +707,4 @@ void OpenGLES1Renderer::EndRender() {
 
 
 OpenGLES1Renderer::~OpenGLES1Renderer() {
 OpenGLES1Renderer::~OpenGLES1Renderer() {
 	
 	
-}
+}

+ 2 - 2
Core/Contents/Source/PolyGLRenderer.cpp

@@ -168,7 +168,7 @@ void OpenGLRenderer::Resize(int xRes, int yRes) {
     glLoadIdentity();
     glLoadIdentity();
 	gluPerspective(fov,(GLfloat)xRes/(GLfloat)yRes,nearPlane,farPlane);
 	gluPerspective(fov,(GLfloat)xRes/(GLfloat)yRes,nearPlane,farPlane);
 	glViewport(0, 0, xRes, yRes);
 	glViewport(0, 0, xRes, yRes);
-	glScissor(0, 0, xRes, yRes);
+	setScissorBox(Rectangle(0, 0, xRes, yRes));
 	
 	
 	glMatrixMode(GL_MODELVIEW);
 	glMatrixMode(GL_MODELVIEW);
 	glLineWidth(1);
 	glLineWidth(1);
@@ -188,7 +188,7 @@ void OpenGLRenderer::Resize(int xRes, int yRes) {
 	GLint numBuffers;
 	GLint numBuffers;
 	glGetIntegerv(GL_MAX_DRAW_BUFFERS, &numBuffers);
 	glGetIntegerv(GL_MAX_DRAW_BUFFERS, &numBuffers);
 //	Logger::log("MAX_DRAW_BUFFERS: %d \n", numBuffers);
 //	Logger::log("MAX_DRAW_BUFFERS: %d \n", numBuffers);
-	
+
 }
 }
 
 
 void OpenGLRenderer::setDepthFunction(int depthFunction) {
 void OpenGLRenderer::setDepthFunction(int depthFunction) {

+ 0 - 1
Core/Contents/Source/PolyGLSLShader.cpp

@@ -196,7 +196,6 @@ void GLSLShader::linkProgram() {
 		char name[128];
 		char name[128];
 		glGetActiveUniform(shader_id, GLuint(i), sizeof(name)-1, &name_len, &num, &type, name );
 		glGetActiveUniform(shader_id, GLuint(i), sizeof(name)-1, &name_len, &num, &type, name );
 		name[name_len] = 0;
 		name[name_len] = 0;
-		GLuint location = glGetUniformLocation( shader_id, name );
 		
 		
 		if(!(String(name).find("gl_") == 0)) {
 		if(!(String(name).find("gl_") == 0)) {
 		switch(type) {
 		switch(type) {

+ 1 - 1
Core/Contents/Source/PolyGLSLShaderModule.cpp

@@ -132,7 +132,7 @@ Shader *GLSLShaderModule::createShader(String name, String vpName, String fpName
 }
 }
 
 
 Shader *GLSLShaderModule::createShader(TiXmlNode *node) {
 Shader *GLSLShaderModule::createShader(TiXmlNode *node) {
-	TiXmlNode* pChild, *pChild2, *pChild3;	
+	TiXmlNode* pChild;
 	GLSLProgram *vp = NULL;
 	GLSLProgram *vp = NULL;
 	GLSLProgram *fp = NULL;
 	GLSLProgram *fp = NULL;
 	GLSLShader *retShader = NULL;
 	GLSLShader *retShader = NULL;

+ 4 - 4
Core/Contents/Source/PolyParticleEmitter.cpp

@@ -96,13 +96,13 @@ ScreenParticleEmitter::~ScreenParticleEmitter(){
 	}
 	}
 }
 }
 
 
-Entity *ScreenParticleEmitter::Clone(bool deepClone, bool ignoreEditorOnly) {
+Entity *ScreenParticleEmitter::Clone(bool deepClone, bool ignoreEditorOnly) const {
 	ScreenParticleEmitter *newEmitter = new ScreenParticleEmitter("default.png", Particle::BILLBOARD_PARTICLE, ParticleEmitter::CONTINUOUS_EMITTER, 2.0, 0, Vector3(0.0, -40.0, 0.0), Vector3(0.0, 0.0, 0.0), Vector3(0.0, 0.0, 0.0), Vector3(10.0, 10.0, 0.0));
 	ScreenParticleEmitter *newEmitter = new ScreenParticleEmitter("default.png", Particle::BILLBOARD_PARTICLE, ParticleEmitter::CONTINUOUS_EMITTER, 2.0, 0, Vector3(0.0, -40.0, 0.0), Vector3(0.0, 0.0, 0.0), Vector3(0.0, 0.0, 0.0), Vector3(10.0, 10.0, 0.0));
 	applyClone(newEmitter, deepClone, ignoreEditorOnly);
 	applyClone(newEmitter, deepClone, ignoreEditorOnly);
 	return newEmitter;
 	return newEmitter;
 }
 }
 
 
-void ScreenParticleEmitter::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) {
+void ScreenParticleEmitter::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const {
 	ScreenParticleEmitter *_clone = (ScreenParticleEmitter*) clone;
 	ScreenParticleEmitter *_clone = (ScreenParticleEmitter*) clone;
 
 
 	_clone->emitterRadius = this->emitterRadius;
 	_clone->emitterRadius = this->emitterRadius;
@@ -214,7 +214,7 @@ ParticleEmitter::ParticleEmitter(const String& imageFile, Mesh *particleMesh, in
 	useScaleCurves = false;	
 	useScaleCurves = false;	
 }
 }
 
 
-bool ParticleEmitter::getIgnoreParentMatrix() {
+bool ParticleEmitter::getIgnoreParentMatrix() const {
 	return ignoreParentMatrix;
 	return ignoreParentMatrix;
 }
 }
 
 
@@ -226,7 +226,7 @@ void ParticleEmitter::setIgnoreParentMatrix(bool val) {
 }
 }
 
 
 
 
-Texture *ParticleEmitter::getParticleTexture() {
+Texture *ParticleEmitter::getParticleTexture() const {
 	return particleTexture;
 	return particleTexture;
 }
 }
 
 

+ 22 - 0
Core/Contents/Source/PolyRectangle.cpp

@@ -21,6 +21,7 @@
 */
 */
 
 
 #include "PolyRectangle.h"
 #include "PolyRectangle.h"
+#include <algorithm> // for min/max
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
@@ -30,3 +31,24 @@ void Rectangle::setRect(Number x, Number y, Number w, Number h) {
 	this->w = w;
 	this->w = w;
 	this->h = h;		
 	this->h = h;		
 }
 }
+
+Rectangle Rectangle::Clipped(const Rectangle& rect) const
+{
+	Rectangle result;
+
+	result.x = std::min(std::max(x, rect.x), rect.maxX());
+	result.w = std::max(std::min(maxX(), rect.maxX()), result.x) - result.x;
+
+	result.y = std::min(std::max(y, rect.y), rect.maxY());
+	result.h = std::max(std::min(maxY(), rect.maxY()), result.y) - result.y;
+
+	return result;
+}
+
+bool Rectangle::operator==(const Rectangle& rect) const
+{
+	if( x == rect.x && y == rect.y && w == rect.w && h == rect.h)
+		return true;
+
+	return false;
+}

+ 168 - 217
Core/Contents/Source/PolyScreenEntity.cpp

@@ -37,7 +37,7 @@ ScreenEntity::ScreenEntity() : Entity() {
 	color = Color(1.0f,1.0f,1.0f,1.0f);
 	color = Color(1.0f,1.0f,1.0f,1.0f);
 	width = 0;
 	width = 0;
 	height = 0;
 	height = 0;
-	setHitbox(1, 1);
+	setHitbox(0, 0);
 	backfaceCulled = false;
 	backfaceCulled = false;
 	positionMode = POSITION_TOPLEFT;
 	positionMode = POSITION_TOPLEFT;
 	mouseOver = false;
 	mouseOver = false;
@@ -67,13 +67,13 @@ ScreenEntity::ScreenEntity() : Entity() {
 	
 	
 }
 }
 
 
-Entity *ScreenEntity::Clone(bool deepClone, bool ignoreEditorOnly) {
+Entity *ScreenEntity::Clone(bool deepClone, bool ignoreEditorOnly) const {
 	ScreenEntity *newEntity = new ScreenEntity();
 	ScreenEntity *newEntity = new ScreenEntity();
 	applyClone(newEntity, deepClone, ignoreEditorOnly);
 	applyClone(newEntity, deepClone, ignoreEditorOnly);
 	return newEntity;
 	return newEntity;
 }
 }
 
 
-void ScreenEntity::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) {
+void ScreenEntity::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const {
 	Entity::applyClone(clone, deepClone, ignoreEditorOnly);
 	Entity::applyClone(clone, deepClone, ignoreEditorOnly);
 
 
 	ScreenEntity *_clone = (ScreenEntity*) clone;
 	ScreenEntity *_clone = (ScreenEntity*) clone;
@@ -272,31 +272,46 @@ bool isPointInsidePolygon2D(Polycode::Polygon *poly, const Vector2 &p) {
 }
 }
 
 
 
 
-bool ScreenEntity::hitTest(const Number x, const Number y) {
+bool ScreenEntity::hitTest(const Number x, const Number y) const {
 
 
 	Vector3 v;	
 	Vector3 v;	
 	Polygon testPoly;
 	Polygon testPoly;
+
+	// matrix will give the center of the entity
+	Matrix4 screenMatrix = getScreenConcatenatedMatrix();
+	if(positionMode == POSITION_TOPLEFT) {
+		// Translate hitbox so it matches the visible object bounds
+		// This is a bit of a hack because ScreenEntities are expected
+		// to rotate about their center and not their center point.
+		Matrix4 retMatrix;
+		retMatrix.setPosition(width/2.0, height/2.0, 0.0);
+		screenMatrix = screenMatrix * retMatrix;
+	}
 	
 	
-	Matrix4 transformMatrix = getConcatenatedMatrix();
 	v = Vector3(hit.x, hit.y, 0);
 	v = Vector3(hit.x, hit.y, 0);
-	v = transformMatrix * v;
+	v = screenMatrix * v;
 	testPoly.addVertex(v.x, v.y, 0.0);
 	testPoly.addVertex(v.x, v.y, 0.0);
 	
 	
 	v = Vector3(hit.x+hit.w, hit.y, 0);
 	v = Vector3(hit.x+hit.w, hit.y, 0);
-	v = transformMatrix * v;
+	v = screenMatrix * v;
 	testPoly.addVertex(v.x, v.y, 0.0);
 	testPoly.addVertex(v.x, v.y, 0.0);
 
 
 	v = Vector3(hit.x+hit.w, hit.y+hit.h, 0);
 	v = Vector3(hit.x+hit.w, hit.y+hit.h, 0);
-	v = transformMatrix * v;
+	v = screenMatrix * v;
 	testPoly.addVertex(v.x, v.y, 0.0);
 	testPoly.addVertex(v.x, v.y, 0.0);
 
 
 	v = Vector3(hit.x,hit.y+hit.h, 0);
 	v = Vector3(hit.x,hit.y+hit.h, 0);
-	v = transformMatrix * v;
+	v = screenMatrix * v;
 	testPoly.addVertex(v.x, v.y, 0.0);
 	testPoly.addVertex(v.x, v.y, 0.0);
 		
 		
 	return isPointInsidePolygon2D(&testPoly, Vector2(x,y));
 	return isPointInsidePolygon2D(&testPoly, Vector2(x,y));
 }
 }
 
 
+bool ScreenEntity::hitTest(Vector2 v) const
+{
+	return hitTest(v.x, v.y);
+}
+
 void ScreenEntity::setPositionMode(int newPositionMode) {
 void ScreenEntity::setPositionMode(int newPositionMode) {
 	positionMode = newPositionMode;
 	positionMode = newPositionMode;
 }
 }
@@ -315,7 +330,7 @@ void ScreenEntity::_onKeyUp(PolyKEY key, wchar_t charCode) {
 	}
 	}
 }
 }
 
 
-int ScreenEntity::getPositionMode() {
+int ScreenEntity::getPositionMode() const {
 	return positionMode;
 	return positionMode;
 }
 }
 
 
@@ -333,7 +348,7 @@ void ScreenEntity::clearDragLimits() {
 	dragLimits = NULL;
 	dragLimits = NULL;
 }
 }
 
 
-Rectangle ScreenEntity::getHitbox() {
+Rectangle ScreenEntity::getHitbox() const {
 	return hit;
 	return hit;
 }
 }
 
 
@@ -354,24 +369,23 @@ bool ScreenEntity::isDragged() {
 	return dragged;
 	return dragged;
 }
 }
 
 
-Matrix4 ScreenEntity::getScreenConcatenatedMatrix() {
+Matrix4 ScreenEntity::getScreenConcatenatedMatrix() const {
 	Matrix4 retMatrix = transformMatrix;
 	Matrix4 retMatrix = transformMatrix;
 	if(positionMode == POSITION_TOPLEFT) {
 	if(positionMode == POSITION_TOPLEFT) {
-		Vector3 pos = retMatrix.getPosition();
-		retMatrix.setPosition(pos.x + width/2.0, pos.y + height/2.0, 0);
+		retMatrix.setPosition(position.x, position.y, position.z);
 	}
 	}
 	
 	
 	if(parentEntity) {
 	if(parentEntity) {
-		return retMatrix * ((ScreenEntity*)parentEntity)->getScreenConcatenatedMatrix();		
+		return retMatrix * ((ScreenEntity*)parentEntity)->getScreenConcatenatedMatrix();
 	} else {
 	} else {
-		return retMatrix;	
-	}	
+		return retMatrix;
+	}
 }
 }
 
 
-MouseEventResult ScreenEntity::_onMouseMove(Number x, Number y, int timestamp, Vector2 parentAdjust) {
+MouseEventResult ScreenEntity::_onMouseMove(Number x, Number y, int timestamp) {
 
 
 	if(dragged) {
 	if(dragged) {
-		Vector3 localCoordinate = Vector3(x+(parentAdjust.x*2.0),y+(parentAdjust.y*2.0),0);				
+		Vector3 localCoordinate = Vector3(x,y,0);
 				
 				
 		if(parentEntity) {
 		if(parentEntity) {
 			Matrix4 inverse = ((ScreenEntity*)parentEntity)->getScreenConcatenatedMatrix().Inverse();
 			Matrix4 inverse = ((ScreenEntity*)parentEntity)->getScreenConcatenatedMatrix().Inverse();
@@ -390,133 +404,100 @@ MouseEventResult ScreenEntity::_onMouseMove(Number x, Number y, int timestamp, V
 				position.y = dragLimits->y + dragLimits->h;
 				position.y = dragLimits->y + dragLimits->h;
 		}
 		}
 	}
 	}
-	
 
 
 	MouseEventResult ret;
 	MouseEventResult ret;
 	ret.hit = false;
 	ret.hit = false;
 	ret.blocked = false;
 	ret.blocked = false;
 
 
-
 	if(processInputEvents && enabled) {
 	if(processInputEvents && enabled) {
-	if(hitTest(x+parentAdjust.x,y+parentAdjust.y)) {
-	
-	
-		Vector3 localCoordinate = Vector3(x+(parentAdjust.x*2.0),y+(parentAdjust.y*2.0),0);		
-		Matrix4 inverse = getConcatenatedMatrix().Inverse();
-		localCoordinate = inverse * localCoordinate;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.x += hit.w/2.0;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.y += hit.h/2.0;
+		if(hitTest(x,y)) {
 
 
+			Vector3 localCoordinate = Vector3(x,y,0);
+			Matrix4 inverse = getScreenConcatenatedMatrix().Inverse();
+			localCoordinate = inverse * localCoordinate;
 
 
-		
-		onMouseMove(localCoordinate.x,localCoordinate.y);
-		xmouse = localCoordinate.x;
-		ymouse = localCoordinate.y;
-		
-		dispatchEvent(new InputEvent(Vector2(localCoordinate.x,localCoordinate.y)-parentAdjust, timestamp), InputEvent::EVENT_MOUSEMOVE);
-		
-		if(!mouseOver) {
-				dispatchEvent(new InputEvent(Vector2(localCoordinate.x,localCoordinate.y)-parentAdjust, timestamp), InputEvent::EVENT_MOUSEOVER);
-				mouseOver = true;
-		}
-		ret.hit = true;
-		if(blockMouseInput) {
-			ret.blocked = true;
+			onMouseMove(localCoordinate.x,localCoordinate.y);
+			xmouse = localCoordinate.x;
+			ymouse = localCoordinate.y;
+
+			dispatchEvent(new InputEvent(Vector2(localCoordinate.x,localCoordinate.y), timestamp), InputEvent::EVENT_MOUSEMOVE);
+
+			if(!mouseOver) {
+					dispatchEvent(new InputEvent(Vector2(localCoordinate.x,localCoordinate.y), timestamp), InputEvent::EVENT_MOUSEOVER);
+					mouseOver = true;
+			}
+			ret.hit = true;
+			if(blockMouseInput) {
+				ret.blocked = true;
+			}
+
+		} else {
+			if(mouseOver) {
+
+				Vector3 localCoordinate = Vector3(x,y,0);
+				Matrix4 inverse = getScreenConcatenatedMatrix().Inverse();
+				localCoordinate = inverse * localCoordinate;
+
+				dispatchEvent(new InputEvent(Vector2(localCoordinate.x,localCoordinate.y), timestamp), InputEvent::EVENT_MOUSEOUT);
+				mouseOver = false;
+			}
 		}
 		}
 
 
-		
-	} else {
-		if(mouseOver) {
-		
-		Vector3 localCoordinate = Vector3(x+(parentAdjust.x*2.0),y+(parentAdjust.y*2.0),0);		
-		Matrix4 inverse = getConcatenatedMatrix().Inverse();
-		localCoordinate = inverse * localCoordinate;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.x += hit.w/2.0;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.y += hit.h/2.0;
-		
-		
-			dispatchEvent(new InputEvent(Vector2(localCoordinate.x,localCoordinate.y)-parentAdjust, timestamp), InputEvent::EVENT_MOUSEOUT);
-			mouseOver = false;
-		}		
-	}	
-
-		for(int i=children.size()-1;i>=0;i--) {			
-			Vector2 adjust = parentAdjust;
-			if(positionMode == POSITION_TOPLEFT)
-				adjust += Vector2(floor(width/2.0), floor(height/2.0));
-			
-			MouseEventResult childRes = ((ScreenEntity*)children[i])->_onMouseMove(x,y, timestamp, adjust);
+		for(int i=children.size()-1;i>=0;i--) {
+			MouseEventResult childRes = ((ScreenEntity*)children[i])->_onMouseMove(x,y, timestamp);
 			if(childRes.hit)
 			if(childRes.hit)
 				ret.hit = true;
 				ret.hit = true;
-			if(childRes.blocked)
+			if(childRes.blocked) {
 				ret.blocked = true;
 				ret.blocked = true;
-			if(childRes.blocked)
 				break;
 				break;
+			}
 		}
 		}
 	}
 	}
 	
 	
 	return ret;
 	return ret;
 }
 }
 
 
-MouseEventResult ScreenEntity::_onMouseUp(Number x, Number y, int mouseButton, int timestamp, Vector2 parentAdjust) {
+MouseEventResult ScreenEntity::_onMouseUp(Number x, Number y, int mouseButton, int timestamp) {
 	MouseEventResult ret;
 	MouseEventResult ret;
 	ret.hit = false;
 	ret.hit = false;
 	ret.blocked = false;
 	ret.blocked = false;
-
 	
 	
 	if(processInputEvents && enabled) {
 	if(processInputEvents && enabled) {
-	if(hitTest(x+parentAdjust.x,y+parentAdjust.y)) {
-		Vector3 localCoordinate = Vector3(x+(parentAdjust.x*2.0),y+(parentAdjust.y*2.0),0);
-		
-		Matrix4 inverse = getConcatenatedMatrix().Inverse();
-		localCoordinate = inverse * localCoordinate;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.x += hit.w/2.0;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.y += hit.h/2.0;
+		if(hitTest(x,y)) {
+			Vector3 localCoordinate = Vector3(x,y,0);
 
 
-		
-		onMouseUp(localCoordinate.x,localCoordinate.y);		
-		InputEvent *inputEvent = new InputEvent(Vector2(localCoordinate.x,localCoordinate.y)-parentAdjust, timestamp);		
-		inputEvent->mouseButton = mouseButton;
-		dispatchEvent(inputEvent, InputEvent::EVENT_MOUSEUP);
-		
-		ret.hit = true;
-		if(blockMouseInput) {
-			ret.blocked = true;
-		}
+			Matrix4 inverse = getScreenConcatenatedMatrix().Inverse();
+			localCoordinate = inverse * localCoordinate;
 
 
-	} else {
-		Vector3 localCoordinate = Vector3(x+(parentAdjust.x*2.0),y+(parentAdjust.y*2.0),0);
-		
-		Matrix4 inverse = getConcatenatedMatrix().Inverse();
-		localCoordinate = inverse * localCoordinate;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.x += hit.w/2.0;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.y += hit.h/2.0;
+			onMouseUp(localCoordinate.x,localCoordinate.y);
+			InputEvent *inputEvent = new InputEvent(Vector2(localCoordinate.x,localCoordinate.y), timestamp);
+			inputEvent->mouseButton = mouseButton;
+			dispatchEvent(inputEvent, InputEvent::EVENT_MOUSEUP);
 
 
-		
-		InputEvent *inputEvent = new InputEvent(Vector2(localCoordinate.x,localCoordinate.y)-parentAdjust, timestamp);		
-		inputEvent->mouseButton = mouseButton;
-		dispatchEvent(inputEvent, InputEvent::EVENT_MOUSEUP_OUTSIDE);	
-	}
+			ret.hit = true;
+			if(blockMouseInput) {
+				ret.blocked = true;
+			}
+
+		} else {
+			Vector3 localCoordinate = Vector3(x,y,0);
+
+			Matrix4 inverse = getScreenConcatenatedMatrix().Inverse();
+			localCoordinate = inverse * localCoordinate;
+
+			InputEvent *inputEvent = new InputEvent(Vector2(localCoordinate.x,localCoordinate.y), timestamp);
+			inputEvent->mouseButton = mouseButton;
+			dispatchEvent(inputEvent, InputEvent::EVENT_MOUSEUP_OUTSIDE);
+		}
 
 
-		for(int i=children.size()-1;i>=0;i--) {			
-			Vector2 adjust = parentAdjust;
-			if(positionMode == POSITION_TOPLEFT)
-				adjust += Vector2(floor(width/2.0), floor(height/2.0));
-			MouseEventResult childRes = ((ScreenEntity*)children[i])->_onMouseUp(x,y, mouseButton, timestamp, adjust);
+		for(int i=children.size()-1;i>=0;i--) {
+			MouseEventResult childRes = ((ScreenEntity*)children[i])->_onMouseUp(x,y, mouseButton, timestamp);
 			if(childRes.hit)
 			if(childRes.hit)
 				ret.hit = true;
 				ret.hit = true;
-			if(childRes.blocked)
+			if(childRes.blocked) {
 				ret.blocked = true;
 				ret.blocked = true;
-			if(childRes.blocked)
 				break;
 				break;
+			}
 			
 			
 		}
 		}
 	}
 	}
@@ -524,92 +505,75 @@ MouseEventResult ScreenEntity::_onMouseUp(Number x, Number y, int mouseButton, i
 	return ret;
 	return ret;
 }
 }
 
 
-MouseEventResult ScreenEntity::_onMouseWheelUp(Number x, Number y, int timestamp, Vector2 parentAdjust) {
+MouseEventResult ScreenEntity::_onMouseWheelUp(Number x, Number y, int timestamp) {
 
 
 	MouseEventResult ret;
 	MouseEventResult ret;
 	ret.hit = false;
 	ret.hit = false;
 	ret.blocked = false;
 	ret.blocked = false;
 	
 	
 	if(processInputEvents && enabled) {
 	if(processInputEvents && enabled) {
-	if(hitTest(x+parentAdjust.x,y+parentAdjust.y)) {
-		Vector3 localCoordinate = Vector3(x+(parentAdjust.x*2.0),y+(parentAdjust.y*2.0),0);
-		
-		Matrix4 inverse = getConcatenatedMatrix().Inverse();
-		localCoordinate = inverse * localCoordinate;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.x += hit.w/2.0;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.y += hit.h/2.0;
+		if(hitTest(x,y)) {
+			Vector3 localCoordinate = Vector3(x,y,0);
 
 
-		
-		onMouseWheelUp(localCoordinate.x,localCoordinate.y);
-		
-		InputEvent *inputEvent = new InputEvent(Vector2(localCoordinate.x,localCoordinate.y)-parentAdjust, timestamp);		
-		dispatchEvent(inputEvent, InputEvent::EVENT_MOUSEWHEEL_UP);
-		
-		ret.hit = true;
-		if(blockMouseInput) {
-			ret.blocked = true;
-		}
+			Matrix4 inverse = getScreenConcatenatedMatrix().Inverse();
+			localCoordinate = inverse * localCoordinate;
 
 
-	}
+			onMouseWheelUp(localCoordinate.x,localCoordinate.y);
+
+			InputEvent *inputEvent = new InputEvent(Vector2(localCoordinate.x,localCoordinate.y), timestamp);
+			dispatchEvent(inputEvent, InputEvent::EVENT_MOUSEWHEEL_UP);
 
 
-		for(int i=children.size()-1;i>=0;i--) {			
-			Vector2 adjust = parentAdjust;
-			if(positionMode == POSITION_TOPLEFT)
-				adjust += Vector2(floor(width/2.0), floor(height/2.0));
-			MouseEventResult childRes = ((ScreenEntity*)children[i])->_onMouseWheelUp(x,y, timestamp, adjust);
+			ret.hit = true;
+			if(blockMouseInput) {
+				ret.blocked = true;
+			}
+
+		}
+
+		for(int i=children.size()-1;i>=0;i--) {
+			MouseEventResult childRes = ((ScreenEntity*)children[i])->_onMouseWheelUp(x,y, timestamp);
 			if(childRes.hit)
 			if(childRes.hit)
 				ret.hit = true;
 				ret.hit = true;
-			if(childRes.blocked)
+			if(childRes.blocked) {
 				ret.blocked = true;
 				ret.blocked = true;
-			if(childRes.blocked)
 				break;
 				break;
+			}
 		}
 		}
 	}
 	}
 	return ret;	
 	return ret;	
 }
 }
 
 
-MouseEventResult ScreenEntity::_onMouseWheelDown(Number x, Number y, int timestamp, Vector2 parentAdjust) {
+MouseEventResult ScreenEntity::_onMouseWheelDown(Number x, Number y, int timestamp) {
 	MouseEventResult ret;
 	MouseEventResult ret;
 	ret.hit = false;
 	ret.hit = false;
 	ret.blocked = false;
 	ret.blocked = false;
 	
 	
 	if(processInputEvents && enabled) {
 	if(processInputEvents && enabled) {
-	if(hitTest(x+parentAdjust.x,y+parentAdjust.y)) {
-		Vector3 localCoordinate = Vector3(x+(parentAdjust.x*2.0),y+(parentAdjust.y*2.0),0);
-		
-		Matrix4 inverse = getConcatenatedMatrix().Inverse();
-		localCoordinate = inverse * localCoordinate;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.x += hit.w/2.0;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.y += hit.h/2.0;
+		if(hitTest(x,y)) {
+			Vector3 localCoordinate = Vector3(x,y,0);
 
 
-		
-		onMouseWheelDown(localCoordinate.x,localCoordinate.y);
-		
-		InputEvent *inputEvent = new InputEvent(Vector2(localCoordinate.x,localCoordinate.y)-parentAdjust, timestamp);		
-		dispatchEvent(inputEvent, InputEvent::EVENT_MOUSEWHEEL_DOWN);
-		
-		ret.hit = true;
-		if(blockMouseInput) {
-			ret.blocked = true;
+			Matrix4 inverse = getScreenConcatenatedMatrix().Inverse();
+			localCoordinate = inverse * localCoordinate;
+
+			onMouseWheelDown(localCoordinate.x,localCoordinate.y);
+
+			InputEvent *inputEvent = new InputEvent(Vector2(localCoordinate.x,localCoordinate.y), timestamp);
+			dispatchEvent(inputEvent, InputEvent::EVENT_MOUSEWHEEL_DOWN);
+
+			ret.hit = true;
+			if(blockMouseInput) {
+				ret.blocked = true;
+			}
 		}
 		}
-	}
 
 
-		for(int i=children.size()-1;i>=0;i--) {			
-			Vector2 adjust = parentAdjust;
-			if(positionMode == POSITION_TOPLEFT)
-				adjust += Vector2(floor(width/2.0), floor(height/2.0));
-			
-			MouseEventResult childRes = ((ScreenEntity*)children[i])->_onMouseWheelDown(x,y, timestamp, adjust);
+		for(int i=children.size()-1;i>=0;i--) {
+			MouseEventResult childRes = ((ScreenEntity*)children[i])->_onMouseWheelDown(x,y, timestamp);
 			if(childRes.hit)
 			if(childRes.hit)
 				ret.hit = true;
 				ret.hit = true;
-			if(childRes.blocked)
+			if(childRes.blocked) {
 				ret.blocked = true;
 				ret.blocked = true;
-			if(childRes.blocked)
 				break;
 				break;
+			}
 			
 			
 		}
 		}
 	}
 	}
@@ -617,68 +581,55 @@ MouseEventResult ScreenEntity::_onMouseWheelDown(Number x, Number y, int timesta
 	return ret;
 	return ret;
 }
 }
 
 
-
-MouseEventResult ScreenEntity::_onMouseDown(Number x, Number y, int mouseButton, int timestamp, Vector2 parentAdjust) {
+MouseEventResult ScreenEntity::_onMouseDown(Number x, Number y, int mouseButton, int timestamp) {
 	MouseEventResult ret;
 	MouseEventResult ret;
 	ret.hit = false;
 	ret.hit = false;
 	ret.blocked = false;
 	ret.blocked = false;
-			
+
 	if(processInputEvents && enabled) {
 	if(processInputEvents && enabled) {
-	if(hitTest(x+parentAdjust.x,y+parentAdjust.y)) {
-		Vector3 localCoordinate = Vector3(x+(parentAdjust.x*2.0),y+(parentAdjust.y*2.0),0);
-		
-		Matrix4 inverse = getConcatenatedMatrix().Inverse();
-		localCoordinate = inverse * localCoordinate;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.x += hit.w/2.0;
-		if(positionMode == POSITION_TOPLEFT)
-			localCoordinate.y += hit.h/2.0;
+		if(hitTest(x,y)) {
+			Vector3 localCoordinate = Vector3(x,y,0);
 
 
-		
-		onMouseDown(localCoordinate.x,localCoordinate.y);
-		
-		InputEvent *inputEvent = new InputEvent(Vector2(localCoordinate.x,localCoordinate.y)-parentAdjust, timestamp);
-		
-		inputEvent->mouseButton = mouseButton;
-		dispatchEvent(inputEvent, InputEvent::EVENT_MOUSEDOWN);
-		
-		if(timestamp - lastClickTicks < 400) {
-			InputEvent *inputEvent = new InputEvent(Vector2(x,y), timestamp);
-			inputEvent->mouseButton = mouseButton;			
-			dispatchEvent(inputEvent, InputEvent::EVENT_DOUBLECLICK);
-		}
-		lastClickTicks = timestamp;		
-		ret.hit = true;
-		if(blockMouseInput) {
-			ret.blocked = true;
+			Matrix4 inverse = getScreenConcatenatedMatrix().Inverse();
+			localCoordinate = inverse * localCoordinate;
+
+			onMouseDown(localCoordinate.x,localCoordinate.y);
+
+			InputEvent *inputEvent = new InputEvent(Vector2(localCoordinate.x,localCoordinate.y), timestamp);
+
+			inputEvent->mouseButton = mouseButton;
+			dispatchEvent(inputEvent, InputEvent::EVENT_MOUSEDOWN);
+
+			if(timestamp - lastClickTicks < 400) {
+				InputEvent *inputEvent = new InputEvent(Vector2(x,y), timestamp);
+				inputEvent->mouseButton = mouseButton;
+				dispatchEvent(inputEvent, InputEvent::EVENT_DOUBLECLICK);
+			}
+			lastClickTicks = timestamp;
+			ret.hit = true;
+			if(blockMouseInput) {
+				ret.blocked = true;
+			}
 		}
 		}
-	}
 
 
-	for(int i=children.size()-1;i>=0;i--) {			
-			Vector2 adjust = parentAdjust;
-			if(positionMode == POSITION_TOPLEFT)
-				adjust += Vector2(floor(width/2.0), floor(height/2.0));
-			MouseEventResult childRes = ((ScreenEntity*)children[i])->_onMouseDown(x,y, mouseButton, timestamp, adjust);
+		for(int i=children.size()-1;i>=0;i--) {
+			MouseEventResult childRes = ((ScreenEntity*)children[i])->_onMouseDown(x,y, mouseButton, timestamp);
 			if(childRes.hit)
 			if(childRes.hit)
 				ret.hit = true;
 				ret.hit = true;
-			if(childRes.blocked)
+			if(childRes.blocked) {
 				ret.blocked = true;
 				ret.blocked = true;
-			if(childRes.blocked)
 				break;
 				break;
+			}
 		}
 		}
-	}		
+	}
 	
 	
 	return ret;
 	return ret;
 }
 }
 
 
 Vector2 ScreenEntity::getScreenPosition() const {
 Vector2 ScreenEntity::getScreenPosition() const {
-	Vector2 ret = getPosition2D();
-	
-	if(parentEntity) {
-		return ret + ((ScreenEntity*)parentEntity)->getScreenPosition();
-	} else {
-		return ret;
-	}
+	Matrix4 screenTransform = getScreenConcatenatedMatrix();
+	Vector3 screenPosition = screenTransform.getPosition();
+	return Vector2(screenPosition.x, screenPosition.y);
 }
 }
 
 
 void ScreenEntity::setRotation(Number rotation) {
 void ScreenEntity::setRotation(Number rotation) {
@@ -707,7 +658,7 @@ Matrix4 ScreenEntity::buildPositionMatrix() {
 			posMatrix.m[3][1] = position.y*matrixAdj;
 			posMatrix.m[3][1] = position.y*matrixAdj;
 			posMatrix.m[3][2] = position.z*matrixAdj;
 			posMatrix.m[3][2] = position.z*matrixAdj;
 		break;
 		break;
-	}	
+	}
 	
 	
 	
 	
 	if(snapToPixels) {
 	if(snapToPixels) {
@@ -729,11 +680,11 @@ void ScreenEntity::adjustMatrixForChildren() {
 	}
 	}
 }
 }
 
 
-ScreenEntity *ScreenEntity::getScreenEntityById(String id, bool recursive) {
+ScreenEntity *ScreenEntity::getScreenEntityById(String id, bool recursive) const {
 	return (ScreenEntity*)getEntityById(id, recursive);
 	return (ScreenEntity*)getEntityById(id, recursive);
 }
 }
 
 
-std::vector<ScreenEntity*> ScreenEntity::getScreenEntitiesByTag(String tag, bool recursive) {
+std::vector<ScreenEntity*> ScreenEntity::getScreenEntitiesByTag(String tag, bool recursive) const {
 	std::vector<Entity*> entities = getEntitiesByTag(tag, recursive);
 	std::vector<Entity*> entities = getEntitiesByTag(tag, recursive);
 	std::vector<ScreenEntity*> retEntities;
 	std::vector<ScreenEntity*> retEntities;
 	for(int i=0; i < entities.size(); i++) {
 	for(int i=0; i < entities.size(); i++) {

+ 2 - 2
Core/Contents/Source/PolyScreenEntityInstance.cpp

@@ -77,7 +77,7 @@ ScreenEntityInstanceResourceEntry *ScreenEntityInstance::getResourceEntry() {
 	return resourceEntry;
 	return resourceEntry;
 }
 }
 
 
-Entity *ScreenEntityInstance::Clone(bool deepClone, bool ignoreEditorOnly) {
+Entity *ScreenEntityInstance::Clone(bool deepClone, bool ignoreEditorOnly) const {
 	ScreenEntityInstance *newEntity;
 	ScreenEntityInstance *newEntity;
 	if(cloneUsingReload) {
 	if(cloneUsingReload) {
 		newEntity = new ScreenEntityInstance(fileName);
 		newEntity = new ScreenEntityInstance(fileName);
@@ -88,7 +88,7 @@ Entity *ScreenEntityInstance::Clone(bool deepClone, bool ignoreEditorOnly) {
 	return newEntity;
 	return newEntity;
 }
 }
 
 
-void ScreenEntityInstance::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) {
+void ScreenEntityInstance::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const {
 	if(cloneUsingReload) {
 	if(cloneUsingReload) {
 		ScreenEntity::applyClone(clone, false, ignoreEditorOnly);
 		ScreenEntity::applyClone(clone, false, ignoreEditorOnly);
 	} else {
 	} else {

+ 5 - 5
Core/Contents/Source/PolyScreenImage.cpp

@@ -46,7 +46,7 @@ ScreenImage::ScreenImage(const String& fileName) : ScreenShape(ScreenShape::SHAP
 	height = texture->getHeight();	
 	height = texture->getHeight();	
 	setShapeSize(width, height);	
 	setShapeSize(width, height);	
 	
 	
-	positionMode = POSITION_TOPLEFT;
+	setPositionMode(POSITION_TOPLEFT);
 }
 }
 
 
 ScreenImage::ScreenImage(Image *image) : ScreenShape(ScreenShape::SHAPE_RECT,1,1) {
 ScreenImage::ScreenImage(Image *image) : ScreenShape(ScreenShape::SHAPE_RECT,1,1) {
@@ -59,7 +59,7 @@ ScreenImage::ScreenImage(Image *image) : ScreenShape(ScreenShape::SHAPE_RECT,1,1
 	height = texture->getHeight();	
 	height = texture->getHeight();	
 	setShapeSize(width, height);	
 	setShapeSize(width, height);	
 	
 	
-	positionMode = POSITION_TOPLEFT;	
+	setPositionMode(POSITION_TOPLEFT);	
 }
 }
 
 
 ScreenImage::ScreenImage(Texture *texture) : ScreenShape(ScreenShape::SHAPE_RECT,1,1) {
 ScreenImage::ScreenImage(Texture *texture) : ScreenShape(ScreenShape::SHAPE_RECT,1,1) {
@@ -72,20 +72,20 @@ ScreenImage::ScreenImage(Texture *texture) : ScreenShape(ScreenShape::SHAPE_RECT
 	height = texture->getHeight();	
 	height = texture->getHeight();	
 	setShapeSize(width, height);	
 	setShapeSize(width, height);	
 	
 	
-	positionMode = POSITION_TOPLEFT;	
+	setPositionMode(POSITION_TOPLEFT);
 }
 }
 
 
 ScreenImage::~ScreenImage() {
 ScreenImage::~ScreenImage() {
 
 
 }
 }
 
 
-Entity *ScreenImage::Clone(bool deepClone, bool ignoreEditorOnly) {
+Entity *ScreenImage::Clone(bool deepClone, bool ignoreEditorOnly) const {
 	ScreenImage *newImage = new ScreenImage(getTexture()->getResourcePath());
 	ScreenImage *newImage = new ScreenImage(getTexture()->getResourcePath());
 	applyClone(newImage, deepClone, ignoreEditorOnly);
 	applyClone(newImage, deepClone, ignoreEditorOnly);
 	return newImage;
 	return newImage;
 }
 }
 
 
-void ScreenImage::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) {
+void ScreenImage::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const {
 	ScreenShape::applyClone(clone, deepClone, ignoreEditorOnly);
 	ScreenShape::applyClone(clone, deepClone, ignoreEditorOnly);
 }
 }
 
 

+ 3 - 3
Core/Contents/Source/PolyScreenLabel.cpp

@@ -37,7 +37,7 @@ ScreenLabel::ScreenLabel(const String& text, int size, const String& fontName, i
 	label = new Label(CoreServices::getInstance()->getFontManager()->getFontByName(fontName), text, size, amode, premultiplyAlpha);
 	label = new Label(CoreServices::getInstance()->getFontManager()->getFontByName(fontName), text, size, amode, premultiplyAlpha);
 	texture = NULL;
 	texture = NULL;
 	updateTexture();
 	updateTexture();
-	positionMode = POSITION_TOPLEFT;
+	setPositionMode(POSITION_TOPLEFT);
 	colorAffectsChildren = false;
 	colorAffectsChildren = false;
 	positionAtBaseline = true;
 	positionAtBaseline = true;
 }
 }
@@ -50,13 +50,13 @@ Label *ScreenLabel::getLabel() const {
 	return label;
 	return label;
 }
 }
 
 
-Entity *ScreenLabel::Clone(bool deepClone, bool ignoreEditorOnly) {
+Entity *ScreenLabel::Clone(bool deepClone, bool ignoreEditorOnly) const {
 	ScreenLabel *newLabel = new ScreenLabel(getText(), label->getSize(), label->getFont()->getFontName(), label->getAntialiasMode());
 	ScreenLabel *newLabel = new ScreenLabel(getText(), label->getSize(), label->getFont()->getFontName(), label->getAntialiasMode());
 	applyClone(newLabel, deepClone, ignoreEditorOnly);
 	applyClone(newLabel, deepClone, ignoreEditorOnly);
 	return newLabel;
 	return newLabel;
 }
 }
 
 
-void ScreenLabel::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) {
+void ScreenLabel::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const {
 	ScreenShape::applyClone(clone, deepClone, ignoreEditorOnly);
 	ScreenShape::applyClone(clone, deepClone, ignoreEditorOnly);
 	ScreenLabel *_clone = (ScreenLabel*) clone;
 	ScreenLabel *_clone = (ScreenLabel*) clone;
 	_clone->positionAtBaseline = positionAtBaseline;
 	_clone->positionAtBaseline = positionAtBaseline;

+ 4 - 4
Core/Contents/Source/PolyScreenShape.cpp

@@ -45,7 +45,7 @@ ScreenShape::ScreenShape(int shapeType, Number option1, Number option2, Number o
 		
 		
 	buildShapeMesh();
 	buildShapeMesh();
 	
 	
-	positionMode = POSITION_CENTER;
+	setPositionMode(POSITION_CENTER);
 	strokeEnabled = false;
 	strokeEnabled = false;
 }
 }
 
 
@@ -66,19 +66,19 @@ void ScreenShape::operator=(const ScreenShape& copy) {
 	
 	
 	strokeColor = copy.strokeColor;
 	strokeColor = copy.strokeColor;
 	
 	
-	positionMode = POSITION_CENTER;
+	setPositionMode(POSITION_CENTER);
 	strokeEnabled = copy.strokeEnabled;	
 	strokeEnabled = copy.strokeEnabled;	
 
 
 }
 }
 
 
-Entity *ScreenShape::Clone(bool deepClone, bool ignoreEditorOnly) {
+Entity *ScreenShape::Clone(bool deepClone, bool ignoreEditorOnly) const {
 	ScreenShape *newEntity = new ScreenShape(ScreenShape::SHAPE_RECT, 1,1);
 	ScreenShape *newEntity = new ScreenShape(ScreenShape::SHAPE_RECT, 1,1);
 	applyClone(newEntity, deepClone, ignoreEditorOnly);
 	applyClone(newEntity, deepClone, ignoreEditorOnly);
 	return newEntity;
 	return newEntity;
 
 
 }
 }
 
 
-void ScreenShape::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) {
+void ScreenShape::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const {
 	ScreenEntity::applyClone(clone, deepClone, ignoreEditorOnly);
 	ScreenEntity::applyClone(clone, deepClone, ignoreEditorOnly);
 	ScreenShape *_clone = (ScreenShape*) clone;
 	ScreenShape *_clone = (ScreenShape*) clone;
 	*_clone = *this;
 	*_clone = *this;

+ 2 - 2
Core/Contents/Source/PolyScreenSound.cpp

@@ -50,13 +50,13 @@ void ScreenSoundListener::Update() {
 
 
 }
 }
 
 
-Entity *ScreenSound::Clone(bool deepClone, bool ignoreEditorOnly) {
+Entity *ScreenSound::Clone(bool deepClone, bool ignoreEditorOnly) const {
 	ScreenSound *newSound = new ScreenSound(sound->getFileName(), sound->getReferenceDistance(), sound->getMaxDistance());
 	ScreenSound *newSound = new ScreenSound(sound->getFileName(), sound->getReferenceDistance(), sound->getMaxDistance());
 	applyClone(newSound, deepClone, ignoreEditorOnly);
 	applyClone(newSound, deepClone, ignoreEditorOnly);
 	return newSound;
 	return newSound;
 }
 }
 
 
-void ScreenSound::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) {
+void ScreenSound::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const {
 	ScreenEntity::applyClone(clone, deepClone, ignoreEditorOnly);
 	ScreenEntity::applyClone(clone, deepClone, ignoreEditorOnly);
 }
 }
 
 

+ 2 - 2
Core/Contents/Source/PolyScreenSprite.cpp

@@ -43,7 +43,7 @@ ScreenSprite::ScreenSprite(const String& fileName) : ScreenShape(ScreenShape::SH
 	loadFromFile(fileName);
 	loadFromFile(fileName);
 }
 }
 
 
-Entity *ScreenSprite::Clone(bool deepClone, bool ignoreEditorOnly) {
+Entity *ScreenSprite::Clone(bool deepClone, bool ignoreEditorOnly) const {
 	ScreenSprite *newSprite = new ScreenSprite(getTexture()->getResourcePath(), spriteWidth, spriteHeight);
 	ScreenSprite *newSprite = new ScreenSprite(getTexture()->getResourcePath(), spriteWidth, spriteHeight);
 	for(int i=0; i < animations.size(); i++) {
 	for(int i=0; i < animations.size(); i++) {
 		newSprite->addAnimation(animations[i]->name, animations[i]->frames, animations[i]->speed);
 		newSprite->addAnimation(animations[i]->name, animations[i]->frames, animations[i]->speed);
@@ -55,7 +55,7 @@ Entity *ScreenSprite::Clone(bool deepClone, bool ignoreEditorOnly) {
 	return newSprite;
 	return newSprite;
 }
 }
 
 
-void ScreenSprite::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) {
+void ScreenSprite::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const {
 	ScreenShape::applyClone(clone, deepClone, ignoreEditorOnly);
 	ScreenShape::applyClone(clone, deepClone, ignoreEditorOnly);
 	
 	
 }
 }

+ 80 - 17
IDE/Build/Mac OS X/English.lproj/MainMenu.xib

@@ -1,23 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
 	<data>
 	<data>
-		<int key="IBDocument.SystemTarget">1060</int>
-		<string key="IBDocument.SystemVersion">11E53</string>
-		<string key="IBDocument.InterfaceBuilderVersion">2182</string>
-		<string key="IBDocument.AppKitVersion">1138.47</string>
-		<string key="IBDocument.HIToolboxVersion">569.00</string>
+		<int key="IBDocument.SystemTarget">1080</int>
+		<string key="IBDocument.SystemVersion">12D78</string>
+		<string key="IBDocument.InterfaceBuilderVersion">3084</string>
+		<string key="IBDocument.AppKitVersion">1187.37</string>
+		<string key="IBDocument.HIToolboxVersion">626.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">2182</string>
+			<string key="NS.object.0">3084</string>
 		</object>
 		</object>
 		<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
 		<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>NSOpenGLView</string>
-			<string>NSWindowTemplate</string>
-			<string>NSView</string>
+			<string>NSCustomObject</string>
 			<string>NSMenu</string>
 			<string>NSMenu</string>
 			<string>NSMenuItem</string>
 			<string>NSMenuItem</string>
-			<string>NSCustomObject</string>
+			<string>NSOpenGLView</string>
+			<string>NSView</string>
+			<string>NSWindowTemplate</string>
 		</object>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -683,7 +683,7 @@
 				<int key="NSWindowStyleMask">13</int>
 				<int key="NSWindowStyleMask">13</int>
 				<int key="NSWindowBacking">2</int>
 				<int key="NSWindowBacking">2</int>
 				<string key="NSWindowRect">{{335, 390}, {800, 600}}</string>
 				<string key="NSWindowRect">{{335, 390}, {800, 600}}</string>
-				<int key="NSWTFlags">1954021376</int>
+				<int key="NSWTFlags">1685585920</int>
 				<string key="NSWindowTitle">Polycode</string>
 				<string key="NSWindowTitle">Polycode</string>
 				<string key="NSWindowClass">NSWindow</string>
 				<string key="NSWindowClass">NSWindow</string>
 				<nil key="NSViewClass"/>
 				<nil key="NSViewClass"/>
@@ -697,10 +697,10 @@
 						<object class="NSOpenGLView" id="633009941">
 						<object class="NSOpenGLView" id="633009941">
 							<reference key="NSNextResponder" ref="439893737"/>
 							<reference key="NSNextResponder" ref="439893737"/>
 							<int key="NSvFlags">1298</int>
 							<int key="NSvFlags">1298</int>
-							<object class="NSPSMatrix" key="NSDrawMatrix"/>
 							<string key="NSFrameSize">{800, 600}</string>
 							<string key="NSFrameSize">{800, 600}</string>
 							<reference key="NSSuperview" ref="439893737"/>
 							<reference key="NSSuperview" ref="439893737"/>
 							<reference key="NSWindow"/>
 							<reference key="NSWindow"/>
+							<reference key="NSNextKeyView"/>
 							<object class="NSOpenGLPixelFormat" key="NSPixelFormat">
 							<object class="NSOpenGLPixelFormat" key="NSPixelFormat">
 								<object class="NSMutableData" key="NSPixelAttributes">
 								<object class="NSMutableData" key="NSPixelAttributes">
 									<bytes key="NS.bytes">AAAAYAAAAAA</bytes>
 									<bytes key="NS.bytes">AAAAYAAAAAA</bytes>
@@ -713,7 +713,7 @@
 					<reference key="NSWindow"/>
 					<reference key="NSWindow"/>
 					<reference key="NSNextKeyView" ref="633009941"/>
 					<reference key="NSNextKeyView" ref="633009941"/>
 				</object>
 				</object>
-				<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
+				<string key="NSScreenRect">{{0, 0}, {1440, 900}}</string>
 				<string key="NSMinSize">{400, 222}</string>
 				<string key="NSMinSize">{400, 222}</string>
 				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
 				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
 				<int key="NSWindowCollectionBehavior">128</int>
 				<int key="NSWindowCollectionBehavior">128</int>
@@ -1987,6 +1987,73 @@
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
 			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
 				<bool key="EncodedWithXMLCoder">YES</bool>
 				<bool key="EncodedWithXMLCoder">YES</bool>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSDocument</string>
+					<object class="NSMutableDictionary" key="actions">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>printDocument:</string>
+							<string>revertDocumentToSaved:</string>
+							<string>runPageLayout:</string>
+							<string>saveDocument:</string>
+							<string>saveDocumentAs:</string>
+							<string>saveDocumentTo:</string>
+						</object>
+						<object class="NSArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>printDocument:</string>
+							<string>revertDocumentToSaved:</string>
+							<string>runPageLayout:</string>
+							<string>saveDocument:</string>
+							<string>saveDocumentAs:</string>
+							<string>saveDocumentTo:</string>
+						</object>
+						<object class="NSArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBActionInfo">
+								<string key="name">printDocument:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">revertDocumentToSaved:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">runPageLayout:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">saveDocument:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">saveDocumentAs:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">saveDocumentTo:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/NSDocument.h</string>
+					</object>
+				</object>
 				<object class="IBPartialClassDescription">
 				<object class="IBPartialClassDescription">
 					<string key="className">PolycodeAppDelegate</string>
 					<string key="className">PolycodeAppDelegate</string>
 					<string key="superclassName">NSObject</string>
 					<string key="superclassName">NSObject</string>
@@ -2190,10 +2257,6 @@
 		</object>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
 		<int key="IBDocument.localizationMode">0</int>
 		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
 		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
-			<integer value="1060" key="NS.object.0"/>
-		</object>
 		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
 		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
 			<integer value="3000" key="NS.object.0"/>
 			<integer value="3000" key="NS.object.0"/>

+ 4 - 24
IDE/Build/Mac OS X/Polycode.xcodeproj/project.pbxproj

@@ -503,21 +503,11 @@
 				INSTALL_PATH = "$(HOME)/Applications";
 				INSTALL_PATH = "$(HOME)/Applications";
 				LIBRARY_SEARCH_PATHS = (
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(inherited)",
-					"\"$(SRCROOT)/../../../Core/Build/Mac OS X/build/Debug\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/libpng/projects/xcode/build/Release\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/physfs/Release\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/zlib/projects/xcode/Untitled/build/Debug\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/freetype\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/physfs/XcodeProject/physfs/build/Debug\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/physfs/Debug\"",
-					"\"$(SRCROOT)/../../../Modules/Build/Mac OS X/build/Debug\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/zlib\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/libpng\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/luajit/src\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Core/lib\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Core/lib\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Core/Dependencies/lib\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Core/Dependencies/lib\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Modules/lib\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Modules/lib\"",
 				);
 				);
+				MACOSX_DEPLOYMENT_TARGET = 10.6;
 				PRODUCT_NAME = Polycode;
 				PRODUCT_NAME = Polycode;
 			};
 			};
 			name = Debug;
 			name = Debug;
@@ -541,21 +531,11 @@
 				INSTALL_PATH = "$(HOME)/Applications";
 				INSTALL_PATH = "$(HOME)/Applications";
 				LIBRARY_SEARCH_PATHS = (
 				LIBRARY_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(inherited)",
-					"\"$(SRCROOT)/../../../Core/Build/Mac OS X/build/Debug\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/libpng/projects/xcode/build/Release\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/physfs/Release\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/zlib/projects/xcode/Untitled/build/Debug\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/freetype\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/physfs/XcodeProject/physfs/build/Debug\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/physfs/Debug\"",
-					"\"$(SRCROOT)/../../../Modules/Build/Mac OS X/build/Debug\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/zlib\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/libpng\"",
-					"\"$(SRCROOT)/../../../Core/Dependencies/luajit/src\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Core/lib\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Core/lib\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Core/Dependencies/lib\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Core/Dependencies/lib\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Modules/lib\"",
 					"\"$(SRCROOT)/../../../Release/Darwin/Framework/Modules/lib\"",
 				);
 				);
+				MACOSX_DEPLOYMENT_TARGET = 10.6;
 				PRODUCT_NAME = Polycode;
 				PRODUCT_NAME = Polycode;
 			};
 			};
 			name = Release;
 			name = Release;
@@ -581,7 +561,7 @@
 				);
 				);
 				ONLY_ACTIVE_ARCH = YES;
 				ONLY_ACTIVE_ARCH = YES;
 				PREBINDING = NO;
 				PREBINDING = NO;
-				SDKROOT = macosx10.6;
+				SDKROOT = macosx;
 			};
 			};
 			name = Debug;
 			name = Debug;
 		};
 		};
@@ -605,7 +585,7 @@
 				);
 				);
 				ONLY_ACTIVE_ARCH = YES;
 				ONLY_ACTIVE_ARCH = YES;
 				PREBINDING = NO;
 				PREBINDING = NO;
-				SDKROOT = macosx10.6;
+				SDKROOT = macosx;
 			};
 			};
 			name = Release;
 			name = Release;
 		};
 		};

+ 5 - 9
IDE/Build/Mac OS X/PolycodeAppDelegate.h

@@ -14,21 +14,17 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
+@class PolycodeAppDelegate;
+
 class PolycodeAppEventHandler : public EventHandler {
 class PolycodeAppEventHandler : public EventHandler {
 	
 	
 public:
 public:
 	PolycodeAppEventHandler() {}
 	PolycodeAppEventHandler() {}
 	~PolycodeAppEventHandler() {}
 	~PolycodeAppEventHandler() {}
 	
 	
-	void handleEvent(Event *evt) {
-		switch(evt->getEventCode()) {
-			case PolycodeIDEApp::EVENT_SHOW_MENU:
-				[appDelegate showProjectMenu];
-			break;
-		}
-	}
-	
-	id appDelegate;
+	void handleEvent(Event *evt);
+
+	PolycodeAppDelegate* appDelegate;
 };
 };
 
 
 @interface PolycodeAppDelegate : NSObject <NSApplicationDelegate> {
 @interface PolycodeAppDelegate : NSObject <NSApplicationDelegate> {

+ 8 - 0
IDE/Build/Mac OS X/PolycodeAppDelegate.m

@@ -8,6 +8,14 @@
 
 
 #import "PolycodeAppDelegate.h"
 #import "PolycodeAppDelegate.h"
 
 
+void PolycodeAppEventHandler::handleEvent(Event *evt) {
+	switch(evt->getEventCode()) {
+		case PolycodeIDEApp::EVENT_SHOW_MENU:
+			[appDelegate showProjectMenu];
+			break;
+	}
+}
+
 @implementation PolycodeAppDelegate
 @implementation PolycodeAppDelegate
 
 
 @synthesize window;
 @synthesize window;

+ 0 - 1
IDE/Contents/Source/ExampleBrowserWindow.cpp

@@ -31,7 +31,6 @@ ExampleBrowserWindow::ExampleBrowserWindow() : UIWindow(L"Example Browser", 320,
 	
 	
 	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");
 	
 	
 	
 	
 	templateContainer = new UITreeContainer("boxIcon.png", L"Examples", 320, 410-topPadding-padding-padding-40);	
 	templateContainer = new UITreeContainer("boxIcon.png", L"Examples", 320, 410-topPadding-padding-padding-40);	

+ 0 - 1
IDE/Contents/Source/NewFileWindow.cpp

@@ -27,7 +27,6 @@ NewFileWindow::NewFileWindow() : UIWindow(L"Create New File", 580, 280) {
 	
 	
 	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");
 	
 	
 	closeOnEscape = true;	
 	closeOnEscape = true;	
 	
 	

+ 0 - 1
IDE/Contents/Source/NewProjectWindow.cpp

@@ -34,7 +34,6 @@ NewProjectWindow::NewProjectWindow() : UIWindow(L"Create New Project", 480, 280)
 	
 	
 	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");
 	
 	
 	
 	
 	templateContainer = new UITreeContainer("boxIcon.png", L"Templates", 200, 300-topPadding-padding-padding);	
 	templateContainer = new UITreeContainer("boxIcon.png", L"Templates", 200, 300-topPadding-padding-padding);	

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

@@ -92,7 +92,6 @@ BackTraceWindow::BackTraceWindow() : UIElement() {
 
 
 	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");		
 
 
 	labelBg = new ScreenShape(ScreenShape::SHAPE_RECT, 20,30);
 	labelBg = new ScreenShape(ScreenShape::SHAPE_RECT, 20,30);
 	labelBg->setPositionMode(ScreenEntity::POSITION_TOPLEFT);
 	labelBg->setPositionMode(ScreenEntity::POSITION_TOPLEFT);

+ 0 - 3
IDE/Contents/Source/PolycodeProject.cpp

@@ -215,9 +215,6 @@ bool PolycodeProject::saveFile() {
 	}
 	}
 
 
 	
 	
-	unsigned int afMap[6] = {0,1,2,4,8,16};
-	unsigned int aaMap[4] = {0,2,4,6};
-		
 	configFile.root["antiAliasingLevel"]->intVal = data.aaLevel;
 	configFile.root["antiAliasingLevel"]->intVal = data.aaLevel;
 	configFile.root["anisotropyLevel"]->intVal = data.anisotropy;
 	configFile.root["anisotropyLevel"]->intVal = data.anisotropy;
 	configFile.root["vSync"]->boolVal = data.vSync;
 	configFile.root["vSync"]->boolVal = data.vSync;

+ 6 - 6
IDE/Contents/Source/PolycodeProjectBrowser.cpp

@@ -102,7 +102,7 @@ void PolycodeProjectBrowser::handleEvent(Event *event) {
 
 
 	if(event->getDispatcher() == contextMenu) {
 	if(event->getDispatcher() == contextMenu) {
 		UIMenuItem *item = contextMenu->getSelectedItem();
 		UIMenuItem *item = contextMenu->getSelectedItem();
-		
+
 		PolycodeProjectBrowserEvent *bEvent = new PolycodeProjectBrowserEvent();			
 		PolycodeProjectBrowserEvent *bEvent = new PolycodeProjectBrowserEvent();			
 		bEvent->command = item->_id;
 		bEvent->command = item->_id;
 		dispatchEvent(bEvent, PolycodeProjectBrowserEvent::HANDLE_MENU_COMMAND);
 		dispatchEvent(bEvent, PolycodeProjectBrowserEvent::HANDLE_MENU_COMMAND);
@@ -119,13 +119,13 @@ void PolycodeProjectBrowser::handleEvent(Event *event) {
 
 
 			contextMenu->addOption("New File", "add_new_file");
 			contextMenu->addOption("New File", "add_new_file");
 			contextMenu->addOption("New Project", "add_new_project");
 			contextMenu->addOption("New Project", "add_new_project");
-			contextMenu->addOption("New Folder", "add_new_folder");			
-			contextMenu->addOption("----------------", "");			
+			contextMenu->addOption("New Folder", "add_new_folder");
+			contextMenu->addDivider();
 			contextMenu->addOption("Add external files", "add_files");			
 			contextMenu->addOption("Add external files", "add_files");			
-			contextMenu->addOption("----------------", "");
+			contextMenu->addDivider();
 			contextMenu->addOption("Refresh", "refresh");
 			contextMenu->addOption("Refresh", "refresh");
 			contextMenu->addOption("Rename", "rename");						
 			contextMenu->addOption("Rename", "rename");						
-			contextMenu->addOption("----------------", "");		
+			contextMenu->addDivider();
 			contextMenu->addOption("Remove", "remove");
 			contextMenu->addOption("Remove", "remove");
 
 
 			contextMenu->fitToScreenVertical();
 			contextMenu->fitToScreenVertical();
@@ -197,7 +197,7 @@ void PolycodeProjectBrowser::parseFolderIntoNode(UITree *node, String spath, Pol
 				data->fileEntry = entry;
 				data->fileEntry = entry;
 				data->type = 1;
 				data->type = 1;
 				data->parentProject = parentProject;			
 				data->parentProject = parentProject;			
-				UITree *newChild = node->addTreeChild("file.png", entry.name, (void*) data);
+				node->addTreeChild("file.png", entry.name, (void*) data);
 			}
 			}
 		}
 		}
 	}		
 	}		

+ 0 - 1
IDE/Contents/Source/PolycodeRemoteDebugger.cpp

@@ -59,7 +59,6 @@ void PolycodeRemoteDebugger::handleEvent(Event *event) {
 	for(int i=0; i < debuggerClients.size(); i++) {
 	for(int i=0; i < debuggerClients.size(); i++) {
 		if(event->getDispatcher() == debuggerClients[i]->client) {		
 		if(event->getDispatcher() == debuggerClients[i]->client) {		
 			ServerClientEvent *clientEvent = (ServerClientEvent*) event;
 			ServerClientEvent *clientEvent = (ServerClientEvent*) event;
-			DebuggerClient *client = debuggerClients[i];
 			switch(clientEvent->getEventCode()) {
 			switch(clientEvent->getEventCode()) {
 				case ServerClientEvent::EVENT_CLIENT_DATA:				
 				case ServerClientEvent::EVENT_CLIENT_DATA:				
 					switch(clientEvent->dataType) {			
 					switch(clientEvent->dataType) {			

+ 9 - 9
IDE/Contents/Source/PolycodeScreenEditor.cpp

@@ -296,8 +296,6 @@ PolycodeScreenEditorMain::PolycodeScreenEditorMain(PolycodeEditor *editor) {
 	
 	
 	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");	
-	Number padding = conf->getNumericValue("Polycode", "uiWindowSkinPadding");	
 
 
 	isScalingEntity = false;	
 	isScalingEntity = false;	
 	isDraggingEntity = false; 
 	isDraggingEntity = false; 
@@ -2088,6 +2086,9 @@ void PolycodeScreenEditorMain::handleEvent(Event *event) {
 				case Polycode::KEY_LSHIFT:
 				case Polycode::KEY_LSHIFT:
 					multiSelect = true;
 					multiSelect = true;
 				break;
 				break;
+				default:
+					// We don't care about the other keys
+				break;
 			}
 			}
 		}
 		}
 		
 		
@@ -2105,7 +2106,10 @@ void PolycodeScreenEditorMain::handleEvent(Event *event) {
 				case Polycode::KEY_RSHIFT:
 				case Polycode::KEY_RSHIFT:
 				case Polycode::KEY_LSHIFT:
 				case Polycode::KEY_LSHIFT:
 					multiSelect = false;
 					multiSelect = false;
-				break;				
+				break;
+				default:
+					// We don't care about the other keys
+				break;
 			}
 			}
 		}
 		}
 	
 	
@@ -2818,10 +2822,6 @@ void PolycodeScreenEditor::saveEntityToObjectEntry(ScreenEntity *entity, ObjectE
 
 
 	}
 	}
 
 
-	if(dynamic_cast<ScreenSound*>(entity)) {
-		ScreenSound *sound = ((ScreenSound*) entity);
-	}
-	
 	if(!(*(entry))["type"])
 	if(!(*(entry))["type"])
 		entry->addChild("type", "ScreenEntity");
 		entry->addChild("type", "ScreenEntity");
 	
 	
@@ -2890,7 +2890,7 @@ void PolycodeScreenEditor::handleEvent(Event *event) {
 
 
 	if(event->getEventType() == "UIEvent" && event->getEventCode() == UIEvent::CLICK_EVENT) {
 	if(event->getEventType() == "UIEvent" && event->getEventCode() == UIEvent::CLICK_EVENT) {
 		if(event->getDispatcher() == treeView->newLayerButton) {
 		if(event->getDispatcher() == treeView->newLayerButton) {
-			ScreenEntity *newLayer = editorMain->addNewLayer("new_layer");
+			editorMain->addNewLayer("new_layer");
 		}
 		}
 
 
 		if(event->getDispatcher() == treeView->targetLayerButton) {
 		if(event->getDispatcher() == treeView->targetLayerButton) {
@@ -2979,7 +2979,7 @@ bool PolycodeScreenEditor::openFile(OSFileEntry filePath) {
 	editorMain->applyEditorProperties(editorMain->layerBaseEntity);
 	editorMain->applyEditorProperties(editorMain->layerBaseEntity);
 
 
 	if(editorMain->layerBaseEntity->getNumChildren() == 0) {
 	if(editorMain->layerBaseEntity->getNumChildren() == 0) {
-		ScreenEntity *newLayer = editorMain->addNewLayer("default_layer");
+		editorMain->addNewLayer("default_layer");
 	} else {
 	} else {
 		editorMain->setCurrentLayer((ScreenEntity*)editorMain->layerBaseEntity->getChildAtIndex(0), false);
 		editorMain->setCurrentLayer((ScreenEntity*)editorMain->layerBaseEntity->getChildAtIndex(0), false);
 		treeView->targetLayer = editorMain->getCurrentLayer();
 		treeView->targetLayer = editorMain->getCurrentLayer();

+ 0 - 1
IDE/Contents/Source/PolycodeTextEditor.cpp

@@ -230,7 +230,6 @@ std::vector<SyntaxHighlightToken> PolycodeSyntaxHighlighter::parseGLSL(String te
 			}
 			}
 
 
 			if(ch == '*' && lastSeparator == '/' && mode != MODE_STRING) {
 			if(ch == '*' && lastSeparator == '/' && mode != MODE_STRING) {
-				unsigned int old_mode = mode;
 				tokens[tokens.size()-1].type = MODE_COMMENT;
 				tokens[tokens.size()-1].type = MODE_COMMENT;
 				tokens[tokens.size()-2].type = MODE_COMMENT;				
 				tokens[tokens.size()-2].type = MODE_COMMENT;				
 				mode = MODE_COMMENT;				
 				mode = MODE_COMMENT;				

+ 0 - 1
IDE/Contents/Source/TextureBrowser.cpp

@@ -168,7 +168,6 @@ AssetBrowser::AssetBrowser() : UIWindow(L"Asset Browser", 850, 500) {
 	
 	
 	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");
 	
 	
 	closeOnEscape = true;	
 	closeOnEscape = true;	
 	
 	

+ 2 - 2
Modules/Contents/UI/Include/PolyUIBox.h

@@ -23,11 +23,11 @@
 #pragma once
 #pragma once
 #include "PolyGlobals.h"
 #include "PolyGlobals.h"
 #include "PolyScreenImage.h"
 #include "PolyScreenImage.h"
-#include "PolyScreenEntity.h"
+#include "PolyUIElement.h"
 
 
 namespace Polycode {
 namespace Polycode {
 	
 	
-	class _PolyExport UIBox : public ScreenEntity {
+	class _PolyExport UIBox : public UIElement {
 	public:
 	public:
 		UIBox(String imageFile, Number t, Number r, Number b, Number l, Number boxWidth, Number boxHeight);
 		UIBox(String imageFile, Number t, Number r, Number b, Number l, Number boxWidth, Number boxHeight);
 		~UIBox();
 		~UIBox();

+ 2 - 1
Modules/Contents/UI/Include/PolyUIHScrollBar.h

@@ -23,10 +23,11 @@
 #pragma once
 #pragma once
 #include "PolyGlobals.h"
 #include "PolyGlobals.h"
 #include "PolyUIBox.h"
 #include "PolyUIBox.h"
+#include "PolyUIElement.h"
 
 
 namespace Polycode {
 namespace Polycode {
 	
 	
-	class _PolyExport UIHScrollBar : public ScreenEntity {
+	class _PolyExport UIHScrollBar : public UIElement {
 	public:
 	public:
 		UIHScrollBar(Number width, Number height, Number initialRatio);
 		UIHScrollBar(Number width, Number height, Number initialRatio);
 		~UIHScrollBar();
 		~UIHScrollBar();

+ 22 - 0
Modules/Contents/UI/Include/PolyUIMenu.h

@@ -26,6 +26,7 @@
 #include "PolyUIBox.h"
 #include "PolyUIBox.h"
 
 
 namespace Polycode {
 namespace Polycode {
+	class ScreenLine;
 
 
 	/**
 	/**
 	 * An single selectable entry in an UIMenu
 	 * An single selectable entry in an UIMenu
@@ -34,6 +35,8 @@ namespace Polycode {
 		public:
 		public:
 			UIMenuItem(String label, String _id, void *data, Number comboWidth, Number comboHeight);
 			UIMenuItem(String label, String _id, void *data, Number comboWidth, Number comboHeight);
 			~UIMenuItem();
 			~UIMenuItem();
+
+			virtual bool isSelectable();
 			
 			
 			/**
 			/**
 			 * The user-data associated with this entry, as set in UIMenu::addOption()
 			 * The user-data associated with this entry, as set in UIMenu::addOption()
@@ -54,10 +57,22 @@ namespace Polycode {
 			String _id;
 			String _id;
 
 
 		protected:
 		protected:
+			UIMenuItem();
+
 			ScreenLabel *itemLabel;
 			ScreenLabel *itemLabel;
 			friend class UIMenu;
 			friend class UIMenu;
 	};
 	};
 
 
+	class _PolyExport UIMenuDivider : public UIMenuItem {
+	public:
+		UIMenuDivider(Number comboWidth, Number comboHeight);
+		~UIMenuDivider();
+		bool isSelectable();
+
+	protected:
+		ScreenLine* line;
+	};
+
 	/** 
 	/** 
 	 * A dropdown menu.
 	 * A dropdown menu.
 	 *
 	 *
@@ -86,6 +101,13 @@ namespace Polycode {
 			 */
 			 */
 			UIMenuItem *addOption(String label, String _id, void *data = NULL);
 			UIMenuItem *addOption(String label, String _id, void *data = NULL);
 
 
+			/**
+			 * Add a non-selectable entry to the dropdown
+			 * used to separate sections of the menu
+			 *
+			 */
+			UIMenuItem *addDivider();
+
 			/**
 			/**
 			 * Returns the currently selected item.
 			 * Returns the currently selected item.
 			 *
 			 *

+ 4 - 1
Modules/Contents/UI/Include/PolyUITree.h

@@ -22,6 +22,7 @@
 
 
 #pragma once
 #pragma once
 #include "PolyGlobals.h"
 #include "PolyGlobals.h"
+#include "PolyUIElement.h"
 #include "PolyScreenLabel.h"
 #include "PolyScreenLabel.h"
 #include "PolyScreenImage.h"
 #include "PolyScreenImage.h"
 #include "PolyScreenShape.h"
 #include "PolyScreenShape.h"
@@ -35,8 +36,10 @@ using std::vector;
 
 
 namespace Polycode {
 namespace Polycode {
 
 
-	class _PolyExport UITree : public ScreenEntity {
+	class _PolyExport UITree : public UIElement {
 		public:
 		public:
+			using UIElement::Resize;
+
 			UITree(String icon, String text, Number treeWidth, Number treeOffset=0);
 			UITree(String icon, String text, Number treeWidth, Number treeOffset=0);
 			~UITree();
 			~UITree();
 			
 			

+ 4 - 1
Modules/Contents/UI/Include/PolyUIVScrollBar.h

@@ -22,12 +22,15 @@
 
 
 #pragma once
 #pragma once
 #include "PolyGlobals.h"
 #include "PolyGlobals.h"
+#include "PolyUIElement.h"
 #include "PolyUIBox.h"
 #include "PolyUIBox.h"
 
 
 namespace Polycode {
 namespace Polycode {
 	
 	
-	class _PolyExport UIVScrollBar : public ScreenEntity {
+	class _PolyExport UIVScrollBar : public UIElement {
 	public:
 	public:
+		using UIElement::Resize;
+
 		UIVScrollBar(Number width, Number height, Number initialRatio);
 		UIVScrollBar(Number width, Number height, Number initialRatio);
 		~UIVScrollBar();
 		~UIVScrollBar();
 		
 		

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

@@ -24,7 +24,7 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
-UIBox::UIBox(String imageFile, Number t, Number r, Number b, Number l, Number boxWidth, Number boxHeight) : ScreenEntity() {
+UIBox::UIBox(String imageFile, Number t, Number r, Number b, Number l, Number boxWidth, Number boxHeight) : UIElement() {
 	
 	
 	setPositionMode(ScreenEntity::POSITION_TOPLEFT);	
 	setPositionMode(ScreenEntity::POSITION_TOPLEFT);	
 	
 	

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

@@ -29,7 +29,7 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
-UIHScrollBar::UIHScrollBar(Number width, Number height, Number initialRatio) : ScreenEntity() {
+UIHScrollBar::UIHScrollBar(Number width, Number height, Number initialRatio) : UIElement() {
 	
 	
 	scrollValue = 0;
 	scrollValue = 0;
 	
 	

+ 48 - 8
Modules/Contents/UI/Source/PolyUIMenu.cpp

@@ -27,6 +27,7 @@
 #include "PolyCoreServices.h"
 #include "PolyCoreServices.h"
 #include "PolyCore.h"
 #include "PolyCore.h"
 #include "PolyConfig.h"
 #include "PolyConfig.h"
+#include "PolyScreenLine.h"
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
@@ -42,15 +43,43 @@ UIMenuItem::UIMenuItem(String label, String _id, void *data, Number comboWidth,
 	Number paddingY = conf->getNumericValue("Polycode", "uiMenuTextOffsetY");	
 	Number paddingY = conf->getNumericValue("Polycode", "uiMenuTextOffsetY");	
 
 
 	itemLabel = new ScreenLabel(label, fontSize, fontName);
 	itemLabel = new ScreenLabel(label, fontSize, fontName);
-	itemLabel->setPosition(paddingX, floor(((comboHeight/2.0) - itemLabel->getHeight()/2.0) + paddingY));	
+	itemLabel->setPosition(paddingX, floor(((comboHeight/2.0) - itemLabel->getHeight()/2.0) + paddingY));
 	addChild(itemLabel);
 	addChild(itemLabel);
 	
 	
 	this->_id = _id;
 	this->_id = _id;
 	this->data = data;
 	this->data = data;
 }
 }
 
 
+UIMenuItem::UIMenuItem() : UIElement(), data(NULL), itemLabel(NULL) {
+}
+
+bool UIMenuItem::isSelectable()
+{
+	return true;
+}
+
 UIMenuItem::~UIMenuItem() {
 UIMenuItem::~UIMenuItem() {
-	delete itemLabel;
+	if(itemLabel)
+		delete itemLabel;
+}
+
+UIMenuDivider::UIMenuDivider(Number comboWidth, Number comboHeight) : UIMenuItem() {
+	Config *conf    = CoreServices::getInstance()->getConfig();
+	Number paddingX = conf->getNumericValue("Polycode", "uiMenuSelectorPadding");
+
+	line = new ScreenLine(Vector2(paddingX, comboHeight/2.0), Vector2(comboWidth-paddingX, comboHeight/2.0));
+	line->setLineWidth(1.0);
+	line->setColor(Color(0.0, 0.0, 0.0, 0.7));
+	addChild(line);
+}
+
+UIMenuDivider::~UIMenuDivider() {
+	delete line;
+}
+
+bool UIMenuDivider::isSelectable()
+{
+	return false;
 }
 }
 
 
 UIMenu::UIMenu(Number menuWidth) : UIElement() {
 UIMenu::UIMenu(Number menuWidth) : UIElement() {
@@ -147,7 +176,8 @@ void UIMenu::fitToScreenVertical() {
 		}
 		}
 	}
 	}
 }
 }
-				
+
+
 void UIMenu::handleEvent(Event *event) {
 void UIMenu::handleEvent(Event *event) {
 
 
 	if(event->getDispatcher() == CoreServices::getInstance()->getCore()->getInput()) {
 	if(event->getDispatcher() == CoreServices::getInstance()->getCore()->getInput()) {
@@ -162,8 +192,8 @@ void UIMenu::handleEvent(Event *event) {
 		if((event->getEventCode() == InputEvent::EVENT_MOUSEDOWN || (event->getEventCode() == InputEvent::EVENT_MOUSEUP && initialMouse != inputEvent->getMousePosition())) && !ignoreMouse) {
 		if((event->getEventCode() == InputEvent::EVENT_MOUSEDOWN || (event->getEventCode() == InputEvent::EVENT_MOUSEUP && initialMouse != inputEvent->getMousePosition())) && !ignoreMouse) {
 			if(selectorBox->visible) {
 			if(selectorBox->visible) {
 				dispatchEvent(new UIEvent(), UIEvent::OK_EVENT);
 				dispatchEvent(new UIEvent(), UIEvent::OK_EVENT);
-			} else {
-				dispatchEvent(new UIEvent(), UIEvent::CANCEL_EVENT);				
+			} else if(!dropDownBox->hitTest(inputEvent->getMousePosition())) {
+				dispatchEvent(new UIEvent(), UIEvent::CANCEL_EVENT);
 			}
 			}
 		}
 		}
 	}
 	}
@@ -180,7 +210,7 @@ void UIMenu::handleEvent(Event *event) {
 				InputEvent *inputEvent = (InputEvent*) event;
 				InputEvent *inputEvent = (InputEvent*) event;
 				selectedOffset = floor(((inputEvent->getMousePosition().y-selectorPadding)-paddingY)/menuItemHeight);
 				selectedOffset = floor(((inputEvent->getMousePosition().y-selectorPadding)-paddingY)/menuItemHeight);
 					
 					
-				if(selectedOffset >= 0 && selectedOffset < items.size()) {
+				if(selectedOffset >= 0 && selectedOffset < items.size() && items[selectedOffset]->isSelectable()) {
 					selectorBox->visible = true;				
 					selectorBox->visible = true;				
 					selectorBox->setPosition(paddingX,paddingY+(selectedOffset*menuItemHeight) - selectorPadding);
 					selectorBox->setPosition(paddingX,paddingY+(selectedOffset*menuItemHeight) - selectorPadding);
 				} else {
 				} else {
@@ -200,8 +230,6 @@ UIMenu::~UIMenu() {
 	if(!ownsChildren) {	
 	if(!ownsChildren) {	
 		delete dropDownBox;
 		delete dropDownBox;
 	}
 	}
-	
-	CoreServices::getInstance()->getCore()->getInput()->removeAllHandlersForListener(this);
 }
 }
 
 
 UIMenuItem *UIMenu::addOption(String label, String _id, void *data) {
 UIMenuItem *UIMenu::addOption(String label, String _id, void *data) {
@@ -214,6 +242,18 @@ UIMenuItem *UIMenu::addOption(String label, String _id, void *data) {
 	return newItem;
 	return newItem;
 }
 }
 
 
+UIMenuItem *UIMenu::addDivider()
+{
+	Number newItemHeight = menuItemHeight;
+	UIMenuItem *newItem = new UIMenuDivider(menuWidth, newItemHeight);
+	items.push_back(newItem);
+	dropDownBox->addChild(newItem);
+	newItem->setPosition(0, paddingY+nextItemHeight);
+	nextItemHeight += newItemHeight;
+	dropDownBox->resizeBox(menuWidth, nextItemHeight + (paddingY*2.0));
+	return newItem;
+}
+
 void UIMenu::Resize(Number width, Number height) {
 void UIMenu::Resize(Number width, Number height) {
 	UIElement::Resize(width, height);
 	UIElement::Resize(width, height);
 }
 }

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

@@ -51,7 +51,7 @@ UIScrollContainer::UIScrollContainer(ScreenEntity *scrolledEntity, bool hScroll,
 	scrollChild = scrolledEntity;
 	scrollChild = scrolledEntity;
 	addChild(scrollChild);
 	addChild(scrollChild);
 	
 	
-	scrollChild->enableScissor = true;
+	enableScissor = true;
 	
 	
 	vScrollBar = new UIVScrollBar(defaultScrollSize, height, height / scrolledEntity->getHeight());
 	vScrollBar = new UIVScrollBar(defaultScrollSize, height, height / scrolledEntity->getHeight());
 	addChild(vScrollBar);
 	addChild(vScrollBar);
@@ -166,7 +166,7 @@ void UIScrollContainer::scrollHorizontal(Number amount) {
 
 
 void UIScrollContainer::Update() {
 void UIScrollContainer::Update() {
 	Vector2 pos = getScreenPosition();
 	Vector2 pos = getScreenPosition();
-	scrollChild->scissorBox.setRect(pos.x,pos.y, width, height);	
+	scissorBox.setRect(pos.x, pos.y, width, height);
 }
 }
 
 
 void UIScrollContainer::handleEvent(Event *event) {
 void UIScrollContainer::handleEvent(Event *event) {

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

@@ -60,7 +60,7 @@ UITextInput::UITextInput(bool multiLine, Number width, Number height) : UIElemen
 	
 	
 	numLines = 0;
 	numLines = 0;
 	
 	
-	this->positionMode = ScreenEntity::POSITION_TOPLEFT;
+	setPositionMode(POSITION_TOPLEFT);
 	Config *conf = CoreServices::getInstance()->getConfig();	
 	Config *conf = CoreServices::getInstance()->getConfig();	
 	
 	
 	if(multiLine)
 	if(multiLine)
@@ -93,7 +93,6 @@ UITextInput::UITextInput(bool multiLine, Number width, Number height) : UIElemen
 	
 	
 	textContainer = new UIElement();
 	textContainer = new UIElement();
 	textContainer->ownsChildren = true;
 	textContainer->ownsChildren = true;
-	textContainer->enableScissor = true;
 
 
 	linesContainer->addChild(textContainer);
 	linesContainer->addChild(textContainer);
 	if(multiLine) {
 	if(multiLine) {
@@ -179,6 +178,7 @@ UITextInput::UITextInput(bool multiLine, Number width, Number height) : UIElemen
 		addChild(scrollContainer);
 		addChild(scrollContainer);
 	} else {
 	} else {
 		addChild(linesContainer);
 		addChild(linesContainer);
+		textContainer->enableScissor = true;
 	}
 	}
 		
 		
 	undoStateIndex = 0;
 	undoStateIndex = 0;

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

@@ -29,7 +29,7 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
-UITree::UITree(String icon, String text, Number treeWidth, Number treeOffset) : ScreenEntity() {
+UITree::UITree(String icon, String text, Number treeWidth, Number treeOffset) : UIElement() {
 		
 		
 	processInputEvents = true;
 	processInputEvents = true;
 	willDrag = false;
 	willDrag = false;

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

@@ -30,7 +30,7 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
-UIVScrollBar::UIVScrollBar(Number width, Number height, Number initialRatio) : ScreenEntity() {
+UIVScrollBar::UIVScrollBar(Number width, Number height, Number initialRatio) : UIElement() {
 
 
 	scrollValue = 0;
 	scrollValue = 0;
 	
 	

+ 1 - 29
Player/Contents/Source/PolycodePlayer.cpp

@@ -86,35 +86,7 @@ PolycodeRemoteDebuggerClient::~PolycodeRemoteDebuggerClient() {
 	client->Disconnect();
 	client->Disconnect();
 }
 }
 
 
-extern "C" {	
-
-	
-static void dumpstack (lua_State *L) {
-  int i;
-  int top=lua_gettop(L);
-  printf("dumpstack -- \n");
-  for (i=1; i<=top; i++) {
-    printf("%d\t%s\t",i,luaL_typename(L,i));
-    switch (lua_type(L, i)) {
-      case LUA_TNUMBER:
-        printf("%g\n",lua_tonumber(L,i));
-        break;
-      case LUA_TSTRING:
-        printf("%s\n",lua_tostring(L,i));
-        break;
-      case LUA_TBOOLEAN:
-        printf("%s\n", (lua_toboolean(L, i) ? "true" : "false"));
-        break;
-      case LUA_TNIL:
-        printf("%s\n", "nil");
-        break;
-      default:
-        printf("%p\n",lua_topointer(L,i));
-        break;
-    }
-  }
-  printf("dumpstack -- END\n");
-}	
+extern "C" {
 
 
 //	extern int luaopen_Tau(lua_State* L); // declare the wrapped module
 //	extern int luaopen_Tau(lua_State* L); // declare the wrapped module
 		//	loadFileIntoState(L, "Polycode Player.app/Contents/Resources/API/class.lua");
 		//	loadFileIntoState(L, "Polycode Player.app/Contents/Resources/API/class.lua");