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=7016759914a5b762a63049069031db6c77fc1268;hp=a495768dfaca3b5089eb21e42def5137d74f8131;hb=d3a888997fb0ab17fc994eed2854bcad8be32623;hpb=2b051f9220d4e28225a57d5dabc98e093357cad6 diff --git a/dali-toolkit/internal/text/decorator/text-decorator.cpp b/dali-toolkit/internal/text/decorator/text-decorator.cpp index a495768..7016759 100644 --- a/dali-toolkit/internal/text/decorator/text-decorator.cpp +++ b/dali-toolkit/internal/text/decorator/text-decorator.cpp @@ -22,8 +22,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include @@ -266,7 +266,8 @@ struct Decorator::Impl : public ConnectionTracker mHorizontalScrollingEnabled( false ), mVerticalScrollingEnabled( false ), mSmoothHandlePanEnabled( false ), - mIsHighlightBoxActive( false ) + mIsHighlightBoxActive( false ), + mHidePrimaryCursorAndGrabHandle( false ) { mQuadVertexFormat[ "aPosition" ] = Property::VECTOR2; mHighlightShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); @@ -290,7 +291,7 @@ struct Decorator::Impl : public ConnectionTracker if( mPrimaryCursor ) { const CursorImpl& cursor = mCursor[PRIMARY_CURSOR]; - mPrimaryCursorVisible = ( ( mControlSize.width - ( cursor.position.x + mCursorWidth ) > -Math::MACHINE_EPSILON_1000 ) && + mPrimaryCursorVisible = (!mHidePrimaryCursorAndGrabHandle) && ( ( mControlSize.width - ( cursor.position.x + mCursorWidth ) > -Math::MACHINE_EPSILON_1000 ) && ( cursor.position.x > -Math::MACHINE_EPSILON_1000 ) && ( mControlSize.height - ( cursor.position.y + cursor.cursorHeight ) > -Math::MACHINE_EPSILON_1000 ) && ( cursor.position.y > -Math::MACHINE_EPSILON_1000 ) ); @@ -330,7 +331,7 @@ struct Decorator::Impl : public ConnectionTracker grabHandle.verticallyVisible = ( ( ( mControlSize.height - grabHandle.lineHeight ) - grabHandle.position.y > -Math::MACHINE_EPSILON_1000 ) && ( grabHandle.position.y > -Math::MACHINE_EPSILON_1000 ) ); - const bool isVisible = grabHandle.horizontallyVisible && grabHandle.verticallyVisible; + const bool isVisible = grabHandle.horizontallyVisible && grabHandle.verticallyVisible && (!mHidePrimaryCursorAndGrabHandle); if( isVisible ) { CreateGrabHandle(); @@ -767,7 +768,7 @@ struct Decorator::Impl : public ConnectionTracker { if( !mActiveLayer ) { - mActiveLayer = Layer::New(); + mActiveLayer = Actor::New(); #ifdef DECORATOR_DEBUG mActiveLayer.SetProperty( Actor::Property::NAME, "ActiveLayerActor" ); #endif @@ -827,7 +828,7 @@ struct Decorator::Impl : public ConnectionTracker grabHandle.actor.Add( grabHandle.grabArea ); grabHandle.actor.SetProperty( Actor::Property::COLOR, mHandleColor ); - grabHandle.grabArea.TouchSignal().Connect( this, &Decorator::Impl::OnGrabHandleTouched ); + grabHandle.grabArea.TouchedSignal().Connect( this, &Decorator::Impl::OnGrabHandleTouched ); // The grab handle's actor is attached to the tap and long press detectors in order to consume these events. // Note that no callbacks are connected to any signal emitted by the tap and long press detectors. @@ -895,7 +896,7 @@ struct Decorator::Impl : public ConnectionTracker primary.grabArea.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER ); primary.grabArea.SetProperty( Actor::Property::SIZE_MODE_FACTOR, DEFAULT_SELECTION_HANDLE_RELATIVE_SIZE ); - primary.grabArea.TouchSignal().Connect( this, &Decorator::Impl::OnHandleOneTouched ); + primary.grabArea.TouchedSignal().Connect( this, &Decorator::Impl::OnHandleOneTouched ); // The handle's actor is attached to the tap and long press detectors in order to consume these events. // Note that no callbacks are connected to any signal emitted by the tap and long press detectors. @@ -939,7 +940,7 @@ struct Decorator::Impl : public ConnectionTracker secondary.grabArea.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER ); secondary.grabArea.SetProperty( Actor::Property::SIZE_MODE_FACTOR, DEFAULT_SELECTION_HANDLE_RELATIVE_SIZE ); - secondary.grabArea.TouchSignal().Connect( this, &Decorator::Impl::OnHandleTwoTouched ); + secondary.grabArea.TouchedSignal().Connect( this, &Decorator::Impl::OnHandleTwoTouched ); // The handle's actor is attached to the tap and long press detectors in order to consume these events. // Note that no callbacks are connected to any signal emitted by the tap and long press detectors. @@ -1229,7 +1230,7 @@ struct Decorator::Impl : public ConnectionTracker if( ! mQuadVertices ) { - mQuadVertices = PropertyBuffer::New( mQuadVertexFormat ); + mQuadVertices = VertexBuffer::New( mQuadVertexFormat ); } mQuadVertices.SetData( &vertices[ 0 ], vertices.Size() ); @@ -1259,7 +1260,8 @@ struct Decorator::Impl : public ConnectionTracker void DoPan( HandleImpl& handle, HandleType type, const PanGesture& gesture ) { - if( Gesture::Started == gesture.state ) + GestureState state = gesture.GetState(); + if( GestureState::STARTED == state ) { handle.grabDisplacementX = handle.grabDisplacementY = 0.f; @@ -1267,15 +1269,16 @@ struct Decorator::Impl : public ConnectionTracker handle.globalPosition.y = handle.position.y; } - handle.grabDisplacementX += gesture.displacement.x; - handle.grabDisplacementY += ( handle.verticallyFlipped ? -gesture.displacement.y : gesture.displacement.y ); + const Vector2& displacement = gesture.GetDisplacement(); + handle.grabDisplacementX += displacement.x; + handle.grabDisplacementY += ( handle.verticallyFlipped ? -displacement.y : displacement.y ); const float x = handle.globalPosition.x + handle.grabDisplacementX; const float y = handle.globalPosition.y + handle.grabDisplacementY + 0.5f * handle.lineHeight; const float yVerticallyFlippedCorrected = y - ( handle.verticallyFlippedOnTouch ? handle.lineHeight : 0.f ); - if( ( Gesture::Started == gesture.state ) || - ( Gesture::Continuing == gesture.state ) ) + if( ( GestureState::STARTED == state ) || + ( GestureState::CONTINUING == state ) ) { Vector2 targetSize; mController.GetTargetSize( targetSize ); @@ -1317,8 +1320,8 @@ struct Decorator::Impl : public ConnectionTracker mIsHandlePanning = true; } - else if( ( Gesture::Finished == gesture.state ) || - ( Gesture::Cancelled == gesture.state ) ) + else if( ( GestureState::FINISHED == state ) || + ( GestureState::CANCELLED == state ) ) { if( mScrollTimer && ( mScrollTimer.IsRunning() || mNotifyEndOfScroll ) ) @@ -1363,7 +1366,7 @@ struct Decorator::Impl : public ConnectionTracker } } - bool OnGrabHandleTouched( Actor actor, const TouchData& touch ) + bool OnGrabHandleTouched( Actor actor, const TouchEvent& touch ) { HandleImpl& grabHandle = mHandle[GRAB_HANDLE]; @@ -1386,11 +1389,10 @@ struct Decorator::Impl : public ConnectionTracker SetHandleImage( GRAB_HANDLE ); } - // Consume to avoid pop-ups accidentally closing, when handle is outside of pop-up area - return true; + return false; } - bool OnHandleOneTouched( Actor actor, const TouchData& touch ) + bool OnHandleOneTouched( Actor actor, const TouchEvent& touch ) { HandleImpl& primarySelectionHandle = mHandle[LEFT_SELECTION_HANDLE]; @@ -1417,11 +1419,10 @@ struct Decorator::Impl : public ConnectionTracker SetHandleImage( LEFT_SELECTION_HANDLE ); } - // Consume to avoid pop-ups accidentally closing, when handle is outside of pop-up area - return true; + return false; } - bool OnHandleTwoTouched( Actor actor, const TouchData& touch ) + bool OnHandleTwoTouched( Actor actor, const TouchEvent& touch ) { HandleImpl& secondarySelectionHandle = mHandle[RIGHT_SELECTION_HANDLE]; @@ -1448,8 +1449,7 @@ struct Decorator::Impl : public ConnectionTracker SetHandleImage( RIGHT_SELECTION_HANDLE ); } - // Consume to avoid pop-ups accidentally closing, when handle is outside of pop-up area - return true; + return false; } void HandleResetPosition( PropertyNotification& source ) @@ -1520,7 +1520,7 @@ struct Decorator::Impl : public ConnectionTracker LessThanCondition( mBoundingBox.y + topHeight ) ); // Notifies the change from false to true and from true to false. - mHandleVerticalLessThanNotification.SetNotifyMode( PropertyNotification::NotifyOnChanged ); + mHandleVerticalLessThanNotification.SetNotifyMode( PropertyNotification::NOTIFY_ON_CHANGED ); // Connects the signals with the callbacks. mHandleVerticalLessThanNotification.NotifySignal().Connect( this, &Decorator::Impl::HandleResetPosition ); @@ -1537,7 +1537,7 @@ struct Decorator::Impl : public ConnectionTracker GreaterThanCondition( mBoundingBox.w - bottomHeight ) ); // Notifies the change from false to true and from true to false. - mHandleVerticalGreaterThanNotification.SetNotifyMode( PropertyNotification::NotifyOnChanged ); + mHandleVerticalGreaterThanNotification.SetNotifyMode( PropertyNotification::NOTIFY_ON_CHANGED ); // Connects the signals with the callbacks. mHandleVerticalGreaterThanNotification.NotifySignal().Connect( this, &Decorator::Impl::HandleResetPosition ); @@ -1557,7 +1557,7 @@ struct Decorator::Impl : public ConnectionTracker LessThanCondition( mBoundingBox.y + topHeight ) ); // Notifies the change from false to true and from true to false. - mHandleVerticalLessThanNotification.SetNotifyMode( PropertyNotification::NotifyOnChanged ); + mHandleVerticalLessThanNotification.SetNotifyMode( PropertyNotification::NOTIFY_ON_CHANGED ); // Connects the signals with the callbacks. mHandleVerticalLessThanNotification.NotifySignal().Connect( this, &Decorator::Impl::HandleResetPosition ); @@ -1575,7 +1575,7 @@ struct Decorator::Impl : public ConnectionTracker GreaterThanCondition( mBoundingBox.w - bottomHeight ) ); // Notifies the change from false to true and from true to false. - mHandleVerticalGreaterThanNotification.SetNotifyMode( PropertyNotification::NotifyOnChanged ); + mHandleVerticalGreaterThanNotification.SetNotifyMode( PropertyNotification::NOTIFY_ON_CHANGED ); // Connects the signals with the callbacks. mHandleVerticalGreaterThanNotification.NotifySignal().Connect( this, &Decorator::Impl::HandleResetPosition ); @@ -1593,7 +1593,7 @@ struct Decorator::Impl : public ConnectionTracker LessThanCondition( mBoundingBox.y + topHeight ) ); // Notifies the change from false to true and from true to false. - mHandleVerticalLessThanNotification.SetNotifyMode( PropertyNotification::NotifyOnChanged ); + mHandleVerticalLessThanNotification.SetNotifyMode( PropertyNotification::NOTIFY_ON_CHANGED ); // Connects the signals with the callbacks. mHandleVerticalLessThanNotification.NotifySignal().Connect( this, &Decorator::Impl::HandleResetPosition ); @@ -1607,7 +1607,7 @@ struct Decorator::Impl : public ConnectionTracker GreaterThanCondition( mBoundingBox.w - bottomHeight ) ); // Notifies the change from false to true and from true to false. - mHandleVerticalGreaterThanNotification.SetNotifyMode( PropertyNotification::NotifyOnChanged ); + mHandleVerticalGreaterThanNotification.SetNotifyMode( PropertyNotification::NOTIFY_ON_CHANGED ); // Connects the signals with the callbacks. mHandleVerticalGreaterThanNotification.NotifySignal().Connect( this, &Decorator::Impl::HandleResetPosition ); @@ -1639,7 +1639,7 @@ struct Decorator::Impl : public ConnectionTracker LessThanCondition( mBoundingBox.x + leftWidth ) ); // Notifies the change from false to true and from true to false. - mHandleHorizontalLessThanNotification.SetNotifyMode( PropertyNotification::NotifyOnChanged ); + mHandleHorizontalLessThanNotification.SetNotifyMode( PropertyNotification::NOTIFY_ON_CHANGED ); // Connects the signals with the callbacks. mHandleHorizontalLessThanNotification.NotifySignal().Connect( this, &Decorator::Impl::HandleResetPosition ); @@ -1652,7 +1652,7 @@ struct Decorator::Impl : public ConnectionTracker GreaterThanCondition( mBoundingBox.z - rightWidth ) ); // Notifies the change from false to true and from true to false. - mHandleHorizontalGreaterThanNotification.SetNotifyMode( PropertyNotification::NotifyOnChanged ); + mHandleHorizontalGreaterThanNotification.SetNotifyMode( PropertyNotification::NOTIFY_ON_CHANGED ); // Connects the signals with the callbacks. mHandleHorizontalGreaterThanNotification.NotifySignal().Connect( this, &Decorator::Impl::HandleResetPosition ); @@ -1748,8 +1748,8 @@ struct Decorator::Impl : public ConnectionTracker GreaterThanCondition( mBoundingBox.w - popupHalfSize.height ) ); // Notifies the change from false to true and from true to false. - mPopupTopExceedNotification.SetNotifyMode( PropertyNotification::NotifyOnChanged ); - mPopupBottomExceedNotification.SetNotifyMode( PropertyNotification::NotifyOnChanged ); + mPopupTopExceedNotification.SetNotifyMode( PropertyNotification::NOTIFY_ON_CHANGED ); + mPopupBottomExceedNotification.SetNotifyMode( PropertyNotification::NOTIFY_ON_CHANGED ); mPopupTopExceedNotification.NotifySignal().Connect( this, &Decorator::Impl::PopUpLeavesTopBoundary ); mPopupBottomExceedNotification.NotifySignal().Connect( this, &Decorator::Impl::PopUpLeavesBottomBoundary ); @@ -1882,7 +1882,7 @@ struct Decorator::Impl : public ConnectionTracker Timer mCursorBlinkTimer; ///< Timer to signal cursor to blink Timer mScrollTimer; ///< Timer used to scroll the text when the grab handle is moved close to the edges. - Layer mActiveLayer; ///< Layer for active handles and alike that ensures they are above all else. + Actor mActiveLayer; ///< Actor for active handles and alike that ensures they are above all else. PropertyNotification mHandleVerticalLessThanNotification; ///< Notifies when the 'y' coord of the active layer is less than a given value. PropertyNotification mHandleVerticalGreaterThanNotification; ///< Notifies when the 'y' coord of the active layer is grater than a given value. PropertyNotification mHandleHorizontalLessThanNotification; ///< Notifies when the 'x' coord of the active layer is less than a given value. @@ -1906,7 +1906,7 @@ struct Decorator::Impl : public ConnectionTracker CursorImpl mCursor[CURSOR_COUNT]; HandleImpl mHandle[HANDLE_TYPE_COUNT]; - PropertyBuffer mQuadVertices; + VertexBuffer mQuadVertices; Geometry mQuadGeometry; QuadContainer mHighlightQuadList; ///< Sub-selections that combine to create the complete selection highlight. @@ -1946,6 +1946,7 @@ struct Decorator::Impl : public ConnectionTracker bool mVerticalScrollingEnabled : 1; ///< Whether the vertical scrolling is enabled. bool mSmoothHandlePanEnabled : 1; ///< Whether to pan smoothly the handles. bool mIsHighlightBoxActive : 1; ///< Whether the highlight box is active. + bool mHidePrimaryCursorAndGrabHandle : 1; ///< Whether the primary cursor and grab are hidden always. }; DecoratorPtr Decorator::New( ControllerInterface& controller, @@ -2094,6 +2095,11 @@ int Decorator::GetCursorWidth() const return static_cast( mImpl->mCursorWidth ); } +void Decorator::SetEditable( bool editable ) +{ + mImpl->mHidePrimaryCursorAndGrabHandle = !editable; + mImpl->Relayout( mImpl->mControlSize ); +} /** Handles **/ void Decorator::SetHandleActive( HandleType handleType, bool active )