From 14af0c7c3f51a61025fc713a37a59ff341b2a89c Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Tue, 21 Feb 2023 20:23:15 +0100 Subject: [PATCH] ide: Laydes Ctrl+Wheel zooming --- uppsrc/ide/LayDes/LayDes.h | 1 + uppsrc/ide/LayDes/laydes.cpp | 16 +++++++++++++++- uppsrc/ide/LayDes/laywin.cpp | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/uppsrc/ide/LayDes/LayDes.h b/uppsrc/ide/LayDes/LayDes.h index 6fbd6d310..5cf0138fc 100644 --- a/uppsrc/ide/LayDes/LayDes.h +++ b/uppsrc/ide/LayDes/LayDes.h @@ -275,6 +275,7 @@ public: virtual void LeftDown(Point p, dword keyflags) override; virtual void LeftRepeat(Point p, dword keyflags) override; virtual void MouseMove(Point p, dword keyflags) override; + virtual void MouseWheel(Point p, int zdelta, dword keyflags) override; virtual void LeftUp(Point p, dword keyflags) override; virtual void RightDown(Point p, dword keyflags) override; virtual void Layout() override; diff --git a/uppsrc/ide/LayDes/laydes.cpp b/uppsrc/ide/LayDes/laydes.cpp index 938069eab..d2de08773 100644 --- a/uppsrc/ide/LayDes/laydes.cpp +++ b/uppsrc/ide/LayDes/laydes.cpp @@ -92,6 +92,7 @@ void LayDes::SetSb() double scale = GetScale(); sb.SetTotal(scale * sz); sb.SetPage(sb.GetReducedViewSize()); + sb.SetLine(DPI(8)); } void LayDes::Scroll() @@ -281,9 +282,21 @@ void LayDes::Paint2(Draw& w) DrawFrame(w, dragrect.Normalized(), LtRed); } +void LayDes::MouseWheel(Point p, int zdelta, dword keyflags) +{ + if(keyflags & K_CTRL) { + Zoom = clamp(Zoom - sgn(zdelta), 0, 15); + Refresh(); + SetBar(); + SetSb(); + } + else + sb.WheelY(zdelta); +} + double LayDes::GetScale() { - return decode(Zoom, 1, 0.75, 2, 0.5, 1); + return (20 - Zoom) / 20.0; } void LayDes::Paint(Draw& w) @@ -299,6 +312,7 @@ void LayDes::Paint(Draw& w) if(Zoom) { DrawPainter sw(w, sz); + sw.Co(); sw.Clear(SColorPaper()); sw.Offset(-sb.Get()); sw.Offset(MARGIN, MARGIN); diff --git a/uppsrc/ide/LayDes/laywin.cpp b/uppsrc/ide/LayDes/laywin.cpp index d95a8b528..87458cc20 100644 --- a/uppsrc/ide/LayDes/laywin.cpp +++ b/uppsrc/ide/LayDes/laywin.cpp @@ -198,7 +198,7 @@ void LayDes::OptionBar(Bar& bar) im.zoom = GetScale(); bar.Add("Zoom " + AsString(GetScale() * 100) + "%", MakeImage(im), [=] { - Zoom = (Zoom + 1) % 3; + Zoom = Zoom < 5 ? 5 : Zoom < 10 ? 10 : 0; Refresh(); SetBar(); SetSb();