Engauge Digitizer 2
Loading...
Searching...
No Matches
ZoomTransition.cpp
Go to the documentation of this file.
1
2/******************************************************************************************************
3 * (C) 2017 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
4 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
5 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
6 ******************************************************************************************************/
7
8#include "EngaugeAssert.h"
9#include "Logger.h"
10#include <qmath.h>
11#include "ZoomTransition.h"
12
13const double CLOSER = qPow (2, 1.0 / 3.0);
14const double FARTHER = 1.0 / CLOSER;
15
17{
18 m_zoomMapToFactor [ZOOM_16_TO_1] = 16.0;
19 m_zoomMapToFactor [ZOOM_16_TO_1_FARTHER] = 16.0 * FARTHER;
20 m_zoomMapToFactor [ZOOM_8_TO_1_CLOSER] = 8.0 * CLOSER;
21 m_zoomMapToFactor [ZOOM_8_TO_1] = 8.0;
22 m_zoomMapToFactor [ZOOM_8_TO_1_FARTHER] = 8.0 * FARTHER;
23 m_zoomMapToFactor [ZOOM_4_TO_1_CLOSER] = 4.0 * CLOSER;
24 m_zoomMapToFactor [ZOOM_4_TO_1] = 4.0;
25 m_zoomMapToFactor [ZOOM_4_TO_1_FARTHER] = 4.0 * FARTHER;
26 m_zoomMapToFactor [ZOOM_2_TO_1_CLOSER] = 2.0 * CLOSER;
27 m_zoomMapToFactor [ZOOM_2_TO_1] = 2.0;
28 m_zoomMapToFactor [ZOOM_2_TO_1_FARTHER] = 2.0 * FARTHER;
29 m_zoomMapToFactor [ZOOM_1_TO_1_CLOSER] = 1.0 * CLOSER;
30 m_zoomMapToFactor [ZOOM_1_TO_1] = 1.0;
31 m_zoomMapToFactor [ZOOM_1_TO_1_FARTHER] = 1.0 * FARTHER;
32 m_zoomMapToFactor [ZOOM_1_TO_2_CLOSER] = 0.5 * CLOSER;
33 m_zoomMapToFactor [ZOOM_1_TO_2] = 0.5;
34 m_zoomMapToFactor [ZOOM_1_TO_2_FARTHER] = 0.5 * FARTHER;
35 m_zoomMapToFactor [ZOOM_1_TO_4_CLOSER] = 0.25 * CLOSER;
36 m_zoomMapToFactor [ZOOM_1_TO_4] = 0.25;
37 m_zoomMapToFactor [ZOOM_1_TO_4_FARTHER] = 0.25 * FARTHER;
38 m_zoomMapToFactor [ZOOM_1_TO_8_CLOSER] = 0.125 * CLOSER;
39 m_zoomMapToFactor [ZOOM_1_TO_8] = 0.125;
40 m_zoomMapToFactor [ZOOM_1_TO_8_FARTHER] = 0.125 * FARTHER;
41 m_zoomMapToFactor [ZOOM_1_TO_16_CLOSER] = 0.0625 * CLOSER;
42 m_zoomMapToFactor [ZOOM_1_TO_16] = 0.0625;
43}
44
46{
47 ENGAUGE_ASSERT (m_zoomMapToFactor.contains (zoomFactor));
48
49 return m_zoomMapToFactor [zoomFactor];
50}
51
53 double m11,
54 double m22,
55 bool actionZoomFillIsChecked) const
56{
57 LOG4CPP_INFO_S ((*mainCat)) << "ZoomTransition::zoomIn";
58
59 // Try to zoom in
60 ZoomFactor zoomFactorOld = currentZoomFactor;
61
63
64 // Zooming in means user probably wants the more squished direction to be zoomed in by one step.
65 // Loop through the zoom values until a match is found
66 double xScale = m11;
67 double yScale = m22;
68 double scale = qMin(xScale, yScale); // Fit so large extent just fits
69
70 for (int zoom = ZOOM_1_TO_16_CLOSER; zoom >= 0; zoom--) {
71 ZoomFactor zoomFactor = static_cast<ZoomFactor> (zoom);
72 if (scale < m_zoomMapToFactor [zoomFactor]) {
74 break;
75 }
76 }
77 }
78
81 zoomFactorNew = static_cast<ZoomFactor> (zoomFactorOld - 1);
82 }
83
84 return zoomFactorNew;
85}
86
88 double m11,
89 double m22,
90 bool actionZoomFillIsChecked) const
91{
92 LOG4CPP_INFO_S ((*mainCat)) << "ZoomTransition::zoomOut";
93
94 // Try to zoom out
95 ZoomFactor zoomFactorOld = currentZoomFactor;
96
98
99 // Zooming out means user probably wants the less squished direction to be zoomed out by one step.
100 // Loop through the zoom values until a match is found
101 double xScale = m11;
102 double yScale = m22;
103 double scale = qMax(xScale, yScale); // Fit so larger extent just fits
104
105 for (int zoom = 0; zoom <= ZOOM_1_TO_16_CLOSER; zoom++) {
106 ZoomFactor zoomFactor = static_cast<ZoomFactor> (zoom);
107 if (scale > m_zoomMapToFactor [zoomFactor]) {
109 break;
110 }
111 }
112 }
113
116 zoomFactorNew = static_cast<ZoomFactor> (zoomFactorOld + 1);
117 }
118
119 return zoomFactorNew;
120}
const int INNER_RADIUS_MIN
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS) define ENGAUGE...
log4cpp::Category * mainCat
Definition Logger.cpp:14
ZoomFactor
Zoom factors ordered by zoom level so next one above/below is the next zoom level.
Definition ZoomFactor.h:11
@ ZOOM_1_TO_1_FARTHER
Definition ZoomFactor.h:25
@ ZOOM_8_TO_1_FARTHER
Definition ZoomFactor.h:16
@ ZOOM_16_TO_1_FARTHER
Definition ZoomFactor.h:13
@ ZOOM_2_TO_1
Definition ZoomFactor.h:21
@ ZOOM_8_TO_1
Definition ZoomFactor.h:15
@ ZOOM_1_TO_4_CLOSER
Definition ZoomFactor.h:29
@ ZOOM_1_TO_8_CLOSER
Definition ZoomFactor.h:32
@ ZOOM_4_TO_1
Definition ZoomFactor.h:18
@ ZOOM_1_TO_2
Definition ZoomFactor.h:27
@ ZOOM_4_TO_1_CLOSER
Definition ZoomFactor.h:17
@ ZOOM_1_TO_4_FARTHER
Definition ZoomFactor.h:31
@ ZOOM_1_TO_1_CLOSER
Definition ZoomFactor.h:23
@ ZOOM_1_TO_2_FARTHER
Definition ZoomFactor.h:28
@ ZOOM_1_TO_1
Definition ZoomFactor.h:24
@ ZOOM_1_TO_8
Definition ZoomFactor.h:33
@ ZOOM_4_TO_1_FARTHER
Definition ZoomFactor.h:19
@ ZOOM_8_TO_1_CLOSER
Definition ZoomFactor.h:14
@ ZOOM_2_TO_1_CLOSER
Definition ZoomFactor.h:20
@ ZOOM_1_TO_4
Definition ZoomFactor.h:30
@ ZOOM_1_TO_8_FARTHER
Definition ZoomFactor.h:34
@ ZOOM_1_TO_2_CLOSER
Definition ZoomFactor.h:26
@ ZOOM_1_TO_16
Definition ZoomFactor.h:36
@ ZOOM_2_TO_1_FARTHER
Definition ZoomFactor.h:22
@ ZOOM_1_TO_16_CLOSER
Definition ZoomFactor.h:35
@ ZOOM_16_TO_1
Definition ZoomFactor.h:12
const double FARTHER
const double CLOSER
ZoomTransition()
Single constructor.
double mapToFactor(ZoomFactor zoomFactor) const
Return the floating precision zoom factor given the enum value.
ZoomFactor zoomOut(ZoomFactor currentZoomFactor, double m11, double m22, bool actionZoomFillIsChecked) const
Zoom out.
ZoomFactor zoomIn(ZoomFactor currentZoomFactor, double m11, double m22, bool actionZoomFillIsChecked) const
Zoom in.
#define LOG4CPP_INFO_S(logger)
Definition convenience.h:18