[WM_ROT] Fixed floating mode window rotation bug that window doesn't send ROTATION_DO...
[platform/core/uifw/e17.git] / src / bin / e_canvas.c
1 #include "e.h"
2
3 /* local subsystem functions */
4 static Eina_Bool _e_canvas_cb_flush(void *data);
5
6 /* local subsystem globals */
7 static Eina_List *_e_canvases = NULL;
8 static Ecore_Poller *_e_canvas_cache_flush_poller = NULL;
9
10 /* externally accessible functions */
11 EAPI void
12 e_canvas_add(Ecore_Evas *ee)
13 {
14    Evas *e;
15
16    _e_canvases = eina_list_prepend(_e_canvases, ee);
17    e = ecore_evas_get(ee);
18    evas_image_cache_set(e, e_config->image_cache * 1024);
19    evas_font_cache_set(e, e_config->font_cache * 1024);
20    e_path_evas_append(path_fonts, e);
21    if (e_config->font_hinting == 0)
22      {
23         if (evas_font_hinting_can_hint(e, EVAS_FONT_HINTING_BYTECODE))
24           evas_font_hinting_set(e, EVAS_FONT_HINTING_BYTECODE);
25         else if (evas_font_hinting_can_hint(e, EVAS_FONT_HINTING_AUTO))
26           evas_font_hinting_set(e, EVAS_FONT_HINTING_AUTO);
27         else
28           evas_font_hinting_set(e, EVAS_FONT_HINTING_NONE);
29      }
30    else if (e_config->font_hinting == 1)
31      {
32         if (evas_font_hinting_can_hint(e, EVAS_FONT_HINTING_AUTO))
33           evas_font_hinting_set(e, EVAS_FONT_HINTING_AUTO);
34         else
35           evas_font_hinting_set(e, EVAS_FONT_HINTING_NONE);
36      }
37    else if (e_config->font_hinting == 2)
38      evas_font_hinting_set(e, EVAS_FONT_HINTING_NONE);
39 }
40
41 EAPI void
42 e_canvas_del(Ecore_Evas *ee)
43 {
44    _e_canvases = eina_list_remove(_e_canvases, ee);
45 }
46
47 EAPI void
48 e_canvas_recache(void)
49 {
50    Eina_List *l;
51    Ecore_Evas *ee;
52
53    EINA_LIST_FOREACH(_e_canvases, l, ee)
54      {
55         Evas *e;
56
57         e = ecore_evas_get(ee);
58         evas_image_cache_set(e, e_config->image_cache * 1024);
59         evas_font_cache_set(e, e_config->font_cache * 1024);
60      }
61    edje_file_cache_set(e_config->edje_cache);
62    edje_collection_cache_set(e_config->edje_collection_cache);
63    if (_e_canvas_cache_flush_poller)
64      {
65         ecore_poller_del(_e_canvas_cache_flush_poller);
66         _e_canvas_cache_flush_poller = NULL;
67      }
68    if (e_config->cache_flush_poll_interval > 0)
69      {
70         _e_canvas_cache_flush_poller =
71           ecore_poller_add(ECORE_POLLER_CORE,
72                            e_config->cache_flush_poll_interval,
73                            _e_canvas_cb_flush, NULL);
74      }
75 }
76
77 EAPI void
78 e_canvas_cache_flush(void)
79 {
80    Eina_List *l;
81    Ecore_Evas *ee;
82
83    EINA_LIST_FOREACH(_e_canvases, l, ee)
84      {
85         Evas *e;
86
87         e = ecore_evas_get(ee);
88         evas_image_cache_flush(e);
89         evas_font_cache_flush(e);
90      }
91    edje_file_cache_flush();
92    edje_collection_cache_flush();
93 }
94
95 EAPI void
96 e_canvas_cache_reload(void)
97 {
98    Eina_List *l;
99    Ecore_Evas *ee;
100
101    EINA_LIST_FOREACH(_e_canvases, l, ee)
102      {
103         Evas *e;
104
105         e = ecore_evas_get(ee);
106         evas_image_cache_reload(e);
107      }
108 }
109
110 EAPI void
111 e_canvas_idle_flush(void)
112 {
113    Eina_List *l;
114    Ecore_Evas *ee;
115
116    EINA_LIST_FOREACH(_e_canvases, l, ee)
117      {
118         Evas *e;
119
120         e = ecore_evas_get(ee);
121         evas_render_idle_flush(e);
122      }
123 }
124
125 EAPI void
126 e_canvas_rehint(void)
127 {
128    Eina_List *l;
129    Ecore_Evas *ee;
130
131    EINA_LIST_FOREACH(_e_canvases, l, ee)
132      {
133         Evas *e;
134
135         e = ecore_evas_get(ee);
136         if (e_config->font_hinting == 0)
137           evas_font_hinting_set(e, EVAS_FONT_HINTING_BYTECODE);
138         else if (e_config->font_hinting == 1)
139           evas_font_hinting_set(e, EVAS_FONT_HINTING_AUTO);
140         else if (e_config->font_hinting == 2)
141           evas_font_hinting_set(e, EVAS_FONT_HINTING_NONE);
142      }
143 }
144
145 EAPI Ecore_Evas *
146 e_canvas_new(Ecore_X_Window win, int x, int y, int w, int h,
147              int direct_resize, int override, Ecore_X_Window *win_ret)
148 {
149    Ecore_Evas *ee;
150
151    ee = ecore_evas_software_x11_new(NULL, win, x, y, w, h);
152    if (ee)
153      {
154         ecore_evas_override_set(ee, override);
155         if (direct_resize) ecore_evas_software_x11_direct_resize_set(ee, 1);
156         if (win_ret) *win_ret = ecore_evas_software_x11_window_get(ee);
157      }
158    else
159      EINA_LOG_ERR("Impossible to build any Ecore_Evas window !!");
160    return ee;
161 }
162
163 /* local subsystem functions */
164 static Eina_Bool
165 _e_canvas_cb_flush(void *data __UNUSED__)
166 {
167    e_canvas_cache_flush();
168    return ECORE_CALLBACK_RENEW;
169 }
170