Update double tap and long press behaviour.
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / cursor-helper-functions.h
index 5896b4d..f62165b 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __DALI_TOOLKIT_TEXT_CURSOR_HELPER_FUNCTIONS_H__
-#define __DALI_TOOLKIT_TEXT_CURSOR_HELPER_FUNCTIONS_H__
+#ifndef DALI_TOOLKIT_TEXT_CURSOR_HELPER_FUNCTIONS_H
+#define DALI_TOOLKIT_TEXT_CURSOR_HELPER_FUNCTIONS_H
 
 /*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -32,6 +32,18 @@ namespace Toolkit
 namespace Text
 {
 
+struct CharacterHitTest
+{
+  /**
+   * @brief Enumeration of the types of hit test.
+   */
+  enum Mode
+  {
+    TAP,   ///< Retrieves the first or last character of the line if the touch point is outside of the boundaries of the text.
+    SCROLL ///< Retrieves the character above or below to the touch point if it's outside of the boundaries of the text.
+  };
+};
+
 struct CursorInfo
 {
   CursorInfo()
@@ -63,11 +75,13 @@ struct CursorInfo
  *
  * @param[in] visualModel The visual model.
  * @param[in] visualY The touch point 'y' in text's coords.
+ * @param[out] matchedLine Whether the touch point actually hits a line.
  *
  * @return A line index.
  */
 LineIndex GetClosestLine( VisualModelPtr visualModel,
-                          float visualY );
+                          float visualY,
+                          bool& matchedLine );
 
 /**
  * @brief Calculates the vertical line's offset for a given line.
@@ -85,11 +99,18 @@ float CalculateLineOffset( const Vector<LineRun>& lines,
 /**
  * @brief Retrieves the cursor's logical position for a given touch point x,y
  *
+ * There are two types of hit test: CharacterHitTest::TAP retrieves the first or
+ * last character of a line if the touch point is outside the boundaries of the
+ * text, CharacterHitTest::SCROLL retrieves the character above or below to the
+ * touch point if it's outside the boundaries of the text.
+ *
  * @param[in] visualModel The visual model.
  * @param[in] logicalModel The logical model.
  * @param[in] metrics A wrapper around FontClient used to get metrics.
  * @param[in] visualX The touch point 'x' in text's coords.
  * @param[in] visualY The touch point 'y' in text's coords.
+ * @param[in] mode The type of hit test.
+ * @param[out] matchedCharacter Whether the touch point actually hits a character.
  *
  * @return The logical cursor position (in characters). 0 is just before the first character, a value equal to the number of characters is just after the last character.
  */
@@ -97,8 +118,9 @@ CharacterIndex GetClosestCursorIndex( VisualModelPtr visualModel,
                                       LogicalModelPtr logicalModel,
                                       MetricsPtr metrics,
                                       float visualX,
-                                      float visualY );
-
+                                      float visualY,
+                                      CharacterHitTest::Mode mode,
+                                      bool& matchedCharacter );
 
 /**
  * @brief Calculates the cursor's position for a given character index in the logical order.
@@ -128,8 +150,9 @@ void GetCursorPosition( VisualModelPtr visualModel,
  * @param[in] visualY The touch point 'y' in text's coords.
  * @param[out] startIndex Index to the first character of the selected word.
  * @param[out] endIndex Index to the last character of the selected word.
+ * @param[out] noTextHitIndex Index to the nearest character when there is no hit.
  *
- * @return @e true if the indices are found.
+ * @return @e true if the touch point hits a character.
  */
 bool FindSelectionIndices( VisualModelPtr visualModel,
                            LogicalModelPtr logicalModel,
@@ -137,7 +160,8 @@ bool FindSelectionIndices( VisualModelPtr visualModel,
                            float visualX,
                            float visualY,
                            CharacterIndex& startIndex,
-                           CharacterIndex& endIndex );
+                           CharacterIndex& endIndex,
+                           CharacterIndex& noTextHitIndex );
 
 } // namespace Text
 
@@ -145,4 +169,4 @@ bool FindSelectionIndices( VisualModelPtr visualModel,
 
 } // namespace Dali
 
-#endif // __DALI_TOOLKIT_TEXT_CURSOR_HELPER_FUNCTIONS_H__
+#endif // DALI_TOOLKIT_TEXT_CURSOR_HELPER_FUNCTIONS_H