Implement window.fullscreen and window.minimize, add onWindow minimize, restore, fullscreen events
This commit is contained in:
@@ -720,6 +720,14 @@ namespace lime {
|
||||
}
|
||||
|
||||
|
||||
value lime_window_set_fullscreen (value window, value fullscreen) {
|
||||
|
||||
Window* targetWindow = (Window*)(intptr_t)val_float (window);
|
||||
return alloc_bool (targetWindow->SetFullscreen (val_bool (fullscreen)));
|
||||
|
||||
}
|
||||
|
||||
|
||||
value lime_window_set_icon (value window, value buffer) {
|
||||
|
||||
Window* targetWindow = (Window*)(intptr_t)val_float (window);
|
||||
@@ -730,6 +738,14 @@ namespace lime {
|
||||
}
|
||||
|
||||
|
||||
value lime_window_set_minimized (value window, value fullscreen) {
|
||||
|
||||
Window* targetWindow = (Window*)(intptr_t)val_float (window);
|
||||
return alloc_bool (targetWindow->SetMinimized (val_bool (fullscreen)));
|
||||
|
||||
}
|
||||
|
||||
|
||||
DEFINE_PRIM (lime_application_create, 1);
|
||||
DEFINE_PRIM (lime_application_exec, 1);
|
||||
DEFINE_PRIM (lime_application_init, 1);
|
||||
@@ -784,7 +800,9 @@ namespace lime {
|
||||
DEFINE_PRIM (lime_window_event_manager_register, 2);
|
||||
DEFINE_PRIM (lime_window_move, 3);
|
||||
DEFINE_PRIM (lime_window_resize, 3);
|
||||
DEFINE_PRIM (lime_window_set_fullscreen, 2);
|
||||
DEFINE_PRIM (lime_window_set_icon, 2);
|
||||
DEFINE_PRIM (lime_window_set_minimized, 2);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -155,7 +155,9 @@ namespace lime {
|
||||
case SDL_WINDOWEVENT_HIDDEN:
|
||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||
case SDL_WINDOWEVENT_FOCUS_LOST:
|
||||
case SDL_WINDOWEVENT_MINIMIZED:
|
||||
case SDL_WINDOWEVENT_MOVED:
|
||||
case SDL_WINDOWEVENT_RESTORED:
|
||||
|
||||
ProcessWindowEvent (event);
|
||||
break;
|
||||
@@ -339,6 +341,7 @@ namespace lime {
|
||||
case SDL_WINDOWEVENT_HIDDEN: windowEvent.type = WINDOW_DEACTIVATE; break;
|
||||
case SDL_WINDOWEVENT_FOCUS_GAINED: windowEvent.type = WINDOW_FOCUS_IN; break;
|
||||
case SDL_WINDOWEVENT_FOCUS_LOST: windowEvent.type = WINDOW_FOCUS_OUT; break;
|
||||
case SDL_WINDOWEVENT_MINIMIZED: windowEvent.type = WINDOW_MINIMIZE; break;
|
||||
|
||||
case SDL_WINDOWEVENT_MOVED:
|
||||
|
||||
@@ -354,6 +357,8 @@ namespace lime {
|
||||
windowEvent.height = event->window.data2;
|
||||
break;
|
||||
|
||||
case SDL_WINDOWEVENT_RESTORED: windowEvent.type = WINDOW_RESTORE; break;
|
||||
|
||||
}
|
||||
|
||||
WindowEvent::Dispatch (&windowEvent);
|
||||
|
||||
@@ -95,6 +95,23 @@ namespace lime {
|
||||
}
|
||||
|
||||
|
||||
bool SDLWindow::SetFullscreen (bool fullscreen) {
|
||||
|
||||
if (fullscreen) {
|
||||
|
||||
SDL_SetWindowFullscreen (sdlWindow, SDL_WINDOW_FULLSCREEN_DESKTOP);
|
||||
|
||||
} else {
|
||||
|
||||
SDL_SetWindowFullscreen (sdlWindow, 0);
|
||||
|
||||
}
|
||||
|
||||
return fullscreen;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void SDLWindow::SetIcon (ImageBuffer *imageBuffer) {
|
||||
|
||||
SDL_Surface *surface = SDL_CreateRGBSurfaceFrom (imageBuffer->data->Bytes (), imageBuffer->width, imageBuffer->height, imageBuffer->bpp * 8, imageBuffer->width * imageBuffer->bpp, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000);
|
||||
@@ -109,6 +126,23 @@ namespace lime {
|
||||
}
|
||||
|
||||
|
||||
bool SDLWindow::SetMinimized (bool minimized) {
|
||||
|
||||
if (minimized) {
|
||||
|
||||
SDL_MinimizeWindow (sdlWindow);
|
||||
|
||||
} else {
|
||||
|
||||
SDL_RestoreWindow (sdlWindow);
|
||||
|
||||
}
|
||||
|
||||
return minimized;
|
||||
|
||||
}
|
||||
|
||||
|
||||
Window* CreateWindow (Application* application, int width, int height, int flags, const char* title) {
|
||||
|
||||
return new SDLWindow (application, width, height, flags, title);
|
||||
|
||||
@@ -20,7 +20,9 @@ namespace lime {
|
||||
virtual void Close ();
|
||||
virtual void Move (int x, int y);
|
||||
virtual void Resize (int width, int height);
|
||||
virtual bool SetFullscreen (bool fullscreen);
|
||||
virtual void SetIcon (ImageBuffer *imageBuffer);
|
||||
virtual bool SetMinimized (bool minimized);
|
||||
|
||||
SDL_Window* sdlWindow;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user