Android. Using exact DPI for visual scale calculation.

This commit is contained in:
Vladimir Byko-Ianko 2015-11-19 08:53:31 +03:00 committed by r.kuznetsov
parent bf73c9b36e
commit 8f2a4f0cd1
3 changed files with 5 additions and 36 deletions

View file

@ -31,6 +31,7 @@
#include "base/math.hpp"
#include "base/logging.hpp"
#include "base/visual_scale.hpp"
android::Framework * g_framework = 0;
@ -102,35 +103,6 @@ void Framework::UpdateCompassSensor(int ind, float * arr)
m_sensors[ind].Next(arr);
}
float Framework::GetBestDensity(int densityDpi)
{
typedef pair<int, float> P;
P dens[] = {
P(120, 0.75f),
P(160, 1.0f),
P(240, 1.5f),
P(320, 2.0f),
P(480, 3.0f)
};
int prevRange = numeric_limits<int>::max();
int bestRangeIndex = 0;
for (int i = 0; i < ARRAY_SIZE(dens); i++)
{
int currRange = abs(densityDpi - dens[i].first);
if (currRange <= prevRange)
{
// it is better, take index
bestRangeIndex = i;
prevRange = currRange;
}
else
break;
}
return dens[bestRangeIndex].second;
}
void Framework::MyPositionModeChanged(location::EMyPositionMode mode)
{
if (m_myPositionModeSignal != nullptr)
@ -144,11 +116,10 @@ bool Framework::CreateDrapeEngine(JNIEnv * env, jobject jSurface, int densityDpi
if (!factory->IsValid())
return false;
float visualScale = GetBestDensity(densityDpi);
::Framework::DrapeCreationParams p;
p.m_surfaceWidth = factory->GetWidth();
p.m_surfaceHeight = factory->GetHeight();
p.m_visualScale = visualScale;
p.m_visualScale = VisualScale(densityDpi);
p.m_hasMyPositionState = m_isCurrentModeInitialized;
p.m_initialMyPositionState = m_currentMode;
ASSERT(!m_guiPositions.empty(), ("GUI elements must be set-up before engine is created"));

View file

@ -50,8 +50,6 @@ namespace android
map<gui::EWidget, gui::Position> m_guiPositions;
float GetBestDensity(int densityDpi);
void MyPositionModeChanged(location::EMyPositionMode mode);
location::TMyPositionModeChanged m_myPositionModeSignal;

View file

@ -145,10 +145,10 @@ public class MapFragment extends BaseMwmFragment
final Rect rect = surfaceHolder.getSurfaceFrame();
setupWidgets(rect.width(), rect.height());
final DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
final DisplayMetrics dm = getActivity().getResources().getDisplayMetrics();
final float exactDensityDpi = (dm.xdpi + dm.ydpi) / 2;
mEngineCreated = nativeCreateEngine(surface, metrics.densityDpi);
mEngineCreated = nativeCreateEngine(surface, (int)exactDensityDpi);
if (mEngineCreated)
onRenderingInitialized();
else