4 #include "ecore_private.h"
6 #include "Ecore_Data.h"
7 #include "Ecore_Sdl_Keys.h"
9 EAPI int ECORE_SDL_EVENT_KEY_DOWN = 0;
10 EAPI int ECORE_SDL_EVENT_KEY_UP = 0;
11 EAPI int ECORE_SDL_EVENT_MOUSE_BUTTON_DOWN = 0;
12 EAPI int ECORE_SDL_EVENT_MOUSE_BUTTON_UP = 0;
13 EAPI int ECORE_SDL_EVENT_MOUSE_MOVE = 0;
14 EAPI int ECORE_SDL_EVENT_MOUSE_WHEEL = 0;
15 EAPI int ECORE_SDL_EVENT_GOT_FOCUS = 0;
16 EAPI int ECORE_SDL_EVENT_LOST_FOCUS = 0;
17 EAPI int ECORE_SDL_EVENT_RESIZE = 0;
18 EAPI int ECORE_SDL_EVENT_EXPOSE = 0;
20 static int _ecore_sdl_init_count = 0;
23 * @defgroup Ecore_Sdl_Library_Group Framebuffer Library Functions
25 * Functions used to set up and shut down the Ecore_Framebuffer functions.
29 * Sets up the Ecore_Sdl library.
30 * @param name device target name
31 * @return @c 0 on failure. Otherwise, the number of times the library has
32 * been initialised without being shut down.
33 * @ingroup Ecore_SDL_Library_Group
36 ecore_sdl_init(const char *name __UNUSED__)
38 if(!_ecore_sdl_init_count)
40 ECORE_SDL_EVENT_KEY_DOWN = ecore_event_type_new();
41 ECORE_SDL_EVENT_KEY_UP = ecore_event_type_new();
42 ECORE_SDL_EVENT_MOUSE_BUTTON_DOWN = ecore_event_type_new();
43 ECORE_SDL_EVENT_MOUSE_BUTTON_UP = ecore_event_type_new();
44 ECORE_SDL_EVENT_MOUSE_MOVE = ecore_event_type_new();
45 ECORE_SDL_EVENT_MOUSE_WHEEL = ecore_event_type_new();
46 ECORE_SDL_EVENT_GOT_FOCUS = ecore_event_type_new();
47 ECORE_SDL_EVENT_LOST_FOCUS = ecore_event_type_new();
48 ECORE_SDL_EVENT_RESIZE = ecore_event_type_new();
49 ECORE_SDL_EVENT_EXPOSE = ecore_event_type_new();
51 return ++_ecore_sdl_init_count;
55 * Shuts down the Ecore_Sdl library.
56 * @return @c The number of times the system has been initialised without
58 * @ingroup Ecore_SDL_Library_Group
61 ecore_sdl_shutdown(void)
63 _ecore_sdl_init_count--;
64 return _ecore_sdl_init_count;
68 ecore_sdl_feed_events(void)
73 while(SDL_PollEvent(&event))
75 time = (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff);
80 Ecore_Sdl_Event_Mouse_Move *ev;
82 ev = malloc(sizeof(Ecore_Sdl_Event_Mouse_Move));
83 ev->x = event.motion.x;
84 ev->y = event.motion.y;
87 ecore_event_add(ECORE_SDL_EVENT_MOUSE_MOVE, ev, NULL, NULL);
90 case SDL_MOUSEBUTTONDOWN:
92 if (event.button.button == SDL_BUTTON_WHEELUP ||
93 event.button.button == SDL_BUTTON_WHEELDOWN)
95 Ecore_Sdl_Event_Mouse_Wheel *ev;
97 ev = malloc(sizeof (Ecore_Sdl_Event_Mouse_Wheel));
98 ev->x = event.button.x;
99 ev->y = event.button.y;
101 ev->wheel = event.button.button == SDL_BUTTON_WHEELDOWN ? -1 : 1;
104 ecore_event_add(ECORE_SDL_EVENT_MOUSE_WHEEL, ev, NULL, NULL);
108 Ecore_Sdl_Event_Mouse_Button_Down *ev;
110 ev = malloc(sizeof (Ecore_Sdl_Event_Mouse_Button_Down));
111 ev->x = event.button.x;
112 ev->y = event.button.y;
113 ev->button = event.button.button;
114 ev->double_click = 0;
115 ev->triple_click = 0;
118 ecore_event_add(ECORE_SDL_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL);
122 case SDL_MOUSEBUTTONUP:
124 Ecore_Sdl_Event_Mouse_Button_Up *ev;
126 ev = malloc(sizeof (Ecore_Sdl_Event_Mouse_Button_Up));
127 ev->x = event.button.x;
128 ev->y = event.button.y;
129 ev->button = event.button.button;
130 ev->double_click = 0;
131 ev->triple_click = 0;
134 ecore_event_add(ECORE_SDL_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL);
137 case SDL_VIDEORESIZE:
139 Ecore_Sdl_Event_Video_Resize *ev;
141 ev = malloc(sizeof (Ecore_Sdl_Event_Video_Resize));
142 ev->w = event.resize.w;
143 ev->h = event.resize.h;
145 ecore_event_add(ECORE_SDL_EVENT_RESIZE, ev, NULL, NULL);
148 case SDL_VIDEOEXPOSE:
149 ecore_event_add(ECORE_SDL_EVENT_EXPOSE, NULL, NULL, NULL);
152 ecore_main_loop_quit();
157 Ecore_Sdl_Event_Key_Down *ev;
160 ev = malloc(sizeof (Ecore_Sdl_Event_Key_Down));
163 for (i = 0; i < sizeof (keystable) / sizeof (struct _ecore_sdl_keys_s); ++i)
164 if (keystable[i].code == event.key.keysym.sym)
166 ev->keyname = keystable[i].name;
167 ev->keycompose = keystable[i].compose;
169 ecore_event_add(ECORE_SDL_EVENT_KEY_DOWN, ev, NULL, NULL);
178 Ecore_Sdl_Event_Key_Up *ev;
181 ev = malloc(sizeof (Ecore_Sdl_Event_Key_Up));
184 for (i = 0; i < sizeof (keystable) / sizeof (struct _ecore_sdl_keys_s); ++i)
185 if (keystable[i].code == event.key.keysym.sym)
187 ev->keyname = keystable[i].name;
188 ev->keycompose = keystable[i].compose;
190 ecore_event_add(ECORE_SDL_EVENT_KEY_UP, ev, NULL, NULL);
197 case SDL_ACTIVEEVENT:
198 /* FIXME: Focus gain. */
202 case SDL_JOYAXISMOTION:
203 case SDL_JOYBALLMOTION:
204 case SDL_JOYHATMOTION:
205 case SDL_JOYBUTTONDOWN:
206 case SDL_JOYBUTTONUP: