Open Vasniktel opened 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();
}
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.
Any news here? Kubuntu screenshot:
Some controls are renderered correctly, anyway. It could be a clue :)
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: 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: The most interesting thing is that when I change the theme to dark and back again, everything becomes great again. Can you help me to cope with that?