forked from organicmaps/organicmaps-tmp
Other new logic to work with overlay.
This commit is contained in:
parent
b1276dd8d2
commit
cdf38a890a
3 changed files with 32 additions and 19 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue