diff --git a/project/include/ui/Window.h b/project/include/ui/Window.h index 81e454f10..11b76622f 100644 --- a/project/include/ui/Window.h +++ b/project/include/ui/Window.h @@ -39,6 +39,7 @@ namespace lime { virtual int GetHeight () = 0; virtual uint32_t GetID () = 0; virtual bool GetMouseLock () = 0; + virtual float GetOpacity () = 0; virtual double GetScale () = 0; virtual bool GetTextInputEnabled () = 0; virtual int GetWidth () = 0; @@ -55,6 +56,7 @@ namespace lime { virtual bool SetMaximized (bool minimized) = 0; virtual bool SetMinimized (bool minimized) = 0; virtual void SetMouseLock (bool mouseLock) = 0; + virtual void SetOpacity (float opacity) = 0; virtual bool SetResizable (bool resizable) = 0; virtual void SetTextInputEnabled (bool enable) = 0; virtual void SetTextInputRect (Rectangle *rect) = 0; diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index 08195e7eb..627965521 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -3350,6 +3350,22 @@ 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 (); + + } + + double lime_window_get_scale (value window) { Window* targetWindow = (Window*)val_data (window); @@ -3636,6 +3652,22 @@ namespace lime { } + 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); + + } + + bool lime_window_set_resizable (value window, bool resizable) { Window* targetWindow = (Window*)val_data (window); @@ -3951,6 +3983,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 +4169,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..6709ca036 100644 --- a/project/src/backend/sdl/SDLWindow.cpp +++ b/project/src/backend/sdl/SDLWindow.cpp @@ -496,9 +496,6 @@ namespace lime { } - - - const char* SDLWindow::GetContextType () { if (context) { @@ -592,6 +589,17 @@ namespace lime { } + float SDLWindow::GetOpacity () { + + float opacity = 1.0f; + + SDL_GetWindowOpacity (sdlWindow, &opacity); + + return opacity; + + } + + double SDLWindow::GetScale () { if (sdlRenderer) { @@ -1010,6 +1018,13 @@ namespace lime { } + void SDLWindow::SetOpacity (float opacity) { + + SDL_SetWindowOpacity (sdlWindow, opacity); + + } + + bool SDLWindow::SetResizable (bool resizable) { #ifndef EMSCRIPTEN @@ -1076,7 +1091,7 @@ namespace lime { } - void SDLWindow::WarpMouse (int x, int y){ + void SDLWindow::WarpMouse (int x, int y) { SDL_WarpMouseInWindow (sdlWindow, x, y); @@ -1090,4 +1105,4 @@ namespace lime { } -} \ No newline at end of file +} diff --git a/project/src/backend/sdl/SDLWindow.h b/project/src/backend/sdl/SDLWindow.h index c3769ef18..e047076c2 100644 --- a/project/src/backend/sdl/SDLWindow.h +++ b/project/src/backend/sdl/SDLWindow.h @@ -33,6 +33,7 @@ namespace lime { virtual int GetHeight (); virtual uint32_t GetID (); virtual bool GetMouseLock (); + virtual float GetOpacity (); virtual double GetScale (); virtual bool GetTextInputEnabled (); virtual int GetWidth (); @@ -49,12 +50,12 @@ namespace lime { virtual bool SetMaximized (bool maximized); virtual bool SetMinimized (bool minimized); virtual void SetMouseLock (bool mouseLock); + virtual void SetOpacity (float opacity); virtual bool SetResizable (bool resizable); virtual void SetTextInputEnabled (bool enabled); virtual void SetTextInputRect (Rectangle *rect); virtual const char* SetTitle (const char* title); virtual void WarpMouse (int x, int y); - SDL_Renderer* sdlRenderer; SDL_Texture* sdlTexture; SDL_Window* sdlWindow; @@ -71,4 +72,4 @@ namespace lime { } -#endif \ No newline at end of file +#endif diff --git a/src/lime/_internal/backend/flash/FlashWindow.hx b/src/lime/_internal/backend/flash/FlashWindow.hx index f61fe3d73..ca155992a 100644 --- a/src/lime/_internal/backend/flash/FlashWindow.hx +++ b/src/lime/_internal/backend/flash/FlashWindow.hx @@ -572,6 +572,11 @@ class FlashWindow return false; } + public function getOpacity():Float + { + return 1.0; + } + public function getTextInputEnabled():Bool { return textInputEnabled; @@ -613,6 +618,8 @@ class FlashWindow public function setMouseLock(value:Bool):Void {} + public function setOpacity(value:Float):Void {} + public function setResizable(value:Bool):Bool { return value; diff --git a/src/lime/_internal/backend/html5/HTML5Window.hx b/src/lime/_internal/backend/html5/HTML5Window.hx index a5a636025..592ebad11 100644 --- a/src/lime/_internal/backend/html5/HTML5Window.hx +++ b/src/lime/_internal/backend/html5/HTML5Window.hx @@ -393,6 +393,11 @@ class HTML5Window return false; } + public function getOpacity():Float + { + return 1.0; + } + public function getTextInputEnabled():Bool { return textInputEnabled; @@ -1101,6 +1106,8 @@ class HTML5Window public function setMouseLock(value:Bool):Void {} + public function setOpacity(value:Float):Void {} + public function setResizable(value:Bool):Bool { return value; diff --git a/src/lime/_internal/backend/native/NativeCFFI.hx b/src/lime/_internal/backend/native/NativeCFFI.hx index a3da6319b..b31af6e62 100644 --- a/src/lime/_internal/backend/native/NativeCFFI.hx +++ b/src/lime/_internal/backend/native/NativeCFFI.hx @@ -305,6 +305,8 @@ class NativeCFFI @:cffi private static function lime_window_get_mouse_lock(handle:Dynamic):Bool; + @:cffi private static function lime_window_get_opacity(handle:Dynamic):Float; + @:cffi private static function lime_window_get_scale(handle:Dynamic):Float; @:cffi private static function lime_window_get_text_input_enabled(handle:Dynamic):Bool; @@ -337,6 +339,8 @@ class NativeCFFI @:cffi private static function lime_window_set_mouse_lock(handle:Dynamic, mouseLock:Bool):Void; + @:cffi private static function lime_window_set_opacity(handle:Dynamic, value:Float):Void; + @:cffi private static function lime_window_set_resizable(handle:Dynamic, resizable:Bool):Bool; @:cffi private static function lime_window_set_text_input_enabled(handle:Dynamic, enabled:Bool):Void; @@ -564,6 +568,7 @@ class NativeCFFI private static var lime_window_get_id = new cpp.CallableInt>(cpp.Prime._loadPrime("lime", "lime_window_get_id", "oi", false)); private static var lime_window_get_mouse_lock = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_window_get_mouse_lock", "ob", 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_get_scale = new cpp.CallableFloat>(cpp.Prime._loadPrime("lime", "lime_window_get_scale", "od", false)); private static var lime_window_get_text_input_enabled = new cpp.CallableBool>(cpp.Prime._loadPrime("lime", "lime_window_get_text_input_enabled", "ob", false)); @@ -591,6 +596,8 @@ class NativeCFFI false)); private static var lime_window_set_mouse_lock = new cpp.CallableBool->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_mouse_lock", "obv", 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_resizable = new cpp.CallableBool->Bool>(cpp.Prime._loadPrime("lime", "lime_window_set_resizable", "obb", false)); private static var lime_window_set_text_input_enabled = new cpp.CallableBool->cpp.Void>(cpp.Prime._loadPrime("lime", @@ -733,6 +740,7 @@ class NativeCFFI private static var lime_window_get_height = CFFI.load("lime", "lime_window_get_height", 1); private static var lime_window_get_id = CFFI.load("lime", "lime_window_get_id", 1); private static var lime_window_get_mouse_lock = CFFI.load("lime", "lime_window_get_mouse_lock", 1); + private static var lime_window_get_opacity = CFFI.load("lime", "lime_window_get_opacity", 1); private static var lime_window_get_scale = CFFI.load("lime", "lime_window_get_scale", 1); private static var lime_window_get_text_input_enabled = CFFI.load("lime", "lime_window_get_text_input_enabled", 1); private static var lime_window_get_width = CFFI.load("lime", "lime_window_get_width", 1); @@ -749,6 +757,7 @@ class NativeCFFI private static var lime_window_set_maximized = CFFI.load("lime", "lime_window_set_maximized", 2); private static var lime_window_set_minimized = CFFI.load("lime", "lime_window_set_minimized", 2); private static var lime_window_set_mouse_lock = CFFI.load("lime", "lime_window_set_mouse_lock", 2); + private static var lime_window_set_opacity = CFFI.load("lime", "lime_window_set_opacity", 2); private static var lime_window_set_resizable = CFFI.load("lime", "lime_window_set_resizable", 2); private static var lime_window_set_text_input_enabled = CFFI.load("lime", "lime_window_set_text_input_enabled", 2); private static var lime_window_set_text_input_rect = CFFI.load("lime", "lime_window_set_text_input_rect", 2); @@ -1357,6 +1366,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 { return 0.0; } + + @: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..08b3079de 100644 --- a/src/lime/_internal/backend/native/NativeWindow.hx +++ b/src/lime/_internal/backend/native/NativeWindow.hx @@ -299,6 +299,18 @@ class NativeWindow return mouseLock; } + public function getOpacity():Float + { + if (handle != null) + { + #if (!macro && lime_cffi) + return NativeCFFI.lime_window_get_opacity(handle); + #end + } + + return 1.0; + } + public function getTextInputEnabled():Bool { if (handle != null) @@ -628,6 +640,16 @@ class NativeWindow return value; } + public function setOpacity(value:Float):Void + { + if (handle != null) + { + #if (!macro && lime_cffi) + NativeCFFI.lime_window_set_opacity(handle, value); + #end + } + } + public function setResizable(value:Bool):Bool { if (handle != null) diff --git a/src/lime/ui/Window.hx b/src/lime/ui/Window.hx index 1cdc8dd73..5e82f5787 100644 --- a/src/lime/ui/Window.hx +++ b/src/lime/ui/Window.hx @@ -80,6 +80,7 @@ class Window public var onRestore(default, null) = new EventVoid>(); public var onTextEdit(default, null) = new EventInt->Int->Void>(); public var onTextInput(default, null) = new EventVoid>(); + public var opacity(get, set):Float; public var parameters:Dynamic; public var resizable(get, set):Bool; public var scale(get, null):Float; @@ -518,6 +519,17 @@ class Window return value; } + @:noCompletion private function get_opacity():Float + { + return __backend.getOpacity(); + } + + @:noCompletion private function set_opacity(value:Float):Float + { + __backend.setOpacity(value); + return value; + } + @:noCompletion private inline function get_resizable():Bool { return __resizable;