buggins / dlangui

Cross Platform GUI for D programming language
Boost Software License 1.0
815 stars 121 forks source link

Some issues with X11 configuration #560

Open Vasniktel opened 6 years ago

Vasniktel commented 6 years ago

Hello. I have tried to execute some sample code taken from your habrahabr post. I have got a pretty bad results on my Linux Mint 18.3 KDE: screenshot_20180317_123921 The whole interface looks extremely huge so I decided to experiment a little bit with X11 configuration option using dub run dlangui:example1 --override-config=dlangui/x11 As I've expected the result was pretty good, everything was made in a proper way. But then I've tried to make such a thing with the previous code and this is what i get: screenshot_20180317_123717 The most interesting thing is that when I change the theme to dark and back again, everything becomes great again. screenshot_20180317_123728 screenshot_20180317_123742 Can you help me to cope with that?

Vasniktel commented 6 years ago

Here is the code i was talking about:

module app;
// импортируем библиотеку dlangui
import dlangui;

// поместить объявление main или WinMain в этот файл
mixin APP_ENTRY_POINT;
// точка входа в приложение DlangUI - вызывается из main после инициализации библиотеки
extern (C) int UIAppMain(string[] args) {
    // создаем окно
    Window window = Platform.instance.createWindow("DlangUI example - HelloWorld", null);

    // основной виджет окна - располагаем все, что внутри него по вертикали
    auto mainWidget = new VerticalLayout();

    mainWidget.addChild(new TextWidget(null, "пример HorizontalLayout:"d)); // заголовок

    auto hlayout = new HorizontalLayout(); // расположить элементы по вертикали
    hlayout.addChild(new Button("btn1", "Кнопка 1"d));
    hlayout.addChild(new Button("btn2", "Кнопка 2"d));
    hlayout.addChild(new Button("btn3", "Кнопка 3"d));
    hlayout.addChild(new CheckBox("btn4", "Пример CheckBox"d));
    mainWidget.addChild(hlayout);

    mainWidget.addChild(new TextWidget(null, "пример VerticalLayout:"d)); // заголовок

    mainWidget.addChild(new TextWidget(null, "Выбор темы интерфейса:"d));

    auto vlayout = new VerticalLayout();
    // addChild() возвращает добавленный вижет, и большинство методов установки свойств виджета возвращают сам виджет,
    // поэтому можно вызывать несколько методов по цепочке.
    vlayout.addChild(new RadioButton("radio1", "Обычная"d)).checked(true).click = delegate(Widget src) {
        platform.instance.uiTheme = "theme_default";
        return true;
    };
    vlayout.addChild(new RadioButton("radio2", "Тёмная"d)).click = delegate(Widget src) {
        platform.instance.uiTheme = "theme_dark";
        return true;
    };
    mainWidget.addChild(vlayout);

    mainWidget.addChild(new TextWidget(null, "пример TableLayout - форма с 2 столбцами:"d)); // заголовок

    auto tlayout = new TableLayout(); // таблица / форма
    tlayout.colCount = 2;
    tlayout.addChild(new TextWidget(null, "Строка ввода"d));
    tlayout.addChild(new EditLine("edit1", "Какой-то текст для редактирования"d));
    tlayout.addChild(new TextWidget(null, "ComboBox"d));
    tlayout.addChild((new ComboBox("combo1", ["Значение 1"d, "Значение 2"d, "Значение 3"d])).selectedItemIndex(0));
    tlayout.addChild(new TextWidget(null, "Группа RadioButton"d));
    // внутри Layout может быть другой Layout:
    auto radiogroup = new VerticalLayout();
    radiogroup.addChild(new RadioButton("rb1", "Значение 1"d));
    radiogroup.addChild(new RadioButton("rb2", "Значение 2"d));
    radiogroup.addChild(new RadioButton("rb3", "Значение 3"d));
    tlayout.addChild(radiogroup);
    tlayout.addChild(new TextWidget(null, "Кнопка ImageTextButton"d));
    tlayout.addChild(new ImageTextButton("btn_ok", "dialog-ok-apply", "Текст кнопки"d));

    mainWidget.addChild(tlayout);

    // создаем кнопку и устанавливаем ее как основной виджет окна
    window.mainWidget = mainWidget;
    // показываем окно
    window.show();
    // цикл сообщений
    return Platform.instance.enterMessageLoop();
}
Disco1267 commented 5 years ago

I can confirm the above. This affects also dlangide, building it this way:

dub build dlangide --force --override-config=dlangui/x11

resulted in a usable layout.

trikko commented 5 years ago

Any news here? Kubuntu screenshot: image

Some controls are renderered correctly, anyway. It could be a clue :)