Merge pull request #1570 from Apprentice-Alchemist/feature/window-opacity

Implement window transparency.
This commit is contained in:
player-03
2022-10-10 13:32:18 -04:00
committed by GitHub
9 changed files with 122 additions and 7 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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 {
}
}
}

View File

@@ -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
#endif

View File

@@ -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;

View File

@@ -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;

View File

@@ -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.Callable<cpp.Object->Int>(cpp.Prime._loadPrime("lime", "lime_window_get_id", "oi", false));
private static var lime_window_get_mouse_lock = new cpp.Callable<cpp.Object->Bool>(cpp.Prime._loadPrime("lime", "lime_window_get_mouse_lock", "ob",
false));
private static var lime_window_get_opacity = new cpp.Callable<cpp.Object->Float>(cpp.Prime._loadPrime("lime", "lime_window_get_opacity", "od", false));
private static var lime_window_get_scale = new cpp.Callable<cpp.Object->Float>(cpp.Prime._loadPrime("lime", "lime_window_get_scale", "od", false));
private static var lime_window_get_text_input_enabled = new cpp.Callable<cpp.Object->Bool>(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.Callable<cpp.Object->Bool->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_mouse_lock",
"obv", false));
private static var lime_window_set_opacity = new cpp.Callable<cpp.Object->Float->cpp.Void>(cpp.Prime._loadPrime("lime", "lime_window_set_opacity", "odv",
false));
private static var lime_window_set_resizable = new cpp.Callable<cpp.Object->Bool->Bool>(cpp.Prime._loadPrime("lime", "lime_window_set_resizable", "obb",
false));
private static var lime_window_set_text_input_enabled = new cpp.Callable<cpp.Object->Bool->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 {}

View File

@@ -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)

View File

@@ -80,6 +80,7 @@ class Window
public var onRestore(default, null) = new Event<Void->Void>();
public var onTextEdit(default, null) = new Event<String->Int->Int->Void>();
public var onTextInput(default, null) = new Event<String->Void>();
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;