6 #include <Evas_Engine_GL_Glew.h>
10 static HINSTANCE instance;
12 static LRESULT CALLBACK
13 MainWndProc(HWND hwnd,
28 case WM_WINDOWPOSCHANGED: {
32 hdc = BeginPaint (window, &ps);
33 evas_damage_rectangle_add(evas,
34 ps.rcPaint.left, ps.rcPaint.top,
35 ps.rcPaint.right - ps.rcPaint.left,
36 ps.rcPaint.bottom - ps.rcPaint.top);
37 EndPaint(window, &ps);
42 PRECT rect = (PRECT)lParam;
44 evas_output_viewport_set(evas, 0, 0,
45 rect->right - rect->left,
46 rect->bottom - rect->top);
47 evas_output_size_set(evas,
48 rect->right - rect->left,
49 rect->bottom - rect->top);
50 win_w = rect->right - rect->left;
51 win_h = rect->bottom - rect->top;
55 evas_event_feed_mouse_move(evas, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0, NULL);
56 evas_event_feed_mouse_down(evas, 3, EVAS_BUTTON_NONE, 0, NULL);
59 evas_event_feed_mouse_move(evas, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0, NULL);
60 evas_event_feed_mouse_down(evas, 1, EVAS_BUTTON_NONE, 0, NULL);
63 evas_event_feed_mouse_move(evas, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0, NULL);
64 evas_event_feed_mouse_up(evas, 1, EVAS_BUTTON_NONE, 0, NULL);
67 evas_event_feed_mouse_move(evas, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0, NULL);
68 evas_event_feed_mouse_up(evas, 3, EVAS_BUTTON_NONE, 0, NULL);
71 if (!evas_pointer_inside_get(evas)) evas_event_feed_mouse_in(evas, 0, NULL);
72 evas_event_feed_mouse_move(evas, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0, NULL);
75 evas_event_feed_mouse_out(evas, 0, NULL);
77 /* FIXME : can't find an event when the mouse is entering */
84 if ((key == VK_SHIFT) ||
87 evas_key_modifier_on(evas, "Shift");
88 if ((key == VK_CONTROL) ||
89 (key == VK_LCONTROL) ||
91 evas_key_modifier_on(evas, "Control");
92 if ((key == VK_MENU) ||
95 evas_key_modifier_on(evas, "Alt");
96 if ((key == VK_LWIN) ||
98 evas_key_modifier_on(evas, "Super");
100 if (key == VK_CAPITAL)
102 if (evas_key_lock_is_set(evas_key_lock_get(evas), "Caps_Lock"))
103 evas_key_lock_off(evas, "Caps_Lock");
105 evas_key_lock_on(evas, "Caps_Lock");
107 if (key == VK_NUMLOCK)
109 if (evas_key_lock_is_set(evas_key_lock_get(evas), "Num_Lock"))
110 evas_key_lock_off(evas, "Num_Lock");
112 evas_key_lock_on(evas, "Num_Lock");
114 if (key == VK_SCROLL)
116 if (evas_key_lock_is_set(evas_key_lock_get(evas), "Scroll_Lock"))
117 evas_key_lock_off(evas, "Scroll_Lock");
119 evas_key_lock_on(evas, "Scroll_Lock");
121 if (key == VK_ESCAPE)
122 evas_event_feed_key_down(evas, "Escape", "Escape", NULL, NULL, 0, NULL);
123 if (key == VK_RETURN)
124 evas_event_feed_key_down(evas, "Return", "Return", NULL, NULL, 0, NULL);
126 evas_event_feed_key_down(evas, "Left", "Left", NULL, NULL, 0, NULL);
128 evas_event_feed_key_down(evas, "Right", "Right", NULL, NULL, 0, NULL);
130 evas_event_feed_key_down(evas, "Q", "Q", NULL, NULL, 0, NULL);
132 evas_event_feed_key_down(evas, "q", "q", NULL, NULL, 0, NULL);
139 key = LOWORD(wParam);
141 if ((key == VK_SHIFT) ||
142 (key == VK_LSHIFT) ||
144 evas_key_modifier_off(evas, "Shift");
145 if ((key == VK_CONTROL) ||
146 (key == VK_LCONTROL) ||
147 (key == VK_RCONTROL))
148 evas_key_modifier_off(evas, "Control");
149 if ((key == VK_MENU) ||
152 evas_key_modifier_off(evas, "Alt");
153 if ((key == VK_LWIN) ||
155 evas_key_modifier_off(evas, "Super");
156 if (key == VK_ESCAPE)
157 evas_event_feed_key_up(evas, "Escape", "Escape", NULL, NULL, 0, NULL);
158 if (key == VK_RETURN)
159 evas_event_feed_key_up(evas, "Return", "Return", NULL, NULL, 0, NULL);
161 evas_event_feed_key_up(evas, "Left", "Left", NULL, NULL, 0, NULL);
163 evas_event_feed_key_up(evas, "Right", "Right", NULL, NULL, 0, NULL);
165 evas_event_feed_key_up(evas, "Q", "Q", NULL, NULL, 0, NULL);
167 evas_event_feed_key_up(evas, "q", "q", NULL, NULL, 0, NULL);
171 return DefWindowProc(hwnd, uMsg, wParam, lParam);
176 engine_gl_glew_args(const char *engine, int width, int height)
181 Evas_Engine_Info_GL_Glew *einfo;
186 instance = GetModuleHandle(NULL);
187 if (!instance) return EINA_FALSE;
190 wc.lpfnWndProc = MainWndProc;
193 wc.hInstance = instance;
194 wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
195 wc.hCursor = LoadCursor (NULL, IDC_ARROW);
196 wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
197 wc.lpszMenuName = NULL;
198 wc.lpszClassName = "Evas_Gl_Glew_Test";
200 if(!RegisterClass(&wc))
206 rect.bottom = height;
207 AdjustWindowRect (&rect, WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW | WS_SIZEBOX, FALSE);
209 window = CreateWindowEx(0,
212 WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW | WS_SIZEBOX,
213 CW_USEDEFAULT, CW_USEDEFAULT,
214 rect.right - rect.left, rect.bottom - rect.top,
215 NULL, NULL, instance, NULL);
217 goto unregister_class;
219 /* make the window non resizable */
220 style = GetWindowLong(window, GWL_STYLE);
221 style &= ~WS_THICKFRAME;
222 if (!SetWindowLong(window, GWL_STYLE, style))
223 goto unregister_class;
229 depth = GetDeviceCaps(dc, BITSPIXEL);
232 evas_output_method_set(evas, evas_render_method_lookup("gl_glew"));
233 einfo = (Evas_Engine_Info_GL_Glew *)evas_engine_info_get(evas);
236 printf("Evas does not support the GL Glew Engine\n");
240 einfo->info.window = window;
241 einfo->info.depth = depth;
242 if (!evas_engine_info_set(evas, (Evas_Engine_Info *) einfo))
244 printf("Evas can not setup the informations of the GL Glew Engine\n");
248 /* the second parameter is ignored, as it's the first call of ShowWindow */
249 ShowWindow(window, SW_SHOWDEFAULT);
250 UpdateWindow(window);
255 DestroyWindow(window);
257 UnregisterClass("Evas_Gl_Glew_Test", instance);
259 FreeLibrary(instance);
265 engine_gl_glew_loop(void)
271 if (!PeekMessage (&msg, window, 0, 0, PM_NOREMOVE))
274 res = GetMessage (&msg, NULL, 0, 0);
275 TranslateMessage (&msg);
276 DispatchMessage (&msg);
282 engine_gl_glew_shutdown(void)
284 DestroyWindow(window);
285 UnregisterClass("Evas_Software_Gdi_Test", instance);
286 FreeLibrary(instance);