Mercurial > hg > svgui
comparison view/Pane.cpp @ 1354:40b9a495a0e0
Use zoom constraints more consistently, including the new RelativelyFine one
author | Chris Cannam |
---|---|
date | Wed, 10 Oct 2018 14:33:10 +0100 |
parents | 4949061fcb8c |
children | b9bfcb8cd5a1 |
comparison
equal
deleted
inserted
replaced
1353:86429ff00f05 | 1354:40b9a495a0e0 |
---|---|
108 { | 108 { |
109 Profiler profiler("Pane::updateHeadsUpDisplay"); | 109 Profiler profiler("Pane::updateHeadsUpDisplay"); |
110 | 110 |
111 if (!isVisible()) return; | 111 if (!isVisible()) return; |
112 | 112 |
113 /* | |
114 int count = 0; | |
115 int currentLevel = 1; | |
116 int level = 1; | |
117 while (true) { | |
118 if (getZoomLevel() == level) currentLevel = count; | |
119 int newLevel = getZoomConstraintBlockSize(level + 1, | |
120 ZoomConstraint::RoundUp); | |
121 if (newLevel == level) break; | |
122 if (newLevel == 131072) break; //!!! just because | |
123 level = newLevel; | |
124 ++count; | |
125 } | |
126 | |
127 cerr << "Have " << count+1 << " zoom levels" << endl; | |
128 */ | |
129 | |
130 Layer *layer = 0; | 113 Layer *layer = 0; |
131 if (getLayerCount() > 0) layer = getLayer(getLayerCount() - 1); | 114 if (getLayerCount() > 0) layer = getLayer(getLayerCount() - 1); |
132 | 115 |
133 if (!m_headsUpDisplay) { | 116 if (!m_headsUpDisplay) { |
134 | 117 |
197 connect(m_reset, SIGNAL(clicked()), m_vpan, SLOT(resetToDefault())); | 180 connect(m_reset, SIGNAL(clicked()), m_vpan, SLOT(resetToDefault())); |
198 connect(m_reset, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget())); | 181 connect(m_reset, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget())); |
199 connect(m_reset, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget())); | 182 connect(m_reset, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget())); |
200 } | 183 } |
201 | 184 |
202 int count = 0; | 185 int count = countZoomLevels(); |
203 int current = 0; | 186 int current = getZoomLevelIndex(getZoomLevel()); |
204 ZoomLevel level; | 187 |
205 | 188 m_hthumb->setMinimumValue(1); |
206 //!!! pull out into function (presumably in View) | |
207 bool haveConstraint = false; | |
208 for (LayerList::const_iterator i = m_layerStack.begin(); i != m_layerStack.end(); | |
209 ++i) { | |
210 if ((*i)->getZoomConstraint() && !(*i)->supportsOtherZoomLevels()) { | |
211 haveConstraint = true; | |
212 break; | |
213 } | |
214 } | |
215 | |
216 SVCERR << "haveConstraint = " << haveConstraint << endl; | |
217 | |
218 if (haveConstraint) { | |
219 while (true) { | |
220 //!!! this won't terminate if level is in the PixelsPerFrame zone | |
221 if (getZoomLevel() == level) current = count; | |
222 ZoomLevel newLevel = getZoomConstraintLevel(level.incremented(), | |
223 ZoomConstraint::RoundUp); | |
224 SVCERR << "newLevel = " << newLevel << endl; | |
225 if (newLevel == level) break; | |
226 level = newLevel; | |
227 if (++count == 50) break; | |
228 } | |
229 } else { | |
230 // if we have no particular constraints, we can really spread out | |
231 //!!! this is nonsense in PixelsPerFrame zone | |
232 while (true) { | |
233 using namespace std::rel_ops; | |
234 if (getZoomLevel() >= level) current = count; | |
235 int step = level.level / 10; | |
236 int pwr = 0; | |
237 while (step > 0) { | |
238 ++pwr; | |
239 step /= 2; | |
240 } | |
241 step = 1; | |
242 while (pwr > 0) { | |
243 step *= 2; | |
244 --pwr; | |
245 } | |
246 cerr << level.level << ", step " << step << endl; | |
247 level.level += step; | |
248 if (++count == 100 || level.level > 262144) break; | |
249 } | |
250 } | |
251 | |
252 //!!! | |
253 SVCERR << "Have " << count << " zoom levels" << endl; | |
254 | |
255 m_hthumb->setMinimumValue(0); | |
256 m_hthumb->setMaximumValue(count); | 189 m_hthumb->setMaximumValue(count); |
257 m_hthumb->setValue(count - current); | 190 m_hthumb->setValue(count - current); |
258 | 191 |
259 // cerr << "set value to " << count-current << endl; | 192 cerr << "set value to " << count - 1 - current << endl; |
260 | 193 |
261 // cerr << "default value is " << m_hthumb->getDefaultValue() << endl; | 194 cerr << "default value is " << m_hthumb->getDefaultValue() << endl; |
262 | 195 |
263 if (count != 50 && m_hthumb->getDefaultValue() == 0) { | 196 if (m_hthumb->getDefaultValue() == 0) { |
264 m_hthumb->setDefaultValue(count - current); | 197 m_hthumb->setDefaultValue(count - current); |
265 // cerr << "set default value to " << m_hthumb->getDefaultValue() << endl; | 198 cerr << "set default value to " << m_hthumb->getDefaultValue() << endl; |
266 } | 199 } |
267 | 200 |
268 bool haveVThumb = false; | 201 bool haveVThumb = false; |
269 | 202 |
270 if (layer) { | 203 if (layer) { |
2439 } | 2372 } |
2440 | 2373 |
2441 void | 2374 void |
2442 Pane::horizontalThumbwheelMoved(int value) | 2375 Pane::horizontalThumbwheelMoved(int value) |
2443 { | 2376 { |
2444 //!!! dupe with updateHeadsUpDisplay | 2377 cerr << "horizontalThumbwheelMoved(" << value << ")" << endl; |
2445 | 2378 |
2446 int count = 0; | 2379 ZoomLevel level = getZoomLevelByIndex |
2447 ZoomLevel level; | 2380 (m_hthumb->getMaximumValue() - value); |
2448 | 2381 |
2449 //!!! pull out into function (presumably in View) | 2382 cerr << "new level is " << level << endl; |
2450 bool haveConstraint = false; | |
2451 for (LayerList::const_iterator i = m_layerStack.begin(); i != m_layerStack.end(); | |
2452 ++i) { | |
2453 if ((*i)->getZoomConstraint() && !(*i)->supportsOtherZoomLevels()) { | |
2454 haveConstraint = true; | |
2455 break; | |
2456 } | |
2457 } | |
2458 | |
2459 if (haveConstraint) { | |
2460 while (true) { | |
2461 //!!! this won't terminate if level is in the PixelsPerFrame zone | |
2462 if (m_hthumb->getMaximumValue() - value == count) break; | |
2463 ZoomLevel newLevel = getZoomConstraintLevel(level.incremented(), | |
2464 ZoomConstraint::RoundUp); | |
2465 if (newLevel == level) break; | |
2466 level = newLevel; | |
2467 if (++count == 50) break; | |
2468 } | |
2469 } else { | |
2470 //!!! this is nonsense in PixelsPerFrame zone | |
2471 while (true) { | |
2472 if (m_hthumb->getMaximumValue() - value == count) break; | |
2473 int step = level.level / 10; | |
2474 int pwr = 0; | |
2475 while (step > 0) { | |
2476 ++pwr; | |
2477 step /= 2; | |
2478 } | |
2479 step = 1; | |
2480 while (pwr > 0) { | |
2481 step *= 2; | |
2482 --pwr; | |
2483 } | |
2484 // cerr << level << endl; | |
2485 level.level += step; | |
2486 if (++count == 100 || level.level > 262144) break; | |
2487 } | |
2488 } | |
2489 | |
2490 // cerr << "new level is " << level << endl; | |
2491 setZoomLevel(level); | 2383 setZoomLevel(level); |
2492 } | 2384 } |
2493 | 2385 |
2494 void | 2386 void |
2495 Pane::verticalThumbwheelMoved(int value) | 2387 Pane::verticalThumbwheelMoved(int value) |