diff --git a/geometry/rect2d.hpp b/geometry/rect2d.hpp index 3a83a65a17..70f68d42a1 100644 --- a/geometry/rect2d.hpp +++ b/geometry/rect2d.hpp @@ -133,8 +133,8 @@ namespace m2 bool IsRectInside(Rect const & rect) const { - return (IsPointInside(Point(rect.minX(), rect.minY())) - && IsPointInside(Point(rect.maxX(), rect.maxY()))); + return (IsPointInside(Point(rect.minX(), rect.minY())) && + IsPointInside(Point(rect.maxX(), rect.maxY()))); } Point Center() const { return Point((m_minX + m_maxX) / 2.0, (m_minY + m_maxY) / 2.0); } @@ -157,6 +157,21 @@ namespace m2 } } + void SetSizes(T dx, T dy) + { + ASSERT_GREATER ( dx, 0, () ); + ASSERT_GREATER ( dy, 0, () ); + + dx /= 2; + dy /= 2; + + Point const c = Center(); + m_minX = c.x - dx; + m_minY = c.y - dy; + m_maxX = c.x + dx; + m_maxY = c.y + dy; + } + T minX() const { return m_minX; } T minY() const { return m_minY; } T maxX() const { return m_maxX; } diff --git a/map/framework.cpp b/map/framework.cpp index 970f3ee260..c491e424dc 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -856,17 +856,14 @@ void FrameWork::AddRedrawCommandSure() } template - void FrameWork::ShowRect(m2::RectD const & rect) + void FrameWork::ShowRect(m2::RectD rect) { - m2::RectD r(rect); - if (my::AlmostEqual(rect.minX(), rect.maxX()) - || my::AlmostEqual(rect.minY(), rect.maxY())) - { - double const minWidthX = MercatorBounds::ConvertMetresToX(rect.minX(), 6 * m_metresMinWidth); - double const minWidthY = MercatorBounds::ConvertMetresToY(rect.minY(), 6 * m_metresMinWidth); - r.Inflate(minWidthX, minWidthY); - } - m_navigator.SetFromRect(r); + double const minSizeX = MercatorBounds::ConvertMetresToX(rect.minX(), 6 * m_metresMinWidth); + double const minSizeY = MercatorBounds::ConvertMetresToY(rect.minY(), 6 * m_metresMinWidth); + if (rect.SizeX() < minSizeX && rect.SizeY() < minSizeY) + rect.SetSizes(minSizeX, minSizeY); + + m_navigator.SetFromRect(rect); UpdateNow(); } diff --git a/map/framework.hpp b/map/framework.hpp index 67412ba35a..7d266a3d58 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -262,7 +262,7 @@ public: void CenterViewport(m2::PointD const & pt); - void ShowRect(m2::RectD const & rect); + void ShowRect(m2::RectD rect); void MemoryWarning();