// COEALIGN.CPP
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#include <coealign.h>

#if No_Compiler_Bug
#if (EHLeft!=CGraphicsContext::ELeft || EHCenter!=CGraphicsContext::ECenter || EHRight!=CGraphicsContext::ERight)
#error GDI enum values have changed
#endif
#endif

EXPORT_C void TCoeAlignment::SetVAlignment(TCoeVAlignment aVAlign)
	{
	const TInt value=iValue&(~EVMask);
	iValue=(TCoeAlignmentValue)(value|aVAlign);
	}

EXPORT_C void TCoeAlignment::SetHAlignment(TCoeHAlignment aHAlign)
	{
	const TInt value=iValue&(~EHMask);
	iValue=(TCoeAlignmentValue)(value|aHAlign);
	}

EXPORT_C TPoint TCoeAlignment::InnerTopLeft(const TRect& aOuter,const TSize& aInnerSize) const
	{
	TSize delta=aOuter.Size()-aInnerSize;
	switch (HAlignment())
		{
	case EHLeft:
		delta.iWidth=0;
		break;
	case EHCenter:
		delta.iWidth/=2;
		break;
	default:
		break;
		}
	switch (VAlignment())
		{
	case EVTop:
		delta.iHeight=0;
		break;
	case EVCenter:
		delta.iHeight/=2;
		break;
	default:
		break;
		}
	return(aOuter.iTl+delta);
	}

EXPORT_C TRect TCoeAlignment::InnerRect(const TRect& aOuter,const TSize& aInnerSize) const
	{
	const TSize outerSize = aOuter.Size();
	TSize clippedInner = aInnerSize;
	if (clippedInner.iWidth > outerSize.iWidth)
		clippedInner.iWidth = outerSize.iWidth;
	if (clippedInner.iHeight > outerSize.iHeight)
		clippedInner.iHeight = outerSize.iHeight;
	return(TRect(InnerTopLeft(aOuter,clippedInner),clippedInner));
	}
