3 #include "smsc_debug.h"
4 #include "smsc_widget.h"
6 #include "smsc_smart.h"
9 #define _evas_smart_smsc_type "Evas_Smart_Smsc"
12 #define _evas_smart_smsc_type "Evas_Smart_Smsc"
13 #define EVT_CHILDREN_NUMBER_CHANGED "children,changed"
16 static const Evas_Smart_Cb_Description _smart_callbacks[] =
18 {EVT_CHILDREN_NUMBER_CHANGED, "i"},
23 struct _Evas_Smart_Smsc_Data {
24 Evas_Object_Smart_Clipped_Data base;
25 struct smsc_widget widget;
26 //Evas_Object *children[2];
30 struct size_px widget_size;
35 struct paper_size_pts paper_size;
36 enum page_orientation orientation;
38 struct page_scale scale;
43 typedef struct _Evas_Smart_Smsc_Data Evas_Smart_Smsc_Data;
46 #define EVAS_SMART_SMSC_DATA_GET(o, ptr) \
47 Evas_Smart_Smsc_Data *ptr = evas_object_smart_data_get(o)
49 #define EVAS_SMART_SMSC_DATA_GET_OR_RETURN(o, ptr) \
50 EVAS_SMART_SMSC_DATA_GET(o, ptr); \
52 fprintf(stderr, "No widget data for object %p (%s)!", \
53 o, evas_object_type_get(o)); \
59 #define EVAS_SMART_SMSC_DATA_GET_OR_RETURN_VAL(o, ptr, val) \
60 EVAS_SMART_SMSC_DATA_GET(o, ptr); \
62 fprintf(stderr, "No widget data for object %p (%s)!", \
63 o, evas_object_type_get(o)); \
69 EVAS_SMART_SUBCLASS_NEW(_evas_smart_smsc_type, _evas_smart_smsc,
70 Evas_Smart_Class, Evas_Smart_Class,
71 evas_object_smart_clipped_class_get, _smart_callbacks);
74 static void _evas_smart_smsc_smart_add(Evas_Object *o)
77 EVAS_SMART_DATA_ALLOC(o, Evas_Smart_Smsc_Data);
79 /*priv->bg = evas_object_rectangle_add(evas_object_evas_get(o));
80 evas_object_color_set(priv->bg, 0, 255, 0, 255);
81 evas_object_smart_member_add(priv->bg, o);
83 priv->rect = evas_object_rectangle_add(evas_object_evas_get(o));
84 evas_object_color_set(priv->rect, 255, 0, 0, 255);
85 evas_object_smart_member_add(priv->rect, o);*/
87 init_smsc_widget(&(priv->widget), o);
89 memset(&(priv->widget_size), 0, sizeof(priv->widget_size));
91 priv->is_process_file = 0;
94 memset(&(priv->paper_size), 0, sizeof(priv->paper_size));
95 priv->orientation = PAGE_ORIENTATION_PORTRAIT;
97 memset(&(priv->scale), 0, sizeof(priv->scale));
98 priv->is_grayscale = 0;
100 _evas_smart_smsc_parent_sc->add(o);
105 static void _evas_smart_smsc_smart_del(Evas_Object *o)
107 //EVAS_SMART_SMSC_DATA_GET(o, priv);
109 /* remove childrens */
110 /* TODO: destroy smsc_widget */
112 _evas_smart_smsc_parent_sc->del(o);
116 static void _evas_smart_smsc_smart_show(Evas_Object *o)
118 EVAS_SMART_SMSC_DATA_GET(o, priv);
119 /* show smsc_widget */
120 show_smsc_widget(&(priv->widget));
121 _evas_smart_smsc_parent_sc->show(o);
125 static void _evas_smart_smsc_smart_hide(Evas_Object *o)
127 EVAS_SMART_SMSC_DATA_GET(o, priv);
129 /* TODO: save hide state for smsc_widget */
130 hide_smsc_widget(&(priv->widget));
131 _evas_smart_smsc_parent_sc->hide(o);
135 static void _evas_smart_smsc_smart_move(Evas_Object *o,
136 Evas_Coord x, Evas_Coord y)
138 /* TODO: correct move event usage (provide picture moving animation) */
144 static void _evas_smart_smsc_smart_resize(Evas_Object *o,
145 Evas_Coord w, Evas_Coord h)
149 evas_object_geometry_get(o, NULL, NULL, &ow, &oh);
150 if ((ow == w) && (oh == h)) {
155 evas_object_smart_changed(o);
160 void evas_smart_smsc_free_process_file_args(Evas_Smart_Smsc_Data *priv)
162 SMSC_RET_IF(NULL == priv, "priv is NULL");
163 SMSC_IF_FREE_MEM(priv->fname);
164 SMSC_IF_FREE_MEM(priv->ppd);
165 SMSC_IF_FREE_MEM(priv->paper_size.name);
167 priv->is_process_file = 0;
171 static void _evas_smart_smsc_smart_calculate(Evas_Object *o)
174 Evas_Coord x, y, w, h;
176 EVAS_SMART_SMSC_DATA_GET_OR_RETURN(o, priv);
177 evas_object_geometry_get(o, &x, &y, &w, &h);
178 SMSC_DEBUG("Geometry: (%d, %d) : (%d, %d)",
181 /* change children sizes */
182 /*evas_object_resize(priv->rect, w - 10, h - 10);
183 evas_object_move(priv->rect, x + 5, y + 5);
184 evas_object_resize(priv->bg, w, h);
185 evas_object_move(priv->bg, 0, 0);*/
187 priv->widget_size.x = w;
188 priv->widget_size.y = h;
191 /* set widget offset */
192 priv->widget.off_x = x;
193 priv->widget.off_y = y;
195 clear_smsc_widget(&(priv->widget));
197 /* request to preview_engine for recalculation */
198 if (priv->is_process_file)
199 process_preview_engine_file(&(priv->widget.engine), priv->fname,
200 priv->ppd, &(priv->paper_size),
201 &(priv->widget_size), priv->orientation,
202 priv->n_up, &(priv->scale), priv->is_grayscale);
208 /* set smart interface */
209 static void _evas_smart_smsc_smart_set_user(Evas_Smart_Class *sc)
212 sc->add = _evas_smart_smsc_smart_add;
213 sc->del = _evas_smart_smsc_smart_del;
214 sc->show = _evas_smart_smsc_smart_show;
215 sc->hide = _evas_smart_smsc_smart_hide;
216 sc->move = _evas_smart_smsc_smart_move;
218 sc->resize = _evas_smart_smsc_smart_resize;
219 sc->calculate = _evas_smart_smsc_smart_calculate;
224 Evas_Object *evas_smart_smsc_add(Evas *evas)
228 res = evas_object_smart_add(evas, _evas_smart_smsc_smart_class_new());
234 int evas_smart_smsc_set_file(Evas_Object *o, const char *fname,
235 const char *ppd, const struct paper_size_pts *paper_size,
236 enum page_orientation orientation, int n_up,
237 const struct page_scale *scale, int is_grayscale)
241 EVAS_SMART_SMSC_DATA_GET_OR_RETURN_VAL(o, priv, -1);
243 /* save configuration for future usage */
244 evas_smart_smsc_free_process_file_args(priv);
246 priv->fname = strdup(fname);
247 priv->ppd = strdup(ppd);
248 priv->paper_size = *paper_size;
249 priv->paper_size.name = strdup(paper_size->name);
250 priv->orientation = orientation;
252 priv->scale = *scale;
253 priv->is_grayscale = is_grayscale;
255 priv->is_process_file = 1;
257 /* TODO: clear widget */
259 /* request preview_engine for recalculation */
260 if (priv->is_ready) {
261 clear_smsc_widget(&(priv->widget));
262 res = process_preview_engine_file(&(priv->widget.engine),
263 priv->fname, priv->ppd, &(priv->paper_size),
264 &(priv->widget_size), priv->orientation,
265 priv->n_up, &(priv->scale), priv->is_grayscale);
273 int evas_smart_smsc_set_layout(Evas_Object *o, Evas_Object *layout)
275 EVAS_SMART_SMSC_DATA_GET_OR_RETURN_VAL(o, priv, -1);
276 smsc_widget_set_layout(&(priv->widget), layout);