docs: private void initGraphics() {
          // Set initial size
          if (Double.compare(gauge.getPrefWidth(), 0.0) <= 0 || Double.compare(gauge.getPrefHeight(), 0.0) <= 0 ||
              Double.compare(gauge.getWidth(), 0.0) <= 0 || Double.compare(gauge.getHeight(), 0.0) <= 0) {
              if (gauge.getPrefWidth() > 0 && gauge.getPrefHeight() > 0) {
                  gauge.setPrefSize(gauge.getPrefWidth(), gauge.getPrefHeight());
              } else {
                  gauge.setPrefSize(PREFERRED_WIDTH, PREFERRED_HEIGHT);
              }
          }
  
          barBackground = new Arc(PREFERRED_WIDTH * 0.5, PREFERRED_HEIGHT * 0.696, PREFERRED_WIDTH * 0.275, PREFERRED_WIDTH * 0.275, angleRange * 0.5 + 90, -angleRange);
          barBackground.setType(ArcType.OPEN);
          barBackground.setStroke(gauge.getBarColor());
          barBackground.setStrokeWidth(PREFERRED_WIDTH * 0.02819549 * 2);
          barBackground.setStrokeLineCap(StrokeLineCap.BUTT);
          barBackground.setFill(null);
  
          thresholdBar = new Arc(PREFERRED_WIDTH * 0.5, PREFERRED_HEIGHT * 0.696, PREFERRED_WIDTH * 0.275, PREFERRED_WIDTH * 0.275, -angleRange * 0.5 + 90, 0);
          thresholdBar.setType(ArcType.OPEN);
          thresholdBar.setStroke(gauge.getThresholdColor());
          thresholdBar.setStrokeWidth(PREFERRED_WIDTH * 0.02819549 * 2);
          thresholdBar.setStrokeLineCap(StrokeLineCap.BUTT);
          thresholdBar.setFill(null);
          enableNode(thresholdBar, !gauge.getSectionsVisible());
  
          sectionPane = new Pane();
          enableNode(sectionPane, gauge.getSectionsVisible());
  
          if (sectionsVisible) { drawSections(); }
  
          alertIcon = new Path();
          alertIcon.setFillRule(FillRule.EVEN_ODD);
          alertIcon.setFill(Color.YELLOW);
          alertIcon.setStroke(null);
          enableNode(alertIcon, gauge.isAlert());
          alertTooltip = new Tooltip(gauge.getAlertMessage());
          Tooltip.install(alertIcon, alertTooltip);
  
          needleRotate     = new Rotate((gauge.getValue() - oldValue - minValue) * angleStep);
          needleRectRotate = new Rotate((gauge.getValue() - oldValue - minValue) * angleStep);
  
          needleRect = new Rectangle();
          needleRect.setFill(gauge.getBackgroundPaint());
          needleRect.getTransforms().setAll(needleRectRotate);
  
          needle = new Path();
          needle.setFillRule(FillRule.EVEN_ODD);
          needle.getTransforms().setAll(needleRotate);
          needle.setFill(gauge.getNeedleColor());
          needle.setStrokeWidth(0);
          needle.setStroke(Color.TRANSPARENT);
  
          titleText = new Text(gauge.getTitle());
          titleText.setFill(gauge.getTitleColor());
          enableNode(titleText, !gauge.getTitle().isEmpty());
  
          valueText = new Text(String.format(locale, formatString, gauge.getCurrentValue()));
          valueText.setFill(gauge.getValueColor());
          enableNode(valueText, gauge.isValueVisible() && !gauge.isAlert());
  
          unitText = new Text(gauge.getUnit());
          unitText.setFill(gauge.getUnitColor());
          enableNode(unitText, gauge.isValueVisible() && !gauge.isAlert());
  
          minValueText = new Text(String.format(locale, "%." + gauge.getTickLabelDecimals() + "f", gauge.getMinValue()));
          minValueText.setFill(gauge.getTitleColor());
  
          maxValueText = new Text(String.format(locale, "%." + gauge.getTickLabelDecimals() + "f", gauge.getMaxValue()));
          maxValueText.setFill(gauge.getTitleColor());
  
          thresholdRect = new Rectangle();
          thresholdRect.setFill(sectionsVisible ? GRAY : gauge.getThresholdColor());
          enableNode(thresholdRect, gauge.isThresholdVisible());
  
          thresholdText = new Text(String.format(locale, "%." + gauge.getTickLabelDecimals() + "f", gauge.getThreshold()));
          thresholdText.setFill(sectionsVisible ? Color.TRANSPARENT : gauge.getBackgroundPaint());
          enableNode(thresholdText, gauge.isThresholdVisible());
  
          pane = new Pane(barBackground, thresholdBar, sectionPane, alertIcon, needleRect, needle, titleText, valueText, unitText, minValueText, maxValueText, thresholdRect, thresholdText);
          pane.setBorder(new Border(new BorderStroke(gauge.getBorderPaint(), BorderStrokeStyle.SOLID, new CornerRadii(PREFERRED_WIDTH * 0.025), new BorderWidths(gauge.getBorderWidth()))));
          pane.setBackground(new Background(new BackgroundFill(gauge.getBackgroundPaint(), new CornerRadii(PREFERRED_WIDTH * 0.025), Insets.EMPTY)));
  
          getChildren().setAll(pane);
      }