Антон Головков @udattsk
Программист, предприниматель
Information
- Rating
- 4,114-th
- Location
- Томск, Томская обл., Россия
- Date of birth
- Registered
- Activity
Specialization
Software Developer, Fullstack Developer
Lead
C++
Linux
SQL
OOP
Git
Python
PHP
REST
MySQL
Bash
Жму руку, и завидую белой завистью. Вот что значит отсутствие дурной бабы рядом 😀
Это не ЧатГПТ писал? )
Все дело в размере устройства... Если она форматом с хорошую тумбочку, то все возможно...
Меня только смущает, что получится в итоге бабушкина радиола, стерео из одной АС так себе )
https://www.reddit.com/r/wui/comments/17izycu/experience_in_creating_a_ui_library_in_c/
Реддит...
Спасибо!
Я пока думаю следующее:
1. Для ряда задач нужно пиксель в пиксель (условный embedded)
2. Для десктопа нужна читаемость/попадаемость мышью, т.е. нужен некий scaling.
Возможно я что-то упускаю, как я сейчас думаю это сделать:
2.1. Простой случай: просто умножаем координату/размер на scale factor
2.2. Для сложных приложений возможно лучше отдельное UI представление с другой компоновкой для 4К. Т. е. если у нас стало в 4 раза больше экрана, а кнопок у нас как в условном автокаде, то имеет смсыл показать больше кнопок/инструментов.
Вообще интересно что вы думаете про подводные камни 4К, и какие есть пути решения...
Будет мелко, однозначно. Поддержка DPI и svg скоро, надеюсь, будет.
Пока есть workaround - сделать 4K темы. Контролы автоматически увеличатся под текст. Но это такое, да...
Еще надо декларативный язык для создания UI и редактор...
К сожалению, на msvc так не работает.
Существенно переписал раздел "Главный цикл приложения". Теперь #ifdef'ы не торчат и все красиво. Спасибо еще раз за критику.
По stringview нужно подумать, скорее всего если c++14 на XP соберется то сделаем.
Спасибо за замечания по constexpr 👍
По поводу платформенных кишков с
ifdef
вопрос уже решен - создана новая подсистемаframework.
Теперь минимальный hello_word выглядит как-то так:
MainFrame.cpp:
Сейчас еще сделаю селектор для конфигов и обновлю статью.
Вам, и всем кто указал на эту недоработку огромная благодарность 👍
10 Mb x64, 8 Mb win32
Я всех люблю 😁
Посмотрите лучше: https://lvgl.io/
wx отдыхает, как и wui 😅
Никаких проблем собрать самому 😊
А так это не вирус, просто ругается что скачан подозрительный неподписанный exe. Еще лет 10 назад, все такие были )
Все
#ifdef _WIN32
приложения (не библиотеки) имеются только в файле где находится точка входаint main(...)
Можно сделать два файла а-ля:
main_win.cpp, main_lin.cpp
и обойтись вообще без#ifdef _WIN32
платой за это, станет дублирование части (довольно хорошей) кода функцииmain()
Этот файл с функцией main, вообще такое место, куда обычно никто не лазит, там ничего нового - инициализация конфига, логгера (если есть в приложении), темы и локали.
Весь пользовательский код, пишется в классах реализации окон, и там никаких
#ifdef _WIN32
обычно нет. Ну если вам не нужно, например, работать с аудио / видео, так как системные API очень отличаются. Тут мы уже делаем как разcamera_lin.cpp / camera_win.cpp
потому что дублирования кода практически нет.Да какие донаты, это как в деда мороза верить )
Я вообще бы хотел платить за разработку новых / улучшение имеющихся контролов...
Например проводим конкурс на лучшую реализацию мнострочного редактора, победитель получает деньги, а все сообщество получает его контрол включенным в официальную поставку. Это как-то больше похоже на опен сорц здорового человека, как мне кажется...
Публикация пока первая, Реддитом займемся 🤝
Смотрите, размер окна и все координаты контролов отображается 1 в 1 на экране, так как задается в пикселях. Т.е. с этим проблем нет, приложение имеет одинаковую геометрию на Win (при масштабировании 100%) и на Lin. Одно но - при использовании одинаковых шрифтов.
Я на Линукс затащил шрифты с Винды и кайфую )) тот же Телеграм в 100 удобнее читать стало. При использовании например Open Sans вместо Segoe UI, размер 14 Segoe выглядит на Linux + Open Sans на все 18. Это пока решаем поставкой тем для лиункса с уменьшенными размерами шрифтов на 4.
Самым грамотным решением, я считаю, как сделано в lvgl - тащим шрифты с собой и получаем, хоть на bare metal, пиксель в пискель то что мы хотим.
99% библиотек, которые мне нравятся, используют snake_case. Это, так же, требования boost code style, которого и придерживаемся.
Приложения у нас традиционно используют camelCase. Чтобы показать где пользовательский код, в примерах используется camelCase, в отличии от snake_case кода библиотеки.
Эхх, были бы эти "личные договоренности" я бы донаты не собирал ))
Про дизайн из 90х я имел ввиду прежде всего дизайн интерфейсов. А дизайн wxWidgets/MFC/WTL строился вокруг системного API во время ещё до c++98...
Современный C++ гораздо гибче, приятнее и лаконичнее, так что писать прием сообщений на макросах нет никакой нужды. Так же как и запихивать интерфейсы контролов в прокрустово ложе устаревших API и концепций авторов, которых уже некоторых нет в живых...
Вы не зрите в корень... wxWidgets с дизайном из начала 90х, против максимально приятного modern c++ да ещё и без шаблонной жести...
Насчёт "поделия", то это сделано для коммерческого продукта который решает боевые задачи и зарабатывает деньги компании.
Что до одного файла - "по уму" надо сделать "стратегии" а ля Александреску, но прямой путь зачастую выгоднее и проще в плане онборднига. Это все детали реализации.
Я же хотел привлечь внимание к тому, что UI может быть более прямым чем все мы привыкли.
Ну вы не учли фатальный недостаток этих систем )
https://neolurk.org/wiki/Фатальный_недостаток
Я понял про какой вы слип. Он используется в цикле не дающем функции main завершиться. Там можно спать хоть по секунде, его задача просто узнать не закрыл ли юзер главное окно и дальше отдыхать...