Implement vertical scroll animation on text input
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / text-controller-impl.h
index 608ea7d..424ac0b 100644 (file)
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/internal/text/input-style.h>
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/internal/text/input-style.h>
-#include <dali-toolkit/internal/text/layouts/layout-engine.h>
-#include <dali-toolkit/internal/text/logical-model-impl.h>
-#include <dali-toolkit/internal/text/text-scroller-data.h>
 #include <dali-toolkit/internal/text/text-controller.h>
 #include <dali-toolkit/internal/text/text-controller.h>
+#include <dali-toolkit/internal/text/text-model.h>
 #include <dali-toolkit/internal/text/text-view.h>
 #include <dali-toolkit/internal/text/text-view.h>
-#include <dali-toolkit/internal/text/visual-model-impl.h>
 
 namespace Dali
 {
 
 namespace Dali
 {
@@ -151,6 +148,7 @@ struct EventData
   bool mScrollAfterDelete               : 1;   ///< Whether to scroll after delete characters.
   bool mAllTextSelected                 : 1;   ///< True if the selection handles are selecting all the text.
   bool mUpdateInputStyle                : 1;   ///< Whether to update the input style after moving the cursor.
   bool mScrollAfterDelete               : 1;   ///< Whether to scroll after delete characters.
   bool mAllTextSelected                 : 1;   ///< True if the selection handles are selecting all the text.
   bool mUpdateInputStyle                : 1;   ///< Whether to update the input style after moving the cursor.
+  bool mCheckScrollAmount               : 1;   ///< Whether to check scrolled amount after updating the position
 };
 
 struct ModifyEvent
 };
 
 struct ModifyEvent
@@ -290,46 +288,42 @@ struct Controller::Impl
         EditableControlInterface* editableControlInterface )
   : mControlInterface( controlInterface ),
     mEditableControlInterface( editableControlInterface ),
         EditableControlInterface* editableControlInterface )
   : mControlInterface( controlInterface ),
     mEditableControlInterface( editableControlInterface ),
-    mLogicalModel(),
-    mVisualModel(),
+    mModel(),
     mFontDefaults( NULL ),
     mUnderlineDefaults( NULL ),
     mShadowDefaults( NULL ),
     mEmbossDefaults( NULL ),
     mOutlineDefaults( NULL ),
     mEventData( NULL ),
     mFontDefaults( NULL ),
     mUnderlineDefaults( NULL ),
     mShadowDefaults( NULL ),
     mEmbossDefaults( NULL ),
     mOutlineDefaults( NULL ),
     mEventData( NULL ),
-    mAutoScrollData( NULL ),
     mFontClient(),
     mClipboard(),
     mView(),
     mMetrics(),
     mFontClient(),
     mClipboard(),
     mView(),
     mMetrics(),
-    mLayoutEngine(),
     mModifyEvents(),
     mTextColor( Color::BLACK ),
     mModifyEvents(),
     mTextColor( Color::BLACK ),
-    mScrollPosition(),
     mTextUpdateInfo(),
     mOperationsPending( NO_OPERATION ),
     mMaximumNumberOfCharacters( 50u ),
     mRecalculateNaturalSize( true ),
     mMarkupProcessorEnabled( false ),
     mClipboardHideEnabled( true ),
     mTextUpdateInfo(),
     mOperationsPending( NO_OPERATION ),
     mMaximumNumberOfCharacters( 50u ),
     mRecalculateNaturalSize( true ),
     mMarkupProcessorEnabled( false ),
     mClipboardHideEnabled( true ),
-    mIsAutoScrollEnabled( false )
+    mIsAutoScrollEnabled( false ),
+    mAutoScrollDirectionRTL( false )
   {
   {
-    mLogicalModel = LogicalModel::New();
-    mVisualModel  = VisualModel::New();
+    mModel = Model::New();
 
     mFontClient = TextAbstraction::FontClient::Get();
     mClipboard = Clipboard::Get();
 
 
     mFontClient = TextAbstraction::FontClient::Get();
     mClipboard = Clipboard::Get();
 
-    mView.SetVisualModel( mVisualModel );
+    mView.SetVisualModel( mModel->mVisualModel );
 
     // Use this to access FontClient i.e. to get down-scaled Emoji metrics.
     mMetrics = Metrics::New( mFontClient );
     mLayoutEngine.SetMetrics( mMetrics );
 
     // Set the text properties to default
 
     // Use this to access FontClient i.e. to get down-scaled Emoji metrics.
     mMetrics = Metrics::New( mFontClient );
     mLayoutEngine.SetMetrics( mMetrics );
 
     // Set the text properties to default
-    mVisualModel->SetUnderlineEnabled( false );
-    mVisualModel->SetUnderlineHeight( 0.0f );
+    mModel->mVisualModel->SetUnderlineEnabled( false );
+    mModel->mVisualModel->SetUnderlineHeight( 0.0f );
   }
 
   ~Impl()
   }
 
   ~Impl()
@@ -340,7 +334,6 @@ struct Controller::Impl
     delete mEmbossDefaults;
     delete mOutlineDefaults;
     delete mEventData;
     delete mEmbossDefaults;
     delete mOutlineDefaults;
     delete mEventData;
-    delete mAutoScrollData;
   }
 
   // Text Controller Implementation.
   }
 
   // Text Controller Implementation.
@@ -401,7 +394,7 @@ struct Controller::Impl
   bool IsShowingRealText() const
   {
     return ( !IsShowingPlaceholderText() &&
   bool IsShowingRealText() const
   {
     return ( !IsShowingPlaceholderText() &&
-             0u != mLogicalModel->mText.Count() );
+             0u != mModel->mLogicalModel->mText.Count() );
   }
 
   /**
   }
 
   /**
@@ -414,7 +407,7 @@ struct Controller::Impl
       mEventData->mIsShowingPlaceholderText = false;
 
       // Remove mPlaceholderTextColor
       mEventData->mIsShowingPlaceholderText = false;
 
       // Remove mPlaceholderTextColor
-      mVisualModel->SetTextColor( mTextColor );
+      mModel->mVisualModel->SetTextColor( mTextColor );
     }
   }
 
     }
   }
 
@@ -695,35 +688,30 @@ public:
 
   ControlInterface* mControlInterface;     ///< Reference to the text controller.
   EditableControlInterface* mEditableControlInterface; ///< Reference to the editable text controller.
 
   ControlInterface* mControlInterface;     ///< Reference to the text controller.
   EditableControlInterface* mEditableControlInterface; ///< Reference to the editable text controller.
-  LogicalModelPtr mLogicalModel;           ///< Pointer to the logical model.
-  VisualModelPtr  mVisualModel;            ///< Pointer to the visual model.
+  ModelPtr mModel;                         ///< Pointer to the text's model.
   FontDefaults* mFontDefaults;             ///< Avoid allocating this when the user does not specify a font.
   UnderlineDefaults* mUnderlineDefaults;   ///< Avoid allocating this when the user does not specify underline parameters.
   ShadowDefaults* mShadowDefaults;         ///< Avoid allocating this when the user does not specify shadow parameters.
   EmbossDefaults* mEmbossDefaults;         ///< Avoid allocating this when the user does not specify emboss parameters.
   OutlineDefaults* mOutlineDefaults;       ///< Avoid allocating this when the user does not specify outline parameters.
   EventData* mEventData;                   ///< Avoid allocating everything for text input until EnableTextInput().
   FontDefaults* mFontDefaults;             ///< Avoid allocating this when the user does not specify a font.
   UnderlineDefaults* mUnderlineDefaults;   ///< Avoid allocating this when the user does not specify underline parameters.
   ShadowDefaults* mShadowDefaults;         ///< Avoid allocating this when the user does not specify shadow parameters.
   EmbossDefaults* mEmbossDefaults;         ///< Avoid allocating this when the user does not specify emboss parameters.
   OutlineDefaults* mOutlineDefaults;       ///< Avoid allocating this when the user does not specify outline parameters.
   EventData* mEventData;                   ///< Avoid allocating everything for text input until EnableTextInput().
-  ScrollerData* mAutoScrollData;           ///< Avoid allocating this when the user does not specify the auto text scrolling feature.
   TextAbstraction::FontClient mFontClient; ///< Handle to the font client.
   Clipboard mClipboard;                    ///< Handle to the system clipboard
   View mView;                              ///< The view interface to the rendering back-end.
   MetricsPtr mMetrics;                     ///< A wrapper around FontClient used to get metrics & potentially down-scaled Emoji metrics.
   TextAbstraction::FontClient mFontClient; ///< Handle to the font client.
   Clipboard mClipboard;                    ///< Handle to the system clipboard
   View mView;                              ///< The view interface to the rendering back-end.
   MetricsPtr mMetrics;                     ///< A wrapper around FontClient used to get metrics & potentially down-scaled Emoji metrics.
-  LayoutEngine mLayoutEngine;              ///< The layout engine.
+  Layout::Engine mLayoutEngine;            ///< The layout engine.
   Vector<ModifyEvent> mModifyEvents;       ///< Temporary stores the text set until the next relayout.
   Vector4 mTextColor;                      ///< The regular text color
   Vector<ModifyEvent> mModifyEvents;       ///< Temporary stores the text set until the next relayout.
   Vector4 mTextColor;                      ///< The regular text color
-  /**
-   * 0,0 means that the top-left corner of the layout matches the top-left corner of the UI control.
-   * Typically this will have a negative value with scrolling occurs.
-   */
-  Vector2 mScrollPosition;                 ///< The text is offset by this position when scrolling.
   TextUpdateInfo mTextUpdateInfo;          ///< Info of the characters updated.
   OperationsMask mOperationsPending;       ///< Operations pending to be done to layout the text.
   Length mMaximumNumberOfCharacters;       ///< Maximum number of characters that can be inserted.
 
   bool mRecalculateNaturalSize:1;          ///< Whether the natural size needs to be recalculated.
   bool mMarkupProcessorEnabled:1;          ///< Whether the mark-up procesor is enabled.
   TextUpdateInfo mTextUpdateInfo;          ///< Info of the characters updated.
   OperationsMask mOperationsPending;       ///< Operations pending to be done to layout the text.
   Length mMaximumNumberOfCharacters;       ///< Maximum number of characters that can be inserted.
 
   bool mRecalculateNaturalSize:1;          ///< Whether the natural size needs to be recalculated.
   bool mMarkupProcessorEnabled:1;          ///< Whether the mark-up procesor is enabled.
-  bool mClipboardHideEnabled:1;            ///< Whether the ClipboardHide function work or not.
+  bool mClipboardHideEnabled:1;            ///< Whether the ClipboardHide function work or not
   bool mIsAutoScrollEnabled:1;             ///< Whether auto text scrolling is enabled.
   bool mIsAutoScrollEnabled:1;             ///< Whether auto text scrolling is enabled.
+  CharacterDirection mAutoScrollDirectionRTL:1;  ///< Direction of auto scrolling, true if rtl
+
 };
 
 } // namespace Text
 };
 
 } // namespace Text