понедельник, 28 ноября 2022 г.

[prog.c++] Погрузился в изучение Dear ImGui и вот что любопытно...

Возникла необходимость поверхностно освоить необычный (для меня лично) оконный фреймворк Dear ImGUI.

Очень прикольная штука.

Я в свое время имел опыт работы с GUI. Причем начиная от MS-DOS, в котором мы сами рисовали подобие Windows-овских окошек/менюшек/кнопочек/пр. в графическом режиме посредством Borland-овской BGI. И заканчивая работой с Qt и MFC, по дороге пройдя через стадию прямой работы с API MS-Windows и IBM OS/2 Presentation Manager, и даже делая какие-то свои библиотеки-обертки вокруг этих самых API. Кроме Qt и MFC доводилось знакомиться и с wxWidgets (тогда еще wxWindows), и с FOX Toolkit, и с FLTK (и даже со Swing-ом в Java). В общем, какое-то представление о том, как делается "традиционный" GUI, у меня когда-то было.

Но вот Dear ImGui, который реализует идею Immediate Mode GUI (акронимом чего и является IMGUI), -- это какой-то совсем другой зверь, диковинный и непривычный.

Не могу сказать, что проникся этой идеологией. Возможно, нужно просто больше пожить с Dear ImGui. Возможно, сказывается то, что я не очень представляю себе как вся внутренняя кухня Dear ImGui ложится на систему сообщений того же Windows (а вот погружаться в эти дебри сейчас совсем не хочется). Но не могу не признать, что нечто эдакое в этом есть.

Однако, на написание поста толкнуло совсем другое впечатление.

Вроде как Dear ImGui вообще рисует все само: менюшки, окошки с заголовками и без, кнопочки, выпадающие списки и пр., и пр. -- это же все не имеет никакого отношения к нативным контролам конкретной ОС или оконного окружения.

И, что удивительно, пользователей Dear ImGui, судя по их скриншотам, коих предоставлено уже немало, эта "ненативность" внешнего вида не волнует от слова совсем.

Удивительно это для меня потому, что доводилось читать немало споров про выбор GUI-фреймворка для кроссплатформенных приложений и одним из требований (или одной из претензий) к существующим инструментам было то, что рисуемые GUI-фреймворком контролы визуально отличаются от нативных (т.е. родных для ОС).

Типа, вот Qt -- да, хороший фреймворк, но на такой-то платформе его кнопки отличаются от родных. И т.д., и т.п.

Я таких претензий никогда особо не понимал. Как по мне, так GUI-интерфейс должен быть продуманным и удобно заточенным под задачу. А само GUI-приложение должно быть отзывчивым. И если это так, что внешний вид контролов в GUI-приложении -- это уже мелочь.

И вот погружаясь в Dear ImGui с удивлением обнаруживаю, что есть люди, которые разделяют мои взгляды. Они просто берут Dear ImGui и решают свои насущные задачи. Не сильно беспокоясь о том, что сделанная в Dear ImGui программа отличается по внешнему виду от сделанной в wxWidgets или Qt.

Таки здравый смысл еще где-то остался. Что не может не радовать.

5 комментариев:

eao197 комментирует...

Я не могу вспомнить мобильное приложение из тех, что пользуюсь, со сложным интерфейсом. А вот на десктопе в свое время пришлось поработать в CorelDRAW (на весьма поверхностном уровне) и в Lightroom (тоже не глубоко, но довольно много). И там, и там интерфейсы были нестандартные, но по сравнению со сложностью самого софта это вообще было незаметно.

Stanislav Mischenko комментирует...

> на десктопе в свое время пришлось поработать в CorelDRAW (на весьма поверхностном уровне) и в Lightroom (тоже не глубоко, но довольно много). И там, и там интерфейсы были нестандартные, но по сравнению со сложностью самого софта это вообще было незаметно.

Как говорится, это другое. Едва ли есть 100500 альтернатив CorelDraw, и его не выбирают за внешний вид.

Я вот о чём.

https://www.winamp.com/wp-content/uploads/unsplash_9p-dsbtsyga-1.jpg

Дефолтный скин winamp-a напоминает аудио деку. Делает ли это плеер удобнее? Необязательно, а вот чем-то родным и знакомым - да. Понятно, что это плеер, без лишних слов. То есть "первый контакт" уже вызывает позитивный отклик. Человек, у которого сработает ассоциативный ряд, среди прочих равных скорее всего выберет именно этот плеер.

И да, раз уж была затронута тема нативности, я в курсе, что контролы у winamp-a не выглядят как нативные. Нативные контролы это лишь одно из средств сделать приложение более привычным для человека, но бывает что можно и нужно выйти за рамки.

eao197 комментирует...

> Как говорится, это другое.

Я не думаю, что это другое.

Приложения, в том числе и GUI, выбирают для решения насущных задач (игры сейчас оставим в стороне, к тому же там про нативность GUI вообще вопроса нет). Соответственно, интерфейс должен быть заточен под то, чтобы пользоваться было просто и удобно.

Вот в основном интерфейсе WinAMP это делать реально проще и удобнее, чем в основном дефолтном интерфейсе Foobar2000. То, что при этом WinAMP не использует "родные" контролы, здесь идет только в плюс.

Однако, в тех же WinAMP/Foobar2000 есть еще и настройки. Вот когда диалоги настроек и пр. формы начинают кардинально отличаться от того, что принято на платформе, вот тогда да, вопросы могут возникнуть.

Хотя, если программа нужная и в каком-то роде уникальная (типа CorelDRAW), да еще и интерфейс в ней выполнен более-менее нормально (т.е. есть привычные пользователю Button, CheckBox, RadioButton, List, ComboBox и вот это вот все), а все различия лишь во внешнем виде и цветовом оформлении... То на это обращаешь внимание только в начальный период работы с программой. Потом уже даже и не обращаешь внимания.

Stanislav Mischenko комментирует...

И всё-таки меня не покидает ощущение, что мы с вами говорим о разных вещах. Возможно кто-то скачает winamp, foobar и ещё с десяток плееров и каждый попробует на предмет удобства интерфейса. Я же скачаю только один winamp, просто потому, что он красиво выглядит, и буду им дальше пользоваться. Оба подхода имеют права на существование, и ни один из них ни вправе требовать первенство, ибо в конечно счёте итог одинаков - это довольный пользователь.

eao197 комментирует...

> И всё-таки меня не покидает ощущение, что мы с вами говорим о разных вещах.

Очень может быть.

Мне сложно привести пример десктопного GUI приложения, т.к. в последние годы пользуюсь разве что браузерами (постоянно), gVim (но его сложно считать типичным десктопным приложением), Lightroom (время от времени, раньше чаще, сейчас реже), Word/PowerPoint или их аналоги из LibreOffice под Linux (редко). Все они имеют слабое отношение к нативному GUI, как по мне.