-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPencilTool.cpp
More file actions
49 lines (42 loc) · 1.46 KB
/
Copy pathPencilTool.cpp
File metadata and controls
49 lines (42 loc) · 1.46 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
42
43
44
45
46
47
48
49
#include "PencilTool.h"
void PencilTool::onMousePressed(const sf::Vector2f& pos, sf::Mouse::Button btn) {
if (btn == sf::Mouse::Left) {
m_drawing = true;
m_lastPos = pos;
sf::CircleShape cap(m_thickness / 2.f);
cap.setFillColor(m_color);
cap.setOrigin(m_thickness / 2.f, m_thickness / 2.f);
cap.setPosition(pos);
m_canvas->drawToCanvas(cap);
}
}
void PencilTool::onMouseReleased(const sf::Vector2f& pos, sf::Mouse::Button btn) {
if (btn == sf::Mouse::Left) {
m_drawing = false;
}
}
void PencilTool::onMouseMoved(const sf::Vector2f& pos) {
if (!m_drawing) 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) {
// ïðÿìîóãîëüíèê-«êèñòü»
sf::RectangleShape seg({ len, m_thickness });
seg.setFillColor(m_color);
seg.setOrigin(0.f, m_thickness / 2.f);
seg.setPosition(m_lastPos);
float angle = std::atan2(d.y, d.x) * 180.f / 3.14159265f;
seg.setRotation(angle);
m_canvas->drawToCanvas(seg);
// êîíå÷íàÿ «êåïêà» äëÿ ñãëàæèâàíèÿ
sf::CircleShape cap(m_thickness / 2.f);
cap.setFillColor(m_color);
cap.setOrigin(m_thickness / 2.f, m_thickness / 2.f);
cap.setPosition(pos);
m_canvas->drawToCanvas(cap);
m_lastPos = pos;
}
}
void PencilTool::setColor(const sf::Color& color) {
m_color = color;
}