From c2311179b3b6d0f1791d40ffd34a66d341d87cd9 Mon Sep 17 00:00:00 2001 From: bdilly Date: Fri, 27 Jan 2012 16:59:03 +0000 Subject: [PATCH] Elementary external button: add repeat stuff This patch provides a way to set autorepeat on buttons. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@67570 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/edje_externals/elm_button.c | 85 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 80 insertions(+), 5 deletions(-) diff --git a/src/edje_externals/elm_button.c b/src/edje_externals/elm_button.c index ca8455d..9d056df 100644 --- a/src/edje_externals/elm_button.c +++ b/src/edje_externals/elm_button.c @@ -5,6 +5,12 @@ typedef struct _Elm_Params_Button Elm_Params base; const char *label; Evas_Object *icon; + double autorepeat_initial; + double autorepeat_gap; + Eina_Bool autorepeat:1; + Eina_Bool autorepeat_exists:1; + Eina_Bool autorepeat_gap_exists:1; + Eina_Bool autorepeat_initial_exists:1; } Elm_Params_Button; static void @@ -20,6 +26,12 @@ external_button_state_set(void *data __UNUSED__, Evas_Object *obj, const void *f elm_object_text_set(obj, p->label); if (p->icon) elm_object_part_content_set(obj, "icon", p->icon); + if (p->autorepeat_gap_exists) + elm_button_autorepeat_gap_timeout_set(obj, p->autorepeat_gap); + if (p->autorepeat_initial_exists) + elm_button_autorepeat_initial_timeout_set(obj, p->autorepeat_initial); + if (p->autorepeat_exists) + elm_button_autorepeat_set(obj, p->autorepeat); } static Eina_Bool @@ -43,6 +55,30 @@ external_button_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_Ex return EINA_TRUE; } } + else if (!strcmp(param->name, "autorepeat_initial")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + elm_button_autorepeat_initial_timeout_set(obj, param->d); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "autorepeat_gap")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + elm_button_autorepeat_gap_timeout_set(obj, param->d); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "autorepeat")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + elm_button_autorepeat_set(obj, param->i); + return EINA_TRUE; + } + } ERR("unknown parameter '%s' of type '%s'", param->name, edje_external_param_type_str(param->type)); @@ -66,6 +102,30 @@ external_button_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_Ex /* not easy to get icon name back from live object */ return EINA_FALSE; } + else if (!strcmp(param->name, "autorepeat_initial")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + param->d = elm_button_autorepeat_initial_timeout_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "autorepeat_gap")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + param->d = elm_button_autorepeat_gap_timeout_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "autorepeat")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + param->i = elm_button_autorepeat_get(obj); + return EINA_TRUE; + } + } ERR("unknown parameter '%s' of type '%s'", param->name, edje_external_param_type_str(param->type)); @@ -88,11 +148,23 @@ external_button_params_parse(void *data __UNUSED__, Evas_Object *obj, const Eina EINA_LIST_FOREACH(params, l, param) { - if (!strcmp(param->name, "label")) - { - mem->label = eina_stringshare_add(param->s); - break; - } + if (!strcmp(param->name, "autorepeat_initial")) + { + mem->autorepeat_initial = param->d; + mem->autorepeat_initial_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "autorepeat_gap")) + { + mem->autorepeat_gap = param->d; + mem->autorepeat_gap_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "autorepeat")) + { + mem->autorepeat = !!param->i; + mem->autorepeat_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "label")) + mem->label = eina_stringshare_add(param->s); } return mem; @@ -118,6 +190,9 @@ static Edje_External_Param_Info external_button_params[] = { DEFINE_EXTERNAL_COMMON_PARAMS, EDJE_EXTERNAL_PARAM_INFO_STRING("label"), EDJE_EXTERNAL_PARAM_INFO_STRING("icon"), + EDJE_EXTERNAL_PARAM_INFO_DOUBLE("autorepeat_initial"), + EDJE_EXTERNAL_PARAM_INFO_DOUBLE("autorepeat_gap"), + EDJE_EXTERNAL_PARAM_INFO_BOOL("autorepeat"), EDJE_EXTERNAL_PARAM_INFO_SENTINEL }; -- 2.7.4