Kaydet (Commit) 5dc0c03f authored tarafından Caolán McNamara's avatar Caolán McNamara

implement spread button layout

Change-Id: Ia17d3f4d14319adec6b0b20dced5daf5b8018c36
üst f843850e
...@@ -350,12 +350,14 @@ VclButtonBox::Requisition VclButtonBox::calculatePrimarySecondaryRequisitions() ...@@ -350,12 +350,14 @@ VclButtonBox::Requisition VclButtonBox::calculatePrimarySecondaryRequisitions()
Size aMainGroupSize(DEFAULT_CHILD_MIN_WIDTH, DEFAULT_CHILD_MIN_HEIGHT); //to-do, pull from theme Size aMainGroupSize(DEFAULT_CHILD_MIN_WIDTH, DEFAULT_CHILD_MIN_HEIGHT); //to-do, pull from theme
Size aSubGroupSize(DEFAULT_CHILD_MIN_WIDTH, DEFAULT_CHILD_MIN_HEIGHT); //to-do, pull from theme Size aSubGroupSize(DEFAULT_CHILD_MIN_WIDTH, DEFAULT_CHILD_MIN_HEIGHT); //to-do, pull from theme
bool bIgnoreSecondaryPacking = (m_eLayoutStyle == VCL_BUTTONBOX_SPREAD || m_eLayoutStyle == VCL_BUTTONBOX_CENTER);
for (const Window *pChild = GetWindow(WINDOW_FIRSTCHILD); pChild; pChild = pChild->GetWindow(WINDOW_NEXT)) for (const Window *pChild = GetWindow(WINDOW_FIRSTCHILD); pChild; pChild = pChild->GetWindow(WINDOW_NEXT))
{ {
if (!pChild->IsVisible()) if (!pChild->IsVisible())
continue; continue;
Size aChildSize = getLayoutRequisition(*pChild); Size aChildSize = getLayoutRequisition(*pChild);
if (!pChild->get_secondary()) if (bIgnoreSecondaryPacking || !pChild->get_secondary())
{ {
++aReq.m_nMainGroupChildren; ++aReq.m_nMainGroupChildren;
accumulateMaxes(aChildSize, aMainGroupSize); accumulateMaxes(aChildSize, aMainGroupSize);
...@@ -428,6 +430,7 @@ void VclButtonBox::setAllocation(const Size &rAllocation) ...@@ -428,6 +430,7 @@ void VclButtonBox::setAllocation(const Size &rAllocation)
nSubGroupPrimaryDimension = nMainGroupPrimaryDimension = std::max(nSubGroupPrimaryDimension, nMainGroupPrimaryDimension); nSubGroupPrimaryDimension = nMainGroupPrimaryDimension = std::max(nSubGroupPrimaryDimension, nMainGroupPrimaryDimension);
Point aMainGroupPos, aOtherGroupPos; Point aMainGroupPos, aOtherGroupPos;
int nSpacing = m_nSpacing;
//To-Do, other layout styles //To-Do, other layout styles
switch (m_eLayoutStyle) switch (m_eLayoutStyle)
...@@ -441,6 +444,17 @@ void VclButtonBox::setAllocation(const Size &rAllocation) ...@@ -441,6 +444,17 @@ void VclButtonBox::setAllocation(const Size &rAllocation)
nAllocPrimaryDimension - nOtherPrimaryDimension); nAllocPrimaryDimension - nOtherPrimaryDimension);
} }
break; break;
case VCL_BUTTONBOX_SPREAD:
if (aReq.m_nMainGroupChildren)
{
long nMainPrimaryDimension = getPrimaryDimension(
finalizeMaxes(aReq.m_aMainGroupSize, aReq.m_nMainGroupChildren));
long nExtraSpace = nAllocPrimaryDimension - nMainPrimaryDimension;
nExtraSpace += (aReq.m_nMainGroupChildren-1) * nSpacing;
nSpacing = nExtraSpace/(aReq.m_nMainGroupChildren+1);
setPrimaryCoordinate(aMainGroupPos, nSpacing);
}
break;
default: default:
SAL_WARN("vcl.layout", "todo unimplemented layout style"); SAL_WARN("vcl.layout", "todo unimplemented layout style");
case VCL_BUTTONBOX_DEFAULT_STYLE: case VCL_BUTTONBOX_DEFAULT_STYLE:
...@@ -458,24 +472,25 @@ void VclButtonBox::setAllocation(const Size &rAllocation) ...@@ -458,24 +472,25 @@ void VclButtonBox::setAllocation(const Size &rAllocation)
Size aChildSize; Size aChildSize;
setSecondaryDimension(aChildSize, getSecondaryDimension(rAllocation)); setSecondaryDimension(aChildSize, getSecondaryDimension(rAllocation));
bool bIgnoreSecondaryPacking = (m_eLayoutStyle == VCL_BUTTONBOX_SPREAD || m_eLayoutStyle == VCL_BUTTONBOX_CENTER);
for (Window *pChild = GetWindow(WINDOW_FIRSTCHILD); pChild; pChild = pChild->GetWindow(WINDOW_NEXT)) for (Window *pChild = GetWindow(WINDOW_FIRSTCHILD); pChild; pChild = pChild->GetWindow(WINDOW_NEXT))
{ {
if (!pChild->IsVisible()) if (!pChild->IsVisible())
continue; continue;
if (pChild->get_secondary()) if (bIgnoreSecondaryPacking || !pChild->get_secondary())
{
setPrimaryDimension(aChildSize, nSubGroupPrimaryDimension);
setLayoutAllocation(*pChild, aOtherGroupPos, aChildSize);
long nPrimaryCoordinate = getPrimaryCoordinate(aOtherGroupPos);
setPrimaryCoordinate(aOtherGroupPos, nPrimaryCoordinate + nSubGroupPrimaryDimension + m_nSpacing);
}
else
{ {
setPrimaryDimension(aChildSize, nMainGroupPrimaryDimension); setPrimaryDimension(aChildSize, nMainGroupPrimaryDimension);
setLayoutAllocation(*pChild, aMainGroupPos, aChildSize); setLayoutAllocation(*pChild, aMainGroupPos, aChildSize);
long nPrimaryCoordinate = getPrimaryCoordinate(aMainGroupPos); long nPrimaryCoordinate = getPrimaryCoordinate(aMainGroupPos);
setPrimaryCoordinate(aMainGroupPos, nPrimaryCoordinate + nMainGroupPrimaryDimension + m_nSpacing); setPrimaryCoordinate(aMainGroupPos, nPrimaryCoordinate + nMainGroupPrimaryDimension + nSpacing);
}
else
{
setPrimaryDimension(aChildSize, nSubGroupPrimaryDimension);
setLayoutAllocation(*pChild, aOtherGroupPos, aChildSize);
long nPrimaryCoordinate = getPrimaryCoordinate(aOtherGroupPos);
setPrimaryCoordinate(aOtherGroupPos, nPrimaryCoordinate + nSubGroupPrimaryDimension + nSpacing);
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment