Add framework for avoidance of color flash in new windows
This commit is contained in:
parent
73ab514657
commit
d0e37cd04c
|
@ -1262,6 +1262,12 @@
|
||||||
Tries to free an object in the RenderingServer.
|
Tries to free an object in the RenderingServer.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="get_default_clear_color">
|
||||||
|
<return type="Color" />
|
||||||
|
<description>
|
||||||
|
Returns the default clear color which is used when a specific clear color has not been selected.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="get_frame_setup_time_cpu" qualifiers="const">
|
<method name="get_frame_setup_time_cpu" qualifiers="const">
|
||||||
<return type="float" />
|
<return type="float" />
|
||||||
<description>
|
<description>
|
||||||
|
|
|
@ -688,6 +688,7 @@ void EditorNode::_notification(int p_what) {
|
||||||
|
|
||||||
if (theme_changed) {
|
if (theme_changed) {
|
||||||
theme = create_custom_theme(theme_base->get_theme());
|
theme = create_custom_theme(theme_base->get_theme());
|
||||||
|
DisplayServer::set_early_window_clear_color_override(true, theme->get_color(SNAME("background"), SNAME("Editor")));
|
||||||
|
|
||||||
theme_base->set_theme(theme);
|
theme_base->set_theme(theme);
|
||||||
gui_base->set_theme(theme);
|
gui_base->set_theme(theme);
|
||||||
|
@ -6235,6 +6236,7 @@ EditorNode::EditorNode() {
|
||||||
// Exporters might need the theme.
|
// Exporters might need the theme.
|
||||||
EditorColorMap::create();
|
EditorColorMap::create();
|
||||||
theme = create_custom_theme();
|
theme = create_custom_theme();
|
||||||
|
DisplayServer::set_early_window_clear_color_override(true, theme->get_color(SNAME("background"), SNAME("Editor")));
|
||||||
|
|
||||||
register_exporters();
|
register_exporters();
|
||||||
|
|
||||||
|
|
|
@ -753,6 +753,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
|
||||||
// Editor background
|
// Editor background
|
||||||
Color background_color_opaque = background_color;
|
Color background_color_opaque = background_color;
|
||||||
background_color_opaque.a = 1.0;
|
background_color_opaque.a = 1.0;
|
||||||
|
theme->set_color("background", "Editor", background_color_opaque);
|
||||||
theme->set_stylebox("Background", "EditorStyles", make_flat_stylebox(background_color_opaque, default_margin_size, default_margin_size, default_margin_size, default_margin_size));
|
theme->set_stylebox("Background", "EditorStyles", make_flat_stylebox(background_color_opaque, default_margin_size, default_margin_size, default_margin_size, default_margin_size));
|
||||||
|
|
||||||
// Focus
|
// Focus
|
||||||
|
|
|
@ -2653,8 +2653,9 @@ ProjectManager::ProjectManager() {
|
||||||
AcceptDialog::set_swap_cancel_ok(swap_cancel_ok == 2);
|
AcceptDialog::set_swap_cancel_ok(swap_cancel_ok == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_anchors_and_offsets_preset(Control::PRESET_FULL_RECT);
|
Ref<Theme> theme = create_custom_theme();
|
||||||
set_theme(create_custom_theme());
|
set_theme(theme);
|
||||||
|
DisplayServer::set_early_window_clear_color_override(true, theme->get_color(SNAME("background"), SNAME("Editor")));
|
||||||
|
|
||||||
set_anchors_and_offsets_preset(Control::PRESET_FULL_RECT);
|
set_anchors_and_offsets_preset(Control::PRESET_FULL_RECT);
|
||||||
|
|
||||||
|
|
|
@ -1920,6 +1920,9 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||||
window_position = &position;
|
window_position = &position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Color boot_bg_color = GLOBAL_DEF_BASIC("application/boot_splash/bg_color", boot_splash_bg_color);
|
||||||
|
DisplayServer::set_early_window_clear_color_override(true, boot_bg_color);
|
||||||
|
|
||||||
// rendering_driver now held in static global String in main and initialized in setup()
|
// rendering_driver now held in static global String in main and initialized in setup()
|
||||||
Error err;
|
Error err;
|
||||||
display_server = DisplayServer::create(display_driver_idx, rendering_driver, window_mode, window_vsync_mode, window_flags, window_position, window_size, init_screen, err);
|
display_server = DisplayServer::create(display_driver_idx, rendering_driver, window_mode, window_vsync_mode, window_flags, window_position, window_size, init_screen, err);
|
||||||
|
@ -2085,7 +2088,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||||
boot_logo->set_pixel(0, 0, Color(0, 0, 0, 0));
|
boot_logo->set_pixel(0, 0, Color(0, 0, 0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
Color boot_bg_color = GLOBAL_DEF_BASIC("application/boot_splash/bg_color", boot_splash_bg_color);
|
Color boot_bg_color = GLOBAL_GET("application/boot_splash/bg_color");
|
||||||
|
|
||||||
#if defined(TOOLS_ENABLED) && !defined(NO_EDITOR_SPLASH)
|
#if defined(TOOLS_ENABLED) && !defined(NO_EDITOR_SPLASH)
|
||||||
boot_bg_color =
|
boot_bg_color =
|
||||||
|
@ -2120,6 +2123,8 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisplayServer::set_early_window_clear_color_override(false);
|
||||||
|
|
||||||
MAIN_PRINT("Main: DCC");
|
MAIN_PRINT("Main: DCC");
|
||||||
RenderingServer::get_singleton()->set_default_clear_color(
|
RenderingServer::get_singleton()->set_default_clear_color(
|
||||||
GLOBAL_GET("rendering/environment/defaults/default_clear_color"));
|
GLOBAL_GET("rendering/environment/defaults/default_clear_color"));
|
||||||
|
|
|
@ -38,6 +38,9 @@ DisplayServer *DisplayServer::singleton = nullptr;
|
||||||
|
|
||||||
bool DisplayServer::hidpi_allowed = false;
|
bool DisplayServer::hidpi_allowed = false;
|
||||||
|
|
||||||
|
bool DisplayServer::window_early_clear_override_enabled = false;
|
||||||
|
Color DisplayServer::window_early_clear_override_color = Color(0, 0, 0, 0);
|
||||||
|
|
||||||
DisplayServer::DisplayServerCreate DisplayServer::server_create_functions[DisplayServer::MAX_SERVERS] = {
|
DisplayServer::DisplayServerCreate DisplayServer::server_create_functions[DisplayServer::MAX_SERVERS] = {
|
||||||
{ "headless", &DisplayServerHeadless::create_func, &DisplayServerHeadless::get_rendering_drivers_func }
|
{ "headless", &DisplayServerHeadless::create_func, &DisplayServerHeadless::get_rendering_drivers_func }
|
||||||
};
|
};
|
||||||
|
@ -315,6 +318,23 @@ void DisplayServer::tts_post_utterance_event(TTSUtteranceEvent p_event, int p_id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DisplayServer::_get_window_early_clear_override(Color &r_color) {
|
||||||
|
if (window_early_clear_override_enabled) {
|
||||||
|
r_color = window_early_clear_override_color;
|
||||||
|
return true;
|
||||||
|
} else if (RenderingServer::get_singleton()) {
|
||||||
|
r_color = RenderingServer::get_singleton()->get_default_clear_color();
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplayServer::set_early_window_clear_color_override(bool p_enabled, Color p_color) {
|
||||||
|
window_early_clear_override_enabled = p_enabled;
|
||||||
|
window_early_clear_override_color = p_color;
|
||||||
|
}
|
||||||
|
|
||||||
void DisplayServer::mouse_set_mode(MouseMode p_mode) {
|
void DisplayServer::mouse_set_mode(MouseMode p_mode) {
|
||||||
WARN_PRINT("Mouse is not supported by this display server.");
|
WARN_PRINT("Mouse is not supported by this display server.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -217,6 +217,16 @@ public:
|
||||||
virtual bool is_dark_mode() const { return false; };
|
virtual bool is_dark_mode() const { return false; };
|
||||||
virtual Color get_accent_color() const { return Color(0, 0, 0, 0); };
|
virtual Color get_accent_color() const { return Color(0, 0, 0, 0); };
|
||||||
|
|
||||||
|
private:
|
||||||
|
static bool window_early_clear_override_enabled;
|
||||||
|
static Color window_early_clear_override_color;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static bool _get_window_early_clear_override(Color &r_color);
|
||||||
|
|
||||||
|
public:
|
||||||
|
static void set_early_window_clear_color_override(bool p_enabled, Color p_color = Color(0, 0, 0, 0));
|
||||||
|
|
||||||
enum MouseMode {
|
enum MouseMode {
|
||||||
MOUSE_MODE_VISIBLE,
|
MOUSE_MODE_VISIBLE,
|
||||||
MOUSE_MODE_HIDDEN,
|
MOUSE_MODE_HIDDEN,
|
||||||
|
|
|
@ -291,6 +291,10 @@ void RenderingServerDefault::set_boot_image(const Ref<Image> &p_image, const Col
|
||||||
RSG::rasterizer->set_boot_image(p_image, p_color, p_scale, p_use_filter);
|
RSG::rasterizer->set_boot_image(p_image, p_color, p_scale, p_use_filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Color RenderingServerDefault::get_default_clear_color() {
|
||||||
|
return RSG::texture_storage->get_default_clear_color();
|
||||||
|
}
|
||||||
|
|
||||||
void RenderingServerDefault::set_default_clear_color(const Color &p_color) {
|
void RenderingServerDefault::set_default_clear_color(const Color &p_color) {
|
||||||
RSG::viewport->set_default_clear_color(p_color);
|
RSG::viewport->set_default_clear_color(p_color);
|
||||||
}
|
}
|
||||||
|
|
|
@ -986,6 +986,7 @@ public:
|
||||||
virtual double get_frame_setup_time_cpu() const override;
|
virtual double get_frame_setup_time_cpu() const override;
|
||||||
|
|
||||||
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true) override;
|
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true) override;
|
||||||
|
virtual Color get_default_clear_color() override;
|
||||||
virtual void set_default_clear_color(const Color &p_color) override;
|
virtual void set_default_clear_color(const Color &p_color) override;
|
||||||
|
|
||||||
virtual bool has_feature(Features p_feature) const override;
|
virtual bool has_feature(Features p_feature) const override;
|
||||||
|
|
|
@ -2763,6 +2763,7 @@ void RenderingServer::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("get_white_texture"), &RenderingServer::get_white_texture);
|
ClassDB::bind_method(D_METHOD("get_white_texture"), &RenderingServer::get_white_texture);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_boot_image", "image", "color", "scale", "use_filter"), &RenderingServer::set_boot_image, DEFVAL(true));
|
ClassDB::bind_method(D_METHOD("set_boot_image", "image", "color", "scale", "use_filter"), &RenderingServer::set_boot_image, DEFVAL(true));
|
||||||
|
ClassDB::bind_method(D_METHOD("get_default_clear_color"), &RenderingServer::get_default_clear_color);
|
||||||
ClassDB::bind_method(D_METHOD("set_default_clear_color", "color"), &RenderingServer::set_default_clear_color);
|
ClassDB::bind_method(D_METHOD("set_default_clear_color", "color"), &RenderingServer::set_default_clear_color);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("has_feature", "feature"), &RenderingServer::has_feature);
|
ClassDB::bind_method(D_METHOD("has_feature", "feature"), &RenderingServer::has_feature);
|
||||||
|
|
|
@ -1560,6 +1560,7 @@ public:
|
||||||
virtual void mesh_add_surface_from_planes(RID p_mesh, const Vector<Plane> &p_planes);
|
virtual void mesh_add_surface_from_planes(RID p_mesh, const Vector<Plane> &p_planes);
|
||||||
|
|
||||||
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true) = 0;
|
virtual void set_boot_image(const Ref<Image> &p_image, const Color &p_color, bool p_scale, bool p_use_filter = true) = 0;
|
||||||
|
virtual Color get_default_clear_color() = 0;
|
||||||
virtual void set_default_clear_color(const Color &p_color) = 0;
|
virtual void set_default_clear_color(const Color &p_color) = 0;
|
||||||
|
|
||||||
enum Features {
|
enum Features {
|
||||||
|
|
Loading…
Reference in New Issue