lesavka: cover startup preview profile sync
This commit is contained in:
parent
e842b0c5c6
commit
bec9885537
@ -326,6 +326,28 @@ impl LauncherPreview {
|
|||||||
self.rebuild_feed(&self.window_feeds, monitor_id, None, Some((width, height)));
|
self.rebuild_feed(&self.window_feeds, monitor_id, None, Some((width, height)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
pub(crate) fn profile_for_test(
|
||||||
|
&self,
|
||||||
|
monitor_id: usize,
|
||||||
|
surface: PreviewSurface,
|
||||||
|
) -> Option<(i32, i32, i32, i32, u32, u32, bool)> {
|
||||||
|
let feed = match surface {
|
||||||
|
PreviewSurface::Inline => self.inline_feeds.lock().ok()?.get(monitor_id).cloned(),
|
||||||
|
PreviewSurface::Window => self.window_feeds.lock().ok()?.get(monitor_id).cloned(),
|
||||||
|
}?;
|
||||||
|
let profile = feed.profile();
|
||||||
|
Some((
|
||||||
|
profile.display_width,
|
||||||
|
profile.display_height,
|
||||||
|
profile.requested_width,
|
||||||
|
profile.requested_height,
|
||||||
|
profile.requested_fps,
|
||||||
|
profile.max_bitrate_kbit,
|
||||||
|
profile.prefer_reencode,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
fn rebuild_feed(
|
fn rebuild_feed(
|
||||||
&self,
|
&self,
|
||||||
feeds: &Arc<Mutex<[PreviewFeed; 2]>>,
|
feeds: &Arc<Mutex<[PreviewFeed; 2]>>,
|
||||||
|
|||||||
@ -461,12 +461,7 @@ fn rebind_popout_preview(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(coverage))]
|
#[cfg(not(coverage))]
|
||||||
fn sync_preview_profiles(
|
fn apply_preview_profiles(preview: &super::preview::LauncherPreview, state: &LauncherState) {
|
||||||
preview: &super::preview::LauncherPreview,
|
|
||||||
widgets: &super::ui_components::LauncherWidgets,
|
|
||||||
popouts: &Rc<RefCell<[Option<super::ui_components::PopoutWindowHandle>; 2]>>,
|
|
||||||
state: &LauncherState,
|
|
||||||
) {
|
|
||||||
for monitor_id in 0..2 {
|
for monitor_id in 0..2 {
|
||||||
let capture = state.capture_size_choice(monitor_id);
|
let capture = state.capture_size_choice(monitor_id);
|
||||||
let breakout = state.breakout_size_choice(monitor_id);
|
let breakout = state.breakout_size_choice(monitor_id);
|
||||||
@ -479,6 +474,18 @@ fn sync_preview_profiles(
|
|||||||
capture.preset != CaptureSizePreset::Source,
|
capture.preset != CaptureSizePreset::Source,
|
||||||
);
|
);
|
||||||
preview.set_breakout_profile(monitor_id, breakout.width, breakout.height);
|
preview.set_breakout_profile(monitor_id, breakout.width, breakout.height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(coverage))]
|
||||||
|
fn sync_preview_profiles(
|
||||||
|
preview: &super::preview::LauncherPreview,
|
||||||
|
widgets: &super::ui_components::LauncherWidgets,
|
||||||
|
popouts: &Rc<RefCell<[Option<super::ui_components::PopoutWindowHandle>; 2]>>,
|
||||||
|
state: &LauncherState,
|
||||||
|
) {
|
||||||
|
apply_preview_profiles(preview, state);
|
||||||
|
for monitor_id in 0..2 {
|
||||||
rebind_inline_preview(preview, widgets, monitor_id);
|
rebind_inline_preview(preview, widgets, monitor_id);
|
||||||
rebind_popout_preview(preview, popouts, monitor_id);
|
rebind_popout_preview(preview, popouts, monitor_id);
|
||||||
}
|
}
|
||||||
@ -1900,6 +1907,60 @@ pub fn run_gui_launcher(_server_addr: String) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(all(test, not(coverage)))]
|
||||||
|
mod tests {
|
||||||
|
use super::apply_preview_profiles;
|
||||||
|
use crate::launcher::preview::{LauncherPreview, PreviewSurface};
|
||||||
|
use crate::launcher::state::{CaptureSizePreset, LauncherState};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn fresh_preview_bootstrap_is_overridden_by_launcher_state_profiles() {
|
||||||
|
let preview = LauncherPreview::new("http://127.0.0.1:1".to_string()).unwrap();
|
||||||
|
let state = LauncherState::default();
|
||||||
|
|
||||||
|
let bootstrap = preview.profile_for_test(1, PreviewSurface::Inline).unwrap();
|
||||||
|
assert_eq!(bootstrap.2, 960);
|
||||||
|
assert_eq!(bootstrap.3, 540);
|
||||||
|
assert_eq!(bootstrap.4, 24);
|
||||||
|
|
||||||
|
apply_preview_profiles(&preview, &state);
|
||||||
|
|
||||||
|
let inline = preview.profile_for_test(1, PreviewSurface::Inline).unwrap();
|
||||||
|
assert_eq!(inline.2, 1920);
|
||||||
|
assert_eq!(inline.3, 1080);
|
||||||
|
assert_eq!(inline.4, 24);
|
||||||
|
assert_eq!(inline.5, 4_000);
|
||||||
|
assert!(inline.6);
|
||||||
|
|
||||||
|
let window = preview.profile_for_test(1, PreviewSurface::Window).unwrap();
|
||||||
|
assert_eq!(window.2, 1920);
|
||||||
|
assert_eq!(window.3, 1080);
|
||||||
|
assert_eq!(window.4, 30);
|
||||||
|
assert_eq!(window.5, 12_000);
|
||||||
|
assert!(window.6);
|
||||||
|
|
||||||
|
preview.shutdown_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn source_preview_profile_stays_honest_after_apply() {
|
||||||
|
let preview = LauncherPreview::new("http://127.0.0.1:1".to_string()).unwrap();
|
||||||
|
let mut state = LauncherState::default();
|
||||||
|
state.set_capture_size_preset(1, CaptureSizePreset::Source);
|
||||||
|
|
||||||
|
apply_preview_profiles(&preview, &state);
|
||||||
|
|
||||||
|
let inline = preview.profile_for_test(1, PreviewSurface::Inline).unwrap();
|
||||||
|
assert_eq!(inline.2, 1920);
|
||||||
|
assert_eq!(inline.3, 1080);
|
||||||
|
assert_eq!(inline.4, 30);
|
||||||
|
assert_eq!(inline.5, 12_000);
|
||||||
|
assert!(!inline.6);
|
||||||
|
|
||||||
|
preview.shutdown_all();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(all(test, coverage))]
|
#[cfg(all(test, coverage))]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::{run_gui_launcher, session_preview_active};
|
use super::{run_gui_launcher, session_preview_active};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user