Сложности раскраски диалогов (возможно, с Alpha blending)

Здесь можно сообщить о найденных багах в 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:

Сложности раскраски диалогов (возможно, с Alpha blending)

Post by buniak_a_h »

Начиная примерно с версии 5801 изменилось поведение ФАРа при раскраске диалогов. Не скажу, что это - ошибка (ошибка в плагинах и макросах, формирующих диалоги), но предыдущее поведение было более "разумным" (smart). Например, те элементы диалога, которые не могут быть многострочными (DI_EDIT, DI_BUTTON, DI_RADIOBUTTIN и т.д.) так и раскрашивались в одну строку независимо от Y2 . Теперь поведение стало более "правильным", но в результате старые диалоги стали неудобочитаемыми. Примеры: настройка Filters, диалог Integrity Checker, calc и пр.… У себя для исправления я сделал такой маленький макрос:

Code: Select all

local F = far.Flags
Event {
  id = "341E1B56-156A-4FB7-8BD9-C1AD7B578A17";
  group       = "DialogEvent";
  description = "Исправление диалогов для раскраски";
  condition   = function(Event, Param)
   return Event == F.DE_DLGPROCINIT and Param.Msg == F.DN_INITDIALOG and Param.hDlg
  end;
  action      = function(Event, Param)
   local hDlg = Param.hDlg
   for i=1,math.huge do
    local item = hDlg:send(F.DM_GETDLGITEM, i)
    if not item then break end
    local i1 = item[1]
    if (i1 == F.DI_EDIT or i1 == F.DI_COMBOBOX or i1 == F.DI_FIXEDIT or i1 == F.DI_PSWEDIT or i1 == F.DI_CHECKBOX or i1 == F.DI_RADIOBUTTON) and
       item[5] > 0 and item[5] > item[3] then
     hDlg:send(F.DM_SETITEMPOSITION, i, {Left=item[2]; Top=item[3]; Right=item[4]; Bottom=item[3]})
    end
   end
  end;
}
Но этот костыль неплохо бы сразу встроить в ФАР. Я понимаю, что от этого он не перестанет быть костылём, но хоть работать станет нормально…
Last edited by HaRT on Sat 29 May, 2021 16:58, edited 2 times in total.
Reason: Добавлены ссылки «calc и пр.»
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Сложности раскраски диалогов (возможно, с Alpha blending)

Post by DrKnS »

buniak_a_h wrote: Sat 29 May, 2021 15:29 в результате старые диалоги стали неудобочитаемыми
Диалоги с багами стали неудобочитаемыми.

В Писании прямым текстом написано, что Y2 должно быть равно Y1.
Это называется контракт.
Его соблюдение дает возможность дальнейшего расширения API в будущем. Например, полноценной поддержки нескольких строк в этих элементах.
Если вдруг где-то прямым текстом не написано - используйте здравый смысл, это не сложно.

Если вы игнорируете и контракт и здравый смысл, указываете в Y2 какую-то шляпу по принципу "потому что могу" и ожидаете, что это будет работать всегда - вы, как минимум, затрудняете, а то и вовсе блокируете возможность такого дальнейшего расширения.

Допустим, завтра эта поддержка появится, но новые плагины не смогут ей пользоваться, потому что везде заботливо расставлены костыли для старых плагинов. Придется либо придумывать новые элементы, либо вводить новые костыли типа DIF_MYAUTHORCANACTUALLYREADPLEASEDOWHATISAY.

То, что баги полезли сейчас, а не потом, и в виде назойливых, но безобидных визуальных артефактов, а не падений и порчи данных - счастье.
Не надо их костылить и маскировать.
Пишите багрепорты разработчикам, они поправят.
А когда придет час "Х", плагины будут работать, а не падать.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сложности раскраски диалогов (возможно, с Alpha blending)

Post by buniak_a_h »

DrKnS wrote: Sat 29 May, 2021 17:24 дает возможность дальнейшего расширения API в будущем. Например, полноценной поддержки нескольких строк в этих элементах.
Вот и я об этом: составлен диалог, в перспективе рассчитанный на многострочный элемент, который пока таковым быть не может. Когда поддержка появится, костыль можно будет убрать. Но исправлять диалог сейчас - это обрубать путь к прогрессу.
Post Reply

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