diff --git a/QtGameMaker.pro b/QtGameMaker.pro index 1bdd6cf..7fef9e6 100644 --- a/QtGameMaker.pro +++ b/QtGameMaker.pro @@ -47,6 +47,7 @@ HEADERS += \ src/editor/widgets/qlineeditwithmenu.h \ src/editor/widgets/qscrollareawithmenu.h \ src/editor/widgets/roomeditwidget.h \ + src/editor/widgets/zoomablescrollarea.h \ src/engine/gameengine.h \ src/engine/glgamewindow.h \ src/engine/vulkangamerenderer.h \ @@ -120,6 +121,7 @@ SOURCES += \ src/editor/widgets/qlineeditwithmenu.cpp \ src/editor/widgets/qscrollareawithmenu.cpp \ src/editor/widgets/roomeditwidget.cpp \ + src/editor/widgets/zoomablescrollarea.cpp \ src/engine/gameengine.cpp \ src/engine/glgamewindow.cpp \ src/engine/vulkangamerenderer.cpp \ diff --git a/src/editor/dialogs/imageeditordialog.ui b/src/editor/dialogs/imageeditordialog.ui index 8e0c99b..1b7a0e1 100644 --- a/src/editor/dialogs/imageeditordialog.ui +++ b/src/editor/dialogs/imageeditordialog.ui @@ -698,7 +698,7 @@ - + true @@ -1136,6 +1136,12 @@
widgets/finecolorwidget.h
1 + + ZoomableScrollArea + QScrollArea +
widgets/zoomablescrollarea.h
+ 1 +
diff --git a/src/editor/widgets/drawingcanvaswidget.h b/src/editor/widgets/drawingcanvaswidget.h index 1f8c810..c19cda3 100644 --- a/src/editor/widgets/drawingcanvaswidget.h +++ b/src/editor/widgets/drawingcanvaswidget.h @@ -46,7 +46,7 @@ private: QPixmap *m_pixmap{}; - float m_scale{4.f}; + float m_scale{1.f}; QColor m_leftButtonColor{Qt::white}; QColor m_rightButtonColor{Qt::black}; diff --git a/src/editor/widgets/zoomablescrollarea.cpp b/src/editor/widgets/zoomablescrollarea.cpp new file mode 100644 index 0000000..6ccc1ff --- /dev/null +++ b/src/editor/widgets/zoomablescrollarea.cpp @@ -0,0 +1,29 @@ +#include "zoomablescrollarea.h" + +#include + +#include "drawingcanvaswidget.h" + +void ZoomableScrollArea::wheelEvent(QWheelEvent *event) +{ + // Only zoom when Ctrl is held + if (!event->modifiers().testFlag(Qt::ControlModifier)) + { + QScrollArea::wheelEvent(event); + return; + } + + auto *w = qobject_cast(widget()); + if (!w) + return; + + auto scale = w->scale(); + if (event->angleDelta().y() > 0) + scale *= 2; + else + scale /= 2; + + w->setScale(scale); + + event->accept(); +} diff --git a/src/editor/widgets/zoomablescrollarea.h b/src/editor/widgets/zoomablescrollarea.h new file mode 100644 index 0000000..cf97b2b --- /dev/null +++ b/src/editor/widgets/zoomablescrollarea.h @@ -0,0 +1,14 @@ +#pragma once + +#include + +class ZoomableScrollArea : public QScrollArea +{ + Q_OBJECT + +public: + using QScrollArea::QScrollArea; + +protected: + void wheelEvent(QWheelEvent *event) override; +};