| 65 | } |
| 66 | |
| 67 | auto draw(const int x, const int y) -> void { |
| 68 | handleMouse(x, y); |
| 69 | |
| 70 | auto posX = x; |
| 71 | auto posY = y; |
| 72 | auto frameIdx = -1; |
| 73 | const int framesPerType = _def.segments.x * _def.segments.y; |
| 74 | switch (_state) { |
| 75 | case ButtonState::Normal: |
| 76 | frameIdx = _def.frames.base * framesPerType; |
| 77 | break; |
| 78 | case ButtonState::Pressed: |
| 79 | frameIdx = _def.frames.pressed * framesPerType; |
| 80 | break; |
| 81 | case ButtonState::Disabled: |
| 82 | frameIdx = _def.frames.disabled * framesPerType; |
| 83 | break; |
| 84 | } |
| 85 | |
| 86 | for (int frameY = 0; frameY < _def.segments.y; frameY++) { |
| 87 | int frameHeight; |
| 88 | for (int frameX = 0; frameX < _def.segments.x; frameX++) { |
| 89 | int frameWidth; |
| 90 | _drawable.getFrameSize(frameIdx, frameWidth, frameHeight); |
| 91 | _drawable.draw(frameIdx++, posX, posY + frameHeight); |
| 92 | posX += frameWidth; |
| 93 | } |
| 94 | posX = x; |
| 95 | posY += frameHeight; |
| 96 | } |
| 97 | |
| 98 | auto labelX = x + _def.clickableRect.x + (_def.clickableRect.w / 2) - (_label.getWidth() / 2); |
| 99 | auto labelY = y + _def.clickableRect.y + (_def.clickableRect.h / 2) - (_label.getHeight() / 2); |
| 100 | |
| 101 | if (_state == ButtonState::Pressed) { |
| 102 | labelX -= 2; |
| 103 | labelY += 2; |
| 104 | } |
| 105 | |
| 106 | _label.draw(labelX, labelY); |
| 107 | } |
| 108 | }; |
| 109 | |
| 110 | } // namespace Abyss::UI |
nothing calls this directly
no test coverage detected