input_angle.vala 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Copyright (c) 2012-2025 Daniele Bartolini et al.
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. namespace Crown
  6. {
  7. public class InputAngle : InputField, Gtk.Box
  8. {
  9. public double _radians;
  10. public InputDouble _degrees;
  11. public void set_inconsistent(bool inconsistent)
  12. {
  13. }
  14. public bool is_inconsistent()
  15. {
  16. return false;
  17. }
  18. public GLib.Value union_value()
  19. {
  20. return this.value;
  21. }
  22. public void set_union_value(GLib.Value v)
  23. {
  24. this.value = (double)v;
  25. }
  26. public double value
  27. {
  28. get
  29. {
  30. return _radians;
  31. }
  32. set
  33. {
  34. _radians = value;
  35. // Convert to radians for displaying.
  36. _degrees.value_changed.disconnect(on_value_changed);
  37. _degrees.value = MathUtils.deg(_radians);
  38. _degrees.value_changed.connect(on_value_changed);
  39. value_changed(this);
  40. }
  41. }
  42. public InputAngle(double val = 0.0, double min = 0.0, double max = 360.0)
  43. {
  44. Object(orientation: Gtk.Orientation.HORIZONTAL, spacing: 4);
  45. _degrees = new InputDouble(val, min, max);
  46. _degrees.value_changed.connect(on_value_changed);
  47. this.pack_start(_degrees, true);
  48. }
  49. public void on_value_changed(InputField p)
  50. {
  51. double new_radians = MathUtils.rad((double)_degrees.value);
  52. if (_radians != new_radians) {
  53. _radians = new_radians;
  54. value_changed(this);
  55. }
  56. }
  57. }
  58. } /* namespace Crown */