Engauge Digitizer  2
Public Member Functions | List of all members
ZoomTransition Class Reference

Perform calculations to determine the next zoom setting given the current zoom setting, when zooming in or out. More...

#include <ZoomTransition.h>

Collaboration diagram for ZoomTransition:
Collaboration graph

Public Member Functions

 ZoomTransition ()
 Single constructor. More...
 
double mapToFactor (ZoomFactor zoomFactor) const
 Return the floating precision zoom factor given the enum value. More...
 
ZoomFactor zoomIn (ZoomFactor currentZoomFactor, double m11, double m22, bool actionZoomFillIsChecked) const
 Zoom in. More...
 
ZoomFactor zoomOut (ZoomFactor currentZoomFactor, double m11, double m22, bool actionZoomFillIsChecked) const
 Zoom out. More...
 

Detailed Description

Perform calculations to determine the next zoom setting given the current zoom setting, when zooming in or out.

Definition at line 14 of file ZoomTransition.h.

Constructor & Destructor Documentation

◆ ZoomTransition()

ZoomTransition::ZoomTransition ( )

Single constructor.

Definition at line 16 of file ZoomTransition.cpp.

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 }
const double CLOSER
const double FARTHER

Member Function Documentation

◆ mapToFactor()

double ZoomTransition::mapToFactor ( ZoomFactor  zoomFactor) const

Return the floating precision zoom factor given the enum value.

Definition at line 45 of file ZoomTransition.cpp.

46 {
47  ENGAUGE_ASSERT (m_zoomMapToFactor.contains (zoomFactor));
48 
49  return m_zoomMapToFactor [zoomFactor];
50 }
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS) define ENGAUGE...
Definition: EngaugeAssert.h:20

◆ zoomIn()

ZoomFactor ZoomTransition::zoomIn ( ZoomFactor  currentZoomFactor,
double  m11,
double  m22,
bool  actionZoomFillIsChecked 
) const

Zoom in.

Definition at line 52 of file ZoomTransition.cpp.

56 {
57  LOG4CPP_INFO_S ((*mainCat)) << "ZoomTransition::zoomIn";
58 
59  // Try to zoom in
60  ZoomFactor zoomFactorOld = currentZoomFactor;
61 
62  if (actionZoomFillIsChecked) {
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]) {
73  zoomFactorOld = zoomFactor;
74  break;
75  }
76  }
77  }
78 
79  ZoomFactor zoomFactorNew = ZOOM_16_TO_1;
80  if (zoomFactorOld > ZOOM_16_TO_1) {
81  zoomFactorNew = static_cast<ZoomFactor> (zoomFactorOld - 1);
82  }
83 
84  return zoomFactorNew;
85 }
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
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

◆ zoomOut()

ZoomFactor ZoomTransition::zoomOut ( ZoomFactor  currentZoomFactor,
double  m11,
double  m22,
bool  actionZoomFillIsChecked 
) const

Zoom out.

Definition at line 87 of file ZoomTransition.cpp.

91 {
92  LOG4CPP_INFO_S ((*mainCat)) << "ZoomTransition::zoomOut";
93 
94  // Try to zoom out
95  ZoomFactor zoomFactorOld = currentZoomFactor;
96 
97  if (actionZoomFillIsChecked) {
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]) {
108  zoomFactorOld = zoomFactor;
109  break;
110  }
111  }
112  }
113 
114  ZoomFactor zoomFactorNew = ZOOM_1_TO_16;
115  if (zoomFactorOld < ZOOM_1_TO_16) {
116  zoomFactorNew = static_cast<ZoomFactor> (zoomFactorOld + 1);
117  }
118 
119  return zoomFactorNew;
120 }
#define LOG4CPP_INFO_S(logger)
Definition: convenience.h:18
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

The documentation for this class was generated from the following files: