Enlightenment CVS committal
Author : doursse
Project : e17
Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_win32
Modified Files:
Ecore_Win32.h Makefile.am ecore_win32.c ecore_win32_ddraw.c
ecore_win32_direct3d.cpp ecore_win32_event.c
ecore_win32_private.h ecore_win32_window.c
Log Message:
add glew opengl and directdraw 16 bits backends, fix cursors, remove duplicated
mouse button up event, add states and types, like X, fix window_del and add an
window_override_new-like function
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/Ecore_Win32.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- Ecore_Win32.h 23 Sep 2007 11:08:52 -0000 1.2
+++ Ecore_Win32.h 16 Nov 2007 19:31:32 -0000 1.3
@@ -36,25 +36,84 @@
typedef void Ecore_Win32_Direct3D_Device;
typedef void Ecore_Win32_Direct3D_Sprite;
typedef void Ecore_Win32_Direct3D_Texture;
+typedef void Ecore_Win32_Glew_DC;
+
+/* Window state */
+
+typedef enum
+{
+ /** The window is iconified. */
+ ECORE_WIN32_WINDOW_STATE_ICONIFIED,
+ /** The window is a modal dialog box. */
+ ECORE_WIN32_WINDOW_STATE_MODAL,
+ /** The window manager should keep the window's position fixed
+ * even if the virtual desktop scrolls. */
+ ECORE_WIN32_WINDOW_STATE_STICKY,
+ /** The window has the maximum vertical size. */
+ ECORE_WIN32_WINDOW_STATE_MAXIMIZED_VERT,
+ /** The window has the maximum horizontal size. */
+ ECORE_WIN32_WINDOW_STATE_MAXIMIZED_HORZ,
+ /** The window has the maximum horizontal and vertical size. */
+ ECORE_WIN32_WINDOW_STATE_MAXIMIZED,
+ /** The window is shaded. */
+ ECORE_WIN32_WINDOW_STATE_SHADED,
+ /** The window is invisible (i.e. minimized/iconified) */
+ ECORE_WIN32_WINDOW_STATE_HIDDEN,
+ /** The window should fill the entire screen and have no
+ * window border/decorations */
+ ECORE_WIN32_WINDOW_STATE_FULLSCREEN,
+ /* The following are not documented because they are not
+ * intended for use in applications. */
+ ECORE_WIN32_WINDOW_STATE_ABOVE,
+ ECORE_WIN32_WINDOW_STATE_BELOW,
+ /* FIXME: Documentation */
+ ECORE_WIN32_WINDOW_STATE_DEMANDS_ATTENTION,
+ /* Unknown state */
+ ECORE_WIN32_WINDOW_STATE_UNKNOWN
+} Ecore_Win32_Window_State;
+
+/* Window type */
+
+typedef enum
+{
+ /* Desktop feature*/
+ ECORE_WIN32_WINDOW_TYPE_DESKTOP,
+ /* Dock window (should be on top of other windows */
+ ECORE_WIN32_WINDOW_TYPE_DOCK,
+ /* Toolbar window */
+ ECORE_WIN32_WINDOW_TYPE_TOOLBAR,
+ /* Menu window */
+ ECORE_WIN32_WINDOW_TYPE_MENU,
+ /* Small persistent utility window, such as a palette or toolbox */
+ ECORE_WIN32_WINDOW_TYPE_UTILITY,
+ /* Splash screen window displayed as an application is starting up */
+ ECORE_WIN32_WINDOW_TYPE_SPLASH,
+ /* Dialog window */
+ ECORE_WIN32_WINDOW_TYPE_DIALOG,
+ /* Normal top-level window */
+ ECORE_WIN32_WINDOW_TYPE_NORMAL,
+ /* Unknown type */
+ ECORE_WIN32_WINDOW_TYPE_UNKNOWN
+} Ecore_Win32_Window_Type;
/*cursor shapes */
typedef enum
{
- ECORE_WIN32_CURSO_SHAPE_APP_STARTING, /* Standard arrow and small hourglass
*/
- ECORE_WIN32_CURSO_SHAPE_ARROW, /* Standard arrow */
- ECORE_WIN32_CURSO_SHAPE_CROSS, /* Crosshair */
- ECORE_WIN32_CURSO_SHAPE_HAND, /* Hand */
- ECORE_WIN32_CURSO_SHAPE_HELP, /* Arrow and question mark */
- ECORE_WIN32_CURSO_SHAPE_I_BEAM, /* I-beam */
- ECORE_WIN32_CURSO_SHAPE_NO, /* Slashed circle */
- ECORE_WIN32_CURSO_SHAPE_SIZE_ALL, /* Four-pointed arrow pointing north,
south, east, and west */
- ECORE_WIN32_CURSO_SHAPE_SIZE_NESW, /* Double-pointed arrow pointing
northeast and southwest */
- ECORE_WIN32_CURSO_SHAPE_SIZE_NS, /* Double-pointed arrow pointing
north and south */
- ECORE_WIN32_CURSO_SHAPE_SIZE_NWSE, /* Double-pointed arrow pointing
northwest and southeast */
- ECORE_WIN32_CURSO_SHAPE_SIZE_WE, /* Double-pointed arrow pointing west
and east */
- ECORE_WIN32_CURSO_SHAPE_UP_ARROW, /* Vertical arrow */
- ECORE_WIN32_CURSO_SHAPE_WAIT /* Hourglass */
+ ECORE_WIN32_CURSOR_SHAPE_APP_STARTING, /* Standard arrow and small
hourglass */
+ ECORE_WIN32_CURSOR_SHAPE_ARROW, /* Standard arrow */
+ ECORE_WIN32_CURSOR_SHAPE_CROSS, /* Crosshair */
+ ECORE_WIN32_CURSOR_SHAPE_HAND, /* Hand */
+ ECORE_WIN32_CURSOR_SHAPE_HELP, /* Arrow and question mark */
+ ECORE_WIN32_CURSOR_SHAPE_I_BEAM, /* I-beam */
+ ECORE_WIN32_CURSOR_SHAPE_NO, /* Slashed circle */
+ ECORE_WIN32_CURSOR_SHAPE_SIZE_ALL, /* Four-pointed arrow pointing
north, south, east, and west */
+ ECORE_WIN32_CURSOR_SHAPE_SIZE_NESW, /* Double-pointed arrow pointing
northeast and southwest */
+ ECORE_WIN32_CURSOR_SHAPE_SIZE_NS, /* Double-pointed arrow pointing
north and south */
+ ECORE_WIN32_CURSOR_SHAPE_SIZE_NWSE, /* Double-pointed arrow pointing
northwest and southeast */
+ ECORE_WIN32_CURSOR_SHAPE_SIZE_WE, /* Double-pointed arrow pointing
west and east */
+ ECORE_WIN32_CURSOR_SHAPE_UP_ARROW, /* Vertical arrow */
+ ECORE_WIN32_CURSOR_SHAPE_WAIT /* Hourglass */
} Ecore_Win32_Cursor_Shape;
/* Events */
@@ -257,6 +316,11 @@
int y,
int width,
int height);
+EAPI Ecore_Win32_Window *ecore_win32_window_override_new(Ecore_Win32_Window
*parent,
+ int x,
+ int y,
+ int
width,
+ int
height);
EAPI void ecore_win32_window_del(Ecore_Win32_Window *window);
@@ -285,20 +349,36 @@
int *height);
EAPI void ecore_win32_window_size_min_set(Ecore_Win32_Window *window,
- int min_width,
- int min_height);
+ unsigned int min_width,
+ unsigned int min_height);
+
+EAPI void ecore_win32_window_size_min_get(Ecore_Win32_Window *window,
+ unsigned int *min_width,
+ unsigned int *min_height);
EAPI void ecore_win32_window_size_max_set(Ecore_Win32_Window *window,
- int max_width,
- int max_height);
+ unsigned int max_width,
+ unsigned int max_height);
+
+EAPI void ecore_win32_window_size_max_get(Ecore_Win32_Window *window,
+ unsigned int *max_width,
+ unsigned int *max_height);
EAPI void ecore_win32_window_size_base_set(Ecore_Win32_Window *window,
- int base_width,
- int base_height);
+ unsigned int base_width,
+ unsigned int base_height);
+
+EAPI void ecore_win32_window_size_base_get(Ecore_Win32_Window *window,
+ unsigned int *base_width,
+ unsigned int *base_height);
EAPI void ecore_win32_window_size_step_set(Ecore_Win32_Window *window,
- int step_width,
- int step_height);
+ unsigned int step_width,
+ unsigned int step_height);
+
+EAPI void ecore_win32_window_size_step_get(Ecore_Win32_Window *window,
+ unsigned int *step_width,
+ unsigned int *step_height);
EAPI void ecore_win32_window_show(Ecore_Win32_Window *window);
@@ -325,6 +405,17 @@
EAPI void ecore_win32_window_cursor_set(Ecore_Win32_Window *window,
Ecore_Win32_Cursor *cursor);
+EAPI void ecore_win32_window_state_set(Ecore_Win32_Window *window,
+ Ecore_Win32_Window_State *state,
+ unsigned int num);
+
+EAPI void ecore_win32_window_state_request_send(Ecore_Win32_Window
*window,
+ Ecore_Win32_Window_State state,
+ unsigned int set);
+
+EAPI void ecore_win32_window_type_set(Ecore_Win32_Window *window,
+ Ecore_Win32_Window_Type type);
+
/* Cursor */
EAPI Ecore_Win32_Cursor *ecore_win32_cursor_new(const void *pixels_and,
@@ -344,6 +435,8 @@
EAPI int ecore_win32_ddraw_init(Ecore_Win32_Window
*window);
+EAPI int ecore_win32_ddraw_16_init(Ecore_Win32_Window
*window);
+
EAPI void ecore_win32_ddraw_shutdown(Ecore_Win32_Window
*window);
EAPI Ecore_Win32_DDraw_Object
*ecore_win32_ddraw_object_get(Ecore_Win32_Window *window);
@@ -352,6 +445,8 @@
EAPI Ecore_Win32_DDraw_Surface
*ecore_win32_ddraw_surface_back_get(Ecore_Win32_Window *window);
+EAPI Ecore_Win32_DDraw_Surface
*ecore_win32_ddraw_surface_source_get(Ecore_Win32_Window *window);
+
EAPI int ecore_win32_ddraw_depth_get(Ecore_Win32_Window
*window);
/* Direct3D */
@@ -377,5 +472,16 @@
#ifdef __cplusplus
}
#endif
+
+/* OpenGL Glew */
+
+EAPI int ecore_win32_glew_init(Ecore_Win32_Window *window);
+
+EAPI void ecore_win32_glew_shutdown(Ecore_Win32_Window
*window);
+
+EAPI Ecore_Win32_Glew_DC *ecore_win32_glew_dc_get(Ecore_Win32_Window *window);
+
+EAPI int ecore_win32_glew_depth_get(Ecore_Win32_Window
*window);
+
#endif /* __ECORE_WIN32_H__ */
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/Makefile.am,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- Makefile.am 4 Nov 2007 09:29:20 -0000 1.3
+++ Makefile.am 16 Nov 2007 19:31:32 -0000 1.4
@@ -18,11 +18,12 @@
ecore_win32_direct3d.cpp \
ecore_win32_ddraw.c \
ecore_win32_event.c \
+ecore_win32_glew.c \
ecore_win32_window.c \
ecore_win32_private.h
libecore_win32_la_LIBADD = \
[EMAIL PROTECTED]@ @direct3d_libs@ \
[EMAIL PROTECTED]@ @direct3d_libs@ @glew_libs@ \
-lwsock32 \
$(top_builddir)/src/lib/ecore/libecore.la
@@ -37,5 +38,6 @@
ecore_win32_direct3d.cpp \
ecore_win32_ddraw.c \
ecore_win32_event.c \
+ecore_win32_glew.c \
ecore_win32_window.c \
ecore_win32_private.h
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_win32.c 23 Sep 2007 11:08:52 -0000 1.2
+++ ecore_win32.c 16 Nov 2007 19:31:32 -0000 1.3
@@ -8,17 +8,6 @@
#include "ecore_win32_private.h"
-/*
-<raster> hmmm
-<raster> yeah window's way of doing eventys is very different
-<raster> not select + timeout
-<raster> to doa timeout u need to queue up a timed message
-<raster> for timers
-<raster> etc.
-*/
-
-/* typedef LRESULT CALLBACK _ecore_win32_event_callback(HWND, UINT, WPARAM,
LPARAM); */
-
Ecore_List *_ecore_win32_windows_list = NULL;
HINSTANCE _ecore_win32_instance = NULL;
double _ecore_win32_double_click_time = 0.25;
@@ -147,7 +136,12 @@
return 0;
/* Window notifications */
case WM_CREATE:
- printf (" * ecore message : create\n");
+ {
+ RECT rect;
+ GetClientRect(window, &rect);
+ printf (" *** ecore message : create %ld %ld\n",
+ rect.right - rect.left, rect.bottom - rect.top);
+ }
_ecore_win32_event_handle_create_notify(data);
return 0;
case WM_DESTROY:
@@ -155,7 +149,12 @@
_ecore_win32_event_handle_destroy_notify(data);
return 0;
case WM_SHOWWINDOW:
- printf (" * ecore message : show\n");
+ {
+ RECT rect;
+ GetClientRect(window, &rect);
+ printf (" *** ecore message : show %ld %ld\n",
+ rect.right - rect.left, rect.bottom - rect.top);
+ }
if ((data->data_param == SW_OTHERUNZOOM) ||
(data->data_param == SW_OTHERUNZOOM))
return 0;
@@ -179,15 +178,27 @@
case WM_SIZING:
printf (" * ecore message : sizing\n");
_ecore_win32_event_handle_resize(data);
+ _ecore_win32_event_handle_configure_notify(data);
return TRUE;
case WM_SIZE:
printf (" * ecore message : sized\n");
return 0;
- case WM_WINDOWPOSCHANGING:
- printf (" * ecore message : WM_WINDOWPOSCHANGING\n");
- return 0;
+/* case WM_WINDOWPOSCHANGING: */
+/* { */
+/* RECT rect; */
+/* GetClientRect(window, &rect); */
+/* printf (" *** ecore message : WINDOWPOSCHANGING %ld %ld\n", */
+/* rect.right - rect.left, rect.bottom - rect.top); */
+/* } */
+/* _ecore_win32_event_handle_configure_notify(data); */
+/* return 0; */
case WM_WINDOWPOSCHANGED:
- printf (" * ecore message : WM_WINDOWPOSCHANGED\n");
+ {
+ RECT rect;
+ GetClientRect(window, &rect);
+ printf (" *** ecore message : WINDOWPOSCHANGED %ld %ld\n",
+ rect.right - rect.left, rect.bottom - rect.top);
+ }
_ecore_win32_event_handle_configure_notify(data);
return 0;
case WM_ENTERSIZEMOVE :
@@ -288,6 +299,7 @@
return _ecore_win32_init_count;
}
+ printf (" *** ecore_win32_init\n");
_ecore_win32_instance = GetModuleHandle(0);
if (!_ecore_win32_instance)
return 0;
@@ -340,6 +352,17 @@
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++;
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32_ddraw.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_win32_ddraw.c 28 Sep 2007 23:44:14 -0000 1.2
+++ ecore_win32_ddraw.c 16 Nov 2007 19:31:32 -0000 1.3
@@ -21,6 +21,13 @@
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(DirectDrawCreateEx(0, (void **)&w->ddraw.object,
&IID_IDirectDraw7, NULL)))
@@ -81,6 +88,8 @@
w->ddraw.depth = pixel_format.dwRGBBitCount;
+ w->backend = ECORE_WIN32_BACKEND_DIRECTDRAW;
+
return 1;
no_get_pix_fmt:
@@ -100,6 +109,122 @@
return 0;
}
+EAPI int
+ecore_win32_ddraw_16_init(Ecore_Win32_Window *window)
+{
+#ifdef HAVE_DIRECTDRAW
+ DDSURFACEDESC2 surface_desc;
+ DDPIXELFORMAT pixel_format;
+ RECT rect;
+ DDSURFACEDESC2 *sd;
+ 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(DirectDrawCreateEx(0, (void **)&w->ddraw.object,
+ &IID_IDirectDraw7, NULL)))
+ return 0;
+
+ if (FAILED(IDirectDraw7_SetCooperativeLevel(w->ddraw.object,
+ 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;
+
+ /* Hack to cleanly remove a warning */
+ sd = &surface_desc;
+ if (FAILED(IDirectDraw7_CreateSurface(w->ddraw.object,
+ (DDSURFACEDESC *)sd,
+ &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;
+
+ /* Hack to cleanly remove a warning */
+ sd = &surface_desc;
+ if (FAILED(IDirectDraw7_CreateSurface(w->ddraw.object,
+ (DDSURFACEDESC *)sd,
+ &w->ddraw.surface_back,
+ NULL)))
+ goto no_back_surf;
+
+ ZeroMemory(&pixel_format, sizeof(pixel_format));
+ pixel_format.dwSize = sizeof(pixel_format);
+
+ if (FAILED(IDirectDrawSurface7_GetPixelFormat(w->ddraw.surface_primary,
+ &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;
+
+ /* Hack to cleanly remove a warning */
+ sd = &surface_desc;
+ if (FAILED(IDirectDraw7_CreateSurface(w->ddraw.object,
+ (DDSURFACEDESC *)sd,
+ &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:
+ IDirectDrawSurface7_Release(w->ddraw.surface_primary);
+ no_primary_surf:
+ no_coop_level:
+ IDirectDraw7_Release(w->ddraw.object);
+#endif /* HAVE_DIRECTDRAW */
+
+ return 0;
+}
+
EAPI void
ecore_win32_ddraw_shutdown(Ecore_Win32_Window *window)
{
@@ -117,6 +242,27 @@
w->ddraw.surface_primary = NULL;
}
+ if (w->ddraw.surface_source)
+ {
+ DDSURFACEDESC2 surface_desc;
+
+ ZeroMemory(&surface_desc, sizeof(surface_desc));
+ surface_desc.dwSize = sizeof(surface_desc);
+
+ if (IDirectDrawSurface7_Lock(w->ddraw.surface_source, NULL,
+ &surface_desc,
+ DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR,
+ NULL) == DD_OK)
+ {
+ free(surface_desc.lpSurface);
+ if (IDirectDrawSurface7_Unlock(w->ddraw.surface_source, NULL) ==
DD_OK)
+ {
+ IDirectDrawSurface7_Release(w->ddraw.surface_source);
+ }
+ }
+ w->ddraw.surface_source = NULL;
+ }
+
/* no need to release the back surface. the previous call free its memory */
if (w->ddraw.clipper)
@@ -130,6 +276,8 @@
IDirectDraw7_Release(w->ddraw.object);
w->ddraw.object = NULL;
}
+
+ w->backend = ECORE_WIN32_BACKEND_NONE;
#endif /* HAVE_DIRECTDRAW */
}
@@ -158,6 +306,16 @@
{
#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 */
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32_direct3d.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- ecore_win32_direct3d.cpp 26 Aug 2007 11:17:21 -0000 1.1
+++ ecore_win32_direct3d.cpp 16 Nov 2007 19:31:32 -0000 1.2
@@ -5,6 +5,7 @@
#include "config.h"
#include "ecore_win32_private.h"
#include "Ecore_Win32.h"
+#include <cstdio>
extern "C" {
@@ -27,6 +28,13 @@
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;
@@ -96,6 +104,15 @@
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:
@@ -126,17 +143,24 @@
w = (struct _Ecore_Win32_Window *)window;
+ printf ("0\n");
if (w->d3d.texture)
w->d3d.texture->Release();
- if (w->d3d.sprite)
- w->d3d.sprite->Release();
-
- if (w->d3d.device)
- w->d3d.device->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 */
}
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32_event.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_win32_event.c 23 Sep 2007 11:08:52 -0000 1.2
+++ ecore_win32_event.c 16 Nov 2007 19:31:32 -0000 1.3
@@ -443,9 +443,10 @@
e = (Ecore_Win32_Event_Mouse_Wheel *)calloc(1,
sizeof(Ecore_Win32_Event_Mouse_Wheel));
if (!e) return;
+ e->window = window;
e->direction = 0;
/* wheel delta is positive or negative, never 0 */
- e->z = GET_WHEEL_DELTA_WPARAM(msg->window_param) > 0 ? 1 : -1;
+ e->z = GET_WHEEL_DELTA_WPARAM(msg->window_param) > 0 ? -1 : 1;
e->x = GET_X_LPARAM(msg->data_param);
e->y = GET_Y_LPARAM(msg->data_param);
e->time = (double)msg->time / 1000.0;
@@ -530,7 +531,7 @@
void
_ecore_win32_event_handle_button_release(Ecore_Win32_Callback_Data *msg,
- int button)
+ int button)
{
Ecore_Win32_Window *window;
@@ -584,18 +585,6 @@
ecore_event_add(ECORE_WIN32_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL);
}
- Ecore_Win32_Event_Mouse_Button_Up *e;
-
- e = (Ecore_Win32_Event_Mouse_Button_Up *)calloc(1,
sizeof(Ecore_Win32_Event_Mouse_Button_Up));
- if (!e) return;
-
- e->window = _ecore_win32_event_window_get(msg->window);
- e->button = button;
- e->x = GET_X_LPARAM(msg->data_param);
- e->y = GET_Y_LPARAM(msg->data_param);
- e->time = (double)msg->time / 1000.0;
-
- ecore_event_add(ECORE_WIN32_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL);
printf (" * ecore event button release\n");
}
@@ -751,6 +740,7 @@
if (!e) return;
e->window = _ecore_win32_event_window_get(msg->window);
+
e->time = _ecore_win32_event_last_time;
ecore_event_add(ECORE_WIN32_EVENT_WINDOW_CREATE, e, NULL, NULL);
@@ -765,6 +755,7 @@
if (!e) return;
e->window = _ecore_win32_event_window_get(msg->window);
+
e->time = _ecore_win32_event_last_time;
if (e->window == _ecore_win32_event_last_window)
_ecore_win32_event_last_window = NULL;
@@ -780,6 +771,7 @@
if (!e) return;
e->window = _ecore_win32_event_window_get(msg->window);
+
e->time = _ecore_win32_event_last_time;
ecore_event_add(ECORE_WIN32_EVENT_WINDOW_SHOW, e, NULL, NULL);
@@ -794,6 +786,7 @@
if (!e) return;
e->window = _ecore_win32_event_window_get(msg->window);
+
e->time = _ecore_win32_event_last_time;
ecore_event_add(ECORE_WIN32_EVENT_WINDOW_HIDE, e, NULL, NULL);
@@ -802,7 +795,7 @@
void
_ecore_win32_event_handle_configure_notify(Ecore_Win32_Callback_Data *msg)
{
- RECT rect;
+ WINDOWINFO wi;
Ecore_Win32_Event_Window_Configure *e;
WINDOWPOS *window_pos;
@@ -810,18 +803,20 @@
if (!e) return;
window_pos = (WINDOWPOS *)msg->data_param;
- if (!GetClientRect(window_pos->hwnd, &rect))
+ wi.cbSize = sizeof(WINDOWINFO);
+ if (!GetWindowInfo(window_pos->hwnd, &wi))
{
free(e);
return;
}
+ printf ("_ecore_win32_event_handle_configure_notify\n");
e->window = _ecore_win32_event_window_get(window_pos->hwnd);
e->abovewin = _ecore_win32_event_window_get(window_pos->hwndInsertAfter);
- e->x = rect.left;
- e->y = rect.top;
- e->width = rect.right - rect.left;
- e->height = rect.bottom - rect.top;
+ e->x = wi.rcClient.left;
+ e->y = wi.rcClient.top;
+ e->width = wi.rcClient.right - wi.rcClient.left;
+ e->height = wi.rcClient.bottom - wi.rcClient.top;
e->time = _ecore_win32_event_last_time;
ecore_event_add(ECORE_WIN32_EVENT_WINDOW_CONFIGURE, e, NULL, NULL);
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32_private.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_win32_private.h 23 Sep 2007 11:08:52 -0000 1.2
+++ ecore_win32_private.h 16 Nov 2007 19:31:32 -0000 1.3
@@ -6,7 +6,9 @@
#define __ECORE_WIN32_PRIVATE_H__
+#define WIN32_LEAN_AND_MEAN
#include <windows.h>
+#undef WIN32_LEAN_AND_MEAN
#ifdef HAVE_DIRECTDRAW
# include <ddraw.h>
#endif /* HAVE_DIRECTDRAW */
@@ -15,6 +17,7 @@
# include <d3dx9.h>
#endif /* HAVE_DIRECT3D */
+#include "Ecore.h"
#include <Ecore_Data.h>
#include "Ecore_Win32.h"
@@ -23,6 +26,15 @@
#define ECORE_WIN32_WINDOW_CLASS "Ecore_Win32_Window_Class"
+typedef enum
+{
+ ECORE_WIN32_BACKEND_DIRECTDRAW,
+ ECORE_WIN32_BACKEND_DIRECTDRAW_16,
+ ECORE_WIN32_BACKEND_DIRECT3D,
+ ECORE_WIN32_BACKEND_GLEW,
+ ECORE_WIN32_BACKEND_NONE
+}Ecore_Win32_Backend;
+
typedef struct _Ecore_Win32_Callback_Data Ecore_Win32_Callback_Data;
struct _Ecore_Win32_Callback_Data
@@ -39,13 +51,16 @@
struct _Ecore_Win32_Window
{
- HWND window;
+ HWND window;
+
+ Ecore_Win32_Backend backend;
#ifdef HAVE_DIRECTDRAW
struct {
LPDIRECTDRAW object;
LPDIRECTDRAWSURFACE surface_primary;
LPDIRECTDRAWSURFACE surface_back;
+ LPDIRECTDRAWSURFACE surface_source;
LPDIRECTDRAWCLIPPER clipper;
int depth;
} ddraw;
@@ -53,30 +68,62 @@
#ifdef HAVE_DIRECT3D
struct {
- LPDIRECT3D9 object;
- LPDIRECT3DDEVICE9 device;
- LPD3DXSPRITE sprite;
- LPDIRECT3DTEXTURE9 texture;
- int depth;
+ LPDIRECT3D9 object;
+ LPDIRECT3DDEVICE9 device;
+ LPD3DXSPRITE sprite;
+ LPDIRECT3DTEXTURE9 texture;
+ int depth;
} d3d;
#endif /* HAVE_DIRECT3D */
- DWORD style; /* used to go fullscreen to normal */
- RECT rect; /* used to go fullscreen to normal */
+#ifdef HAVE_OPENGL_GLEW
+ struct {
+ HDC dc;
+ int depth;
+ } glew;
+#endif /* HAVE_OPENGL_GLEW */
- unsigned int min_width;
- unsigned int min_height;
- unsigned int max_width;
- unsigned int max_height;
- unsigned int base_width;
- unsigned int base_height;
- unsigned int step_width;
- unsigned int step_height;
-
- unsigned int pointer_is_in : 1;
- unsigned int borderless : 1;
- unsigned int iconified : 1;
- unsigned int fullscreen : 1;
+ DWORD style; /* used to go fullscreen to normal */
+ RECT rect; /* used to go fullscreen to normal */
+
+ unsigned int min_width;
+ unsigned int min_height;
+ unsigned int max_width;
+ unsigned int max_height;
+ unsigned int base_width;
+ unsigned int base_height;
+ unsigned int step_width;
+ unsigned int step_height;
+
+ struct {
+ unsigned int iconified : 1;
+ unsigned int modal : 1;
+ unsigned int sticky : 1;
+ unsigned int maximized_vert : 1;
+ unsigned int maximized_horz : 1;
+ unsigned int shaded : 1;
+ unsigned int hidden : 1;
+ unsigned int fullscreen : 1;
+ unsigned int above : 1;
+ unsigned int below : 1;
+ unsigned int demands_attention : 1;
+ } state;
+
+ struct {
+ unsigned int desktop : 1;
+ unsigned int dock : 1;
+ unsigned int toolbar : 1;
+ unsigned int menu : 1;
+ unsigned int utility : 1;
+ unsigned int splash : 1;
+ unsigned int dialog : 1;
+ unsigned int normal : 1;
+ } type;
+
+ unsigned int pointer_is_in : 1;
+ unsigned int borderless : 1;
+ unsigned int iconified : 1;
+ unsigned int fullscreen : 1;
};
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_win32/ecore_win32_window.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- ecore_win32_window.c 23 Sep 2007 11:08:52 -0000 1.2
+++ ecore_win32_window.c 16 Nov 2007 19:31:32 -0000 1.3
@@ -2,6 +2,8 @@
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
+#include <stdio.h>
+
#include <Ecore.h>
#include "ecore_win32_private.h"
@@ -17,12 +19,13 @@
};
-EAPI Ecore_Win32_Window *
-ecore_win32_window_new(Ecore_Win32_Window *parent,
- int x,
- int y,
- int width,
- int height)
+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;
@@ -33,33 +36,38 @@
if (!w)
return NULL;
- printf (" * ecore : new debut : %d %d %d\n",
+ 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, WS_OVERLAPPEDWINDOW | WS_SIZEBOX, FALSE))
+ if (!AdjustWindowRect(&rect, style, FALSE))
{
free(w);
return NULL;
}
- printf (" * ecore : new debut : %ld %d\n",
- rect.right - rect.left, GetSystemMetrics(SM_CXMIN));
+ 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))
+/* 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)
{
- printf ("[Ecore] [Win32] ERROR !!\n");
- printf (" Wrong size %ld\n", rect.right - rect.left);
- free(w);
- return NULL;
+ rect.right = rect.left + minimal_width;
}
w->window = CreateWindow(ECORE_WIN32_WINDOW_CLASS, "",
- WS_OVERLAPPEDWINDOW | WS_SIZEBOX,
+ style,
x, y,
rect.right - rect.left,
rect.bottom - rect.top,
@@ -79,23 +87,79 @@
return NULL;
}
- w->min_width = 0;
- w->min_height = 0;
- w->max_width = 32767;
- w->max_height = 32767;
- w->base_width = -1;
+ 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_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;
+ 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;
}
+EAPI Ecore_Win32_Window *
+ecore_win32_window_new(Ecore_Win32_Window *parent,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ return ecore_win32_window_internal_new(parent,
+ x, y,
+ width, height,
+ WS_OVERLAPPEDWINDOW | WS_SIZEBOX);
+}
+
+/* simulate X11 override windows */
+EAPI Ecore_Win32_Window *
+ecore_win32_window_override_new(Ecore_Win32_Window *parent,
+ int x,
+ int y,
+ int width,
+ int height)
+{
+ return ecore_win32_window_internal_new(parent,
+ x, y,
+ width, height,
+ WS_POPUP);
+}
+
EAPI void
ecore_win32_window_del(Ecore_Win32_Window *window)
{
@@ -112,11 +176,31 @@
break;
}
}
- ecore_list_remove(_ecore_win32_windows_list);
+/* ecore_list_remove(_ecore_win32_windows_list); */
+
+ switch (((struct _Ecore_Win32_Window *)window)->backend)
+ {
+ case ECORE_WIN32_BACKEND_DIRECTDRAW:
+ ecore_win32_ddraw_shutdown(window);
+ break;
+ case ECORE_WIN32_BACKEND_DIRECTDRAW_16:
+/* ecore_win32_ddraw_shutdown(window); */
+ break;
+ case ECORE_WIN32_BACKEND_DIRECT3D:
+ printf ("d3d shut 0 \n");
+ ecore_win32_direct3d_shutdown(window);
+ printf ("d3d shut 1 \n");
+ break;
+ case ECORE_WIN32_BACKEND_GLEW:
+ ecore_win32_glew_shutdown(window);
+ break;
+ default:
+ break;
+ }
- ecore_win32_ddraw_shutdown(window);
DestroyWindow(((struct _Ecore_Win32_Window *)window)->window);
free(window);
+ printf ("ecore_win32_window_del\n");
}
/*
@@ -161,6 +245,7 @@
if (!window) return;
+ printf ("ecore_win32_window_move %p : %d %d\n", window, x, y);
w = ((struct _Ecore_Win32_Window *)window)->window;
if (!GetWindowRect(w, &rect))
return;
@@ -187,24 +272,40 @@
w = (struct _Ecore_Win32_Window *)window;
if (!GetWindowRect(w->window, &rect)) return;
+ printf ("ecore_win32_window_resize 0 : %p (%d %d) (%d %d) (%d %d)\n",
+ w,
+ w->min_width,
+ w->min_height,
+ w->max_width,
+ w->max_height,
+ width,
+ height);
+
x = rect.left;
y = rect.top;
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 (width < w->min_width) width = w->min_width; */
+/* if (width > w->max_width) width = w->max_width; */
+/* printf ("ecore_win32_window_resize 1 : %d %d %d\n", w->min_height,
w->max_height, height); */
+/* if (height < w->min_height) height = w->min_height; */
+/* printf ("ecore_win32_window_resize 2 : %d %d\n", w->max_height, height);
*/
+/* if (height > w->max_height) height = w->max_height; */
+/* printf ("ecore_win32_window_resize 3 : %d %d\n", w->max_height, height);
*/
rect.right = width;
rect.bottom = height;
style = GetWindowLong(w->window, GWL_STYLE);
if (!AdjustWindowRect(&rect, style, FALSE))
return;
- MoveWindow(w->window, x, y,
- rect.right - rect.left,
- rect.bottom - rect.top,
- TRUE);
+ if (!MoveWindow(w->window, x, y,
+ rect.right - rect.left,
+ rect.bottom - rect.top,
+ FALSE))
+ {
+ printf (" MEEERDE !!!\n");
+ }
+ printf ("ecore_win32_window_resize 4 : %d %d\n", width, height);
}
EAPI void
@@ -220,6 +321,7 @@
if (!window) return;
+ printf ("ecore_win32_window_move_resize 0 : %p %d %d\n", window, width,
height);
w = ((struct _Ecore_Win32_Window *)window);
rect.left = 0;
rect.top = 0;
@@ -227,6 +329,7 @@
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;
+ printf ("ecore_win32_window_move_resize 1 : %d %d\n", width, height);
rect.right = width;
rect.bottom = height;
style = GetWindowLong(w->window, GWL_STYLE);
@@ -250,6 +353,7 @@
int w;
int h;
+ printf ("ecore_win32_window_geometry_get %p\n", window);
if (!window)
{
if (x) *x = 0;
@@ -298,6 +402,7 @@
{
RECT rect;
+ printf ("ecore_win32_window_size_get %p\n", window);
if (!window)
{
if (width) *width = GetSystemMetrics(SM_CXSCREEN);
@@ -319,39 +424,72 @@
EAPI void
ecore_win32_window_size_min_set(Ecore_Win32_Window *window,
- int min_width,
- int min_height)
+ unsigned int min_width,
+ unsigned int min_height)
{
struct _Ecore_Win32_Window *w;
if (!window) return;
+ printf ("ecore_win32_window_size_min_set : %p %d %d\n", window, min_width,
min_height);
w = (struct _Ecore_Win32_Window *)window;
w->min_width = min_width;
w->min_height = min_height;
}
EAPI void
+ecore_win32_window_size_min_get(Ecore_Win32_Window *window,
+ unsigned int *min_width,
+ unsigned int *min_height)
+{
+ struct _Ecore_Win32_Window *w;
+
+ if (!window) return;
+
+ printf ("ecore_win32_window_size_min_get : %p %d %d\n", window,
w->min_width, w->min_height);
+ w = (struct _Ecore_Win32_Window *)window;
+ if (min_width) *min_width = w->min_width;
+ if (min_height) *min_height = w->min_height;
+}
+
+EAPI void
ecore_win32_window_size_max_set(Ecore_Win32_Window *window,
- int max_width,
- int max_height)
+ unsigned int max_width,
+ unsigned int max_height)
{
struct _Ecore_Win32_Window *w;
if (!window) return;
+ printf ("ecore_win32_window_size_max_set : %p %d %d\n", window, max_width,
max_height);
w = (struct _Ecore_Win32_Window *)window;
w->max_width = max_width;
w->max_height = max_height;
}
EAPI void
+ecore_win32_window_size_max_get(Ecore_Win32_Window *window,
+ unsigned int *max_width,
+ unsigned int *max_height)
+{
+ struct _Ecore_Win32_Window *w;
+
+ if (!window) return;
+
+ printf ("ecore_win32_window_size_max_get : %p %d %d\n", window,
w->max_width, w->max_height);
+ w = (struct _Ecore_Win32_Window *)window;
+ if (max_width) *max_width = w->max_width;
+ if (max_height) *max_height = w->max_height;
+}
+
+EAPI void
ecore_win32_window_size_base_set(Ecore_Win32_Window *window,
- int base_width,
- int base_height)
+ unsigned int base_width,
+ unsigned int base_height)
{
struct _Ecore_Win32_Window *w;
+ printf ("ecore_win32_window_size_base_set : %p %d %d\n", window,
base_width, base_height);
if (!window) return;
w = (struct _Ecore_Win32_Window *)window;
@@ -360,12 +498,28 @@
}
EAPI void
+ecore_win32_window_size_base_get(Ecore_Win32_Window *window,
+ unsigned int *base_width,
+ unsigned int *base_height)
+{
+ struct _Ecore_Win32_Window *w;
+
+ if (!window) return;
+
+ printf ("ecore_win32_window_size_base_get : %p %d %d\n", window,
w->base_width, w->base_height);
+ w = (struct _Ecore_Win32_Window *)window;
+ if (base_width) *base_width = w->base_width;
+ if (base_height) *base_height = w->base_height;
+}
+
+EAPI void
ecore_win32_window_size_step_set(Ecore_Win32_Window *window,
- int step_width,
- int step_height)
+ unsigned int step_width,
+ unsigned int step_height)
{
struct _Ecore_Win32_Window *w;
+ printf ("ecore_win32_window_size_step_set : %p %d %d\n", window,
step_width, step_height);
if (!window) return;
w = (struct _Ecore_Win32_Window *)window;
@@ -373,6 +527,21 @@
w->step_height = step_height;
}
+EAPI void
+ecore_win32_window_size_step_get(Ecore_Win32_Window *window,
+ unsigned int *step_width,
+ unsigned int *step_height)
+{
+ struct _Ecore_Win32_Window *w;
+
+ if (!window) return;
+
+ printf ("ecore_win32_window_size_step_get : %p %d %d\n", window,
w->step_width, w->step_height);
+ w = (struct _Ecore_Win32_Window *)window;
+ if (step_width) *step_width = w->step_width;
+ if (step_height) *step_height = w->step_height;
+}
+
/* TODO: ecore_win32_window_shaped_set */
EAPI void
@@ -380,6 +549,7 @@
{
if (!window) return;
+ printf (" ** ecore_win32_window_show %p\n", window);
ShowWindow(((struct _Ecore_Win32_Window *)window)->window, SW_SHOWNORMAL);
UpdateWindow(((struct _Ecore_Win32_Window *)window)->window);
}
@@ -390,6 +560,7 @@
{
if (!window) return;
+ printf (" ** ecore_win32_window_hide %p\n", window);
ShowWindow(((struct _Ecore_Win32_Window *)window)->window, SW_HIDE);
}
@@ -398,6 +569,7 @@
{
if (!window) return;
+ printf (" ** ecore_win32_window_raise %p\n", window);
SetWindowPos(((struct _Ecore_Win32_Window *)window)->window,
HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
@@ -408,6 +580,7 @@
{
if (!window) return;
+ printf (" ** ecore_win32_window_lower %p\n", window);
SetWindowPos(((struct _Ecore_Win32_Window *)window)->window,
HWND_BOTTOM, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
@@ -469,6 +642,7 @@
if (!window) return;
+ printf (" ** ecore_win32_window_borderless_set %p %d\n", window, on);
ew = (struct _Ecore_Win32_Window *)window;
if (((ew->borderless) && (on)) ||
((!ew->borderless) && (!on)))
@@ -546,4 +720,207 @@
{
SetClassLong(((struct _Ecore_Win32_Window *)window)->window,
GCL_HCURSOR, (LONG)cursor);
+}
+
+EAPI void
+ecore_win32_window_state_set(Ecore_Win32_Window *window,
+ Ecore_Win32_Window_State *state,
+ unsigned int num)
+{
+ unsigned int i;
+
+ if (!num)
+ return;
+
+ for (i = 0; i < num; i++)
+ {
+ switch (state[i])
+ {
+ case ECORE_WIN32_WINDOW_STATE_ICONIFIED:
+ ((struct _Ecore_Win32_Window *)window)->state.iconified = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_MODAL:
+ ((struct _Ecore_Win32_Window *)window)->state.modal = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_STICKY:
+ ((struct _Ecore_Win32_Window *)window)->state.sticky = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_MAXIMIZED_VERT:
+ ((struct _Ecore_Win32_Window *)window)->state.maximized_vert = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_MAXIMIZED_HORZ:
+ ((struct _Ecore_Win32_Window *)window)->state.maximized_horz = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_MAXIMIZED:
+ ((struct _Ecore_Win32_Window *)window)->state.maximized_horz = 1;
+ ((struct _Ecore_Win32_Window *)window)->state.maximized_vert = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_SHADED:
+ ((struct _Ecore_Win32_Window *)window)->state.shaded = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_HIDDEN:
+ ((struct _Ecore_Win32_Window *)window)->state.hidden = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_FULLSCREEN:
+ ((struct _Ecore_Win32_Window *)window)->state.fullscreen = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_ABOVE:
+ ((struct _Ecore_Win32_Window *)window)->state.above = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_BELOW:
+ ((struct _Ecore_Win32_Window *)window)->state.below = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_DEMANDS_ATTENTION:
+ ((struct _Ecore_Win32_Window *)window)->state.demands_attention =
1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_UNKNOWN:
+ /* nothing to be done */
+ break;
+ }
+ }
+}
+
+EAPI void
+ecore_win32_window_state_request_send(Ecore_Win32_Window *window,
+ Ecore_Win32_Window_State state,
+ unsigned int set)
+{
+ if (!window)
+ return;
+
+ switch (state)
+ {
+ case ECORE_WIN32_WINDOW_STATE_ICONIFIED:
+ if (((struct _Ecore_Win32_Window *)window)->state.iconified)
+ ecore_win32_window_iconified_set(window, set);
+ break;
+ case ECORE_WIN32_WINDOW_STATE_MODAL:
+ ((struct _Ecore_Win32_Window *)window)->state.modal = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_STICKY:
+ ((struct _Ecore_Win32_Window *)window)->state.sticky = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_MAXIMIZED_VERT:
+ if (((struct _Ecore_Win32_Window *)window)->state.maximized_vert)
+ {
+ RECT rect;
+ int y;
+ int height;
+
+ if (!SystemParametersInfo(SPI_GETWORKAREA, 0,
+ &rect, 0))
+ break;
+ y = rect.top;
+ height = rect.bottom - rect.top;
+
+ if (!GetClientRect(((struct _Ecore_Win32_Window *)window)->window,
+ &rect))
+ break;
+
+ MoveWindow(window, rect.left, y,
+ rect.right - rect.left,
+ height,
+ TRUE);
+ }
+ break;
+ case ECORE_WIN32_WINDOW_STATE_MAXIMIZED_HORZ:
+ if (((struct _Ecore_Win32_Window *)window)->state.maximized_horz)
+ {
+ RECT rect;
+
+ if (!GetClientRect(((struct _Ecore_Win32_Window *)window)->window,
+ &rect))
+ break;
+
+ MoveWindow(window, 0, rect.top,
+ GetSystemMetrics(SM_CXSCREEN),
+ rect.bottom - rect.top,
+ TRUE);
+ }
+ break;
+ case ECORE_WIN32_WINDOW_STATE_MAXIMIZED:
+ if (((struct _Ecore_Win32_Window *)window)->state.maximized_vert &&
+ ((struct _Ecore_Win32_Window *)window)->state.maximized_horz)
+ {
+ RECT rect;
+
+ if (!SystemParametersInfo(SPI_GETWORKAREA, 0,
+ &rect, 0))
+ break;
+
+ MoveWindow(window, 0, 0,
+ GetSystemMetrics(SM_CXSCREEN),
+ rect.bottom - rect.top,
+ TRUE);
+ }
+ break;
+ case ECORE_WIN32_WINDOW_STATE_SHADED:
+ ((struct _Ecore_Win32_Window *)window)->state.shaded = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_HIDDEN:
+ ((struct _Ecore_Win32_Window *)window)->state.hidden = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_FULLSCREEN:
+ if (((struct _Ecore_Win32_Window *)window)->state.fullscreen)
+ ecore_win32_window_fullscreen_set(window, set);
+ break;
+ case ECORE_WIN32_WINDOW_STATE_ABOVE:
+ if (((struct _Ecore_Win32_Window *)window)->state.above)
+ SetWindowPos(((struct _Ecore_Win32_Window *)window)->window,
+ HWND_TOP,
+ 0, 0,
+ 0, 0,
+ SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
+ break;
+ case ECORE_WIN32_WINDOW_STATE_BELOW:
+ if (((struct _Ecore_Win32_Window *)window)->state.below)
+ SetWindowPos(((struct _Ecore_Win32_Window *)window)->window,
+ HWND_BOTTOM,
+ 0, 0,
+ 0, 0,
+ SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
+ break;
+ case ECORE_WIN32_WINDOW_STATE_DEMANDS_ATTENTION:
+ ((struct _Ecore_Win32_Window *)window)->state.demands_attention = 1;
+ break;
+ case ECORE_WIN32_WINDOW_STATE_UNKNOWN:
+ /* nothing to be done */
+ break;
+ }
+}
+
+EAPI void
+ecore_win32_window_type_set(Ecore_Win32_Window *window,
+ Ecore_Win32_Window_Type type)
+{
+ switch (type)
+ {
+ case ECORE_WIN32_WINDOW_TYPE_DESKTOP:
+ ((struct _Ecore_Win32_Window *)window)->type.desktop = 1;
+ break;
+ case ECORE_WIN32_WINDOW_TYPE_DOCK:
+ ((struct _Ecore_Win32_Window *)window)->type.dock = 1;
+ break;
+ case ECORE_WIN32_WINDOW_TYPE_TOOLBAR:
+ ((struct _Ecore_Win32_Window *)window)->type.toolbar = 1;
+ break;
+ case ECORE_WIN32_WINDOW_TYPE_MENU:
+ ((struct _Ecore_Win32_Window *)window)->type.menu = 1;
+ break;
+ case ECORE_WIN32_WINDOW_TYPE_UTILITY:
+ ((struct _Ecore_Win32_Window *)window)->type.utility = 1;
+ break;
+ case ECORE_WIN32_WINDOW_TYPE_SPLASH:
+ ((struct _Ecore_Win32_Window *)window)->type.splash = 1;
+ break;
+ case ECORE_WIN32_WINDOW_TYPE_DIALOG:
+ ((struct _Ecore_Win32_Window *)window)->type.dialog = 1;
+ break;
+ case ECORE_WIN32_WINDOW_TYPE_NORMAL:
+ ((struct _Ecore_Win32_Window *)window)->type.normal = 1;
+ break;
+ case ECORE_WIN32_WINDOW_TYPE_UNKNOWN:
+ ((struct _Ecore_Win32_Window *)window)->type.normal = 1;
+ break;
+ }
}
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs