Ability to force a theme on Windows (#1666)

This commit is contained in:
Viktor Zoutman 2020-11-30 19:04:26 +01:00 committed by GitHub
parent 5700359a61
commit 6ddee9a8ac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 63 additions and 37 deletions

View file

@ -34,7 +34,7 @@ use crate::{
icon::Icon,
monitor::MonitorHandle as RootMonitorHandle,
platform_impl::platform::{
dark_mode::try_dark_mode,
dark_mode::try_theme,
dpi::{dpi_to_scale_factor, hwnd_dpi},
drop_handler::FileDropHandler,
event_loop::{self, EventLoopWindowTarget, DESTROY_MSG_ID},
@ -43,7 +43,7 @@ use crate::{
window_state::{CursorFlags, SavedWindow, WindowFlags, WindowState},
PlatformSpecificWindowBuilderAttributes, WindowId,
},
window::{CursorIcon, Fullscreen, UserAttentionType, WindowAttributes},
window::{CursorIcon, Fullscreen, Theme, UserAttentionType, WindowAttributes},
};
/// The Win32 implementation of the main `Window` object.
@ -653,8 +653,8 @@ impl Window {
}
#[inline]
pub fn is_dark_mode(&self) -> bool {
self.window_state.lock().is_dark_mode
pub fn theme(&self) -> Theme {
self.window_state.lock().current_theme
}
}
@ -764,14 +764,15 @@ unsafe fn init<T: 'static>(
// If the system theme is dark, we need to set the window theme now
// before we update the window flags (and possibly show the
// window for the first time).
let dark_mode = try_dark_mode(real_window.0);
let current_theme = try_theme(real_window.0, pl_attribs.preferred_theme);
let window_state = {
let window_state = WindowState::new(
&attributes,
pl_attribs.taskbar_icon,
scale_factor,
dark_mode,
current_theme,
pl_attribs.preferred_theme,
);
let window_state = Arc::new(Mutex::new(window_state));
WindowState::set_window_flags(window_state.lock(), real_window.0, |f| *f = window_flags);