Actually add the gl_sdl engine files
authorxcomputerman <xcomputerman@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 29 Jan 2010 05:59:14 +0000 (05:59 +0000)
committerxcomputerman <xcomputerman@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 29 Jan 2010 05:59:14 +0000 (05:59 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/expedite@45689 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/bin/engine_gl_sdl.c [new file with mode: 0644]
src/bin/engine_gl_sdl.h [new file with mode: 0644]

diff --git a/src/bin/engine_gl_sdl.c b/src/bin/engine_gl_sdl.c
new file mode 100644 (file)
index 0000000..549e1e5
--- /dev/null
@@ -0,0 +1,181 @@
+#include <assert.h>
+#include "main.h"
+
+#include <Evas_Engine_GL_SDL.h>
+
+int
+engine_gl_sdl_args(int argc, char **argv)
+{
+   Evas_Engine_Info_GL_SDL *einfo;
+   int                  i;
+   int                  ok = 0;
+
+   for (i = 1; i < argc; ++i)
+     {
+        if ((!strcmp(argv[i], "-e") && (i < (argc - 1))))
+          {
+             i++;
+             if (!strcmp(argv[i], "gl-sdl")) ok = 1;
+          }
+     }
+   if (!ok) return 0;
+
+   if (ok == 1)
+   evas_output_method_set(evas, evas_render_method_lookup("gl_sdl"));
+
+   einfo = (Evas_Engine_Info_GL_SDL *) evas_engine_info_get(evas);
+
+   /* the following is specific to the engine */
+   einfo->flags.fullscreen = 0;
+   einfo->flags.noframe = 0;
+
+   if (!evas_engine_info_set(evas, (Evas_Engine_Info *) einfo))
+     {
+       printf("Evas could not initialize the GL SDL Engine\n");
+        return 0;
+     }
+
+   return 1;
+}
+
+void
+engine_gl_sdl_loop(void)
+{
+   SDL_Event event;
+
+   while(SDL_PollEvent(&event))
+     {
+        switch(event.type)
+          {
+          case SDL_MOUSEMOTION:
+             evas_event_feed_mouse_move(evas, event.motion.x, event.motion.y, 0, NULL);
+             break;
+          case SDL_MOUSEBUTTONDOWN:
+             evas_event_feed_mouse_move(evas, event.button.x, event.button.y, 0, NULL);
+             evas_event_feed_mouse_down(evas, event.button.state, EVAS_BUTTON_NONE, 0, NULL);
+             break;
+          case SDL_MOUSEBUTTONUP:
+             evas_event_feed_mouse_move(evas, event.button.x, event.button.y, 0, NULL);
+             evas_event_feed_mouse_up(evas, event.button.state, EVAS_BUTTON_NONE, 0, NULL);
+             break;
+          case SDL_VIDEORESIZE:
+             evas_output_viewport_set(evas, 0, 0,
+                                      event.resize.w, event.resize.w);
+             evas_output_size_set(evas, event.resize.w, event.resize.w);
+             evas_output_size_get(evas, &win_w, &win_h);
+             break;
+          case SDL_VIDEOEXPOSE:
+             evas_output_size_get(evas, &win_w, &win_h);
+             evas_damage_rectangle_add(evas, 0, 0, win_w, win_h);
+             break;
+          case SDL_KEYDOWN:
+             switch (event.key.keysym.sym)
+               {
+               case SDLK_LSHIFT:
+               case SDLK_RSHIFT:
+                  evas_key_modifier_on(evas, "Shift");
+                  break;
+               case SDLK_RCTRL:
+               case SDLK_LCTRL:
+                  evas_key_modifier_on(evas, "Control");
+                  break;
+               case SDLK_MENU:
+               case SDLK_RALT:
+               case SDLK_LALT:
+                  evas_key_modifier_on(evas, "Alt");
+                  break;
+               case SDLK_LSUPER:
+               case SDLK_RSUPER:
+                  evas_key_modifier_on(evas, "Super");
+                  break;
+               case SDLK_CAPSLOCK:
+                  if (evas_key_lock_is_set(evas_key_lock_get(evas), "Caps_Lock"))
+                    evas_key_lock_off(evas, "Caps_Lock");
+                  else
+                    evas_key_lock_on(evas, "Caps_Lock");
+                  break;
+               case SDLK_NUMLOCK:
+                  if (evas_key_lock_is_set(evas_key_lock_get(evas), "Num_Lock"))
+                    evas_key_lock_off(evas, "Num_Lock");
+                  else
+                    evas_key_lock_on(evas, "Num_Lock");
+                  break;
+               case SDLK_SCROLLOCK:
+                  if (evas_key_lock_is_set(evas_key_lock_get(evas), "Scroll_Lock"))
+                    evas_key_lock_off(evas, "Scroll_Lock");
+                  else
+                    evas_key_lock_on(evas, "Scroll_Lock");
+                  break;
+               case SDLK_s:
+               case SDLK_ESCAPE:
+                  evas_event_feed_key_down(evas, "Escape", "Escape", NULL, NULL, 0, NULL);
+                  break;
+               case SDLK_KP_ENTER:
+               case SDLK_RETURN:
+                  evas_event_feed_key_down(evas, "Return", "Return", NULL, NULL, 0, NULL);
+                  break;
+               case SDLK_LEFT: evas_event_feed_key_down(evas, "Left", "Left", NULL, NULL, 0, NULL); break;
+               case SDLK_RIGHT: evas_event_feed_key_down(evas, "Right", "Right", NULL, NULL, 0, NULL); break;
+               case SDLK_q:
+                  if (evas_key_lock_is_set(evas_key_lock_get(evas), "Caps_Lock"))
+                    evas_event_feed_key_down(evas, "Q", "Q", NULL, NULL, 0, NULL);
+                  else
+                    evas_event_feed_key_down(evas, "q", "q", NULL, NULL, 0, NULL);
+                  break;
+              default:
+                 break;
+               }
+             break;
+          case SDL_KEYUP:
+             switch (event.key.keysym.sym)
+               {
+               case SDLK_LSHIFT:
+               case SDLK_RSHIFT:
+                  evas_key_modifier_off(evas, "Shift");
+                  break;
+               case SDLK_RCTRL:
+               case SDLK_LCTRL:
+                  evas_key_modifier_off(evas, "Control");
+                  break;
+               case SDLK_MENU:
+               case SDLK_RALT:
+               case SDLK_LALT:
+                  evas_key_modifier_off(evas, "Alt");
+                  break;
+               case SDLK_LSUPER:
+               case SDLK_RSUPER:
+                  evas_key_modifier_off(evas, "Super");
+                  break;
+               case SDLK_ESCAPE: evas_event_feed_key_up(evas, "Escape", "Escape", NULL, NULL, 0, NULL); break;
+               case SDLK_RETURN: evas_event_feed_key_up(evas, "Return", "Return", NULL, NULL, 0, NULL); break;
+               case SDLK_LEFT: evas_event_feed_key_up(evas, "Left", "Left", NULL, NULL, 0, NULL); break;
+               case SDLK_RIGHT: evas_event_feed_key_up(evas, "Right", "Right", NULL, NULL, 0, NULL); break;
+               case SDLK_q:
+                  if (evas_key_lock_is_set(evas_key_lock_get(evas), "Caps_Lock"))
+                    evas_event_feed_key_up(evas, "Q", "Q", NULL, NULL, 0, NULL);
+                  else
+                    evas_event_feed_key_up(evas, "q", "q", NULL, NULL, 0, NULL);
+                  break;
+              default:
+                 break;
+               }
+             break;
+          case SDL_QUIT:
+          case SDL_SYSWMEVENT:
+          case SDL_USEREVENT:
+          case SDL_ACTIVEEVENT:
+          case SDL_JOYAXISMOTION:
+          case SDL_JOYBALLMOTION:
+          case SDL_JOYHATMOTION:
+          case SDL_JOYBUTTONDOWN:
+          case SDL_JOYBUTTONUP:
+          default:
+             break;
+          }
+     }
+}
+
+void
+engine_gl_sdl_shutdown(void)
+{
+}
diff --git a/src/bin/engine_gl_sdl.h b/src/bin/engine_gl_sdl.h
new file mode 100644 (file)
index 0000000..166c641
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef ENGINE_GL_SDL_H
+#define ENGINE_GL_SDL_H
+
+int  engine_gl_sdl_args(int argc, char **argv);
+void engine_gl_sdl_loop(void);
+void engine_gl_sdl_shutdown(void);
+
+#endif