crypt of decay - пилю тулкит [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

пилю тулкит [Jun. 14th, 2015|09:09 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
[Tags|]

подпилил объект стилей. раньше только так курить можно было:

ffkitStyle.setColor("background.active", "#fff");

а теперь ещё и так можно:

ffkitStyle.color.background.active = "#fff";

понятно, что все, идущее после color собирается в строку, и потом дёргается setColor с нужными аргументами. естественно, поля не предопределены, хоть color.hiu.pizda.jigurda пиши. читать тоже можно, причём ещё веселей:

string s = st.color.background.active; — ура, строка.
X11.Color c = st.color.background.active; — ура, иксовый цвет.

а в классе виджета то же самое будет последовательно дёргать стиль виджета (если есть), стиль родителя (если есть) и так далее до глобального стиля софтины. удобняшечка!
Linkmeow!

Comments:
From:[info]tzirechnoy.livejournal.com
Date:June 15th, 2015 - 09:47 am
(Link)
Тэсты:

ffkitStyle.color.background.active = "#526"
ffkitStyle.color.background.active = "#523256fab"
ffkitStyle.color.background.active = "CIEXYZ:0.3811/0.2073E0/0.213E-1"
ffkitStyle.color.background.active = "RosyBrown1"
X11.cmsColor = st.color.background.active
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 09:59 am
(Link)
там XParseColor внизу, да. всё, что оно разбирать умеет — то и разбирается. плюс я сверху ещё добавил «rgb(r,g,b)».

кстати, а ты не встречал случайно функции, чтобы цвет обратно в строку? ну, то есть, чтобы то, что уже allocated — назад в rgb, а rgb назад в строку, где красный назовут red и ты пы. по‐моему, нет такой.

кстати, синтаксис до боли напоминает X resources. думаю, это не просто совпадение, а Знак.
From:[info]tzirechnoy.livejournal.com
Date:June 15th, 2015 - 10:07 am
(Link)
1) Это замечательно, что XParseColor. Но тэсты не помешают.
2) Нет. Учитывая, что если куда переводить, так в Pantone -- то в Xlib и не будет.
3) Ты заметил -- там ещё последняя строчка, намекающая, что у нас кроме XColor есть XcmsColor.
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 10:15 am
(Link)
я заметил. насколько я пырил в исходники XParseColor — оно что‐то там пытается с cms делать. и при этом умудряется парзить вещи типа «#fff» как (0xf000, 0xf000, 0xf000), гениально, блядь. поэтому хекс‐парзер свой пришлось вкрутить.

мне, честно говоря, все эти cms и прочие извращения… у меня тулкит‐то на 80% состоит из одного god object, какие там уж cms…
From:[info]tzirechnoy.livejournal.com
Date:June 15th, 2015 - 10:54 am
(Link)
Чем конкретно тебе не нравится #fff как 0xf000, 0xf000, 0xf000? Ты хотел 0xffff, 0xffff, 0xffff? Да ладно, кому какое дело!
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 11:14 am
(Link)
да, именно этим. белый, блядь, не белый!
From:[info]tzirechnoy.livejournal.com
Date:June 15th, 2015 - 11:19 am
(Link)
А ты пишы нормально. Например, #ffffffffffff или rgb:f/f/f
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 11:24 am
(Link)
а может, xlib несколько приохуела просто — диктовать мне, как надо цвета задавать? тут вот авторы немного потеряли края: не я для xlib, а xlib для меня. общепринятая (и наиболее логичная) практика — как минимум для «#fff» вытягивать «f» на всю длину. для остальных цветов хуй с ними, делайте как знаете, но от «#fff» любой нормальный человек ожидает чётко белого, а не непонятной хуйни.
From:[info]tzirechnoy.livejournal.com
Date:June 15th, 2015 - 11:48 am
(Link)
Тогда преобразуй в rgb:f/f/f, а не полностью парзи сам.

Ты, думаю, понимаешь почему.
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 11:58 am
(Link)
ну да, по уму, конечно, надо всё, что XParseColor не умеет (или умеет не очень так), преобразовывать в то, что она умеет хорошо, а потом всё равно скармливать ей. а не заполнять сразу XColor, как я делаю сейчас.

но см. мой большой пост, который я только что накатал. это нудно и неинтересно на данном этапе. поэтому я с тобой совершенно согласен, но реализацию пока отложил в TODO.
From:[info]tzirechnoy.livejournal.com
Date:June 15th, 2015 - 11:10 am
(Link)
И да, с Xcms не надо работать. Надо его просто возвращать -- чтобы потом не вставать на грабли.
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 11:18 am
(Link)
я, честно говоря, никогда это не использовал. какой‐то leftover code у меня к этому есть, но я даже не уверен, что он работает. надо бы, конечно, допилить потом. раз уж я даже XIM поддерживаю, который много лет тупо игнорировал…
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 11:18 am
(Link)
в смысле — низкоуровневый код, стили про это пока ничего не знают и знать не хотят.
From:[info]tzirechnoy.livejournal.com
Date:June 15th, 2015 - 10:55 am
(Link)
Кстати, а откуда приполз вариант rgb(r,g,b)?
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 11:19 am
(Link)
а из css. rgb() и rgba().
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 10:03 am
(Link)
мне, в общем‐то, не лениво ещё один AA завести и имена запоминать, но мало ли. а вдруг получится соскочить?
From:[info]tzirechnoy.livejournal.com
Date:June 15th, 2015 - 10:10 am
(Link)
Я думаю, что если преобразовывать -- то выдавать экранный цвет. Т.е. RGB с правильным числом бит на цвет (их можэт быть большэ 8, см. man XVisualInfo).

Альтэрнатива выдавать запомненную. Как чувак ввёл, так и выдавать.
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 10:16 am
(Link)
ну, я сейчас так и делаю — плюю назад то, что засунули. просто хотел считерить: вдруг чувак засунет то, чему стиль не обучен? так тоже ж можно, тупо напрямую X11.Color присвоить. который был создан из uint, который был создан функцией rgb2col(). и вдруг ему в ответ внезапно: «blue», пидарас!
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 11:25 am
(Link)
кстати, у меня всё равно не поддерживается больше восьми бит на канал, гыгыгы.
From:[info]tzirechnoy.livejournal.com
Date:June 15th, 2015 - 01:18 pm
(Link)
Херово, чо.
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 01:48 pm
(Link)
а зачем? ну реально, для тулкита, который нацелен исключительно на написание простеньких гуйпрограмм? тулкита, у которого основная идея — выглядеть как клон wings от window maker?
From:[info]tzirechnoy.livejournal.com
Date:June 15th, 2015 - 02:09 pm
(Link)
Тогда там вообще бит на канал не нужно. Три цвета сурфейса, у каждого вариацыи: активный/пассивный/теньлевая/теньправая. Итого 12 цветов, и никаких бит.
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 02:35 pm
(Link)
ну так стиль примерно и выглядит таким образом. виджеты же срать хотели на цвета, они просят стиль вернуть что‐то, что называется, например, «text.active», и пригодно для последующей передачи в XSetForeground и компанию. а что именно это — виджету неинтересно вообще.
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 02:37 pm
(Link)
ну да, они ещё могут попросить у стиля «#fff», например, если хотят именно цвет. опять же, это дело стиля — как такую хуйню в иксовый цвет преобразовать, надо ли вызывать XAllocColor или оно уже есть в кэше и подобное.
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 01:53 pm
(Link)
никто, кстати, не запрещает радостно насрать на средства тулкита (которых всё равно нет) и дёргать иксы самостоятельно. Window, Drawable, GC, Display — всё это не укрыто в недрах, а бережно высунуто наружу. хочется рисовать с кучей цветов — забил на тулкитовые средства и спокойно дёргаешь иксы, никаких проблем.

собственно, тулкит даже не пытается делать вид, что он от иксов не зависит, и никаких враперов не даёт. ну, то есть, создание окна, выделение цвета — для этого есть функции‐обёртки, потому что это муторно. а для рисования — везде напрямую дёргается xlib и никто по этому поводу не парится вообще.

девиз такой: тулкит абсолютно кросплатформеннен, потому что работает на любой платформе, где есть X11.
[User Picture]
From:[info]ketmar
Date:June 15th, 2015 - 02:03 pm
(Link)
то есть, тулкит занимается тем, чем ему и положено заниматься: еблей со скучными аспектами xlib. как‐то: создание окон, управление контекстом ввода, диспатчинг событий, поддержание в порядке информации о фокусе, общение с WM, добывание уникодных символов из нажатий кнопок и прочей мутотенью.

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

но «кишки» никто никуда не прячет, и за них можно дёргать как угодно. хочешь — перекрой метод создания X11-окна и делай по‐своему. хочешь — перекрой обработку некоторых событий. хочешь — всё вообще перекрой нахуй. тулкит, типа, основан на xlib и гордится этим, не пытаясь стыдливо спрятать xlib за «высокоуровневыми обёртками».