prototyped edje_part scriptability and outsourced scriptability code to script.c
[mozilla_edje_plugin.git] / src / plugin.c
blob57dc6ffa9212843ba9f9098a0bca57f3069c7ec1
1 #include "plugin.h"
3 /*
4 * Implementations of plugin API functions
5 */
7 void
8 mep_asynccall (void *data)
10 PluginInstance *pi = (PluginInstance *) data;
11 ecore_main_loop_iterate ();
12 if (!pi->done)
14 usleep (1000); // max 100 fps
15 NPN_PluginThreadAsyncCall (pi->instance, mep_asynccall, (void *) pi);
19 int
20 mep_animator (void *data)
22 PluginInstance *pi = (PluginInstance *) data;
23 evas_render (pi->evas);
24 /* needed for windowless mode
25 NPRect rect;
26 rect.top = 0;
27 rect.left = 0;
28 rect.bottom = 400;
29 rect.right = 400;
30 NPN_InvalidateRect (pi->instance, &rect);
32 NPN_ForceRedraw (pi->instance);
34 return 1;
38 void
39 mep_event_handler (Widget xtwidget, void *data, XEvent *xevent, Boolean *b)
41 PluginInstance *pi = (PluginInstance *) data;
42 Evas *evas = pi->evas;
43 XEvent ev = *xevent;
45 //printf ("event type: %d\n", ev.type);
47 if (ev.type > 0)
48 switch (ev.type) {
49 case ButtonPress:
50 evas_event_feed_mouse_move(evas, ev.xbutton.x, ev.xbutton.y, 0, NULL);
51 evas_event_feed_mouse_down(evas, ev.xbutton.button, EVAS_BUTTON_NONE, 0, NULL);
52 break;
53 case ButtonRelease:
54 evas_event_feed_mouse_move(evas, ev.xbutton.x, ev.xbutton.y, 0, NULL);
55 evas_event_feed_mouse_up(evas, ev.xbutton.button, EVAS_BUTTON_NONE, 0, NULL);
56 break;
57 case MotionNotify:
58 evas_event_feed_mouse_move(evas, ev.xmotion.x, ev.xmotion.y, 0, NULL);
59 break;
60 case Expose:
61 evas_damage_rectangle_add(evas,
62 ev.xexpose.x,
63 ev.xexpose.y,
64 ev.xexpose.width,
65 ev.xexpose.height);
66 break;
67 case ConfigureNotify:
68 evas_output_size_set(evas,
69 ev.xconfigure.width,
70 ev.xconfigure.height);
71 break;
72 case EnterNotify:
73 evas_object_focus_set (pi->edj, 1);
74 //trigger (pi);
75 break;
76 case LeaveNotify:
77 evas_object_focus_set (pi->edj, 0);
78 //trigger (pi);
79 break;
80 case ClientMessage: // 33
81 if (ev.xclient.message_type == pi->atom)
82 ecore_main_loop_iterate ();
83 break;
84 default:
85 break;
89 NPObject *
90 mep_getscriptableobject (PluginInstance *pi)
92 if (!pi->scriptable_object)
94 pi->scriptable_object = NPN_CreateObject (
95 pi->instance,
96 &mep_edje_class);
99 if (pi->scriptable_object)
101 NPN_RetainObject (pi->scriptable_object);
104 return pi->scriptable_object;
107 void
108 mep_cb_ui_play (void *data, Evas_Object *edj, const char *emission, const char *source)
110 PluginInstance *pi = (PluginInstance *) data;
111 if (!edje_object_play_get (pi->edj)) // if paused
113 edje_object_play_set (pi->edj, 1);
114 //edje_object_animation_set (pi->edj, 1);
118 void
119 mep_cb_ui_pause (void *data, Evas_Object *edj, const char *emission, const char *source)
121 PluginInstance *pi = (PluginInstance *) data;
122 if (edje_object_play_get (pi->edj)) // if playing
124 edje_object_play_set (pi->edj, 0);
125 //edje_object_animation_set (pi->edj, 0);
129 void
130 mep_cb_ui_save (void *data, Evas_Object *edj, const char *emission, const char *source)
132 PluginInstance *pi = (PluginInstance *) data;
133 NPN_GetURL (pi->instance, pi->data, "_parent");
136 void
137 mep_cb_ui_config (void *data, Evas_Object *edj, const char *emission, const char *source)
139 PluginInstance *pi = (PluginInstance *) data;
140 // TODO
143 void
144 mep_cb_all (void *data, Evas_Object *edj, const char *emission, const char *source)
146 printf ("edje callback: %s %s\n", emission, source);
149 void
150 mep_configure (PluginInstance *pi)
152 char config_path[256];
153 sprintf (config_path, "%s/%s", CONFIGDIR, "config.edb");
154 ecore_config_file_load (config_path);
155 pi->config_theme = strdup (ecore_config_theme_get ("theme"));
156 pi->config_engine = strdup (ecore_config_string_get ("engine"));
157 pi->config_fps = ecore_config_int_get ("fps");