fix: 全屏展示问题

This commit is contained in:
2025-11-25 14:46:14 +08:00
parent cdc02d6bbd
commit 5fc98d3d9b
2 changed files with 21 additions and 25 deletions
@@ -14,6 +14,10 @@ import javafx.scene.text.FontWeight;
* 绘图Canvas组件,用于渲染和交互所有可绘制对象 * 绘图Canvas组件,用于渲染和交互所有可绘制对象
*/ */
public class DrawingCanvas extends Pane { public class DrawingCanvas extends Pane {
// 页面标准尺寸(与全屏播放保持一致)
public static final double PAGE_WIDTH = 1024;
public static final double PAGE_HEIGHT = 768;
// 缩放点的枚举 // 缩放点的枚举
enum ResizePoint { enum ResizePoint {
TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT, NONE TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT, NONE
@@ -32,7 +36,7 @@ public class DrawingCanvas extends Pane {
public DrawingCanvas(PageContent pageContent) { public DrawingCanvas(PageContent pageContent) {
this.pageContent = pageContent; this.pageContent = pageContent;
this.canvas = new Canvas(); this.canvas = new Canvas(PAGE_WIDTH, PAGE_HEIGHT);
getChildren().add(canvas); getChildren().add(canvas);
@@ -41,18 +45,11 @@ public class DrawingCanvas extends Pane {
setOnMouseDragged(this::handleMouseDragged); setOnMouseDragged(this::handleMouseDragged);
setOnMouseReleased(this::handleMouseReleased); setOnMouseReleased(this::handleMouseReleased);
setStyle("-fx-border-color: #e0e0e0; -fx-border-width: 1;"); setStyle("-fx-border-color: #e0e0e0; -fx-border-width: 1;");
// 绑定Canvas大小到Pane大小 // 设置Pane的首选大小为页面尺寸,这样编辑界面显示时会按页面比例显示
widthProperty().addListener((obs, oldVal, newVal) -> { setPrefWidth(PAGE_WIDTH);
canvas.setWidth(newVal.doubleValue()); setPrefHeight(PAGE_HEIGHT);
redraw();
});
heightProperty().addListener((obs, oldVal, newVal) -> {
canvas.setHeight(newVal.doubleValue());
redraw();
});
// 初始绘制 // 初始绘制
redraw(); redraw();
@@ -38,10 +38,9 @@ public class PresentationWindow {
} }
private void initializeStage() { private void initializeStage() {
// 页面标准宽高比 (4:3) // 页面标准宽高比 (4:3) - 使用与编辑界面相同的尺寸
final double PAGE_WIDTH = 1024; final double PAGE_WIDTH = DrawingCanvas.PAGE_WIDTH; // 1024
final double PAGE_HEIGHT = 768; final double PAGE_HEIGHT = DrawingCanvas.PAGE_HEIGHT; // 768
final double ASPECT_RATIO = PAGE_WIDTH / PAGE_HEIGHT; // 4:3 = 1.333...
// 设置全屏,获取屏幕分辨率 // 设置全屏,获取屏幕分辨率
stage.setFullScreen(true); stage.setFullScreen(true);
@@ -209,8 +208,8 @@ public class PresentationWindow {
double canvasWidth = canvas.getWidth(); double canvasWidth = canvas.getWidth();
double canvasHeight = canvas.getHeight(); double canvasHeight = canvas.getHeight();
final double PAGE_WIDTH = 1024; final double PAGE_WIDTH = DrawingCanvas.PAGE_WIDTH;
final double PAGE_HEIGHT = 768; final double PAGE_HEIGHT = DrawingCanvas.PAGE_HEIGHT;
double scaleX = canvasWidth / PAGE_WIDTH; double scaleX = canvasWidth / PAGE_WIDTH;
double scaleY = canvasHeight / PAGE_HEIGHT; double scaleY = canvasHeight / PAGE_HEIGHT;
@@ -287,8 +286,8 @@ public class PresentationWindow {
double canvasWidth = canvas.getWidth(); double canvasWidth = canvas.getWidth();
double canvasHeight = canvas.getHeight(); double canvasHeight = canvas.getHeight();
final double PAGE_WIDTH = 1024; final double PAGE_WIDTH = DrawingCanvas.PAGE_WIDTH;
final double PAGE_HEIGHT = 768; final double PAGE_HEIGHT = DrawingCanvas.PAGE_HEIGHT;
double scaleX = canvasWidth / PAGE_WIDTH; double scaleX = canvasWidth / PAGE_WIDTH;
double scaleY = canvasHeight / PAGE_HEIGHT; double scaleY = canvasHeight / PAGE_HEIGHT;
@@ -377,8 +376,8 @@ public class PresentationWindow {
double canvasWidth = canvas.getWidth(); double canvasWidth = canvas.getWidth();
double canvasHeight = canvas.getHeight(); double canvasHeight = canvas.getHeight();
final double PAGE_WIDTH = 1024; final double PAGE_WIDTH = DrawingCanvas.PAGE_WIDTH;
final double PAGE_HEIGHT = 768; final double PAGE_HEIGHT = DrawingCanvas.PAGE_HEIGHT;
double scaleX = canvasWidth / PAGE_WIDTH; double scaleX = canvasWidth / PAGE_WIDTH;
double scaleY = canvasHeight / PAGE_HEIGHT; double scaleY = canvasHeight / PAGE_HEIGHT;
@@ -473,8 +472,8 @@ public class PresentationWindow {
double canvasWidth = canvas.getWidth(); double canvasWidth = canvas.getWidth();
double canvasHeight = canvas.getHeight(); double canvasHeight = canvas.getHeight();
final double PAGE_WIDTH = 1024; final double PAGE_WIDTH = DrawingCanvas.PAGE_WIDTH;
final double PAGE_HEIGHT = 768; final double PAGE_HEIGHT = DrawingCanvas.PAGE_HEIGHT;
double scaleX = canvasWidth / PAGE_WIDTH; double scaleX = canvasWidth / PAGE_WIDTH;
double scaleY = canvasHeight / PAGE_HEIGHT; double scaleY = canvasHeight / PAGE_HEIGHT;
@@ -525,8 +524,8 @@ public class PresentationWindow {
double canvasHeight = canvas.getHeight(); double canvasHeight = canvas.getHeight();
// 页面标准宽高比 // 页面标准宽高比
final double PAGE_WIDTH = 1024; final double PAGE_WIDTH = DrawingCanvas.PAGE_WIDTH;
final double PAGE_HEIGHT = 768; final double PAGE_HEIGHT = DrawingCanvas.PAGE_HEIGHT;
// 计算缩放因子,保持宽高比 // 计算缩放因子,保持宽高比
double scaleX = canvasWidth / PAGE_WIDTH; double scaleX = canvasWidth / PAGE_WIDTH;