From da25d3faaf098441fe3f4778b690be21c1287406 Mon Sep 17 00:00:00 2001 From: ExMix Date: Thu, 29 Jan 2015 14:54:19 +0300 Subject: [PATCH] [drape] resize must get pixel size of surface. Not logic. --- drape_frontend/drape_engine.cpp | 7 +++--- drape_frontend/drape_engine.hpp | 3 ++- drape_frontend/viewport.cpp | 39 +++++---------------------------- drape_frontend/viewport.hpp | 15 +++++-------- drape_head/drape_surface.cpp | 4 ++-- iphone/Maps/Classes/EAGLView.mm | 2 +- map/framework.cpp | 9 ++++---- qt/draw_widget.cpp | 3 ++- 8 files changed, 27 insertions(+), 55 deletions(-) diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index 58fdf71e0e..283e714b66 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -12,10 +12,11 @@ namespace df DrapeEngine::DrapeEngine(dp::RefPointer contextfactory, Viewport const & viewport, - MapDataProvider const & model) + MapDataProvider const & model, + double vs) : m_viewport(viewport) { - VisualParams::Init(viewport.GetPixelRatio(), df::CalculateTileSize(m_viewport.GetWidth(), m_viewport.GetHeight())); + VisualParams::Init(vs, df::CalculateTileSize(m_viewport.GetWidth(), m_viewport.GetHeight())); m_threadCommutator = dp::MasterPointer(new ThreadsCommutator()); dp::RefPointer commutatorRef = m_threadCommutator.GetRefPointer(); @@ -37,7 +38,7 @@ DrapeEngine::~DrapeEngine() void DrapeEngine::Resize(int w, int h) { - if (m_viewport.GetLogicWidth() == w && m_viewport.GetLogicHeight() == h) + if (m_viewport.GetWidth() == w && m_viewport.GetHeight() == h) return; m_viewport.SetViewport(0, 0, w, h); diff --git a/drape_frontend/drape_engine.hpp b/drape_frontend/drape_engine.hpp index ad2e260464..0b9d735a1d 100644 --- a/drape_frontend/drape_engine.hpp +++ b/drape_frontend/drape_engine.hpp @@ -23,7 +23,8 @@ class DrapeEngine public: DrapeEngine(dp::RefPointer oglcontextfactory, Viewport const & viewport, - MapDataProvider const & model); + MapDataProvider const & model, + double vs); ~DrapeEngine(); void Resize(int w, int h); diff --git a/drape_frontend/viewport.cpp b/drape_frontend/viewport.cpp index c369dd71e7..b8a3a9593c 100644 --- a/drape_frontend/viewport.cpp +++ b/drape_frontend/viewport.cpp @@ -4,11 +4,9 @@ namespace df { -Viewport::Viewport(float pixelRatio, - uint32_t x0, uint32_t y0, +Viewport::Viewport(uint32_t x0, uint32_t y0, uint32_t w, uint32_t h) - : m_pixelRatio(pixelRatio) - , m_zero(x0, y0) + : m_zero(x0, y0) , m_size(w, h) { } @@ -19,49 +17,24 @@ void Viewport::SetViewport(uint32_t x0, uint32_t y0, uint32_t w, uint32_t h) m_size = m2::PointU(w, h); } -uint32_t Viewport::GetLogicX0() const +uint32_t Viewport::GetX0() const { return m_zero.x; } -uint32_t Viewport::GetLogicY0() const +uint32_t Viewport::GetY0() const { return m_zero.y; } -uint32_t Viewport::GetLogicWidth() const +uint32_t Viewport::GetWidth() const { return m_size.x; } -uint32_t Viewport::GetLogicHeight() const -{ - return m_size.y; -} - -uint32_t Viewport::GetX0() const -{ - return GetLogicX0() * m_pixelRatio; -} - -uint32_t Viewport::GetY0() const -{ - return GetLogicY0() * m_pixelRatio; -} - -uint32_t Viewport::GetWidth() const -{ - return GetLogicWidth() * m_pixelRatio; -} - uint32_t Viewport::GetHeight() const { - return GetLogicHeight() * m_pixelRatio; -} - -float Viewport::GetPixelRatio() const -{ - return m_pixelRatio; + return m_size.y; } void Viewport::Apply() const diff --git a/drape_frontend/viewport.hpp b/drape_frontend/viewport.hpp index e2d5ae0366..d867b8157c 100644 --- a/drape_frontend/viewport.hpp +++ b/drape_frontend/viewport.hpp @@ -12,29 +12,24 @@ class Viewport { public: // x0, y0, w, h is device-independent pixels - Viewport(float pixelRatio, - uint32_t x0, uint32_t y0, + Viewport(uint32_t x0, uint32_t y0, uint32_t w, uint32_t h); - ///@{ Device-independent pixels + ///@{ in surface pixels + /// on iOS we must mul this on scaleFactor + /// on android we get true size from surface void SetViewport(uint32_t x0, uint32_t y0, uint32_t w, uint32_t h); - uint32_t GetLogicX0() const; - uint32_t GetLogicY0() const; - uint32_t GetLogicWidth() const; - uint32_t GetLogicHeight() const; - ///@} uint32_t GetX0() const; uint32_t GetY0() const; uint32_t GetWidth() const; uint32_t GetHeight() const; - float GetPixelRatio() const; + ///@} // Apply viewport to graphics pipeline // with convert start poin and size to physical pixels void Apply() const; private: - float m_pixelRatio; m2::PointU m_zero; m2::PointU m_size; }; diff --git a/drape_head/drape_surface.cpp b/drape_head/drape_surface.cpp index 2f3fa956ba..ec8e2f5cd0 100644 --- a/drape_head/drape_surface.cpp +++ b/drape_head/drape_surface.cpp @@ -132,8 +132,8 @@ void DrapeSurface::CreateEngine() m_model.ReadFeatures(fn, ids); }; - m_drapeEngine = TEnginePrt(new df::DrapeEngine(f, df::Viewport(pixelRatio, 0, 0, width(), height()), - df::MapDataProvider(idReadFn, featureReadFn))); + m_drapeEngine = TEnginePrt(new df::DrapeEngine(f, df::Viewport(0, 0, width(), height()), + df::MapDataProvider(idReadFn, featureReadFn), pixelRatio)); } void DrapeSurface::UpdateCoverage() diff --git a/iphone/Maps/Classes/EAGLView.mm b/iphone/Maps/Classes/EAGLView.mm index cef3ca5ef2..93a13ae835 100644 --- a/iphone/Maps/Classes/EAGLView.mm +++ b/iphone/Maps/Classes/EAGLView.mm @@ -131,7 +131,7 @@ graphics::EDensity getDensityType(int exactDensityDPI, double scale) - (void)onSize:(int)width withHeight:(int)height { - GetFramework().OnSize(width, height); + GetFramework().OnSize(width * self.contentScaleFactor, height * self.contentScaleFactor); } - (double)correctContentScale diff --git a/map/framework.cpp b/map/framework.cpp index 9305ebaa08..f50fc878d6 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -663,8 +663,7 @@ void Framework::OnSize(int w, int h) if (!m_drapeEngine.IsNull()) { - double vs = df::VisualParams::Instance().GetVisualScale(); - m_navigator.OnSize(0, 0, vs * w, vs * h); + m_navigator.OnSize(0, 0, w, h); m_drapeEngine->Resize(w, h); m_drapeEngine->UpdateCoverage(m_navigator.Screen()); } @@ -1012,7 +1011,9 @@ void Framework::Scale(double scale) m2::PointD center = GetPixelCenter(); ///@TODO UVR //GetLocationState()->CorrectScalePoint(center); - m_animController->AddTask(m_navigator.ScaleToPointAnim(center, scale, 0.25)); + ///@TODO UVR + //m_animController->AddTask(m_navigator.ScaleToPointAnim(center, scale, 0.25)); + m_navigator.ScaleToPoint(center, scale, 0.0); if (!m_drapeEngine.IsNull()) m_drapeEngine->UpdateCoverage(m_navigator.Screen()); @@ -1381,7 +1382,7 @@ void Framework::CreateDrapeEngine(dp::RefPointer contextF m_model.ReadFeatures(fn, ids); }; - m_drapeEngine.Reset(new df::DrapeEngine(contextFactory, df::Viewport(vs, 0, 0, w, h), df::MapDataProvider(idReadFn, featureReadFn))); + m_drapeEngine.Reset(new df::DrapeEngine(contextFactory, df::Viewport(0, 0, w, h), df::MapDataProvider(idReadFn, featureReadFn), vs)); OnSize(w, h); } diff --git a/qt/draw_widget.cpp b/qt/draw_widget.cpp index cea5dc3ced..9816da4eb4 100644 --- a/qt/draw_widget.cpp +++ b/qt/draw_widget.cpp @@ -419,7 +419,8 @@ namespace qt void DrawWidget::sizeChanged(int) { - m_framework->OnSize(width(), height()); + double scaleFactor = static_cast(devicePixelRatio()); + m_framework->OnSize(scaleFactor * width(), scaleFactor * height()); UpdateScaleControl(); }