1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- using Adw;
- using Gtk;
- namespace Publicate {
- public class ZoomSpinButton : Gtk.Box {
- private Button zoom_out_button;
- private Button reset_zoom_button;
- private Button zoom_in_button;
- public Adjustment adjustment {get; set;}
- public int default_value {get; set;}
- public ZoomSpinButton(bool compact) {
- orientation = Orientation.HORIZONTAL;
- halign = Align.END;
-
- zoom_out_button = new Button.from_icon_name ("zoom-out-symbolic");
- zoom_in_button = new Button.from_icon_name ("zoom-in-symbolic");
- adjustment = new Adjustment(100, 80, 300, 10, 50, 0);
- default_value = 100;
-
-
- adjustment.value_changed.connect(() => zoom_level_changed((int)adjustment.value));
-
- append(zoom_out_button);
- if(!compact) {
- reset_zoom_button = new Button();
- append(reset_zoom_button);
- add_css_class("linked");
- zoom_level_changed.connect(update_label);
- update_label(default_value);
- }
- append(zoom_in_button);
-
- zoom_in_button.clicked.connect(zoom_in);
- zoom_out_button.clicked.connect(zoom_out);
- reset_zoom_button.clicked.connect(reset_zoom);
- }
- public signal void zoom_level_changed(int percentage);
- private void update_label(int percentage) {
- reset_zoom_button.label = @"$percentage%";
- zoom_out_button.sensitive = percentage != adjustment.lower;
- zoom_in_button.sensitive = percentage != adjustment.upper;
- }
- public void zoom_in() {
- adjustment.value += adjustment.step_increment;
- }
- public void zoom_out() {
- adjustment.value -= adjustment.step_increment;
- }
- public void reset_zoom() {
- adjustment.value = default_value;
- }
- }
- }
|