From ae466332bb674e34268f09bfd0e0f23a4f3f7587 Mon Sep 17 00:00:00 2001 From: ExMix Date: Fri, 7 Jun 2013 14:10:01 +0300 Subject: [PATCH] Download button logic fix --- map/basic_tiling_render_policy.cpp | 9 ++--- map/coverage_generator.cpp | 53 ++++++++++++------------------ map/coverage_generator.hpp | 9 ++--- 3 files changed, 27 insertions(+), 44 deletions(-) diff --git a/map/basic_tiling_render_policy.cpp b/map/basic_tiling_render_policy.cpp index b15d92bd99..198f4e8176 100644 --- a/map/basic_tiling_render_policy.cpp +++ b/map/basic_tiling_render_policy.cpp @@ -115,12 +115,9 @@ void BasicTilingRenderPolicy::DrawFrame(shared_ptr const & e, Screen m_CoverageGenerator->Draw(pDrawer->screen(), s); m_DrawScale = m_CoverageGenerator->GetDrawScale(); - if (!m_CoverageGenerator->IsEmptyDrawing() || !m_CoverageGenerator->IsPartialCoverage()) - { - m_IsEmptyModel = m_CoverageGenerator->IsEmptyDrawing() && m_CoverageGenerator->IsEmptyModelAtCenter(); - if (m_IsEmptyModel) - m_countryIndex = m_CoverageGenerator->GetCountryIndexAtCenter(); - } + m_IsEmptyModel = m_CoverageGenerator->IsEmptyDrawing(); + if (m_IsEmptyModel) + m_countryIndex = m_CoverageGenerator->GetCountryIndexAtCenter(); pDrawer->endFrame(); } diff --git a/map/coverage_generator.cpp b/map/coverage_generator.cpp index 1e82eae4d9..ce15900141 100644 --- a/map/coverage_generator.cpp +++ b/map/coverage_generator.cpp @@ -183,17 +183,12 @@ graphics::Overlay * CoverageGenerator::GetOverlay() const bool CoverageGenerator::IsEmptyDrawing() const { - return (m_coverageInfo.m_renderLeafTilesCount <= 0) && m_coverageInfo.m_isEmptyDrawing; + return (m_currentCoverage->m_renderLeafTilesCount <= 0) && m_currentCoverage->m_isEmptyDrawing; } -bool CoverageGenerator::IsEmptyModelAtCenter() const +bool CoverageGenerator::IsBackEmptyDrawing() const { - return m_indexInfo.m_countryIndex.IsValid(); -} - -bool CoverageGenerator::IsPartialCoverage() const -{ - return m_coverageInfo.m_hasTileCahceMiss; + return (m_backCoverage->m_renderLeafTilesCount <= 0) && m_backCoverage->m_isEmptyDrawing; } bool CoverageGenerator::DoForceUpdate() const @@ -235,11 +230,8 @@ void CoverageGenerator::CoverScreenImpl(core::CommandsQueue::Environment const & ComputeCoverTasks(); - if (!IsPartialCoverage() && IsEmptyDrawing()) - { - m_indexInfo.m_countryIndex = storage::TIndex(); - CheckEmptyModel(sequenceID); - } + if (IsBackEmptyDrawing()) + CheckEmptyModelImpl(sequenceID); bool shouldSwap = !m_stateInfo.m_isPause && CacheCoverage(env); @@ -269,13 +261,12 @@ void CoverageGenerator::MergeTileImpl(core::CommandsQueue::Environment const & e } m_backCoverage->m_screen = m_stateInfo.m_currentScreen; + m_backCoverage->m_isEmptyDrawing = m_currentCoverage->m_isEmptyDrawing; + m_backCoverage->m_renderLeafTilesCount = m_currentCoverage->m_renderLeafTilesCount; MergeSingleTile(rectInfo); - if (!IsPartialCoverage() && IsEmptyDrawing()) - { - m_indexInfo.m_countryIndex = storage::TIndex(); - CheckEmptyModel(sequenceID); - } + if (IsBackEmptyDrawing()) + CheckEmptyModelImpl(sequenceID); bool shouldSwap = !m_stateInfo.m_isPause && CacheCoverage(env); @@ -346,7 +337,7 @@ void CoverageGenerator::CheckEmptyModelImpl(int sequenceID) if (sequenceID < m_stateInfo.m_sequenceID) return; - if (!IsPartialCoverage() && IsEmptyDrawing()) + if (IsBackEmptyDrawing() || IsEmptyDrawing()) { m2::PointD const centerPt = m_stateInfo.m_currentScreen.GlobalRect().GetGlobalRect().Center(); m_indexInfo.m_countryIndex = GetCountryIndex(centerPt); @@ -360,8 +351,8 @@ void CoverageGenerator::CheckEmptyModelImpl(int sequenceID) //////////////////////////////////////////////////////////// void CoverageGenerator::ComputeCoverTasks() { - m_coverageInfo.m_isEmptyDrawing = true; - m_coverageInfo.m_renderLeafTilesCount = 0; + m_backCoverage->m_isEmptyDrawing = false; + m_backCoverage->m_renderLeafTilesCount = 0; vector allRects; allRects.reserve(16); @@ -373,6 +364,7 @@ void CoverageGenerator::ComputeCoverTasks() int const step = GetPlatform().PreCachingDepth() - 1; + bool isEmptyDrawingBuf = true; CoverageInfo::TTileSet tiles; for (size_t i = 0; i < allRects.size(); ++i) { @@ -391,7 +383,7 @@ void CoverageGenerator::ComputeCoverTasks() ASSERT(tiles.find(tile) == tiles.end(), ()); if (m_coverageInfo.m_tiler.isLeaf(ri)) - m_coverageInfo.m_isEmptyDrawing &= tile->m_isEmptyDrawing; + isEmptyDrawingBuf &= tile->m_isEmptyDrawing; tiles.insert(tile); } @@ -399,11 +391,11 @@ void CoverageGenerator::ComputeCoverTasks() { newRects.push_back(ri); if (m_coverageInfo.m_tiler.isLeaf(ri)) - ++m_coverageInfo.m_renderLeafTilesCount; + ++m_backCoverage->m_renderLeafTilesCount; } } - m_coverageInfo.m_hasTileCahceMiss = !newRects.empty(); + m_backCoverage->m_isEmptyDrawing = isEmptyDrawingBuf; /// computing difference between current and previous coverage /// tiles, that aren't in current coverage are unlocked to allow their deletion from TileCache @@ -492,8 +484,8 @@ void CoverageGenerator::MergeSingleTile(Tiler::RectInfo const & rectInfo) if (m_coverageInfo.m_tiler.isLeaf(rectInfo)) { - m_coverageInfo.m_isEmptyDrawing &= tile->m_isEmptyDrawing; - m_coverageInfo.m_renderLeafTilesCount--; + m_backCoverage->m_isEmptyDrawing &= tile->m_isEmptyDrawing; + m_backCoverage->m_renderLeafTilesCount--; } } @@ -607,11 +599,6 @@ void CoverageGenerator::ClearCoverage() m_coverageInfo.m_overlay->unlock(); } - m_coverageInfo.m_isEmptyDrawing = false; - m_coverageInfo.m_renderLeafTilesCount = 0; - m_coverageInfo.m_hasTileCahceMiss = false; - m_indexInfo.m_countryIndex = storage::TIndex(); - TileCache & tileCache = m_coverageInfo.m_tileRenderer->GetTileCache(); tileCache.Lock(); @@ -718,7 +705,7 @@ void CoverageGenerator::StateInfo::Pause() void CoverageGenerator::StateInfo::Resume() { m_isPause = false; - m_needForceUpdate = false; + m_needForceUpdate = true; } //////////////////////////////////////////////////////////// @@ -748,6 +735,8 @@ CoverageGenerator::IndexInfo::IndexInfo(RenderPolicy::TCountryIndexFn indexFn) CoverageGenerator::CachedCoverageInfo::CachedCoverageInfo() : m_mainElements(NULL) , m_sharpElements(NULL) + , m_renderLeafTilesCount(0) + , m_isEmptyDrawing(false) { } diff --git a/map/coverage_generator.hpp b/map/coverage_generator.hpp index 397e1175c8..70f6dce49f 100644 --- a/map/coverage_generator.hpp +++ b/map/coverage_generator.hpp @@ -89,8 +89,6 @@ public: graphics::Overlay * GetOverlay() const; bool IsEmptyDrawing() const; - bool IsEmptyModelAtCenter() const; - bool IsPartialCoverage() const; bool DoForceUpdate() const; int GetDrawScale() const; @@ -107,6 +105,7 @@ private: void InvalidateTilesImpl(m2::AnyRectD const & rect, int startScale); void CheckEmptyModelImpl(int sequenceID); + bool IsBackEmptyDrawing() const; private: void FinishSequenceIfNeeded(); @@ -167,10 +166,6 @@ private: TTileSet m_tiles; graphics::Overlay * m_overlay; - - int m_renderLeafTilesCount; - bool m_hasTileCahceMiss; - bool m_isEmptyDrawing; } m_coverageInfo; struct IndexInfo @@ -189,6 +184,8 @@ private: graphics::DisplayList * m_mainElements; graphics::DisplayList * m_sharpElements; ScreenBase m_screen; + int m_renderLeafTilesCount; + bool m_isEmptyDrawing; }; CachedCoverageInfo * m_currentCoverage;