Label.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #include "Base.h"
  2. #include "Label.h"
  3. namespace gameplay
  4. {
  5. Label::Label() : _text(""), _font(NULL)
  6. {
  7. }
  8. Label::Label(const Label& copy)
  9. {
  10. }
  11. Label::~Label()
  12. {
  13. }
  14. Label* Label::create(Theme::Style* style, Properties* properties)
  15. {
  16. Label* label = new Label();
  17. label->initialize(style, properties);
  18. label->_consumeTouchEvents = false;
  19. return label;
  20. }
  21. void Label::initialize(Theme::Style* style, Properties* properties)
  22. {
  23. GP_ASSERT(properties);
  24. Control::initialize(style, properties);
  25. const char* text = properties->getString("text");
  26. if (text)
  27. {
  28. _text = text;
  29. }
  30. }
  31. void Label::addListener(Control::Listener* listener, int eventFlags)
  32. {
  33. if ((eventFlags & Listener::TEXT_CHANGED) == Listener::TEXT_CHANGED)
  34. {
  35. GP_ERROR("TEXT_CHANGED event is not applicable to this control.");
  36. }
  37. if ((eventFlags & Listener::VALUE_CHANGED) == Listener::VALUE_CHANGED)
  38. {
  39. GP_ERROR("VALUE_CHANGED event is not applicable to this control.");
  40. }
  41. _consumeTouchEvents = true;
  42. Control::addListener(listener, eventFlags);
  43. }
  44. void Label::setText(const char* text)
  45. {
  46. assert(text);
  47. _text = text;
  48. _dirty = true;
  49. }
  50. const char* Label::getText()
  51. {
  52. return _text.c_str();
  53. }
  54. void Label::update(const Control* container, const Vector2& offset)
  55. {
  56. Control::update(container, offset);
  57. _textBounds.set(_viewportBounds);
  58. _font = getFont(_state);
  59. _textColor = getTextColor(_state);
  60. _textColor.w *= getOpacity(_state);
  61. }
  62. void Label::drawText(const Rectangle& clip)
  63. {
  64. if (_text.size() <= 0)
  65. return;
  66. // Draw the text.
  67. if (_font)
  68. {
  69. _font->begin();
  70. _font->drawText(_text.c_str(), _textBounds, _textColor, getFontSize(_state), getTextAlignment(_state), true, getTextRightToLeft(_state), &_viewportClipBounds);
  71. _font->end();
  72. }
  73. _dirty = false;
  74. }
  75. }