private void resize() {
        size = getSkinnable().getWidth() < getSkinnable().getHeight() ? getSkinnable().getWidth() : getSkinnable().getHeight();
        centerX = size * 0.5;
        centerY = size * 0.5;
        
        innerShadow.setRadius(size * 0.1);
        
        background.setCenterX(centerX);
        background.setCenterY(centerY);
        background.setRadius(size * 0.5);

        ticksCanvas.setWidth(size);
        ticksCanvas.setHeight(size);
        ticks.clearRect(0, 0, size, size);        
        drawTickMarks(ticks);
        ticksCanvas.setCache(true);
        ticksCanvas.setCacheHint(CacheHint.QUALITY);

        valueIndicator.setPrefSize(size * 0.025, size * 0.096);
        valueIndicator.relocate((size - valueIndicator.getPrefWidth()) * 0.5, size * 0.039);
        valueIndicatorRotate.setPivotX(valueIndicator.getPrefWidth() * 0.5);
        valueIndicatorRotate.setPivotY(size * 0.461);
        
        targetIndicator.setPrefSize(0.025 * size, 0.13 * size);
        targetIndicator.relocate((size - targetIndicator.getPrefWidth()) * 0.5, size * 0.039);
        targetIndicatorRotate.setPivotX(targetIndicator.getPrefWidth() * 0.5);
        targetIndicatorRotate.setPivotY(size * 0.461);
        targetIndicatorRotate.setAngle(getSkinnable().getTarget() * angleStep - 180 - getSkinnable().getStartAngle() - getSkinnable().getMinValue() * angleStep);

        infoText.setText(getSkinnable().getInfoText().toUpperCase());
        value.setText(String.format(Locale.US, "%." + getSkinnable().getDecimals() + "f", (valueIndicatorRotate.getAngle() + getSkinnable().getStartAngle() - 180) / angleStep));
                
        resizeText();
    }