]> Devoid-pointer.net GitWeb - anyanka.git/commitdiff
- Use rounding in subticks counter
authorMichal Malý <madcatxster@devoid-pointer.net>
Fri, 10 Oct 2014 19:43:59 +0000 (21:43 +0200)
committerMichal Malý <madcatxster@devoid-pointer.net>
Fri, 10 Oct 2014 19:43:59 +0000 (21:43 +0200)
- Fix first tick calculation for negative numbers

helpers.cpp
signalcontroller.cpp
signaldrawer.cpp

index 046e4dd2ca4443554d786cfc31d860fc5472108c..157bcd52a7afaa3e088b778378a91a2bb52b9734 100644 (file)
@@ -26,13 +26,15 @@ const double Helpers::EPSILON = 2e-14;
 
 double Helpers::firstTick(const double from, const double step)
 {
-  const double mod = fabs(fmod(from, step));
   double ret;
+  double mod = fmod(from, step);
+  if (mod < 0.0)
+    mod = step + mod;
 
   if (fabs(mod - 0.0) < EPSILON)
     ret = from;
   else
-    ret = from + (step - fmod(from, step));
+    ret = from + (step - mod);
 
   return ret;
 }
index 452189cf1d1d8c19bf635caf908f9f27194c570d..d63db558d14df8abdcadfc5544c6dffc86a5960d 100644 (file)
@@ -193,12 +193,12 @@ RulerDrawData SignalController::getRulerDrawData(const double from, const double
   diffAbs = toAbs - fromAbs;
   step = 1 / pow(10, floor(log10(1 / (diffAbs))) + 1); // Magic - you want to love it but you better not touch!
   relStep = (diffRel * step) / (diffAbs);
-  //qDebug() << __QFUNC__ << "Step" << step << "RelStep" << relStep << "relDiff" << diffRel << fromAbs;
+  //Logger::log(Logger::Level::DEBUG, ME_SENDER_STR, __QFUNC__ + QString(" fA %1 tA %2 fR %3 tR %4").arg(fromAbs).arg(toAbs).arg(from).arg(to));
 
   /* Calculate position of the first major tick */
   firstTickAbs = Helpers::firstTick(fromAbs, step);
   firstTickRel = Helpers::firstTick(from, relStep);
-  //qDebug() << __QFUNC__ << "First tick Abs:" << firstTickAbs << "Rel:" << firstTickRel;
+  //Logger::log(Logger::Level::DEBUG, ME_SENDER_STR, __QFUNC__ + QString(" ftA %1 ftR %2").arg(firstTickAbs).arg(firstTickRel));
 
   return RulerDrawData(firstTickAbs, firstTickRel, step, relStep);
 }
index a07b478393a53e716fc2d30f9f846a248f17c253..b175ae73dcb3ea2d4d0a2d59d859c0a2ecc6be6b 100644 (file)
@@ -237,6 +237,7 @@ void SignalDrawer::drawLeadingSubticks(const RulerDrawData& rd, std::function<vo
   const double subRelMin = Helpers::firstTick(relMin, subRelStep);
   const double subAbsMin = (rd.firstTickRel - subRelMin) * (subStep(rd.step)) / subRelStep;
 
+  //Logger::log(Logger::Level::DEBUG, ME_SENDER_STR, __QFUNC__ + " from leading");
   drawScaleBySubticks(rd, drawFunc, subRelMin, subAbsMin, rd.firstTickRel);
 }
 
@@ -248,7 +249,8 @@ void SignalDrawer::drawScaleBySubticks(const RulerDrawData& rd, std::function<vo
   double subRel = fromSubRel;
   double absVal = fromAbsVal;
 
-  int ctr = 10 - ((toSubRel - fromSubRel) / subRelStep);
+  int ctr = 10 - floor(((toSubRel - fromSubRel) / subRelStep) + 0.5);
+  //Logger::log(Logger::Level::DEBUG, ME_SENDER_STR, __QFUNC__ + QString("ctr %1, tsr %2, fsr %3 srs %4").arg(ctr).arg(fromSubRel).arg(toSubRel).arg(subRelStep));
 
   while (subRel < toSubRel) {
     drawFunc(subRel, absVal, (ctr++ == 5) ? TickType::TICK : TickType::SUBTICK);
@@ -359,7 +361,7 @@ void SignalDrawer::renderValueScaleText(QPainter* const p, int& maxCueWidth, con
 
   if (maxCueWidth < br.width())
     maxCueWidth = br.width();
-  p->drawText(1, yPix + (br.height() / 2), m_locale.toString(value, 'f', 2));
+  p->drawText(1, yPix, m_locale.toString(value, 'f', 2));
 }
 
 void SignalDrawer::renderTimeScaleTick(QPainter* const p, const double rel, const double time, const TickType tt)