Files
bullet3/examples/ThirdPartyLibs/Gwen/Controls/PanelListPanel.cpp
erwincoumans ab8f16961e Code-style consistency improvement:
Apply clang-format-all.sh using the _clang-format file through all the cpp/.h files.
make sure not to apply it to certain serialization structures, since some parser expects the * as part of the name, instead of type.
This commit contains no other changes aside from adding and applying clang-format-all.sh
2018-09-23 14:17:31 -07:00

124 lines
2.7 KiB
C++

#include "Gwen/Controls/PanelListPanel.h"
using namespace Gwen;
using namespace Controls;
GWEN_CONTROL_CONSTRUCTOR(PanelListPanel)
{
m_bVertical = false;
m_bSizeToChildren = true;
m_iControlSpacing = 5;
m_iLineSpacing = 5;
m_bWrapping = true;
}
void PanelListPanel::Render(Gwen::Skin::Base* /*skin*/)
{
}
Gwen::Point PanelListPanel::GetBiggestChildSize()
{
int width = 0;
int height = 0;
for (Base::List::iterator it = Children.begin(); it != Children.end(); ++it)
{
Controls::Base* pChild = *it;
if (pChild->Width() > width)
width = pChild->Width();
if (pChild->Height() > height)
height = pChild->Height();
}
return Gwen::Point(width, height);
}
void PanelListPanel::DoVerticalLayout()
{
int panelWidth = 0;
int panelX = GetPadding().left;
int panelY = GetPadding().top;
int lastPanelY = panelY;
int testWrap = 0;
Gwen::Point childSize = GetBiggestChildSize();
//Lay my children out accordingly
for (Base::List::iterator it = Children.begin(); it != Children.end(); ++it)
{
Controls::Base* pChild = *it;
testWrap = lastPanelY + m_iControlSpacing + childSize.y;
if (m_bWrapping && testWrap > Height() - GetPadding().bottom)
{
panelY = GetPadding().top;
panelX = GetPadding().left + panelWidth + m_iLineSpacing;
lastPanelY = panelY + m_iControlSpacing + childSize.y;
}
else
{
panelY = lastPanelY;
lastPanelY = testWrap;
}
pChild->SetPos(panelX, panelY);
if (pChild->X() + childSize.x > panelWidth)
panelWidth = pChild->X() + childSize.x;
}
if (m_bSizeToChildren)
{
Gwen::Point childrenSizeTotal = ChildrenSize();
SetSize(childrenSizeTotal.x, Height());
}
}
void PanelListPanel::DoHorizontalLayout()
{
int panelHeight = 0;
int panelX = GetPadding().left;
int panelY = GetPadding().top;
int lastPanelX = panelX;
int testWrap = 0;
Gwen::Point childSize = GetBiggestChildSize();
for (Base::List::iterator it = Children.begin(); it != Children.end(); ++it)
{
Controls::Base* pChild = *it;
testWrap = lastPanelX + m_iControlSpacing + childSize.x;
if (m_bWrapping && testWrap > Width() - GetPadding().right)
{
panelX = GetPadding().left;
panelY = GetPadding().top + panelHeight + m_iLineSpacing;
lastPanelX = panelX + m_iControlSpacing + childSize.x;
}
else
{
panelX = lastPanelX;
lastPanelX = testWrap;
}
pChild->SetPos(panelX, panelY);
if (pChild->Y() + childSize.y > panelHeight)
panelHeight = pChild->Y() + childSize.y;
}
if (m_bSizeToChildren)
{
Gwen::Point childrenSizeTotal = ChildrenSize();
SetSize(Width(), childrenSizeTotal.y);
}
}
void PanelListPanel::Layout(Skin::Base* skin)
{
BaseClass::Layout(skin);
if (IsHorizontalLayout())
DoHorizontalLayout();
else
DoVerticalLayout();
}