Mercurial > hg > svgui
diff view/View.cpp @ 1548:bd6af89982d7
Permit getScaleProvidingLayerForUnit to return a dormant layer if there is no visible alternative. This is necessary to avoid the scale disappearing in Tony when the spectrogram is toggled off.
author | Chris Cannam |
---|---|
date | Thu, 17 Oct 2019 14:44:22 +0100 |
parents | b4b5b8dd5fe1 |
children | 27f3e64489e1 |
line wrap: on
line diff
--- a/view/View.cpp Thu Oct 17 11:12:54 2019 +0100 +++ b/view/View.cpp Thu Oct 17 14:44:22 2019 +0100 @@ -247,9 +247,22 @@ { // Return the layer which is used to provide the min/max/log for // any auto-align layer of a given unit. This is also the layer - // that will draw the scale, if possible. It is the topmost - // visible layer having that unit that is not also auto-aligning. - // If there is none such, return null. + // that will draw the scale, if possible. + // + // The returned layer is + // + // - the topmost visible layer having that unit that is not also + // auto-aligning; or if there is no such layer, + // + // - the topmost layer of any visibility having that unit that is + // not also auto-aligning (because a dormant layer can still draw + // a scale, and it makes sense for layers aligned to it not to + // jump about when its visibility is toggled); or if there is no + // such layer, + // + // - none + + Layer *dormantOption = nullptr; for (auto i = m_layerStack.rbegin(); i != m_layerStack.rend(); ++i) { @@ -260,13 +273,6 @@ << unit << "): Looking at layer " << layer << " (" << layer->getLayerPresentationName() << ")" << endl; #endif - - if (layer->isLayerDormant(this)) { -#ifdef DEBUG_VIEW_SCALE_CHOICE - SVCERR << "... it's dormant" << endl; -#endif - continue; - } QString layerUnit; double layerMin = 0.0, layerMax = 0.0; @@ -278,6 +284,7 @@ #endif continue; } + if (layerUnit.toLower() != unit.toLower()) { #ifdef DEBUG_VIEW_SCALE_CHOICE SVCERR << "... it has the wrong unit (" << layerUnit << ")" << endl; @@ -293,14 +300,23 @@ continue; } + if (layer->isLayerDormant(this)) { +#ifdef DEBUG_VIEW_SCALE_CHOICE + SVCERR << "... it's dormant" << endl; +#endif + if (!dormantOption) { + dormantOption = layer; + } + continue; + } + #ifdef DEBUG_VIEW_SCALE_CHOICE SVCERR << "... it's good" << endl; #endif - return layer; } - return nullptr; + return dormantOption; } bool