LINUX.ORG.RU
ФорумTalks

[ССЗБ] Какое же говно это наше GTK

 


0

3

В общем, никогда прежде не углублялся в особенности использования GTK, но начав пилить свой таскбар, пришлось столкнуться с ним вплотную. Я бы даже сказал, вляпаться.

Архитектурно оно представляет какое-то совершенно нелепое нагромождение классов, недоделанных недоабстракций и длинных списков deprecated функций. Нормального механизма обмена сообщениями между компонентами нет. Декомпозиции на абстрактные интерфейсы не прослеживается.

Компоненты зачем-то разбиты на две группы - оконные и безоконные - между которыми, пролегает такая хорошая, качественная железобетонная стена. Можно даже побиться об неё головой. Вместо того, чтобы на уровне архитектуры дать возможность любому компоненту работать как в отдельном под-окне, так и в окне родителя, предлагаются танцы с бубном EventBox.

Средства для кустомизации компонент наследованием находятся в зачаточном состоянии, а для кустомизации тонкой настройкой в рантайме - и вовсе в противозачаточном. Часть компонент нуждается в разбиении на субкомпоненты, например, ужасный GtkNotebook. Часть компонент просто написана задней лапой. Исходники производят полное впечатление, что перед нами не универсальный тулкит, на котором работает чертова уйма гуёв, а всё тот же костыльный набор виджетов для GIMP-а.

После программирования GUI на gtk, очень хочется тщательно отмыть руки от говна, а затем напиться от безысходности.

Ответ на: комментарий от Eddy_Em

В коде. Теперь кроме сишного появился еще и Quick, но с ним еще мало работал.

trex6 ★★★★★
()
Ответ на: комментарий от reader

Оустерхаут

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

Кстати, какие прогнозы на портирование Tk на wayland?

baverman ★★★
()
Ответ на: комментарий от baverman

> позволяет ей иметь настоящий родной вид на любой из поддерживаеых платформ

ну да. выглядит везде одинаково. +100 к постоянству

ananas ★★★★★
()
Ответ на: комментарий от baverman

> портирование Tk на wayland

Из них двоих кто-то не нужен. И каждый линуксойд твердо уверен, что уж он-то точно знает, что именно не нужно.

geekless ★★
() автор топика
Ответ на: комментарий от ananas

> при прочих равных гуй на компилируемом языке будет шевелиться гораздо шустрее

Гуй в PyGtk большей частью написан на компилируемом Си :) На Питоне - только прокладки.

tailgunner ★★★★★
()
Ответ на: комментарий от baverman

>Здесь должен быть обширный список из низкоуровневых сишных gui либ, но на ум пришли только Tk и Motif.

EFL

AptGet ★★★
()

зы: я не знаю, зачем разбивать на субкомпоненты gtknotebook. честно не знаю, куда там дальше разбивать-то. чего там разбивать афтар? подскажи

ckotinko ☆☆☆
()
Ответ на: комментарий от ckotinko

зачем разбивать на субкомпоненты gtknotebook

Наскидку: как раскрасить табы в разные цвета. Для новичка это просто невозможная задача.

baverman ★★★
()
Ответ на: комментарий от AptGet

EFL

От тамошнего количества абстракций некоторых может кондрашка хватить. Низкоуровневым его язык не поворачивается назвать.

К тому же, последний раз когда смотрел, куча нереализованных todo висело. Именно по части дубовости виджетов. Маловато всё-таки на нем приложений написано, чтобы говорить о его пригодности.

baverman ★★★
()

Дык используй Qt же

Siado ★★★★★
()
Ответ на: комментарий от Tark

DSL

Сомневаюсь, что новичок сможет пропустить свои пожелания через этот пайп и добиться стабильного повторяемого результата.

baverman ★★★
()

Скажу со стороны пользователя.
Софт на гтк в зависимостях тянет не так уж и много. Пользуюсь на работе gentoo + openbox + куча гуевых приложений на гтк, ибо куте лень тянуть еще в систему. Дома арч с кедами. Так вот, не так давно в арч приплыло обновление гтк. До третьей версии. И оно сцуко перестало реагировать на gtkrc и прочие настройки и только его реестро-подобным dconf-edito'ом удалось поменять шрифты и курсоры.

Fletch ★★
()
Ответ на: комментарий от baverman

афтар мог взять gtkVBox(например) всобачить туда нужные иконки лабелы и кнопки а потом сделать сам контейнер app_paintable и рисовать там какой нужно цвет,, градиент и статусбары. и все это было бы позади лабелов и кнопок

ckotinko ☆☆☆
()
Ответ на: комментарий от baverman

> Наскидку: как раскрасить табы в разные цвета.

На самом деле, дело в другом. Контейнер, отображающий один из N слоев - это один виджет. А полоска табов - это совсем другой виджет. Их и использовать можно раздельно. С какого фига они намертво прибиты друг к другу?

geekless ★★
() автор топика
Ответ на: комментарий от ckotinko

почему не покрасить вложеный вместо названия таба виджет?

Это первое, что приходит в голову, но не работает, так как виджет не занимает всё пространство таба. Можно, конечно исправить тему и убрать мешающийся пэддинг, но это будет совсем уж жестокое вмешательство в пользовательские предпочтения.

baverman ★★★
()
Ответ на: комментарий от geekless

С какого фига они намертво прибиты друг к другу?

Как должны выглядеть оторванные от бука табы? Есть картинки? Интересно посмотреть.

baverman ★★★
()
Ответ на: комментарий от ckotinko

Это легко и просто, когда знаешь как.

С другой стороны, что мешает ТС просто спросить как реализовать ту или иную думку?

baverman ★★★
()
Ответ на: комментарий от geekless

я по этой же причине в deadbeef написал свой tab widget :)

waker ★★★★★
()
Ответ на: комментарий от baverman

Например, так: http://blogs.gnome.org/johannes/2010/04/05/re-anjuta-ui-work/

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

geekless ★★
() автор топика
Ответ на: комментарий от queen3

>Кроме творений божественного Андерса Хейсберга, конечно.

Как много ошибок в имени Маттиас Эттрих

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от different_thing

>Пусть все эти любители кутей покажут столько интерфейсов для других языков, скока есть у gtk

а какие еще преимущества у gtk есть помимо количества биндингов? Такое ощущение что пел писали исключительно для тго чтоб писать к нему биндинги

DNA_Seq ★★☆☆☆
()

А мне Gtk понравился, когда я на нем писал. Этакий швейцарский нож, работающий как швейцарские часы.

Правда свои виджеты на нем писать - умучаешься.

hibou ★★★★★
()
Ответ на: комментарий от baverman

не больно ли ядерно - покрасить все пространство таба? тем более что таб сам может быть с каким нибудь хитрожопым стилем поверх которого красить не комильфо

ckotinko ☆☆☆
()
Ответ на: комментарий от geekless

А вообще, это логически разные сущности

Соглашусь, GtkNotebook, это просто узкоспециализированная хрень с дочерними виджетами и привинченными табами для их переключения.

И так во всем gtk. Из достаточно общих виджетов можно выделить только реализации CellLayout, ну и некоторые контейнеры.

Да, базовые виджеты убоги, их не хватает, если хочется своеобразного гуя. Но знаешь в чем прелесть? Gtk настолько прост, что смастерить из этих примитивных кубиков нужный функционал не представляет большую проблему. При этом не надо рыть сотни доков в поисках очередного тысячного QWhatever, ты всегда точно знаешь — gtk этого не может, поэтому просто подписываешься на size-request, size-allocate, expose-event и делаешь как надо, дешево и сердито.

baverman ★★★
()
Ответ на: комментарий от ckotinko

не больно ли ядерно

Мне это только предстоит выяснить. Думаю там как и везде просто дергаются методы отрисовки у стиля, поэтому чего-то напортачить будет сложно.

Зато как представлю, у файлов, принадлежащих разным проектам, будет свой цвет, м-м-м, аж слюни текут. Мой редактор будет принципиально новым в этом плане.

baverman ★★★
()
Ответ на: комментарий от baverman

>Gtk настолько прост, что смастерить из этих примитивных кубиков нужный функционал не представляет большую проблему.

А почему бы тогда писать не сразу на xlib?

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от hibou

>Этакий швейцарский нож, работающий как швейцарские часы.

В смысле многофункциональный прибор способный выполнять только одну функцию?

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от DNA_Seq

А почему бы тогда писать не сразу на xlib?

Нет абстракции ввода/вывода и соответствующих бэкэндов. Быть привязанным к X11 очень невеселая перспектива.

baverman ★★★
()
Ответ на: комментарий от baverman

Быть привязанным к X11 очень невеселая перспектива.

Почему? Мне кажется, это был бы наилучший вариант. Чем меньше «абстракций», тем лучше работает.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от baverman

в gtk3 отрисовка состоит из кучи накладываемых друг на друга слоёв. то есть отрисованное дерьмо не во вложенном виджете испакостит виджет уровнем выше

в 2 немного не так, но засирание будет аналогичное.

ckotinko ☆☆☆
()
Ответ на: комментарий от Fletch

Конечно же использует. Но если ГТК2 был все же GIMP ToolKit, то ГТК3 - по идеологии чистый Gnome ToolKit.

pekmop1024 ★★★★★
()

> начав пилить свой таскбар

А иконки трея он ловит?
Если да, сделай его полупрозрачным.

ChALkeR ★★★★★
()
Ответ на: комментарий от Eddy_Em

Вот и я говорю: к чему все эти излишние обертки?

xlib наше всё!

Kosyak ★★★★
()
Ответ на: комментарий от ckotinko

Это понятно. Заигрывать с наложением виджетов не собираюсь. Я просто поменяю expose у GtkNotebook, когда он рисует полоску с табами, то есть заливает фон, не более.

baverman ★★★
()
Ответ на: комментарий от Eddy_Em

Чем меньше «абстракций», тем лучше работает.

И тем больше велосипедов надо изобретать. Особенно при портировании.

baverman ★★★
()
Ответ на: комментарий от pekmop1024

Операсты линуксовый гуй переписали на Xlib :)

Зато теперь у них есть свой кроссплатформенный тулкит, причем довольно таки неплохой.

baverman ★★★
()
Ответ на: комментарий от baverman

При портировании куда? И что вы все заладили «портирование», «портирование»... Если приложение свое и используется в узкоспециализированных целях, кому может понадобиться его портировать?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от baverman

Он еще и более-менее сносно умеет мимикрировать под кути и гытыка, пусть не всегда и идеально. Но подозреваю, что там не полноценный тулкит, а нечто опероспецифичное.

pekmop1024 ★★★★★
()
Ответ на: комментарий от Neksys

Каких только костылей не придумают чтобы хоть как-то упростить программирование на GTK.

elverion
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.