Merge changes I2df640e0,Ia1188305,I7fae506e,I7967a7cc,Ib0fdcdf4, ... into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / text-controls / text-editor-impl.cpp
index 7b4e8a2..dc82c36 100644 (file)
@@ -143,6 +143,8 @@ DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "renderingBackend",
 DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "maxLength",                      INTEGER,   MAX_LENGTH                           )
 DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "selectedTextStart",              INTEGER,   SELECTED_TEXT_START                  )
 DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "selectedTextEnd",                INTEGER,   SELECTED_TEXT_END                    )
+DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "horizontalScrollPosition",       FLOAT,     HORIZONTAL_SCROLL_POSITION           )
+DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "verticalScrollPosition",         INTEGER,   VERTICAL_SCROLL_POSITION             )
 DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "enableEditing",                  BOOLEAN,   ENABLE_EDITING                       )
 DALI_DEVEL_PROPERTY_REGISTRATION_READ_ONLY( Toolkit, TextEditor, "selectedText",         STRING,    SELECTED_TEXT                        )
 
@@ -722,6 +724,26 @@ void TextEditor::SetProperty( BaseObject* object, Property::Index index, const P
         impl.SetEditable( editable );
         break;
       }
+      case Toolkit::DevelTextEditor::Property::HORIZONTAL_SCROLL_POSITION:
+      {
+        float horizontalScroll = value.Get< float >();
+        DALI_LOG_INFO( gLogFilter, Debug::General, "TextEditor %p HORIZONTAL_SCROLL_POSITION %d\n", impl.mController.Get(), horizontalScroll );
+        if (horizontalScroll >= 0.0f)
+        {
+          impl.ScrollBy( Vector2(horizontalScroll - impl.GetHorizontalScrollPosition(), 0 ));
+        }
+        break;
+      }
+      case Toolkit::DevelTextEditor::Property::VERTICAL_SCROLL_POSITION:
+      {
+        float verticalScroll = value.Get< float >();
+        DALI_LOG_INFO( gLogFilter, Debug::General, "TextEditor %p VERTICAL_SCROLL_POSITION %d\n", impl.mController.Get(), verticalScroll );
+        if (verticalScroll >= 0.0f)
+        {
+          impl.ScrollBy( Vector2(0, verticalScroll - impl.GetVerticalScrollPosition() ));
+        }
+        break;
+      }
     } // switch
   } // texteditor
 }
@@ -1058,6 +1080,16 @@ Property::Value TextEditor::GetProperty( BaseObject* object, Property::Index ind
         value = impl.IsEditable();
         break;
       }
+      case Toolkit::DevelTextEditor::Property::HORIZONTAL_SCROLL_POSITION:
+      {
+        value = impl.GetHorizontalScrollPosition();
+        break;
+      }
+      case Toolkit::DevelTextEditor::Property::VERTICAL_SCROLL_POSITION:
+      {
+        value = impl.GetVerticalScrollPosition();
+        break;
+      }
     } //switch
   }
 
@@ -1081,6 +1113,32 @@ void TextEditor::SelectNone()
   }
 }
 
+void TextEditor::ScrollBy(Vector2 scroll)
+{
+  if( mController && mController->IsShowingRealText() )
+  {
+    mController->ScrollBy(scroll);
+  }
+}
+
+float TextEditor::GetHorizontalScrollPosition()
+{
+  if( mController && mController->IsShowingRealText() )
+  {
+    return mController->GetHorizontalScrollPosition();
+  }
+  return 0;
+}
+
+float TextEditor::GetVerticalScrollPosition()
+{
+  if( mController && mController->IsShowingRealText() )
+  {
+    return mController->GetVerticalScrollPosition();
+  }
+  return 0;
+}
+
 string TextEditor::GetSelectedText() const
 {
   string selectedText = "";
@@ -1999,7 +2057,7 @@ Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset(
             if (boundary == Dali::Accessibility::TextBoundary::LINE)
               counter++;
           }
-          if ((counter - 1) == offset)
+          if ((counter > 0) && ((counter - 1) == offset))
           {
             range.content = txt.substr(start, index - start + 1);
             range.startOffset = start;