+ /**
+ * Creates a cursor
+ */
+ void CreateCursor( ImageActor& cursor )
+ {
+ if ( !mCursorImage )
+ {
+ mCursorImage = ResourceImage::New( DEFAULT_CURSOR_IMAGE );
+ }
+ cursor = ImageActor::New( mCursorImage );
+ cursor.SetAnchorPoint( AnchorPoint::TOP_CENTER );
+ }
+
+ /**
+ * Add / Remove cursor(s) from parent
+ */
+ void SetCursors()
+ {
+ Actor parent = mParent.Self();
+ /* Create Primary and or Secondary Cursor(s) if active and add to parent */
+ if ( mActiveCursor == ACTIVE_CURSOR_PRIMARY )
+ {
+ if ( !mPrimaryCursor )
+ {
+ CreateCursor( mPrimaryCursor );
+#ifdef DECORATOR_DEBUG
+ mPrimaryCursor.SetName( "PrimaryCursorActor" );
+#endif
+ parent.Add( mPrimaryCursor);
+ }
+ }
+ else if ( mActiveCursor == ACTIVE_CURSOR_BOTH )
+ {
+ if ( !mSecondaryCursor )
+ {
+ CreateCursor( mSecondaryCursor );
+#ifdef DECORATOR_DEBUG
+ mSecondaryCursor.SetName( "SecondaryCursorActor" );
+#endif
+ parent.Add( mSecondaryCursor);
+ }
+ }
+ else
+ {
+ /* ACTIVE_CURSOR_NONE so unparent cursors*/
+ if ( mPrimaryCursor )
+ {
+ UnparentAndReset( mPrimaryCursor );
+ }
+
+ if ( mSecondaryCursor )
+ {
+ UnparentAndReset( mSecondaryCursor );
+ }
+ }
+ }
+
+ bool OnCursorBlinkTimerTick()
+ {
+ // Cursor blinking
+ if ( ACTIVE_CURSOR_PRIMARY )
+ {
+ mPrimaryCursor.SetVisible( mCursorBlinkStatus );
+ }
+ else if ( ACTIVE_CURSOR_BOTH )
+ {
+ mPrimaryCursor.SetVisible( mCursorBlinkStatus );
+ mSecondaryCursor.SetVisible( mCursorBlinkStatus );
+ }
+
+ mCursorBlinkStatus = !mCursorBlinkStatus;
+
+ return true;