efl

Форк
0
154 строки · 4.0 Кб
1
#include <assert.h>
2
#include "private.h"
3

4
typedef struct _Elm_Params_Thumb
5
{
6
   Elm_Params base;
7
   const char *animate;
8
} Elm_Params_Thumb;
9

10
static const char* choices[] = { "loop", "start", "stop", NULL };
11

12
static Elm_Thumb_Animation_Setting
13
_anim_setting_get(const char *anim_str)
14
{
15
   unsigned int i;
16

17
   assert(sizeof(choices)/sizeof(choices[0]) == ELM_THUMB_ANIMATION_LAST + 1);
18

19
   for (i = 0; i < ELM_THUMB_ANIMATION_LAST; i++)
20
     {
21
        if (!strcmp(anim_str, choices[i]))
22
          return i;
23
     }
24
   return ELM_THUMB_ANIMATION_LAST;
25
}
26

27
static void
28
external_thumb_state_set(void *data EINA_UNUSED, Evas_Object *obj,
29
                         const void *from_params, const void *to_params,
30
                         float pos EINA_UNUSED)
31
{
32
   const Elm_Params_Thumb *p;
33

34
   if (to_params) p = to_params;
35
   else if (from_params) p = from_params;
36
   else return;
37

38
   if (p->animate)
39
     {
40
        Elm_Thumb_Animation_Setting set = _anim_setting_get(p->animate);
41
        if (set != ELM_THUMB_ANIMATION_LAST)
42
          elm_thumb_animate_set(obj, set);
43
     }
44
}
45

46
static Eina_Bool
47
external_thumb_param_set(void *data EINA_UNUSED, Evas_Object *obj,
48
                         const Edje_External_Param *param)
49
{
50
   if (!strcmp(param->name, "animate"))
51
     {
52
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
53
          {
54
             Elm_Thumb_Animation_Setting set = _anim_setting_get(param->s);
55
             if (set == ELM_THUMB_ANIMATION_LAST) return EINA_FALSE;
56
             elm_thumb_animate_set(obj, set);
57
             return EINA_TRUE;
58
          }
59
     }
60

61
   ERR("unknown parameter '%s' of type '%s'",
62
       param->name, edje_external_param_type_str(param->type));
63

64
   return EINA_FALSE;
65
}
66

67
static Eina_Bool
68
external_thumb_param_get(void *data EINA_UNUSED, const Evas_Object *obj,
69
                         Edje_External_Param *param)
70
{
71
   if (!strcmp(param->name, "animate"))
72
     {
73
        if (param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE)
74
          {
75
             Elm_Thumb_Animation_Setting anim_set = elm_thumb_animate_get(obj);
76

77
             if (anim_set == ELM_THUMB_ANIMATION_LAST)
78
               return EINA_FALSE;
79

80
             param->s = choices[anim_set];
81
             return EINA_TRUE;
82
          }
83
     }
84

85
   ERR("unknown parameter '%s' of type '%s'",
86
       param->name, edje_external_param_type_str(param->type));
87

88
   return EINA_FALSE;
89
}
90

91
static void *
92
external_thumb_params_parse(void *data EINA_UNUSED,
93
                            Evas_Object *obj EINA_UNUSED,
94
                            const Eina_List *params)
95
{
96
   Elm_Params_Thumb *mem;
97
   Edje_External_Param *param;
98
   const Eina_List *l;
99

100
   mem = calloc(1, sizeof(Elm_Params_Thumb));
101
   if (!mem)
102
     return NULL;
103

104
   EINA_LIST_FOREACH(params, l, param)
105
     {
106
        if (!strcmp(param->name, "animate"))
107
          mem->animate = eina_stringshare_add(param->s);
108
     }
109

110
   return mem;
111
}
112

113
static Evas_Object *external_thumb_content_get(void *data EINA_UNUSED,
114
                                               const Evas_Object *obj EINA_UNUSED,
115
                                               const char *content EINA_UNUSED)
116
{
117
   ERR("No content.");
118
   return NULL;
119
}
120

121
static void
122
external_thumb_params_free(void *params)
123
{
124
   Elm_Params_Thumb *mem = params;
125

126
   if (mem->animate)
127
     eina_stringshare_del(mem->animate);
128
   free(mem);
129
}
130

131
static Edje_External_Param_Info external_thumb_params[] =
132
  {
133
    DEFINE_EXTERNAL_COMMON_PARAMS,
134
    EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("animate", "loop", choices),
135
    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
136
  };
137

138
static Evas_Object *
139
external_thumb_add(void *data EINA_UNUSED, Evas *evas EINA_UNUSED,
140
                   Evas_Object *edje, const Eina_List *params EINA_UNUSED,
141
                   const char *part_name)
142
{
143
   Evas_Object *parent, *obj;
144
   external_elm_init();
145
   parent = elm_widget_parent_widget_get(edje);
146
   if (!parent) parent = edje;
147
   elm_need_ethumb(); /* extra command needed */
148
   obj = elm_thumb_add(parent);
149
   external_signals_proxy(obj, edje, part_name);
150
   return obj;
151
}
152

153
DEFINE_EXTERNAL_ICON_ADD(thumb, "thumb");
154
DEFINE_EXTERNAL_TYPE(thumb, "Thumb");
155

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.