feat: impl design header
This commit is contained in:
+72
-19
@@ -1,43 +1,92 @@
|
||||
use std::rc::Rc;
|
||||
|
||||
// use slint::BackendSelector;
|
||||
|
||||
// use crate::winit::center_window;
|
||||
// mod winit;
|
||||
|
||||
slint::include_modules!();
|
||||
|
||||
fn init() -> State {
|
||||
let browser_model = Rc::new(slint::VecModel::<BrowserConfig>::from(vec![
|
||||
BrowserConfig {
|
||||
icon: "chrome".into(),
|
||||
path: "chrome.exe".into(),
|
||||
flags: "profile 1".into(),
|
||||
icon: "🦊".into(),
|
||||
name: "Work browser".into(),
|
||||
path: "firefox.exe".into(),
|
||||
flags: "--profile work".into(),
|
||||
is_default: true,
|
||||
},
|
||||
BrowserConfig {
|
||||
icon: "chrome".into(),
|
||||
icon: "🔥".into(),
|
||||
name: "Ku6epXBOCTuK".into(),
|
||||
path: "chrome.exe".into(),
|
||||
flags: "profile 2".into(),
|
||||
flags: "--profile personal".into(),
|
||||
is_default: false,
|
||||
},
|
||||
BrowserConfig {
|
||||
icon: "chrome".into(),
|
||||
icon: "🌐".into(),
|
||||
name: "Chrome".into(),
|
||||
path: "chrome.exe".into(),
|
||||
flags: "".into(),
|
||||
is_default: false,
|
||||
},
|
||||
BrowserConfig {
|
||||
icon: "🧘".into(),
|
||||
name: "Zen Browser".into(),
|
||||
path: "zen.exe".into(),
|
||||
flags: "".into(),
|
||||
},
|
||||
BrowserConfig {
|
||||
icon: "chrome".into(),
|
||||
path: "edge.exe".into(),
|
||||
flags: "".into(),
|
||||
is_default: false,
|
||||
},
|
||||
]));
|
||||
|
||||
let main_window = MainWindow::new().unwrap();
|
||||
|
||||
{
|
||||
main_window.window().on_close_requested(move || {
|
||||
todo!();
|
||||
});
|
||||
}
|
||||
main_window.set_current_url("ku6epxboctuk.github.io".into());
|
||||
main_window.set_remember_choice(true);
|
||||
main_window.set_always_ask(true);
|
||||
|
||||
main_window.on_browser_selected({
|
||||
move |browser: BrowserConfig| {
|
||||
println!("Selected browser: {:?} {:?}", browser.path, browser.flags);
|
||||
}
|
||||
});
|
||||
|
||||
main_window.on_toggle_remember(move |checked| {
|
||||
println!("Remember choice: {}", checked);
|
||||
});
|
||||
|
||||
main_window.on_toggle_always_ask(move |checked| {
|
||||
println!("Always ask: {}", checked);
|
||||
});
|
||||
|
||||
main_window.on_settings_clicked(move || {
|
||||
println!("Settings clicked");
|
||||
});
|
||||
|
||||
main_window.on_feedback_clicked(move || {
|
||||
println!("Feedback clicked");
|
||||
});
|
||||
|
||||
main_window.on_open_clicked(move || {
|
||||
println!("Open clicked");
|
||||
});
|
||||
|
||||
// main_window.on_request_drag(move || {
|
||||
// main_window.window().with_winit_window(|winit_window| {
|
||||
// winit_window.drag_window().ok();
|
||||
// });
|
||||
// });
|
||||
|
||||
// center_window(main_window.window());
|
||||
|
||||
main_window
|
||||
.window()
|
||||
.on_close_requested(move || slint::CloseRequestResponse::HideWindow);
|
||||
|
||||
main_window.set_browser_model(browser_model.clone().into());
|
||||
State {
|
||||
main_window,
|
||||
browser_model: browser_model,
|
||||
browser_model,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,9 +96,13 @@ pub struct State {
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
// TODO: how to enable skia? not panics
|
||||
// let _selector = BackendSelector::new()
|
||||
// .backend_name("renderer_skia".into())
|
||||
// .select()
|
||||
// .unwrap();
|
||||
|
||||
let state = init();
|
||||
let main_window = state.main_window.clone_strong();
|
||||
#[cfg(target_os = "android")]
|
||||
STATE.with(|ui| *ui.borrow_mut() = Some(state));
|
||||
main_window.run().unwrap();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
use i_slint_backend_winit::WinitWindowAccessor;
|
||||
use i_slint_backend_winit::winit::dpi::PhysicalPosition;
|
||||
use i_slint_backend_winit::winit::monitor::MonitorHandle;
|
||||
use i_slint_backend_winit::winit::window::Window;
|
||||
|
||||
pub fn center_window(window: &slint::Window) {
|
||||
println!("Centering window");
|
||||
if window.has_winit_window() {
|
||||
println!("Has winit");
|
||||
window.with_winit_window(|window: &Window| {
|
||||
match window.current_monitor() {
|
||||
Some(monitor) => set_centered(window, &monitor),
|
||||
None => (),
|
||||
};
|
||||
|
||||
None as Option<()>
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
fn set_centered(window: &Window, monitor: &MonitorHandle) {
|
||||
let window_size = window.outer_size();
|
||||
|
||||
let monitor_size = monitor.size();
|
||||
let monitor_position = monitor.position();
|
||||
|
||||
println!("Monitor size: {:?}", monitor_size);
|
||||
println!("Window size: {:?}", window_size);
|
||||
|
||||
let mut monitor_window_position = PhysicalPosition { x: 0, y: 0 };
|
||||
|
||||
monitor_window_position.x = (monitor_position.x as f32 + (monitor_size.width as f32 * 0.5)
|
||||
- (window_size.width as f32 * 0.5)) as i32;
|
||||
|
||||
monitor_window_position.y = (monitor_position.y as f32 + (monitor_size.height as f32 * 0.5)
|
||||
- (window_size.height as f32 * 0.5)) as i32;
|
||||
|
||||
window.set_outer_position(monitor_window_position);
|
||||
}
|
||||
Reference in New Issue
Block a user