mirror of https://github.com/aseprite/aseprite.git
Replace the ToolLoopImpl.wrapPositionOnTiledMode function by a new one in the TiledModeHelper component
This commit is contained in:
parent
f5b452ae94
commit
3bce6f2272
|
|
@ -758,16 +758,14 @@ public:
|
||||||
m_lastPti = pti;
|
m_lastPti = pti;
|
||||||
|
|
||||||
auto saveArea = [this](const tools::Stroke::Pt& pt) {
|
auto saveArea = [this](const tools::Stroke::Pt& pt) {
|
||||||
tools::Stroke::Pt pos = pt;
|
|
||||||
// By wrapping the stroke point position when tiled mode is active, the
|
|
||||||
// user can draw outside the canvas and still get the pixel-perfect
|
|
||||||
// effect.
|
|
||||||
wrapPositionOnTiledMode(pt, pos);
|
|
||||||
|
|
||||||
gfx::Rect r;
|
gfx::Rect r;
|
||||||
getPointShape()->getModifiedArea(this, pos.x, pos.y, r);
|
getPointShape()->getModifiedArea(this, pt.x, pt.y, r);
|
||||||
|
|
||||||
gfx::Region rgn(r);
|
gfx::Region rgn(r);
|
||||||
|
// By wrapping the modified area's position when tiled mode is active, the
|
||||||
|
// user can draw outside the canvas and still get the pixel-perfect
|
||||||
|
// effect.
|
||||||
|
m_tiledModeHelper.wrapPosition(rgn);
|
||||||
m_tiledModeHelper.collapseRegionByTiledMode(rgn);
|
m_tiledModeHelper.collapseRegionByTiledMode(rgn);
|
||||||
|
|
||||||
for (auto a : rgn) {
|
for (auto a : rgn) {
|
||||||
|
|
@ -830,31 +828,6 @@ private:
|
||||||
}
|
}
|
||||||
#endif // ENABLE_UI
|
#endif // ENABLE_UI
|
||||||
|
|
||||||
void wrapPositionOnTiledMode(const tools::Stroke::Pt& pt, tools::Stroke::Pt& result) {
|
|
||||||
result = pt;
|
|
||||||
if (getTiledMode() == TiledMode::NONE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (int(getTiledMode()) & int(TiledMode::X_AXIS)) {
|
|
||||||
result.x %= m_tiledModeHelper.canvasSize().w;
|
|
||||||
}
|
|
||||||
if (int(getTiledMode()) & int(TiledMode::Y_AXIS)) {
|
|
||||||
result.y %= m_tiledModeHelper.canvasSize().h;
|
|
||||||
}
|
|
||||||
|
|
||||||
gfx::Rect r;
|
|
||||||
getPointShape()->getModifiedArea(this, result.x, result.y, r);
|
|
||||||
|
|
||||||
if (r.x < 0)
|
|
||||||
result.x += m_sprite->width();
|
|
||||||
else if (r.x2() > m_tiledModeHelper.canvasSize().w)
|
|
||||||
result.x -= m_sprite->width();
|
|
||||||
|
|
||||||
if (r.y < 0)
|
|
||||||
result.y += m_sprite->height();
|
|
||||||
else if (r.y2() > m_tiledModeHelper.canvasSize().h)
|
|
||||||
result.y -= m_sprite->height();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,17 @@ namespace app {
|
||||||
rgn = newRgn;
|
rgn = newRgn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wrapPosition(gfx::Region& rgn) const {
|
||||||
|
if (int(m_mode) == int(filters::TiledMode::NONE))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (int(m_mode) & int(filters::TiledMode::X_AXIS))
|
||||||
|
rgn.offset(m_canvas->width() * (1 - (rgn.bounds().x / m_canvas->width())), 0);
|
||||||
|
|
||||||
|
if (int(m_mode) & int(filters::TiledMode::Y_AXIS))
|
||||||
|
rgn.offset(0, m_canvas->height() * (1 - (rgn.bounds().y / m_canvas->height())));
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
filters::TiledMode m_mode;
|
filters::TiledMode m_mode;
|
||||||
const doc::Sprite* m_canvas;
|
const doc::Sprite* m_canvas;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue