Add support to scroll points in FourPointsController with spacebar

Related to #741
This commit is contained in:
David Capello 2015-08-11 20:35:19 -03:00
parent 7342030555
commit 045f11bf68

View File

@ -305,10 +305,14 @@ public:
}; };
class FourPointsController : public Controller { class FourPointsController : public Controller {
int m_clickCounter;
public: public:
void pressButton(Points& points, const Point& point) void prepareController(ui::KeyModifiers modifiers) override {
{ m_movingOrigin = false;
}
void pressButton(Points& points, const Point& point) override {
m_last = point;
if (points.size() == 0) { if (points.size() == 0) {
points.resize(4, point); points.resize(4, point);
m_clickCounter = 0; m_clickCounter = 0;
@ -316,13 +320,31 @@ public:
else else
m_clickCounter++; m_clickCounter++;
} }
bool releaseButton(Points& points, const Point& point)
{ bool releaseButton(Points& points, const Point& point) override {
m_clickCounter++; m_clickCounter++;
return m_clickCounter < 4; return m_clickCounter < 4;
} }
void movement(ToolLoop* loop, Points& points, const Point& point)
{ bool pressKey(ui::KeyScancode key) override {
return processKey(key, true);
}
bool releaseKey(ui::KeyScancode key) override {
return processKey(key, false);
}
void movement(ToolLoop* loop, Points& points, const Point& point) override {
if (m_movingOrigin) {
Point delta = (point - m_last);
for (auto& p : points)
p += delta;
m_last = point;
return;
}
m_last = point;
switch (m_clickCounter) { switch (m_clickCounter) {
case 0: case 0:
for (size_t i=1; i<points.size(); ++i) for (size_t i=1; i<points.size(); ++i)
@ -338,12 +360,12 @@ public:
break; break;
} }
} }
void getPointsToInterwine(const Points& input, Points& output)
{ void getPointsToInterwine(const Points& input, Points& output) override {
output = input; output = input;
} }
void getStatusBarText(const Points& points, std::string& text)
{ void getStatusBarText(const Points& points, std::string& text) override {
ASSERT(points.size() >= 4); ASSERT(points.size() >= 4);
if (points.size() < 4) if (points.size() < 4)
return; return;
@ -357,6 +379,20 @@ public:
text = buf; text = buf;
} }
private:
bool processKey(ui::KeyScancode key, bool state) {
switch (key) {
case ui::kKeySpace:
m_movingOrigin = state;
return true;
}
return false;
}
int m_clickCounter;
bool m_movingOrigin;
Point m_last;
}; };
} // namespace tools } // namespace tools