Добавление BlendMode в обрезанный узел в JavaFX
Есть ли способ добавить BlendMode (или эффект Blend) к узлу, который был обрезан? Кажется, что если я пытаюсь добавить клип к узлу с уже установленным BlendMode, BlendMode переопределяется этим клипом и больше не работает должным образом. Некоторые примеры кода для воспроизведения проблемы:
package display.fx.demo;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.effect.BlendMode;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class BlendModeClipProblem extends Application {
public Rectangle blueRect = new Rectangle(0, 0, 30, 30);
public Rectangle redRect = new Rectangle(15, 15, 30, 30);
@Override
public void start(final Stage stage)
throws Exception {
final Pane pane = new Pane();
final Scene scene = new Scene(pane);
pane.getChildren().add(blueRect);
pane.getChildren().add(redRect);
blueRect.setFill(Color.BLUE);
redRect.setFill(Color.RED);
redRect.setBlendMode(BlendMode.ADD);
// Comment this next line to see blending
redRect.setClip(new Rectangle(15, 15, 20, 20));
stage.setScene(scene);
stage.show();
}
}
1 ответ
Решение
Попробуйте что-то вроде этого (используйте Cached Rectangle)
@Override
public void start(final Stage stage)
throws Exception {
final Pane pane = new Pane();
final Scene scene = new Scene(pane);
pane.getChildren().add(blueRect);
pane.getChildren().add(redRect);
blueRect.setFill(Color.BLUE);
redRect.setFill(Color.RED);
redRect.setBlendMode(BlendMode.ADD);
redRect.setCache(true);
redRect.setCacheHint(CacheHint.QUALITY);
redRect.setClip(new Rectangle(15, 15, 20, 20));
stage.setScene(scene);
stage.show();
}