BsGUIVector2Field.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "BsGUIVector2Field.h"
  2. #include "BsGUILayoutX.h"
  3. #include "BsGUILayoutY.h"
  4. #include "BsGUIFloatField.h"
  5. #include "BsGUILabel.h"
  6. using namespace std::placeholders;
  7. namespace BansheeEngine
  8. {
  9. const UINT32 GUIVector2Field::ELEMENT_LABEL_WIDTH = 10;
  10. GUIVector2Field::GUIVector2Field(const PrivatelyConstruct& dummy, const GUIContent& labelContent,
  11. UINT32 labelWidth, const String& style, const GUIDimensions& dimensions, bool withLabel)
  12. :TGUIField(dummy, labelContent, labelWidth, style, dimensions, withLabel),
  13. mFieldX(nullptr), mFieldY(nullptr)
  14. {
  15. mFieldX = GUIFloatField::create(HString(L"X"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
  16. mFieldY = GUIFloatField::create(HString(L"Y"), ELEMENT_LABEL_WIDTH, getSubStyleName(getFloatFieldStyleType()));
  17. mFieldX->onValueChanged.connect(std::bind(&GUIVector2Field::valueChanged, this, _1));
  18. mFieldY->onValueChanged.connect(std::bind(&GUIVector2Field::valueChanged, this, _1));
  19. mFieldX->onConfirm.connect(std::bind(&GUIVector2Field::inputConfirmed, this));
  20. mFieldY->onConfirm.connect(std::bind(&GUIVector2Field::inputConfirmed, this));
  21. mLayout->removeElement(mLabel);
  22. GUILayout* layout = mLayout->addNewElement<GUILayoutY>();
  23. layout->addElement(mLabel);
  24. mLabel->resetDimensions();
  25. GUILayout* elementLayout = layout->addNewElement<GUILayoutX>();
  26. elementLayout->addElement(mFieldX);
  27. elementLayout->addElement(mFieldY);
  28. }
  29. Vector2 GUIVector2Field::getValue() const
  30. {
  31. Vector2 value;
  32. value.x = mFieldX->getValue();
  33. value.y = mFieldY->getValue();
  34. return value;
  35. }
  36. void GUIVector2Field::setValue(const Vector2& value)
  37. {
  38. mFieldX->setValue(value.x);
  39. mFieldY->setValue(value.y);
  40. }
  41. bool GUIVector2Field::hasInputFocus() const
  42. {
  43. return mFieldX->hasInputFocus() || mFieldY->hasInputFocus();
  44. }
  45. void GUIVector2Field::setTint(const Color& color)
  46. {
  47. if (mLabel != nullptr)
  48. mLabel->setTint(color);
  49. mFieldX->setTint(color);
  50. mFieldY->setTint(color);
  51. }
  52. void GUIVector2Field::valueChanged(float newValue)
  53. {
  54. onValueChanged(getValue());
  55. }
  56. void GUIVector2Field::inputConfirmed()
  57. {
  58. onConfirm();
  59. }
  60. void GUIVector2Field::styleUpdated()
  61. {
  62. if (mLabel != nullptr)
  63. mLabel->setStyle(getSubStyleName(getLabelStyleType()));
  64. mFieldX->setStyle(getSubStyleName(getFloatFieldStyleType()));
  65. mFieldY->setStyle(getSubStyleName(getFloatFieldStyleType()));
  66. }
  67. const String& GUIVector2Field::getGUITypeName()
  68. {
  69. static String typeName = "GUIVector2Field";
  70. return typeName;
  71. }
  72. const String& GUIVector2Field::getFloatFieldStyleType()
  73. {
  74. static String LABEL_STYLE_TYPE = "EditorFloatField";
  75. return LABEL_STYLE_TYPE;
  76. }
  77. }