X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fdecorator%2Ftext-decorator.cpp;h=bc27da3ae8ac0de33f9697c52d871d546584dfa4;hp=5d3976c0007c274c2b1e5030ba856946bff3c64f;hb=d43575da616e1370372b1331f47dce36dc4ac145;hpb=de867fc73465d5681673638736f9b447303fef64 diff --git a/dali-toolkit/internal/text/decorator/text-decorator.cpp b/dali-toolkit/internal/text/decorator/text-decorator.cpp index 5d3976c..bc27da3 100644 --- a/dali-toolkit/internal/text/decorator/text-decorator.cpp +++ b/dali-toolkit/internal/text/decorator/text-decorator.cpp @@ -33,8 +33,10 @@ #include // INTERNAL INCLUDES -#include #include +#include +#include +#include #ifdef DEBUG_ENABLED #define DECORATOR_DEBUG @@ -220,9 +222,9 @@ struct Decorator::Impl : public ConnectionTracker { } - ImageActor actor; + ImageView actor; Actor grabArea; - ImageActor markerActor; + ImageView markerActor; Vector2 position; Size size; @@ -435,6 +437,7 @@ struct Decorator::Impl : public ConnectionTracker if( mActiveCopyPastePopup ) { ShowPopup(); + mPopupSetNewPosition = true; } else { @@ -522,10 +525,10 @@ struct Decorator::Impl : public ConnectionTracker DeterminePositionPopup(); } - void CreateCursor( ImageActor& cursor, const Vector4& color ) + void CreateCursor( Control& cursor, const Vector4& color ) { - cursor = CreateSolidColorActor( color ); - cursor.SetSortModifier( DECORATION_DEPTH_INDEX ); + cursor = Control::New(); + cursor.SetBackgroundColor( color ); cursor.SetParentOrigin( ParentOrigin::TOP_LEFT ); // Need to set the default parent origin as CreateSolidColorActor() sets a different one. cursor.SetAnchorPoint( AnchorPoint::TOP_LEFT ); } @@ -656,41 +659,47 @@ struct Decorator::Impl : public ConnectionTracker HandleImpl& grabHandle = mHandle[GRAB_HANDLE]; if( !grabHandle.actor ) { - grabHandle.actor = ImageActor::New( mHandleImages[GRAB_HANDLE][HANDLE_IMAGE_RELEASED] ); - grabHandle.actor.SetSortModifier( DECORATION_DEPTH_INDEX ); - grabHandle.actor.SetAnchorPoint( AnchorPoint::TOP_CENTER ); - // Area that Grab handle responds to, larger than actual handle so easier to move -#ifdef DECORATOR_DEBUG - grabHandle.actor.SetName( "GrabHandleActor" ); - if ( Dali::Internal::gLogFilter->IsEnabledFor( Debug::Verbose ) ) - { - grabHandle.grabArea = Toolkit::CreateSolidColorActor( Vector4(0.0f, 0.0f, 0.0f, 0.0f), true, Color::RED, 1 ); - grabHandle.grabArea.SetName( "GrabArea" ); - } - else + if( mHandleImages[GRAB_HANDLE][HANDLE_IMAGE_RELEASED] ) { - grabHandle.grabArea = Actor::New(); - grabHandle.grabArea.SetName( "GrabArea" ); - } + grabHandle.actor = ImageView::New( mHandleImages[GRAB_HANDLE][HANDLE_IMAGE_RELEASED] ); + GetImpl( grabHandle.actor).SetDepthIndex( DepthIndex::DECORATION ); + grabHandle.actor.SetAnchorPoint( AnchorPoint::TOP_CENTER ); + + // Area that Grab handle responds to, larger than actual handle so easier to move +#ifdef DECORATOR_DEBUG + grabHandle.actor.SetName( "GrabHandleActor" ); + if ( Dali::Internal::gLogFilter->IsEnabledFor( Debug::Verbose ) ) + { + grabHandle.grabArea = Control::New(); + Toolkit::Control control = Toolkit::Control::DownCast( grabHandle.grabArea ); + control.SetBackgroundColor( Vector4( 1.0f, 1.0f, 1.0f, 0.5f ) ); + grabHandle.grabArea.SetName( "GrabArea" ); + } + else + { + grabHandle.grabArea = Actor::New(); + grabHandle.grabArea.SetName( "GrabArea" ); + } #else - grabHandle.grabArea = Actor::New(); + grabHandle.grabArea = Actor::New(); #endif - grabHandle.grabArea.SetParentOrigin( ParentOrigin::TOP_CENTER ); - grabHandle.grabArea.SetAnchorPoint( AnchorPoint::TOP_CENTER ); - grabHandle.grabArea.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS ); - grabHandle.grabArea.SetSizeModeFactor( DEFAULT_GRAB_HANDLE_RELATIVE_SIZE ); - grabHandle.actor.Add( grabHandle.grabArea ); - grabHandle.actor.SetColor( mHandleColor ); + grabHandle.grabArea.SetParentOrigin( ParentOrigin::TOP_CENTER ); + grabHandle.grabArea.SetAnchorPoint( AnchorPoint::TOP_CENTER ); + grabHandle.grabArea.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS ); + grabHandle.grabArea.SetSizeModeFactor( DEFAULT_GRAB_HANDLE_RELATIVE_SIZE ); + grabHandle.actor.Add( grabHandle.grabArea ); + grabHandle.actor.SetColor( mHandleColor ); - grabHandle.grabArea.TouchedSignal().Connect( this, &Decorator::Impl::OnGrabHandleTouched ); - mTapDetector.Attach( grabHandle.grabArea ); - mPanGestureDetector.Attach( grabHandle.grabArea ); + grabHandle.grabArea.TouchedSignal().Connect( this, &Decorator::Impl::OnGrabHandleTouched ); + mTapDetector.Attach( grabHandle.grabArea ); + mPanGestureDetector.Attach( grabHandle.grabArea ); - mActiveLayer.Add( grabHandle.actor ); + mActiveLayer.Add( grabHandle.actor ); + } } - if( !grabHandle.actor.GetParent() ) + if( grabHandle.actor && !grabHandle.actor.GetParent() ) { mActiveLayer.Add( grabHandle.actor ); } @@ -700,7 +709,7 @@ struct Decorator::Impl : public ConnectionTracker { if( image ) { - handle.markerActor = ImageActor::New( image ); + handle.markerActor = ImageView::New( image ); handle.markerActor.SetColor( mHandleColor ); handle.actor.Add( handle.markerActor ); @@ -724,33 +733,36 @@ struct Decorator::Impl : public ConnectionTracker HandleImpl& primary = mHandle[ LEFT_SELECTION_HANDLE ]; if( !primary.actor ) { - primary.actor = ImageActor::New( mHandleImages[LEFT_SELECTION_HANDLE][HANDLE_IMAGE_RELEASED] ); + if( mHandleImages[LEFT_SELECTION_HANDLE][HANDLE_IMAGE_RELEASED] ) + { + primary.actor = ImageView::New( mHandleImages[LEFT_SELECTION_HANDLE][HANDLE_IMAGE_RELEASED] ); #ifdef DECORATOR_DEBUG - primary.actor.SetName("SelectionHandleOne"); + primary.actor.SetName("SelectionHandleOne"); #endif - primary.actor.SetAnchorPoint( AnchorPoint::TOP_RIGHT ); // Change to BOTTOM_RIGHT if Look'n'Feel requires handle above text. - primary.actor.SetSortModifier( DECORATION_DEPTH_INDEX ); - primary.actor.SetColor( mHandleColor ); + primary.actor.SetAnchorPoint( AnchorPoint::TOP_RIGHT ); // Change to BOTTOM_RIGHT if Look'n'Feel requires handle above text. + GetImpl( primary.actor ).SetDepthIndex( DepthIndex::DECORATION ); + primary.actor.SetColor( mHandleColor ); - primary.grabArea = Actor::New(); // Area that Grab handle responds to, larger than actual handle so easier to move + primary.grabArea = Actor::New(); // Area that Grab handle responds to, larger than actual handle so easier to move #ifdef DECORATOR_DEBUG - primary.grabArea.SetName("SelectionHandleOneGrabArea"); + primary.grabArea.SetName("SelectionHandleOneGrabArea"); #endif - primary.grabArea.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS ); - primary.grabArea.SetParentOrigin( ParentOrigin::TOP_CENTER ); - primary.grabArea.SetAnchorPoint( AnchorPoint::TOP_CENTER ); - primary.grabArea.SetSizeModeFactor( DEFAULT_SELECTION_HANDLE_RELATIVE_SIZE ); + primary.grabArea.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS ); + primary.grabArea.SetParentOrigin( ParentOrigin::TOP_CENTER ); + primary.grabArea.SetAnchorPoint( AnchorPoint::TOP_CENTER ); + primary.grabArea.SetSizeModeFactor( DEFAULT_SELECTION_HANDLE_RELATIVE_SIZE ); - mTapDetector.Attach( primary.grabArea ); - mPanGestureDetector.Attach( primary.grabArea ); - primary.grabArea.TouchedSignal().Connect( this, &Decorator::Impl::OnHandleOneTouched ); + mTapDetector.Attach( primary.grabArea ); + mPanGestureDetector.Attach( primary.grabArea ); + primary.grabArea.TouchedSignal().Connect( this, &Decorator::Impl::OnHandleOneTouched ); - primary.actor.Add( primary.grabArea ); + primary.actor.Add( primary.grabArea ); - CreateHandleMarker( primary, mHandleImages[LEFT_SELECTION_HANDLE_MARKER][HANDLE_IMAGE_RELEASED], LEFT_SELECTION_HANDLE ); + CreateHandleMarker( primary, mHandleImages[LEFT_SELECTION_HANDLE_MARKER][HANDLE_IMAGE_RELEASED], LEFT_SELECTION_HANDLE ); + } } - if( !primary.actor.GetParent() ) + if( primary.actor && !primary.actor.GetParent() ) { mActiveLayer.Add( primary.actor ); } @@ -758,33 +770,36 @@ struct Decorator::Impl : public ConnectionTracker HandleImpl& secondary = mHandle[ RIGHT_SELECTION_HANDLE ]; if( !secondary.actor ) { - secondary.actor = ImageActor::New( mHandleImages[RIGHT_SELECTION_HANDLE][HANDLE_IMAGE_RELEASED] ); + if( mHandleImages[RIGHT_SELECTION_HANDLE][HANDLE_IMAGE_RELEASED] ) + { + secondary.actor = ImageView::New( mHandleImages[RIGHT_SELECTION_HANDLE][HANDLE_IMAGE_RELEASED] ); #ifdef DECORATOR_DEBUG - secondary.actor.SetName("SelectionHandleTwo"); + secondary.actor.SetName("SelectionHandleTwo"); #endif - secondary.actor.SetAnchorPoint( AnchorPoint::TOP_LEFT ); // Change to BOTTOM_LEFT if Look'n'Feel requires handle above text. - secondary.actor.SetSortModifier( DECORATION_DEPTH_INDEX ); - secondary.actor.SetColor( mHandleColor ); + secondary.actor.SetAnchorPoint( AnchorPoint::TOP_LEFT ); // Change to BOTTOM_LEFT if Look'n'Feel requires handle above text. + GetImpl( secondary.actor ).SetDepthIndex( DepthIndex::DECORATION ); + secondary.actor.SetColor( mHandleColor ); - secondary.grabArea = Actor::New(); // Area that Grab handle responds to, larger than actual handle so easier to move + secondary.grabArea = Actor::New(); // Area that Grab handle responds to, larger than actual handle so easier to move #ifdef DECORATOR_DEBUG - secondary.grabArea.SetName("SelectionHandleTwoGrabArea"); + secondary.grabArea.SetName("SelectionHandleTwoGrabArea"); #endif - secondary.grabArea.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS ); - secondary.grabArea.SetParentOrigin( ParentOrigin::TOP_CENTER ); - secondary.grabArea.SetAnchorPoint( AnchorPoint::TOP_CENTER ); - secondary.grabArea.SetSizeModeFactor( DEFAULT_SELECTION_HANDLE_RELATIVE_SIZE ); + secondary.grabArea.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS ); + secondary.grabArea.SetParentOrigin( ParentOrigin::TOP_CENTER ); + secondary.grabArea.SetAnchorPoint( AnchorPoint::TOP_CENTER ); + secondary.grabArea.SetSizeModeFactor( DEFAULT_SELECTION_HANDLE_RELATIVE_SIZE ); - mTapDetector.Attach( secondary.grabArea ); - mPanGestureDetector.Attach( secondary.grabArea ); - secondary.grabArea.TouchedSignal().Connect( this, &Decorator::Impl::OnHandleTwoTouched ); + mTapDetector.Attach( secondary.grabArea ); + mPanGestureDetector.Attach( secondary.grabArea ); + secondary.grabArea.TouchedSignal().Connect( this, &Decorator::Impl::OnHandleTwoTouched ); - secondary.actor.Add( secondary.grabArea ); + secondary.actor.Add( secondary.grabArea ); - CreateHandleMarker( secondary, mHandleImages[RIGHT_SELECTION_HANDLE_MARKER][HANDLE_IMAGE_RELEASED], RIGHT_SELECTION_HANDLE ); + CreateHandleMarker( secondary, mHandleImages[RIGHT_SELECTION_HANDLE_MARKER][HANDLE_IMAGE_RELEASED], RIGHT_SELECTION_HANDLE ); + } } - if( !secondary.actor.GetParent() ) + if( secondary.actor && !secondary.actor.GetParent() ) { mActiveLayer.Add( secondary.actor ); } @@ -829,8 +844,11 @@ struct Decorator::Impl : public ConnectionTracker // The SetGrabHandleImage() method will change the orientation. const float yLocalPosition = grabHandle.verticallyFlipped ? grabHandle.position.y : grabHandle.position.y + grabHandle.lineHeight; - grabHandle.actor.SetPosition( grabHandle.position.x + floor( 0.5f * mCursorWidth ), - yLocalPosition ); // TODO : Fix for multiline. + if( grabHandle.actor ) + { + grabHandle.actor.SetPosition( grabHandle.position.x + floor( 0.5f * mCursorWidth ), + yLocalPosition ); // TODO : Fix for multiline. + } } void SetSelectionHandlePosition( HandleType type ) @@ -886,7 +904,7 @@ struct Decorator::Impl : public ConnectionTracker if( flipHandle ) { - if( !handle.horizontallyFlipped ) + if( handle.actor && !handle.horizontallyFlipped ) { // Change the anchor point to flip the image. handle.actor.SetAnchorPoint( isPrimaryHandle ? AnchorPoint::TOP_LEFT : AnchorPoint::TOP_RIGHT ); @@ -896,7 +914,7 @@ struct Decorator::Impl : public ConnectionTracker } else { - if( handle.horizontallyFlipped ) + if( handle.actor && handle.horizontallyFlipped ) { // Reset the anchor point. handle.actor.SetAnchorPoint( isPrimaryHandle ? AnchorPoint::TOP_RIGHT : AnchorPoint::TOP_LEFT ); @@ -916,8 +934,11 @@ struct Decorator::Impl : public ConnectionTracker // The SetHandleImage() method will change the orientation. const float yLocalPosition = handle.verticallyFlipped ? handle.position.y : handle.position.y + handle.lineHeight; - handle.actor.SetPosition( handle.position.x, - yLocalPosition ); // TODO : Fix for multiline. + if( handle.actor ) + { + handle.actor.SetPosition( handle.position.x, + yLocalPosition ); // TODO : Fix for multiline. + } } void SetHandleImage( HandleType type ) @@ -1139,7 +1160,10 @@ struct Decorator::Impl : public ConnectionTracker mController.DecorationEvent( type, HANDLE_RELEASED, x, y ); } - handle.actor.SetImage( mHandleImages[type][HANDLE_IMAGE_RELEASED] ); + if( handle.actor ) + { + handle.actor.SetImage( mHandleImages[type][HANDLE_IMAGE_RELEASED] ); + } handle.pressed = false; mHandlePanning = false; @@ -1634,8 +1658,8 @@ struct Decorator::Impl : public ConnectionTracker PropertyNotification mVerticalGreaterThanNotification; ///< Notifies when the 'y' coord of the active layer is grater than a given value. PropertyNotification mHorizontalLessThanNotification; ///< Notifies when the 'x' coord of the active layer is less than a given value. PropertyNotification mHorizontalGreaterThanNotification; ///< Notifies when the 'x' coord of the active layer is grater than a given value. - ImageActor mPrimaryCursor; - ImageActor mSecondaryCursor; + Control mPrimaryCursor; + Control mSecondaryCursor; Actor mHighlightActor; ///< Actor to display highlight Renderer mHighlightRenderer; @@ -1836,10 +1860,10 @@ void Decorator::SetHandleActive( HandleType handleType, bool active ) // state when the power button is pressed and the application goes to background. mImpl->mHandle[handleType].pressed = false; Image imageReleased = mImpl->mHandleImages[handleType][HANDLE_IMAGE_RELEASED]; - ImageActor imageActor = mImpl->mHandle[handleType].actor; - if( imageReleased && imageActor ) + ImageView imageView = mImpl->mHandle[handleType].actor; + if( imageReleased && imageView ) { - imageActor.SetImage( imageReleased ); + imageView.SetImage( imageReleased ); } } @@ -1872,7 +1896,7 @@ const Vector4& Decorator::GetHandleColor() const void Decorator::SetPosition( HandleType handleType, float x, float y, float height ) { - // Adjust grab handle displacement + // Adjust handle's displacement Impl::HandleImpl& handle = mImpl->mHandle[handleType]; handle.grabDisplacementX -= x - handle.position.x;