X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Flayouting%2Flinear-layout-impl.cpp;h=8d8f63b235d344ae085e22b9353681d63df1852e;hb=f2608c9be345a239eac3693feb084d51d2a7af11;hp=90367315f9b3ae78597bbfa4968bea95186d0a6a;hpb=84cda40bc4c41daca533b20739c01c43d1082400;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/layouting/linear-layout-impl.cpp b/dali-toolkit/internal/layouting/linear-layout-impl.cpp old mode 100644 new mode 100755 index 9036731..8d8f63b --- a/dali-toolkit/internal/layouting/linear-layout-impl.cpp +++ b/dali-toolkit/internal/layouting/linear-layout-impl.cpp @@ -41,6 +41,9 @@ namespace Toolkit namespace Internal { +const int HORIZONTAL_ALIGNMENT_MASK = ( Dali::Toolkit::LinearLayout::Alignment::BEGIN | Dali::Toolkit::LinearLayout::Alignment::CENTER_HORIZONTAL | Dali::Toolkit::LinearLayout::Alignment::END ); +const int VERTICAL_ALIGNMENT_MASK = ( Dali::Toolkit::LinearLayout::Alignment::TOP | Dali::Toolkit::LinearLayout::Alignment::CENTER_VERTICAL | Dali::Toolkit::LinearLayout::Alignment::BOTTOM ); + LinearLayoutPtr LinearLayout::New() { LinearLayoutPtr layout( new LinearLayout() ); @@ -51,6 +54,7 @@ LinearLayout::LinearLayout() : LayoutGroup(), mCellPadding( 0, 0 ), mOrientation( Dali::Toolkit::LinearLayout::Orientation::HORIZONTAL ), + mAlignment( Dali::Toolkit::LinearLayout::Alignment::BEGIN | Dali::Toolkit::LinearLayout::Alignment::CENTER_VERTICAL ), mTotalLength( 0 ) { } @@ -61,24 +65,46 @@ LinearLayout::~LinearLayout() void LinearLayout::SetCellPadding( LayoutSize size ) { - mCellPadding = size; + if ( mCellPadding != size ) + { + mCellPadding = size; + RequestLayout(); + } } -LayoutSize LinearLayout::GetCellPadding() +LayoutSize LinearLayout::GetCellPadding() const { return mCellPadding; } void LinearLayout::SetOrientation( Dali::Toolkit::LinearLayout::Orientation orientation ) { - mOrientation = orientation; + if ( mOrientation != orientation ) + { + mOrientation = orientation; + RequestLayout(); + } } -Dali::Toolkit::LinearLayout::Orientation LinearLayout::GetOrientation() +Dali::Toolkit::LinearLayout::Orientation LinearLayout::GetOrientation() const { return mOrientation; } +void LinearLayout::SetAlignment( unsigned int alignment ) +{ + if ( mAlignment != alignment ) + { + mAlignment = alignment; + RequestLayout(); + } +} + +unsigned int LinearLayout::GetAlignment() const +{ + return mAlignment; +} + void LinearLayout::OnMeasure( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasureSpec ) { #if defined(DEBUG_ENABLED) @@ -144,6 +170,9 @@ void LinearLayout::MeasureHorizontal( MeasureSpec widthMeasureSpec, MeasureSpec 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; iGetMeasuredHeight(); auto childMargin = childLayout->GetMargin(); - childTop = LayoutLength(padding.top) + ((childSpace - childHeight) / 2) + childMargin.top - childMargin.bottom; + switch ( mAlignment & VERTICAL_ALIGNMENT_MASK ) + { + case Dali::Toolkit::LinearLayout::Alignment::TOP: + { + childTop = LayoutLength( padding.top ) + (int)childMargin.top; + break; + } + case Dali::Toolkit::LinearLayout::Alignment::BOTTOM: + { + childTop = height - (int)padding.bottom - childHeight - (int)childMargin.bottom; + break; + } + case Dali::Toolkit::LinearLayout::Alignment::CENTER_VERTICAL: + default: + { + childTop = LayoutLength( padding.top ) + (int)( ( childSpace - childHeight ) / 2 ) + (int)childMargin.top - (int)childMargin.bottom; + break; + } + } childLeft += childMargin.start; childLayout->Layout( childLeft, childTop, childLeft + childWidth, childTop + childHeight ); - childLeft += childWidth + childMargin.end + mCellPadding.width; + childLeft += childWidth + (int)childMargin.end + mCellPadding.width; } } } @@ -318,6 +398,9 @@ void LinearLayout::MeasureVertical( MeasureSpec widthMeasureSpec, MeasureSpec he 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; iGetMargin(); childTop += childMargin.top; - childLeft = ( childSpace - childWidth ) / 2 + childMargin.start - childMargin.end; - + switch ( mAlignment & HORIZONTAL_ALIGNMENT_MASK ) + { + case Dali::Toolkit::LinearLayout::Alignment::BEGIN: + default: + { + childLeft = LayoutLength( padding.start ) + childMargin.start; + break; + } + case Dali::Toolkit::LinearLayout::Alignment::END: + { + childLeft = width - padding.end - childWidth - childMargin.end; + break; + } + case Dali::Toolkit::LinearLayout::Alignment::CENTER_HORIZONTAL: + { + childLeft = LayoutLength( padding.start ) + ( childSpace - childWidth ) / 2 + childMargin.start - childMargin.end; + break; + } + } childLayout->Layout( childLeft, childTop, childLeft + childWidth, childTop + childHeight ); - childTop += childHeight + childMargin.bottom + mCellPadding.height; + childTop += childHeight + (int)childMargin.bottom + mCellPadding.height; } } }