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);
              }
          }
  
          ticksAndSectionsCanvas = new Canvas(PREFERRED_WIDTH, PREFERRED_HEIGHT);
          ticksAndSections       = ticksAndSectionsCanvas.getGraphicsContext2D();
  
          ledCanvas = new Canvas();
          led       = ledCanvas.getGraphicsContext2D();
  
          thresholdTooltip = new Tooltip("Threshold\n(" + String.format(locale, formatString, gauge.getThreshold()) + ")");
          thresholdTooltip.setTextAlignment(TextAlignment.CENTER);
  
          threshold = new Path();
          Helper.enableNode(threshold, gauge.isThresholdVisible());
          Tooltip.install(threshold, thresholdTooltip);
  
          average = new Path();
          Helper.enableNode(average, gauge.isAverageVisible());
  
          markerPane = new Pane();
  
          needleRotate = new Rotate(180 - START_ANGLE);
          needleRotate.setAngle(needleRotate.getAngle() + (gauge.getValue() - oldValue - gauge.getMinValue()) * angleStep);
  
          needleMoveTo1       = new MoveTo();
          needleCubicCurveTo2 = new CubicCurveTo();
          needleCubicCurveTo3 = new CubicCurveTo();
          needleCubicCurveTo4 = new CubicCurveTo();
          needleLineTo5       = new LineTo();
          needleCubicCurveTo6 = new CubicCurveTo();
          needleClosePath7    = new ClosePath();
          needle              = new Path(needleMoveTo1, needleCubicCurveTo2, needleCubicCurveTo3, needleCubicCurveTo4, needleLineTo5, needleCubicCurveTo6, needleClosePath7);
          needle.setFillRule(FillRule.EVEN_ODD);
          needle.getTransforms().setAll(needleRotate);
  
          dropShadow = new DropShadow();
          dropShadow.setColor(Color.rgb(0, 0, 0, 0.25));
          dropShadow.setBlurType(BlurType.TWO_PASS_BOX);
          dropShadow.setRadius(0.015 * PREFERRED_WIDTH);
          dropShadow.setOffsetY(0.015 * PREFERRED_WIDTH);
  
          shadowGroup = new Group(needle);
          shadowGroup.setEffect(gauge.isShadowsEnabled() ? dropShadow : null);
  
          titleText = new Text(gauge.getTitle());
          titleText.setTextOrigin(VPos.CENTER);
          titleText.setFill(gauge.getTitleColor());
          Helper.enableNode(titleText, !gauge.getTitle().isEmpty());
  
          unitText = new Text(gauge.getUnit());
          unitText.setMouseTransparent(true);
          unitText.setTextOrigin(VPos.CENTER);
  
          lcd = new Rectangle(0.3 * PREFERRED_WIDTH, 0.1 * PREFERRED_HEIGHT);
          lcd.setArcWidth(0.0125 * PREFERRED_HEIGHT);
          lcd.setArcHeight(0.0125 * PREFERRED_HEIGHT);
          lcd.relocate((PREFERRED_WIDTH - lcd.getWidth()) * 0.5, 0.44 * PREFERRED_HEIGHT);
          Helper.enableNode(lcd, gauge.isLcdVisible() && gauge.isValueVisible());
  
          lcdText = new Label(String.format(locale, "%." + gauge.getDecimals() + "f", gauge.getValue()));
          lcdText.setAlignment(Pos.CENTER_RIGHT);
          lcdText.setVisible(gauge.isValueVisible());
  
          // Set initial value
          angleStep          = ANGLE_RANGE / gauge.getRange();
          double targetAngle = 180 - START_ANGLE + (gauge.getValue() - gauge.getMinValue()) * angleStep;
          targetAngle        = clamp(180 - START_ANGLE, 180 - START_ANGLE + ANGLE_RANGE, targetAngle);
          needleRotate.setAngle(targetAngle);
  
          lightEffect = new InnerShadow(BlurType.TWO_PASS_BOX, Color.rgb(255, 255, 255, 0.65), 2, 0.0, 0.0, 2.0);
  
          foreground = new SVGPath();
          foreground.setContent("M 26 26.5 C 26 20.2432 26.2432 20 32.5 20 L 277.5 20 C 283.7568 20 284 20.2432 284 26.5 L 284 143.5 C 284 149.7568 283.7568 150 277.5 150 L 32.5 150 C 26.2432 150 26 149.7568 26 143.5 L 26 26.5 ZM 0 6.7241 L 0 253.2758 C 0 260 0 260 6.75 260 L 303.25 260 C 310 260 310 260 310 253.2758 L 310 6.7241 C 310 0 310 0 303.25 0 L 6.75 0 C 0 0 0 0 0 6.7241 Z");
          foreground.setEffect(lightEffect);
  
          // Add all nodes
          pane = new Pane();
          pane.getChildren().setAll(ticksAndSectionsCanvas,
                                    markerPane,
                                    ledCanvas,
                                    unitText,
                                    lcd,
                                    lcdText,
                                    shadowGroup,
                                    foreground,
                                    titleText);
  
          getChildren().setAll(pane);
      }