Add Servo page zoom support

This commit is contained in:
2026-05-09 12:32:44 -04:00
parent 088d1166c4
commit 1faa7423c1
26 changed files with 697 additions and 280 deletions
@@ -133,6 +133,10 @@ impl BrowserCore {
self.archive_idle_tabs(SystemTime::now())?;
return Ok(true);
}
if let Some(percent) = zoom_percent(command)? {
self.set_active_tab_zoom_percent(percent)?;
return Ok(true);
}
if let Some(percent) = reading_progress_percent(command)? {
self.set_active_tab_reading_progress(percent)?;
return Ok(true);
@@ -167,6 +171,18 @@ impl BrowserCore {
self.open_new_tab()?;
Ok(true)
}
"zoom-in" | "zoom in" => {
self.zoom_active_tab_in()?;
Ok(true)
}
"zoom-out" | "zoom out" => {
self.zoom_active_tab_out()?;
Ok(true)
}
"reset-zoom" | "reset zoom" | "actual-size" | "actual size" => {
self.reset_active_tab_zoom()?;
Ok(true)
}
"move-tab-up" | "move tab up" | "tab-up" | "tab up" => self.move_active_tab_up(),
"move-tab-down" | "move tab down" | "tab-down" | "tab down" => {
self.move_active_tab_down()
@@ -446,3 +462,19 @@ impl BrowserCore {
.transpose()
}
}
fn zoom_percent(command: &str) -> Result<Option<u16>, CoreError> {
let command = command.trim();
let lowercased = command.to_ascii_lowercase();
let value = ["zoom ", "set-zoom ", "set zoom "]
.into_iter()
.find_map(|prefix| lowercased.starts_with(prefix).then(|| &command[prefix.len()..]));
let Some(value) = value else { return Ok(None) };
let percent = value
.trim()
.trim_end_matches('%')
.parse::<u16>()
.map_err(|_| CoreError::Domain(ely_domain::DomainError::InvalidCommand))?;
Ok(Some(ely_domain::validate_zoom_percent(percent)?))
}
+29
View File
@@ -220,6 +220,30 @@ impl BrowserCore {
Ok(next_pinned)
}
pub fn set_active_tab_zoom_percent(&mut self, zoom_percent: u16) -> Result<u16, CoreError> {
let active_tab = self.active_tab_mut()?;
active_tab.set_zoom_percent(zoom_percent)?;
Ok(active_tab.zoom_percent())
}
pub fn zoom_active_tab_in(&mut self) -> Result<u16, CoreError> {
let active_tab = self.active_tab_mut()?;
active_tab.zoom_in();
Ok(active_tab.zoom_percent())
}
pub fn zoom_active_tab_out(&mut self) -> Result<u16, CoreError> {
let active_tab = self.active_tab_mut()?;
active_tab.zoom_out();
Ok(active_tab.zoom_percent())
}
pub fn reset_active_tab_zoom(&mut self) -> Result<u16, CoreError> {
let active_tab = self.active_tab_mut()?;
active_tab.reset_zoom();
Ok(active_tab.zoom_percent())
}
pub fn set_tab_sync_enabled(
&mut self,
tab_id: &TabId,
@@ -337,6 +361,11 @@ impl BrowserCore {
.ok_or(CoreError::MissingActiveTab)
}
fn active_tab_mut(&mut self) -> Result<&mut BrowserTab, CoreError> {
let active_index = self.active_tab_index()?;
self.tabs.get_mut(active_index).ok_or(CoreError::MissingActiveTab)
}
pub(super) fn build_tab(&self, url: UrlText) -> BrowserTab {
self.build_tab_for(self.active_space_id.clone(), self.active_profile_id.clone(), url)
.with_parent_tab_id(self.active_tab_id.clone())