reorganize header files and fix minor warnings

SVN revision: 34910
This commit is contained in:
doursse 2008-06-26 05:11:16 +00:00 committed by doursse
parent a2c9599b9f
commit 6b048a4eb5
8 changed files with 1365 additions and 1827 deletions

View File

@ -2,17 +2,211 @@
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdlib.h>
#include <stdio.h> /* for printf */
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#include <windowsx.h>
#ifdef HAVE_OPENGL_GLEW
# include <GL/glew.h>
#endif /* HAVE_OPENGL_GLEW */
#include "Ecore.h"
#include "Ecore_Win32.h"
#include "ecore_win32_private.h"
/***** Global declarations *****/
HINSTANCE _ecore_win32_instance = NULL;
double _ecore_win32_double_click_time = 0.25;
double _ecore_win32_event_last_time = 0.0;
Ecore_Win32_Window *_ecore_win32_event_last_window = NULL;
static int _ecore_win32_init_count = 0;
int ECORE_WIN32_EVENT_KEY_DOWN = 0;
int ECORE_WIN32_EVENT_KEY_UP = 0;
int ECORE_WIN32_EVENT_MOUSE_BUTTON_DOWN = 0;
int ECORE_WIN32_EVENT_MOUSE_BUTTON_UP = 0;
int ECORE_WIN32_EVENT_MOUSE_MOVE = 0;
int ECORE_WIN32_EVENT_MOUSE_IN = 0;
int ECORE_WIN32_EVENT_MOUSE_OUT = 0;
int ECORE_WIN32_EVENT_MOUSE_WHEEL = 0;
int ECORE_WIN32_EVENT_WINDOW_FOCUS_IN = 0;
int ECORE_WIN32_EVENT_WINDOW_FOCUS_OUT = 0;
int ECORE_WIN32_EVENT_WINDOW_DAMAGE = 0;
int ECORE_WIN32_EVENT_WINDOW_CREATE = 0;
int ECORE_WIN32_EVENT_WINDOW_DESTROY = 0;
int ECORE_WIN32_EVENT_WINDOW_SHOW = 0;
int ECORE_WIN32_EVENT_WINDOW_HIDE = 0;
int ECORE_WIN32_EVENT_WINDOW_CONFIGURE = 0;
int ECORE_WIN32_EVENT_WINDOW_RESIZE = 0;
int ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST = 0;
/***** Private declarations *****/
static int _ecore_win32_init_count = 0;
LRESULT CALLBACK _ecore_win32_window_procedure(HWND window,
UINT message,
WPARAM window_param,
LPARAM data_param);
/***** API *****/
int
ecore_win32_init()
{
WNDCLASS wc;
if (_ecore_win32_init_count > 0)
{
_ecore_win32_init_count++;
return _ecore_win32_init_count;
}
printf (" *** ecore_win32_init\n");
_ecore_win32_instance = GetModuleHandle(NULL);
if (!_ecore_win32_instance)
return 0;
memset (&wc, 0, sizeof (WNDCLASS));
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = _ecore_win32_window_procedure;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = _ecore_win32_instance;
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
wc.lpszMenuName = NULL;
wc.lpszClassName = ECORE_WIN32_WINDOW_CLASS;
if(!RegisterClass(&wc))
{
FreeLibrary(_ecore_win32_instance);
return 0;
}
if (!ECORE_WIN32_EVENT_KEY_DOWN)
{
ECORE_WIN32_EVENT_KEY_DOWN = ecore_event_type_new();
ECORE_WIN32_EVENT_KEY_UP = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_BUTTON_DOWN = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_BUTTON_UP = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_MOVE = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_IN = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_OUT = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_WHEEL = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_FOCUS_IN = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_FOCUS_OUT = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_DAMAGE = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_CREATE = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_DESTROY = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_SHOW = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_HIDE = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_CONFIGURE = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_RESIZE = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST = ecore_event_type_new();
}
#ifdef HAVE_OPENGL_GLEW
if (GLEW_VERSION_2_0)
{
printf ("pas 2.0\n");
return 0;
}
else {
printf ("2.0 !!\n");
}
#endif /* HAVE_OPENGL_GLEW */
_ecore_win32_init_count++;
return _ecore_win32_init_count;
}
int
ecore_win32_shutdown()
{
_ecore_win32_init_count++;
if (_ecore_win32_init_count > 0) return _ecore_win32_init_count;
if (!_ecore_win32_instance) return _ecore_win32_init_count;
UnregisterClass(ECORE_WIN32_WINDOW_CLASS, _ecore_win32_instance);
FreeLibrary(_ecore_win32_instance);
_ecore_win32_instance = NULL;
if (_ecore_win32_init_count < 0) _ecore_win32_init_count = 0;
return _ecore_win32_init_count;
}
int
ecore_win32_screen_depth_get()
{
HDC dc;
int depth;
dc = GetDC(NULL);
if (!dc)
return 0;
depth = GetDeviceCaps(dc, BITSPIXEL);
ReleaseDC(NULL, dc);
return depth;
}
/**
* Sets the timeout for a double and triple clicks to be flagged.
*
* This sets the time between clicks before the double_click flag is
* set in a button down event. If 3 clicks occur within double this
* time, the triple_click flag is also set.
*
* @param t The time in seconds
*/
void
ecore_win32_double_click_time_set(double t)
{
if (t < 0.0) t = 0.0;
_ecore_win32_double_click_time = t;
}
/**
* Retrieves the double and triple click flag timeout.
*
* See @ref ecore_win32_double_click_time_set for more information.
*
* @return The timeout for double clicks in seconds.
*/
double
ecore_win32_double_click_time_get(void)
{
return _ecore_win32_double_click_time;
}
/**
* Return the last event time
*/
double
ecore_win32_current_time_get(void)
{
return _ecore_win32_event_last_time;
}
/***** Private functions definitions *****/
LRESULT CALLBACK
@ -231,191 +425,3 @@ _ecore_win32_window_procedure(HWND window,
}
}
/*
Events:
x * key down
* key sys down
x * key up
* key sys up
x * mouse button down left
x * mouse button down middle
x * mouse button down right
x * mouse button up left
x * mouse button up middle
x * mouse button up right
x * mouse move (contains enter)
x * mouse leave
x * focus in
x * focus out
x * expose
x * create
x * destroy
x * configure
x * resize
x * delete
*/
EAPI int ECORE_WIN32_EVENT_KEY_DOWN = 0;
EAPI int ECORE_WIN32_EVENT_KEY_UP = 0;
EAPI int ECORE_WIN32_EVENT_MOUSE_BUTTON_DOWN = 0;
EAPI int ECORE_WIN32_EVENT_MOUSE_BUTTON_UP = 0;
EAPI int ECORE_WIN32_EVENT_MOUSE_MOVE = 0;
EAPI int ECORE_WIN32_EVENT_MOUSE_IN = 0;
EAPI int ECORE_WIN32_EVENT_MOUSE_OUT = 0;
EAPI int ECORE_WIN32_EVENT_MOUSE_WHEEL = 0;
EAPI int ECORE_WIN32_EVENT_WINDOW_FOCUS_IN = 0;
EAPI int ECORE_WIN32_EVENT_WINDOW_FOCUS_OUT = 0;
EAPI int ECORE_WIN32_EVENT_WINDOW_DAMAGE = 0;
EAPI int ECORE_WIN32_EVENT_WINDOW_CREATE = 0;
EAPI int ECORE_WIN32_EVENT_WINDOW_DESTROY = 0;
EAPI int ECORE_WIN32_EVENT_WINDOW_SHOW = 0;
EAPI int ECORE_WIN32_EVENT_WINDOW_HIDE = 0;
EAPI int ECORE_WIN32_EVENT_WINDOW_CONFIGURE = 0;
EAPI int ECORE_WIN32_EVENT_WINDOW_RESIZE = 0;
EAPI int ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST = 0;
EAPI int
ecore_win32_init()
{
WNDCLASS wc;
if (_ecore_win32_init_count > 0)
{
_ecore_win32_init_count++;
return _ecore_win32_init_count;
}
printf (" *** ecore_win32_init\n");
_ecore_win32_instance = GetModuleHandle(NULL);
if (!_ecore_win32_instance)
return 0;
memset (&wc, 0, sizeof (WNDCLASS));
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = _ecore_win32_window_procedure;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = _ecore_win32_instance;
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
wc.lpszMenuName = NULL;
wc.lpszClassName = ECORE_WIN32_WINDOW_CLASS;
if(!RegisterClass(&wc))
{
FreeLibrary(_ecore_win32_instance);
return 0;
}
if (!ECORE_WIN32_EVENT_KEY_DOWN)
{
ECORE_WIN32_EVENT_KEY_DOWN = ecore_event_type_new();
ECORE_WIN32_EVENT_KEY_UP = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_BUTTON_DOWN = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_BUTTON_UP = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_MOVE = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_IN = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_OUT = ecore_event_type_new();
ECORE_WIN32_EVENT_MOUSE_WHEEL = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_FOCUS_IN = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_FOCUS_OUT = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_DAMAGE = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_CREATE = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_DESTROY = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_SHOW = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_HIDE = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_CONFIGURE = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_RESIZE = ecore_event_type_new();
ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST = ecore_event_type_new();
}
#ifdef HAVE_OPENGL_GLEW
if (GLEW_VERSION_2_0)
{
printf ("pas 2.0\n");
return 0;
}
else {
printf ("2.0 !!\n");
}
#endif /* HAVE_OPENGL_GLEW */
_ecore_win32_init_count++;
return _ecore_win32_init_count;
}
EAPI int
ecore_win32_shutdown()
{
_ecore_win32_init_count++;
if (_ecore_win32_init_count > 0) return _ecore_win32_init_count;
if (!_ecore_win32_instance) return _ecore_win32_init_count;
UnregisterClass(ECORE_WIN32_WINDOW_CLASS, _ecore_win32_instance);
FreeLibrary(_ecore_win32_instance);
_ecore_win32_instance = NULL;
if (_ecore_win32_init_count < 0) _ecore_win32_init_count = 0;
return _ecore_win32_init_count;
}
EAPI int
ecore_win32_screen_depth_get()
{
HDC dc;
int depth;
dc = GetDC(NULL);
if (!dc)
return 0;
depth = GetDeviceCaps(dc, BITSPIXEL);
ReleaseDC(NULL, dc);
return depth;
}
/**
* Sets the timeout for a double and triple clicks to be flagged.
*
* This sets the time between clicks before the double_click flag is
* set in a button down event. If 3 clicks occur within double this
* time, the triple_click flag is also set.
*
* @param t The time in seconds
*/
EAPI void
ecore_win32_double_click_time_set(double t)
{
if (t < 0.0) t = 0.0;
_ecore_win32_double_click_time = t;
}
/**
* Retrieves the double and triple click flag timeout.
*
* See @ref ecore_win32_double_click_time_set for more information.
*
* @return The timeout for double clicks in seconds.
*/
EAPI double
ecore_win32_double_click_time_get(void)
{
return _ecore_win32_double_click_time;
}
/**
* Return the last event time
*/
EAPI double
ecore_win32_current_time_get(void)
{
return _ecore_win32_event_last_time;
}

View File

@ -2,9 +2,21 @@
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#include "Ecore_Win32.h"
#include "ecore_win32_private.h"
EAPI Ecore_Win32_Cursor *
/***** API *****/
Ecore_Win32_Cursor *
ecore_win32_cursor_new(const void *pixels_and,
const void *pixels_xor,
int width,
@ -33,13 +45,13 @@ ecore_win32_cursor_new(const void *pixels_and,
return cursor;
}
EAPI void
void
ecore_win32_cursor_free(Ecore_Win32_Cursor *cursor)
{
DestroyCursor(cursor);
}
EAPI Ecore_Win32_Cursor *
Ecore_Win32_Cursor *
ecore_win32_cursor_shape_get(Ecore_Win32_Cursor_Shape shape)
{
Ecore_Win32_Cursor *cursor = NULL;
@ -99,7 +111,7 @@ ecore_win32_cursor_shape_get(Ecore_Win32_Cursor_Shape shape)
return cursor;
}
EAPI int
int
ecore_win32_cursor_size_get(void)
{
int width;

View File

@ -1,312 +0,0 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <cstdio>
#include "ecore_win32_private.h"
#include "Ecore_Win32.h"
EAPI int
ecore_win32_ddraw_init(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECTDRAW
DDSURFACEDESC surface_desc;
DDPIXELFORMAT pixel_format;
RECT rect;
struct _Ecore_Win32_Window *w;
if (!window)
return 0;
w = (struct _Ecore_Win32_Window *)window;
w->ddraw.surface_source = NULL;
{
RECT rect;
GetClientRect(w->window, &rect);
printf (" *** ecore_win32_ddraw_init %ld %ld\n",
rect.right - rect.left, rect.bottom - rect.top);
}
if (FAILED(DirectDrawCreate(NULL, &w->ddraw.object, NULL)))
return 0;
if (FAILED(w->ddraw.object->SetCooperativeLevel(w->window, DDSCL_NORMAL)))
goto no_coop_level;
if (FAILED(w->ddraw.object->CreateClipper(0, &w->ddraw.clipper, NULL)))
goto no_clipper;
if (FAILED(w->ddraw.clipper->SetHWnd(0, w->window)))
goto no_clipper_set_window;
memset (&surface_desc, 0, sizeof (surface_desc));
surface_desc.dwSize = sizeof (surface_desc);
surface_desc.dwFlags = DDSD_CAPS;
surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
if (FAILED(w->ddraw.object->CreateSurface(&surface_desc,
&w->ddraw.surface_primary,
NULL)))
goto no_primary_surf;
if (FAILED(w->ddraw.surface_primary->SetClipper(w->ddraw.clipper)))
goto no_primary_surf_set_clipper;
if (!GetClientRect(w->window, &rect))
goto no_get_client;
memset (&surface_desc, 0, sizeof (surface_desc));
surface_desc.dwSize = sizeof (surface_desc);
surface_desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
surface_desc.dwWidth = rect.right - rect.left;
surface_desc.dwHeight = rect.bottom - rect.top;
if (FAILED(w->ddraw.object->CreateSurface(&surface_desc,
&w->ddraw.surface_back,
NULL)))
goto no_back_surf;
ZeroMemory(&pixel_format, sizeof(pixel_format));
pixel_format.dwSize = sizeof(pixel_format);
if (FAILED(w->ddraw.surface_primary->GetPixelFormat(&pixel_format)))
goto no_get_pix_fmt;
w->ddraw.depth = pixel_format.dwRGBBitCount;
w->backend = ECORE_WIN32_BACKEND_DIRECTDRAW;
return 1;
no_get_pix_fmt:
/* no need to release the back surface. the next call free its memory */
no_back_surf:
no_get_client:
no_primary_surf_set_clipper:
w->ddraw.surface_primary->Release();
no_primary_surf:
no_clipper_set_window:
w->ddraw.clipper->Release();
no_clipper:
no_coop_level:
w->ddraw.object->Release();
#endif /* HAVE_DIRECTDRAW */
return 0;
}
EAPI int
ecore_win32_ddraw_16_init(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECTDRAW
DDSURFACEDESC surface_desc;
DDPIXELFORMAT pixel_format;
RECT rect;
void *source;
struct _Ecore_Win32_Window *w;
if (!window)
return 0;
w = (struct _Ecore_Win32_Window *)window;
{
RECT rect;
GetClientRect(w->window, &rect);
printf (" *** ecore_win32_ddraw_init %ld %ld\n",
rect.right - rect.left, rect.bottom - rect.top);
}
w->ddraw.clipper = NULL;
if (FAILED(DirectDrawCreate(NULL, &w->ddraw.object, NULL)))
return 0;
if (FAILED(w->ddraw.object->SetCooperativeLevel(w->window, DDSCL_NORMAL)))
goto no_coop_level;
memset (&surface_desc, 0, sizeof (surface_desc));
surface_desc.dwSize = sizeof (surface_desc);
surface_desc.dwFlags = DDSD_CAPS;
surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
if (FAILED(w->ddraw.object->CreateSurface(&surface_desc,
&w->ddraw.surface_primary,
NULL)))
goto no_primary_surf;
if (!GetClientRect(w->window, &rect))
goto no_get_client;
memset (&surface_desc, 0, sizeof (surface_desc));
surface_desc.dwSize = sizeof (surface_desc);
surface_desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
surface_desc.dwWidth = rect.right - rect.left;
surface_desc.dwHeight = rect.bottom - rect.top;
if (FAILED(w->ddraw.object->CreateSurface(&surface_desc,
&w->ddraw.surface_back,
NULL)))
goto no_back_surf;
ZeroMemory(&pixel_format, sizeof(pixel_format));
pixel_format.dwSize = sizeof(pixel_format);
if (FAILED(w->ddraw.surface_primary->GetPixelFormat(&pixel_format)))
goto no_get_pix_fmt;
w->ddraw.depth = pixel_format.dwRGBBitCount;
source = malloc((rect.right - rect.left) * (rect.bottom - rect.top) * 2);
if (!source)
goto no_source;
memset (&surface_desc, 0, sizeof (surface_desc));
surface_desc.dwSize = sizeof (surface_desc);
surface_desc.dwFlags =
DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH |
DDSD_LPSURFACE | DDSD_PITCH | DDSD_PIXELFORMAT;
surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
surface_desc.dwWidth = rect.right - rect.left;
surface_desc.dwHeight = rect.bottom - rect.top;
surface_desc.lPitch = 2 * surface_desc.dwWidth;
surface_desc.lpSurface = source;
surface_desc.ddpfPixelFormat = pixel_format;
if (FAILED(w->ddraw.object->CreateSurface(&surface_desc,
&w->ddraw.surface_source,
NULL)))
goto no_source_surf;
w->backend = ECORE_WIN32_BACKEND_DIRECTDRAW_16;
return 1;
no_source_surf:
free(source);
no_source:
no_get_pix_fmt:
/* no need to release the back surface. the next call free its memory */
no_back_surf:
no_get_client:
w->ddraw.surface_primary->Release();
no_primary_surf:
no_coop_level:
w->ddraw.object->Release();
#endif /* HAVE_DIRECTDRAW */
return 0;
}
EAPI void
ecore_win32_ddraw_shutdown(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECTDRAW
struct _Ecore_Win32_Window *w;
if (!window)
return;
w = (struct _Ecore_Win32_Window *)window;
if (w->ddraw.surface_primary)
{
w->ddraw.surface_primary->Release();
w->ddraw.surface_primary = NULL;
}
if (w->ddraw.surface_source)
{
DDSURFACEDESC surface_desc;
ZeroMemory(&surface_desc, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
if (w->ddraw.surface_source->Lock(NULL,
&surface_desc,
DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR,
NULL) == DD_OK)
{
free(surface_desc.lpSurface);
if (w->ddraw.surface_source->Unlock(NULL) == DD_OK)
{
w->ddraw.surface_source->Release();
}
}
w->ddraw.surface_source = NULL;
}
/* no need to release the back surface. the previous call free its memory */
if (w->ddraw.clipper)
{
w->ddraw.clipper->Release();
w->ddraw.clipper = NULL;
}
if (w->ddraw.object)
{
w->ddraw.object->Release();
w->ddraw.object = NULL;
}
w->backend = ECORE_WIN32_BACKEND_NONE;
#endif /* HAVE_DIRECTDRAW */
}
EAPI Ecore_Win32_DDraw_Object *
ecore_win32_ddraw_object_get(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECTDRAW
return ((struct _Ecore_Win32_Window *)window)->ddraw.object;
#else
return NULL;
#endif /* HAVE_DIRECTDRAW */
}
EAPI Ecore_Win32_DDraw_Surface *
ecore_win32_ddraw_surface_primary_get(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECTDRAW
return ((struct _Ecore_Win32_Window *)window)->ddraw.surface_primary;
#else
return NULL;
#endif /* HAVE_DIRECTDRAW */
}
EAPI Ecore_Win32_DDraw_Surface *
ecore_win32_ddraw_surface_back_get(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECTDRAW
return ((struct _Ecore_Win32_Window *)window)->ddraw.surface_back;
#else
return NULL;
#endif /* HAVE_DIRECTDRAW */
}
EAPI Ecore_Win32_DDraw_Surface *
ecore_win32_ddraw_surface_source_get(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECTDRAW
return ((struct _Ecore_Win32_Window *)window)->ddraw.surface_source;
#else
return NULL;
#endif /* HAVE_DIRECTDRAW */
}
EAPI int
ecore_win32_ddraw_depth_get(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECTDRAW
return ((struct _Ecore_Win32_Window *)window)->ddraw.depth;
#else
return 0;
#endif /* HAVE_DIRECTDRAW */
}

View File

@ -1,212 +0,0 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#include "config.h"
#include "ecore_win32_private.h"
#include "Ecore_Win32.h"
#include <cstdio>
EAPI int
ecore_win32_direct3d_init(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECT3D
D3DPRESENT_PARAMETERS pp;
D3DDISPLAYMODE dm;
D3DSURFACE_DESC sd;
D3DCAPS9 caps;
RECT rect;
struct _Ecore_Win32_Window *w;
DWORD flag;
if (!window)
return 0;
w = (struct _Ecore_Win32_Window *)window;
printf ("ecore_win32_direct3d_init debut : %p (%d %d) (%d %d)\n",
w,
w->min_width,
w->min_height,
w->max_width,
w->max_height);
w->d3d.object = Direct3DCreate9 (D3D_SDK_VERSION);
if (!w->d3d.object)
return 0;
if (FAILED (w->d3d.object->GetAdapterDisplayMode (D3DADAPTER_DEFAULT,
&dm)))
goto no_get_adapter;
if (FAILED (w->d3d.object->GetDeviceCaps (D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
&caps)))
goto no_caps;
if (!GetClientRect(w->window, &rect))
goto no_get_client;
flag = (caps.VertexProcessingCaps != 0)
? D3DCREATE_HARDWARE_VERTEXPROCESSING
: D3DCREATE_SOFTWARE_VERTEXPROCESSING;
ZeroMemory(&pp, sizeof(pp));
pp.BackBufferWidth = rect.right - rect.left;
pp.BackBufferHeight = rect.bottom - rect.top;
pp.BackBufferFormat = dm.Format;
pp.BackBufferCount = 1;
pp.MultiSampleType = D3DMULTISAMPLE_NONE;
pp.MultiSampleQuality = 0;
pp.SwapEffect = D3DSWAPEFFECT_FLIP;
pp.hDeviceWindow = w->window;
pp.Windowed = TRUE;
pp.EnableAutoDepthStencil = FALSE;
pp.FullScreen_RefreshRateInHz = 0;
pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
if (FAILED(w->d3d.object->CreateDevice (D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
w->window,
flag,
&pp,
&w->d3d.device)))
goto no_device;
if (FAILED (D3DXCreateSprite (w->d3d.device, &w->d3d.sprite)))
goto no_sprite;
if (FAILED (w->d3d.device->CreateTexture (rect.right - rect.left,
rect.bottom - rect.top,
1,
D3DUSAGE_DYNAMIC,
dm.Format,
D3DPOOL_DEFAULT,
&w->d3d.texture, NULL)))
goto no_texture;
if (FAILED (w->d3d.texture->GetLevelDesc (0, &sd)))
goto no_level_desc;
switch (sd.Format) {
case D3DFMT_A8R8G8B8:
case D3DFMT_X8R8G8B8:
w->d3d.depth = 32;
break;
case D3DFMT_R5G6B5:
w->d3d.depth = 16;
break;
default:
goto no_supported_depth;
}
w->backend = ECORE_WIN32_BACKEND_DIRECT3D;
printf ("ecore_win32_direct3d_init fin : %p (%d %d) (%d %d)\n",
w,
w->min_width,
w->min_height,
w->max_width,
w->max_height);
return 1;
no_supported_depth:
no_level_desc:
w->d3d.texture->Release();
no_texture:
w->d3d.sprite->Release();
no_sprite:
w->d3d.device->Release();
no_device:
no_get_client:
no_caps:
no_get_adapter:
w->d3d.object->Release();
#endif /* HAVE_DIRECT3D */
return 0;
}
EAPI void
ecore_win32_direct3d_shutdown(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECT3D
struct _Ecore_Win32_Window *w;
if (!window)
return;
w = (struct _Ecore_Win32_Window *)window;
printf ("0\n");
if (w->d3d.texture)
w->d3d.texture->Release();
printf ("1\n");
// if (w->d3d.sprite)
// w->d3d.sprite->OnLostDevice();
printf ("2\n");
// if (w->d3d.device)
// w->d3d.device->Release();
printf ("3\n");
if (w->d3d.object)
w->d3d.object->Release();
printf ("4\n");
w->backend = ECORE_WIN32_BACKEND_NONE;
#endif /* HAVE_DIRECT3D */
}
EAPI Ecore_Win32_Direct3D_Object *
ecore_win32_direct3d_object_get(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECT3D
return ((struct _Ecore_Win32_Window *)window)->d3d.object;
#else
return NULL;
#endif /* HAVE_DIRECT3D */
}
EAPI Ecore_Win32_Direct3D_Device *
ecore_win32_direct3d_device_get(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECT3D
return ((struct _Ecore_Win32_Window *)window)->d3d.device;
#else
return NULL;
#endif /* HAVE_DIRECT3D */
}
EAPI Ecore_Win32_Direct3D_Sprite *
ecore_win32_direct3d_sprite_get(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECT3D
return ((struct _Ecore_Win32_Window *)window)->d3d.sprite;
#else
return NULL;
#endif /* HAVE_DIRECT3D */
}
EAPI Ecore_Win32_Direct3D_Texture *
ecore_win32_direct3d_texture_get(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECT3D
return ((struct _Ecore_Win32_Window *)window)->d3d.texture;
#else
return NULL;
#endif /* HAVE_DIRECT3D */
}
EAPI int
ecore_win32_direct3d_depth_get(Ecore_Win32_Window *window)
{
#ifdef HAVE_DIRECT3D
return ((struct _Ecore_Win32_Window *)window)->d3d.depth;
#else
return 0;
#endif /* HAVE_DIRECT3D */
}

View File

@ -2,13 +2,26 @@
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdlib.h>
#include <stdio.h> /* for printf */
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#include <windowsx.h>
#include "Ecore.h"
#include "Ecore_Win32.h"
#include "ecore_win32_private.h"
/***** Private declarations *****/
static Ecore_Win32_Window *_ecore_win32_mouse_down_last_window = NULL;
static Ecore_Win32_Window *_ecore_win32_mouse_down_last_last_window = NULL;
static double _ecore_win32_mouse_down_last_time = 0;
@ -16,318 +29,24 @@ static double _ecore_win32_mouse_down_last_last_time = 0;
static int _ecore_win32_mouse_down_did_triple = 0;
static int _ecore_win32_mouse_up_count = 0;
static void
_ecore_win32_event_free_key_down(void *data,
void *ev)
{
Ecore_Win32_Event_Key_Down *e;
static void _ecore_win32_event_free_key_down(void *data,
void *ev);
e = ev;
if (e->keyname) free(e->keyname);
if (e->keysymbol) free(e->keysymbol);
if (e->keycompose) free(e->keycompose);
free(e);
}
static void _ecore_win32_event_free_key_up(void *data,
void *ev);
static void
_ecore_win32_event_free_key_up(void *data,
void *ev)
{
Ecore_Win32_Event_Key_Up *e;
static int _ecore_win32_event_keystroke_get(int key,
char **keyname,
char **keysymbol,
char **keycompose);
e = ev;
if (e->keyname) free(e->keyname);
if (e->keysymbol) free(e->keysymbol);
if (e->keycompose) free(e->keycompose);
free(e);
}
static int _ecore_win32_event_char_get(int key,
char **keyname,
char **keysymbol,
char **keycompose);
static int
_ecore_win32_event_keystroke_get(int key,
char **keyname,
char **keysymbol,
char **keycompose)
{
char *kn;
char *ks;
char *kc;
*keyname = NULL;
*keysymbol = NULL;
*keycompose = NULL;
switch (key)
{
/* Keystroke */
case VK_PRIOR:
kn = "KP_Prior";
ks = "KP_Prior";
kc = "";
break;
case VK_NEXT:
kn = "KP_Next";
ks = "KP_Next";
kc = "";
break;
case VK_END:
kn = "KP_End";
ks = "KP_End";
kc = "";
break;
case VK_HOME:
kn = "KP_Home";
ks = "KP_Home";
kc = "";
break;
case VK_LEFT:
kn = "KP_Left";
ks = "KP_Left";
kc = "";
break;
case VK_UP:
kn = "KP_Up";
ks = "KP_Up";
kc = "";
break;
case VK_RIGHT:
kn = "KP_Right";
ks = "KP_Right";
kc = "";
break;
case VK_DOWN:
kn = "KP_Down";
ks = "KP_Down";
kc = "";
break;
case VK_INSERT:
kn = "KP_Insert";
ks = "KP_Insert";
kc = "";
break;
case VK_DELETE:
kn = "KP_Delete";
ks = "KP_Delete";
kc = "";
break;
case VK_F1:
kn = "F1";
ks = "F1";
kc = "";
break;
case VK_F2:
kn = "F2";
ks = "F2";
kc = "";
break;
case VK_F3:
kn = "F3";
ks = "F3";
kc = "";
break;
case VK_F4:
kn = "F4";
ks = "F4";
kc = "";
break;
case VK_F5:
kn = "F5";
ks = "F5";
kc = "";
break;
case VK_F6:
kn = "F6";
ks = "F6";
kc = "";
break;
case VK_F7:
kn = "F7";
ks = "F7";
kc = "";
break;
case VK_F8:
kn = "F8";
ks = "F8";
kc = "";
break;
case VK_F9:
kn = "F9";
ks = "F9";
kc = "";
break;
case VK_F10:
kn = "F10";
ks = "F10";
kc = "";
break;
case VK_F11:
kn = "F11";
ks = "F11";
kc = "";
break;
case VK_F12:
kn = "F12";
ks = "F12";
kc = "";
break;
case VK_F13:
kn = "F13";
ks = "F13";
kc = "";
break;
case VK_F14:
kn = "F14";
ks = "F14";
kc = "";
break;
case VK_F15:
kn = "F15";
ks = "F15";
kc = "";
break;
case VK_F16:
kn = "F16";
ks = "F16";
kc = "";
break;
case VK_F17:
kn = "F17";
ks = "F17";
kc = "";
break;
case VK_F18:
kn = "F18";
ks = "F18";
kc = "";
break;
case VK_F19:
kn = "F19";
ks = "F19";
kc = "";
break;
case VK_F20:
kn = "F20";
ks = "F20";
kc = "";
break;
case VK_F21:
kn = "F21";
ks = "F21";
kc = "";
break;
case VK_F22:
kn = "F22";
ks = "F22";
kc = "";
break;
case VK_F23:
kn = "F23";
ks = "F23";
kc = "";
break;
case VK_F24:
kn = "F24";
ks = "F24";
kc = "";
break;
default:
/* other non keystroke characters */
return 0;
}
*keyname = strdup(kn);
if (!*keyname) return 0;
*keysymbol = strdup(ks);
if (!*keysymbol)
{
free(*keyname);
*keyname = NULL;
return 0;
}
*keycompose = strdup(kc);
if (!*keycompose)
{
free(*keyname);
free(*keysymbol);
*keyname = NULL;
*keysymbol = NULL;
return 0;
}
return 1;
}
static int
_ecore_win32_event_char_get(int key,
char **keyname,
char **keysymbol,
char **keycompose)
{
char kn[32];
char ks[32];
char *kc;
*keyname = NULL;
*keysymbol = NULL;
*keycompose = NULL;
switch (key)
{
case VK_BACK:
strncpy(kn, "Backspace", 32);
strncpy(ks, "Backspace", 32);
kc = "";
break;
case VK_TAB:
strncpy(kn, "Tab", 32);
strncpy(ks, "Tab", 32);
kc = "";
break;
case 0x0a:
/* Line feed (Shift + Enter) */
strncpy(kn, "LineFeed", 32);
strncpy(ks, "LineFeed", 32);
kc = "";
break;
case VK_RETURN:
strncpy(kn, "Return", 32);
strncpy(ks, "Return", 32);
kc = "";
break;
case VK_ESCAPE:
strncpy(kn, "Escape", 32);
strncpy(ks, "Escape", 32);
kc = "";
break;
default:
/* displayable characters */
printf (" * key : %d\n", key);
kn[0] = (TCHAR)key;
kn[1] = '\0';
ks[0] = (TCHAR)key;
ks[1] = '\0';
kc = "";
break;
}
*keyname = strdup(kn);
if (!*keyname) return 0;
*keysymbol = strdup(ks);
if (!*keysymbol)
{
free(*keyname);
*keyname = NULL;
return 0;
}
*keycompose = strdup(kc);
if (!*keycompose)
{
free(*keyname);
free(*keysymbol);
*keyname = NULL;
*keysymbol = NULL;
return 0;
}
return 1;
}
/***** Global functions definitions *****/
void
_ecore_win32_event_handle_key_press(Ecore_Win32_Callback_Data *msg,
@ -851,3 +570,319 @@ _ecore_win32_event_handle_delete_request(Ecore_Win32_Callback_Data *msg)
ecore_event_add(ECORE_WIN32_EVENT_WINDOW_DELETE_REQUEST, e, NULL, NULL);
}
/***** Private functions definitions *****/
static void
_ecore_win32_event_free_key_down(void *data,
void *ev)
{
Ecore_Win32_Event_Key_Down *e;
e = ev;
if (e->keyname) free(e->keyname);
if (e->keysymbol) free(e->keysymbol);
if (e->keycompose) free(e->keycompose);
free(e);
}
static void
_ecore_win32_event_free_key_up(void *data,
void *ev)
{
Ecore_Win32_Event_Key_Up *e;
e = ev;
if (e->keyname) free(e->keyname);
if (e->keysymbol) free(e->keysymbol);
if (e->keycompose) free(e->keycompose);
free(e);
}
static int
_ecore_win32_event_keystroke_get(int key,
char **keyname,
char **keysymbol,
char **keycompose)
{
char *kn;
char *ks;
char *kc;
*keyname = NULL;
*keysymbol = NULL;
*keycompose = NULL;
switch (key)
{
/* Keystroke */
case VK_PRIOR:
kn = "KP_Prior";
ks = "KP_Prior";
kc = "";
break;
case VK_NEXT:
kn = "KP_Next";
ks = "KP_Next";
kc = "";
break;
case VK_END:
kn = "KP_End";
ks = "KP_End";
kc = "";
break;
case VK_HOME:
kn = "KP_Home";
ks = "KP_Home";
kc = "";
break;
case VK_LEFT:
kn = "KP_Left";
ks = "KP_Left";
kc = "";
break;
case VK_UP:
kn = "KP_Up";
ks = "KP_Up";
kc = "";
break;
case VK_RIGHT:
kn = "KP_Right";
ks = "KP_Right";
kc = "";
break;
case VK_DOWN:
kn = "KP_Down";
ks = "KP_Down";
kc = "";
break;
case VK_INSERT:
kn = "KP_Insert";
ks = "KP_Insert";
kc = "";
break;
case VK_DELETE:
kn = "KP_Delete";
ks = "KP_Delete";
kc = "";
break;
case VK_F1:
kn = "F1";
ks = "F1";
kc = "";
break;
case VK_F2:
kn = "F2";
ks = "F2";
kc = "";
break;
case VK_F3:
kn = "F3";
ks = "F3";
kc = "";
break;
case VK_F4:
kn = "F4";
ks = "F4";
kc = "";
break;
case VK_F5:
kn = "F5";
ks = "F5";
kc = "";
break;
case VK_F6:
kn = "F6";
ks = "F6";
kc = "";
break;
case VK_F7:
kn = "F7";
ks = "F7";
kc = "";
break;
case VK_F8:
kn = "F8";
ks = "F8";
kc = "";
break;
case VK_F9:
kn = "F9";
ks = "F9";
kc = "";
break;
case VK_F10:
kn = "F10";
ks = "F10";
kc = "";
break;
case VK_F11:
kn = "F11";
ks = "F11";
kc = "";
break;
case VK_F12:
kn = "F12";
ks = "F12";
kc = "";
break;
case VK_F13:
kn = "F13";
ks = "F13";
kc = "";
break;
case VK_F14:
kn = "F14";
ks = "F14";
kc = "";
break;
case VK_F15:
kn = "F15";
ks = "F15";
kc = "";
break;
case VK_F16:
kn = "F16";
ks = "F16";
kc = "";
break;
case VK_F17:
kn = "F17";
ks = "F17";
kc = "";
break;
case VK_F18:
kn = "F18";
ks = "F18";
kc = "";
break;
case VK_F19:
kn = "F19";
ks = "F19";
kc = "";
break;
case VK_F20:
kn = "F20";
ks = "F20";
kc = "";
break;
case VK_F21:
kn = "F21";
ks = "F21";
kc = "";
break;
case VK_F22:
kn = "F22";
ks = "F22";
kc = "";
break;
case VK_F23:
kn = "F23";
ks = "F23";
kc = "";
break;
case VK_F24:
kn = "F24";
ks = "F24";
kc = "";
break;
default:
/* other non keystroke characters */
return 0;
}
*keyname = strdup(kn);
if (!*keyname) return 0;
*keysymbol = strdup(ks);
if (!*keysymbol)
{
free(*keyname);
*keyname = NULL;
return 0;
}
*keycompose = strdup(kc);
if (!*keycompose)
{
free(*keyname);
free(*keysymbol);
*keyname = NULL;
*keysymbol = NULL;
return 0;
}
return 1;
}
static int
_ecore_win32_event_char_get(int key,
char **keyname,
char **keysymbol,
char **keycompose)
{
char kn[32];
char ks[32];
char *kc;
*keyname = NULL;
*keysymbol = NULL;
*keycompose = NULL;
switch (key)
{
case VK_BACK:
strncpy(kn, "Backspace", 32);
strncpy(ks, "Backspace", 32);
kc = "";
break;
case VK_TAB:
strncpy(kn, "Tab", 32);
strncpy(ks, "Tab", 32);
kc = "";
break;
case 0x0a:
/* Line feed (Shift + Enter) */
strncpy(kn, "LineFeed", 32);
strncpy(ks, "LineFeed", 32);
kc = "";
break;
case VK_RETURN:
strncpy(kn, "Return", 32);
strncpy(ks, "Return", 32);
kc = "";
break;
case VK_ESCAPE:
strncpy(kn, "Escape", 32);
strncpy(ks, "Escape", 32);
kc = "";
break;
default:
/* displayable characters */
printf (" * key : %d\n", key);
kn[0] = (TCHAR)key;
kn[1] = '\0';
ks[0] = (TCHAR)key;
ks[1] = '\0';
kc = "";
break;
}
*keyname = strdup(kn);
if (!*keyname) return 0;
*keysymbol = strdup(ks);
if (!*keysymbol)
{
free(*keyname);
*keyname = NULL;
return 0;
}
*keycompose = strdup(kc);
if (!*keycompose)
{
free(*keyname);
free(*keysymbol);
*keyname = NULL;
*keysymbol = NULL;
return 0;
}
return 1;
}

View File

@ -2,11 +2,20 @@
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#include "config.h"
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <stdio.h> /* for printf */
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#include <GL/glew.h>
#include "ecore_win32_private.h"
#include "Ecore_Win32.h"
#include <stdio.h>
#include "ecore_win32_private.h"
static int _ecore_win32_glew_init = 0;
@ -18,9 +27,7 @@ ecore_win32_glew_init(Ecore_Win32_Window *window)
PIXELFORMATDESCRIPTOR pfd;
int format;
RECT rect;
struct _Ecore_Win32_Window *w;
DWORD flag;
if (!window)
return 0;
@ -85,7 +92,6 @@ ecore_win32_glew_init(Ecore_Win32_Window *window)
return 1;
no_glew_2_0:
no_glew_init:
no_format:
ReleaseDC (w->window, w->glew.dc);
no_dc:

View File

@ -6,23 +6,6 @@
#define __ECORE_WIN32_PRIVATE_H__
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#ifdef HAVE_OPENGL_GLEW
# include <GL/glew.h>
#endif /* HAVE_OPENGL_GLEW */
#include <Ecore.h>
#include <Ecore_Data.h>
#include "Ecore_Win32.h"
#define ECORE_WIN32_WINDOW_CLASS "Ecore_Win32_Window_Class"
@ -104,7 +87,6 @@ struct _Ecore_Win32_Window
};
extern Ecore_List *_ecore_win32_windows_list;
extern HINSTANCE _ecore_win32_instance;
extern double _ecore_win32_double_click_time;
extern double _ecore_win32_event_last_time;

File diff suppressed because it is too large Load Diff