GroupSlideDrawing.java

// Copyright (c) 2023 Tobias Briones. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause
// This file is part of https://github.com/tobiasbriones/blog

package engineer.mathsoftware.blog.slides.drawing;

import engineer.mathsoftware.blog.slides.Slide;
import engineer.mathsoftware.blog.slides.SlideSize;
import javafx.scene.Group;
import javafx.scene.layout.HBox;

public class GroupSlideDrawing implements SlideDrawing {
    private final HBox view;
    private SlideSize size;

    public GroupSlideDrawing(HBox view) {
        this.view = view;
        this.size = SlideSize.Predefined.HD.value();
    }

    @Override
    public void setup(SlideSize slideSize) {
        if (slideSize == null) {
            return;
        }
        size = slideSize;
    }

    @Override
    public Group draw(Slide slide) {
        var drawing = switch (slide) {
            case Slide.CodeShot codeShot -> drawCodeShot(codeShot);
            case Slide.CodeSnippet codeSnippet -> drawCodeSnippet(codeSnippet);
            case Slide.Screenshot screenshot -> drawScreenshot(screenshot);
        };

        view.getChildren().clear();
        view.getChildren().add(drawing);
        return drawing;
    }

    private Group drawCodeShot(Slide.CodeShot codeShot) {
        var drawing = new ScreenshotDrawing(size);
        var group = drawing.draw(codeShot);

        // Scale so it fits the ScrollPane better
        group.setScaleX(0.5);
        group.setScaleY(0.5);
        return group;
    }

    private Group drawCodeSnippet(Slide.CodeSnippet codeSnippet) {
        var drawing = new CodeSnippetDrawing(size);
        var group = drawing.draw(codeSnippet);

        // Scale so it fits the ScrollPane better
        group.setScaleX(0.5);
        group.setScaleY(0.5);
        return group;
    }

    private Group drawScreenshot(Slide.Screenshot screenshot) {
        var drawing = new ScreenshotDrawing(size);
        var group = drawing.draw(screenshot);

        // Scale so it fits the ScrollPane better
        group.setScaleX(0.5);
        group.setScaleY(0.5);
        return group;
    }
}