diff --git a/project/include/ui/Window.h b/project/include/ui/Window.h index 81e454f10..92daa4224 100644 --- a/project/include/ui/Window.h +++ b/project/include/ui/Window.h @@ -60,6 +60,8 @@ namespace lime { virtual void SetTextInputRect (Rectangle *rect) = 0; virtual const char* SetTitle (const char* title) = 0; virtual void WarpMouse (int x, int y) = 0; + virtual float GetOpacity(); + virtual void SetOpacity(float opacity); Application* currentApplication; int flags; diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index 08195e7eb..1944301c9 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -3744,6 +3744,28 @@ namespace lime { } + double lime_window_get_opacity (value window) { + Window* targetWindow = (Window*)val_data (window); + return (float)targetWindow->GetOpacity (); + } + + + HL_PRIM double HL_NAME(hl_window_get_opacity) (HL_CFFIPointer* window) { + Window* targetWindow = (Window*)window->ptr; + return (float)targetWindow->GetOpacity (); + } + + void lime_window_set_opacity (value window, double opacity) { + Window* targetWindow = (Window*)val_data (window); + targetWindow->SetOpacity((float)opacity); + } + + + HL_PRIM void HL_NAME(hl_window_set_opacity) (HL_CFFIPointer* window, double opacity) { + Window* targetWindow = (Window*)window->ptr; + targetWindow->SetOpacity ((float)opacity); + } + value lime_zlib_compress (value buffer, value bytes) { @@ -3951,6 +3973,8 @@ namespace lime { DEFINE_PRIME2v (lime_window_set_text_input_rect); DEFINE_PRIME2 (lime_window_set_title); DEFINE_PRIME3v (lime_window_warp_mouse); + DEFINE_PRIME1 (lime_window_get_opacity); + DEFINE_PRIME2v (lime_window_set_opacity); DEFINE_PRIME2 (lime_zlib_compress); DEFINE_PRIME2 (lime_zlib_decompress); @@ -4135,6 +4159,8 @@ namespace lime { DEFINE_HL_PRIM (_VOID, hl_window_set_text_input_rect, _TCFFIPOINTER _TRECTANGLE); DEFINE_HL_PRIM (_STRING, hl_window_set_title, _TCFFIPOINTER _STRING); DEFINE_HL_PRIM (_VOID, hl_window_warp_mouse, _TCFFIPOINTER _I32 _I32); + DEFINE_HL_PRIM (_F64, hl_window_get_opacity, _TCFFIPOINTER); + DEFINE_HL_PRIM (_VOID, hl_window_set_opacity, _TCFFIPOINTER _F64); DEFINE_HL_PRIM (_TBYTES, hl_zlib_compress, _TBYTES _TBYTES); DEFINE_HL_PRIM (_TBYTES, hl_zlib_decompress, _TBYTES _TBYTES); diff --git a/project/src/backend/sdl/SDLWindow.cpp b/project/src/backend/sdl/SDLWindow.cpp index 2c54ec997..92c3017c3 100644 --- a/project/src/backend/sdl/SDLWindow.cpp +++ b/project/src/backend/sdl/SDLWindow.cpp @@ -1082,6 +1082,17 @@ namespace lime { } + float SDLWindow::GetOpacity() { + float opacity = 1.0; + if(SDL_GetWindowOpacity(sdlWindow, &opacity) != 0) { + return 1.0; + } + return opacity; + } + + void SDLWindow::SetOpacity(float opacity) { + SDL_SetWindowOpacity(sdlWindow, opacity); + } Window* CreateWindow (Application* application, int width, int height, int flags, const char* title) { diff --git a/project/src/backend/sdl/SDLWindow.h b/project/src/backend/sdl/SDLWindow.h index c3769ef18..2bc707a3d 100644 --- a/project/src/backend/sdl/SDLWindow.h +++ b/project/src/backend/sdl/SDLWindow.h @@ -54,7 +54,8 @@ namespace lime { virtual void SetTextInputRect (Rectangle *rect); virtual const char* SetTitle (const char* title); virtual void WarpMouse (int x, int y); - + virtual float GetOpacity(); + virtual void SetOpacity(float opacity); SDL_Renderer* sdlRenderer; SDL_Texture* sdlTexture; SDL_Window* sdlWindow; diff --git a/src/lime/_internal/backend/flash/FlashWindow.hx b/src/lime/_internal/backend/flash/FlashWindow.hx index f61fe3d73..0e5f233ad 100644 --- a/src/lime/_internal/backend/flash/FlashWindow.hx +++ b/src/lime/_internal/backend/flash/FlashWindow.hx @@ -634,4 +634,11 @@ class FlashWindow } public function warpMouse(x:Int, y:Int):Void {} + + public function getOpacity():Float + { + return 1.0; + } + + public function setOpacity(value:Float):Void {} } diff --git a/src/lime/_internal/backend/html5/HTML5Window.hx b/src/lime/_internal/backend/html5/HTML5Window.hx index c938bd193..e9d33454e 100644 --- a/src/lime/_internal/backend/html5/HTML5Window.hx +++ b/src/lime/_internal/backend/html5/HTML5Window.hx @@ -1291,4 +1291,8 @@ class HTML5Window } public function warpMouse(x:Int, y:Int):Void {} + + public function getOpacity():Float { return 1.0; } + + public function setOpacity(value:Float):Void {} } diff --git a/src/lime/_internal/backend/native/NativeCFFI.hx b/src/lime/_internal/backend/native/NativeCFFI.hx index a3da6319b..ba9e80f5b 100644 --- a/src/lime/_internal/backend/native/NativeCFFI.hx +++ b/src/lime/_internal/backend/native/NativeCFFI.hx @@ -347,6 +347,10 @@ class NativeCFFI @:cffi private static function lime_window_warp_mouse(handle:Dynamic, x:Int, y:Int):Void; + @:cffi private static function lime_window_get_opacity(handle:Dynamic):Float; + + @:cffi private static function lime_window_set_opacity(handle:Dynamic, value:Float):Void; + @:cffi private static function lime_window_event_manager_register(callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_zlib_compress(data:Dynamic, bytes:Dynamic):Dynamic; @@ -601,6 +605,11 @@ class NativeCFFI false)); private static var lime_window_warp_mouse = new cpp.CallableInt->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_window_warp_mouse", "oiiv", false)); + private static var lime_window_get_opacity = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_window_get_opacity", "od", false)); + private static var lime_window_set_opacity = new cpp.CallableFloat->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_opacity", "odv", + false)); + + private static var lime_window_set_opacity(handle:Dynamic, value:Float):Void; private static var lime_window_event_manager_register = new cpp.Callablecpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_event_manager_register", "oov", false)); private static var lime_zlib_compress = new cpp.Callablecpp.Object->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_zlib_compress", "ooo", @@ -754,6 +763,8 @@ class NativeCFFI private static var lime_window_set_text_input_rect = CFFI.load("lime", "lime_window_set_text_input_rect", 2); private static var lime_window_set_title = CFFI.load("lime", "lime_window_set_title", 2); private static var lime_window_warp_mouse = CFFI.load("lime", "lime_window_warp_mouse", 3); + private static var lime_window_get_opacity = CFFI.load("lime", "lime_window_get_opacity", 1); + private static var lime_window_set_opacity = CFFI.load("lime", "lime_window_set_opacity", 2); private static var lime_window_event_manager_register = CFFI.load("lime", "lime_window_event_manager_register", 2); private static var lime_zlib_compress = CFFI.load("lime", "lime_zlib_compress", 2); private static var lime_zlib_decompress = CFFI.load("lime", "lime_zlib_decompress", 2); @@ -1357,6 +1368,10 @@ class NativeCFFI @:hlNative("lime", "hl_window_warp_mouse") private static function lime_window_warp_mouse(handle:CFFIPointer, x:Int, y:Int):Void {} + @:hlNative("lime", "hl_window_get_opacity") private static function lime_window_get_opacity(handle:CFFIPointer):Float; + + @:hlNative("lime", "hl_window_set_opacity") private static function lime_window_set_opacity(handle:CFFIPointer, value:Float):Void; + @:hlNative("lime", "hl_window_event_manager_register") private static function lime_window_event_manager_register(callback:Void->Void, eventObject:WindowEventInfo):Void {} diff --git a/src/lime/_internal/backend/native/NativeWindow.hx b/src/lime/_internal/backend/native/NativeWindow.hx index 15a01b05c..4c73c5359 100644 --- a/src/lime/_internal/backend/native/NativeWindow.hx +++ b/src/lime/_internal/backend/native/NativeWindow.hx @@ -663,6 +663,27 @@ class NativeWindow NativeCFFI.lime_window_warp_mouse(handle, x, y); #end } + + public function getOpacity():Float + { + if (handle != null) + { + #if (!macro && lime_cffi) + return NativeCFFI.lime_window_get_opacity(handle); + #end + } + return 1.0; + } + + public function setOpacity(value:Float):Void + { + if (handle != null) + { + #if (!macro && lime_cffi) + NativeCFFI.lime_window_set_opacity(handle, value); + #end + } + } } @:enum private abstract MouseCursorType(Int) from Int to Int diff --git a/src/lime/ui/Window.hx b/src/lime/ui/Window.hx index 1cdc8dd73..ae4faf0e4 100644 --- a/src/lime/ui/Window.hx +++ b/src/lime/ui/Window.hx @@ -413,6 +413,14 @@ class Window __backend.warpMouse(x, y); } + public function getOpacity():Float { + return __backend.getOpacity(); + } + + public function setOpacity(opacity:Float):Void { + __backend.setOpacity(opacity); + } + // Get & Set Methods @:noCompletion private function get_cursor():MouseCursor {