feat: 添加双屏控制功能,更新相关逻辑以支持双屏窗口全屏展示;新增全局错误边界组件以处理渲染错误
This commit is contained in:
+11
-2
@@ -24,15 +24,17 @@ fn set_dual_screen(app: AppHandle, on: bool) -> Result<String, String> {
|
||||
let _ = w.set_focus();
|
||||
return Ok("on".into());
|
||||
}
|
||||
let mut builder = WebviewWindowBuilder::new(&app, "secondary", WebviewUrl::App("/".into()))
|
||||
let mut builder = WebviewWindowBuilder::new(&app, "secondary", WebviewUrl::default())
|
||||
.title("OPC 运营中心 · 双屏");
|
||||
// 定位到第二块屏(非主屏;无第二屏则用第一块)
|
||||
if let Ok(monitors) = app.available_monitors() {
|
||||
eprintln!("[dual] available_monitors={}", monitors.len());
|
||||
let primary_pos = app
|
||||
.primary_monitor()
|
||||
.ok()
|
||||
.flatten()
|
||||
.map(|pm| { let p = pm.position(); (p.x, p.y) });
|
||||
eprintln!("[dual] primary_pos={:?}", primary_pos);
|
||||
let target = monitors
|
||||
.iter()
|
||||
.find(|m| { let p = m.position(); Some((p.x, p.y)) != primary_pos })
|
||||
@@ -40,11 +42,18 @@ fn set_dual_screen(app: AppHandle, on: bool) -> Result<String, String> {
|
||||
if let Some(mon) = target {
|
||||
let p = mon.position();
|
||||
let s = mon.size();
|
||||
eprintln!("[dual] target {}x{} @ {},{}", s.width, s.height, p.x, p.y);
|
||||
builder = builder.position(p.x as f64, p.y as f64).inner_size(s.width as f64, s.height as f64);
|
||||
}
|
||||
}
|
||||
let win = builder.build().map_err(|e| e.to_string())?;
|
||||
let _ = win.set_fullscreen(true);
|
||||
// 等窗口内容就绪后再全屏(避免过早全屏导致白屏/布局异常)
|
||||
let win2 = win.clone();
|
||||
std::thread::spawn(move || {
|
||||
std::thread::sleep(std::time::Duration::from_millis(400));
|
||||
let _ = win2.set_fullscreen(true);
|
||||
let _ = win2.set_focus();
|
||||
});
|
||||
Ok("on".into())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user