X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-label-impl.cpp;h=cd96e00b6c30c8d6d49be05debc803f83be71c13;hp=5a958d40e26d7c9874d0a82cdb56153a3e6a91d9;hb=77a31b18a427cfc72cb17f0b14925694ea638851;hpb=f2a6a134e4b939815b40f417f5aca61a6fccf92e diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp index 5a958d4..cd96e00 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -21,6 +21,7 @@ // EXTERNAL INCLUDES #include #include +#include #include // INTERNAL INCLUDES @@ -43,6 +44,8 @@ #include #include +#include + using namespace Dali::Toolkit::Text; namespace Dali @@ -112,6 +115,7 @@ DALI_PROPERTY_REGISTRATION( Toolkit, TextLabel, "autoScrollLoopDelay", DALI_PROPERTY_REGISTRATION( Toolkit, TextLabel, "autoScrollStopMode", STRING, AUTO_SCROLL_STOP_MODE ) DALI_PROPERTY_REGISTRATION_READ_ONLY( Toolkit, TextLabel, "lineCount", INTEGER, LINE_COUNT ) DALI_PROPERTY_REGISTRATION( Toolkit, TextLabel, "lineWrapMode", INTEGER, LINE_WRAP_MODE ) +DALI_DEVEL_PROPERTY_REGISTRATION_READ_ONLY( Toolkit, TextLabel, "textDirection", INTEGER, TEXT_DIRECTION ) DALI_ANIMATABLE_PROPERTY_REGISTRATION_WITH_DEFAULT( Toolkit, TextLabel, "textColor", Color::BLACK, TEXT_COLOR ) DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, TextLabel, "textColorRed", TEXT_COLOR_RED, TEXT_COLOR, 0 ) DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, TextLabel, "textColorGreen", TEXT_COLOR_GREEN, TEXT_COLOR, 1 ) @@ -749,6 +753,14 @@ Property::Value TextLabel::GetProperty( BaseObject* object, Property::Index inde } break; } + case Toolkit::DevelTextLabel::Property::TEXT_DIRECTION: + { + if( impl.mController ) + { + value = impl.mController->GetTextDirection(); + } + break; + } } } @@ -818,13 +830,21 @@ void TextLabel::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange:: Vector3 TextLabel::GetNaturalSize() { - return mController->GetNaturalSize(); + Extents padding; + padding = Self().GetProperty( Toolkit::Control::Property::PADDING ); + + Vector3 naturalSize = mController->GetNaturalSize(); + naturalSize.width += ( padding.start + padding.end ); + naturalSize.height += ( padding.top + padding.bottom ); + + return naturalSize; } float TextLabel::GetHeightForWidth( float width ) { - Padding padding; - Self().GetPadding( padding ); + Extents padding; + padding = Self().GetProperty( Toolkit::Control::Property::PADDING ); + return mController->GetHeightForWidth( width ) + padding.top + padding.bottom; } @@ -856,9 +876,10 @@ void TextLabel::OnRelayout( const Vector2& size, RelayoutContainer& container ) { DALI_LOG_INFO( gLogFilter, Debug::General, "TextLabel::OnRelayout\n" ); - Padding padding; - Self().GetPadding( padding ); - Vector2 contentSize( size.x - ( padding.left + padding.right ), size.y - ( padding.top + padding.bottom ) ); + Extents padding; + padding = Self().GetProperty( Toolkit::Control::Property::PADDING ); + + Vector2 contentSize( size.x - ( padding.start + padding.end ), size.y - ( padding.top + padding.bottom ) ); const Text::Controller::UpdateTextType updateTextType = mController->Relayout( contentSize ); @@ -870,13 +891,17 @@ void TextLabel::OnRelayout( const Vector2& size, RelayoutContainer& container ) // Update the visual TextVisual::EnableRendererUpdate( mVisual ); - Padding padding; - Self().GetPadding( padding ); + // Support Right-To-Left of padding + Dali::LayoutDirection::Type layoutDirection = static_cast( Self().GetProperty( Dali::Actor::Property::LAYOUT_DIRECTION ).Get() ); + if( Dali::LayoutDirection::RIGHT_TO_LEFT == layoutDirection ) + { + std::swap( padding.start, padding.end ); + } Property::Map visualTransform; visualTransform.Add( Toolkit::Visual::Transform::Property::SIZE, contentSize ) .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2(padding.left, padding.top) ) + .Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2( padding.start, padding.top ) ) .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN ); @@ -913,9 +938,30 @@ void TextLabel::SetUpAutoScrolling() mTextScroller = Text::TextScroller::New( *this ); } + // Calculate the actual gap before scrolling wraps. + int textPadding = std::max( controlSize.x - textNaturalSize.x, 0.0f ); + float wrapGap = std::max( mTextScroller->GetGap(), textPadding ); + Vector2 textureSize = textNaturalSize + Vector2(wrapGap, 0.0f); // Add the gap as a part of the texture + // Create a texture of the text for scrolling + Size verifiedSize = textureSize; + const int maxTextureSize = Dali::GetMaxTextureSize(); + + //if the texture size width exceed maxTextureSize, modify the visual model size and enabled the ellipsis + if( verifiedSize.width > maxTextureSize ) + { + verifiedSize.width = maxTextureSize; + if( textNaturalSize.width > maxTextureSize ) + { + mController->SetTextElideEnabled( true ); + } + GetHeightForWidth( maxTextureSize ); + wrapGap = std::max( maxTextureSize - textNaturalSize.width, 0.0f ); + } + Text::TypesetterPtr typesetter = Text::Typesetter::New( mController->GetTextModel() ); - PixelData data = typesetter->Render( textNaturalSize, Text::Typesetter::RENDER_TEXT_AND_STYLES, true, Pixel::RGBA8888 ); // ignore the horizontal alignment + + PixelData data = typesetter->Render( verifiedSize, Text::Typesetter::RENDER_TEXT_AND_STYLES, true, Pixel::RGBA8888 ); // ignore the horizontal alignment Texture texture = Texture::New( Dali::TextureType::TEXTURE_2D, data.GetPixelFormat(), data.GetWidth(), @@ -928,11 +974,12 @@ void TextLabel::SetUpAutoScrolling() // Filter mode needs to be set to linear to produce better quality while scaling. Sampler sampler = Sampler::New(); sampler.SetFilterMode( FilterMode::LINEAR, FilterMode::LINEAR ); + sampler.SetWrapMode( Dali::WrapMode::DEFAULT, Dali::WrapMode::REPEAT, Dali::WrapMode::DEFAULT ); // Wrap the texture in the x direction textureSet.SetSampler( 0u, sampler ); // Set parameters for scrolling Renderer renderer = static_cast( GetImplementation( mVisual ) ).GetRenderer(); - mTextScroller->SetParameters( Self(), renderer, textureSet, controlSize, textNaturalSize, direction, mController->GetHorizontalAlignment(), mController->GetVerticalAlignment() ); + mTextScroller->SetParameters( Self(), renderer, textureSet, controlSize, verifiedSize, wrapGap, direction, mController->GetHorizontalAlignment(), mController->GetVerticalAlignment() ); } void TextLabel::ScrollingFinished()