MCPcopy Create free account
hub / github.com/comaps/comaps / CalcMetersDiff

Method CalcMetersDiff

libs/drape_frontend/gui/ruler_helper.cpp:184–233  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

182}
183
184double RulerHelper::CalcMetersDiff(double value)
185{
186 UnitValue const * arrU = g_arrMeters;
187 int count = ARRAY_SIZE(g_arrMeters);
188
189 auto conversionFn = &Identity;
190
191 using namespace measurement_utils;
192 if (GetMeasurementUnits() == Units::Imperial)
193 {
194 arrU = g_arrFeets;
195 count = ARRAY_SIZE(g_arrFeets);
196 conversionFn = &MetersToFeet;
197 }
198
199 int prevUnitRange = m_rangeIndex;
200 double result = 0.0;
201 double v = conversionFn(value);
202 if (arrU[0].m_i > v)
203 {
204 m_rangeIndex = kMinUnitValue;
205 // TODO: "< X" ruler text seems to be never used.
206 m_rulerText = std::string("< ") + arrU[0].m_s;
207 result = kMinMetersWidth - 1.0;
208 }
209 else if (arrU[count - 1].m_i <= v)
210 {
211 m_rangeIndex = kMaxUnitValue;
212 m_rulerText = std::string("> ") + arrU[count - 1].m_s;
213 result = kMaxMetersWidth + 1.0;
214 }
215 else
216 {
217 for (int i = 0; i < count; ++i)
218 {
219 if (arrU[i].m_i > v)
220 {
221 m_rangeIndex = i;
222 result = arrU[i].m_i / conversionFn(1.0);
223 m_rulerText = arrU[i].m_s;
224 break;
225 }
226 }
227 }
228
229 if (m_rangeIndex != prevUnitRange)
230 SetTextDirty();
231
232 return result;
233}
234
235void RulerHelper::SetTextDirty()
236{

Callers

nothing calls this directly

Calls 1

GetMeasurementUnitsFunction · 0.85

Tested by

no test coverage detected