Search in sources :

Example 1 with Blend

use of javafx.scene.effect.Blend in project Board-Instrumentation-Framework by intel.

the class GaugeSkin method initGraphics.

private void initGraphics() {
    valueBlendBottomShadow = new DropShadow();
    valueBlendBottomShadow.setBlurType(BlurType.TWO_PASS_BOX);
    valueBlendBottomShadow.setColor(Color.rgb(255, 255, 255, 0.5));
    valueBlendBottomShadow.setOffsetX(0);
    valueBlendBottomShadow.setOffsetY(0.005 * PREFERRED_WIDTH);
    valueBlendBottomShadow.setRadius(0);
    valueBlendTopShadow = new InnerShadow();
    valueBlendTopShadow.setBlurType(BlurType.TWO_PASS_BOX);
    valueBlendTopShadow.setColor(Color.rgb(0, 0, 0, 0.7));
    valueBlendTopShadow.setOffsetX(0);
    valueBlendTopShadow.setOffsetY(0.005 * PREFERRED_WIDTH);
    valueBlendTopShadow.setRadius(0.005 * PREFERRED_WIDTH);
    valueBlend = new Blend();
    valueBlend.setMode(BlendMode.MULTIPLY);
    valueBlend.setBottomInput(valueBlendBottomShadow);
    valueBlend.setTopInput(valueBlendTopShadow);
    background = new Region();
    background.getStyleClass().setAll("background");
    ticksAndSectionsCanvas = new Canvas(PREFERRED_WIDTH, PREFERRED_HEIGHT);
    ticksAndSections = ticksAndSectionsCanvas.getGraphicsContext2D();
    histogram = new Path();
    histogram.setFillRule(FillRule.NON_ZERO);
    histogram.getStyleClass().add("histogram-fill");
    minMeasuredValue = new Region();
    minMeasuredValue.getStyleClass().setAll("min-measured-value");
    minMeasuredValueRotate = new Rotate(180 - getSkinnable().getStartAngle() + (getSkinnable().getValue() - getSkinnable().getMinValue()) * angleStep);
    minMeasuredValue.getTransforms().setAll(minMeasuredValueRotate);
    minMeasuredValue.setOpacity(getSkinnable().isMinMeasuredValueVisible() ? 1 : 0);
    minMeasuredValue.setManaged(getSkinnable().isMinMeasuredValueVisible());
    maxMeasuredValue = new Region();
    maxMeasuredValue.getStyleClass().setAll("max-measured-value");
    maxMeasuredValueRotate = new Rotate(180 - getSkinnable().getStartAngle() + (getSkinnable().getValue() - getSkinnable().getMinValue()) * angleStep);
    maxMeasuredValue.getTransforms().setAll(maxMeasuredValueRotate);
    maxMeasuredValue.setOpacity(getSkinnable().isMaxMeasuredValueVisible() ? 1 : 0);
    maxMeasuredValue.setManaged(getSkinnable().isMaxMeasuredValueVisible());
    threshold = new Region();
    threshold.getStyleClass().setAll("threshold");
    thresholdRotate = new Rotate(180 - getSkinnable().getStartAngle() - getSkinnable().getMinValue() * angleStep);
    threshold.getTransforms().setAll(thresholdRotate);
    threshold.setOpacity(getSkinnable().isThresholdVisible() ? 1 : 0);
    threshold.setManaged(getSkinnable().isThresholdVisible());
    thresholdExceeded = false;
    // Set initial value
    angleStep = getSkinnable().getAngleRange() / (getSkinnable().getMaxValue() - getSkinnable().getMinValue());
    double targetAngle = 180 - getSkinnable().getStartAngle() + (getSkinnable().getValue() - getSkinnable().getMinValue()) * angleStep;
    targetAngle = clamp(180 - getSkinnable().getStartAngle(), 180 - getSkinnable().getStartAngle() + getSkinnable().getAngleRange(), targetAngle);
    needle = new Region();
    needle.getStyleClass().setAll(Gauge.STYLE_CLASS_NEEDLE_STANDARD);
    needleRotate = new Rotate(180 - getSkinnable().getStartAngle());
    needleRotate.setAngle(targetAngle);
    needle.getTransforms().setAll(needleRotate);
    needleHighlight = new Region();
    needleHighlight.setMouseTransparent(true);
    needleHighlight.getStyleClass().setAll("needle-highlight");
    needleHighlight.getTransforms().setAll(needleRotate);
    knob = new Region();
    knob.setPickOnBounds(false);
    knob.getStyleClass().setAll("knob");
    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);
    // , knob);
    shadowGroup = new Group(needle, needleHighlight);
    shadowGroup.setEffect(getSkinnable().isDropShadowEnabled() ? dropShadow : null);
    titleText = new Text(getSkinnable().getTitle());
    titleText.setTextOrigin(VPos.CENTER);
    titleText.getStyleClass().setAll("title");
    unitText = new Text(getSkinnable().getUnit());
    unitText.setMouseTransparent(true);
    unitText.setTextOrigin(VPos.CENTER);
    unitText.getStyleClass().setAll("unit");
    valueText = new Text(String.format(Locale.US, "%." + getSkinnable().getDecimals() + "f", getSkinnable().getValue()));
    valueText.setMouseTransparent(true);
    valueText.setTextOrigin(VPos.CENTER);
    valueText.getStyleClass().setAll("value");
    valueText.setEffect(getSkinnable().isPlainValue() ? null : valueBlend);
    // Add all nodes
    pane = new Pane();
    pane.getChildren().setAll(background, histogram, ticksAndSectionsCanvas, minMeasuredValue, maxMeasuredValue, threshold, titleText, shadowGroup, knob, unitText, valueText);
    pane.getChildren().addAll(getSkinnable().getMarkers().keySet());
    getChildren().setAll(pane);
}
Also used : Path(javafx.scene.shape.Path) Group(javafx.scene.Group) Rotate(javafx.scene.transform.Rotate) InnerShadow(javafx.scene.effect.InnerShadow) Blend(javafx.scene.effect.Blend) Canvas(javafx.scene.canvas.Canvas) Region(javafx.scene.layout.Region) Text(javafx.scene.text.Text) Pane(javafx.scene.layout.Pane) DropShadow(javafx.scene.effect.DropShadow)

Example 2 with Blend

use of javafx.scene.effect.Blend in project Board-Instrumentation-Framework by intel.

the class RadialBargraphSkin method initGraphics.

private void initGraphics() {
    // "OpenSans"
    Font.loadFont(getClass().getResourceAsStream("/eu/hansolo/enzo/fonts/opensans-semibold.ttf"), (0.06 * PREFERRED_HEIGHT));
    barColor = getSkinnable().getBarColor();
    barGradient = new ConicalGradient(new Stop(0.0, Color.TRANSPARENT), new Stop(1.0, Color.TRANSPARENT));
    valueBlendBottomShadow = new DropShadow();
    valueBlendBottomShadow.setBlurType(BlurType.TWO_PASS_BOX);
    valueBlendBottomShadow.setColor(Color.rgb(255, 255, 255, 0.5));
    valueBlendBottomShadow.setOffsetX(0);
    valueBlendBottomShadow.setOffsetY(0.005 * PREFERRED_WIDTH);
    valueBlendBottomShadow.setRadius(0);
    valueBlendTopShadow = new InnerShadow();
    valueBlendTopShadow.setBlurType(BlurType.TWO_PASS_BOX);
    valueBlendTopShadow.setColor(Color.rgb(0, 0, 0, 0.7));
    valueBlendTopShadow.setOffsetX(0);
    valueBlendTopShadow.setOffsetY(0.005 * PREFERRED_WIDTH);
    valueBlendTopShadow.setRadius(0.005 * PREFERRED_WIDTH);
    blend = new Blend();
    blend.setMode(BlendMode.MULTIPLY);
    blend.setBottomInput(valueBlendBottomShadow);
    blend.setTopInput(valueBlendTopShadow);
    background = new Region();
    background.getStyleClass().setAll("background");
    ticksAndSectionsCanvas = new Canvas(PREFERRED_WIDTH, PREFERRED_HEIGHT);
    ticksAndSections = ticksAndSectionsCanvas.getGraphicsContext2D();
    minMeasuredValue = new Region();
    minMeasuredValue.getStyleClass().setAll("min-measured-value");
    minMeasuredValueRotate = new Rotate(180 - getSkinnable().getStartAngle());
    minMeasuredValue.getTransforms().setAll(minMeasuredValueRotate);
    minMeasuredValue.setOpacity(getSkinnable().isMinMeasuredValueVisible() ? 1 : 0);
    minMeasuredValue.setManaged(getSkinnable().isMinMeasuredValueVisible());
    maxMeasuredValue = new Region();
    maxMeasuredValue.getStyleClass().setAll("max-measured-value");
    maxMeasuredValueRotate = new Rotate(180 - getSkinnable().getStartAngle());
    maxMeasuredValue.getTransforms().setAll(maxMeasuredValueRotate);
    maxMeasuredValue.setOpacity(getSkinnable().isMaxMeasuredValueVisible() ? 1 : 0);
    maxMeasuredValue.setManaged(getSkinnable().isMaxMeasuredValueVisible());
    threshold = new Region();
    threshold.getStyleClass().setAll("threshold");
    thresholdRotate = new Rotate(180 - getSkinnable().getStartAngle());
    threshold.getTransforms().setAll(thresholdRotate);
    threshold.setOpacity(getSkinnable().isThresholdVisible() ? 1 : 0);
    threshold.setManaged(getSkinnable().isThresholdVisible());
    thresholdExceeded = false;
    bar = new Arc();
    bar.setType(ArcType.ROUND);
    bar.setCenterX(PREFERRED_WIDTH * 0.5);
    bar.setCenterY(PREFERRED_HEIGHT * 0.5);
    bar.setRadiusX(PREFERRED_WIDTH * 0.5 - 4);
    bar.setRadiusY(PREFERRED_HEIGHT * 0.5 - 4);
    bar.setStartAngle(getSkinnable().getStartAngle() - 90);
    bar.setLength(0);
    bar.setStrokeType(StrokeType.CENTERED);
    bar.setStroke(null);
    bar.setFill(new RadialGradient(0, 0, PREFERRED_WIDTH * 0.5, PREFERRED_HEIGHT * 0.5, PREFERRED_WIDTH * 0.45, false, CycleMethod.NO_CYCLE, new Stop(0.0, barColor), // -5 for on the barColorHue)
    new Stop(0.76, barColor.deriveColor(-5, 1, 1, 1)), new Stop(0.79, barColor), new Stop(0.97, barColor), // -5 for on the barColorHue)
    new Stop(1.0, barColor.deriveColor(-5, 1, 1, 1))));
    knob = new Region();
    knob.setPickOnBounds(false);
    knob.getStyleClass().setAll("knob");
    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);
    title = new Text(getSkinnable().getTitle());
    title.setMouseTransparent(true);
    title.setTextOrigin(VPos.CENTER);
    title.getStyleClass().setAll("title");
    title.setEffect(getSkinnable().isPlainValue() ? null : blend);
    unit = new Text(getSkinnable().getUnit());
    unit.setMouseTransparent(true);
    unit.setTextOrigin(VPos.CENTER);
    unit.getStyleClass().setAll("unit");
    unit.setEffect(getSkinnable().isPlainValue() ? null : blend);
    value = new Text();
    value.setText(String.format(Locale.US, "%." + getSkinnable().getDecimals() + "f", getSkinnable().getValue()));
    value.setMouseTransparent(true);
    value.setTextOrigin(VPos.CENTER);
    value.getStyleClass().setAll("value");
    value.setEffect(getSkinnable().isPlainValue() ? null : blend);
    // Set initial value
    double range = (getSkinnable().getMaxValue() - getSkinnable().getMinValue());
    double angleRange = getSkinnable().getAngleRange();
    angleStep = angleRange / range;
    double targetAngle = getSkinnable().getValue() * angleStep;
    angle.set(targetAngle);
    double currentValue = angle.get() / angleStep;
    value.setText(String.format(Locale.US, "%." + getSkinnable().getDecimals() + "f", currentValue));
    value.setTranslateX((size - value.getLayoutBounds().getWidth()) * 0.5);
    bar.setLength(-currentValue * angleStep);
    // Add all nodes
    pane = new Pane();
    pane.getChildren().setAll(background, bar, ticksAndSectionsCanvas, minMeasuredValue, maxMeasuredValue, threshold, knob, title, unit, value);
    pane.getChildren().addAll(getSkinnable().getMarkers().keySet());
    getChildren().setAll(pane);
}
Also used : ConicalGradient(eu.hansolo.enzo.common.ConicalGradient) Rotate(javafx.scene.transform.Rotate) Stop(javafx.scene.paint.Stop) InnerShadow(javafx.scene.effect.InnerShadow) Blend(javafx.scene.effect.Blend) Canvas(javafx.scene.canvas.Canvas) RadialGradient(javafx.scene.paint.RadialGradient) Text(javafx.scene.text.Text) Pane(javafx.scene.layout.Pane) DropShadow(javafx.scene.effect.DropShadow) Arc(javafx.scene.shape.Arc) Region(javafx.scene.layout.Region)

Aggregations

Canvas (javafx.scene.canvas.Canvas)2 Blend (javafx.scene.effect.Blend)2 DropShadow (javafx.scene.effect.DropShadow)2 InnerShadow (javafx.scene.effect.InnerShadow)2 Pane (javafx.scene.layout.Pane)2 Region (javafx.scene.layout.Region)2 Text (javafx.scene.text.Text)2 Rotate (javafx.scene.transform.Rotate)2 ConicalGradient (eu.hansolo.enzo.common.ConicalGradient)1 Group (javafx.scene.Group)1 RadialGradient (javafx.scene.paint.RadialGradient)1 Stop (javafx.scene.paint.Stop)1 Arc (javafx.scene.shape.Arc)1 Path (javafx.scene.shape.Path)1