forked from organicmaps/organicmaps
minor optimizations for Ruler.
This commit is contained in:
parent
6a867b1683
commit
43e98c429c
2 changed files with 52 additions and 59 deletions
105
map/ruler.cpp
105
map/ruler.cpp
|
@ -14,57 +14,57 @@
|
|||
|
||||
void Ruler::initFeets()
|
||||
{
|
||||
m_feets.push_back(make_pair("100 ft", 100));
|
||||
m_feets.push_back(make_pair("200 ft", 200));
|
||||
m_feets.push_back(make_pair("0.1 mi", 528));
|
||||
m_feets.push_back(make_pair("0.2 mi", 528 * 2));
|
||||
m_feets.push_back(make_pair("0.5 mi", 528 * 5));
|
||||
m_feets.push_back(make_pair("1 mi", 5280));
|
||||
m_feets.push_back(make_pair("2 mi", 2 * 5280));
|
||||
m_feets.push_back(make_pair("5 mi", 5 * 5280));
|
||||
m_feets.push_back(make_pair("10 mi", 10 * 5280));
|
||||
m_feets.push_back(make_pair("20 mi", 20 * 5280));
|
||||
m_feets.push_back(make_pair("50 mi", 50 * 5280));
|
||||
m_feets.push_back(make_pair("100 mi", 100 * 5280));
|
||||
m_feets.push_back(make_pair("200 mi", 200 * 5280));
|
||||
m_feets.push_back(make_pair("500 mi", 500 * 5280));
|
||||
m_units.push_back(make_pair("100 ft", 100));
|
||||
m_units.push_back(make_pair("200 ft", 200));
|
||||
m_units.push_back(make_pair("0.1 mi", 528));
|
||||
m_units.push_back(make_pair("0.2 mi", 528 * 2));
|
||||
m_units.push_back(make_pair("0.5 mi", 528 * 5));
|
||||
m_units.push_back(make_pair("1 mi", 5280));
|
||||
m_units.push_back(make_pair("2 mi", 2 * 5280));
|
||||
m_units.push_back(make_pair("5 mi", 5 * 5280));
|
||||
m_units.push_back(make_pair("10 mi", 10 * 5280));
|
||||
m_units.push_back(make_pair("20 mi", 20 * 5280));
|
||||
m_units.push_back(make_pair("50 mi", 50 * 5280));
|
||||
m_units.push_back(make_pair("100 mi", 100 * 5280));
|
||||
m_units.push_back(make_pair("200 mi", 200 * 5280));
|
||||
m_units.push_back(make_pair("500 mi", 500 * 5280));
|
||||
}
|
||||
|
||||
void Ruler::initYards()
|
||||
{
|
||||
m_yards.push_back(make_pair("50 yd", 50));
|
||||
m_yards.push_back(make_pair("100 yd", 100));
|
||||
m_yards.push_back(make_pair("200 yd", 200));
|
||||
m_yards.push_back(make_pair("500 yd", 500));
|
||||
m_yards.push_back(make_pair("0.5 mi", 0.5 * 1760));
|
||||
m_yards.push_back(make_pair("1 mi", 1760));
|
||||
m_yards.push_back(make_pair("2 mi", 2 * 1760));
|
||||
m_yards.push_back(make_pair("5 mi", 5 * 1760));
|
||||
m_yards.push_back(make_pair("10 mi", 10 * 1760));
|
||||
m_yards.push_back(make_pair("20 mi", 20 * 1760));
|
||||
m_yards.push_back(make_pair("50 mi", 50 * 1760));
|
||||
m_yards.push_back(make_pair("100 mi", 100 * 1760));
|
||||
m_yards.push_back(make_pair("200 mi", 200 * 1760));
|
||||
m_yards.push_back(make_pair("500 mi", 500 * 1760));
|
||||
m_units.push_back(make_pair("50 yd", 50));
|
||||
m_units.push_back(make_pair("100 yd", 100));
|
||||
m_units.push_back(make_pair("200 yd", 200));
|
||||
m_units.push_back(make_pair("500 yd", 500));
|
||||
m_units.push_back(make_pair("0.5 mi", 0.5 * 1760));
|
||||
m_units.push_back(make_pair("1 mi", 1760));
|
||||
m_units.push_back(make_pair("2 mi", 2 * 1760));
|
||||
m_units.push_back(make_pair("5 mi", 5 * 1760));
|
||||
m_units.push_back(make_pair("10 mi", 10 * 1760));
|
||||
m_units.push_back(make_pair("20 mi", 20 * 1760));
|
||||
m_units.push_back(make_pair("50 mi", 50 * 1760));
|
||||
m_units.push_back(make_pair("100 mi", 100 * 1760));
|
||||
m_units.push_back(make_pair("200 mi", 200 * 1760));
|
||||
m_units.push_back(make_pair("500 mi", 500 * 1760));
|
||||
}
|
||||
|
||||
void Ruler::initMetres()
|
||||
{
|
||||
m_metres.push_back(make_pair("20 m", 20));
|
||||
m_metres.push_back(make_pair("50 m", 50));
|
||||
m_metres.push_back(make_pair("100 m", 100));
|
||||
m_metres.push_back(make_pair("200 m", 200));
|
||||
m_metres.push_back(make_pair("500 m", 500));
|
||||
m_metres.push_back(make_pair("1 km", 1000));
|
||||
m_metres.push_back(make_pair("2 km", 2000));
|
||||
m_metres.push_back(make_pair("5 km", 5000));
|
||||
m_metres.push_back(make_pair("10 km", 10000));
|
||||
m_metres.push_back(make_pair("20 km", 20000));
|
||||
m_metres.push_back(make_pair("50 km", 50000));
|
||||
m_metres.push_back(make_pair("100 km", 100000));
|
||||
m_metres.push_back(make_pair("200 km", 200000));
|
||||
m_metres.push_back(make_pair("500 km", 500000));
|
||||
m_metres.push_back(make_pair("1000 km", 1000000));
|
||||
m_units.push_back(make_pair("20 m", 20));
|
||||
m_units.push_back(make_pair("50 m", 50));
|
||||
m_units.push_back(make_pair("100 m", 100));
|
||||
m_units.push_back(make_pair("200 m", 200));
|
||||
m_units.push_back(make_pair("500 m", 500));
|
||||
m_units.push_back(make_pair("1 km", 1000));
|
||||
m_units.push_back(make_pair("2 km", 2000));
|
||||
m_units.push_back(make_pair("5 km", 5000));
|
||||
m_units.push_back(make_pair("10 km", 10000));
|
||||
m_units.push_back(make_pair("20 km", 20000));
|
||||
m_units.push_back(make_pair("50 km", 50000));
|
||||
m_units.push_back(make_pair("100 km", 100000));
|
||||
m_units.push_back(make_pair("200 km", 200000));
|
||||
m_units.push_back(make_pair("500 km", 500000));
|
||||
m_units.push_back(make_pair("1000 km", 1000000));
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
@ -84,21 +84,18 @@ Ruler::Ruler(Params const & p)
|
|||
case Settings::Foot:
|
||||
{
|
||||
initFeets();
|
||||
m_units = &m_feets;
|
||||
m_conversionFn = &MeasurementUtils::MetersToFeet;
|
||||
break;
|
||||
}
|
||||
case Settings::Metric:
|
||||
{
|
||||
initMetres();
|
||||
m_units = &m_metres;
|
||||
m_conversionFn = &identity;
|
||||
break;
|
||||
}
|
||||
case Settings::Yard:
|
||||
{
|
||||
initYards();
|
||||
m_units = &m_yards;
|
||||
m_conversionFn = &MeasurementUtils::MetersToYards;
|
||||
break;
|
||||
}
|
||||
|
@ -161,23 +158,23 @@ void Ruler::update()
|
|||
|
||||
m_metresDiff = lonDiff / MercatorBounds::degreeInMetres * lonDiffCorrection;
|
||||
|
||||
if (m_units->at(0).second > m_conversionFn(m_metresDiff))
|
||||
if (m_units[0].second > m_conversionFn(m_metresDiff))
|
||||
{
|
||||
m_scalerText = "<" + m_units->at(0).first;
|
||||
m_scalerText = "<" + m_units[0].first;
|
||||
m_metresDiff = m_minUnitsWidth - 1;
|
||||
}
|
||||
else if (m_units->back().second <= m_conversionFn(m_metresDiff))
|
||||
else if (m_units.back().second <= m_conversionFn(m_metresDiff))
|
||||
{
|
||||
m_scalerText = ">" + m_units->back().first;
|
||||
m_scalerText = ">" + m_units.back().first;
|
||||
m_metresDiff = m_maxUnitsWidth + 1;
|
||||
}
|
||||
else
|
||||
for (size_t i = 0; i < m_units->size(); ++i)
|
||||
for (size_t i = 0; i < m_units.size(); ++i)
|
||||
{
|
||||
if (m_units->at(i).second > m_conversionFn(m_metresDiff))
|
||||
if (m_units[i].second > m_conversionFn(m_metresDiff))
|
||||
{
|
||||
m_metresDiff = m_units->at(i).second / m_conversionFn(1);
|
||||
m_scalerText = m_units->at(i).first;
|
||||
m_metresDiff = m_units[i].second / m_conversionFn(1);
|
||||
m_scalerText = m_units[i].first;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,13 +44,9 @@ private:
|
|||
mutable vector<m2::AnyRectD> m_boundRects;
|
||||
|
||||
typedef double (*ConversionFn)(double);
|
||||
vector<pair<string, double> > * m_units;
|
||||
vector<pair<string, double> > m_units;
|
||||
ConversionFn m_conversionFn;
|
||||
|
||||
vector<pair<string, double> > m_yards;
|
||||
vector<pair<string, double> > m_feets;
|
||||
vector<pair<string, double> > m_metres;
|
||||
|
||||
void initYards();
|
||||
void initMetres();
|
||||
void initFeets();
|
||||
|
|
Loading…
Add table
Reference in a new issue