Evas text: Made text_props_index_find faster.
authortasn <tasn@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 18 Jul 2011 07:41:21 +0000 (07:41 +0000)
committertasn <tasn@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 18 Jul 2011 07:41:21 +0000 (07:41 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@61468 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/engines/common/evas_text_utils.c

index 57210c5..d62c3d9 100644 (file)
@@ -104,19 +104,25 @@ evas_common_text_props_index_find(const Evas_Text_Props *props, int _cutoff)
 
    _cutoff += props->text_offset;
    ot_info = props->info->ot + props->start;
+   /* Should get us closer to the right place. */
+   if ((min <= _cutoff) && (_cutoff <= max))
+      mid = _cutoff;
+   else
+      mid = (min + max) / 2;
+
    if (props->bidi.dir == EVAS_BIDI_DIRECTION_RTL)
      {
         /* Monotonic in a descending order */
         do
           {
-             mid = (min + max) / 2;
-
              if (_cutoff > (int) ot_info[mid].source_cluster)
                 max = mid - 1;
              else if (_cutoff < (int) ot_info[mid].source_cluster)
                 min = mid + 1;
              else
                 break;
+
+             mid = (min + max) / 2;
           }
         while (min <= max);
      }
@@ -125,14 +131,14 @@ evas_common_text_props_index_find(const Evas_Text_Props *props, int _cutoff)
         /* Monotonic in an ascending order */
         do
           {
-             mid = (min + max) / 2;
-
              if (_cutoff < (int) ot_info[mid].source_cluster)
                 max = mid - 1;
              else if (_cutoff > (int) ot_info[mid].source_cluster)
                 min = mid + 1;
              else
                 break;
+
+             mid = (min + max) / 2;
           }
         while (min <= max);
      }