From: minho.sun Date: Fri, 22 Jun 2018 01:04:16 +0000 (+0900) Subject: Revert "[Tizen] Merge HBoxLayout and VBoxLayout into LinearLayout." X-Git-Tag: accepted/tizen/unified/20180622.122731~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F03%2F182303%2F1;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Revert "[Tizen] Merge HBoxLayout and VBoxLayout into LinearLayout." This reverts commit 84cda40bc4c41daca533b20739c01c43d1082400. Change-Id: I85689ec9a408216c1ce7a6ae1eaf2a1cbb3759c8 --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp index 1be1e66..e5a57b3 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp @@ -21,8 +21,9 @@ #include #include +#include +#include #include -#include #include @@ -46,7 +47,7 @@ int UtcDaliLayouting_HboxLayout01(void) Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = LinearLayout::New(); + auto hboxLayout = HboxLayout::New(); hboxLayout.SetCellPadding( LayoutSize( 10, 0 ) ); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -82,7 +83,7 @@ int UtcDaliLayouting_HboxLayout01(void) DALI_TEST_EQUALS( controls[3].GetProperty( Actor::Property::SIZE ), Vector3( 100.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); // Change a layout - auto newHBoxLayout = LinearLayout::New(); + auto newHBoxLayout = HboxLayout::New(); newHBoxLayout.SetCellPadding( LayoutSize( 10, 0 ) ); DevelControl::SetLayout( hbox, newHBoxLayout ); @@ -105,11 +106,11 @@ int UtcDaliLayouting_HboxLayout02(void) Stage stage = Stage::GetCurrent(); auto hbox1 = Control::New(); - auto hboxLayout1 = LinearLayout::New(); + auto hboxLayout1 = HboxLayout::New(); DevelControl::SetLayout( hbox1, hboxLayout1 ); auto hbox2 = Control::New(); - auto hboxLayout2 = LinearLayout::New(); + auto hboxLayout2 = HboxLayout::New(); DevelControl::SetLayout( hbox2, hboxLayout2 ); hbox1.SetName( "HBox1"); @@ -145,7 +146,7 @@ int UtcDaliLayouting_HboxLayout02(void) hbox2.SetAnchorPoint( AnchorPoint::CENTER ); auto hbox3 = Control::New(); - auto hboxLayout3 = LinearLayout::New(); + auto hboxLayout3 = HboxLayout::New(); DevelControl::SetLayout( hbox3, hboxLayout3 ); hbox3.SetParentOrigin( ParentOrigin::CENTER ); @@ -205,11 +206,11 @@ int UtcDaliLayouting_HboxLayout03(void) Stage stage = Stage::GetCurrent(); auto hbox1 = Control::New(); - auto hboxLayout1 = LinearLayout::New(); + auto hboxLayout1 = HboxLayout::New(); DevelControl::SetLayout( hbox1, hboxLayout1 ); auto hbox2 = Control::New(); - auto hboxLayout2 = LinearLayout::New(); + auto hboxLayout2 = HboxLayout::New(); DevelControl::SetLayout( hbox2, hboxLayout2 ); hbox1.SetName( "HBox1"); @@ -249,7 +250,7 @@ int UtcDaliLayouting_HboxLayout03(void) hbox2.SetAnchorPoint( AnchorPoint::CENTER ); auto hbox3 = Control::New(); - auto hboxLayout3 = LinearLayout::New(); + auto hboxLayout3 = HboxLayout::New(); DevelControl::SetLayout( hbox3, hboxLayout3); hbox3.SetParentOrigin( ParentOrigin::CENTER ); @@ -310,11 +311,11 @@ int UtcDaliLayouting_HboxLayout04(void) Stage stage = Stage::GetCurrent(); auto hbox1 = Control::New(); - auto hboxLayout1 = LinearLayout::New(); + auto hboxLayout1 = HboxLayout::New(); DevelControl::SetLayout( hbox1, hboxLayout1 ); auto hbox2 = Control::New(); - auto hboxLayout2 = LinearLayout::New(); + auto hboxLayout2 = HboxLayout::New(); DevelControl::SetLayout( hbox2, hboxLayout2 ); hbox1.SetName( "HBox1"); // Default spec is to wrap content @@ -351,7 +352,7 @@ int UtcDaliLayouting_HboxLayout04(void) controls[6].SetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::MATCH_PARENT ); auto hbox3 = Control::New(); - auto hboxLayout3 = LinearLayout::New(); + auto hboxLayout3 = HboxLayout::New(); DevelControl::SetLayout( hbox3, hboxLayout3 ); hbox3.SetParentOrigin( ParentOrigin::CENTER ); @@ -409,7 +410,7 @@ int UtcDaliLayouting_HboxLayout05(void) Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = LinearLayout::New(); + auto hboxLayout = HboxLayout::New(); hboxLayout.SetCellPadding( LayoutSize( 10, 0 ) ); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -459,7 +460,7 @@ int UtcDaliLayouting_HboxLayout_Padding01(void) Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = LinearLayout::New(); + auto hboxLayout = HboxLayout::New(); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -524,7 +525,7 @@ int UtcDaliLayouting_HboxLayout_Padding02(void) Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = LinearLayout::New(); + auto hboxLayout = HboxLayout::New(); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -603,7 +604,7 @@ int UtcDaliLayouting_HboxLayout_Padding03(void) Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = LinearLayout::New(); + auto hboxLayout = HboxLayout::New(); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -689,7 +690,7 @@ int UtcDaliLayouting_HboxLayout_Margin01(void) Stage stage = Stage::GetCurrent(); auto hbox = Control::New(); - auto hboxLayout = LinearLayout::New(); + auto hboxLayout = HboxLayout::New(); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); @@ -751,8 +752,7 @@ int UtcDaliLayouting_VboxLayout01(void) Stage stage = Stage::GetCurrent(); auto vbox = Control::New(); - auto vboxLayout = LinearLayout::New(); - vboxLayout.SetOrientation( LinearLayout::Orientation::VERTICAL ); + auto vboxLayout = VboxLayout::New(); DevelControl::SetLayout( vbox, vboxLayout ); vbox.SetName( "Vbox"); @@ -811,8 +811,7 @@ int UtcDaliLayouting_VboxLayout02(void) stage.Add( rootControl ); auto vbox = Control::New(); - auto vboxLayout = LinearLayout::New(); - vboxLayout.SetOrientation( LinearLayout::Orientation::VERTICAL ); + auto vboxLayout = VboxLayout::New(); DevelControl::SetLayout( vbox, vboxLayout ); vbox.SetName( "Vbox"); rootControl.Add( vbox ); @@ -876,15 +875,14 @@ int UtcDaliLayouting_VboxLayout03(void) // // For this test, add an hbox instead auto hbox = Control::New(); - auto hboxLayout = LinearLayout::New(); + auto hboxLayout = HboxLayout::New(); DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "Hbox"); stage.Add( hbox ); auto vbox = Control::New(); - auto vboxLayout = LinearLayout::New(); + auto vboxLayout = VboxLayout::New(); vboxLayout.SetCellPadding( LayoutSize( 0, 10 ) ); - vboxLayout.SetOrientation( LinearLayout::Orientation::VERTICAL ); DALI_TEST_EQUALS( vboxLayout.GetCellPadding(), LayoutSize( 0, 10 ), TEST_LOCATION ); diff --git a/dali-toolkit/devel-api/file.list b/dali-toolkit/devel-api/file.list index 31af329..2383c61 100755 --- a/dali-toolkit/devel-api/file.list +++ b/dali-toolkit/devel-api/file.list @@ -34,7 +34,8 @@ devel_api_src_files = \ $(devel_api_src_dir)/image-loader/texture-manager.cpp \ $(devel_api_src_dir)/layouting/flex-layout.cpp \ $(devel_api_src_dir)/layouting/absolute-layout.cpp \ - $(devel_api_src_dir)/layouting/linear-layout.cpp \ + $(devel_api_src_dir)/layouting/hbox-layout.cpp \ + $(devel_api_src_dir)/layouting/vbox-layout.cpp \ $(devel_api_src_dir)/layouting/layout-item.cpp \ $(devel_api_src_dir)/layouting/layout-item-impl.cpp \ $(devel_api_src_dir)/layouting/layout-controller.cpp \ @@ -85,7 +86,8 @@ devel_api_layouting_header_files = \ $(devel_api_src_dir)/layouting/absolute-layout.h \ $(devel_api_src_dir)/layouting/child-layout-data.h \ $(devel_api_src_dir)/layouting/flex-layout.h \ - $(devel_api_src_dir)/layouting/linear-layout.h \ + $(devel_api_src_dir)/layouting/hbox-layout.h \ + $(devel_api_src_dir)/layouting/vbox-layout.h \ $(devel_api_src_dir)/layouting/layout-item.h \ $(devel_api_src_dir)/layouting/layout-item-impl.h \ $(devel_api_src_dir)/layouting/layout-controller.h \ diff --git a/dali-toolkit/devel-api/layouting/absolute-layout.h b/dali-toolkit/devel-api/layouting/absolute-layout.h index ad195ab..b74b19d 100644 --- a/dali-toolkit/devel-api/layouting/absolute-layout.h +++ b/dali-toolkit/devel-api/layouting/absolute-layout.h @@ -22,7 +22,6 @@ #include #include #include -#include namespace Dali { @@ -40,7 +39,7 @@ class AbsoluteLayout; * Positions are from the top left of the layout and can be set using the * Actor::Property::POSITION and alike. */ -class DALI_TOOLKIT_API AbsoluteLayout : public LayoutGroup +class DALI_IMPORT_API AbsoluteLayout : public LayoutGroup { public: diff --git a/dali-toolkit/devel-api/layouting/hbox-layout.cpp b/dali-toolkit/devel-api/layouting/hbox-layout.cpp new file mode 100644 index 0000000..7f05745 --- /dev/null +++ b/dali-toolkit/devel-api/layouting/hbox-layout.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +//CLASS HEADER +#include + +//EXTERNAL HEADERS +//INTERNAL HEADERS +#include + +namespace Dali +{ +namespace Toolkit +{ + +HboxLayout::HboxLayout() +{ +} + +HboxLayout HboxLayout::New() +{ + Internal::HboxLayoutPtr internal = Internal::HboxLayout::New(); + return HboxLayout( internal.Get() ); +} + +HboxLayout HboxLayout::DownCast( BaseHandle handle ) +{ + return HboxLayout( dynamic_cast< Dali::Toolkit::Internal::HboxLayout*>( handle.GetObjectPtr() ) ); +} + +HboxLayout::HboxLayout( const HboxLayout& other ) +: LayoutGroup( other ) +{ +} + +HboxLayout& HboxLayout::operator=( const HboxLayout& other ) +{ + if( &other != this ) + { + LayoutGroup::operator=( other ); + } + return *this; +} + +void HboxLayout::SetCellPadding( LayoutSize size ) +{ + GetImplementation(*this).SetCellPadding( size ); +} + +LayoutSize HboxLayout::GetCellPadding() +{ + return GetImplementation(*this).GetCellPadding(); +} + +HboxLayout::HboxLayout( Dali::Toolkit::Internal::HboxLayout* object ) +: LayoutGroup( object ) +{ +} + +} // namespace Toolkit +} // namespace Dali diff --git a/dali-toolkit/devel-api/layouting/linear-layout.h b/dali-toolkit/devel-api/layouting/hbox-layout.h similarity index 60% rename from dali-toolkit/devel-api/layouting/linear-layout.h rename to dali-toolkit/devel-api/layouting/hbox-layout.h index 95303dc..b62e716 100644 --- a/dali-toolkit/devel-api/layouting/linear-layout.h +++ b/dali-toolkit/devel-api/layouting/hbox-layout.h @@ -1,5 +1,5 @@ -#ifndef DALI_TOOLKIT_LAYOUTING_LINEAR_LAYOUT_H -#define DALI_TOOLKIT_LAYOUTING_LINEAR_LAYOUT_H +#ifndef DALI_TOOLKIT_LAYOUTING_HBOX_LAYOUT_H +#define DALI_TOOLKIT_LAYOUTING_HBOX_LAYOUT_H /* * Copyright (c) 2018 Samsung Electronics Co., Ltd. @@ -31,14 +31,14 @@ namespace Toolkit namespace Internal DALI_INTERNAL { -class LinearLayout; +class HboxLayout; } /** - * This class implements a linear box layout, automatically handling + * This class implements a horizontal box layout, automatically handling * right to left or left to right direction change. */ -class DALI_TOOLKIT_API LinearLayout : public LayoutGroup +class DALI_TOOLKIT_API HboxLayout : public LayoutGroup { public: @@ -48,55 +48,63 @@ public: CHILD_PROPERTY_END_INDEX = LINEAR_LAYOUT_CHILD_PROPERTY_END_INDEX }; - /** - * @brief Enumeration for the direction in which the content is laid out - */ - enum class Orientation + struct Property { - HORIZONTAL, ///< Horizontal (row) - VERTICAL ///< Vertical (column) + // @todo When we can have event-only properties for BaseObject, this will be useful. + enum + { + CELL_PADDING = PROPERTY_REGISTRATION_START_INDEX + 2000 + }; + }; + + struct ChildProperty + { + enum + { + WEIGHT = CHILD_PROPERTY_START_INDEX + }; }; /** - * @brief Creates an uninitialized LinearLayout handle. + * @brief Creates an uninitialized HboxLayout handle. * - * Initialize it using LinearLayout::New(). + * Initialize it using HboxLayout::New(). * Calling member functions with an uninitialized handle is not allowed. */ - LinearLayout(); + HboxLayout(); /** - * @brief Creates a LinearLayout object. + * @brief Creates a HboxLayout object. */ - static LinearLayout New(); + static HboxLayout New(); /** - * @brief Downcasts a handle to a LinearLayout handle. + * @brief Downcasts a handle to a HboxLayout handle. * - * If handle points to a LinearLayout, the downcast produces a valid handle. + * If handle points to a HboxLayout, the downcast produces a valid handle. * If not, the returned handle is left uninitialized. * @param[in] handle to an object - * @return Handle to a LinearLayout or an uninitialized handle + * @return Handle to a HboxLayout or an uninitialized handle */ - static LinearLayout DownCast( BaseHandle handle ); + static HboxLayout DownCast( BaseHandle handle ); /** * @brief Copy constructor */ - LinearLayout( const LinearLayout& other ); + HboxLayout( const HboxLayout& other ); /** * @brief Assigment operator */ - LinearLayout& operator=( const LinearLayout& other ); + HboxLayout& operator=( const HboxLayout& other ); /** * @brief Default destructor. * * This is non-virtual, since derived Handle types must not contain data or virtual methods */ - ~LinearLayout()=default; + ~HboxLayout()=default; /** * @brief Set the padding between cells in the layout @@ -112,33 +120,19 @@ public: */ LayoutSize GetCellPadding(); - /** - * @brief Set the orientation in the layout - * - * @param[in] orientation The orientation. - */ - void SetOrientation( Orientation orientation ); - - /** - * @brief Get the orientation in the layout - * - * @return The orientation. - */ - Orientation GetOrientation(); - public: // Not intended for application developers /// @cond internal /** - * @brief This constructor is used by LinearLayout::New() methods. + * @brief This constructor is used by HboxLayout::New() methods. * * @param[in] actor A pointer to a newly allocated Dali resource */ - explicit DALI_INTERNAL LinearLayout( Internal::LinearLayout* body ); + explicit DALI_INTERNAL HboxLayout( Internal::HboxLayout* body ); /// @endcond }; } // namespace Toolkit } // namespace Dali -#endif // DALI_TOOLKIT_LAYOUTING_LINEAR_LAYOUT_H +#endif // DALI_TOOLKIT_LAYOUTING_HBOX_LAYOUT_H diff --git a/dali-toolkit/devel-api/layouting/linear-layout.cpp b/dali-toolkit/devel-api/layouting/linear-layout.cpp deleted file mode 100644 index e9e7e5b..0000000 --- a/dali-toolkit/devel-api/layouting/linear-layout.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -//CLASS HEADER -#include "linear-layout.h" - -//INTERNAL INCLUDES -#include - -namespace Dali -{ -namespace Toolkit -{ - -LinearLayout::LinearLayout() -{ -} - -LinearLayout LinearLayout::New() -{ - Internal::LinearLayoutPtr internal = Internal::LinearLayout::New(); - return LinearLayout( internal.Get() ); -} - -LinearLayout LinearLayout::DownCast( BaseHandle handle ) -{ - return LinearLayout( dynamic_cast< Dali::Toolkit::Internal::LinearLayout*>( handle.GetObjectPtr() ) ); -} - -LinearLayout::LinearLayout( const LinearLayout& other ) -: LayoutGroup( other ) -{ -} - -LinearLayout& LinearLayout::operator=( const LinearLayout& other ) -{ - if( &other != this ) - { - LayoutGroup::operator=( other ); - } - return *this; -} - -void LinearLayout::SetCellPadding( LayoutSize size ) -{ - GetImplementation(*this).SetCellPadding( size ); - GetImplementation(*this).RequestLayout(); -} - -LayoutSize LinearLayout::GetCellPadding() -{ - return GetImplementation(*this).GetCellPadding(); - GetImplementation(*this).RequestLayout(); -} - -void LinearLayout::SetOrientation( LinearLayout::Orientation orientation ) -{ - GetImplementation(*this).SetOrientation( orientation ); - GetImplementation(*this).RequestLayout(); -} - -LinearLayout::Orientation LinearLayout::GetOrientation() -{ - return GetImplementation(*this).GetOrientation(); - GetImplementation(*this).RequestLayout(); -} - -LinearLayout::LinearLayout( Dali::Toolkit::Internal::LinearLayout* object ) -: LayoutGroup( object ) -{ -} - -} // namespace Toolkit -} // namespace Dali diff --git a/dali-toolkit/internal/file.list b/dali-toolkit/internal/file.list index 9835afd..9c4b001 100755 --- a/dali-toolkit/internal/file.list +++ b/dali-toolkit/internal/file.list @@ -13,7 +13,8 @@ toolkit_src_files = \ $(toolkit_src_dir)/builder/replacement.cpp \ $(toolkit_src_dir)/layouting/flex-layout-impl.cpp \ $(toolkit_src_dir)/layouting/absolute-layout-impl.cpp \ - $(toolkit_src_dir)/layouting/linear-layout-impl.cpp \ + $(toolkit_src_dir)/layouting/hbox-layout-impl.cpp \ + $(toolkit_src_dir)/layouting/vbox-layout-impl.cpp \ $(toolkit_src_dir)/layouting/layout-item-data-impl.cpp \ $(toolkit_src_dir)/layouting/layout-group-data-impl.cpp \ $(toolkit_src_dir)/layouting/layout-controller-debug.cpp \ diff --git a/dali-toolkit/internal/layouting/linear-layout-impl.cpp b/dali-toolkit/internal/layouting/hbox-layout-impl.cpp similarity index 50% rename from dali-toolkit/internal/layouting/linear-layout-impl.cpp rename to dali-toolkit/internal/layouting/hbox-layout-impl.cpp index 9036731..7d9d094 100644 --- a/dali-toolkit/internal/layouting/linear-layout-impl.cpp +++ b/dali-toolkit/internal/layouting/hbox-layout-impl.cpp @@ -15,14 +15,13 @@ */ //CLASS HEADER -#include "linear-layout-impl.h" +#include -//PUBLIC INCLUDES +//EXTERNAL HEADERS +//INTERNAL HEADERS #include #include #include - -//INTERNAL INCLUDES #include #include #include @@ -41,96 +40,76 @@ namespace Toolkit namespace Internal { -LinearLayoutPtr LinearLayout::New() +HboxLayoutPtr HboxLayout::New() { - LinearLayoutPtr layout( new LinearLayout() ); + HboxLayoutPtr layout( new HboxLayout() ); return layout; } -LinearLayout::LinearLayout() +HboxLayout::HboxLayout() : LayoutGroup(), mCellPadding( 0, 0 ), - mOrientation( Dali::Toolkit::LinearLayout::Orientation::HORIZONTAL ), mTotalLength( 0 ) { } -LinearLayout::~LinearLayout() +HboxLayout::~HboxLayout() { } -void LinearLayout::SetCellPadding( LayoutSize size ) +void HboxLayout::DoInitialize() { - mCellPadding = size; } -LayoutSize LinearLayout::GetCellPadding() +void HboxLayout::DoRegisterChildProperties( const std::string& containerType ) { - return mCellPadding; + auto typeInfo = Dali::TypeRegistry::Get().GetTypeInfo( containerType ); + if( typeInfo ) + { + Property::IndexContainer indices; + typeInfo.GetChildPropertyIndices( indices ); + + if( std::find( indices.Begin(), indices.End(), Toolkit::HboxLayout::ChildProperty::WEIGHT ) == indices.End() ) + { + ChildPropertyRegistration( typeInfo.GetName(), "weight", + Toolkit::HboxLayout::ChildProperty::WEIGHT, Property::FLOAT ); + } + } } -void LinearLayout::SetOrientation( Dali::Toolkit::LinearLayout::Orientation orientation ) +void HboxLayout::OnChildAdd( LayoutItem& child ) { - mOrientation = orientation; + auto owner = child.GetOwner(); + owner.SetProperty( Toolkit::HboxLayout::ChildProperty::WEIGHT, 1.0f ); } -Dali::Toolkit::LinearLayout::Orientation LinearLayout::GetOrientation() +void HboxLayout::SetCellPadding( LayoutSize size ) { - return mOrientation; + mCellPadding = size; } -void LinearLayout::OnMeasure( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasureSpec ) +LayoutSize HboxLayout::GetCellPadding() { -#if defined(DEBUG_ENABLED) - auto actor = Actor::DownCast(GetOwner()); - - std::ostringstream oss; - oss << "LinearLayout::OnMeasure "; - if( actor ) - { - oss << "Actor Id:" << actor.GetId() << " Name:" << actor.GetName() << " "; - } - oss << "widthMeasureSpec:" << widthMeasureSpec << " heightMeasureSpec:" << heightMeasureSpec << std::endl; - DALI_LOG_INFO( gLogFilter, Debug::Concise, oss.str().c_str() ); -#endif - - if( mOrientation == Dali::Toolkit::LinearLayout::Orientation::HORIZONTAL ) - { - MeasureHorizontal( widthMeasureSpec, heightMeasureSpec ); - } - else - { - MeasureVertical( widthMeasureSpec, heightMeasureSpec ); - } + return mCellPadding; } -void LinearLayout::OnLayout( bool changed, LayoutLength left, LayoutLength top, LayoutLength right, LayoutLength bottom ) +void HboxLayout::OnMeasure( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasureSpec ) { #if defined(DEBUG_ENABLED) auto actor = Actor::DownCast(GetOwner()); std::ostringstream oss; - oss << "LinearLayout::OnLayout "; + oss << "HBoxLayout::OnMeasure "; if( actor ) { oss << "Actor Id:" << actor.GetId() << " Name:" << actor.GetName() << " "; } - oss << "left:" << left << " top:" << top << " right:" << right << " bottom:" << bottom << std::endl; + oss << "widthMeasureSpec:" << widthMeasureSpec << " heightMeasureSpec:" << heightMeasureSpec << std::endl; DALI_LOG_INFO( gLogFilter, Debug::Concise, oss.str().c_str() ); #endif - if( mOrientation == Dali::Toolkit::LinearLayout::Orientation::HORIZONTAL ) - { - LayoutHorizontal( left, top, right, bottom ); - } - else - { - LayoutVertical( left, top, right, bottom ); - } -} + DALI_LOG_INFO( gLogFilter, Debug::Concise, "HboxLayout::OnMeasure widthSize(%d) \n", widthMeasureSpec.GetSize()); -void LinearLayout::MeasureHorizontal( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasureSpec ) -{ auto widthMode = widthMeasureSpec.GetMode(); auto heightMode = heightMeasureSpec.GetMode(); bool isExactly = (widthMode == MeasureSpec::Mode::EXACTLY); @@ -157,7 +136,7 @@ void LinearLayout::MeasureHorizontal( MeasureSpec widthMeasureSpec, MeasureSpec auto childWidth = childLayout->GetMeasuredWidth(); auto childMargin = childLayout->GetMargin(); - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "LinearLayout::OnMeasure childWidth(%d)\n", MeasureSpec::IntType( childWidth ) ); + DALI_LOG_INFO( gLogFilter, Debug::Verbose, "HboxLayout::OnMeasure childWidth(%d)\n", MeasureSpec::IntType( childWidth ) ); auto length = childWidth + LayoutLength::IntType(childMargin.start + childMargin.end); @@ -224,7 +203,7 @@ void LinearLayout::MeasureHorizontal( MeasureSpec widthMeasureSpec, MeasureSpec } } -void LinearLayout::ForceUniformHeight( int count, MeasureSpec widthMeasureSpec ) +void HboxLayout::ForceUniformHeight( int count, MeasureSpec widthMeasureSpec ) { // Pretend that the linear layout has an exact size. This is the measured height of // ourselves. The measured height should be the max height of the children, changed @@ -254,7 +233,7 @@ void LinearLayout::ForceUniformHeight( int count, MeasureSpec widthMeasureSpec ) } } -void LinearLayout::LayoutHorizontal( LayoutLength left, LayoutLength top, LayoutLength right, LayoutLength bottom ) +void HboxLayout::OnLayout( bool changed, LayoutLength left, LayoutLength top, LayoutLength right, LayoutLength bottom ) { auto owner = GetOwner(); auto actor = Actor::DownCast(owner); @@ -292,6 +271,7 @@ void LinearLayout::LayoutHorizontal( LayoutLength left, LayoutLength top, Layout { auto childWidth = childLayout->GetMeasuredWidth(); auto childHeight = childLayout->GetMeasuredHeight(); + auto childMargin = childLayout->GetMargin(); childTop = LayoutLength(padding.top) + ((childSpace - childHeight) / 2) + childMargin.top - childMargin.bottom; @@ -303,150 +283,6 @@ void LinearLayout::LayoutHorizontal( LayoutLength left, LayoutLength top, Layout } } -void LinearLayout::MeasureVertical( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasureSpec ) -{ - auto widthMode = widthMeasureSpec.GetMode(); - - bool matchWidth = false; - bool allFillParent = true; - LayoutLength maxWidth = 0; - LayoutLength alternativeMaxWidth = 0; - - struct - { - MeasuredSize::State widthState; - MeasuredSize::State heightState; - } childState = { MeasuredSize::State::MEASURED_SIZE_OK, MeasuredSize::State::MEASURED_SIZE_OK }; - - // measure children, and determine if further resolution is required - for( unsigned int i=0; iGetOwner(); - auto desiredWidth = childOwner.GetProperty( Toolkit::LayoutItem::ChildProperty::WIDTH_SPECIFICATION ); - - MeasureChildWithMargins( childLayout, widthMeasureSpec, 0, heightMeasureSpec, 0 ); - auto childHeight = childLayout->GetMeasuredHeight(); - auto childMargin = childLayout->GetMargin(); - auto length = childHeight + LayoutLength::IntType(childMargin.top + childMargin.bottom ); - - auto cellPadding = iGetMeasuredWidth() + marginWidth; - - // was combineMeasuredStates() - if( childLayout->GetMeasuredWidthAndState().GetState() == MeasuredSize::State::MEASURED_SIZE_TOO_SMALL ) - { - childState.widthState = MeasuredSize::State::MEASURED_SIZE_TOO_SMALL; - } - if( childLayout->GetMeasuredHeightAndState().GetState() == MeasuredSize::State::MEASURED_SIZE_TOO_SMALL ) - { - childState.heightState = MeasuredSize::State::MEASURED_SIZE_TOO_SMALL; - } - - maxWidth = std::max( maxWidth, childWidth ); - allFillParent = ( allFillParent && desiredWidth == Toolkit::ChildLayoutData::MATCH_PARENT ); - alternativeMaxWidth = std::max( alternativeMaxWidth, matchWidthLocally ? marginWidth : childWidth ); - } - } - Extents padding = GetPadding(); - mTotalLength += padding.top + padding.bottom; - auto heightSize = mTotalLength; - heightSize = std::max( heightSize, GetSuggestedMinimumHeight() ); - MeasuredSize heightSizeAndState = ResolveSizeAndState( heightSize, heightMeasureSpec, MeasuredSize::State::MEASURED_SIZE_OK); - heightSize = heightSizeAndState.GetSize(); - - if( !allFillParent && widthMode != MeasureSpec::Mode::EXACTLY ) - { - maxWidth = alternativeMaxWidth; - } - maxWidth += padding.start + padding.end; - maxWidth = std::max( maxWidth, GetSuggestedMinimumWidth() ); - - heightSizeAndState.SetState( childState.heightState ); - - SetMeasuredDimensions( ResolveSizeAndState( maxWidth, widthMeasureSpec, childState.widthState ), - heightSizeAndState ); - - if( matchWidth ) - { - ForceUniformWidth( GetChildCount(), heightMeasureSpec ); - } -} - -void LinearLayout::ForceUniformWidth( int count, MeasureSpec heightMeasureSpec ) -{ - // Pretend that the linear layout has an exact size. - auto uniformMeasureSpec = MeasureSpec( GetMeasuredWidth(), MeasureSpec::Mode::EXACTLY ); - for (int i = 0; i < count; ++i) - { - LayoutItemPtr childLayout = GetChildAt(i); - if( childLayout != nullptr ) - { - auto childOwner = childLayout->GetOwner(); - auto desiredWidth = childOwner.GetProperty( Toolkit::LayoutItem::ChildProperty::WIDTH_SPECIFICATION ); - auto desiredHeight = childOwner.GetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION ); - - if( desiredWidth == Toolkit::ChildLayoutData::MATCH_PARENT ) - { - // Temporarily force children to reuse their old measured height - int oldHeight = desiredHeight; - childOwner.SetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, childLayout->GetMeasuredHeight().mValue ); - - // Remeasure with new dimensions - MeasureChildWithMargins( childLayout, uniformMeasureSpec, 0, heightMeasureSpec, 0 ); - - childOwner.SetProperty( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, oldHeight ); - } - } - } -} - -void LinearLayout::LayoutVertical( LayoutLength left, LayoutLength top, LayoutLength right, LayoutLength bottom ) -{ - Extents padding = GetPadding(); - - LayoutLength childTop( 0 ); - LayoutLength childLeft( padding.start ); - - // Where bottom of child should go - auto width = right - left; - - // Space available for child - auto childSpace = width - padding.start - padding.end; - auto count = GetChildCount(); - - for( unsigned int childIndex = 0; childIndex < count; childIndex++) - { - LayoutItemPtr childLayout = GetChildAt( childIndex ); - if( childLayout != nullptr ) - { - auto childWidth = childLayout->GetMeasuredWidth(); - auto childHeight = childLayout->GetMeasuredHeight(); - auto childMargin = childLayout->GetMargin(); - - childTop += childMargin.top; - childLeft = ( childSpace - childWidth ) / 2 + childMargin.start - childMargin.end; - - childLayout->Layout( childLeft, childTop, childLeft + childWidth, childTop + childHeight ); - childTop += childHeight + childMargin.bottom + mCellPadding.height; - } - } -} - } // namespace Internal } // namespace Toolkit } // namespace Dali diff --git a/dali-toolkit/internal/layouting/hbox-layout-impl.h b/dali-toolkit/internal/layouting/hbox-layout-impl.h new file mode 100644 index 0000000..2057376 --- /dev/null +++ b/dali-toolkit/internal/layouting/hbox-layout-impl.h @@ -0,0 +1,103 @@ +#ifndef DALI_TOOLKIT_INTERNAL_LAYOUTING_HBOX_LAYOUT_H +#define DALI_TOOLKIT_INTERNAL_LAYOUTING_HBOX_LAYOUT_H + +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +namespace Dali +{ +namespace Toolkit +{ +namespace Internal +{ + +class HboxLayout; +using HboxLayoutPtr = IntrusivePtr; + +class HboxLayout final : public LayoutGroup +{ +public: + static HboxLayoutPtr New(); + +public: + void SetCellPadding( LayoutSize size ); + LayoutSize GetCellPadding(); + +protected: + HboxLayout(); + virtual ~HboxLayout(); + + /** + * @copydoc LayoutItem::DoInitialize + */ + virtual void DoInitialize() override; + + /** + * @copydoc LayoutItem::DoRegisterChildProperties() + */ + virtual void DoRegisterChildProperties( const std::string& containerType ) override; + + /** + * @copydoc LayoutItem::OnChildAdd + */ + virtual void OnChildAdd( LayoutItem& child ) override; + + /** + * @copydoc LayoutItem::OnMeasure + */ + virtual void OnMeasure( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasureSpec ) override; + + /** + * @copydoc LayoutItem::OnLayout + */ + virtual void OnLayout( bool changed, LayoutLength l, LayoutLength t, LayoutLength r, LayoutLength b ) override; + +private: + HboxLayout( const HboxLayout& other ) = delete; + HboxLayout& operator=( const HboxLayout& other ) = delete; + + void ForceUniformHeight( int count, MeasureSpec widthMeasureSpec ); + +private: + LayoutSize mCellPadding; + LayoutLength mTotalLength; +}; + +} // namespace Internal + +inline Internal::HboxLayout& GetImplementation( Dali::Toolkit::HboxLayout& handle ) +{ + DALI_ASSERT_ALWAYS( handle && "HboxLayout handle is empty" ); + BaseObject& object = handle.GetBaseObject(); + return static_cast( object ); +} + +inline const Internal::HboxLayout& GetImplementation( const Dali::Toolkit::HboxLayout& handle ) +{ + DALI_ASSERT_ALWAYS( handle && "HboxLayout handle is empty" ); + const BaseObject& object = handle.GetBaseObject(); + return static_cast( object ); +} + +} // namespace Toolkit +} // namespace Dali + +#endif // DALI_TOOLKIT_INTERNAL_LAYOUTING_HBOX_LAYOUT_H diff --git a/dali-toolkit/internal/layouting/linear-layout-impl.h b/dali-toolkit/internal/layouting/linear-layout-impl.h deleted file mode 100644 index d9fb90a..0000000 --- a/dali-toolkit/internal/layouting/linear-layout-impl.h +++ /dev/null @@ -1,119 +0,0 @@ -#ifndef DALI_TOOLKIT_INTERNAL_LAYOUTING_LINEAR_LAYOUT_H -#define DALI_TOOLKIT_INTERNAL_LAYOUTING_LINEAR_LAYOUT_H - -/* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include - -namespace Dali -{ -namespace Toolkit -{ -namespace Internal -{ - -class LinearLayout; -using LinearLayoutPtr = IntrusivePtr; - -class LinearLayout final : public LayoutGroup -{ -public: - static LinearLayoutPtr New(); - -public: - void SetCellPadding( LayoutSize size ); - LayoutSize GetCellPadding(); - void SetOrientation( Dali::Toolkit::LinearLayout::Orientation orientation ); - Dali::Toolkit::LinearLayout::Orientation GetOrientation(); - -protected: - LinearLayout(); - virtual ~LinearLayout(); - - /** - * @copydoc LayoutItem::OnMeasure - */ - virtual void OnMeasure( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasureSpec ) override; - - /** - * @copydoc LayoutItem::OnLayout - */ - virtual void OnLayout( bool changed, LayoutLength l, LayoutLength t, LayoutLength r, LayoutLength b ) override; - -private: - LinearLayout( const LinearLayout& other ) = delete; - LinearLayout& operator=( const LinearLayout& other ) = delete; - - /** - * Measure children for horizontal orientation - */ - void MeasureHorizontal( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasureSpec ); - - /** - * Apply a uniform height to the children - */ - void ForceUniformHeight( int count, MeasureSpec widthMeasureSpec ); - - /** - * Layout the children horizontally - */ - void LayoutHorizontal( LayoutLength l, LayoutLength t, LayoutLength r, LayoutLength b ); - - /** - * Measure children for horizontal orientation - */ - void MeasureVertical( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasureSpec ); - - /** - * Apply a uniform width to the children - */ - void ForceUniformWidth( int count, MeasureSpec heightMeasureSpec ); - - /** - * Layout the children vertically - */ - void LayoutVertical( LayoutLength l, LayoutLength t, LayoutLength r, LayoutLength b ); - -private: - LayoutSize mCellPadding; - Dali::Toolkit::LinearLayout::Orientation mOrientation; - LayoutLength mTotalLength; -}; - -} // namespace Internal - -inline Internal::LinearLayout& GetImplementation( Dali::Toolkit::LinearLayout& handle ) -{ - DALI_ASSERT_ALWAYS( handle && "LinearLayout handle is empty" ); - BaseObject& object = handle.GetBaseObject(); - return static_cast( object ); -} - -inline const Internal::LinearLayout& GetImplementation( const Dali::Toolkit::LinearLayout& handle ) -{ - DALI_ASSERT_ALWAYS( handle && "LinearLayout handle is empty" ); - const BaseObject& object = handle.GetBaseObject(); - return static_cast( object ); -} - -} // namespace Toolkit -} // namespace Dali - -#endif // DALI_TOOLKIT_INTERNAL_LAYOUTING_LINEAR_LAYOUT_H