Implement window transparency.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {}
|
||||
}
|
||||
|
||||
@@ -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 {}
|
||||
}
|
||||
|
||||
@@ -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.Callable<cpp.Object->Int->Int->cpp.Object>(cpp.Prime._loadPrime("lime", "lime_window_warp_mouse",
|
||||
"oiiv", 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_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_opacity(handle:Dynamic, value:Float):Void;
|
||||
private static var lime_window_event_manager_register = new cpp.Callable<cpp.Object->cpp.Object->cpp.Void>(cpp.Prime._loadPrime("lime",
|
||||
"lime_window_event_manager_register", "oov", false));
|
||||
private static var lime_zlib_compress = new cpp.Callable<cpp.Object->cpp.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 {}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user