input_vector3.vala 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 InputVector3 : InputField
  8. {
  9. public InputDouble _x;
  10. public InputDouble _y;
  11. public InputDouble _z;
  12. public Gtk.Box _box;
  13. public override void set_inconsistent(bool inconsistent)
  14. {
  15. }
  16. public override bool is_inconsistent()
  17. {
  18. return false;
  19. }
  20. public override GLib.Value union_value()
  21. {
  22. return this.value;
  23. }
  24. public override void set_union_value(GLib.Value v)
  25. {
  26. this.value = (Vector3)v;
  27. }
  28. public Vector3 value
  29. {
  30. get
  31. {
  32. return Vector3(_x.value, _y.value, _z.value);
  33. }
  34. set
  35. {
  36. Vector3 val = value;
  37. _x.value_changed.disconnect(on_value_changed);
  38. _y.value_changed.disconnect(on_value_changed);
  39. _z.value_changed.disconnect(on_value_changed);
  40. _x.value = val.x;
  41. _y.value = val.y;
  42. _z.value = val.z;
  43. _x.value_changed.connect(on_value_changed);
  44. _y.value_changed.connect(on_value_changed);
  45. _z.value_changed.connect(on_value_changed);
  46. value_changed(this);
  47. }
  48. }
  49. public InputVector3(Vector3 xyz, Vector3 min, Vector3 max, int preview_decimals = 4, int edit_decimals = 5)
  50. {
  51. _x = new InputDouble(xyz.x, min.x, max.x, preview_decimals, edit_decimals);
  52. _x.get_style_context().add_class("axis");
  53. _x.get_style_context().add_class("x");
  54. _y = new InputDouble(xyz.y, min.y, max.y, preview_decimals, edit_decimals);
  55. _y.get_style_context().add_class("axis");
  56. _y.get_style_context().add_class("y");
  57. _z = new InputDouble(xyz.z, min.z, max.z, preview_decimals, edit_decimals);
  58. _z.get_style_context().add_class("axis");
  59. _z.get_style_context().add_class("z");
  60. _x.value_changed.connect(on_value_changed);
  61. _y.value_changed.connect(on_value_changed);
  62. _z.value_changed.connect(on_value_changed);
  63. _box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 4);
  64. _box.pack_start(_x, true);
  65. _box.pack_start(_y, true);
  66. _box.pack_start(_z, true);
  67. this.add(_box);
  68. }
  69. public void on_value_changed()
  70. {
  71. value_changed(this);
  72. }
  73. }
  74. } /* namespace Crown */