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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs