web_extensions/tabs/
on_zoom_change.rs1use super::prelude::*;
2
3pub fn on_zoom_change() -> OnZoomChange {
5 OnZoomChange(tabs().on_zoom_change())
6}
7
8pub struct OnZoomChange(sys::EventTarget);
10
11pub struct OnZoomChangeEventListener<'a>(EventListener<'a, dyn FnMut(sys::TabZoomChangeInfo)>);
12
13impl OnZoomChangeEventListener<'_> {
14 pub fn forget(self) {
15 self.0.forget()
16 }
17}
18
19impl OnZoomChange {
20 pub fn add_listener<L>(&self, mut listener: L) -> OnZoomChangeEventListener
21 where
22 L: FnMut(ZoomChangeInfo) + 'static,
23 {
24 let listener =
25 Closure::new(move |info: sys::TabZoomChangeInfo| listener(ZoomChangeInfo::from(info)));
26 OnZoomChangeEventListener(EventListener::raw_new(&self.0, listener))
27 }
28}
29
30#[derive(Debug, Deserialize)]
31#[serde(rename_all = "camelCase")]
32pub struct ZoomChangeInfo {
33 pub new_zoom_factor: f64,
35 pub old_zoom_factor: f64,
36 pub tab_id: i32,
37}
38
39impl From<sys::TabZoomChangeInfo> for ZoomChangeInfo {
40 fn from(info: sys::TabZoomChangeInfo) -> Self {
41 Self {
42 new_zoom_factor: info.new_zoom_factor(),
43 old_zoom_factor: info.old_zoom_factor(),
44 tab_id: info.tab_id(),
45 }
46 }
47}