10#include <QNativeGestureEvent>
12#include <klocalizedstring.h>
50 Q_FOREACH (QTouchEvent::TouchPoint point, event->touchPoints()) {
51 if (point.state() != Qt::TouchPointReleased) {
52 result += point.pos();
58 return result / count;
69 setDescription(i18n(
"The <i>Zoom Canvas</i> action zooms the canvas."));
71 QHash< QString, int > shortcuts;
110 QApplication::restoreOverrideCursor();
147 pt = controller->mapFromGlobal(QCursor::pos());
195 switch (event->type()) {
196 case QEvent::TouchUpdate: {
197 QTouchEvent *tevent =
static_cast<QTouchEvent*
>(event);
199 if (tevent->touchPoints().count() != 2) {
211 QTouchEvent::TouchPoint tp0 = tevent->touchPoints().at(0);
212 QTouchEvent::TouchPoint tp1 = tevent->touchPoints().at(1);
213 if (tp0.state() == Qt::TouchPointReleased ||
214 tp1.state() == Qt::TouchPointReleased) {
220 QPointF
p0 = tp0.pos();
221 QPointF
p1 = tp1.pos();
228 if ((
p0-
p1).manhattanLength() < 10) {
242 float dist = QLineF(
p0,
p1).length();
249 if(qAbs(delta) < 0.8f || qAbs(delta) > 1.2f) {
259 const qreal newZoom = controller->
canvas()->viewConverter()->zoom() * delta;
261 adjustedStillPoint.second =
p0;
267 case QEvent::NativeGesture: {
268 QNativeGestureEvent *gevent =
static_cast<QNativeGestureEvent*
>(event);
269 if (gevent->gestureType() == Qt::ZoomNativeGesture) {
272 const qreal delta = 1.0f + gevent->value();
273 const qreal newZoom = controller->
canvas()->viewConverter()->zoom() * delta;
275 }
else if (gevent->gestureType() == Qt::SmartZoomNativeGesture) {
295 QPointF diff = -(pos - startPos);
297 const int stepCont = 100;
298 const int stepDisc = 50;
305 const qreal logDistance = std::pow(2.0, qreal(cfg.
zoomHorizontal() ? -diff.x() : diff.y()) / qreal(stepCont));
308 if (cfg.
readEntry<
bool>(
"InvertMiddleClickZoom",
false)) {
333 qreal axisDiff = qreal(cfg.
zoomHorizontal() ? -diff.x() : diff.y());
336 const bool zoomIn = currentDiff > 0;
337 while (qAbs(currentDiff) > 1.0) {
KisCoordinatesConverter * coordinatesConverter
bool zoomHorizontal(bool defaultValue=false) const
T readEntry(const QString &name, const T &defaultValue=T())
KoViewTransformStillPoint makeWidgetStillPoint(const QPointF &viewPoint) const override
Creates a still point that links the viewPoint of the widget to the corresponding point of the image.
static QCursor zoomSmoothCursor()
static QCursor zoomDiscreteCursor()
qreal lastDiscreteZoomDistance
KoViewTransformStillPoint actionStillPoint
QPointF centerPoint(QTouchEvent *event)
Private(KisZoomAction *qq)
Zoom Canvas implementation of KisAbstractInputAction.
bool isShortcutRequired(int shortcut) const override
~KisZoomAction() override
void deactivate(int shortcut) override
bool supportsHiResInputEvents(int shortcut) const override
void cursorMovedAbsolute(const QPointF &startPos, const QPointF &pos) override
int priority() const override
@ FitToHeightShortcut
Zoom fit to height.
@ ZoomInShortcut
Zoom in by a fixed amount.
@ RelativeDiscreteZoomModeShortcut
Toggle discrete zoom mode relative to cursor.
@ ZoomOutFromCursorShortcut
Zoom out from cursor.
@ ZoomInToCursorShortcut
Zoom in to cursor.
@ ZoomOutShortcut
Zoom out by a fixed amount.
@ DiscreteZoomModeShortcut
Toggle discrete zoom mode.
@ FitToViewShortcut
Zoom fit to page.
@ ZoomModeShortcut
Toggle zoom mode.
@ Zoom100PctShortcut
Reset zoom to 100%.
@ RelativeZoomModeShortcut
Toggle zoom mode relative to cursor.
@ FitToWidthShortcut
Zoom fit to width.
void activate(int shortcut) override
void inputEvent(QEvent *event) override
KisInputActionGroup inputActionGroup(int shortcut) const override
void begin(int shortcut, QEvent *event=0) override
KoCanvasController * canvasController() const
virtual void zoomIn(const KoViewTransformStillPoint &stillPoint)=0
zooms in keeping stillPoint not moved.
virtual KoZoomState zoomState() const =0
virtual void setZoom(KoZoomMode::Mode mode, qreal zoom)=0
virtual void zoomOut(const KoViewTransformStillPoint &stillPoint)=0
zooms out keeping stillPoint not moved.
void zoom(qreal *zoomX, qreal *zoomY) const override
@ ZOOM_WIDTH
zoom pagewidth
@ ZOOM_HEIGHT
zoom pageheight
static bool qFuzzyCompare(half p1, half p2)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)