docs: @Override protected void initGraphics() {
          // Set initial size
          if (Double.compare(clock.getPrefWidth(), 0.0) <= 0 || Double.compare(clock.getPrefHeight(), 0.0) <= 0 ||
              Double.compare(clock.getWidth(), 0.0) <= 0 || Double.compare(clock.getHeight(), 0.0) <= 0) {
              if (clock.getPrefWidth() > 0 && clock.getPrefHeight() > 0) {
                  clock.setPrefSize(clock.getPrefWidth(), clock.getPrefHeight());
              } else {
                  clock.setPrefSize(PREFERRED_WIDTH, PREFERRED_HEIGHT);
              }
          }
  
          rotationRadius = PREFERRED_WIDTH * 1.25;
  
          clip = new Circle(PREFERRED_WIDTH * 0.5, PREFERRED_HEIGHT * 0.5, PREFERRED_WIDTH *0.5);
  
          tickCanvas = new Canvas(PREFERRED_WIDTH, PREFERRED_HEIGHT);
          tickCanvas.setClip(clip);
          tickCtx = tickCanvas.getGraphicsContext2D();
  
          needle = new Line(PREFERRED_WIDTH * 0.5 , 0, PREFERRED_WIDTH * 0.5, PREFERRED_HEIGHT);
          needle.setFill(null);
          needle.setStrokeLineCap(StrokeLineCap.BUTT);
          needle.setStroke(clock.getHourColor());
  
          dropShadow = new DropShadow();
          dropShadow = new DropShadow(BlurType.TWO_PASS_BOX, Color.rgb(0, 0, 0, 0.25), 0.015 * PREFERRED_WIDTH, 0.0, 0.0, 0.015 * PREFERRED_WIDTH);
  
          shadowGroup = new Group(needle);
          shadowGroup.setEffect(clock.getShadowsEnabled() ? dropShadow : null);
  
          innerShadow = new InnerShadow(BlurType.TWO_PASS_BOX, Color.rgb(0, 0, 0, 0.65), 4, 0.0, 0, 1);
  
          pane = new Pane(tickCanvas, shadowGroup);
          pane.setBorder(new Border(new BorderStroke(clock.getBorderPaint(), BorderStrokeStyle.SOLID, new CornerRadii(1024), new BorderWidths(clock.getBorderWidth()))));
          pane.setBackground(new Background(new BackgroundFill(clock.getBackgroundPaint(), new CornerRadii(1024), Insets.EMPTY)));
          pane.setEffect(innerShadow);
  
          getChildren().setAll(pane);
      }