コード例 #1
0
ControlsPositionData BaseAlignHandler::AlignLeftTop(const List<UIControl*>& controlsList, bool isLeft)
{
	ControlsPositionData resultData;

	// Find the reference position. All the alignment is to be done in absolute coords.
	float32 referencePos = FLT_MAX;
	for (List<UIControl*>::const_iterator iter = controlsList.begin(); iter != controlsList.end(); iter ++)
	{
		UIControl* uiControl = *iter;
		if (!uiControl)
		{
			continue;
		}

		resultData.AddControl(uiControl);
		Rect absoluteRect = uiControl->GetRect(true);
		float32 currentPos = isLeft ? absoluteRect.x : absoluteRect.y;

		if (currentPos < referencePos)
		{
			referencePos = currentPos;
		}
	}

	// Second pass - update.
	for (List<UIControl*>::const_iterator iter = controlsList.begin(); iter != controlsList.end(); iter ++)
	{
		UIControl* uiControl = *iter;
		if (!uiControl)
		{
			continue;
		}

		Rect absoluteRect = uiControl->GetRect(true);
		if (isLeft)
		{
			float32 offsetX = absoluteRect.x - referencePos;
			absoluteRect.x -= offsetX;
		}
		else
		{
			float32 offsetY = absoluteRect.y - referencePos;
			absoluteRect.y -= offsetY;
		}

		uiControl->SetRect(absoluteRect, true);
	}

	return resultData;
}
コード例 #2
0
ControlsPositionData BaseAlignHandler::AlignRightBottom(const List<UIControl*>& controlsList, bool isRight)
{
	ControlsPositionData resultData;

	// Find the bottom/right position. All the alignment is to be done in absolute coords.
	float32 referencePos = FLT_MIN;
	for (List<UIControl*>::const_iterator iter = controlsList.begin(); iter != controlsList.end(); iter ++)
	{
		UIControl* uiControl = *iter;
		if (!uiControl)
		{
			continue;
		}

		resultData.AddControl(uiControl);
		Rect absoluteRect = uiControl->GetRect(true);
		float32 controlSize = isRight ? (absoluteRect.x + absoluteRect.dx) : (absoluteRect.y + absoluteRect.dy);
		if (controlSize > referencePos)
		{
			referencePos = controlSize;
		}
	}

	// Second pass - update.
	for (List<UIControl*>::const_iterator iter = controlsList.begin(); iter != controlsList.end(); iter ++)
	{
		UIControl* uiControl = *iter;
		if (!uiControl)
		{
			continue;
		}

		Rect absoluteRect = uiControl->GetRect(true);

		if (isRight)
		{
			float32 offsetX = referencePos - (absoluteRect.x + absoluteRect.dx);
			absoluteRect.x += offsetX;
		}
		else
		{
			float32 offsetY = referencePos - (absoluteRect.y + absoluteRect.dy);
			absoluteRect.y += offsetY;
		}

		uiControl->SetRect(absoluteRect, true);
	}

	return resultData;
}
コード例 #3
0
void ControlsAdjustSizeCommand::UndoAdjustedSize(const ControlsPositionData& sizeData)
{
	for (Map<UIControl*, Rect>::const_iterator iter = sizeData.GetControlPositions().begin();
		 iter != sizeData.GetControlPositions().end(); iter ++)
	{
		UIControl* control = iter->first;
		Rect rect = iter->second;

		if (control)
		{
			control->SetRect(rect);
		}
	}
}
コード例 #4
0
ControlsPositionData BaseAlignHandler::AlignCenter(const List<UIControl*>& controlsList, bool isHorizontal)
{
	ControlsPositionData resultData;
	for (List<UIControl*>::const_iterator iter = controlsList.begin(); iter != controlsList.end(); iter ++)
	{
		UIControl* uiControl = *iter;
		if (!uiControl)
		{
			continue;
		}

		resultData.AddControl(uiControl);
	}

	// Perform the alignment on the first or last control, depending on the flag.
	UIControl* referenceControl = GetReferenceControl(controlsList);
	Vector2 referenceCenter = referenceControl->GetRect(true).GetCenter();

	// Second pass - update.
	for (List<UIControl*>::const_iterator iter = controlsList.begin(); iter != controlsList.end(); iter ++)
	{
		UIControl* uiControl = *iter;
		if (!uiControl)
		{
			continue;
		}

		Rect absoluteRect = uiControl->GetRect(true);
		Vector2 currentCenter = absoluteRect.GetCenter();
		if (isHorizontal)
		{
			absoluteRect.x -= (currentCenter.x - referenceCenter.x);
		}
		else
		{
			absoluteRect.y -= (currentCenter.y - referenceCenter.y);
		}

		uiControl->SetRect(absoluteRect, true);
	}

	return resultData;
}