mTextDepth( 0u ),
mActiveCopyPastePopup( false ),
mCursorBlinkStatus( true ),
+ mDelayCursorBlink( false ),
mPrimaryCursorVisible( false ),
mSecondaryCursorVisible( false ),
mSwapSelectionHandles( false ),
position.y );
mPrimaryCursor.SetSize( Size( mCursorWidth, cursor.cursorHeight ) );
}
- mPrimaryCursor.SetVisible( mPrimaryCursorVisible );
+ mPrimaryCursor.SetVisible( mPrimaryCursorVisible && mCursorBlinkStatus );
}
if( mSecondaryCursor )
{
cursor.position.y );
mSecondaryCursor.SetSize( Size( mCursorWidth, cursor.cursorHeight ) );
}
- mSecondaryCursor.SetVisible( mSecondaryCursorVisible );
+ mSecondaryCursor.SetVisible( mSecondaryCursorVisible && mCursorBlinkStatus );
}
// Show or hide the grab handle
CreateGrabHandle();
- grabHandle.actor.SetPosition( position.x,
+ grabHandle.actor.SetPosition( position.x - floor( 0.5f * mCursorWidth ),
position.y + grabHandle.lineHeight ); // TODO : Fix for multiline.
}
grabHandle.actor.SetVisible( isVisible );
cursor = CreateSolidColorActor( color );
cursor.SetSortModifier( DECORATION_DEPTH_INDEX );
cursor.SetParentOrigin( ParentOrigin::TOP_LEFT ); // Need to set the default parent origin as CreateSolidColorActor() sets a different one.
- cursor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
+ cursor.SetAnchorPoint( AnchorPoint::TOP_RIGHT );
}
// Add or Remove cursor(s) from parent
bool OnCursorBlinkTimerTick()
{
- // Cursor blinking
- if ( mPrimaryCursor )
+ if( !mDelayCursorBlink )
{
- mPrimaryCursor.SetVisible( mPrimaryCursorVisible && mCursorBlinkStatus );
+ // Cursor blinking
+ if ( mPrimaryCursor )
+ {
+ mPrimaryCursor.SetVisible( mPrimaryCursorVisible && mCursorBlinkStatus );
+ }
+ if ( mSecondaryCursor )
+ {
+ mSecondaryCursor.SetVisible( mSecondaryCursorVisible && mCursorBlinkStatus );
+ }
+
+ mCursorBlinkStatus = !mCursorBlinkStatus;
}
- if ( mSecondaryCursor )
+ else
{
- mSecondaryCursor.SetVisible( mSecondaryCursorVisible && mCursorBlinkStatus );
+ // Resume blinking
+ mDelayCursorBlink = false;
}
- mCursorBlinkStatus = !mCursorBlinkStatus;
-
return true;
}
for( std::size_t v = 0; iter != endIter; ++iter,v+=4 )
{
-
QuadCoordinates& quad = *iter;
// top-left (v+0)
mHighlightQuadList.clear();
- mHighlightRenderer.SetDepthIndex( mTextDepth - 2u ); // text is rendered at mTextDepth and text's shadow at mTextDepth -1u.
+ if( mHighlightRenderer )
+ {
+ mHighlightRenderer.SetDepthIndex( mTextDepth - 2u ); // text is rendered at mTextDepth and text's shadow at mTextDepth -1u.
+ }
}
}
bool mActiveCopyPastePopup : 1;
bool mCursorBlinkStatus : 1; ///< Flag to switch between blink on and blink off.
+ bool mDelayCursorBlink : 1; ///< Used to avoid cursor blinking when entering text.
bool mPrimaryCursorVisible : 1; ///< Whether the primary cursor is visible.
bool mSecondaryCursorVisible : 1; ///< Whether the secondary cursor is visible.
bool mSwapSelectionHandles : 1; ///< Whether to swap the selection handle images.
{
mImpl->mCursorBlinkTimer.Stop();
}
+
+ mImpl->mCursorBlinkStatus = true; // Keep cursor permanently shown
+}
+
+void Decorator::DelayCursorBlink()
+{
+ mImpl->mCursorBlinkStatus = true; // Show cursor for a bit longer
+ mImpl->mDelayCursorBlink = true;
}
void Decorator::SetCursorBlinkInterval( float seconds )