Changed StringAlign on Meter=String to support both horizontal and vertical positioning

This commit is contained in:
Brian 2012-05-16 14:02:31 -04:00 committed by jsmorley
parent 817a9369d9
commit 1ec7f71ce7
3 changed files with 111 additions and 13 deletions

View File

@ -109,11 +109,17 @@ protected:
enum METER_ALIGNMENT
{
ALIGN_LEFT,
ALIGN_RIGHT,
ALIGN_CENTER
ALIGN_LEFT, // Same as LeftTop
ALIGN_RIGHT, // Same as RightTop
ALIGN_CENTER, // Same as CenterTop
ALIGN_LEFTBOTTOM,
ALIGN_RIGHTBOTTOM,
ALIGN_CENTERBOTTOM,
ALIGN_LEFTCENTER,
ALIGN_RIGHTCENTER,
ALIGN_CENTERCENTER
};
enum METER_POSITION
{
POSITION_ABSOLUTE,

View File

@ -103,15 +103,21 @@ int CMeterString::GetX(bool abs)
{
switch (m_Align)
{
case ALIGN_CENTER:
case ALIGN_CENTER: // Same as ALIGN_CENTERTOP
case ALIGN_CENTERBOTTOM:
case ALIGN_CENTERCENTER:
x -= m_W / 2;
break;
case ALIGN_RIGHT:
case ALIGN_RIGHT: // Same as ALIGN_RIGHTTOP
case ALIGN_RIGHTBOTTOM:
case ALIGN_RIGHTCENTER:
x -= m_W;
break;
case ALIGN_LEFT:
case ALIGN_LEFT: // Same as ALIGN_LEFTTOP
case ALIGN_LEFTBOTTOM:
case ALIGN_LEFTCENTER:
// This is already correct
break;
}
@ -120,6 +126,34 @@ int CMeterString::GetX(bool abs)
return x;
}
/*
** Returns the Y-coordinate of the meter
**
*/
int CMeterString::GetY(bool abs)
{
int y = CMeter::GetY();
if (!abs)
{
switch (m_Align)
{
case ALIGN_LEFTCENTER:
case ALIGN_RIGHTCENTER:
case ALIGN_CENTERCENTER:
y -= m_H / 2;
break;
case ALIGN_LEFTBOTTOM:
case ALIGN_RIGHTBOTTOM:
case ALIGN_CENTERBOTTOM:
y -= m_H;
break;
}
}
return y;
}
/*
** Create the font that is used to draw the text.
@ -341,18 +375,42 @@ void CMeterString::ReadConfig(CConfigParser& parser, const WCHAR* section)
m_Scale = parser.ParseDouble(scale.c_str(), 1);
const WCHAR* align = parser.ReadString(section, L"StringAlign", L"LEFT").c_str();
if (_wcsicmp(align, L"LEFT") == 0)
if (_wcsicmp(align, L"LEFT") == 0 || _wcsicmp(align, L"LEFTTOP") == 0)
{
m_Align = ALIGN_LEFT;
}
else if (_wcsicmp(align, L"RIGHT") == 0)
else if (_wcsicmp(align, L"RIGHT") == 0 || _wcsicmp(align, L"RIGHTTOP") == 0)
{
m_Align = ALIGN_RIGHT;
}
else if (_wcsicmp(align, L"CENTER") == 0)
else if (_wcsicmp(align, L"CENTER") == 0 || _wcsicmp(align, L"CENTERTOP") == 0)
{
m_Align = ALIGN_CENTER;
}
else if (_wcsicmp(align, L"LEFTBOTTOM") == 0)
{
m_Align = ALIGN_LEFTBOTTOM;
}
else if (_wcsicmp(align, L"RIGHTBOTTOM") == 0)
{
m_Align = ALIGN_RIGHTBOTTOM;
}
else if (_wcsicmp(align, L"CENTERBOTTOM") == 0)
{
m_Align = ALIGN_CENTERBOTTOM;
}
else if (_wcsicmp(align, L"LEFTCENTER") == 0)
{
m_Align = ALIGN_LEFTCENTER;
}
else if (_wcsicmp(align, L"RIGHTCENTER") == 0)
{
m_Align = ALIGN_RIGHTCENTER;
}
else if (_wcsicmp(align, L"CENTERCENTER") == 0)
{
m_Align = ALIGN_CENTERCENTER;
}
else
{
LogWithArgs(LOG_ERROR, L"StringAlign=%s is not valid in [%s]", align, m_Name.c_str());
@ -541,16 +599,49 @@ bool CMeterString::DrawString(Graphics& graphics, RectF* rect)
switch (m_Align)
{
case ALIGN_CENTER:
case ALIGN_CENTERCENTER:
stringFormat.SetAlignment(StringAlignmentCenter);
stringFormat.SetLineAlignment(StringAlignmentCenter);
break;
case ALIGN_RIGHT:
case ALIGN_RIGHTCENTER:
stringFormat.SetAlignment(StringAlignmentFar);
stringFormat.SetLineAlignment(StringAlignmentCenter);
break;
case ALIGN_LEFT:
case ALIGN_LEFTCENTER:
stringFormat.SetAlignment(StringAlignmentNear);
stringFormat.SetLineAlignment(StringAlignmentCenter);
break;
case ALIGN_CENTERBOTTOM:
stringFormat.SetAlignment(StringAlignmentCenter);
stringFormat.SetLineAlignment(StringAlignmentFar);
break;
case ALIGN_RIGHTBOTTOM:
stringFormat.SetAlignment(StringAlignmentFar);
stringFormat.SetLineAlignment(StringAlignmentFar);
break;
case ALIGN_LEFTBOTTOM:
stringFormat.SetAlignment(StringAlignmentNear);
stringFormat.SetLineAlignment(StringAlignmentFar);
break;
case ALIGN_CENTER: // Same as CenterTop
stringFormat.SetAlignment(StringAlignmentCenter);
stringFormat.SetLineAlignment(StringAlignmentNear);
break;
case ALIGN_RIGHT: // Same as RightTop
stringFormat.SetAlignment(StringAlignmentFar);
stringFormat.SetLineAlignment(StringAlignmentNear);
break;
case ALIGN_LEFT: // Same as LeftTop
stringFormat.SetAlignment(StringAlignmentNear);
stringFormat.SetLineAlignment(StringAlignmentNear);
break;
}

View File

@ -32,6 +32,7 @@ public:
virtual UINT GetTypeID() { return TypeID<CMeterString>(); }
virtual int GetX(bool abs = false);
virtual int GetY(bool abs = false);
virtual void Initialize();
virtual bool Update();