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