andrew_programmer wrote:
Я прекрасно помню, что diamond противник вынесения какой-либо графики из ядра.
А ещё есть сторонники идеи,"Нечего засорять ядро всяким гов**м". Попробуйте найти компромисное решение, удовлетворяющее и первым, и вторым....
Пожалуйста, пусть графика будет не в ядре, а в драйвере, пусть даже вместо кучи системных вызовов для обработки GUI и окон будет один системный вызов типа "вызвать функцию из GUI под номером ebx" (как вариант, два вызова - для GUI и для оконных функций), мне лично пофиг. Пока графическая подсистема а) не требует лишних переключений колец защиты, б) не требует лишних переключений контекста, в) способна исполняться более или менее параллельно при параллельных вызовах из разных приложений (по модулю, естественно, необходимых блокировок при работе с разделяемыми ресурсами), эффективность работы не изменится никак. Текущий код этим условиям удовлетворяет. X-сервер - нет. На данный момент я не убеждён, что улучшение графической подсистемы требует отказа от этих требований (что графическая подсистема требует улучшения - несомненно).
andrew_programmer wrote:
1)Главное окно есть? Да. Дочерние окна есть? Нет.(...)Всплывающие окна есть? Нет. Окон, которые всегда на самом верху - нет. И на данный момент эмулировать их просто невозможно!
Очевидно, это означает, что текущий вариант оконной подсистемы не предоставляет некоторых нужных фич. Это не означает, что нужно писать X-сервер на Сях. Это означает, что нужно выяснить, какое API нужно, после чего взять и изменить текущую реализацию.
andrew_programmer wrote:
2)Аппаратное ускорение возможно задействовать обращением к операционной системе через прерывания без помощи сторонних библиотек? Нет.
А если я захочу задействовать аппаратное ускорение 3D, что тогда делать? Mesa, между прочим, взаимодействует с X-server-ом для аппаратной отрисовки внутри окон.
Не понял. Почему аппаратное ускорение нельзя задействовать обращением к операционной системе через прерывания? Собственно, вроде вообще в любом взаимодействии программы с внешним миром должна как-то участвовать операционная система, а то несогласованные действия разных программ ни к чему хорошему не приведут. Ну а "прерывания" - всего лишь основной способ взаимодействия с ОСью. И каким образом аппаратное ускорение 3D противоречит требованиям а)-в), таким образом требуя выделение X-сервера?
andrew_programmer wrote:
То и дело люди жалуются на артефакты "след окна" возникающие при пересечении иконок и окон обычных приложений.
Следовательно, нужно либо дать иконкам возможность быть окнами, всегда лежащими внизу оконного стека, либо сделать эти иконки частью большого окна под условным названием "рабочий стол", который опять же всё время должен лежать внизу оконного стека. Если "идеально правильным" вариантом считать первый, то текущая реализация костылём не является, а просто недоработана, с точки зрения второго, пожалуй, можно согласиться на костыльность, но сама по себе возможность первого варианта указывает на то, что несомненным костылём текущую реализацию счесть нельзя. По поводу недоработанности - согласен (и смотри выше).
andrew_programmer wrote:
Отрисовка курсора: скрываем курсор, рисуем, отображаем. Это ужас.
Пожалуй, я согласен с классификацией этого как костыля. Но это костыль реализации, а не проектирования, и исправляется без глобальных переделок.
andrew_programmer wrote:
Текст и числа отрисовывает операционная система.
В идеальном мире текст и числа отрисовывает каждая программа самостоятельно?
andrew_programmer wrote:
Кнопки отрисовывает операционная система. А если я захочу 10000 кнопок то все их должна перебирать операционная система. Как тогда насчёт времени отклика и скорости работы OS?
В идеальном мире кнопки отрисовывает каждое приложение самостоятельно?
Если приложение хочет 10000 кнопок, в любом случае их кто-то должен перебирать.
andrew_programmer wrote:
Сколько раз повторялись глюки с незакрытием окна, из-за пересечения областей кнопок и кнопки закрытия окна.
Чего? Если приложение не предпринимает специальных усилий, то кнопка закрытия окна не перекрывается с другими кнопками этого окна. Если она перекрывается с другими кнопками окон выше по оконному стеку, то, раз они выше, то и по логике они срабатывать должны.
andrew_programmer wrote:
Вывод битмапа только 24 бита. Если с палитрой, то отдельная системная подфункция. Неужели по всякому поводу будем заводить подфункции системных функций?
Не по всякому, а только по нужным. Если окажется, что при проектировании забыли важную фичу, то да, придётся создавать новую функцию, а если будет лень переписывать ВСЁ на эту новую функцию, то старая останется для совместимости.
andrew_programmer wrote:
Смотрим внимательно на код ядра. То здесь, то там вылезает кусок кода касающийся GUI.
Утверждается, что вся оконная подсистема локализована в следующих местах:
- папка gui/, где и положено быть всему GUI-коду (User Interface);
- папка video/, где и положено быть видеодрайверам;
- константы и определения, как им и положено, лежат в const.inc и proc32.inc;
- обработка системных вызовов в kernel.asm.
Это не так?
andrew_programmer wrote:
Статический код графики и GUI приводит к путанице и бардаку в ядре усложняя понимание и, соответственно, модернизацию этого кода.
А если бы Велик изначально выбрал модель с X-сервером, то этот же самый код в составе сервера был бы вершиной красоты и изящества, ага?
andrew_programmer wrote:
Если всё делать правильно, то программист будет просто наслаждаться удобством пользования библиотекой. Как это сейчас с InfinitySound. Не нужно париться с драйверами и их устройством - есть промежуточный абстрактный слой.
Так это подмена понятий. Сравниваются
интерфейс библиотеки InfinitySound ("удобно пользоваться") и
реализация графической подсистемы ("усложняя понимание и, соответственно, модернизацию"). Интерфейс-то и для взаимодействия с окнами прост и понятен, только бедный слишком.