input_angle.vala 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. * Copyright (c) 2012-2026 Daniele Bartolini et al.
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. namespace Crown
  6. {
  7. public class InputAngle : InputField
  8. {
  9. public double _radians;
  10. public InputDouble _degrees;
  11. public override void set_inconsistent(bool inconsistent)
  12. {
  13. }
  14. public override bool is_inconsistent()
  15. {
  16. return false;
  17. }
  18. public override GLib.Value union_value()
  19. {
  20. return this.value;
  21. }
  22. public override 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. _degrees = new InputDouble(val, min, max);
  45. _degrees.value_changed.connect(on_value_changed);
  46. this.add(_degrees);
  47. }
  48. public void on_value_changed(InputField p)
  49. {
  50. double new_radians = MathUtils.rad((double)_degrees.value);
  51. if (_radians != new_radians) {
  52. _radians = new_radians;
  53. value_changed(this);
  54. }
  55. }
  56. }
  57. } /* namespace Crown */