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-field-impl.cpp;h=f5dda09a0aac520b445953b6e23c2eea54e8762a;hp=991848b450142f9b2b599f35524b2ae995db5b2b;hb=e09c29c28b366e8afc8f024877e9386f65af77d0;hpb=4d45925a50b8a260f8e4e609d6309a8a0d2aada1 diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index 991848b..f5dda09 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -19,22 +19,19 @@ #include // EXTERNAL INCLUDES -#include -#include #include #include #include #include -#include -#include -#include #include +#include #include // INTERNAL INCLUDES #include -#include +#include #include +#include #include using namespace Dali::Toolkit::Text; @@ -56,7 +53,6 @@ namespace // unnamed namespace #endif const unsigned int DEFAULT_RENDERING_BACKEND = Dali::Toolkit::Text::DEFAULT_RENDERING_BACKEND; - } // unnamed namespace namespace @@ -107,15 +103,18 @@ DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "secondary-cursor-color", DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "enable-cursor-blink", BOOLEAN, ENABLE_CURSOR_BLINK ) DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "cursor-blink-interval", FLOAT, CURSOR_BLINK_INTERVAL ) DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "cursor-blink-duration", FLOAT, CURSOR_BLINK_DURATION ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "cursor-width", INTEGER, CURSOR_WIDTH ) DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "grab-handle-image", STRING, GRAB_HANDLE_IMAGE ) DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "grab-handle-pressed-image", STRING, GRAB_HANDLE_PRESSED_IMAGE ) DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "scroll-threshold", FLOAT, SCROLL_THRESHOLD ) DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "scroll-speed", FLOAT, SCROLL_SPEED ) -DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-handle-image-left", STRING, SELECTION_HANDLE_IMAGE_LEFT ) -DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-handle-image-right", STRING, SELECTION_HANDLE_IMAGE_RIGHT ) -DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-handle-pressed-image-left", STRING, SELECTION_HANDLE_PRESSED_IMAGE_LEFT ) -DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-handle-pressed-image-right", STRING, SELECTION_HANDLE_PRESSED_IMAGE_RIGHT ) -DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-highlight-color", STRING, SELECTION_HIGHLIGHT_COLOR ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-handle-image-left", MAP, SELECTION_HANDLE_IMAGE_LEFT ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-handle-image-right", MAP, SELECTION_HANDLE_IMAGE_RIGHT ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-handle-pressed-image-left", MAP, SELECTION_HANDLE_PRESSED_IMAGE_LEFT ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-handle-pressed-image-right", MAP, SELECTION_HANDLE_PRESSED_IMAGE_RIGHT ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-handle-marker-image-left", MAP, SELECTION_HANDLE_MARKER_IMAGE_LEFT ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-handle-marker-image-right", MAP, SELECTION_HANDLE_MARKER_IMAGE_RIGHT ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "selection-highlight-color", VECTOR4, SELECTION_HIGHLIGHT_COLOR ) DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "decoration-bounding-box", RECTANGLE, DECORATION_BOUNDING_BOX ) DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "input-method-settings", MAP, INPUT_METHOD_SETTINGS ) @@ -145,6 +144,9 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr { Toolkit::TextField textField = Toolkit::TextField::DownCast( Dali::BaseHandle( object ) ); + DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField SetProperty\n"); + + if( textField ) { TextField& impl( GetImpl( textField ) ); @@ -203,26 +205,13 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr { const std::string fontFamily = value.Get< std::string >(); DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p FONT_FAMILY %s\n", impl.mController.Get(), fontFamily.c_str() ); - - if( impl.mController->GetDefaultFontFamily() != fontFamily ) - { - impl.mController->SetDefaultFontFamily( fontFamily ); - } + impl.mController->SetDefaultFontFamily( fontFamily ); } break; } case Toolkit::TextField::Property::FONT_STYLE: { - if( impl.mController ) - { - const std::string fontStyle = value.Get< std::string >(); - DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p FONT_STYLE %s\n", impl.mController.Get(), fontStyle.c_str() ); - - if( impl.mController->GetDefaultFontStyle() != fontStyle ) - { - impl.mController->SetDefaultFontStyle( fontStyle ); - } - } + SetFontStyleProperty( impl.mController, value ); break; } case Toolkit::TextField::Property::POINT_SIZE: @@ -230,7 +219,7 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr if( impl.mController ) { const float pointSize = value.Get< float >(); - DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p FONT_STYLE %f\n", impl.mController.Get(), pointSize ); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p POINT_SIZE %f\n", impl.mController.Get(), pointSize ); if( !Equals( impl.mController->GetDefaultPointSize(), pointSize ) ) { @@ -239,6 +228,17 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr } break; } + case Toolkit::TextField::Property::MAX_LENGTH: + { + if( impl.mController ) + { + const int max = value.Get< int >(); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p MAX_LENGTH %d\n", impl.mController.Get(), max ); + + impl.mController->SetMaximumNumberOfCharacters( max ); + } + break; + } case Toolkit::TextField::Property::EXCEED_POLICY: { // TODO @@ -249,7 +249,7 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr if( impl.mController ) { const std::string alignStr = value.Get< std::string >(); - DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p HORIZONTAL_ALIGNMENT %f\n", impl.mController.Get(), alignStr.c_str() ); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p HORIZONTAL_ALIGNMENT %s\n", impl.mController.Get(), alignStr.c_str() ); LayoutEngine::HorizontalAlignment alignment( LayoutEngine::HORIZONTAL_ALIGN_BEGIN ); if( Scripting::GetEnumeration< LayoutEngine::HorizontalAlignment >( alignStr.c_str(), @@ -267,7 +267,7 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr if( impl.mController ) { const std::string alignStr = value.Get< std::string >(); - DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p VERTICAL_ALIGNMENT %f\n", impl.mController.Get(), alignStr.c_str() ); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p VERTICAL_ALIGNMENT %s\n", impl.mController.Get(), alignStr.c_str() ); LayoutEngine::VerticalAlignment alignment( LayoutEngine::VERTICAL_ALIGN_BOTTOM ); if( Scripting::GetEnumeration< LayoutEngine::VerticalAlignment >( alignStr.c_str(), @@ -345,7 +345,7 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr if( impl.mDecorator ) { const Vector4 color = value.Get< Vector4 >(); - DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p PRIMARY_CURSOR_COLOR %f,%f\n", impl.mController.Get(), color.r, color.g, color.b, color.a ); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p PRIMARY_CURSOR_COLOR %f,%f,%f,%f\n", impl.mController.Get(), color.r, color.g, color.b, color.a ); impl.mDecorator->SetCursorColor( PRIMARY_CURSOR, color ); impl.RequestTextRelayout(); @@ -357,7 +357,7 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr if( impl.mDecorator ) { const Vector4 color = value.Get< Vector4 >(); - DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p SECONDARY_CURSOR_COLOR %f,%f\n", impl.mController.Get(), color.r, color.g, color.b, color.a ); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p SECONDARY_CURSOR_COLOR %f,%f,%f,%f\n", impl.mController.Get(), color.r, color.g, color.b, color.a ); impl.mDecorator->SetCursorColor( SECONDARY_CURSOR, color ); impl.RequestTextRelayout(); @@ -392,12 +392,24 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr if( impl.mDecorator ) { const float duration = value.Get< float >(); - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField %p CURSOR_BLINK_INTERVAL %f\n", impl.mController.Get(), duration ); + DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField %p CURSOR_BLINK_DURATION %f\n", impl.mController.Get(), duration ); impl.mDecorator->SetCursorBlinkDuration( duration ); } break; } + case Toolkit::TextField::Property::CURSOR_WIDTH: + { + if( impl.mDecorator ) + { + const int width = value.Get< int >(); + DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField %p CURSOR_WIDTH %d\n", impl.mController.Get(), width ); + + impl.mDecorator->SetCursorWidth( width ); + impl.mController->GetLayoutEngine().SetCursorWidth( width ); + } + break; + } case Toolkit::TextField::Property::GRAB_HANDLE_IMAGE: { const ResourceImage image = ResourceImage::New( value.Get< std::string >() ); @@ -446,10 +458,9 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr } case Toolkit::TextField::Property::SELECTION_HANDLE_IMAGE_LEFT: { - const ResourceImage image = ResourceImage::New( value.Get< std::string >() ); - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField %p SELECTION_HANDLE_IMAGE_LEFT %f\n", impl.mController.Get(), image.GetUrl().c_str() ); + const Image image = Scripting::NewImage( value ); - if( impl.mDecorator ) + if( impl.mDecorator && image ) { impl.mDecorator->SetHandleImage( LEFT_SELECTION_HANDLE, HANDLE_IMAGE_RELEASED, image ); impl.RequestTextRelayout(); @@ -458,10 +469,9 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr } case Toolkit::TextField::Property::SELECTION_HANDLE_IMAGE_RIGHT: { - const ResourceImage image = ResourceImage::New( value.Get< std::string >() ); - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField %p SELECTION_HANDLE_IMAGE_RIGHT %f\n", impl.mController.Get(), image.GetUrl().c_str() ); + const Image image = Scripting::NewImage( value ); - if( impl.mDecorator ) + if( impl.mDecorator && image ) { impl.mDecorator->SetHandleImage( RIGHT_SELECTION_HANDLE, HANDLE_IMAGE_RELEASED, image ); impl.RequestTextRelayout(); @@ -470,10 +480,9 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr } case Toolkit::TextField::Property::SELECTION_HANDLE_PRESSED_IMAGE_LEFT: { - const ResourceImage image = ResourceImage::New( value.Get< std::string >() ); - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField %p SELECTION_HANDLE_PRESSED_IMAGE_LEFT %f\n", impl.mController.Get(), image.GetUrl().c_str() ); + const Image image = Scripting::NewImage( value ); - if( impl.mDecorator ) + if( impl.mDecorator && image ) { impl.mDecorator->SetHandleImage( LEFT_SELECTION_HANDLE, HANDLE_IMAGE_PRESSED, image ); impl.RequestTextRelayout(); @@ -482,20 +491,41 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr } case Toolkit::TextField::Property::SELECTION_HANDLE_PRESSED_IMAGE_RIGHT: { - const ResourceImage image = ResourceImage::New( value.Get< std::string >() ); - DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField %p SELECTION_HANDLE_PRESSED_IMAGE_RIGHT %f\n", impl.mController.Get(), image.GetUrl().c_str() ); + const Image image = Scripting::NewImage( value ); - if( impl.mDecorator ) + if( impl.mDecorator && image ) { impl.mDecorator->SetHandleImage( RIGHT_SELECTION_HANDLE, HANDLE_IMAGE_PRESSED, image ); impl.RequestTextRelayout(); } break; } + case Toolkit::TextField::Property::SELECTION_HANDLE_MARKER_IMAGE_LEFT: + { + const Image image = Scripting::NewImage( value ); + + if( impl.mDecorator && image ) + { + impl.mDecorator->SetHandleImage( LEFT_SELECTION_HANDLE_MARKER, HANDLE_IMAGE_RELEASED, image ); + impl.RequestTextRelayout(); + } + break; + } + case Toolkit::TextField::Property::SELECTION_HANDLE_MARKER_IMAGE_RIGHT: + { + const Image image = Scripting::NewImage( value ); + + if( impl.mDecorator && image ) + { + impl.mDecorator->SetHandleImage( RIGHT_SELECTION_HANDLE_MARKER, HANDLE_IMAGE_RELEASED, image ); + impl.RequestTextRelayout(); + } + break; + } case Toolkit::TextField::Property::SELECTION_HIGHLIGHT_COLOR: { const Vector4 color = value.Get< Vector4 >(); - DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p SELECTION_HIGHLIGHT_COLOR %f,%f\n", impl.mController.Get(), color.r, color.g, color.b, color.a ); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p SELECTION_HIGHLIGHT_COLOR %f,%f,%f,%f\n", impl.mController.Get(), color.r, color.g, color.b, color.a ); if( impl.mDecorator ) { @@ -516,17 +546,6 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr } break; } - case Toolkit::TextField::Property::MAX_LENGTH: - { - if( impl.mController ) - { - const int max = value.Get< int >(); - DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p MAX_LENGTH %d\n", impl.mController.Get(), max ); - - impl.mController->SetMaximumNumberOfCharacters( max ); - } - break; - } case Toolkit::TextField::Property::INPUT_METHOD_SETTINGS: { const Property::Map map = value.Get(); @@ -595,17 +614,22 @@ Property::Value TextField::GetProperty( BaseObject* object, Property::Index inde } case Toolkit::TextField::Property::FONT_STYLE: { + GetFontStyleProperty( impl.mController, value ); + break; + } + case Toolkit::TextField::Property::POINT_SIZE: + { if( impl.mController ) { - value = impl.mController->GetDefaultFontStyle(); + value = impl.mController->GetDefaultPointSize(); } break; } - case Toolkit::TextField::Property::POINT_SIZE: + case Toolkit::TextField::Property::MAX_LENGTH: { if( impl.mController ) { - value = impl.mController->GetDefaultPointSize(); + value = impl.mController->GetMaximumNumberOfCharacters(); } break; } @@ -711,6 +735,14 @@ Property::Value TextField::GetProperty( BaseObject* object, Property::Index inde } break; } + case Toolkit::TextField::Property::CURSOR_WIDTH: + { + if( impl.mDecorator ) + { + value = impl.mDecorator->GetCursorWidth(); + } + break; + } case Toolkit::TextField::Property::GRAB_HANDLE_IMAGE: { if( impl.mDecorator ) @@ -753,50 +785,32 @@ Property::Value TextField::GetProperty( BaseObject* object, Property::Index inde } case Toolkit::TextField::Property::SELECTION_HANDLE_IMAGE_LEFT: { - if( impl.mDecorator ) - { - ResourceImage image = ResourceImage::DownCast( impl.mDecorator->GetHandleImage( LEFT_SELECTION_HANDLE, HANDLE_IMAGE_RELEASED ) ); - if( image ) - { - value = image.GetUrl(); - } - } + impl.GetHandleImagePropertyValue( value, LEFT_SELECTION_HANDLE, HANDLE_IMAGE_RELEASED ); break; } case Toolkit::TextField::Property::SELECTION_HANDLE_IMAGE_RIGHT: { - if( impl.mDecorator ) - { - ResourceImage image = ResourceImage::DownCast( impl.mDecorator->GetHandleImage( RIGHT_SELECTION_HANDLE, HANDLE_IMAGE_RELEASED ) ); - if( image ) - { - value = image.GetUrl(); - } - } + impl.GetHandleImagePropertyValue( value, RIGHT_SELECTION_HANDLE, HANDLE_IMAGE_RELEASED ) ; break; } case Toolkit::TextField::Property::SELECTION_HANDLE_PRESSED_IMAGE_LEFT: { - if( impl.mDecorator ) - { - ResourceImage image = ResourceImage::DownCast( impl.mDecorator->GetHandleImage( LEFT_SELECTION_HANDLE, HANDLE_IMAGE_PRESSED ) ); - if( image ) - { - value = image.GetUrl(); - } - } + impl.GetHandleImagePropertyValue( value, LEFT_SELECTION_HANDLE, HANDLE_IMAGE_PRESSED ); break; } case Toolkit::TextField::Property::SELECTION_HANDLE_PRESSED_IMAGE_RIGHT: { - if( impl.mDecorator ) - { - ResourceImage image = ResourceImage::DownCast( impl.mDecorator->GetHandleImage( RIGHT_SELECTION_HANDLE, HANDLE_IMAGE_PRESSED ) ); - if( image ) - { - value = image.GetUrl(); - } - } + impl.GetHandleImagePropertyValue( value, RIGHT_SELECTION_HANDLE, HANDLE_IMAGE_PRESSED ); + break; + } + case Toolkit::TextField::Property::SELECTION_HANDLE_MARKER_IMAGE_LEFT: + { + impl.GetHandleImagePropertyValue( value, LEFT_SELECTION_HANDLE_MARKER, HANDLE_IMAGE_RELEASED ); + break; + } + case Toolkit::TextField::Property::SELECTION_HANDLE_MARKER_IMAGE_RIGHT: + { + impl.GetHandleImagePropertyValue( value, RIGHT_SELECTION_HANDLE_MARKER, HANDLE_IMAGE_RELEASED ); break; } case Toolkit::TextField::Property::SELECTION_HIGHLIGHT_COLOR: @@ -811,15 +825,9 @@ Property::Value TextField::GetProperty( BaseObject* object, Property::Index inde { if( impl.mDecorator ) { - value = impl.mDecorator->GetBoundingBox(); - } - break; - } - case Toolkit::TextField::Property::MAX_LENGTH: - { - if( impl.mController ) - { - value = impl.mController->GetMaximumNumberOfCharacters(); + Rect boundingBox; + impl.mDecorator->GetBoundingBox( boundingBox ); + value = boundingBox; } break; } @@ -887,7 +895,10 @@ void TextField::OnInitialize() self.TouchedSignal().Connect( this, &TextField::OnTouched ); // Set BoundingBox to stage size if not already set. - if ( mDecorator->GetBoundingBox().IsEmpty() ) + Rect boundingBox; + mDecorator->GetBoundingBox( boundingBox ); + + if( boundingBox.IsEmpty() ) { Vector2 stageSize = Dali::Stage::GetCurrent().GetSize(); mDecorator->SetBoundingBox( Rect( 0.0f, 0.0f, stageSize.width, stageSize.height ) ); @@ -901,7 +912,36 @@ void TextField::OnInitialize() void TextField::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change ) { - GetImpl( styleManager ).ApplyThemeStyle( Toolkit::Control( GetOwner() ) ); + DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField::OnStyleChange\n"); + + switch ( change ) + { + case StyleChange::DEFAULT_FONT_CHANGE: + { + DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField::OnStyleChange DEFAULT_FONT_CHANGE\n"); + std::string newFont = styleManager.GetDefaultFontFamily(); + // Property system did not set the font so should update it. + mController->UpdateAfterFontChange( newFont ); + break; + } + + case StyleChange::DEFAULT_FONT_SIZE_CHANGE: + { + DALI_LOG_INFO( gLogFilter, Debug::General, "TextField::OnStyleChange StyleChange::DEFAULT_FONT_SIZE_CHANGE (%f)\n", mController->GetDefaultPointSize() ); + + if ( (mController->GetDefaultPointSize() <= 0.0f) ) // If DefaultPointSize not set by Property system it will be 0.0f + { + // Property system did not set the PointSize so should update it. + // todo instruct text-controller to update model + } + break; + } + case StyleChange::THEME_CHANGE: + { + GetImpl( styleManager ).ApplyThemeStyle( Toolkit::Control( GetOwner() ) ); + break; + } + } } Vector3 TextField::GetNaturalSize() @@ -916,6 +956,8 @@ float TextField::GetHeightForWidth( float width ) void TextField::OnRelayout( const Vector2& size, RelayoutContainer& container ) { + DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField OnRelayout\n"); + if( mController->Relayout( size ) || !mRenderer ) { @@ -931,17 +973,18 @@ void TextField::OnRelayout( const Vector2& size, RelayoutContainer& container ) mRenderer = Backend::Get().NewRenderer( mRenderingBackend ); } - RenderText(); EnableClipping( (Dali::Toolkit::TextField::EXCEED_POLICY_CLIP == mExceedPolicy), size ); + RenderText(); } } void TextField::RenderText() { + Actor self = Self(); Actor renderableActor; if( mRenderer ) { - renderableActor = mRenderer->Render( mController->GetView(), mDepth ); + renderableActor = mRenderer->Render( mController->GetView(), self.GetHierarchyDepth() ); } if( renderableActor != mRenderableActor ) @@ -956,14 +999,10 @@ void TextField::RenderText() mRenderableActor.SetPosition( offset.x, offset.y ); - // Make sure the actor is parented correctly with/without clipping + Actor clipRootActor; if( mClipper ) { - mClipper->GetRootActor().Add( mRenderableActor ); - } - else - { - Self().Add( mRenderableActor ); + clipRootActor = mClipper->GetRootActor(); } for( std::vector::const_iterator it = mClippingDecorationActors.begin(), @@ -973,16 +1012,26 @@ void TextField::RenderText() { Actor actor = *it; - if( mClipper ) + if( clipRootActor ) { - mClipper->GetRootActor().Add( actor ); + clipRootActor.Add( actor ); } else { - Self().Add( actor ); + self.Add( actor ); } } mClippingDecorationActors.clear(); + + // Make sure the actor is parented correctly with/without clipping + if( clipRootActor ) + { + clipRootActor.Add( mRenderableActor ); + } + else + { + self.Add( mRenderableActor ); + } } } @@ -1070,7 +1119,15 @@ void TextField::OnPan( const PanGesture& gesture ) void TextField::OnLongPress( const LongPressGesture& gesture ) { + // Show the keyboard if it was hidden. + if (!VirtualKeyboard::IsVisible()) + { + VirtualKeyboard::Show(); + } + mController->LongPressEvent( gesture.state, gesture.localPoint.x, gesture.localPoint.y ); + + SetKeyInputFocus(); } bool TextField::OnKeyEvent( const KeyEvent& event ) @@ -1137,6 +1194,21 @@ ImfManager::ImfCallbackData TextField::OnImfEvent( Dali::ImfManager& imfManager, return mController->OnImfEvent( imfManager, imfEvent ); } +void TextField::GetHandleImagePropertyValue( Property::Value& value, Text::HandleType handleType, Text::HandleImageType handleImageType ) +{ + if( mDecorator ) + { + ResourceImage image = ResourceImage::DownCast( mDecorator->GetHandleImage( handleType, handleImageType ) ); + + if ( image ) + { + Property::Map map; + Scripting::CreatePropertyMap( image, map ); + value = map; + } + } +} + void TextField::EnableClipping( bool clipping, const Vector2& size ) { if( clipping ) @@ -1187,7 +1259,13 @@ void TextField::KeyboardStatusChanged(bool keyboardShown) void TextField::OnStageConnection( int depth ) { - mDepth = depth; + // Call the Control::OnStageConnection() to set the depth of the background. + Control::OnStageConnection( depth ); + + // Sets the depth to the renderers inside the text's decorator. + mDecorator->SetTextDepth( depth ); + + // The depth of the text renderer is set in the RenderText() called from OnRelayout(). } bool TextField::OnTouched( Actor actor, const TouchEvent& event ) @@ -1199,7 +1277,6 @@ TextField::TextField() : Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ), mRenderingBackend( DEFAULT_RENDERING_BACKEND ), mExceedPolicy( Dali::Toolkit::TextField::EXCEED_POLICY_CLIP ), - mDepth( 0 ), mHasBeenStaged( false ) { }