docs: private void drawTickMarks(final GraphicsContext CTX) {
          tickMarkCanvas.setCache(false);
          CTX.clearRect(0, 0, tickMarkCanvas.getWidth(), tickMarkCanvas.getHeight());
          CTX.setFill(gauge.getMajorTickMarkColor());
  
          List<Section> tickMarkSections         = gauge.getTickMarkSections();
          List<Section> tickLabelSections        = gauge.getTickLabelSections();
          Color         majorTickMarkColor       = gauge.getTickMarkColor();
          Color         tickLabelColor           = gauge.getTickLabelColor();
          boolean       smallRange               = Double.compare(gauge.getRange(), 10.0) <= 0;
          double        minValue                 = gauge.getMinValue();
          double        maxValue                 = gauge.getMaxValue();
          double        tmpStepSize              = smallRange ? stepSize / 10 : stepSize;
          Font          tickLabelFont            = Fonts.robotoRegular(0.15 * (Orientation.VERTICAL == orientation ? width : height));
          boolean       tickMarkSectionsVisible  = gauge.getTickMarkSectionsVisible();
          boolean       tickLabelSectionsVisible = gauge.getTickLabelSectionsVisible();
          double        offsetX                  = 0.18345865 * width;
          double        offsetY                  = 0.1 * height;
          double        innerPointX              = 0;
          double        innerPointY              = 0;
          double        outerPointX              = 0.07 * width;
          double        outerPointY              = 0.08 * height;
          double        textPointX               = 0.55 * tickMarkCanvas.getWidth();
          double        textPointY               = 0.7 * tickMarkCanvas.getHeight();
          BigDecimal    minorTickSpaceBD         = BigDecimal.valueOf(gauge.getMinorTickSpace());
          BigDecimal    majorTickSpaceBD         = BigDecimal.valueOf(gauge.getMajorTickSpace());
          BigDecimal    counterBD                = BigDecimal.valueOf(gauge.getMinValue());
          double        counter                  = minValue;
          double        range                    = gauge.getRange();
  
          for (double i = 0 ; Double.compare(i, range) <= 0 ; i++) {
              if (Orientation.VERTICAL == orientation) {
                  innerPointY = counter * tmpStepSize + offsetY;
                  outerPointY = innerPointY;
                  textPointY  = innerPointY;
              } else {
                  innerPointX = counter * tmpStepSize + offsetX;
                  outerPointX = innerPointX;
                  textPointX  = innerPointX;
              }
  
              // Set the general tickmark color
              CTX.setStroke(gauge.getTickMarkColor());
              if (Double.compare(counterBD.remainder(majorTickSpaceBD).doubleValue(), 0.0) == 0) {
                  // Draw major tick mark
                  if (gauge.getMajorTickMarksVisible()) {
                      CTX.setFill(tickMarkSectionsVisible ? Helper.getColorOfSection(tickMarkSections, counter, majorTickMarkColor) : majorTickMarkColor);
                      CTX.setStroke(tickMarkSectionsVisible ? Helper.getColorOfSection(tickMarkSections, counter, majorTickMarkColor) : majorTickMarkColor);
                      CTX.setLineWidth(1);
                      CTX.strokeLine(innerPointX, innerPointY, outerPointX, outerPointY);
                  }
                  // Draw tick label text
                  if (gauge.getTickLabelsVisible()) {
                      CTX.save();
                      CTX.translate(textPointX, textPointY);
                      CTX.setFont(tickLabelFont);
                      CTX.setTextAlign(TextAlignment.CENTER);
                      CTX.setTextBaseline(VPos.CENTER);
                      CTX.setFill(tickLabelSectionsVisible ? Helper.getColorOfSection(tickLabelSections, counter, tickLabelColor) : tickLabelColor);
                      if (Orientation.VERTICAL == orientation) {
                          CTX.fillText(Integer.toString((int) (maxValue - counter)), 0, 0);
                      } else {
                          CTX.fillText(Integer.toString((int) counter), 0, 0);
                      }
                      CTX.restore();
                  }
              }
              counterBD = counterBD.add(minorTickSpaceBD);
              counter   = counterBD.doubleValue();
              if (counter > maxValue) break;
          }
  
          tickMarkCanvas.setCache(true);
          tickMarkCanvas.setCacheHint(CacheHint.QUALITY);
      }