ZoomSpinButton.vala 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using Adw;
  2. using Gtk;
  3. namespace Publicate {
  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. zoom_out_button.sensitive = percentage != adjustment.lower;
  35. zoom_in_button.sensitive = percentage != adjustment.upper;
  36. }
  37. public void zoom_in() {
  38. adjustment.value += adjustment.step_increment;
  39. }
  40. public void zoom_out() {
  41. adjustment.value -= adjustment.step_increment;
  42. }
  43. public void reset_zoom() {
  44. adjustment.value = default_value;
  45. }
  46. }
  47. }