summaryrefslogtreecommitdiff
path: root/src/lib/elementary/efl_ui_text_factory_fallback.c
blob: 4ee456e1e0264ba6eedbdc62c8b1840f110aca85 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifdef HAVE_CONFIG_H
# include "elementary_config.h"
#endif

#include <Elementary.h>
#include <Elementary_Cursor.h>
#include "elm_priv.h"

#define MY_CLASS EFL_UI_TEXT_FACTORY_FALLBACK_CLASS

typedef struct _Efl_Ui_Text_Factory_Fallback_Data Efl_Ui_Text_Factory_Fallback_Data;

struct _Efl_Ui_Text_Factory_Fallback_Data
{
   Efl_Canvas_Text_Factory *emoticon_factory, *image_factory;
};

EOLIAN static Eo *
_efl_ui_text_factory_fallback_efl_object_constructor(Eo *obj,
     Efl_Ui_Text_Factory_Fallback_Data *pd EINA_UNUSED)
{
   obj = efl_constructor(efl_super(obj, MY_CLASS));
   pd->image_factory = efl_add(EFL_UI_TEXT_FACTORY_IMAGES_CLASS, obj);
   pd->emoticon_factory = efl_add(EFL_UI_TEXT_FACTORY_EMOTICONS_CLASS, obj);
   return obj;
}

EOLIAN static void
_efl_ui_text_factory_fallback_efl_object_destructor(Eo *obj,
     Efl_Ui_Text_Factory_Fallback_Data *pd EINA_UNUSED)
{
   efl_del(pd->emoticon_factory);
   efl_del(pd->image_factory);
   efl_destructor(efl_super(obj, MY_CLASS));
}


EOLIAN static Efl_Canvas_Object
*_efl_ui_text_factory_fallback_efl_canvas_text_factory_create(
      Eo *obj EINA_UNUSED,
      Efl_Ui_Text_Factory_Fallback_Data *pd EINA_UNUSED,
      Efl_Canvas_Object *object,
      const char *key)
{
   Efl_Canvas_Object *o = NULL;

   // Parse the string. Can be either:
   //   1. some/name - an emoticon (load from theme)
   //   2. file:// - image file
   if (key && !strncmp(key, "file://", 7))
     {
        const char *fname = key + 7;
        o = efl_canvas_text_factory_create(pd->image_factory, object, fname);
     }
   else
     {
        o = efl_canvas_text_factory_create(pd->emoticon_factory, object, key);
     }
   return o;
}

#include "efl_ui_text_factory_fallback.eo.c"