BsGUISlider.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #include "BsGUISlider.h"
  2. #include "BsGUIWidget.h"
  3. #include "BsGUISkin.h"
  4. #include "BsGUISliderHandle.h"
  5. #include "BsGUITexture.h"
  6. #include "BsSpriteTexture.h"
  7. #include "BsGUIDimensions.h"
  8. using namespace std::placeholders;
  9. namespace BansheeEngine
  10. {
  11. GUISlider::GUISlider(bool horizontal, const String& styleName, const GUIDimensions& dimensions)
  12. :GUIElementContainer(dimensions, styleName)
  13. {
  14. mSliderHandle = GUISliderHandle::create(horizontal, true, getSubStyleName(getHandleStyleType()));
  15. mBackground = GUITexture::create(getSubStyleName(getBackgroundStyleType()));
  16. mBackground->_setElementDepth(mSliderHandle->_getRenderElementDepthRange());
  17. _registerChildElement(mSliderHandle);
  18. _registerChildElement(mBackground);
  19. mHandleMovedConn = mSliderHandle->onHandleMoved.connect(std::bind(&GUISlider::onHandleMoved, this, _1));
  20. }
  21. GUISlider::~GUISlider()
  22. {
  23. mHandleMovedConn.disconnect();
  24. }
  25. const String& GUISlider::getHandleStyleType()
  26. {
  27. static String HANDLE_STYLE_TYPE = "SliderHandle";
  28. return HANDLE_STYLE_TYPE;
  29. }
  30. const String& GUISlider::getBackgroundStyleType()
  31. {
  32. static String BACKGROUND_STYLE_TYPE = "SliderBackground";
  33. return BACKGROUND_STYLE_TYPE;
  34. }
  35. Vector2I GUISlider::_getOptimalSize() const
  36. {
  37. Vector2I optimalSize = mSliderHandle->_getOptimalSize();
  38. Vector2I backgroundSize = mBackground->_getOptimalSize();
  39. optimalSize.x = std::max(optimalSize.x, backgroundSize.x);
  40. optimalSize.y = std::max(optimalSize.y, backgroundSize.y);
  41. return optimalSize;
  42. }
  43. void GUISlider::_updateLayoutInternal(const GUILayoutData& data)
  44. {
  45. mBackground->_setLayoutData(data);
  46. mSliderHandle->_setLayoutData(data);
  47. }
  48. void GUISlider::styleUpdated()
  49. {
  50. mBackground->setStyle(getSubStyleName(getBackgroundStyleType()));
  51. mSliderHandle->setStyle(getSubStyleName(getHandleStyleType()));
  52. }
  53. void GUISlider::setPercent(float pct)
  54. {
  55. mSliderHandle->_setHandlePos(pct);
  56. mSliderHandle->_markContentAsDirty();
  57. }
  58. float GUISlider::getPercent() const
  59. {
  60. return mSliderHandle->getHandlePos();
  61. }
  62. void GUISlider::setTint(const Color& color)
  63. {
  64. mBackground->setTint(color);
  65. mSliderHandle->setTint(color);
  66. }
  67. void GUISlider::onHandleMoved(float newPosition)
  68. {
  69. onChanged(newPosition);
  70. }
  71. GUISliderHorz::GUISliderHorz(const String& styleName, const GUIDimensions& dimensions)
  72. :GUISlider(true, styleName, dimensions)
  73. {
  74. }
  75. GUISliderHorz* GUISliderHorz::create(const String& styleName)
  76. {
  77. return new (bs_alloc<GUISliderHorz, PoolAlloc>()) GUISliderHorz(getStyleName<GUISliderHorz>(styleName), GUIDimensions::create());
  78. }
  79. GUISliderHorz* GUISliderHorz::create(const GUIOptions& options, const String& styleName)
  80. {
  81. return new (bs_alloc<GUISliderHorz, PoolAlloc>()) GUISliderHorz(getStyleName<GUISliderHorz>(styleName), GUIDimensions::create(options));
  82. }
  83. const String& GUISliderHorz::getGUITypeName()
  84. {
  85. static String typeName = "SliderHorz";
  86. return typeName;
  87. }
  88. GUISliderVert::GUISliderVert(const String& styleName, const GUIDimensions& dimensions)
  89. :GUISlider(false, styleName, dimensions)
  90. {
  91. }
  92. GUISliderVert* GUISliderVert::create(const String& styleName)
  93. {
  94. return new (bs_alloc<GUISliderVert, PoolAlloc>()) GUISliderVert(getStyleName<GUISliderVert>(styleName), GUIDimensions::create());
  95. }
  96. GUISliderVert* GUISliderVert::create(const GUIOptions& options, const String& styleName)
  97. {
  98. return new (bs_alloc<GUISliderVert, PoolAlloc>()) GUISliderVert(getStyleName<GUISliderVert>(styleName), GUIDimensions::create(options));
  99. }
  100. const String& GUISliderVert::getGUITypeName()
  101. {
  102. static String typeName = "SliderVert";
  103. return typeName;
  104. }
  105. }