parent
ec0863e6ed
commit
281bbd90fd
64 changed files with 524 additions and 4831 deletions
@ -1,20 +0,0 @@ |
||||
#ifndef __ENGINE_DIRECT3D_H__ |
||||
#define __ENGINE_DIRECT3D_H__ |
||||
|
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
|
||||
Eina_Bool engine_direct3d_args(const char *engine, int width, int height); |
||||
void engine_direct3d_loop(void); |
||||
void engine_direct3d_shutdown(void); |
||||
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
|
||||
#endif /* __ENGINE_DIRECT3D_H__ */ |
@ -1,277 +0,0 @@ |
||||
#include "main.h" |
||||
|
||||
#include <Evas_Engine_DirectFB.h> |
||||
|
||||
static IDirectFB *_dfb; |
||||
static IDirectFBEventBuffer *_window_event; |
||||
static IDirectFBEventBuffer *_input_event; |
||||
static IDirectFBDisplayLayer *_layer; |
||||
static DFBResult _err; |
||||
static IDirectFBWindow *_dfb_window; |
||||
static IDirectFBSurface *_dfb_surface; |
||||
|
||||
#define DBG(...) do {} while (0) |
||||
//#define DBG(...) fprintf(stderr, __VA_ARGS__)
|
||||
|
||||
#define DFBCHECK(x...) \ |
||||
{ \
|
||||
_err = x; \
|
||||
if (_err != DFB_OK) { \
|
||||
fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ ); \
|
||||
DirectFBErrorFatal( #x, _err ); \
|
||||
} \
|
||||
} |
||||
|
||||
Eina_Bool |
||||
engine_directfb_args(const char *engine, int width, int height) |
||||
{ |
||||
Evas_Engine_Info_DirectFB *einfo; |
||||
DFBWindowDescription desc; |
||||
int i; |
||||
|
||||
evas_output_method_set(evas, evas_render_method_lookup("directfb")); |
||||
einfo = (Evas_Engine_Info_DirectFB *)evas_engine_info_get(evas); |
||||
if (!einfo) |
||||
{ |
||||
printf("Evas does not support the DirectFB Engine\n"); |
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
DFBCHECK(DirectFBInit(NULL, NULL)); |
||||
DFBCHECK(DirectFBCreate(&_dfb)); |
||||
DFBCHECK(_dfb->GetDisplayLayer(_dfb, DLID_PRIMARY, &_layer)); |
||||
DFBCHECK(_dfb->CreateEventBuffer(_dfb, &_window_event)); |
||||
DFBCHECK(_dfb->CreateInputEventBuffer(_dfb, DICAPS_ALL, DFB_FALSE, &_input_event)); |
||||
|
||||
memset(&desc, 0, sizeof(DFBWindowDescription)); |
||||
desc.flags = (DWDESC_POSX | DWDESC_POSY | DWDESC_WIDTH | DWDESC_HEIGHT | DWDESC_PIXELFORMAT); |
||||
desc.posx = 0; |
||||
desc.posy = 0; |
||||
desc.width = width; |
||||
desc.height = height; |
||||
desc.pixelformat = DSPF_ARGB; |
||||
|
||||
DFBCHECK(_layer->CreateWindow(_layer, &desc, &_dfb_window)); |
||||
DFBCHECK(_dfb_window->AttachEventBuffer(_dfb_window, _window_event)); |
||||
DFBCHECK(_dfb_window->SetOptions(_dfb_window, DWOP_NONE)); |
||||
DFBCHECK(_dfb_window->SetOpacity(_dfb_window, 0xFF)); |
||||
DFBCHECK(_dfb_window->GetSurface(_dfb_window, &_dfb_surface)); |
||||
DFBCHECK(_dfb_surface->SetPorterDuff(_dfb_surface, DSPD_SRC_OVER)); |
||||
|
||||
einfo->info.dfb = _dfb; |
||||
einfo->info.surface = _dfb_surface; |
||||
if (!evas_engine_info_set(evas, (Evas_Engine_Info *) einfo)) |
||||
{ |
||||
printf("Evas can not setup the informations of the DirectFB Engine\n"); |
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
return EINA_TRUE; |
||||
} |
||||
|
||||
static void |
||||
engine_directfb_quit(void) |
||||
{ |
||||
DFBCHECK(_input_event->Release(_input_event)); |
||||
DFBCHECK(_window_event->Release(_window_event)); |
||||
DFBCHECK(_dfb_surface->Release(_dfb_surface)); |
||||
DFBCHECK(_dfb_window->Release(_dfb_window)); |
||||
DFBCHECK(_layer->Release(_layer)); |
||||
DFBCHECK(_dfb->Release(_dfb)); |
||||
|
||||
evas_engine_info_set(evas, NULL); |
||||
|
||||
engine_abort(); |
||||
} |
||||
|
||||
static const char * |
||||
key_string(DFBInputDeviceKeySymbol sym) |
||||
{ |
||||
switch (sym) |
||||
{ |
||||
case DIKS_ESCAPE: |
||||
{ |
||||
static const char k[] = "Escape"; |
||||
return k; |
||||
} |
||||
case DIKS_RETURN: |
||||
{ |
||||
static const char k[] = "Return"; |
||||
return k; |
||||
} |
||||
case DIKS_CURSOR_LEFT: |
||||
{ |
||||
static const char k[] = "Left"; |
||||
return k; |
||||
} |
||||
case DIKS_CURSOR_RIGHT: |
||||
{ |
||||
static const char k[] = "Right"; |
||||
return k; |
||||
} |
||||
default: |
||||
{ |
||||
static char k[2]; |
||||
k[0] = (char)sym; |
||||
k[1] = 0; |
||||
return k; |
||||
} |
||||
} |
||||
} |
||||
|
||||
static void |
||||
engine_directfb_event_window(const DFBWindowEvent *ev) |
||||
{ |
||||
DBG("===> Window Event (type=%#10x, window=%d) <===\n", |
||||
ev->type, ev->window_id); |
||||
|
||||
if (ev->type & DWET_POSITION) |
||||
{ |
||||
DBG("\tDWET_POSITION %d, %d\n", ev->x, ev->y); |
||||
} |
||||
|
||||
if (ev->type & DWET_SIZE) |
||||
{ |
||||
DBG("\tDWET_SIZE %dx%d\n", ev->w, ev->h); |
||||
evas_output_viewport_set(evas, 0, 0, |
||||
ev->w, ev->h); |
||||
evas_output_size_set(evas, ev->w, ev->h); |
||||
win_w = ev->w; |
||||
win_h = ev->h; |
||||
} |
||||
|
||||
if (ev->type & DWET_CLOSE) |
||||
{ |
||||
DBG("\tDWET_CLOSE\n"); |
||||
engine_directfb_quit(); |
||||
} |
||||
|
||||
if (ev->type & DWET_DESTROYED) |
||||
{ |
||||
DBG("\tDWET_DESTROYED\n"); |
||||
engine_directfb_quit(); |
||||
} |
||||
|
||||
if (ev->type & DWET_GOTFOCUS) |
||||
{ |
||||
DBG("\tDWET_GOTFOCUS\n"); |
||||
} |
||||
|
||||
if (ev->type & DWET_LOSTFOCUS) |
||||
{ |
||||
DBG("\tDWET_LOSTFOCUS\n"); |
||||
} |
||||
|
||||
if (ev->type & DWET_KEYDOWN) |
||||
{ |
||||
const char *k; |
||||
|
||||
k = key_string(ev->key_symbol); |
||||
DBG("\tDWET_KEYDOWN key_symbol=%s\n", k); |
||||
|
||||
if (k) |
||||
evas_event_feed_key_down(evas, k, k, NULL, NULL, 0, NULL); |
||||
} |
||||
|
||||
if (ev->type & DWET_KEYUP) |
||||
{ |
||||
const char *k; |
||||
|
||||
k = key_string(ev->key_symbol); |
||||
DBG("\tDWET_KEYUP key_symbol=%s\n", k); |
||||
|
||||
if (k) |
||||
evas_event_feed_key_up(evas, k, k, NULL, NULL, 0, NULL); |
||||
} |
||||
|
||||
if (ev->type & DWET_BUTTONDOWN) |
||||
{ |
||||
DBG("\tDWET_BUTTONDOWN pos=(%d, %d) cur_pos=(%d, %d) " |
||||
"button=%#x buttons=%#x\n", |
||||
ev->x, ev->y, ev->cx, ev->cy, ev->button, ev->buttons); |
||||
evas_event_feed_mouse_move(evas, ev->cx, ev->cy, 0, NULL); |
||||
evas_event_feed_mouse_down(evas, ev->button, EVAS_BUTTON_NONE, 0, NULL); |
||||
} |
||||
|
||||
if (ev->type & DWET_BUTTONUP) |
||||
{ |
||||
DBG("\tDWET_BUTTONUP pos=(%d, %d) cur_pos=(%d, %d) " |
||||
"button=%#x buttons=%#x\n", |
||||
ev->x, ev->y, ev->cx, ev->cy, ev->button, ev->buttons); |
||||
evas_event_feed_mouse_move(evas, ev->cx, ev->cy, 0, NULL); |
||||
evas_event_feed_mouse_up(evas, ev->button, EVAS_BUTTON_NONE, 0, NULL); |
||||
} |
||||
|
||||
if (ev->type & DWET_MOTION) |
||||
{ |
||||
DBG("\tDWET_MOTION pos=(%d, %d) cur_pos=(%d, %d) buttons=%#x\n", |
||||
ev->x, ev->y, ev->cx, ev->cy, ev->buttons); |
||||
/* Mouse Motion Compression [tm] */ |
||||
_layer->GetCursorPosition( _layer, (int*)&ev->x, (int*)&ev->y ); |
||||
|
||||
evas_event_feed_mouse_move(evas, ev->x, ev->y, 0, NULL); |
||||
} |
||||
|
||||
if (ev->type & DWET_LEAVE) |
||||
{ |
||||
DBG("\tDWET_LEAVE pos=(%d, %d) cur_pos=(%d, %d)\n", |
||||
ev->x, ev->y, ev->cx, ev->cy); |
||||
evas_event_feed_mouse_out(evas, 0, NULL); |
||||
} |
||||
|
||||
if (ev->type & DWET_ENTER) |
||||
{ |
||||
DBG("\tDWET_ENTER pos=(%d, %d) cur_pos=(%d, %d)\n", |
||||
ev->x, ev->y, ev->cx, ev->cy); |
||||
evas_event_feed_mouse_in(evas, 0, NULL); |
||||
} |
||||
|
||||
if (ev->type & DWET_WHEEL) |
||||
{ |
||||
DBG("\tDWET_WHEEL step=%d\n", ev->step); |
||||
} |
||||
|
||||
|
||||
DBG("\n"); |
||||
} |
||||
|
||||
void |
||||
engine_directfb_loop(void) |
||||
{ |
||||
DFBEvent ev; |
||||
|
||||
while ((_input_event->GetEvent(_input_event, &ev) == DFB_OK) || |
||||
(_window_event->GetEvent(_window_event, &ev) == DFB_OK)) |
||||
{ |
||||
DBG("got dfb input event %d\n", ev.clazz); |
||||
switch (ev.clazz) |
||||
{ |
||||
case DFEC_NONE: |
||||
DBG("No event?\n"); |
||||
break; |
||||
case DFEC_INPUT: |
||||
DBG("Input\n"); |
||||
break; |
||||
case DFEC_WINDOW: |
||||
engine_directfb_event_window((const DFBWindowEvent *)&ev); |
||||
break; |
||||
case DFEC_USER: |
||||
DBG("User\n"); |
||||
break; |
||||
case DFEC_UNIVERSAL: |
||||
DBG("Universal\n"); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
void |
||||
engine_directfb_shutdown(void) |
||||
{ |
||||
DFBCHECK(_input_event->Release(_input_event)); |
||||
DFBCHECK(_window_event->Release(_window_event)); |
||||
DFBCHECK(_dfb_surface->Release(_dfb_surface)); |
||||
DFBCHECK(_dfb_window->Release(_dfb_window)); |
||||
DFBCHECK(_layer->Release(_layer)); |
||||
DFBCHECK(_dfb->Release(_dfb)); |
||||
} |
@ -1,8 +0,0 @@ |
||||
#ifndef ENGINE_DIRECTFB_H |
||||
#define ENGINE_DIRECTFB_H |
||||
|
||||
Eina_Bool engine_directfb_args(const char *engine, int width, int height); |
||||
void engine_directfb_loop(void); |
||||
void engine_directfb_shutdown(void); |
||||
|
||||
#endif |
@ -1,49 +0,0 @@ |
||||
#include "main.h" |
||||
|
||||
#include <Evas_Engine_Drm.h> |
||||
|
||||
Eina_Bool
|
||||
engine_drm_args(const char *engine __UNUSED__, int width __UNUSED__, int height __UNUSED__) |
||||
{ |
||||
Evas_Engine_Info_Drm *einfo; |
||||
|
||||
evas_output_method_set(evas, evas_render_method_lookup("drm")); |
||||
einfo = (Evas_Engine_Info_Drm *)evas_engine_info_get(evas); |
||||
if (!einfo) |
||||
{ |
||||
printf("Evas does not support the Drm Engine\n"); |
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
/* setup drm props in such a way so that evas itself will handle doing
|
||||
* the drm card init, etc, etc because we are not using ecore_evas here */ |
||||
einfo->info.fd = -1; |
||||
einfo->info.tty = -1; |
||||
einfo->info.output = -1; |
||||
einfo->info.plane = -1; |
||||
einfo->info.rotation = 0; |
||||
einfo->info.depth = 32; |
||||
einfo->info.destination_alpha = EINA_FALSE; |
||||
einfo->info.vsync = EINA_FALSE; |
||||
einfo->info.use_hw_accel = EINA_TRUE; |
||||
|
||||
if (!evas_engine_info_set(evas, (Evas_Engine_Info *)einfo)) |
||||
{ |
||||
printf("Evas could not setup the information for the Drm Engine\n"); |
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
return EINA_TRUE; |
||||
} |
||||
|
||||
void
|
||||
engine_drm_loop(void) |
||||
{ |
||||
|
||||
} |
||||
|
||||
void
|
||||
engine_drm_shutdown(void) |
||||
{ |
||||
|
||||
} |
@ -1,8 +0,0 @@ |
||||
#ifndef ENGINE_DRM_H |
||||
#define ENGINE_DRM_H |
||||
|
||||
Eina_Bool engine_drm_args(const char *engine, int width, int height); |
||||
void engine_drm_loop(void); |
||||
void engine_drm_shutdown(void); |
||||
|
||||
#endif |
@ -1,42 +0,0 @@ |
||||
#include "main.h" |
||||
|
||||
#include <Evas_Engine_FB.h> |
||||
|
||||
Eina_Bool |
||||
engine_fb_args(const char *engine __UNUSED__, int width __UNUSED__, int height __UNUSED__) |
||||
{ |
||||
Evas_Engine_Info_FB *einfo; |
||||
|
||||
evas_output_method_set(evas, evas_render_method_lookup("fb")); |
||||
einfo = (Evas_Engine_Info_FB *)evas_engine_info_get(evas); |
||||
if (!einfo) |
||||
{ |
||||
printf("Evas does not support the FB Engine\n"); |
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
einfo->info.virtual_terminal = 0; |
||||
einfo->info.device_number = 0; |
||||
einfo->info.device_number = 0; |
||||
einfo->info.refresh = 0; |
||||
einfo->info.rotation = 0; |
||||
if (!evas_engine_info_set(evas, (Evas_Engine_Info *) einfo)) |
||||
{ |
||||
printf("Evas can not setup the informations of the FB Engine\n"); |
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
return EINA_TRUE; |
||||
} |
||||
|
||||
void |
||||
engine_fb_loop(void) |
||||
{ |
||||
return; |
||||
} |
||||
|
||||
void |
||||
engine_fb_shutdown(void) |
||||
{ |
||||
return; |
||||
} |
@ -1,8 +0,0 @@ |
||||
#ifndef ENGINE_FB_H |
||||
#define ENGINE_FB_H |
||||
|
||||
Eina_Bool engine_fb_args(const char *engine, int width, int height); |
||||
void engine_fb_loop(void); |
||||
void engine_fb_shutdown(void); |
||||
|
||||
#endif |
@ -1,8 +0,0 @@ |
||||
#ifndef ENGINE_GL_COCOA_H |
||||
#define ENGINE_GL_COCOA_H |
||||
|
||||
int engine_gl_cocoa_args(int argc, char **argv); |
||||
void engine_gl_cocoa_loop(void); |
||||
void engine_gl_cocoa_shutdown(void); |
||||
|
||||
#endif |
@ -1,174 +0,0 @@ |
||||
#include <assert.h> |
||||
#include "main.h" |
||||
|
||||
#include <Evas_Engine_GL_SDL.h> |
||||
|
||||
Eina_Bool |
||||
engine_gl_sdl_args(const char *engine, int width, int height) |
||||
{ |
||||
Evas_Engine_Info_GL_SDL *einfo; |
||||
int i; |
||||
|
||||
evas_output_method_set(evas, evas_render_method_lookup("gl_sdl")); |
||||
|
||||
einfo = (Evas_Engine_Info_GL_SDL *) evas_engine_info_get(evas); |
||||
if (!einfo) |
||||
{ |
||||
printf("Evas wasn't build with GL SDL backend.\n"); |
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
/* the following is specific to the engine */ |
||||
einfo->flags.fullscreen = fullscreen; |
||||
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 EINA_FALSE; |
||||
} |
||||
|
||||
return EINA_TRUE; |
||||
} |
||||
|
||||
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.button, 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.button, 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) |
||||
{ |
||||
} |
@ -1,8 +0,0 @@ |
||||
#ifndef ENGINE_GL_SDL_H |
||||
#define ENGINE_GL_SDL_H |
||||
|
||||
Eina_Bool engine_gl_sdl_args(const char *engine, int width, int height); |
||||
void engine_gl_sdl_loop(void); |
||||
void engine_gl_sdl_shutdown(void); |
||||
|
||||
#endif |
@ -1,223 +0,0 @@ |
||||
#include "main.h" |
||||
|
||||
#include <X11/Xlib.h> |
||||
#include <X11/XKBlib.h> |
||||
#include <X11/Xutil.h> |
||||
#include <X11/Xatom.h> |
||||
#include <Evas_Engine_GL_X11.h> |
||||
|
||||
static Display *disp = NULL; |
||||
static Window win = 0; |
||||
static int first_expose = 0; |
||||
|
||||
Eina_Bool |
||||
engine_gl_x11_args(const char *engine __UNUSED__, int width, int height) |
||||
{ |
||||
XSetWindowAttributes attr; |
||||
XClassHint chint; |
||||
XSizeHints szhints; |
||||
Evas_Engine_Info_GL_X11 *einfo; |
||||
|
||||
disp = XOpenDisplay(NULL); |
||||
if (!disp) return EINA_FALSE; |
||||
|
||||
evas_output_method_set(evas, evas_render_method_lookup("gl_x11")); |
||||
einfo = (Evas_Engine_Info_GL_X11 *)evas_engine_info_get(evas); |
||||
if (!einfo) |
||||
{ |
||||
printf("Evas does not support the OpenGL X11 Engine\n"); |
||||
goto close_display; |
||||
} |
||||
|
||||
einfo->info.display = disp; |
||||
einfo->info.screen = DefaultScreen(einfo->info.display); |
||||
einfo->info.visual = einfo->func.best_visual_get(einfo); |
||||
einfo->info.colormap = einfo->func.best_colormap_get(einfo); |
||||
einfo->info.depth = einfo->func.best_depth_get(einfo); |
||||
attr.backing_store = NotUseful; |
||||
attr.colormap = einfo->info.colormap; |
||||
attr.border_pixel = 0; |
||||
attr.background_pixmap = None; |
||||
attr.event_mask = |
||||
ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | |
||||
StructureNotifyMask | EnterWindowMask | LeaveWindowMask | |
||||
KeyPressMask | KeyReleaseMask; |
||||
attr.bit_gravity = ForgetGravity; |
||||
win = XCreateWindow(disp, DefaultRootWindow(disp), |
||||
0, 0, width, height, 0, |
||||
einfo->info.depth, InputOutput, |
||||
einfo->info.visual, |
||||
CWBackingStore | CWColormap | |
||||
CWBackPixmap | CWBorderPixel | |
||||
CWBitGravity | CWEventMask, |
||||
&attr); |
||||
if (!win) |
||||
goto close_display; |
||||
|
||||
einfo->info.drawable = win; |
||||
if (!evas_engine_info_set(evas, (Evas_Engine_Info *) einfo)) |
||||
{ |
||||
printf("Evas can not setup the informations of the OpenGL X11 Engine\n"); |
||||
goto destroy_window; |
||||
} |
||||
|
||||
if (fullscreen) |
||||
{ |
||||
Atom prop = XInternAtom(disp, "_NET_WM_STATE", False); |
||||
Atom state = XInternAtom(disp, "_NET_WM_STATE_FULLSCREEN", False); |
||||
unsigned long data = state; |
||||
XChangeProperty(disp, win, prop, XA_ATOM, 32, PropModeReplace,
|
||||
(unsigned char*) &data, 1); |
||||
} |
||||
|
||||
XStoreName(disp, win, "Expedite - Evas Test Suite"); |
||||
chint.res_name = "expedite"; |
||||
chint.res_class = "Expedite"; |
||||
XSetClassHint(disp, win, &chint); |
||||
szhints.flags = PMinSize | PMaxSize | PSize | USSize; |
||||
szhints.min_width = szhints.max_width = width; |
||||
szhints.min_height = szhints.max_height = height; |
||||
XSetWMNormalHints(disp, win, &szhints); |
||||
XMapWindow(disp, win); |
||||
XSync(disp, False); |
||||
while (!first_expose) |
||||
engine_gl_x11_loop(); |
||||
return EINA_TRUE; |
||||
|
||||
destroy_window: |
||||
XDestroyWindow(disp, win); |
||||
close_display: |
||||
XCloseDisplay(disp); |
||||
|
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
void |
||||
engine_gl_x11_loop(void) |
||||
{ |
||||
XEvent ev; |
||||
KeySym ks; |
||||
char *kstr; |
||||
|
||||
again: |
||||
if (!XCheckMaskEvent(disp, |
||||
ExposureMask | |
||||
StructureNotifyMask | |
||||
KeyPressMask | |
||||
KeyReleaseMask | |
||||
ButtonPressMask | |
||||
ButtonReleaseMask | |
||||
PointerMotionMask | |
||||
EnterWindowMask | |
||||
LeaveWindowMask, &ev)) |
||||
return; |
||||
switch (ev.type) |
||||
{ |
||||
case ButtonPress: |
||||
evas_event_feed_mouse_move(evas, ev.xbutton.x, ev.xbutton.y, 0, NULL); |
||||
evas_event_feed_mouse_down(evas, ev.xbutton.button, EVAS_BUTTON_NONE, 0, NULL); |
||||
break; |
||||
case ButtonRelease: |
||||
evas_event_feed_mouse_move(evas, ev.xbutton.x, ev.xbutton.y, 0, NULL); |
||||
evas_event_feed_mouse_up(evas, ev.xbutton.button, EVAS_BUTTON_NONE, 0, NULL); |
||||
break; |
||||
case MotionNotify: |
||||
evas_event_feed_mouse_move(evas, ev.xmotion.x, ev.xmotion.y, 0, NULL); |
||||
break; |
||||
case Expose: |
||||
first_expose = 1; |
||||
evas_damage_rectangle_add(evas, |
||||
ev.xexpose.x, |
||||
ev.xexpose.y, |
||||
ev.xexpose.width, |
||||
ev.xexpose.height); |
||||
break; |
||||
case ConfigureNotify: |
||||
evas_output_viewport_set(evas, 0, 0, |
||||
ev.xconfigure.width, |
||||
ev.xconfigure.height); |
||||
evas_output_size_set(evas, |
||||
ev.xconfigure.width, |
||||
ev.xconfigure.height); |
||||
win_w = ev.xconfigure.width; |
||||
win_h = ev.xconfigure.height; |
||||
break; |
||||
case EnterNotify: |
||||
evas_event_feed_mouse_in(evas, 0, NULL); |
||||
break; |
||||
case LeaveNotify: |
||||
evas_event_feed_mouse_out(evas, 0, NULL); |
||||
break; |
||||
case KeyPress: |
||||
ks = XkbKeycodeToKeysym(ev.xkey.display, ev.xkey.keycode, 0, 0); |
||||
kstr = XKeysymToString(ks); |
||||
if (kstr) |
||||
{ |
||||
if ((!strcmp(kstr, "Shift_L")) || |
||||
(!strcmp(kstr, "Shift_R"))) |
||||
evas_key_modifier_on(evas, "Shift"); |
||||
if ((!strcmp(kstr, "Control_L")) || |
||||
(!strcmp(kstr, "Control_R"))) |
||||
evas_key_modifier_on(evas, "Control"); |
||||
if ((!strcmp(kstr, "Alt_L")) || |
||||
(!strcmp(kstr, "Alt_R"))) |
||||
evas_key_modifier_on(evas, "Alt"); |
||||
if ((!strcmp(kstr, "Super_L")) || |
||||
(!strcmp(kstr, "Super_R"))) |
||||
evas_key_modifier_on(evas, "Super"); |
||||
if (!strcmp(kstr, "Caps_Lock")) |
||||
{ |
||||
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"); |
||||
} |
||||
if (!strcmp(kstr, "Num_Lock")) |
||||
{ |
||||
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"); |
||||
} |
||||
if (!strcmp(kstr, "Scroll_Lock")) |
||||
{ |
||||
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"); |
||||
} |
||||
if (kstr) evas_event_feed_key_down(evas, kstr, kstr, NULL, NULL, 0, NULL); |
||||
} |
||||
break; |
||||
case KeyRelease: |
||||
ks = XkbKeycodeToKeysym(ev.xkey.display, ev.xkey.keycode, 0, 0); |
||||
kstr = XKeysymToString(ks); |
||||
if (kstr) |
||||
{ |
||||
if ((!strcmp(kstr, "Shift_L")) || |
||||
(!strcmp(kstr, "Shift_R"))) |
||||
evas_key_modifier_off(evas, "Shift"); |
||||
if ((!strcmp(kstr, "Control_L")) || |
||||
(!strcmp(kstr, "Control_R"))) |
||||
evas_key_modifier_off(evas, "Control"); |
||||
if ((!strcmp(kstr, "Alt_L")) || |
||||
(!strcmp(kstr, "Alt_R"))) |
||||
evas_key_modifier_off(evas, "Alt"); |
||||
if ((!strcmp(kstr, "Super_L")) || |
||||
(!strcmp(kstr, "Super_R"))) |
||||
evas_key_modifier_off(evas, "Super"); |
||||
evas_event_feed_key_up(evas, kstr, kstr, NULL, NULL, 0, NULL); |
||||
} |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
goto again; |
||||
} |
||||
|
||||
void |
||||
engine_gl_x11_shutdown(void) |
||||
{ |
||||
XDestroyWindow(disp, win); |
||||
XCloseDisplay(disp); |
||||
} |
@ -1,8 +0,0 @@ |
||||
#ifndef ENGINE_GL_X11_H |
||||
#define ENGINE_GL_X11_H |
||||
|
||||
Eina_Bool engine_gl_x11_args(const char *engine, int width, int height); |
||||
void engine_gl_x11_loop(void); |
||||
void engine_gl_x11_shutdown(void); |
||||
|
||||
#endif |
@ -1,284 +0,0 @@ |
||||
#include "main.h" |
||||
|
||||
#include <Evas_Engine_PSL1GHT.h> |
||||
#include <io/mouse.h> |
||||
#include <io/kb.h> |
||||
|
||||
static int window_width = 0; |
||||
static int window_height = 0; |
||||
|
||||
Eina_Bool |
||||
engine_psl1ght_args(const char *engine, int width, int height) |
||||
{ |
||||
Evas_Engine_Info_PSL1GHT *einfo; |
||||
|
||||
evas_output_method_set(evas, evas_render_method_lookup("psl1ght")); |
||||
einfo = (Evas_Engine_Info_PSL1GHT *)evas_engine_info_get(evas); |
||||
if (!einfo) |
||||
{ |
||||
printf("Evas does not support the PSL1GHT Engine\n"); |
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
if (!evas_engine_info_set(evas, (Evas_Engine_Info *)einfo)) |
||||
{ |
||||
printf("Evas can not setup the informations of the PSL1GHT Engine\n"); |
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
window_width = width; |
||||
window_height = height; |
||||
ioMouseInit(1); |
||||
ioKbInit(1); |
||||
return EINA_TRUE; |
||||
} |
||||
|
||||
void |
||||
engine_psl1ght_loop(void) |
||||
{ |
||||
mouseInfo mouseinfo; |
||||
static int mouse_connected = FALSE; |
||||
static u8 mouse_buttons = 0; |
||||
static int mouse_x = 0; |
||||
static int mouse_y = 0; |
||||
KbInfo kbInfo; |
||||
static int keyboard_connected = FALSE; |
||||
static KbLed keyboard_leds = {{0}}; |
||||
static KbMkey keyboard_mods = {{0}}; |
||||
static u16 keyboard_old_key = 0; |
||||
int i; |
||||
|
||||
/* Check mouse events */ |
||||
ioMouseGetInfo(&mouseinfo); |
||||
|
||||
if (mouseinfo.status[0] == 1 && !mouse_connected) // Connected
|
||||
{ |
||||
mouse_connected = TRUE; |
||||
mouse_buttons = 0; |
||||
|
||||
// Old events in the queue are discarded
|
||||
ioMouseClearBuf(0); |
||||
} |
||||
else if (mouseinfo.status[0] != 1 && mouse_connected) // Disconnected
|
||||
{ |
||||
mouse_connected = FALSE; |
||||
mouse_buttons = 0; |
||||
} |
||||
|
||||
if (mouse_connected) |
||||
{ |
||||
mouseDataList datalist; |
||||
|
||||
ioMouseGetDataList(0, &datalist); |
||||
|
||||
for (i = 0; i < datalist.count; i++) { |
||||
u8 old_left = mouse_buttons & 1; |
||||
u8 new_left = datalist.list[i].buttons & 1; |
||||
u8 old_right = mouse_buttons & 2; |
||||
u8 new_right = datalist.list[i].buttons & 2; |
||||
u8 old_middle = mouse_buttons & 4; |
||||
u8 new_middle = datalist.list[i].buttons & 4; |
||||
|
||||
mouse_x += datalist.list[i].x_axis; |
||||
mouse_y += datalist.list[i].y_axis; |
||||
if (mouse_x < 0) mouse_x = 0; |
||||
if (mouse_y < 0) mouse_y = 0; |
||||
if (mouse_x > window_width) mouse_x = window_width; |
||||
if (mouse_y > window_height) mouse_x = window_height; |
||||
|
||||
evas_event_feed_mouse_move(evas, mouse_x, mouse_y, 0, NULL); |
||||
|
||||
if (old_left != new_left) |
||||
{ |
||||
if (new_left) |
||||
evas_event_feed_mouse_down(evas, 1, EVAS_BUTTON_NONE, 0, NULL); |
||||
else |
||||
evas_event_feed_mouse_up(evas, 1, EVAS_BUTTON_NONE, 0, NULL); |
||||
} |
||||
if (old_right != new_right) |
||||
{ |
||||
if (new_right) |
||||
evas_event_feed_mouse_down(evas, 3, EVAS_BUTTON_NONE, 0, NULL); |
||||
else |
||||
evas_event_feed_mouse_up(evas, 3, EVAS_BUTTON_NONE, 0, NULL); |
||||
} |
||||
if (old_middle != new_middle) |
||||
{ |
||||
if (new_middle) |
||||
evas_event_feed_mouse_down(evas, 2, EVAS_BUTTON_NONE, 0, NULL); |
||||
else |
||||
evas_event_feed_mouse_up(evas, 2, EVAS_BUTTON_NONE, 0, NULL); |
||||
} |
||||
mouse_buttons = datalist.list[i].buttons; |
||||
} |
||||
} |
||||
|
||||
/* Check keyboard events */ |
||||
ioKbGetInfo(&kbInfo); |
||||
|
||||
if (kbInfo.status[0] == 1 && !keyboard_connected) |
||||
{ |
||||
/* Connected */ |
||||
keyboard_connected = true; |
||||
|
||||
// Old events in the queue are discarded
|
||||
ioKbClearBuf(0); |
||||
keyboard_leds._KbLedU.leds = 0; |
||||
keyboard_mods._KbMkeyU.mkeys = 0; |
||||
keyboard_old_key = 0; |
||||
|
||||
// Set raw keyboard code types to get scan codes
|
||||
ioKbSetCodeType(0, KB_CODETYPE_ASCII); |
||||
ioKbSetReadMode(0, KB_RMODE_INPUTCHAR); |
||||
} |
||||
else if (kbInfo.status[0] != 1 && keyboard_connected) |
||||
{ |
||||
/* Disconnected keyboard */ |
||||
keyboard_connected = FALSE; |
||||
} |
||||
|
||||
if (keyboard_connected) |
||||
{ |
||||
KbData Keys; |
||||
|
||||
// Read data from the keyboard buffer
|
||||
if (ioKbRead(0, &Keys) == 0 && Keys.nb_keycode > 0) |
||||
{ |
||||
if (Keys.mkey._KbMkeyU._KbMkeyS.l_shift != |
||||
keyboard_mods._KbMkeyU._KbMkeyS.l_shift || |
||||
Keys.mkey._KbMkeyU._KbMkeyS.r_shift != |
||||
keyboard_mods._KbMkeyU._KbMkeyS.r_shift) |
||||
{ |
||||
if (Keys.mkey._KbMkeyU._KbMkeyS.r_shift || |
||||
Keys.mkey._KbMkeyU._KbMkeyS.l_shift) |
||||
evas_key_modifier_on(evas, "Shift"); |
||||
else |
||||
evas_key_modifier_off(evas, "Shift"); |
||||
} |
||||
if (Keys.mkey._KbMkeyU._KbMkeyS.l_ctrl != |
||||
keyboard_mods._KbMkeyU._KbMkeyS.l_ctrl || |
||||
Keys.mkey._KbMkeyU._KbMkeyS.r_ctrl != |
||||
keyboard_mods._KbMkeyU._KbMkeyS.r_ctrl) |
||||
{ |
||||
if (Keys.mkey._KbMkeyU._KbMkeyS.r_ctrl || |
||||
|