Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
        etk_entry.c etk_entry.h etk_scrolled_view.c 


Log Message:
[Etk_Entry] Add API call to limit max text size (Tick)
[Etk_Scrolled_View] Make things a bit less "jiggly".


===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_entry.c,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -3 -r1.51 -r1.52
--- etk_entry.c 13 Dec 2007 00:09:37 -0000      1.51
+++ etk_entry.c 5 May 2008 13:47:04 -0000       1.52
@@ -1,5 +1,6 @@
 /** @file etk_entry.c */
 #ifdef HAVE_CONFIG_H
+#define _GNU_SOURCE
 #include "config.h"
 #endif
 
@@ -126,6 +127,8 @@
  */
 void etk_entry_text_set(Etk_Entry *entry, const char *text)
 {
+   char *text_tmp;
+
    if (!entry)
       return;
 
@@ -134,11 +137,15 @@
       if (entry->text != text)
       {
          free(entry->text);
-         entry->text = text ? strdup(text) : NULL;
+         entry->text = text ? entry->text_limit == 0 ? strdup(text) : 
strndup(text, entry->text_limit) : NULL;
       }
    }
-   else
-      etk_editable_text_set(entry->editable_object, text);
+   else 
+   {
+      text_tmp = !text || entry->text_limit == 0 ? strdup(text) : 
strndup(text, entry->text_limit);
+      etk_editable_text_set(entry->editable_object, text_tmp);
+      free(text_tmp);
+   }
 
    etk_signal_emit(ETK_ENTRY_TEXT_CHANGED_SIGNAL, ETK_OBJECT(entry));
 }
@@ -159,6 +166,37 @@
       return etk_editable_text_get(entry->editable_object);
 }
 
+
+/**
+ * @brief Set the text limit of the entry
+ * @param entry an entry
+ * @param limit the limit of text length, 0 means no limit
+ */
+void etk_entry_text_limit_set(Etk_Entry *entry, int limit) 
+{
+   if (!entry) 
+      return;
+   if (limit >= 0)
+   {
+      entry->text_limit = limit;
+      return;
+   }
+   entry->text_limit = 0;
+   return;
+}
+
+/**
+ * @brief Get the text limit of the entry
+ * @param entry an entry
+ * @return Returns the limit of text entry, 0 means no limit. 
+ */ 
+int etk_entry_text_limit_get(Etk_Entry *entry) 
+{
+   if (!entry)
+      return -1;
+   return entry->text_limit;
+}
+
 /**
  * @brief Clears the text of the entry
  * @param entry the entry to clear
@@ -375,6 +413,7 @@
    entry->imf_ee_handler_commit = NULL;
    entry->imf_ee_handler_delete = NULL;
    entry->text = NULL;
+   entry->text_limit=0;
 
    entry->internal_entry = etk_widget_new(ETK_WIDGET_TYPE, 
"repeat-mouse-events", ETK_TRUE,
          "theme-group", "entry", "theme-parent", entry, "parent", entry, 
"internal", ETK_TRUE, NULL);
@@ -562,6 +601,7 @@
    Evas *evas;
    const char *ctx_id;
    const Ecore_IMF_Context_Info *ctx_info;
+   char *text_tmp;
 
    if (!(internal_entry = ETK_WIDGET(object)) || !(evas = 
etk_widget_toplevel_evas_get(internal_entry)))
       return ETK_TRUE;
@@ -609,7 +649,14 @@
 
    etk_editable_theme_set(entry->editable_object, 
etk_widget_theme_file_get(internal_entry),
          etk_widget_theme_group_get(internal_entry));
-   etk_editable_text_set(entry->editable_object, entry->text);
+   if (entry->text_limit==0) 
+      etk_editable_text_set(entry->editable_object, entry->text);
+   else 
+   {
+      text_tmp = entry->text ? strndup(entry->text, entry->text_limit): NULL; 
+      etk_editable_text_set(entry->editable_object, text_tmp);
+      free(text_tmp);
+   }
    etk_editable_password_mode_set(entry->editable_object, 
entry->password_mode);
 
    if (!etk_widget_is_focused(ETK_WIDGET(entry)))
@@ -665,6 +712,7 @@
 {
    Etk_Entry *entry;
    const char *text;
+   char *text_tmp;
 
    if (!(entry = ETK_ENTRY(etk_object_data_get(object, "_Etk_Entry::Entry"))))
       return ETK_TRUE;
@@ -689,7 +737,12 @@
 
    free(entry->text);
    if ((text = etk_editable_text_get(entry->editable_object)))
-      entry->text = strdup(text);
+   { 
+      if (entry->text_limit==0)
+         entry->text = strdup(text);
+      else 
+         entry->text = strndup(text, entry->text_limit);
+   }
    else
       entry->text = NULL;
 
@@ -823,7 +876,9 @@
    {
       if (selecting)
          changed |= etk_editable_delete(editable, start_pos, end_pos);
-      changed |= etk_editable_insert(editable, start_pos, event->string);
+      if (!entry->text_limit || 
+            (etk_editable_text_length_get(editable) + strlen(event->string)) 
<= entry->text_limit)
+         changed |= etk_editable_insert(editable, start_pos, event->string);
    }
    else
       stop_signal = ETK_FALSE;
@@ -1187,7 +1242,9 @@
 
       if (selecting)
          changed |= etk_editable_delete(editable, start_pos, end_pos);
-      changed |= etk_editable_insert(editable, start_pos, text);
+      if (!entry->text_limit || 
+            etk_editable_text_length_get(editable) + strlen(text) <= 
entry->text_limit)
+         changed |= etk_editable_insert(editable, start_pos, text);
 
       if (changed)
          etk_signal_emit(ETK_ENTRY_TEXT_CHANGED_SIGNAL, ETK_OBJECT(entry));
@@ -1286,7 +1343,9 @@
 
    if (selecting)
       changed |= etk_editable_delete(editable, start_pos, end_pos);
-   changed |= etk_editable_insert(editable, start_pos, ev->str);
+   if (!entry->text_limit ||
+         etk_editable_text_length_get(editable) + strlen(ev->str) <= 
entry->text_limit)
+      changed |= etk_editable_insert(editable, start_pos, ev->str);
 
    if (changed)
       etk_signal_emit(ETK_ENTRY_TEXT_CHANGED_SIGNAL, ETK_OBJECT(entry));
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_entry.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- etk_entry.h 12 Dec 2007 11:23:43 -0000      1.21
+++ etk_entry.h 5 May 2008 13:47:04 -0000       1.22
@@ -55,6 +55,7 @@
    Ecore_IMF_Context *imf_context;
 
    char *text;
+   int text_limit;
 
    Etk_Color highlight_color;
    int image_interspace;
@@ -75,6 +76,8 @@
 
 void        etk_entry_text_set(Etk_Entry *entry, const char *text);
 const char *etk_entry_text_get(Etk_Entry *entry);
+void        etk_entry_text_limit_set(Etk_Entry *entry, int limit);
+int         etk_entry_text_limit_get(Etk_Entry *entry);
 void        etk_entry_clear(Etk_Entry *entry);
 void        etk_entry_image_set(Etk_Entry *entry, Etk_Entry_Image_Position 
position, Etk_Image *image);
 Etk_Image  *etk_entry_image_get(Etk_Entry *entry, Etk_Entry_Image_Position 
position);
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_scrolled_view.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -3 -r1.35 -r1.36
--- etk_scrolled_view.c 20 Apr 2008 18:34:09 -0000      1.35
+++ etk_scrolled_view.c 5 May 2008 13:47:04 -0000       1.36
@@ -716,6 +716,8 @@
       drag->mouse_down = ETK_TRUE;
       drag->timestamp = ecore_time_get(); 
       drag->old_timestamp = 0.0f;
+      drag->Vx=0;
+      drag->Vy=0;
       drag->position = event->widget;
       drag->bar_position.x = hscrollbar_range->value;
       drag->bar_position.y = vscrollbar_range->value;
@@ -767,8 +769,8 @@
       {
          drag->old_timestamp = drag->timestamp;
          drag->timestamp = ecore_time_get();
-         drag->Vx = (hscrollbar_range->value - drag->bar_position.x) / 
delta_time;
-         drag->Vy = (vscrollbar_range->value - drag->bar_position.y) / 
delta_time;
+         drag->Vx = (drag->Vx + (hscrollbar_range->value - 
drag->bar_position.x) / delta_time) / 2;
+         drag->Vy = (drag->Vy + (vscrollbar_range->value - 
drag->bar_position.y) / delta_time) / 2;
          drag->bar_position.x = hscrollbar_range->value;
          drag->bar_position.y = vscrollbar_range->value;
       }
@@ -803,6 +805,14 @@
    if (drag->scroll_flag) 
    {
       drag->timestamp = ecore_time_get();
+      int max_speed = ETK_SCROLLED_VIEW_DRAG_DAMPING_MAGIC*5;
+      drag->Vx = drag->Vx > 0 ?  
+         drag->Vx > max_speed ?  max_speed : drag->Vx : 
+         drag->Vx < -max_speed ? -max_speed : drag->Vx;
+      drag->Vy = drag->Vy > 0 ?  
+         drag->Vy > max_speed ?  max_speed : drag->Vy : 
+         drag->Vy < -max_speed ? -max_speed : drag->Vy;
+
       ecore_animator_add(&_etk_scrolled_view_motive_bounce, scrolled_view);
       return ETK_TRUE;
    }



-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to