]> Devoid-pointer.net GitWeb - anyanka.git/commitdiff
- Calculate first relative tick position correctly
authorMichal Malý <madcatxster@devoid-pointer.net>
Fri, 10 Oct 2014 20:57:04 +0000 (22:57 +0200)
committerMichal Malý <madcatxster@devoid-pointer.net>
Fri, 10 Oct 2014 20:57:04 +0000 (22:57 +0200)
- Draw leading subticks from the first tick back
- Add "BIGTICK" tick type

signalcontroller.cpp
signaldrawer.cpp
signaldrawer.h

index d63db558d14df8abdcadfc5544c6dffc86a5960d..40eb7b2aceb513db3f14e874443fa3b143201c36 100644 (file)
@@ -193,12 +193,20 @@ 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);
+  //Logger::log(Logger::Level::DEBUG, ME_SENDER_STR, __QFUNC__ + QString(" rD %1 aD %2").arg(diffRel).arg(diffAbs));
   //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);
-  //Logger::log(Logger::Level::DEBUG, ME_SENDER_STR, __QFUNC__ + QString(" ftA %1 ftR %2").arg(firstTickAbs).arg(firstTickRel));
+  switch (axis) {
+  case Axis::TIME:
+    firstTickRel = timeToRel(firstTickAbs);
+    break;
+  case Axis::VALUE:
+    firstTickRel = valueToRel(firstTickAbs);
+    break;
+  }
+  Logger::log(Logger::Level::DEBUG, ME_SENDER_STR, __QFUNC__ + QString(" ftA %1 ftR %2 aS %3 rS %4").arg(firstTickAbs).arg(firstTickRel).arg(step).arg(relStep));
 
   return RulerDrawData(firstTickAbs, firstTickRel, step, relStep);
 }
index b175ae73dcb3ea2d4d0a2d59d859c0a2ecc6be6b..54fa098ec2a11363dcfff77f14185489e4008c42 100644 (file)
@@ -234,11 +234,16 @@ void SignalDrawer::drawLeadingSubticks(const RulerDrawData& rd, std::function<vo
                                       const double relMin)
 {
   const double subRelStep = subStep(rd.relStep);
-  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);
+  const double subAbsStep = subStep(rd.step);
+  double subRel = rd.firstTickRel;
+  double subAbs = rd.firstTickAbs;
+  int ctr = 0;
+
+  while (subRel >= relMin) {
+    drawFunc(subRel, subAbs, (ctr++ == 5) ? TickType::TICK : TickType::SUBTICK);
+    subRel -= subRelStep;
+    subAbs -= subAbsStep;
+  }
 }
 
 void SignalDrawer::drawScaleBySubticks(const RulerDrawData& rd, std::function<void (const double, const double, const TickType)> drawFunc, const double fromSubRel,
@@ -263,7 +268,8 @@ void SignalDrawer::drawScaleByTicks(const RulerDrawData& rd, std::function<void
 {
   double absVal = rd.firstTickAbs;
   for (double rel = rd.firstTickRel; rel <= relMax; rel += rd.relStep) {
-    drawFunc(rel, absVal, TickType::TICK);
+    Logger::log(Logger::Level::DEBUG, ME_SENDER_STR, __QFUNC__ + QString(" rel %1 abs %2").arg(rel).arg(absVal));
+    drawFunc(rel, absVal, TickType::BIGTICK);
 
     /* Draw subticks ticks */
     if (drawSubTicks)
@@ -356,8 +362,8 @@ void SignalDrawer::renderValueScaleText(QPainter* const p, int& maxCueWidth, con
 
   /* Do not draw labels that would overflow */
   QRect br = p->fontMetrics().boundingRect(text);
-  if (yPix - (br.height() / 2) < 0)
-    return;
+/*  if (yPix - (br.height() / 2) < 0)
+    return;*/
 
   if (maxCueWidth < br.width())
     maxCueWidth = br.width();
@@ -370,12 +376,15 @@ void SignalDrawer::renderTimeScaleTick(QPainter* const p, const double rel, cons
   const int xPix = relToXPix(rel);
 
   switch (tt) {
-    case TickType::TICK:
-      p->drawLine(xPix, m_gHeight + 2, xPix, m_gHeight + 6);
-      break;
-    case TickType::SUBTICK:
-      p->drawLine(xPix, m_gHeight + 2, xPix , m_gHeight + 4);
-      break;
+  case TickType::BIGTICK:
+    p->drawLine(xPix, m_gHeight + 2, xPix, m_gHeight + 8);
+    break;
+  case TickType::TICK:
+    p->drawLine(xPix, m_gHeight + 2, xPix, m_gHeight + 6);
+    break;
+  case TickType::SUBTICK:
+    p->drawLine(xPix, m_gHeight + 2, xPix , m_gHeight + 4);
+    break;
   }
 }
 
@@ -385,12 +394,15 @@ void SignalDrawer::renderValueScaleTick(QPainter* const p, const double rel, con
   const int yPix = relToYPix(rel);
 
   switch (tt) {
-    case TickType::TICK:
-      p->drawLine(m_leftGraphOffset - 6, yPix, m_leftGraphOffset - 1, yPix);
-      break;
-    case TickType::SUBTICK:
-      p->drawLine(m_leftGraphOffset - 4, yPix, m_leftGraphOffset - 1, yPix);
-      break;
+  case TickType::BIGTICK:
+    p->drawLine(m_leftGraphOffset - 8, yPix, m_leftGraphOffset - 1, yPix);
+    break;
+  case TickType::TICK:
+    p->drawLine(m_leftGraphOffset - 6, yPix, m_leftGraphOffset - 1, yPix);
+    break;
+  case TickType::SUBTICK:
+    p->drawLine(m_leftGraphOffset - 4, yPix, m_leftGraphOffset - 1, yPix);
+    break;
   }
 }
 
index e3de035d9c37e746b52cc44578bce35a92153c70..d72edaddc35b28c42ec7acd2369b036bc13777ef 100644 (file)
@@ -68,7 +68,7 @@ public:
   bool setDimensions(const int width, const int height);
 
 protected:
-  enum class TickType { TICK, SUBTICK };
+  enum class TickType { BIGTICK, TICK, SUBTICK };
 
   std::shared_ptr<SignalController> m_controller;
   QLocale m_locale;