-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathzoom.rs
More file actions
87 lines (74 loc) · 3.71 KB
/
Copy pathzoom.rs
File metadata and controls
87 lines (74 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
use gtk::{GestureClick, Popover, PositionType, Scale};
use gtk::glib;
use gtk::prelude::*;
use gtk::subclass::prelude::ObjectSubclassIsExt;
use crate::glib::clone;
use crate::gtk_wrappers;
pub(crate) fn make_zoom() -> (Popover, Scale, Scale) {
let horizontal_adjustment = gtk::Adjustment::new(
100.0, // The value where the handle will be at the initial state
50.0, // Lower bound
200.0, // Upper bound
10.0, // Step increment, keep it 0 if you don't want it to be operated by arrow keys
20.0, // Page increment
0.0, // Page size
);
let zoomx = Scale::new(gtk::Orientation::Horizontal, Some(&horizontal_adjustment));
zoomx.add_mark(100f64, PositionType::Top, None);
zoomx.set_round_digits(0);
zoomx.set_width_request(300);
zoomx.set_height_request(50);
let vertical_adjustment = gtk::Adjustment::new(
100.0, // The value where the handle will be at the initial state
50.0, // Lower bound
200.0, // Upper bound
10.0, // Step increment, keep it 0 if you don't want it to be operated by arrow keys
20.0, // Page increment
0.0, // Page size
);
let zoomy = gtk::Scale::new(gtk::Orientation::Vertical, Some(&vertical_adjustment));
zoomy.add_mark(100f64, PositionType::Top, None);
zoomy.set_round_digits(0);
zoomy.set_width_request(50);
zoomy.set_height_request(300);
let grid = gtk::Fixed::builder().build();
grid.put(&zoomy, 275f64, 0f64);
grid.put(&zoomx, 0f64, 275f64);
let popover = Popover::builder().build();
popover.set_position(PositionType::Bottom);
popover.set_size_request(300, 300);
popover.set_child(Some(&grid));
let commit = gtk::Button::builder().label("commit").build();
commit.connect_clicked(clone!(@weak popover, @weak zoomx, @weak zoomy => move|_b| {
let ds = gtk_wrappers::get_application(&popover);
ds.imp().metafolder.borrow_mut().zoom_commit_and_save_settings(&popover);
}));
grid.put(&commit, 0f64, 0f64);
let zero = gtk::Button::builder().label("zero").build();
zero.connect_clicked(clone!(@weak popover, @weak zoomx, @weak zoomy => move |_b| {
let ds = gtk_wrappers::get_application(&popover);
ds.imp().metafolder.borrow_mut().unzoom_and_save_settings(&popover);
}));
grid.put(&zero, 100f64, 0f64);
let gesture_click_y = GestureClick::new();
gesture_click_y.connect_unpaired_release(clone!(@weak zoomx, @weak zoomy, @weak popover => move |_click, _, _, _, _|{
let ds = gtk_wrappers::get_application(&popover);
ds.imp().metafolder.borrow_mut().zoom_and_save_settings(zoomx.value() as i32, zoomy.value() as i32, &popover);
}));
gesture_click_y.connect_stopped(clone!(@weak zoomx, @weak zoomy, @weak popover => move|_click| {
let ds = gtk_wrappers::get_application(&popover);
ds.imp().metafolder.borrow_mut().zoom_and_save_settings(zoomx.value() as i32, zoomy.value() as i32, &popover);
}));
zoomy.add_controller(gesture_click_y);
let gesture_click_x = GestureClick::new();
gesture_click_x.connect_unpaired_release(clone!(@weak zoomx, @weak zoomy, @weak popover => move |_click, _, _, _, _|{
let ds = gtk_wrappers::get_application(&popover);
ds.imp().metafolder.borrow_mut().zoom_and_save_settings(zoomx.value() as i32, zoomy.value() as i32, &popover);
}));
gesture_click_x.connect_stopped(clone!(@weak zoomx, @weak zoomy, @weak popover => move|_click| {
let ds = gtk_wrappers::get_application(&popover);
ds.imp().metafolder.borrow_mut().zoom_and_save_settings(zoomx.value() as i32, zoomy.value() as i32, &popover);
}));
zoomx.add_controller(gesture_click_x);
(popover, zoomx, zoomy)
}