[Tizen](ATSPI) squashed implementation
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / text-controller-impl.cpp
index 79d8a41..e9dc341 100755 (executable)
@@ -33,6 +33,7 @@
 #include <dali-toolkit/internal/text/shaper.h>
 #include <dali-toolkit/internal/text/text-control-interface.h>
 #include <dali-toolkit/internal/text/text-run-container.h>
+#include <dali-toolkit/internal/text/text-editable-control-interface.h>
 
 namespace
 {
@@ -191,6 +192,12 @@ bool Controller::Impl::ProcessInputEvents()
     GetCursorPosition( mEventData->mPrimaryCursorPosition,
                        cursorInfo );
 
+
+    if( NULL != mEditableControlInterface )
+    {
+      mEditableControlInterface->CaretMoved( mEventData->mPrimaryCursorPosition );
+    }
+
     if( mEventData->mUpdateCursorHookPosition )
     {
       // Update the cursor hook position. Used to move the cursor with the keys 'up' and 'down'.
@@ -932,7 +939,15 @@ bool Controller::Impl::UpdateModel( OperationsMask operationsRequired )
       {
         // Set the normal font and the placeholder font.
         defaultFontDescription = mFontDefaults->mFontDescription;
-        defaultPointSize = mFontDefaults->mDefaultPointSize * 64u;
+
+        if( mTextFitEnabled )
+        {
+          defaultPointSize = mFontDefaults->mFitPointSize * 64u;
+        }
+        else
+        {
+          defaultPointSize = mFontDefaults->mDefaultPointSize * 64u;
+        }
       }
 
       // Validates the fonts. If there is a character with no assigned font it sets a default one.
@@ -1847,15 +1862,13 @@ void Controller::Impl::OnSelectAllEvent()
 
   if( mEventData->mSelectionEnabled )
   {
-    ChangeState( EventData::SELECTING );
+    // Calculates the logical position from the start.
+    RepositionSelectionHandles( 0.f - mModel->mScrollPosition.x,
+                                0.f - mModel->mScrollPosition.y,
+                                Controller::NoTextTap::HIGHLIGHT );
 
     mEventData->mLeftSelectionPosition = 0u;
     mEventData->mRightSelectionPosition = mModel->mLogicalModel->mText.Count();
-
-    mEventData->mScrollAfterUpdatePosition = true;
-    mEventData->mUpdateLeftSelectionPosition = true;
-    mEventData->mUpdateRightSelectionPosition = true;
-    mEventData->mUpdateHighlightBox = true;
   }
 }
 
@@ -1936,6 +1949,18 @@ void Controller::Impl::RetrieveSelection( std::string& selectedText, bool delete
   }
 }
 
+void Controller::Impl::SetSelection( int start, int end )
+{
+  mEventData->mLeftSelectionPosition = start;
+  mEventData->mRightSelectionPosition = end;
+  mEventData->mUpdateCursorPosition = true;
+}
+
+std::pair< int, int > Controller::Impl::GetSelectionIndexes() const
+{
+  return { mEventData->mLeftSelectionPosition, mEventData->mRightSelectionPosition };
+}
+
 void Controller::Impl::ShowClipboard()
 {
   if( mClipboard )
@@ -1957,7 +1982,7 @@ void Controller::Impl::SetClipboardHideEnable(bool enable)
   mClipboardHideEnabled = enable;
 }
 
-bool Controller::Impl::CopyStringToClipboard( std::string& source )
+bool Controller::Impl::CopyStringToClipboard( const std::string& source )
 {
   //Send string to clipboard
   return ( mClipboard && mClipboard.SetItem( source ) );
@@ -2742,40 +2767,23 @@ void Controller::Impl::GetCursorPosition( CharacterIndex logical,
     cursorInfo.primaryCursorHeight = cursorInfo.lineHeight;
 
     bool isRTL = false;
-    HorizontalAlignment::Type alignment = mModel->mHorizontalAlignment;
     if( mModel->mMatchSystemLanguageDirection )
     {
       isRTL = mLayoutDirection == LayoutDirection::RIGHT_TO_LEFT;
     }
-    // Swap the alignment type if the line is right to left.
-    if( isRTL )
+
+    switch( mModel->mHorizontalAlignment )
     {
-      switch( alignment )
+      case Text::HorizontalAlignment::BEGIN :
       {
-        case HorizontalAlignment::BEGIN:
+        if( isRTL )
         {
-          alignment = HorizontalAlignment::END;
-          break;
+          cursorInfo.primaryPosition.x = mModel->mVisualModel->mControlSize.width - mEventData->mDecorator->GetCursorWidth();
         }
-        case HorizontalAlignment::CENTER:
-        {
-          // Nothing to do.
-          break;
-        }
-        case HorizontalAlignment::END:
+        else
         {
-          alignment = HorizontalAlignment::BEGIN;
-          break;
+          cursorInfo.primaryPosition.x = 0.f;
         }
-      }
-    }
-
-
-    switch( alignment )
-    {
-      case Text::HorizontalAlignment::BEGIN :
-      {
-        cursorInfo.primaryPosition.x = 0.f;
         break;
       }
       case Text::HorizontalAlignment::CENTER:
@@ -2785,7 +2793,14 @@ void Controller::Impl::GetCursorPosition( CharacterIndex logical,
       }
       case Text::HorizontalAlignment::END:
       {
-        cursorInfo.primaryPosition.x = mModel->mVisualModel->mControlSize.width - mEventData->mDecorator->GetCursorWidth();
+        if( isRTL )
+        {
+          cursorInfo.primaryPosition.x = 0.f;
+        }
+        else
+        {
+          cursorInfo.primaryPosition.x = mModel->mVisualModel->mControlSize.width - mEventData->mDecorator->GetCursorWidth();
+        }
         break;
       }
     }