Skip to content

Commit d75a6ec

Browse files
Added zooming with a mousepad
1 parent fb25273 commit d75a6ec

3 files changed

Lines changed: 36 additions & 10 deletions

File tree

libs/mupdf

Submodule mupdf updated 725 files

src/presentation/desktop/modules/CppElements/document.cpp

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#include "document.hpp"
2+
#include "document_access.hpp"
23
#include <QApplication>
34
#include <QDesktopServices>
45
#include <QPair>
56
#include <QRandomGenerator>
67
#include <QSGImageNode>
78
#include <QSGSimpleRectNode>
8-
#include "document_access.hpp"
9+
#include <cmath>
910

1011
namespace cpp_elements
1112
{
@@ -143,7 +144,7 @@ void Document::wheelEvent(QWheelEvent* event)
143144
int deltaY = event->angleDelta().y();
144145
int deltaX = event->angleDelta().x();
145146
if(event->modifiers() & Qt::ControlModifier)
146-
applyZoom(calculateNewZoom(deltaY), ZoomMode::Mouse);
147+
applyZoom(calculateNewZoom(deltaY, m_zoomFactor), ZoomMode::Mouse);
147148
else
148149
handleScroll(deltaY, deltaX);
149150

@@ -165,7 +166,7 @@ void Document::keyPressEvent(QKeyEvent* event)
165166
{
166167
if(event->modifiers() & Qt::ControlModifier)
167168
{
168-
applyZoom(calculateNewZoom(-15), ZoomMode::Keyboard);
169+
applyZoom(calculateNewZoom(-15, m_zoomFactor), ZoomMode::Keyboard);
169170
}
170171
}
171172
else if(key == getShortcut("PageDown"))
@@ -175,12 +176,31 @@ void Document::keyPressEvent(QKeyEvent* event)
175176
// Need to handle CTRL + differently bc. it Key_Plus isn't recognized
176177
else if(event->key() == Qt::Key_Plus || event->nativeVirtualKey() == 187)
177178
{
178-
applyZoom(calculateNewZoom(15), ZoomMode::Keyboard);
179+
applyZoom(calculateNewZoom(15, m_zoomFactor), ZoomMode::Keyboard);
179180
}
180181

181182
event->accept();
182183
}
183184

185+
bool Document::event(QEvent *event)
186+
{
187+
if (event->type() == QEvent::NativeGesture) {
188+
auto *gestureEvent = static_cast<QNativeGestureEvent *>(event);
189+
190+
if (gestureEvent->gestureType() == Qt::ZoomNativeGesture) {
191+
qreal zoomDelta = gestureEvent->value();
192+
193+
qreal newZoom = calculateNewZoom(zoomDelta, std::abs(zoomDelta));
194+
applyZoom(newZoom, ZoomMode::Mouse);
195+
196+
gestureEvent->accept();
197+
return true;
198+
}
199+
}
200+
201+
return QQuickItem::event(event);
202+
}
203+
184204
void Document::redrawPages()
185205
{
186206
if(m_openedBookController == nullptr)
@@ -314,13 +334,19 @@ void Document::moveY(int amount)
314334
ensureInBounds();
315335
}
316336

317-
double Document::calculateNewZoom(int deltaY)
337+
double Document::calculateNewZoom(double deltaY, double zoomFactor)
318338
{
319-
return m_currentZoom * (deltaY > 0 ? 1 + m_zoomFactor : 1 - m_zoomFactor);
339+
return m_currentZoom * (deltaY > 0 ? 1 + zoomFactor : 1 - zoomFactor);
320340
}
321341

322342
void Document::applyZoom(double newZoom, ZoomMode zoomMode)
323343
{
344+
// Avoid excessive zooms that could cause performance issues
345+
if(newZoom > 10)
346+
newZoom = 10;
347+
else if(newZoom < 0.2)
348+
newZoom = 0.2;
349+
324350
double scale = newZoom / m_currentZoom;
325351
m_currentZoom = newZoom;
326352
emit currentZoomChanged();
@@ -330,8 +356,7 @@ void Document::applyZoom(double newZoom, ZoomMode zoomMode)
330356
else if(zoomMode == ZoomMode::Mouse)
331357
m_contentY = contentYForMouseZoom(scale);
332358

333-
if(m_contentY < 0)
334-
m_contentY = 0;
359+
m_contentY = m_contentY < 0 ? 0 : m_contentY; // Ensure not out of bounds
335360

336361
m_contentItem->setHeight((m_pageHeight + m_spacing) *
337362
m_openedBookController->getPageCount() *

src/presentation/desktop/modules/CppElements/document.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ class PRESENTATION_EXPORT Document : public QQuickItem
8383
QSGNode* updatePaintNode(QSGNode* oldNode, UpdatePaintNodeData*) override;
8484
void wheelEvent(QWheelEvent* event) override;
8585
void keyPressEvent(QKeyEvent* event) override;
86+
bool event(QEvent* event) override;
8687

8788
private:
8889
enum class ZoomMode
@@ -100,7 +101,7 @@ class PRESENTATION_EXPORT Document : public QQuickItem
100101
void moveX(int amount);
101102
void moveY(int amount);
102103
void applyZoom(double zoom, ZoomMode zoomMode);
103-
double calculateNewZoom(int deltaY);
104+
double calculateNewZoom(double deltaY, double zoomFactor);
104105
double contentYForCenterZoom(double scale);
105106
double contentYForMouseZoom(double scale);
106107
void ensureInBounds();

0 commit comments

Comments
 (0)