Other new logic to work with overlay.

This commit is contained in:
ExMix 2013-04-23 16:01:38 +03:00 committed by Alex Zolotarev
parent b1276dd8d2
commit cdf38a890a
3 changed files with 32 additions and 19 deletions

View file

@ -1492,7 +1492,11 @@ bool Framework::GetVisiblePOI(m2::PointD const & pxPoint, m2::PointD & pxPivot,
list<shared_ptr<ElementT> > candidates;
m2::RectD rect(pt.x - halfSize, pt.y - halfSize,
pt.x + halfSize, pt.y + halfSize);
m_renderPolicy->FrameOverlay()->selectOverlayElements(rect, candidates);
{
shared_ptr<graphics::Overlay> frameOverlay = m_renderPolicy->FrameOverlay();
graphics::Overlay::Lock guard(frameOverlay);
frameOverlay->selectOverlayElements(rect, candidates);
}
shared_ptr<ElementT> elem = GetClosestToPivot(candidates, pt);

View file

@ -43,7 +43,7 @@ ScreenCoverage::ScreenCoverage(TileRenderer * tileRenderer,
m_overlay->setCouldOverlap(false);
}
void ScreenCoverage::CopyInto(ScreenCoverage & cvg, bool cloneOverlay)
void ScreenCoverage::CopyInto(ScreenCoverage & cvg, bool mergeOverlay)
{
cvg.m_tileRenderer = m_tileRenderer;
cvg.m_tiler = m_tiler;
@ -70,9 +70,11 @@ void ScreenCoverage::CopyInto(ScreenCoverage & cvg, bool cloneOverlay)
}
tileCache->Unlock();
if (cloneOverlay)
cvg.m_overlay.reset(m_overlay->clone());
if (mergeOverlay)
{
graphics::Overlay::Lock guard(cvg.m_overlay);
cvg.m_overlay->merge(*m_overlay);
}
}
void ScreenCoverage::Clear()
@ -80,7 +82,10 @@ void ScreenCoverage::Clear()
m_tileRects.clear();
m_newTileRects.clear();
m_newLeafTileRects.clear();
m_overlay->clear();
{
graphics::Overlay::Lock guard(m_overlay);
m_overlay->clear();
}
m_isEmptyDrawingCoverage = false;
m_isEmptyModelAtCoverageCenter = true;
m_leafTilesToRender = 0;
@ -133,9 +138,9 @@ void ScreenCoverage::Merge(Tiler::RectInfo const & ri)
if (tile != NULL && m_tiler.isLeaf(ri))
{
graphics::Overlay::Lock guard(m_overlay);
m_overlay->merge(*tile->m_overlay,
tile->m_tileScreen.PtoGMatrix() * m_screen.GtoPMatrix());
}
//else
@ -191,22 +196,25 @@ bool ScreenCoverage::Cache(core::CommandsQueue::Environment const & env)
// selecting and rendering non-sharp elements.
vector<shared_ptr<graphics::OverlayElement> > nonSharpElements;
m_overlay->forEach(bind(&FilterElementsBySharpness, _1, ref(nonSharpElements), false));
{
graphics::Overlay::Lock guard(m_overlay);
vector<shared_ptr<graphics::OverlayElement> > nonSharpElements;
m_overlay->forEach(bind(&FilterElementsBySharpness, _1, ref(nonSharpElements), false));
for (unsigned i = 0; i < nonSharpElements.size(); ++i)
nonSharpElements[i]->draw(m_cacheScreen.get(), idM);
for (unsigned i = 0; i < nonSharpElements.size(); ++i)
nonSharpElements[i]->draw(m_cacheScreen.get(), idM);
// selecting and rendering sharp elements
// selecting and rendering sharp elements
vector<shared_ptr<graphics::OverlayElement> > sharpElements;
m_overlay->forEach(bind(&FilterElementsBySharpness, _1, ref(sharpElements), true));
vector<shared_ptr<graphics::OverlayElement> > sharpElements;
m_overlay->forEach(bind(&FilterElementsBySharpness, _1, ref(sharpElements), true));
m_cacheScreen->applySharpStates();
m_cacheScreen->setDisplayList(m_sharpTextDL.get());
m_cacheScreen->applySharpStates();
m_cacheScreen->setDisplayList(m_sharpTextDL.get());
for (unsigned i = 0; i < sharpElements.size(); ++i)
sharpElements[i]->draw(m_cacheScreen.get(), idM);
for (unsigned i = 0; i < sharpElements.size(); ++i)
sharpElements[i]->draw(m_cacheScreen.get(), idM);
} /// Overlay lock
m_cacheScreen->setDisplayList(0);
m_cacheScreen->applyStates();
@ -477,6 +485,7 @@ void ScreenCoverage::RemoveTiles(m2::AnyRectD const & r, int startScale)
void ScreenCoverage::MergeOverlay()
{
graphics::Overlay::Lock guard(m_overlay);
m_overlay->clear();
for (TTileSet::const_iterator it = m_tiles.begin(); it != m_tiles.end(); ++it)

View file

@ -94,7 +94,7 @@ public:
/// Destructor
~ScreenCoverage();
/// Copy all needed information into specified ScreenCoverage
void CopyInto(ScreenCoverage & cvg, bool cloneOverlay);
void CopyInto(ScreenCoverage & cvg, bool mergeOverlay);
/// Make screen coverage empty
void Clear();
/// set unique ID for all actions, used to compute this coverage