Columns UI v1.2.0 [05.09.2019]

Список разделов Аудиоплеер foobar2000 Секреты foobar2000 Интерфейс - CUI



Сообщение #361 seriousstas » 12.09.2019, 14:08

по которым костыли причиняют боль самому UIHacks и другим компонентам
Просто - все оч абстрактно ..
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 98
С нами: 4 года 9 месяцев

Сообщение #362 TheQwertiest » 12.09.2019, 15:10

Ничего абстрактного: компонент построен на костылях (foo_ui_hacks). Это факт, с которым можно только смириться =)

зы: в любом случае, детальное обсуждение foo_ui_hacks выходит за рамки данного топика.
TheQwertiest
Новичок
Репутация: 1
С нами: 1 год 7 месяцев

Сообщение #363 LUR » 12.09.2019, 17:06

TheQwertiest писал(а):компонент меняет поведение программы и окон, которые ему не принадлежат, в обход предоставляемого API.
Т.е. Columns UI этого не делает совершенно?) Что такое вообще костыли, если любой компонент может взять хендл любого окна и сделать с ним все что угодно? Вполне возможно что новые колумнсы сами лезут туда, где просто начинается конфликт интересов с хаксом, который ну тупо не поддерживается, а автору колумнсов на него срать) Да и любой сторонний компонент типа сплиттера тоже "костыль".
TheQwertiest писал(а):был дан ответ с примером
Дайте ссылку на пост, а то лень искать...
LUR M
Модератор
Аватара
Возраст: 37
Откуда: Минск
Репутация: 253
С нами: 6 лет 11 месяцев

Сообщение #364 TheQwertiest » 12.09.2019, 23:06

Т.е. Columns UI этого не делает совершенно?)
На текущий момент ничего такого в CUI не видел (ни в исходных кодах, ни в поведении самого компонента).

Что такое вообще костыли, если любой компонент может взять хендл любого окна и сделать с ним все что угодно?
Именно это и есть костыли - брать владение чужими ресурсами, когда это не предполагается (и не ожидается), изменять чужие ресурсы, когда это не предполагается и т.д. и т.п..

Вполне возможно что новые колумнсы сами лезут туда, где просто начинается конфликт интересов с хаксом, который ну тупо не поддерживается, а автору колумнсов на него срать)
Скорее всего (ибо не полезу в дизасэмбл ради праздного интереса) всё много проще. Как я писал выше, foo_ui_hacks использует перехваты для реализации функционала работы со шрифтами. CUI, наверное, стал использовать WinAPI функцию, которую foo_ui_hacks не перехватывает, из-за этого "костыль" для шрифтов не отрабатывает.

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

Да и любой сторонний компонент типа сплиттера тоже "костыль".
Почему? Брать владение ресурсом, который предполагает, что им будет кто-то владеть - это нормально.
Компоненты типа "панель" всегда работают через некоторый API (CUI/DUI), который позволяет родительской панели\компоненту управлять им (и передавать об этом информацию управляемому компоненту) без необходимости костылей. "Панель" знает, что её могут перемещать, менять размер, скрывать и т.п.. Это ожидаемое поведение.

Костыль - это, например, насильно перехватывать управление родительским окном (эффект прилипания к краю экрана в UiHacks): если fb2k реализует схожий функционал, то "двойное" управление окном приведёт к очень "интересным" багам.
Костыль - это редактировать чужой компонент, добавляя туда новое меню (изменение интерфейса foo_albumlist в UiHacks). Если компонент foo_albumlist изменит номер ресурса и переиспользует старый номер для других целей, то это приведёт к полному undefined behaviour'у.
И т.д. и т.п..

Дайте ссылку на пост, а то лень искать...
Пост на предыдущей странице.

foo_ui_hacks - это (в некотором смысле) эквивалент бинарного патча, который редактирует некоторые места программы с надеждой, что эти места никто и никогда не поменяет. Иногда эти места меняются и "патч" приводит к непредсказуемым последствиям.

При всем сказанном, "костыль" - это не плохо само по себе (и автор UiHacks проделал великолепную работу). Но каждый такой "костыль" несёт риски и это надо понимать. Перекладывать ответственность за сломанные костыли на разработчиков, которые эти костыли сами не делали и никогда не поддерживали, - это абсурд.
TheQwertiest
Новичок
Репутация: 1
С нами: 1 год 7 месяцев

Сообщение #365 LUR » 13.09.2019, 13:35

TheQwertiest, спасибо за ответ по полочкам. Кстати, перехват в JSplitter таки используется просто для таскания панелей плагинов средней кнопкой мыши. Сам увидел, к чему это порой приводит, хотя опцию отключаемой и сделал. Но при этом я там же вмешиваюсь в прорисовку панелей плагинов, включая ухищрения для отрисовки фона и копирования его в основное окно, так что как и WSH Panel Mod, так и впрочем JScript Panel, как его наследователь, имеет механизмы, для того, чтобы вмешаться в отрисовку плагинов. Я просто решил чуть-чуть поразмышлять на тему грани костылей с "обходом API". Конкретно в моем случае, я имею в виду так называемую псевдопрозрачность. Пытаясь реализовать сплиттер, в котором так же может находится такой же сплиттер и панели с псевдопрозрачностью, наткнулся на очень неоднозначное решение вопроса. Ну лично для меня, конечно.
LUR M
Модератор
Аватара
Возраст: 37
Откуда: Минск
Репутация: 253
С нами: 6 лет 11 месяцев

Пред.

Вернуться в Интерфейс - CUI