BsGUIVector4Field.cpp 3.4 KB

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