Enlightenment CVS committal Author : doursse Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_win32 Modified Files: ecore_win32.c ecore_win32_cursor.c ecore_win32_event.c ecore_win32_glew.c ecore_win32_private.h ecore_win32_window.c Removed Files: ecore_win32_ddraw.cpp ecore_win32_direct3d.cpp Log Message: reorganize header files and fix minor warnings =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- ecore_win32.c 26 Jun 2008 04:30:29 -0000 1.6 +++ ecore_win32.c 26 Jun 2008 05:11:16 -0000 1.7 @@ -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 @@ -230,192 +424,4 @@ return DefWindowProc(window, message, window_param, data_param); } -} - -/* - 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; } =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32_cursor.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ecore_win32_cursor.c 29 Oct 2007 20:05:39 -0000 1.2 +++ ecore_win32_cursor.c 26 Jun 2008 05:11:16 -0000 1.3 @@ -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 @@ 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 @@ return cursor; } -EAPI int +int ecore_win32_cursor_size_get(void) { int width; =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32_event.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- ecore_win32_event.c 26 Jun 2008 04:30:29 -0000 1.4 +++ ecore_win32_event.c 26 Jun 2008 05:11:16 -0000 1.5 @@ -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,422 +29,128 @@ 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) +static void _ecore_win32_event_free_key_down(void *data, + void *ev); + +static void _ecore_win32_event_free_key_up(void *data, + void *ev); + +static int _ecore_win32_event_keystroke_get(int key, + char **keyname, + char **keysymbol, + char **keycompose); + +static int _ecore_win32_event_char_get(int key, + char **keyname, + char **keysymbol, + char **keycompose); + + +/***** Global functions definitions *****/ + +void +_ecore_win32_event_handle_key_press(Ecore_Win32_Callback_Data *msg, + int is_keystroke) { 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); + e = (Ecore_Win32_Event_Key_Down *)malloc(sizeof(Ecore_Win32_Event_Key_Down)); + if (!e) return; + + if (is_keystroke) + { + if (!_ecore_win32_event_keystroke_get(LOWORD(msg->window_param), + &e->keyname, + &e->keysymbol, + &e->keycompose)) + { + free(e); + return; + } + goto store_key; + } + else + { + if (!_ecore_win32_event_char_get(LOWORD(msg->window_param), + &e->keyname, + &e->keysymbol, + &e->keycompose)) + { + free(e); + return; + } + } + + store_key: + e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA); + if (!e->window) + { + free(e); + return; + } + e->time = (double)msg->time / 1000.0; + + _ecore_win32_event_last_time = e->time; + + ecore_event_add(ECORE_WIN32_EVENT_KEY_DOWN, e, _ecore_win32_event_free_key_down, NULL); } -static void -_ecore_win32_event_free_key_up(void *data, - void *ev) +void +_ecore_win32_event_handle_key_release(Ecore_Win32_Callback_Data *msg, + int is_keystroke) { 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); + e = (Ecore_Win32_Event_Key_Up *)calloc(1, sizeof(Ecore_Win32_Event_Key_Up)); + if (!e) return; + + if (is_keystroke) + { + if (!_ecore_win32_event_keystroke_get(LOWORD(msg->window_param), + &e->keyname, + &e->keysymbol, + &e->keycompose)) + { + free(e); + return; + } + goto store_key; + } + else + { + if (!_ecore_win32_event_char_get(LOWORD(msg->window_param), + &e->keyname, + &e->keysymbol, + &e->keycompose)) + { + free(e); + return; + } + } + + store_key: + e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA); + if (!e->window) + { + free(e); + return; + } + e->time = (double)msg->time / 1000.0; + + _ecore_win32_event_last_time = e->time; + + ecore_event_add(ECORE_WIN32_EVENT_KEY_UP, e, _ecore_win32_event_free_key_up, NULL); } -static int -_ecore_win32_event_keystroke_get(int key, - char **keyname, - char **keysymbol, - char **keycompose) +void +_ecore_win32_event_handle_button_press(Ecore_Win32_Callback_Data *msg, + int button) { - char *kn; - char *ks; - char *kc; + Ecore_Win32_Window *window; - *keyname = NULL; - *keysymbol = NULL; - *keycompose = NULL; + window = (void *)GetWindowLong(msg->window, GWL_USERDATA); - 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; -} - -void -_ecore_win32_event_handle_key_press(Ecore_Win32_Callback_Data *msg, - int is_keystroke) -{ - Ecore_Win32_Event_Key_Down *e; - - e = (Ecore_Win32_Event_Key_Down *)malloc(sizeof(Ecore_Win32_Event_Key_Down)); - if (!e) return; - - if (is_keystroke) - { - if (!_ecore_win32_event_keystroke_get(LOWORD(msg->window_param), - &e->keyname, - &e->keysymbol, - &e->keycompose)) - { - free(e); - return; - } - goto store_key; - } - else - { - if (!_ecore_win32_event_char_get(LOWORD(msg->window_param), - &e->keyname, - &e->keysymbol, - &e->keycompose)) - { - free(e); - return; - } - } - - store_key: - e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA); - if (!e->window) - { - free(e); - return; - } - e->time = (double)msg->time / 1000.0; - - _ecore_win32_event_last_time = e->time; - - ecore_event_add(ECORE_WIN32_EVENT_KEY_DOWN, e, _ecore_win32_event_free_key_down, NULL); -} - -void -_ecore_win32_event_handle_key_release(Ecore_Win32_Callback_Data *msg, - int is_keystroke) -{ - Ecore_Win32_Event_Key_Up *e; - - e = (Ecore_Win32_Event_Key_Up *)calloc(1, sizeof(Ecore_Win32_Event_Key_Up)); - if (!e) return; - - if (is_keystroke) - { - if (!_ecore_win32_event_keystroke_get(LOWORD(msg->window_param), - &e->keyname, - &e->keysymbol, - &e->keycompose)) - { - free(e); - return; - } - goto store_key; - } - else - { - if (!_ecore_win32_event_char_get(LOWORD(msg->window_param), - &e->keyname, - &e->keysymbol, - &e->keycompose)) - { - free(e); - return; - } - } - - store_key: - e->window = (void *)GetWindowLong(msg->window, GWL_USERDATA); - if (!e->window) - { - free(e); - return; - } - e->time = (double)msg->time / 1000.0; - - _ecore_win32_event_last_time = e->time; - - ecore_event_add(ECORE_WIN32_EVENT_KEY_UP, e, _ecore_win32_event_free_key_up, NULL); -} - -void -_ecore_win32_event_handle_button_press(Ecore_Win32_Callback_Data *msg, - int button) -{ - Ecore_Win32_Window *window; - - window = (void *)GetWindowLong(msg->window, GWL_USERDATA); - - if (button > 3) + if (button > 3) { Ecore_Win32_Event_Mouse_Wheel *e; @@ -850,4 +569,320 @@ e->time = _ecore_win32_event_last_time; 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; } =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32_glew.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- ecore_win32_glew.c 16 Nov 2007 19:32:25 -0000 1.1 +++ ecore_win32_glew.c 26 Jun 2008 05:11:16 -0000 1.2 @@ -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 @@ PIXELFORMATDESCRIPTOR pfd; int format; - RECT rect; struct _Ecore_Win32_Window *w; - DWORD flag; if (!window) return 0; @@ -85,7 +92,6 @@ return 1; no_glew_2_0: - no_glew_init: no_format: ReleaseDC (w->window, w->glew.dc); no_dc: =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32_private.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- ecore_win32_private.h 26 Jun 2008 04:30:29 -0000 1.5 +++ ecore_win32_private.h 26 Jun 2008 05:11:16 -0000 1.6 @@ -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 @@ }; -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; =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32_window.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- ecore_win32_window.c 26 Jun 2008 04:30:29 -0000 1.6 +++ ecore_win32_window.c 26 Jun 2008 05:11:16 -0000 1.7 @@ -2,13 +2,24 @@ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 */ -#include <stdio.h> - -#include <Ecore.h> +#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 "Ecore_Win32.h" #include "ecore_win32_private.h" +/***** Private declarations *****/ + + typedef enum _Ecore_Win32_Window_Z_Order Ecore_Win32_Window_Z_Order; enum _Ecore_Win32_Window_Z_Order { @@ -18,122 +29,17 @@ ECORE_WIN32_WINDOW_Z_ORDER_TOPMOST }; +static Ecore_Win32_Window *ecore_win32_window_internal_new(Ecore_Win32_Window *parent, + int x, + int y, + int width, + int height, + DWORD style); -static Ecore_Win32_Window * -ecore_win32_window_internal_new(Ecore_Win32_Window *parent, - int x, - int y, - int width, - int height, - DWORD style) -{ - RECT rect; - struct _Ecore_Win32_Window *w; - int minimal_width; - int minimal_height; - - w = (struct _Ecore_Win32_Window *)calloc(1, sizeof(struct _Ecore_Win32_Window)); - if (!w) - return NULL; - - printf (" *** ecore_win32_window_new : %p %d %d %d\n", - w, - width, height, GetSystemMetrics(SM_CXMIN)); - rect.left = 0; - rect.top = 0; - rect.right = width; - rect.bottom = height; - if (!AdjustWindowRect(&rect, style, FALSE)) - { - free(w); - return NULL; - } - printf (" * ecore : new debut : %ld %d %d\n", - rect.right - rect.left, GetSystemMetrics(SM_CXMIN), GetSystemMetrics(SM_CYMIN)); - - minimal_width = GetSystemMetrics(SM_CXMIN); - minimal_height = GetSystemMetrics(SM_CYMIN); -/* if (((rect.right - rect.left) < minimal_width) || */ -/* ((rect.bottom - rect.top) < minimal_height)) */ -/* { */ -/* fprintf (stderr, "[Ecore] [Win32] ERROR !!\n"); */ -/* fprintf (stderr, " Wrong size %ld\n", rect.right - rect.left); */ -/* free(w); */ -/* return NULL; */ -/* } */ - if ((rect.right - rect.left) < minimal_width) - { - rect.right = rect.left + minimal_width; - } - - w->window = CreateWindow(ECORE_WIN32_WINDOW_CLASS, "", - style, - x, y, - rect.right - rect.left, - rect.bottom - rect.top, - parent ? ((struct _Ecore_Win32_Window *)parent)->window : NULL, - NULL, _ecore_win32_instance, NULL); - if (!w->window) - { - free(w); - return NULL; - } - - SetLastError(0); - if (!SetWindowLong(w->window, GWL_USERDATA, (LONG)w) && (GetLastError() != 0)) - { - DestroyWindow(w->window); - free(w); - return NULL; - } - - w->backend = ECORE_WIN32_BACKEND_NONE; - - w->min_width = 0; - w->min_height = 0; - w->max_width = 32767; - w->max_height = 32767; - w->base_width = -1; - w->base_height = -1; - w->step_width = -1; - w->step_height = -1; - - w->state.iconified = 0; - w->state.modal = 0; - w->state.sticky = 0; - w->state.maximized_vert = 0; - w->state.maximized_horz = 0; - w->state.shaded = 0; - w->state.hidden = 0; - w->state.fullscreen = 0; - w->state.above = 0; - w->state.below = 0; - w->state.demands_attention = 0; - - w->type.desktop = 0; - w->type.dock = 0; - w->type.toolbar = 0; - w->type.menu = 0; - w->type.utility = 0; - w->type.splash = 0; - w->type.dialog = 0; - w->type.normal = 0; - - w->pointer_is_in = 0; - w->borderless = 0; - w->iconified = 0; - w->fullscreen = 0; - - printf (" *** ecore_win32_window_new fin : (%d %d) (%d %d)\n", - w->min_width, - w->min_height, - w->max_width, - w->max_height); - return w; -} +/***** API *****/ -EAPI Ecore_Win32_Window * +Ecore_Win32_Window * ecore_win32_window_new(Ecore_Win32_Window *parent, int x, int y, @@ -147,7 +53,7 @@ } /* simulate X11 override windows */ -EAPI Ecore_Win32_Window * +Ecore_Win32_Window * ecore_win32_window_override_new(Ecore_Win32_Window *parent, int x, int y, @@ -160,11 +66,9 @@ WS_POPUP); } -EAPI void +void ecore_win32_window_del(Ecore_Win32_Window *window) { - Ecore_Win32_Window *w; - if (!window) return; switch (((struct _Ecore_Win32_Window *)window)->backend) @@ -189,7 +93,7 @@ } /* -EAPI void +void ecore_win32_window_configure(Ecore_Win32_Window *window, Ecore_Win32_Window_Z_Order order, int x, @@ -220,7 +124,7 @@ } */ -EAPI void +void ecore_win32_window_move(Ecore_Win32_Window *window, int x, int y) @@ -241,7 +145,7 @@ TRUE); } -EAPI void +void ecore_win32_window_resize(Ecore_Win32_Window *window, int width, int height) @@ -293,7 +197,7 @@ printf ("ecore_win32_window_resize 4 : %d %d\n", width, height); } -EAPI void +void ecore_win32_window_move_resize(Ecore_Win32_Window *window, int x, int y, @@ -310,10 +214,10 @@ w = ((struct _Ecore_Win32_Window *)window); rect.left = 0; rect.top = 0; - if (width < w->min_width) width = w->min_width; - if (width > w->max_width) width = w->max_width; - if (height < w->min_height) height = w->min_height; - if (height > w->max_height) height = w->max_height; + if ((unsigned int)width < w->min_width) width = w->min_width; + if ((unsigned int)width > w->max_width) width = w->max_width; + if ((unsigned int)height < w->min_height) height = w->min_height; + if ((unsigned int)height > w->max_height) height = w->max_height; printf ("ecore_win32_window_move_resize 1 : %d %d\n", width, height); rect.right = width; rect.bottom = height; @@ -327,7 +231,7 @@ TRUE); } -EAPI void +void ecore_win32_window_geometry_get(Ecore_Win32_Window *window, int *x, int *y, @@ -380,7 +284,7 @@ if (height) *height = h; } -EAPI void +void ecore_win32_window_size_get(Ecore_Win32_Window *window, int *width, int *height) @@ -407,7 +311,7 @@ if (height) *height = rect.bottom - rect.top; } -EAPI void +void ecore_win32_window_size_min_set(Ecore_Win32_Window *window, unsigned int min_width, unsigned int min_height) @@ -422,7 +326,7 @@ w->min_height = min_height; } -EAPI void +void ecore_win32_window_size_min_get(Ecore_Win32_Window *window, unsigned int *min_width, unsigned int *min_height) @@ -437,7 +341,7 @@ if (min_height) *min_height = w->min_height; } -EAPI void +void ecore_win32_window_size_max_set(Ecore_Win32_Window *window, unsigned int max_width, unsigned int max_height) @@ -452,7 +356,7 @@ w->max_height = max_height; } -EAPI void +void ecore_win32_window_size_max_get(Ecore_Win32_Window *window, unsigned int *max_width, unsigned int *max_height) @@ -467,7 +371,7 @@ if (max_height) *max_height = w->max_height; } -EAPI void +void ecore_win32_window_size_base_set(Ecore_Win32_Window *window, unsigned int base_width, unsigned int base_height) @@ -482,7 +386,7 @@ w->base_height = base_height; } -EAPI void +void ecore_win32_window_size_base_get(Ecore_Win32_Window *window, unsigned int *base_width, unsigned int *base_height) @@ -497,7 +401,7 @@ if (base_height) *base_height = w->base_height; } -EAPI void +void ecore_win32_window_size_step_set(Ecore_Win32_Window *window, unsigned int step_width, unsigned int step_height) @@ -512,7 +416,7 @@ w->step_height = step_height; } -EAPI void +void ecore_win32_window_size_step_get(Ecore_Win32_Window *window, unsigned int *step_width, unsigned int *step_height) @@ -529,7 +433,7 @@ /* TODO: ecore_win32_window_shaped_set */ -EAPI void +void ecore_win32_window_show(Ecore_Win32_Window *window) { if (!window) return; @@ -540,7 +444,7 @@ } /* FIXME: seems to block the taskbar */ -EAPI void +void ecore_win32_window_hide(Ecore_Win32_Window *window) { if (!window) return; @@ -549,7 +453,7 @@ ShowWindow(((struct _Ecore_Win32_Window *)window)->window, SW_HIDE); } -EAPI void +void ecore_win32_window_raise(Ecore_Win32_Window *window) { if (!window) return; @@ -560,7 +464,7 @@ SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); } -EAPI void +void ecore_win32_window_lower(Ecore_Win32_Window *window) { if (!window) return; @@ -571,7 +475,7 @@ SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); } -EAPI void +void ecore_win32_window_title_set(Ecore_Win32_Window *window, const char *title) { @@ -582,7 +486,7 @@ SetWindowText(((struct _Ecore_Win32_Window *)window)->window, title); } -EAPI void +void ecore_win32_window_focus_set(Ecore_Win32_Window *window) { if (!window) return; @@ -590,7 +494,7 @@ SetFocus(((struct _Ecore_Win32_Window *)window)->window); } -EAPI void +void ecore_win32_window_iconified_set(Ecore_Win32_Window *window, int on) { @@ -616,7 +520,7 @@ ew->iconified = on; } -EAPI void +void ecore_win32_window_borderless_set(Ecore_Win32_Window *window, int on) { @@ -655,7 +559,7 @@ ew->borderless = on; } -EAPI void +void ecore_win32_window_fullscreen_set(Ecore_Win32_Window *window, int on) { @@ -699,7 +603,7 @@ } } -EAPI void +void ecore_win32_window_cursor_set(Ecore_Win32_Window *window, Ecore_Win32_Cursor *cursor) { @@ -707,7 +611,7 @@ GCL_HCURSOR, (LONG)cursor); } -EAPI void +void ecore_win32_window_state_set(Ecore_Win32_Window *window, Ecore_Win32_Window_State *state, unsigned int num) @@ -765,7 +669,7 @@ } } -EAPI void +void ecore_win32_window_state_request_send(Ecore_Win32_Window *window, Ecore_Win32_Window_State state, unsigned int set) @@ -874,7 +778,7 @@ } } -EAPI void +void ecore_win32_window_type_set(Ecore_Win32_Window *window, Ecore_Win32_Window_Type type) { @@ -908,4 +812,121 @@ ((struct _Ecore_Win32_Window *)window)->type.normal = 1; break; } +} + + +/***** Private functions definitions *****/ + +static Ecore_Win32_Window * +ecore_win32_window_internal_new(Ecore_Win32_Window *parent, + int x, + int y, + int width, + int height, + DWORD style) +{ + RECT rect; + struct _Ecore_Win32_Window *w; + int minimal_width; + int minimal_height; + + w = (struct _Ecore_Win32_Window *)calloc(1, sizeof(struct _Ecore_Win32_Window)); + if (!w) + return NULL; + + printf (" *** ecore_win32_window_new : %p %d %d %d\n", + w, + width, height, GetSystemMetrics(SM_CXMIN)); + rect.left = 0; + rect.top = 0; + rect.right = width; + rect.bottom = height; + if (!AdjustWindowRect(&rect, style, FALSE)) + { + free(w); + return NULL; + } + printf (" * ecore : new debut : %ld %d %d\n", + rect.right - rect.left, GetSystemMetrics(SM_CXMIN), GetSystemMetrics(SM_CYMIN)); + + minimal_width = GetSystemMetrics(SM_CXMIN); + minimal_height = GetSystemMetrics(SM_CYMIN); +/* if (((rect.right - rect.left) < minimal_width) || */ +/* ((rect.bottom - rect.top) < minimal_height)) */ +/* { */ +/* fprintf (stderr, "[Ecore] [Win32] ERROR !!\n"); */ +/* fprintf (stderr, " Wrong size %ld\n", rect.right - rect.left); */ +/* free(w); */ +/* return NULL; */ +/* } */ + if ((rect.right - rect.left) < minimal_width) + { + rect.right = rect.left + minimal_width; + } + + w->window = CreateWindow(ECORE_WIN32_WINDOW_CLASS, "", + style, + x, y, + rect.right - rect.left, + rect.bottom - rect.top, + parent ? ((struct _Ecore_Win32_Window *)parent)->window : NULL, + NULL, _ecore_win32_instance, NULL); + if (!w->window) + { + free(w); + return NULL; + } + + SetLastError(0); + if (!SetWindowLong(w->window, GWL_USERDATA, (LONG)w) && (GetLastError() != 0)) + { + DestroyWindow(w->window); + free(w); + return NULL; + } + + w->backend = ECORE_WIN32_BACKEND_NONE; + + w->min_width = 0; + w->min_height = 0; + w->max_width = 32767; + w->max_height = 32767; + w->base_width = -1; + w->base_height = -1; + w->step_width = -1; + w->step_height = -1; + + w->state.iconified = 0; + w->state.modal = 0; + w->state.sticky = 0; + w->state.maximized_vert = 0; + w->state.maximized_horz = 0; + w->state.shaded = 0; + w->state.hidden = 0; + w->state.fullscreen = 0; + w->state.above = 0; + w->state.below = 0; + w->state.demands_attention = 0; + + w->type.desktop = 0; + w->type.dock = 0; + w->type.toolbar = 0; + w->type.menu = 0; + w->type.utility = 0; + w->type.splash = 0; + w->type.dialog = 0; + w->type.normal = 0; + + w->pointer_is_in = 0; + w->borderless = 0; + w->iconified = 0; + w->fullscreen = 0; + + printf (" *** ecore_win32_window_new fin : (%d %d) (%d %d)\n", + w->min_width, + w->min_height, + w->max_width, + w->max_height); + + return w; } ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs