if (!min) min = 1;
return true;
}
- value = (float)atof(pNode->FirstChild()->Value());
+ value = ParsePosition(pNode->FirstChild()->Value(), parentSize);
return true;
}
-bool CGUIControlFactory::GetDimensions(const TiXmlNode *node, const char *leftTag, const char *rightTag, const char *centerTag,
- const char *widthTag, const float parentSize, float &left, float &width, float &min_width)
+bool CGUIControlFactory::GetDimensions(const TiXmlNode *node, const char *leftTag, const char *rightTag, const char *centerLeftTag,
+ const char *centerRightTag, const char *widthTag, const float parentSize, float &left,
+ float &width, float &min_width)
{
float center = 0, right = 0;
// read from the XML
bool hasLeft = GetPosition(node, leftTag, parentSize, left);
- bool hasCenter = GetPosition(node, centerTag, parentSize, center);
- bool hasRight = GetPosition(node, rightTag, parentSize, right);
+ bool hasCenter = GetPosition(node, centerLeftTag, parentSize, center);
+ if (!hasCenter && GetPosition(node, centerRightTag, parentSize, center))
+ {
+ center = parentSize - center;
+ hasCenter = true;
+ }
+ bool hasRight = false;
+ if (GetPosition(node, rightTag, parentSize, right))
+ {
+ right = parentSize - right;
+ hasRight = true;
+ }
bool hasWidth = GetDimension(node, widthTag, parentSize, width, min_width);
if (!hasLeft)
if (hasRight)
{
width = (right - center) * 2;
- left = right - center;
+ left = right - width;
hasLeft = true;
}
}
// such as buttons etc. For labels/fadelabels/images it does not matter
GetAlignment(pControlNode, "align", labelInfo.align);
- if (!GetDimensions(pControlNode, "left", "right", "centerx", "width", rect.Width(), posX, width, minWidth))
+ if (!GetDimensions(pControlNode, "left", "right", "centerleft", "centerright", "width", rect.Width(), posX, width, minWidth))
{ // didn't get 2 dimensions, so test for old <posx> as well
if (GetPosition(pControlNode, "posx", rect.Width(), posX))
{ // <posx> available, so use it along with any hacks we used to support
(labelInfo.align & XBFONT_RIGHT))
posX -= width;
}
- if (!width)
+ if (!width) // no width specified, so compute from parent
width = max(rect.Width() - posX, 0.0f);
}
- if (!GetDimensions(pControlNode, "top", "bottom", "centery", "height", rect.Height(), posY, height, minHeight))
+ if (!GetDimensions(pControlNode, "top", "bottom", "centertop", "centerbottom", "height", rect.Height(), posY, height, minHeight))
{
GetPosition(pControlNode, "posy", rect.Height(), posY);
if (!height)
((CGUIListContainer *)control)->SetType(viewType, viewLabel);
((CGUIListContainer *)control)->SetPageControl(pageControl);
((CGUIListContainer *)control)->SetRenderOffset(offset);
+ ((CGUIListContainer *)control)->SetAutoScrolling(pControlNode);
}
else if (type == CGUIControl::GUICONTAINER_WRAPLIST)
{
((CGUIWrappingListContainer *)control)->SetType(viewType, viewLabel);
((CGUIWrappingListContainer *)control)->SetPageControl(pageControl);
((CGUIWrappingListContainer *)control)->SetRenderOffset(offset);
+ ((CGUIWrappingListContainer *)control)->SetAutoScrolling(pControlNode);
}
else if (type == CGUIControl::GUICONTAINER_EPGGRID)
{
((CGUIFixedListContainer *)control)->SetType(viewType, viewLabel);
((CGUIFixedListContainer *)control)->SetPageControl(pageControl);
((CGUIFixedListContainer *)control)->SetRenderOffset(offset);
+ ((CGUIFixedListContainer *)control)->SetAutoScrolling(pControlNode);
}
else if (type == CGUIControl::GUICONTAINER_PANEL)
{
((CGUIPanelContainer *)control)->SetType(viewType, viewLabel);
((CGUIPanelContainer *)control)->SetPageControl(pageControl);
((CGUIPanelContainer *)control)->SetRenderOffset(offset);
+ ((CGUIPanelContainer *)control)->SetAutoScrolling(pControlNode);
}
else if (type == CGUIControl::GUICONTROL_TEXTBOX)
{
if (infoLabels.size())
((CGUITextBox *)control)->SetInfo(infoLabels[0]);
((CGUITextBox *)control)->SetAutoScrolling(pControlNode);
+ ((CGUITextBox *)control)->SetMinHeight(minHeight);
}
else if (type == CGUIControl::GUICONTROL_SELECTBUTTON)
{