docs: private void drawSections() {
          sectionsCtx.clearRect(0, 0, size, size);
          double value               = gauge.getCurrentValue();
          boolean sectionTextVisible = gauge.isSectionTextVisible();
          boolean sectionIconVisible = gauge.getSectionIconsVisible();
          double offset              = START_ANGLE - 90;
          int listSize               = sections.size();
          double xy                  = size * 0.015;
          double wh                  = size - (size * 0.03);
          double sectionXY           = size * 0.1375;
          double sectionWH           = size - (size * 0.275);
          angleStep                  = ANGLE_RANGE / (gauge.getRange());
          double sinValue;
          double cosValue;
          sectionsCtx.setLineWidth(size * 0.27);
          sectionsCtx.setLineCap(StrokeLineCap.BUTT);
          for (int i = 0 ; i < listSize ; i++) {
              Section section = sections.get(i);
              final double SECTION_START_ANGLE;
              if (section.getStart() > maxValue || section.getStop() < minValue) continue;
  
              if (section.getStart() < minValue && section.getStop() < maxValue) {
                  SECTION_START_ANGLE = 0;
              } else {
                  SECTION_START_ANGLE = (section.getStart() - minValue) * angleStep;
              }
              final double SECTION_ANGLE_EXTEND;
              if (Double.compare(section.getStop(), maxValue) > 0) {
                  SECTION_ANGLE_EXTEND = (maxValue - section.getStart()) * angleStep;
              } else if (Double.compare(section.getStart(), minValue) < 0) {
                  SECTION_ANGLE_EXTEND = (section.getStop() - minValue) * angleStep;
              } else {
                  SECTION_ANGLE_EXTEND = (section.getStop() - section.getStart()) * angleStep;
              }
              sectionsCtx.save();
              if (highlightSections) {
                  sectionsCtx.setStroke(section.contains(value) ? section.getHighlightColor() : section.getColor());
              } else {
                  sectionsCtx.setStroke(section.getColor());
              }
              sectionsCtx.strokeArc(sectionXY, sectionXY, sectionWH, sectionWH, (offset - SECTION_START_ANGLE), -SECTION_ANGLE_EXTEND, ArcType.OPEN);
  
              // Draw Section Text
              if (sectionTextVisible) {
                  sinValue = -Math.sin(Math.toRadians(offset - 90 - SECTION_START_ANGLE - SECTION_ANGLE_EXTEND * 0.5));
                  cosValue = -Math.cos(Math.toRadians(offset - 90 - SECTION_START_ANGLE - SECTION_ANGLE_EXTEND * 0.5));
                  Point2D textPoint = new Point2D(size * 0.5 + size * 0.365 * sinValue, size * 0.5 + size * 0.365 * cosValue);
                  sectionsCtx.setFont(Fonts.robotoMedium(0.08 * size));
                  sectionsCtx.setTextAlign(TextAlignment.CENTER);
                  sectionsCtx.setTextBaseline(VPos.CENTER);
                  sectionsCtx.setFill(section.getTextColor());
                  sectionsCtx.fillText(section.getText(), textPoint.getX(), textPoint.getY(), 0.2 * size);
              } else if (size > 0 && sectionIconVisible) {
                  // Draw Section Icon
                  Image icon = section.getImage();
                  if (null != icon) {
                      sinValue = -Math.sin(Math.toRadians(offset - 90 - SECTION_START_ANGLE - SECTION_ANGLE_EXTEND * 0.5));
                      cosValue = -Math.cos(Math.toRadians(offset - 90 - SECTION_START_ANGLE - SECTION_ANGLE_EXTEND * 0.5));
                      Point2D iconPoint = new Point2D(size * 0.5 + size * 0.365 * sinValue, size * 0.5 + size * 0.365 * cosValue);
                      sectionsCtx.drawImage(icon, iconPoint.getX() - size * 0.06, iconPoint.getY() - size * 0.06, size * 0.12, size * 0.12);
                  }
              }
              sectionsCtx.restore();
          }
          // Draw white border around area
          sectionsCtx.setStroke(gauge.getBorderPaint());
          sectionsCtx.setLineWidth(size * 0.025);
          sectionsCtx.strokeArc(xy, xy, wh, wh, offset + 90, ANGLE_RANGE, ArcType.ROUND);
  
          if (gauge.getTickLabelsVisible()) {
              sectionsCtx.setFont(Fonts.robotoRegular(size * 0.1));
              sectionsCtx.setFill(gauge.getTickLabelColor());
              sectionsCtx.setTextBaseline(VPos.TOP);
              sectionsCtx.setTextAlign(TextAlignment.LEFT);
              sectionsCtx.fillText(String.format(locale, "%." + gauge.getTickLabelDecimals() + "f", gauge.getMinValue()), size * 0.15075377, size * 0.86180905, size * 0.3);
              sectionsCtx.setTextAlign(TextAlignment.RIGHT);
              sectionsCtx.fillText(String.format(locale, "%." + gauge.getTickLabelDecimals() + "f", gauge.getMaxValue()), size * 0.84924623, size * 0.86180905, size * 0.3);
          }
      }