Опять о раскраске в диалогах Topic is solved

Здесь можно сообщить о найденных багах в Far.
Post Reply
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Опять о раскраске в диалогах

Post by buniak_a_h »

Делаю такой тестовый скрипт (извините, короче не получилось):
  1. local F = far.Flags                              
  2.  
  3. local aDlg = {
  4.  
  5.  {"DI_EDIT", 1, 0, 20, 0, 0, "DialColor.Test", 0, bor(F.DIF_HISTORY, F.DIF_USELASTHISTORY); [10]='qwerty'};
  6.  
  7.  {"DI_EDIT", 1, 1, 20, 1, 0, "DialColor.Test", 0, bor(F.DIF_HISTORY, F.DIF_USELASTHISTORY); [10]='qwerty'};
  8.  
  9. }
  10.  
  11.  
  12.  
  13. local function fDlg1(hDlg, Msg, Param1, Param2)
  14.  
  15.  if Msg == F.DN_CTLCOLORDIALOG then
  16.  
  17.   Param2.BackgroundColor = 0
  18.  
  19.   Param2.ForegroundColor = 7
  20.  
  21.   Param2.Flags = bor(F.FCF_FG_4BIT, F.FCF_BG_4BIT)
  22.  
  23.   return Param2
  24.  
  25.  elseif Msg == F.DN_CTLCOLORDLGITEM then
  26.  
  27.   -- Изменённый текст
  28.  
  29.   Param2[1].BackgroundColor = 0
  30.  
  31.   Param2[1].ForegroundColor = 0xA -- Ярко-зелёный
  32.  
  33.   Param2[1].Flags = bor(F.FCF_FG_4BIT, F.FCF_BG_4BIT)
  34.  
  35.  
  36.  
  37.   -- Отмеченный текст.
  38.  
  39.   Param2[2].BackgroundColor = 0xF
  40.  
  41.   Param2[2].ForegroundColor = 0x9 -- Ярко-синий на белом
  42.  
  43.   Param2[2].Flags = bor(F.FCF_FG_4BIT, F.FCF_BG_4BIT)
  44.  
  45.  
  46.  
  47.   -- Неизменённый текст
  48.  
  49.   Param2[3].BackgroundColor = 0
  50.  
  51.   Param2[3].ForegroundColor = 0xC -- Ярко-красный
  52.  
  53.   Param2[3].Flags = bor(F.FCF_FG_4BIT, F.FCF_BG_4BIT)
  54.  
  55.  
  56.  
  57.   -- Стрелка для вызова истории
  58.  
  59.   Param2[4].BackgroundColor = 0
  60.  
  61.   Param2[4].ForegroundColor = 0xF
  62.  
  63.   Param2[4].Flags = bor(F.FCF_FG_4BIT, F.FCF_BG_4BIT)
  64.  
  65.   return Param2
  66.  
  67.  end -- Switch on Msg
  68.  
  69. end -- fDlg
  70.  
  71. far.Dialog(win.Uuid'D317FCE6-0718-41A1-B2B0-4A08E40757D2', -1, -1, 22, 2, nil, aDlg, bor(F.FDLG_NONMODAL,F.FDLG_NODRAWSHADOW), fDlg1)
  72.  
  73.  
Запускать из командной строки lua:@<имя_файла>
Как это выглядело в древней версии 5577:
Старая.png
Старая.png (7.05 KiB) Viewed 1200 times
тут:
1 - неизменённый текст
2 - изменённый текст
3 - отмеченный текст
Как это выглядит в версии 5834:
Новая.png
Новая.png (1.41 KiB) Viewed 1200 times
--
ЧЯЛНТ ???
P/S. Кака началась с версии 5788; в 5787 ещё всё было красиво
Last edited by buniak_a_h on Tue 29 Jun, 2021 05:13, edited 5 times in total.
2useven10
Posts: 5204
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Опять о раскраске в диалогах

Post by 2useven10 »

buniak_a_h wrote: Mon 28 Jun, 2021 23:36ЧЯЛНТ
Не обращаете внимания на детали: ЧЯЛНТ - ЧЯДНТ, какая разница.
И изображаете глухаря на току, слушаете только себя.
Про прозрачность в цветах как минимум половина сообщений на форуме в последнее время.
2useven10
Posts: 5204
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Опять о раскраске в диалогах

Post by 2useven10 »

Вообще, по моему скромному мнению, для 'правильной' прозрачности лучше бы было ввести новый флаг в описании цвета.
А без него оставить 'костыль' и не ломать чуть ли не 50+% и скриптов.
Last edited by 2useven10 on Tue 29 Jun, 2021 09:15, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Опять о раскраске в диалогах

Post by buniak_a_h »

2useven10 wrote: Tue 29 Jun, 2021 09:10 Про прозрачность в цветах как минимум половина сообщений на форуме в последнее время.
Ответ разработчиков на все сообщения по этой теме сводились к тому, что «некорректно заполнены цвета (не установлены рекомендованные флаги)» либо «Некорректно составлен диалог (размеры элементов)». И единственна рекомендация - исправить плагины/скрипты. Это как было со строгой валидацией UTF-8 строк: ввели проверку - и несколько скриптов работать перестали.
Здесь я привёл пример абсолютно корректного скрипта, который работает неправильно. Т.е. это ошибка именно в ФАРе. И не ссылайтесь на мою ЧЯДНТ - я всё делаю (в данном скрипте) правильно. Я не знаю, пи чём тут прозрачность, но в этом скрипте ПРОСТО не учитываются 2-й и 3-й цвета (неизменённый и помеченный). При этом изначально (если их не переопределить при обработке сообщения DN_CTLCOLORDLGITEM) они вполне разные. Так что я даже не уверен, что дело в прозрачности.
Last edited by buniak_a_h on Tue 29 Jun, 2021 09:30, edited 1 time in total.
2useven10
Posts: 5204
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Опять о раскраске в диалогах

Post by 2useven10 »

buniak_a_h wrote: Tue 29 Jun, 2021 09:29 ЧЯДНТ - я всё делаю (в данном скрипте) правильно.
Я не берусь судить правильно это или нет, но если в вашем скрипте все цвета сделать 0xFF00000n
(0 - 0xFF000000, 0xA - 0xFF00000A и т.д.) все становится на свои места.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Опять о раскраске в диалогах

Post by buniak_a_h »

Я специально указал флаги FCF_FG_4BIT (цвет символа задан стандартным кодом в 4 бита) и FCF_BG_4BIT (цвет фона символа задан стандартным кодом в 4 бита). Т.е. что-то лишнее получается - или эти флаги, или 0xFF000000 в коде цвета.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Опять о раскраске в диалогах

Post by buniak_a_h »

Ладно, был неправ …
2useven10
Posts: 5204
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Опять о раскраске в диалогах

Post by 2useven10 »

Цвет задан индексом, прозрачность кодом 0x00 в вашем случае полная.
Моё предложение несколькими постами ранее - игнорировать прозрачность если не задан новый флаг.
Условно FCF_TRANSPARENCY (он не существует) тогда и старое поведение останется и прозрачность можно использовать.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Опять о раскраске в диалогах

Post by Yegor »

2useven10 wrote: Tue 29 Jun, 2021 09:15 Вообще, по моему скромному мнению, для 'правильной' прозрачности лучше бы было ввести новый флаг в описании цвета.
А без него оставить 'костыль' и не ломать чуть ли не 50+% и скриптов.
Не буду судить, как правильно сделать прозрачность, но считаю что при FCF_?G_4BIT флаге нужно биты прозрачности игнорировать, т.к. цвет в этом случае представляет собой индекс в неком массиве: странно иметь индекс, где 24 бита - это сам индекс, а 8 бит - прозрачность. А вот цвет из массива может или даже должен иметь и прозрачность.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
2useven10
Posts: 5204
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Опять о раскраске в диалогах

Post by 2useven10 »

Yegor wrote: Wed 30 Jun, 2021 23:45 А вот цвет из массива может или даже должен иметь и прозрачность.
Т.е. все предопределённые каждый из 16 предопределённых цветов будет с неизменяемой прозрачностью?
Очень сомнительное предложение. Всё-таки индекс прозрачность и цвет (независимо от способа задания) это разные измерения.
Last edited by 2useven10 on Thu 01 Jul, 2021 00:18, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Опять о раскраске в диалогах

Post by HaRT »

2useven10 wrote: Wed 30 Jun, 2021 23:56 прозрачность и цвет (независимо от способа задания) это разные измерения
В современной компьютерной графике и обработке изображений степень (не)прозрачности считается неотъемлемой частью цвета. А вот должна ли альфа должна браться не из индекса, а из того элемента палитры консоли/терминала, на который этот индекс указывает, надо решать, исходя из практических ограничений имеющегося окружения (кои мне большей частью неизвестны).
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5204
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Опять о раскраске в диалогах

Post by 2useven10 »

HaRT, А если прочесть внимательно и немного подумать?
Если вы будете брать альфу из элемента палитры, то получится, например так:
синий везде непрозрачный, красный всегда прозрачный наполовину, а зелёный полностью прозрачен.
Такой вариант может сгодиться только если все цвета будут непрозрачны совсем, т.е. прозрачность отключена.
Post Reply

Return to “Глюки и баги”