ZoomSpinButton.vala 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using Adw;
  2. using Gtk;
  3. namespace PpubViewer {
  4. public class ZoomSpinButton : Gtk.Box {
  5. private Button zoom_out_button;
  6. private Button reset_zoom_button;
  7. private Button zoom_in_button;
  8. public Adjustment adjustment {get; set;}
  9. public int default_value {get; set;}
  10. public ZoomSpinButton(bool compact) {
  11. orientation = Orientation.HORIZONTAL;
  12. halign = Align.END;
  13. zoom_out_button = new Button.from_icon_name ("zoom-out-symbolic");
  14. zoom_in_button = new Button.from_icon_name ("zoom-in-symbolic");
  15. adjustment = new Adjustment(100, 80, 300, 10, 50, 0);
  16. default_value = 100;
  17. adjustment.value_changed.connect(() => zoom_level_changed((int)adjustment.value));
  18. append(zoom_out_button);
  19. if(!compact) {
  20. reset_zoom_button = new Button();
  21. append(reset_zoom_button);
  22. add_css_class("linked");
  23. zoom_level_changed.connect(update_label);
  24. update_label(default_value);
  25. }
  26. append(zoom_in_button);
  27. zoom_in_button.clicked.connect(zoom_in);
  28. zoom_out_button.clicked.connect(zoom_out);
  29. reset_zoom_button.clicked.connect(reset_zoom);
  30. }
  31. public signal void zoom_level_changed(int percentage);
  32. private void update_label(int percentage) {
  33. reset_zoom_button.label = @"$percentage%";
  34. }
  35. public void zoom_in() {
  36. adjustment.value += adjustment.step_increment;
  37. }
  38. public void zoom_out() {
  39. adjustment.value -= adjustment.step_increment;
  40. }
  41. public void reset_zoom() {
  42. adjustment.value = default_value;
  43. }
  44. }
  45. }