-
Notifications
You must be signed in to change notification settings - Fork 0
/
tool_2point.h
44 lines (39 loc) · 1.11 KB
/
tool_2point.h
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
#pragma once
#include <memory>
#include <sstream>
#include <string>
#include <vector>
#include "col.h"
#include "console.h"
#include "point.h"
template <typename T, typename D> class tool_2point : public tool<D> {
private:
std::optional<pt<D>> cur;
pt<D> cur_mp;
void start(const pt<D>& p) { cur = std::make_optional(p); }
void end(canvas<D>& can, const pt<D>& p) {
if (cur) {
std::stringstream ss;
ss << "created " << T::name() << ": " << cur.value().to_string() << "--"
<< p.to_string();
console::get().print(ss.str());
can.template push<T>(cur.value(), p);
cur = std::nullopt;
}
}
public:
tool_2point() : cur(std::nullopt) { this->print_tool_name(T::name()); }
virtual ~tool_2point() {}
virtual void l_click(canvas<D>& can) { start(cur_mp); }
virtual void l_release(canvas<D>& can) { end(can, cur_mp); }
virtual void r_click(canvas<D>& can) {}
virtual void r_release(canvas<D>& can) {}
virtual void draw() const {
if (cur) {
T cur_ls(cur.value(), cur_mp);
cur_ls.prop.c = col::red;
cur_ls.draw();
}
}
virtual void update(canvas<D>& can, const pt<D>& mp) { cur_mp = mp; }
};