void MouseCursor::setQueryFilter(unsigned int filter)
	{
		mMouseCursorDesc.queryFilter = filter;

		Sheet* sheet = mMouseCursorDesc.guiManager->getActiveSheet();
		if(sheet != NULL)
		{
			MouseEventArgs args(sheet);
			args.position = getPosition();
		
			sheet->fireSheetEvent(SHEET_EVENT_MOUSE_CURSOR_QUERY_FILTER_CHANGED,args);
		}
	}
	void MouseCursor::setEnabled(bool enable)
	{
		if(enable == mMouseCursorDesc.enabled)
			return;

		mMouseCursorDesc.enabled = enable;

		// Fire enabled changed event.
		Sheet* sheet = mMouseCursorDesc.guiManager->getActiveSheet();
		if(sheet != NULL)
		{
			MouseEventArgs args(sheet);
			args.position = getPosition();

			sheet->fireSheetEvent(SHEET_EVENT_MOUSE_CURSOR_ENABLED_CHANGED,args);
		}
	}
	void MouseCursor::setSkinType(const Ogre::String type)
	{
		mSkinType = type;
		mDefaultSkinType = type;

		Ogre::Image i;
		i.load(mSkinTypeManager->getSkinType("MouseCursor",mSkinType)->getSkinElement(TEXTURE)->getTextureName(),Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
		// update cursor size to match texture used
		setSize(i.getWidth(),i.getHeight());

		Sheet* sheet = mMouseCursorDesc.guiManager->getActiveSheet();
		if(sheet != NULL)
		{
			MouseEventArgs args(sheet);
			args.position = getPosition();
			sheet->fireSheetEvent(SHEET_EVENT_MOUSE_CURSOR_SKIN_CHANGED,args);
		}
	}
	void MouseCursor::setPosition(float xPosition, float yPosition)
	{
		mDimensions.position.x = xPosition - (mDimensions.size.width/2.0);
		mDimensions.position.y = yPosition - (mDimensions.size.height/2.0);

		bool fireBorderEnterEvent = false;
		bool fireBorderLeaveEvent = false;

		// If cursor horizontal position is on left edge of viewport
		if(xPosition <= 0)
		{
			// If we haven't entered the border already, fire event
			if(!mEnteredBorders[0])
			{
				mEnteredBorders[0] = true;
				fireBorderEnterEvent = true;
			}
		}
		// Else if cursor horizontal position is on right edge of viewport
		else if(xPosition >= (mMouseCursorDesc.guiManager->getViewport()->getActualWidth() - 1))
		{
			// If we haven't entered the border already, fire event
			if(!mEnteredBorders[2])
			{
				mEnteredBorders[2] = true;
				fireBorderEnterEvent = true;
			}
		}
		// Else cursor horizontal position lies in between left and right edge of viewport
		else
		{
			if(mEnteredBorders[0] || mEnteredBorders[2])
			{
				mEnteredBorders[0] = false;
				mEnteredBorders[2] = false;
				fireBorderLeaveEvent = true;
			}
		}

		// If cursor vertical position is on top edge of viewport
		if(yPosition <= 0)
		{
			// If we haven't entered the border already, fire event
			if(!mEnteredBorders[1])
			{
				mEnteredBorders[1] = true;
				fireBorderEnterEvent = true;
			}
		}
		// Else if cursor vertical position is on bottom edge of viewport
		else if(yPosition >= (mMouseCursorDesc.guiManager->getViewport()->getActualHeight() - 1))
		{
			// If we haven't entered the border already, fire event
			if(!mEnteredBorders[3])
			{
				mEnteredBorders[3] = true;
				fireBorderEnterEvent = true;
			}
		}
		// Else cursor vertical position lies in between top and bottom edge of viewport
		else
		{
			if(mEnteredBorders[1] || mEnteredBorders[3])
			{
				mEnteredBorders[1] = false;
				mEnteredBorders[3] = false;
				fireBorderLeaveEvent = true;
			}
		}

		// Fire events
		if(fireBorderEnterEvent)
		{
			Sheet* sheet = mMouseCursorDesc.guiManager->getActiveSheet();
			if(sheet != NULL)
			{
				MouseEventArgs args(sheet);
				args.position = getPosition();

				sheet->fireSheetEvent(SHEET_EVENT_MOUSE_CURSOR_ENTER_SHEET_BORDER,args);
			}
		}

		if(fireBorderLeaveEvent)
		{
			Sheet* sheet = mMouseCursorDesc.guiManager->getActiveSheet();
			if(sheet != NULL)
			{
				MouseEventArgs args(sheet);
				args.position = getPosition();

				sheet->fireSheetEvent(SHEET_EVENT_MOUSE_CURSOR_LEAVE_SHEET_BORDER,args);
			}
		}
	}