using Adw; using Gtk; namespace PpubViewer { 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%"; } 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; } } }