void LinearLayout::SetCellPadding( LayoutSize size )
{
- mCellPadding = size;
+ if ( mCellPadding != size )
+ {
+ mCellPadding = size;
+ RequestLayout();
+ }
}
LayoutSize LinearLayout::GetCellPadding()
void LinearLayout::SetOrientation( Dali::Toolkit::LinearLayout::Orientation orientation )
{
- mOrientation = orientation;
+ if ( mOrientation != orientation )
+ {
+ mOrientation = orientation;
+ RequestLayout();
+ }
}
Dali::Toolkit::LinearLayout::Orientation LinearLayout::GetOrientation()
MeasuredSize::State heightState;
} childState = { MeasuredSize::State::MEASURED_SIZE_OK, MeasuredSize::State::MEASURED_SIZE_OK };
+ // Reset total length
+ mTotalLength = 0;
+
// measure children, and determine if further resolution is required
for( unsigned int i=0; i<GetChildCount(); ++i )
{
Extents padding = GetPadding();
- LayoutLength childTop( 0 );
+ LayoutLength childTop( padding.top );
LayoutLength childLeft( padding.start );
// Where bottom of child should go
int start = 0;
int dir = 1;
- // In case of RTL, start drawing from the last child.
- // @todo re-work to draw the first child from the right edge, and move leftwards.
- // (Should have an alignment also)
+ // In case of RTL, start drawing from the last child and apply right alignment.
+ // @TODO Should we have also support Actor HorizontalAlignment|VerticalAlignment in general for LinearLayout?
if( isLayoutRtl ) {
start = count - 1;
dir = -1;
+ childLeft = padding.start + right - left - mTotalLength;
}
for( unsigned int i = 0; i < count; i++)
MeasuredSize::State heightState;
} childState = { MeasuredSize::State::MEASURED_SIZE_OK, MeasuredSize::State::MEASURED_SIZE_OK };
+ // Reset total length
+ mTotalLength = 0;
+
// measure children, and determine if further resolution is required
for( unsigned int i=0; i<GetChildCount(); ++i )
{
{
Extents padding = GetPadding();
- LayoutLength childTop( 0 );
+ LayoutLength childTop( padding.top );
LayoutLength childLeft( padding.start );
// Where bottom of child should go
auto childMargin = childLayout->GetMargin();
childTop += childMargin.top;
- childLeft = ( childSpace - childWidth ) / 2 + childMargin.start - childMargin.end;
+ childLeft = LayoutLength( padding.start ) + ( childSpace - childWidth ) / 2 + childMargin.start - childMargin.end;
childLayout->Layout( childLeft, childTop, childLeft + childWidth, childTop + childHeight );
childTop += childHeight + childMargin.bottom + mCellPadding.height;