GExt - поговорим про GUI

Версии к рассмотрению

  • 1.7.10

  • 1.8

  • 1.9

  • 1.10

  • 1.11

  • 1.13

  • 1.14

  • 1.15

  • 1.16

  • Другое(динозавров делать очень не хочу)


Результаты будут видны только после голосования.
178
4
42
?
Прочитал. Да, вероятно, мощная, но, кек, я не хочу делать лишь порт yogalayout на джаву, да ещё и на Майнкрафт.
Интересно реализовать это своими силами, тем более что с API GExt вышло довольно удачным - все текущие запросы были выполнены без костылей. И привязку к центру/краям родителя подвезу без особых проблем.
После этого, кажется, известные способы позиционирования закончатся.
 
Последнее редактирование:

GoogleTan

Картошка :3
1,354
43
310
Стоит ли свеч ввод partialTicks в GUI API?
Угу, конечно. Лично я (и мой заказчик) очень любим.
есть ли запросы на порт для версий 1.16, 1.17 и 1.18?
Запрос есть.
Может, там наконец сделали layout'ы, кто знает.
Я не помню, что, но там что-то точно интересное сделали на 1.18. Можешь спросить у Саинта - он смотрел.
 

tox1cozZ

aka Agravaine
8,454
598
2,890
я не хочу делать лишь порт yogalayout на джаву, да ещё и на Майнкрафт
У него уже есть биндинги для джавы под lwjgl3. В новых версиях майна без проблем можно подключить.
Ну и такое позиционирование намного удобнее, так как похоже на веб.
 
178
4
42
такое позиционирование
Я так и не понял, про какое позиционирование речь? Конкретно.
Абсолютное относительно родителя - есть.
Абсолютное относительно другого компонента в родителе - есть.
left/right/top/bottom/center alignment с отступом относительно родителя - будет в 1.5.

Что-то ещё?
 
178
4
42
Как центрировать див кнопку
Ну вот завезу в 1.5. На самом деле это к вопросу об обработке ресайза, её ещё тщательно не тестировал. Без поддержки ресайза так-то раз плюнуть ввести такой пересчёт, можно даже тупо на уровне фабрик. А вот с ресайзом уже чуть более интеллектуально.
 
178
4
42
Уф, надо уже релиз и перекатываться на 1.5 - очень уж хочется начать ломать API :devilish:
 

tox1cozZ

aka Agravaine
8,454
598
2,890
178
4
42
Существует. GList-vertical/horizontal.
Introduced in 1.5
Технически, это и есть relative X/Y координаты, поддержано.
Direction inheritance - пфф, поддержать не сложно.
Смотрю так и вижу, что различие - в терминологии, и вряд ли в чём-то ещё. Ах да, у них же есть лоадер HTML :)
 
178
4
42
Про накатить машинку для более удобного для отдельных лиц описания GUI - это я уже слышал. Хочется для начала доделать кор-фичи.
 
178
4
42
стабильно работать на любых размерах экрана
А для чего оно по вашему нужно?) Изначально-то это мой приватный инструмент. Странно, кстати, что в своё время я не смог нагуглить yogalayout - возможно, и правда напилил бы порт на 1.12.2 и на этом остановился. А сейчас там да - решить проблему с ресайзом, и будет стабильно работать во всех случаях.
Оптимизации пайплайна тоже пилятся - некоторые вещи уже готовы в соответствующей ветке(например, отключение рендера компонентов, находящихся за пределами контейнера. Банальный пример-список).
В 1.5 пойду подвозить свой биндинг текстур и fontrenderer. Ну и приколы вида провайдеров ресурсов - дабы расширить ассеты за пределы джарника.
 
178
4
42
aligment, паддинги всякие и тд.
Бахаем такой код:
Something like magic:
@Override
public void initLayout() {
    final int width = 300;
    final int height = 300;
    final GPanel<IGraphicsComponent> labels = Graphics.panel().size(width, height).placeAt(100, 100).build();

    GBackground background;
    labels.addComponent(background = Graphics.background().size(width, height).build());

    labels.addComponent(Graphics
                        .label()
                        .text("Top", Color.WHITE.getRGB())
                        .placeAt(0, 0)
                        .alignment(Alignment.XCENTER, Alignment.TOP)
                        .padding(50, 50)
                        .build());

    labels.addComponent(Graphics
                        .label()
                        .text("Bottom", Color.WHITE.getRGB())
                        .placeAt(0, 0)
                        .alignment(Alignment.XCENTER, Alignment.BOTTOM)
                        .padding(50, 50)
                        .build());

    labels.addComponent(Graphics
                        .label()
                        .text("Left", Color.WHITE.getRGB())
                        .placeAt(0, 0)
                        .alignment(Alignment.LEFT, Alignment.YCENTER)
                        .padding(50, 50)
                        .build());

    labels.addComponent(Graphics
                        .label()
                        .text("Right", Color.WHITE.getRGB())
                        .placeAt(0, 0)
                        .alignment(Alignment.RIGHT, Alignment.YCENTER)
                        .padding(50, 50)
                        .build());

    labels.addComponent(Graphics
                        .label()
                        .text("Center", Color.WHITE.getRGB())
                        .placeAt(0, 0)
                        .alignment(Alignment.XCENTER, Alignment.YCENTER)
                        .padding(50, 50)
                        .build());

    add(labels);

    GButton btn1;
    add(btn1 = Graphics.button()
        .label("Change horizontal size", Color.WHITE.getRGB())
        .action(btn -> {
            if (labels.getWidth() < 300) {
                labels.setWidth(300);
                background.setWidth(300);
            } else {
                labels.setWidth(50);
                background.setWidth(50);
            }
        })
        .size(100, 20)
        .placeAt(10, 10)
        .build());

    add(Graphics.button()
        .label("Change vertical size", Color.WHITE.getRGB())
        .action(btn -> {
            if (labels.getHeight() < 300) {
                labels.setHeight(300);
                background.setHeight(300);
            } else {
                labels.setHeight(50);
                background.setHeight(50);
            }
        })
        .size(100, 20)
        .bind(btn1)
        .placeAt(0, 30)
        .build());
}
Получаем:
 
Сверху