forked from organicmaps/organicmaps
[search] Fix some hard logic in viewport recaculation. Если сами белые!
This commit is contained in:
parent
f8209a8981
commit
fb8a3ebf01
3 changed files with 26 additions and 10 deletions
|
@ -117,14 +117,8 @@ void Engine::Search(SearchParams const & params, m2::RectD const & viewport)
|
|||
{
|
||||
threads::MutexGuard guard(m_updateMutex);
|
||||
|
||||
// if we need to restore viewport search ...
|
||||
bool const changed = ((m_params.m_mode != params.m_mode) && !params.IsNearMeMode());
|
||||
|
||||
m_params = params;
|
||||
|
||||
// ... so update current viewport
|
||||
if (changed)
|
||||
p.RunAsync(bind(&Engine::SetViewportAsync, this, viewport));
|
||||
m_viewport = viewport;
|
||||
}
|
||||
|
||||
p.RunAsync(bind(&Engine::SearchAsync, this));
|
||||
|
@ -151,14 +145,19 @@ void Engine::SearchAsync()
|
|||
|
||||
// Get current search params.
|
||||
SearchParams params;
|
||||
m2::RectD viewport;
|
||||
|
||||
{
|
||||
threads::MutexGuard updateGuard(m_updateMutex);
|
||||
params = m_params;
|
||||
viewport = m_viewport;
|
||||
}
|
||||
|
||||
// Initialize query.
|
||||
if (params.IsNearMeMode())
|
||||
m_pQuery->SetViewport(GetViewportRect(params.m_lat, params.m_lon));
|
||||
else
|
||||
m_pQuery->SetViewport(viewport);
|
||||
|
||||
if (params.m_validPos)
|
||||
m_pQuery->SetPosition(GetViewportXY(params.m_lat, params.m_lon));
|
||||
|
|
|
@ -55,6 +55,7 @@ private:
|
|||
threads::Mutex m_searchMutex, m_updateMutex;
|
||||
|
||||
SearchParams m_params;
|
||||
m2::RectD m_viewport;
|
||||
|
||||
Index const * m_pIndex;
|
||||
scoped_ptr<search::Query> m_pQuery;
|
||||
|
|
|
@ -45,11 +45,27 @@ Query::~Query()
|
|||
{
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
inline bool IsEqual(m2::RectD const & r1, m2::RectD const & r2, double eps)
|
||||
{
|
||||
m2::RectD r = r1;
|
||||
r.Inflate(eps, eps);
|
||||
if (!r.IsRectInside(r2)) return false;
|
||||
|
||||
r = r2;
|
||||
r.Inflate(eps, eps);
|
||||
if (!r.IsRectInside(r1)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void Query::SetViewport(m2::RectD const & viewport)
|
||||
{
|
||||
// TODO: Set m_bOffsetsCacheIsValid = false when mwm index is added or removed!
|
||||
|
||||
if (m_viewport != viewport || !m_bOffsetsCacheIsValid)
|
||||
// Check if viewports are equal.
|
||||
// 10.0 - is 10 meters
|
||||
if (!m_bOffsetsCacheIsValid || !IsEqual(m_viewport, viewport, 10.0))
|
||||
{
|
||||
m_viewport = viewport;
|
||||
m_viewportExtended = m_viewport;
|
||||
|
|
Loading…
Add table
Reference in a new issue