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]) ); }