mirror of
https://github.com/godotengine/godot.git
synced 2024-11-25 05:33:11 +00:00
Re-enable per-pixel transparency support on Linux, macOS, and Windows (for Vulkan and OpenGL rendering drivers).
This commit is contained in:
parent
b8977ca333
commit
57829b7cc4
@ -557,6 +557,9 @@
|
|||||||
<member name="display/window/ios/hide_home_indicator" type="bool" setter="" getter="" default="true">
|
<member name="display/window/ios/hide_home_indicator" type="bool" setter="" getter="" default="true">
|
||||||
If [code]true[/code], the home indicator is hidden automatically. This only affects iOS devices without a physical home button.
|
If [code]true[/code], the home indicator is hidden automatically. This only affects iOS devices without a physical home button.
|
||||||
</member>
|
</member>
|
||||||
|
<member name="display/window/per_pixel_transparency/allowed" type="bool" setter="" getter="" default="false">
|
||||||
|
If [code]true[/code], allows per-pixel transparency for the window background. This affects performance, so leave it on [code]false[/code] unless you need it.
|
||||||
|
</member>
|
||||||
<member name="display/window/size/always_on_top" type="bool" setter="" getter="" default="false">
|
<member name="display/window/size/always_on_top" type="bool" setter="" getter="" default="false">
|
||||||
Forces the main window to be always on top.
|
Forces the main window to be always on top.
|
||||||
[b]Note:[/b] This setting is ignored on iOS, Android, and Web.
|
[b]Note:[/b] This setting is ignored on iOS, Android, and Web.
|
||||||
|
@ -108,19 +108,6 @@ void RasterizerGLES3::begin_frame(double frame_step) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerGLES3::end_frame(bool p_swap_buffers) {
|
void RasterizerGLES3::end_frame(bool p_swap_buffers) {
|
||||||
// if (OS::get_singleton()->is_layered_allowed()) {
|
|
||||||
// if (!OS::get_singleton()->get_window_per_pixel_transparency_enabled()) {
|
|
||||||
//clear alpha
|
|
||||||
// glColorMask(false, false, false, true);
|
|
||||||
// glClearColor(0.5, 0, 0, 1);
|
|
||||||
// glClear(GL_COLOR_BUFFER_BIT);
|
|
||||||
// glColorMask(true, true, true, true);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// glClearColor(1, 0, 0, 1);
|
|
||||||
// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_ACCUM_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
|
||||||
|
|
||||||
if (p_swap_buffers) {
|
if (p_swap_buffers) {
|
||||||
DisplayServer::get_singleton()->swap_buffers();
|
DisplayServer::get_singleton()->swap_buffers();
|
||||||
} else {
|
} else {
|
||||||
|
@ -1706,10 +1706,10 @@ Error VulkanContext::_update_swap_chain(Window *window) {
|
|||||||
// Find a supported composite alpha mode - one of these is guaranteed to be set.
|
// Find a supported composite alpha mode - one of these is guaranteed to be set.
|
||||||
VkCompositeAlphaFlagBitsKHR compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
|
VkCompositeAlphaFlagBitsKHR compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
|
||||||
VkCompositeAlphaFlagBitsKHR compositeAlphaFlags[4] = {
|
VkCompositeAlphaFlagBitsKHR compositeAlphaFlags[4] = {
|
||||||
VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
|
|
||||||
VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
|
VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
|
||||||
VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
|
VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
|
||||||
VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR,
|
VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR,
|
||||||
|
VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
|
||||||
};
|
};
|
||||||
for (uint32_t i = 0; i < ARRAY_SIZE(compositeAlphaFlags); i++) {
|
for (uint32_t i = 0; i < ARRAY_SIZE(compositeAlphaFlags); i++) {
|
||||||
if (surfCapabilities.supportedCompositeAlpha & compositeAlphaFlags[i]) {
|
if (surfCapabilities.supportedCompositeAlpha & compositeAlphaFlags[i]) {
|
||||||
|
@ -1555,17 +1555,11 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
|||||||
GLOBAL_DEF("internationalization/locale/include_text_server_data", false);
|
GLOBAL_DEF("internationalization/locale/include_text_server_data", false);
|
||||||
|
|
||||||
OS::get_singleton()->_allow_hidpi = GLOBAL_DEF("display/window/dpi/allow_hidpi", true);
|
OS::get_singleton()->_allow_hidpi = GLOBAL_DEF("display/window/dpi/allow_hidpi", true);
|
||||||
|
OS::get_singleton()->_allow_layered = GLOBAL_DEF("display/window/per_pixel_transparency/allowed", false);
|
||||||
// FIXME: Restore support.
|
|
||||||
#if 0
|
|
||||||
//OS::get_singleton()->_allow_layered = GLOBAL_DEF("display/window/per_pixel_transparency/allowed", false);
|
|
||||||
video_mode.layered = GLOBAL_DEF("display/window/per_pixel_transparency/enabled", false);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (editor || project_manager) {
|
if (editor || project_manager) {
|
||||||
// The editor and project manager always detect and use hiDPI if needed
|
// The editor and project manager always detect and use hiDPI if needed
|
||||||
OS::get_singleton()->_allow_hidpi = true;
|
OS::get_singleton()->_allow_hidpi = true;
|
||||||
OS::get_singleton()->_allow_layered = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rtm == -1) {
|
if (rtm == -1) {
|
||||||
|
@ -2221,7 +2221,7 @@ void DisplayServerX11::window_set_flag(WindowFlags p_flag, bool p_enabled, Windo
|
|||||||
|
|
||||||
} break;
|
} break;
|
||||||
case WINDOW_FLAG_TRANSPARENT: {
|
case WINDOW_FLAG_TRANSPARENT: {
|
||||||
//todo reimplement
|
wd.layered_window = p_enabled;
|
||||||
} break;
|
} break;
|
||||||
case WINDOW_FLAG_NO_FOCUS: {
|
case WINDOW_FLAG_NO_FOCUS: {
|
||||||
wd.no_focus = p_enabled;
|
wd.no_focus = p_enabled;
|
||||||
@ -2274,7 +2274,7 @@ bool DisplayServerX11::window_get_flag(WindowFlags p_flag, WindowID p_window) co
|
|||||||
return wd.on_top;
|
return wd.on_top;
|
||||||
} break;
|
} break;
|
||||||
case WINDOW_FLAG_TRANSPARENT: {
|
case WINDOW_FLAG_TRANSPARENT: {
|
||||||
//todo reimplement
|
return wd.layered_window;
|
||||||
} break;
|
} break;
|
||||||
case WINDOW_FLAG_NO_FOCUS: {
|
case WINDOW_FLAG_NO_FOCUS: {
|
||||||
return wd.no_focus;
|
return wd.no_focus;
|
||||||
@ -4426,13 +4426,41 @@ DisplayServer *DisplayServerX11::create_func(const String &p_rendering_driver, W
|
|||||||
DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Rect2i &p_rect) {
|
DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Rect2i &p_rect) {
|
||||||
//Create window
|
//Create window
|
||||||
|
|
||||||
|
XVisualInfo visualInfo;
|
||||||
|
bool vi_selected = false;
|
||||||
|
|
||||||
|
#ifdef GLES3_ENABLED
|
||||||
|
if (gl_manager) {
|
||||||
|
visualInfo = gl_manager->get_vi(x11_display);
|
||||||
|
vi_selected = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!vi_selected) {
|
||||||
long visualMask = VisualScreenMask;
|
long visualMask = VisualScreenMask;
|
||||||
int numberOfVisuals;
|
int numberOfVisuals;
|
||||||
XVisualInfo vInfoTemplate = {};
|
XVisualInfo vInfoTemplate = {};
|
||||||
vInfoTemplate.screen = DefaultScreen(x11_display);
|
vInfoTemplate.screen = DefaultScreen(x11_display);
|
||||||
XVisualInfo *visualInfo = XGetVisualInfo(x11_display, visualMask, &vInfoTemplate, &numberOfVisuals);
|
XVisualInfo *vi_list = XGetVisualInfo(x11_display, visualMask, &vInfoTemplate, &numberOfVisuals);
|
||||||
|
ERR_FAIL_COND_V(!vi_list, INVALID_WINDOW_ID);
|
||||||
|
|
||||||
Colormap colormap = XCreateColormap(x11_display, RootWindow(x11_display, vInfoTemplate.screen), visualInfo->visual, AllocNone);
|
visualInfo = vi_list[0];
|
||||||
|
if (OS::get_singleton()->is_layered_allowed()) {
|
||||||
|
for (int i = 0; i < numberOfVisuals; i++) {
|
||||||
|
XRenderPictFormat *pict_format = XRenderFindVisualFormat(x11_display, vi_list[i].visual);
|
||||||
|
if (!pict_format) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
visualInfo = vi_list[i];
|
||||||
|
if (pict_format->direct.alphaMask > 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
XFree(vi_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
Colormap colormap = XCreateColormap(x11_display, RootWindow(x11_display, visualInfo.screen), visualInfo.visual, AllocNone);
|
||||||
|
|
||||||
XSetWindowAttributes windowAttributes = {};
|
XSetWindowAttributes windowAttributes = {};
|
||||||
windowAttributes.colormap = colormap;
|
windowAttributes.colormap = colormap;
|
||||||
@ -4442,6 +4470,13 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, V
|
|||||||
|
|
||||||
unsigned long valuemask = CWBorderPixel | CWColormap | CWEventMask;
|
unsigned long valuemask = CWBorderPixel | CWColormap | CWEventMask;
|
||||||
|
|
||||||
|
if (OS::get_singleton()->is_layered_allowed()) {
|
||||||
|
windowAttributes.background_pixmap = None;
|
||||||
|
windowAttributes.background_pixel = 0;
|
||||||
|
windowAttributes.border_pixmap = None;
|
||||||
|
valuemask |= CWBackPixel;
|
||||||
|
}
|
||||||
|
|
||||||
WindowID id = window_id_counter++;
|
WindowID id = window_id_counter++;
|
||||||
WindowData &wd = windows[id];
|
WindowData &wd = windows[id];
|
||||||
|
|
||||||
@ -4465,7 +4500,7 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, V
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
wd.x11_window = XCreateWindow(x11_display, RootWindow(x11_display, visualInfo->screen), p_rect.position.x, p_rect.position.y, p_rect.size.width > 0 ? p_rect.size.width : 1, p_rect.size.height > 0 ? p_rect.size.height : 1, 0, visualInfo->depth, InputOutput, visualInfo->visual, valuemask, &windowAttributes);
|
wd.x11_window = XCreateWindow(x11_display, RootWindow(x11_display, visualInfo.screen), p_rect.position.x, p_rect.position.y, p_rect.size.width > 0 ? p_rect.size.width : 1, p_rect.size.height > 0 ? p_rect.size.height : 1, 0, visualInfo.depth, InputOutput, visualInfo.visual, valuemask, &windowAttributes);
|
||||||
|
|
||||||
// Enable receiving notification when the window is initialized (MapNotify)
|
// Enable receiving notification when the window is initialized (MapNotify)
|
||||||
// so the focus can be set at the right time.
|
// so the focus can be set at the right time.
|
||||||
@ -4602,8 +4637,6 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, V
|
|||||||
|
|
||||||
XSync(x11_display, False);
|
XSync(x11_display, False);
|
||||||
//XSetErrorHandler(oldHandler);
|
//XSetErrorHandler(oldHandler);
|
||||||
|
|
||||||
XFree(visualInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
window_set_mode(p_mode, id);
|
window_set_mode(p_mode, id);
|
||||||
|
@ -159,6 +159,7 @@ class DisplayServerX11 : public DisplayServer {
|
|||||||
bool minimized = false;
|
bool minimized = false;
|
||||||
bool maximized = false;
|
bool maximized = false;
|
||||||
bool is_popup = false;
|
bool is_popup = false;
|
||||||
|
bool layered_window = false;
|
||||||
|
|
||||||
Rect2i parent_safe_rect;
|
Rect2i parent_safe_rect;
|
||||||
|
|
||||||
@ -251,8 +252,6 @@ class DisplayServerX11 : public DisplayServer {
|
|||||||
CursorShape current_cursor = CURSOR_ARROW;
|
CursorShape current_cursor = CURSOR_ARROW;
|
||||||
HashMap<CursorShape, Vector<Variant>> cursors_cache;
|
HashMap<CursorShape, Vector<Variant>> cursors_cache;
|
||||||
|
|
||||||
bool layered_window = false;
|
|
||||||
|
|
||||||
String rendering_driver;
|
String rendering_driver;
|
||||||
void set_wm_fullscreen(bool p_enabled);
|
void set_wm_fullscreen(bool p_enabled);
|
||||||
void set_wm_above(bool p_enabled);
|
void set_wm_above(bool p_enabled);
|
||||||
|
@ -127,10 +127,6 @@ Error GLManager_X11::_create_context(GLDisplay &gl_display) {
|
|||||||
GLXFBConfig fbconfig = nullptr;
|
GLXFBConfig fbconfig = nullptr;
|
||||||
XVisualInfo *vi = nullptr;
|
XVisualInfo *vi = nullptr;
|
||||||
|
|
||||||
gl_display.x_swa.event_mask = StructureNotifyMask;
|
|
||||||
gl_display.x_swa.border_pixel = 0;
|
|
||||||
gl_display.x_valuemask = CWBorderPixel | CWColormap | CWEventMask;
|
|
||||||
|
|
||||||
if (OS::get_singleton()->is_layered_allowed()) {
|
if (OS::get_singleton()->is_layered_allowed()) {
|
||||||
GLXFBConfig *fbc = glXChooseFBConfig(x11_display, DefaultScreen(x11_display), visual_attribs_layered, &fbcount);
|
GLXFBConfig *fbc = glXChooseFBConfig(x11_display, DefaultScreen(x11_display), visual_attribs_layered, &fbcount);
|
||||||
ERR_FAIL_COND_V(!fbc, ERR_UNCONFIGURED);
|
ERR_FAIL_COND_V(!fbc, ERR_UNCONFIGURED);
|
||||||
@ -156,12 +152,6 @@ Error GLManager_X11::_create_context(GLDisplay &gl_display) {
|
|||||||
XFree(fbc);
|
XFree(fbc);
|
||||||
|
|
||||||
ERR_FAIL_COND_V(!fbconfig, ERR_UNCONFIGURED);
|
ERR_FAIL_COND_V(!fbconfig, ERR_UNCONFIGURED);
|
||||||
|
|
||||||
gl_display.x_swa.background_pixmap = None;
|
|
||||||
gl_display.x_swa.background_pixel = 0;
|
|
||||||
gl_display.x_swa.border_pixmap = None;
|
|
||||||
gl_display.x_valuemask |= CWBackPixel;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
GLXFBConfig *fbc = glXChooseFBConfig(x11_display, DefaultScreen(x11_display), visual_attribs, &fbcount);
|
GLXFBConfig *fbc = glXChooseFBConfig(x11_display, DefaultScreen(x11_display), visual_attribs, &fbcount);
|
||||||
ERR_FAIL_COND_V(!fbc, ERR_UNCONFIGURED);
|
ERR_FAIL_COND_V(!fbc, ERR_UNCONFIGURED);
|
||||||
@ -189,8 +179,6 @@ Error GLManager_X11::_create_context(GLDisplay &gl_display) {
|
|||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_display.x_swa.colormap = XCreateColormap(x11_display, RootWindow(x11_display, vi->screen), vi->visual, AllocNone);
|
|
||||||
|
|
||||||
XSync(x11_display, False);
|
XSync(x11_display, False);
|
||||||
XSetErrorHandler(oldHandler);
|
XSetErrorHandler(oldHandler);
|
||||||
|
|
||||||
@ -205,6 +193,10 @@ Error GLManager_X11::_create_context(GLDisplay &gl_display) {
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XVisualInfo GLManager_X11::get_vi(Display *p_display) {
|
||||||
|
return _displays[_find_or_create_display(p_display)].x_vi;
|
||||||
|
}
|
||||||
|
|
||||||
Error GLManager_X11::window_create(DisplayServer::WindowID p_window_id, ::Window p_window, Display *p_display, int p_width, int p_height) {
|
Error GLManager_X11::window_create(DisplayServer::WindowID p_window_id, ::Window p_window, Display *p_display, int p_width, int p_height) {
|
||||||
// make sure vector is big enough...
|
// make sure vector is big enough...
|
||||||
// we can mirror the external vector, it is simpler
|
// we can mirror the external vector, it is simpler
|
||||||
@ -223,8 +215,6 @@ Error GLManager_X11::window_create(DisplayServer::WindowID p_window_id, ::Window
|
|||||||
|
|
||||||
// the display could be invalid .. check NYI
|
// the display could be invalid .. check NYI
|
||||||
GLDisplay &gl_display = _displays[win.gldisplay_id];
|
GLDisplay &gl_display = _displays[win.gldisplay_id];
|
||||||
//const XVisualInfo &vi = gl_display.x_vi;
|
|
||||||
//XSetWindowAttributes &swa = gl_display.x_swa;
|
|
||||||
::Display *x11_display = gl_display.x11_display;
|
::Display *x11_display = gl_display.x11_display;
|
||||||
::Window &x11_window = win.x11_window;
|
::Window &x11_window = win.x11_window;
|
||||||
|
|
||||||
@ -315,6 +305,16 @@ void GLManager_X11::swap_buffers() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// On X11, when enabled, transparancy is always active, so clear alpha manually.
|
||||||
|
if (OS::get_singleton()->is_layered_allowed()) {
|
||||||
|
if (!DisplayServer::get_singleton()->window_get_flag(DisplayServer::WINDOW_FLAG_TRANSPARENT, _current_window->window_id)) {
|
||||||
|
glColorMask(false, false, false, true);
|
||||||
|
glClearColor(0, 0, 0, 1);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
glColorMask(true, true, true, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// print_line("\tswap_buffers");
|
// print_line("\tswap_buffers");
|
||||||
|
|
||||||
// only for debugging without drawing anything
|
// only for debugging without drawing anything
|
||||||
|
@ -68,8 +68,6 @@ private:
|
|||||||
GLManager_X11_Private *context = nullptr;
|
GLManager_X11_Private *context = nullptr;
|
||||||
::Display *x11_display;
|
::Display *x11_display;
|
||||||
XVisualInfo x_vi;
|
XVisualInfo x_vi;
|
||||||
XSetWindowAttributes x_swa;
|
|
||||||
unsigned long x_valuemask;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// just for convenience, window and display struct
|
// just for convenience, window and display struct
|
||||||
@ -102,6 +100,7 @@ private:
|
|||||||
Error _create_context(GLDisplay &gl_display);
|
Error _create_context(GLDisplay &gl_display);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
XVisualInfo get_vi(Display *p_display);
|
||||||
Error window_create(DisplayServer::WindowID p_window_id, ::Window p_window, Display *p_display, int p_width, int p_height);
|
Error window_create(DisplayServer::WindowID p_window_id, ::Window p_window, Display *p_display, int p_width, int p_height);
|
||||||
void window_destroy(DisplayServer::WindowID p_window_id);
|
void window_destroy(DisplayServer::WindowID p_window_id);
|
||||||
void window_resize(DisplayServer::WindowID p_window_id, int p_width, int p_height);
|
void window_resize(DisplayServer::WindowID p_window_id, int p_width, int p_height);
|
||||||
|
@ -1312,7 +1312,28 @@ void DisplayServerWindows::window_set_flag(WindowFlags p_flag, bool p_enabled, W
|
|||||||
_update_window_style(p_window);
|
_update_window_style(p_window);
|
||||||
} break;
|
} break;
|
||||||
case WINDOW_FLAG_TRANSPARENT: {
|
case WINDOW_FLAG_TRANSPARENT: {
|
||||||
// FIXME: Implement.
|
if (p_enabled) {
|
||||||
|
//enable per-pixel alpha
|
||||||
|
|
||||||
|
DWM_BLURBEHIND bb = { 0 };
|
||||||
|
HRGN hRgn = CreateRectRgn(0, 0, -1, -1);
|
||||||
|
bb.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;
|
||||||
|
bb.hRgnBlur = hRgn;
|
||||||
|
bb.fEnable = TRUE;
|
||||||
|
DwmEnableBlurBehindWindow(wd.hWnd, &bb);
|
||||||
|
|
||||||
|
wd.layered_window = true;
|
||||||
|
} else {
|
||||||
|
//disable per-pixel alpha
|
||||||
|
wd.layered_window = false;
|
||||||
|
|
||||||
|
DWM_BLURBEHIND bb = { 0 };
|
||||||
|
HRGN hRgn = CreateRectRgn(0, 0, -1, -1);
|
||||||
|
bb.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;
|
||||||
|
bb.hRgnBlur = hRgn;
|
||||||
|
bb.fEnable = FALSE;
|
||||||
|
DwmEnableBlurBehindWindow(wd.hWnd, &bb);
|
||||||
|
}
|
||||||
} break;
|
} break;
|
||||||
case WINDOW_FLAG_NO_FOCUS: {
|
case WINDOW_FLAG_NO_FOCUS: {
|
||||||
wd.no_focus = p_enabled;
|
wd.no_focus = p_enabled;
|
||||||
@ -1344,7 +1365,7 @@ bool DisplayServerWindows::window_get_flag(WindowFlags p_flag, WindowID p_window
|
|||||||
return wd.always_on_top;
|
return wd.always_on_top;
|
||||||
} break;
|
} break;
|
||||||
case WINDOW_FLAG_TRANSPARENT: {
|
case WINDOW_FLAG_TRANSPARENT: {
|
||||||
// FIXME: Implement.
|
return wd.layered_window;
|
||||||
} break;
|
} break;
|
||||||
case WINDOW_FLAG_NO_FOCUS: {
|
case WINDOW_FLAG_NO_FOCUS: {
|
||||||
return wd.no_focus;
|
return wd.no_focus;
|
||||||
|
@ -352,7 +352,6 @@ class DisplayServerWindows : public DisplayServer {
|
|||||||
|
|
||||||
struct WindowData {
|
struct WindowData {
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
//layered window
|
|
||||||
|
|
||||||
Vector<Vector2> mpath;
|
Vector<Vector2> mpath;
|
||||||
|
|
||||||
@ -392,10 +391,6 @@ class DisplayServerWindows : public DisplayServer {
|
|||||||
Vector2 last_tilt;
|
Vector2 last_tilt;
|
||||||
bool last_pen_inverted = false;
|
bool last_pen_inverted = false;
|
||||||
|
|
||||||
HBITMAP hBitmap; //DIB section for layered window
|
|
||||||
uint8_t *dib_data = nullptr;
|
|
||||||
Size2 dib_size;
|
|
||||||
HDC hDC_dib;
|
|
||||||
Size2 min_size;
|
Size2 min_size;
|
||||||
Size2 max_size;
|
Size2 max_size;
|
||||||
int width = 0, height = 0;
|
int width = 0, height = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user