diff --git a/lime/ui/Window.hx b/lime/ui/Window.hx index d683f9144..916dcaedd 100644 --- a/lime/ui/Window.hx +++ b/lime/ui/Window.hx @@ -333,9 +333,29 @@ class Window { #end + public function move (x:Int, y:Int):Void { + + #if (cpp || neko) + lime_window_move (handle, x, y); + #end + + } + + + public function resize (width:Int, height:Int):Void { + + #if (cpp || neko) + lime_window_resize (handle, width, height); + #end + + } + + #if (cpp || neko) private static var lime_window_create = System.load ("lime", "lime_window_create", 5); private static var lime_window_event_manager_register = System.load ("lime", "lime_window_event_manager_register", 2); + private static var lime_window_move = System.load ("lime", "lime_window_move", 3); + private static var lime_window_resize = System.load ("lime", "lime_window_resize", 3); #end diff --git a/project/include/ui/Window.h b/project/include/ui/Window.h index 7a90d8ad4..b154ef3db 100644 --- a/project/include/ui/Window.h +++ b/project/include/ui/Window.h @@ -17,8 +17,10 @@ namespace lime { public: - Application* currentApplication; + virtual void Move (int x, int y) = 0; + virtual void Resize (int width, int height) = 0; + Application* currentApplication; int flags; diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index d4586c15b..97fa02881 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -194,6 +194,24 @@ namespace lime { } + value lime_window_move (value window, value x, value y) { + + Window* targetWindow = (Window*)(intptr_t)val_float (window); + targetWindow->Move (val_int (x), val_int (y)); + return alloc_null (); + + } + + + value lime_window_resize (value window, value width, value height) { + + Window* targetWindow = (Window*)(intptr_t)val_float (window); + targetWindow->Resize (val_int (width), val_int (height)); + return alloc_null (); + + } + + DEFINE_PRIM (lime_application_create, 1); DEFINE_PRIM (lime_application_exec, 1); DEFINE_PRIM (lime_application_get_ticks, 0); @@ -211,6 +229,8 @@ namespace lime { DEFINE_PRIM (lime_update_event_manager_register, 2); DEFINE_PRIM (lime_window_create, 5); DEFINE_PRIM (lime_window_event_manager_register, 2); + DEFINE_PRIM (lime_window_move, 3); + DEFINE_PRIM (lime_window_resize, 3); } diff --git a/project/src/backend/sdl/SDLWindow.cpp b/project/src/backend/sdl/SDLWindow.cpp index 82421ab6d..48ac271b5 100644 --- a/project/src/backend/sdl/SDLWindow.cpp +++ b/project/src/backend/sdl/SDLWindow.cpp @@ -27,6 +27,20 @@ namespace lime { } + void SDLWindow::Move (int x, int y) { + + SDL_SetWindowPosition (sdlWindow, x, y); + + } + + + void SDLWindow::Resize (int width, int height) { + + SDL_SetWindowSize (sdlWindow, width, height); + + } + + Window* CreateWindow (Application* application, int width, int height, int flags, const char* title) { return new SDLWindow (application, width, height, flags, title); diff --git a/project/src/backend/sdl/SDLWindow.h b/project/src/backend/sdl/SDLWindow.h index fa18c0a0d..871df4535 100644 --- a/project/src/backend/sdl/SDLWindow.h +++ b/project/src/backend/sdl/SDLWindow.h @@ -16,6 +16,9 @@ namespace lime { SDLWindow (Application* application, int width, int height, int flags, const char* title); ~SDLWindow (); + virtual void Move (int x, int y); + virtual void Resize (int width, int height); + SDL_Window* sdlWindow; };