perf(shell): render from one browser snapshot
This commit is contained in:
@@ -23,22 +23,31 @@ impl Render for ElyShell {
|
|||||||
// shade. `ThemeMode::System` defers to the OS preference via
|
// shade. `ThemeMode::System` defers to the OS preference via
|
||||||
// GPUI's `Window::appearance`; explicit Light / Dark wins.
|
// GPUI's `Window::appearance`; explicit Light / Dark wins.
|
||||||
let appearance = window.appearance();
|
let appearance = window.appearance();
|
||||||
let theme_mode = match &self.state {
|
|
||||||
ShellState::Ready(core) => {
|
|
||||||
core.snapshot().map(|s| s.appearance.theme_mode()).unwrap_or_default()
|
|
||||||
}
|
|
||||||
ShellState::StartupError(_) => ely_domain::ThemeMode::default(),
|
|
||||||
};
|
|
||||||
colors::set_mode(resolve_color_mode(theme_mode, appearance));
|
|
||||||
|
|
||||||
match &self.state {
|
match &self.state {
|
||||||
ShellState::Ready(core) => match (core.snapshot(), core.active_tab().cloned()) {
|
ShellState::Ready(core) => match core.snapshot() {
|
||||||
(Ok(snapshot), Ok(active_tab)) => {
|
Ok(snapshot) => {
|
||||||
self.render_browser(snapshot, active_tab, window, cx)
|
colors::set_mode(resolve_color_mode(
|
||||||
|
snapshot.appearance.theme_mode(),
|
||||||
|
appearance,
|
||||||
|
));
|
||||||
|
match active_tab_from_snapshot(&snapshot) {
|
||||||
|
Some(active_tab) => self.render_browser(snapshot, active_tab, window, cx),
|
||||||
|
None => render_error("active tab missing from snapshot".to_string()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(error) => {
|
||||||
|
colors::set_mode(resolve_color_mode(
|
||||||
|
ely_domain::ThemeMode::default(),
|
||||||
|
appearance,
|
||||||
|
));
|
||||||
|
render_error(error.to_string())
|
||||||
}
|
}
|
||||||
(Err(error), _) | (_, Err(error)) => render_error(error.to_string()),
|
|
||||||
},
|
},
|
||||||
ShellState::StartupError(message) => render_error(message.clone()),
|
ShellState::StartupError(message) => {
|
||||||
|
colors::set_mode(resolve_color_mode(ely_domain::ThemeMode::default(), appearance));
|
||||||
|
render_error(message.clone())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -61,6 +70,10 @@ fn resolve_color_mode(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn active_tab_from_snapshot(snapshot: &BrowserSnapshot) -> Option<BrowserTab> {
|
||||||
|
snapshot.tabs.iter().find(|tab| tab.id() == &snapshot.active_tab_id).cloned()
|
||||||
|
}
|
||||||
|
|
||||||
impl ElyShell {
|
impl ElyShell {
|
||||||
fn render_browser(
|
fn render_browser(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
|||||||
Reference in New Issue
Block a user