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);
              }
          }
  
          ring = new Path();
          ring.setFillRule(FillRule.EVEN_ODD);
          ring.setStroke(null);
          ring.setFill(Gauge.DARK_COLOR);
          ring.setEffect(new InnerShadow(BlurType.TWO_PASS_BOX, Color.rgb(255, 255, 255, 0.35), 1, 0, 0, 1));
  
          sectionsCanvas = new Canvas(PREFERRED_WIDTH, PREFERRED_HEIGHT);
          sectionsCtx    = sectionsCanvas.getGraphicsContext2D();
  
          mask = new Circle();
          mask.setStroke(null);
          mask.setFill(gauge.getBackgroundPaint());
  
          knob = new Circle();
          knob.setStroke(null);
          knob.setFill(gauge.getKnobColor());
  
          angleStep = ANGLE_RANGE / (gauge.getRange());
          double targetAngle = 180 - START_ANGLE + (gauge.getValue() - gauge.getMinValue()) * angleStep;
  
          needleRotate = new Rotate(180 - START_ANGLE);
          needleRotate.setAngle(Helper.clamp(180 - START_ANGLE, 180 - START_ANGLE + ANGLE_RANGE, targetAngle));
  
          needle = new Path();
          needle.setFillRule(FillRule.EVEN_ODD);
          needle.setStroke(null);
          needle.getTransforms().setAll(needleRotate);
  
          valueText = new Text(formatNumber(gauge.getLocale(), gauge.getFormatString(), gauge.getDecimals(), gauge.getMinValue()) + gauge.getUnit());
          valueText.setMouseTransparent(true);
          valueText.setTextOrigin(VPos.CENTER);
          valueText.setFill(gauge.getValueColor());
          Helper.enableNode(valueText, gauge.isValueVisible());
  
          titleText = new Text(gauge.getTitle());
          titleText.setTextOrigin(VPos.CENTER);
          titleText.setFill(gauge.getTitleColor());
          Helper.enableNode(titleText, !gauge.getTitle().isEmpty());
  
          // Add all nodes
          pane = new Pane(ring, sectionsCanvas, mask, knob, needle, valueText, titleText);
  
          getChildren().setAll(pane);
      }