Entferne wirkungslosen H/V-Workaround in resetToFitView

Bei aktivem fitToWidth/fitToHeight hat der ScrollPane keinen scrollbaren
Bereich – setHvalue(0.5)/setVvalue(0.5) sind in diesem Zustand wirkungslos.
Die Wiederherstellung der Property-Bindungen fitWidth/fitHeight an viewStack
versetzt den ImageView in exakt denselben Zustand wie nach der initialen
Konstruktor-Initialisierung. Der StackPane zentriert dann automatisch
über die bereits gesetzte Pos.CENTER-Ausrichtung.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-05 14:51:08 +02:00
parent b4f2bf60c6
commit 265b807263
@@ -708,11 +708,13 @@ public final class PdfPreviewPane {
* Setzt Zoom, Akkumulator und Pan-Zustand zurück und reaktiviert den Fit-to-View-Modus. * Setzt Zoom, Akkumulator und Pan-Zustand zurück und reaktiviert den Fit-to-View-Modus.
* Wird beim Laden einer neuen Datei und beim Leeren der Komponente aufgerufen. * Wird beim Laden einer neuen Datei und beim Leeren der Komponente aufgerufen.
* *
* <p>Nach dem Reaktivieren von {@code fitToWidth} werden H- und V-Scroll-Werte * <p>Die Property-Bindungen von {@code fitWidth}/{@code fitHeight} an
* explizit auf 0.5 gesetzt (nach einem {@code layout()}-Aufruf, damit die neuen * {@code viewStack.widthProperty()}/{@code viewStack.heightProperty()} werden
* Inhaltsgrenzen bekannt sind). Ohne diesen Schritt trägt der ScrollPane ggf. noch * wiederhergestellt damit ist der ImageView-Zustand identisch zum initialen
* die H/V-Werte aus dem vorherigen Zoom-/Pan-Zustand und zeigt die PDF nach dem * Zustand aus dem Konstruktor. Der {@link StackPane} zentriert den ImageView
* Reset nicht zentriert an. * dann automatisch über die zuvor gesetzte {@code Pos.CENTER}-Ausrichtung;
* eine explizite H/V-Wert-Manipulation am ScrollPane ist im fit-Modus
* wirkungslos und daher nicht nötig.
*/ */
private void resetToFitView() { private void resetToFitView() {
zoomLevel = 1.0; zoomLevel = 1.0;
@@ -727,16 +729,6 @@ public final class PdfPreviewPane {
imageView.fitHeightProperty().bind(viewStack.heightProperty()); imageView.fitHeightProperty().bind(viewStack.heightProperty());
scrollPane.setFitToWidth(true); scrollPane.setFitToWidth(true);
scrollPane.setFitToHeight(true); scrollPane.setFitToHeight(true);
// Zentrierung sicherstellen: layout() im ersten runLater abschließen,
// H/V im zweiten runLater setzen garantiert, dass das Layout vollständig
// abgeschlossen ist, bevor die Scroll-Werte gesetzt werden
Platform.runLater(() -> {
scrollPane.layout();
Platform.runLater(() -> {
scrollPane.setHvalue(0.5);
scrollPane.setVvalue(0.5);
});
});
} }
} }