-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEraserTool.cpp
More file actions
41 lines (34 loc) · 1.24 KB
/
Copy pathEraserTool.cpp
File metadata and controls
41 lines (34 loc) · 1.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "EraserTool.h"
void EraserTool::onMousePressed(const sf::Vector2f& pos, sf::Mouse::Button btn) {
if (btn == sf::Mouse::Left) {
m_erasing = true;
m_lastPos = pos;
sf::CircleShape cap(m_thickness / 2.f);
cap.setFillColor(m_bg);
cap.setOrigin(m_thickness / 2.f, m_thickness / 2.f);
cap.setPosition(pos);
m_canvas->drawToCanvas(cap);
}
}
void EraserTool::onMouseReleased(const sf::Vector2f& /*pos*/, sf::Mouse::Button btn) {
if (btn == sf::Mouse::Left) m_erasing = false;
}
void EraserTool::onMouseMoved(const sf::Vector2f& pos) {
if (!m_erasing) return;
sf::Vector2f d = { pos.x - m_lastPos.x, pos.y - m_lastPos.y };
float len = std::sqrt(d.x * d.x + d.y * d.y);
if (len <= 0.0001f) return;
sf::RectangleShape seg({ len, m_thickness });
seg.setFillColor(m_bg);
seg.setOrigin(0.f, m_thickness / 2.f);
seg.setPosition(m_lastPos);
float ang = std::atan2(d.y, d.x) * 180.f / 3.14159265f;
seg.setRotation(ang);
m_canvas->drawToCanvas(seg);
sf::CircleShape cap(m_thickness / 2.f);
cap.setFillColor(m_bg);
cap.setOrigin(m_thickness / 2.f, m_thickness / 2.f);
cap.setPosition(pos);
m_canvas->drawToCanvas(cap);
m_lastPos = pos;
}