Exemple #1
0
	void Gui::_alignWidget(WidgetPtr _widget, const FloatSize& _old, const FloatSize& _new)
	{
		if (null == _widget) return;
		
		Align align = _widget->getAlign();
		if (ALIGN_DEFAULT == align) return;

		IntCoord coord = _widget->getCoord();

		// первоначальное выравнивание
		if (IS_ALIGN_RIGHT(align)) {
			if (IS_ALIGN_LEFT(align)) {
				// раст¤гиваем
				coord.width += _new.width - _old.width;
			} else {
				// двигаем по правому краю
				coord.left += _new.width - _old.width;
			}

		} else if (false == IS_ALIGN_LEFT(align)) {
			// выравнивание по горизонтали без раст¤жени¤
			coord.left = (_new.width - coord.width) / 2;
		}

		if (IS_ALIGN_BOTTOM(align)) {
			if (IS_ALIGN_TOP(align)) {
				// раст¤гиваем
				coord.height += _new.height - _old.height;
			} else {
				coord.top += _new.height - _old.height;
			}
		} else if (false == IS_ALIGN_TOP(align)) {
			// выравнивание по вертикали без раст¤жени¤
			coord.top = (_new.height - coord.height) / 2;
		}

		_widget->setPosition(coord);
	}
		void WidgetFactory::Widget_Move(WidgetPtr _widget, const Ogre::String &_key, const Ogre::String &_value)
		{
			const std::vector<std::string> & vec = utility::split(_value);
			if (vec.size() == 4) _widget->setPosition(utility::parseInt(vec[0]), utility::parseInt(vec[1]), utility::parseInt(vec[2]), utility::parseInt(vec[3]) );
			else if (vec.size() == 2) _widget->setPosition( utility::parseInt(vec[0]), utility::parseInt(vec[1]) );
		}