diff --git a/src/main/java/app/Application.java b/src/main/java/app/Application.java index 2f54456..a33b1bc 100644 --- a/src/main/java/app/Application.java +++ b/src/main/java/app/Application.java @@ -1,9 +1,14 @@ package app; import io.github.humbleui.jwm.*; +import io.github.humbleui.jwm.skija.EventFrameSkija; +import io.github.humbleui.skija.Surface; +import java.io.File; import java.util.function.Consumer; +import static app.Colors.APP_BACKGROUND_COLOR; + /** * Класс окна приложения */ @@ -21,6 +26,40 @@ public Application() { window = App.makeWindow(); // задаём обработчиком событий текущий объект window.setEventListener(this); + // задаём заголовок + window.setTitle("Java 2D"); + // задаём размер окна + window.setWindowSize(900, 900); + // задаём его положение + window.setWindowPosition(100, 100); + // задаём иконку + + switch (Platform.CURRENT) { + case WINDOWS -> window.setIcon(new File("src/main/resources/windows.ico")); + case MACOS -> window.setIcon(new File("src/main/resources/macos.icns")); + } + + // названия слоёв, которые будем перебирать + String[] layerNames = new String[]{ + "LayerGLSkija", "LayerRasterSkija" + }; + + // перебираем слои + for (String layerName : layerNames) { + String className = "io.github.humbleui.jwm.skija." + layerName; + try { + Layer layer = (Layer) Class.forName(className).getDeclaredConstructor().newInstance(); + window.setLayer(layer); + break; + } catch (Exception e) { + System.out.println("Ошибка создания слоя " + className); + } + } + + // если окну не присвоен ни один из слоёв + if (window._layer == null) + throw new RuntimeException("Нет доступных слоёв для создания"); + // делаем окно видимым window.setVisible(true); } @@ -38,6 +77,9 @@ public void accept(Event e) { App.terminate(); } else if (e instanceof EventWindowCloseRequest) { window.close(); + }else if (e instanceof EventFrameSkija ee) { + Surface s = ee.getSurface(); + s.getCanvas().clear(APP_BACKGROUND_COLOR); } } } diff --git a/src/main/java/app/Colors.java b/src/main/java/app/Colors.java new file mode 100644 index 0000000..e76d5e4 --- /dev/null +++ b/src/main/java/app/Colors.java @@ -0,0 +1,20 @@ +package app; + +import misc.Misc; + +/** + * Класс цветов + */ +public class Colors { + /** + * цвет фона + */ + public static final int APP_BACKGROUND_COLOR = Misc.getColor(255, 38, 70, 83); + + /** + * Запрещённый конструктор + */ + private Colors() { + throw new AssertionError("Вызов этого конструктора запрещён"); + } +} diff --git a/src/main/java/misc/Misc.java b/src/main/java/misc/Misc.java new file mode 100644 index 0000000..1ee3b3b --- /dev/null +++ b/src/main/java/misc/Misc.java @@ -0,0 +1,29 @@ +package misc; + +/** + * Вспомогательная библиотека + */ +public class Misc { + + /** + * Получить цвет по компонентам + * + * @param a прозрачность + * @param r красная компонента + * @param g зелёная компонента + * @param b синяя компонента + * @return целове число с цветом + */ + public static int getColor(int a, int r, int g, int b) { + return ((a * 256 + r) * 256 + g) * 256 + b; + } + + + /** + * Запрещаем вызов конструктора + */ + private Misc() { + throw new AssertionError("Вызов этого конструктора запрещён"); + } + +} diff --git a/src/main/resources/macos.icns b/src/main/resources/macos.icns new file mode 100644 index 0000000..207fc19 Binary files /dev/null and b/src/main/resources/macos.icns differ diff --git a/src/main/resources/windows.ico b/src/main/resources/windows.ico new file mode 100644 index 0000000..5d9171a Binary files /dev/null and b/src/main/resources/windows.ico differ