Example #1
0
	void Widget::_setAlign(const IntSize& _size, bool _update)
	{
		if (mParent == null) return;

		bool need_move = false;
		bool need_size = false;
		IntCoord coord = mCoord;

		// первоначальное выравнивание
		if (IS_ALIGN_RIGHT(mAlign)) {
			if (IS_ALIGN_LEFT(mAlign)) {
				// растягиваем
				coord.width = mCoord.width + (mParent->getWidth() - _size.width);
				need_size = true;
			} else {
				// двигаем по правому краю
				coord.left = mCoord.left + (mParent->getWidth() - _size.width);
				need_move = true;
			}

		} else if (false == IS_ALIGN_LEFT(mAlign)) {
			// выравнивание по горизонтали без растяжения
			coord.left = (mParent->getWidth() - mCoord.width) / 2;
			need_move = true;
		}

		if (IS_ALIGN_BOTTOM(mAlign)) {
			if (IS_ALIGN_TOP(mAlign)) {
				// растягиваем
				coord.height = mCoord.height + (mParent->getHeight() - _size.height);
				need_size = true;
			} else {
				coord.top = mCoord.top + (mParent->getHeight() - _size.height);
				need_move = true;
			}
		} else if (false == IS_ALIGN_TOP(mAlign)) {
			// выравнивание по вертикали без растяжения
			coord.top = (mParent->getHeight() - mCoord.height) / 2;
			need_move = true;
		}

		if (need_move) {
			if (need_size) setPosition(coord);
			else setPosition(coord.point());
		} else if (need_size) {
			setSize(coord.size());
		} else _updateView(); // только если не вызвано передвижение и сайз

	}
	FloatRect WidgetManager::convertOffset(const FloatRect & _offset, Align _align, const IntSize & _parentSkinSize, int _parentWidth, int _parentHeight)
	{
		FloatRect offset = _offset;

		if (IS_ALIGN_RIGHT(_align)) {
			if (IS_ALIGN_LEFT(_align)) offset.right += _parentWidth - _parentSkinSize.width;
			else offset.left += _parentWidth - _parentSkinSize.width;
		}
		else if (false == IS_ALIGN_LEFT(_align)) offset.left += (_parentWidth - _parentSkinSize.width) / 2;

		if (IS_ALIGN_BOTTOM(_align)) {
			if (IS_ALIGN_TOP(_align)) offset.bottom += _parentHeight - _parentSkinSize.height;
			else offset.top += _parentHeight - _parentSkinSize.height;
		}
		else if (false == IS_ALIGN_TOP(_align)) offset.top += (_parentHeight - _parentSkinSize.height) / 2;

		return offset;
	}
Example #3
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);
	}