vertical-layout-impl.cpp 3.08 KB
/*
 * Copyright (c) 2015 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 "vertical-layout-impl.h"

// INTERNAL INCLUDES
#include "vertical-layout.h"

namespace Dali
{

namespace Toolkit
{

namespace Internal
{

Toolkit::VerticalLayout VerticalLayout::New()
{
  // Create the implementation, temporarily owned by this handle on stack
  IntrusivePtr< VerticalLayout > impl = new VerticalLayout();

  // Pass ownership to CustomActor handle
  Toolkit::VerticalLayout handle( *impl );

  // Second-phase init of the implementation
  // This can only be done after the CustomActor connection has been made...
  impl->Initialize();

  return handle;
}

VerticalLayout::VerticalLayout()
: Control( ControlBehaviour( CONTROL_BEHAVIOUR_NONE ) )
{
}

VerticalLayout::~VerticalLayout()
{
}

void VerticalLayout::OnInitialize()
{
}

Vector3 VerticalLayout::GetNaturalSize()
{
  Vector3 size = Vector3::ZERO;

  CustomActor self = Self();
  for( unsigned int index = 0u, count = self.GetChildCount(); index < count; ++index )
  {
    Toolkit::TextLabel label = Toolkit::TextLabel::DownCast( self.GetChildAt( index ) );

    if( label )
    {
      Vector3 labelSize = label.GetNaturalSize();

      size.width = ( labelSize.width > size.width ) ? labelSize.width : size.width;
      size.height += labelSize.height;
    }
  }

  return size;
}

float VerticalLayout::GetHeightForWidth( float width )
{
  float height = 0.f;

  CustomActor self = Self();
  for( unsigned int index = 0u, count = self.GetChildCount(); index < count; ++index )
  {
    Toolkit::TextLabel label = Toolkit::TextLabel::DownCast( self.GetChildAt( index ) );

    if( label )
    {
      height += label.GetHeightForWidth( width );
    }
  }

  return height;
}

float VerticalLayout::GetWidthForHeight( float height )
{
  return 0.f;
}

void VerticalLayout::OnFontChange( bool defaultFontChange, bool defaultFontSizeChange )
{
}

void VerticalLayout::OnRelayout( const Vector2& size, ActorSizeContainer& container )
{
  CustomActor self = Self();

  Vector3 position;
  for( unsigned int index = 0u, count = self.GetChildCount(); index < count; ++index )
  {
    Toolkit::TextLabel label = Toolkit::TextLabel::DownCast( self.GetChildAt( index ) );

    if( label )
    {
      label.SetPosition( position );

      position.height += label.GetHeightForWidth( size.width );
    }

    container.push_back( ActorSizePair( label, size ) );
  }
}

void VerticalLayout::AddLabel( Toolkit::TextLabel label )
{
  Self().Add( label );

  RelayoutRequest();
}

} // namespace Internal

} // namespace Toolkit

} // namespace Dali