Add Servo page zoom support
This commit is contained in:
@@ -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)?))
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user