#include <dali/public-api/actors/image-actor.h>
#include <dali/public-api/actors/layer.h>
#include <dali/public-api/common/constants.h>
+#include <dali/public-api/common/stage.h>
#include <dali/public-api/events/tap-gesture.h>
#include <dali/public-api/events/tap-gesture-detector.h>
#include <dali/public-api/events/pan-gesture.h>
const Dali::Vector3 DEFAULT_SELECTION_HANDLE_RELATIVE_SIZE( 1.5f, 1.5f, 1.0f );
const std::size_t CURSOR_BLINK_INTERVAL = 500; // Cursor blink interval
+const std::size_t MILLISECONDS = 1000;
} // end of namespace
mActiveGrabHandle(false),
mActiveSelection( false ),
mCursorBlinkInterval( CURSOR_BLINK_INTERVAL ),
- mCursorBlinkDuration(0.0f),
- mCursorBlinkStatus( true )
+ mCursorBlinkDuration( 0.0f ),
+ mCursorBlinkStatus( true ),
+ mGrabDisplacementX( 0.0f ),
+ mGrabDisplacementY( 0.0f ),
+ mBoundingBox( Rect<int>() )
{
}
#endif
parent.Add( mPrimaryCursor);
}
+
+ mPrimaryCursor.SetPosition( mCursor[PRIMARY_CURSOR].x, mCursor[PRIMARY_CURSOR].y );
}
else if ( mActiveCursor == ACTIVE_CURSOR_BOTH )
{
void OnPan( Actor actor, const PanGesture& gesture )
{
- if( actor == mGrabHandle )
+ if( actor == mGrabArea )
{
- // TODO
+ if( Gesture::Started == gesture.state )
+ {
+ mGrabDisplacementX = mGrabDisplacementY = 0;
+ }
+
+ mGrabDisplacementX += gesture.displacement.x;
+ mGrabDisplacementY += gesture.displacement.y;
+
+ float x = mCursor[PRIMARY_CURSOR].x + mGrabDisplacementX;
+ float y = mCursor[PRIMARY_CURSOR].y + mCursor[PRIMARY_CURSOR].height*0.5f + mGrabDisplacementY;
+
+ if( Gesture::Started == gesture.state ||
+ Gesture::Continuing == gesture.state )
+ {
+ mObserver.GrabHandleEvent( GRAB_HANDLE_PRESSED, x, y );
+ }
+ else if( Gesture::Finished == gesture.state ||
+ Gesture::Cancelled == gesture.state )
+ {
+ mObserver.GrabHandleEvent( GRAB_HANDLE_RELEASED, x, y );
+ }
}
}
ImageActor mGrabHandle;
Actor mGrabArea;
+ float mGrabDisplacementX;
+ float mGrabDisplacementY;
SelectionHandleImpl mSelectionHandle[SELECTION_HANDLE_COUNT];
TapGestureDetector mTapDetector;
PanGestureDetector mPanGestureDetector;
-
+ Rect<int> mBoundingBox;
};
DecoratorPtr Decorator::New( Internal::Control& parent, Observer& observer )
return DecoratorPtr( new Decorator(parent, observer) );
}
+void Decorator::SetBoundingBox( const Rect<int>& boundingBox )
+{
+ mImpl->mBoundingBox = boundingBox;
+}
+
+const Rect<int>& Decorator::GetBoundingBox() const
+{
+ return mImpl->mBoundingBox;
+}
+
void Decorator::Relayout( const Vector2& size )
{
mImpl->Relayout( size );
void Decorator::SetPosition( Cursor cursor, float x, float y, float height )
{
+ // Adjust grab handle displacement
+ mImpl->mGrabDisplacementX -= x - mImpl->mCursor[cursor].x;
+ mImpl->mGrabDisplacementY -= y - mImpl->mCursor[cursor].y;
+
mImpl->mCursor[cursor].x = x;
mImpl->mCursor[cursor].y = y;
mImpl->mCursor[cursor].height = height;
void Decorator::SetCursorBlinkInterval( float seconds )
{
- mImpl->mCursorBlinkInterval = seconds*1000; // Convert to milliseconds
+ mImpl->mCursorBlinkInterval = seconds*MILLISECONDS; // Convert to milliseconds
}
float Decorator::GetCursorBlinkInterval() const