mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-16 23:42:57 +00:00
Make zoom tool more gentle
This commit is contained in:
parent
f1f24cbcdd
commit
e40d8e8cfe
@ -76,23 +76,16 @@ bool ZoomingState::onMouseUp(Editor* editor, MouseMessage* msg)
|
||||
bool ZoomingState::onMouseMove(Editor* editor, MouseMessage* msg)
|
||||
{
|
||||
gfx::Point pt = (msg->position() - m_startPos);
|
||||
int length = ABS(pt.x);
|
||||
render::Zoom zoom = m_startZoom;
|
||||
|
||||
if (length > 0) {
|
||||
if (pt.x > 0) {
|
||||
while (length--)
|
||||
zoom.in();
|
||||
}
|
||||
else {
|
||||
while (length--)
|
||||
zoom.out();
|
||||
}
|
||||
}
|
||||
render::Zoom zoom(1, 1);
|
||||
double scale = m_startZoom.scale() + pt.x / 16.0;
|
||||
if (scale < 1.0)
|
||||
scale = 1.0 / -(scale-2.0);
|
||||
zoom = render::Zoom::fromScale(scale);
|
||||
|
||||
editor->setZoomAndCenterInMouse(zoom,
|
||||
m_startPos, Editor::kDontCenterOnZoom);
|
||||
|
||||
m_moved = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -32,4 +32,15 @@ void Zoom::out()
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
Zoom Zoom::fromScale(double scale)
|
||||
{
|
||||
if (scale >= 1.0) {
|
||||
return Zoom(int(scale), 1);
|
||||
}
|
||||
else {
|
||||
return Zoom(1, int(1.0 / scale));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace render
|
||||
|
@ -16,6 +16,8 @@ namespace render {
|
||||
public:
|
||||
Zoom(int num, int den)
|
||||
: m_num(num), m_den(den) {
|
||||
ASSERT(m_num > 0);
|
||||
ASSERT(m_den > 0);
|
||||
}
|
||||
|
||||
double scale() const { return static_cast<double>(m_num) / static_cast<double>(m_den); }
|
||||
@ -50,6 +52,8 @@ namespace render {
|
||||
return !operator==(other);
|
||||
}
|
||||
|
||||
static Zoom fromScale(double scale);
|
||||
|
||||
private:
|
||||
int m_num;
|
||||
int m_den;
|
||||
|
Loading…
x
Reference in New Issue
Block a user