Board.KolibriOS.org
https://board.kolibrios.org/

Области пустоты в окне.
https://board.kolibrios.org/viewtopic.php?f=36&t=2671
Page 1 of 2

Author:  Mario_r4 [ Wed Apr 16, 2014 7:53 pm ]
Post subject:  Области пустоты в окне.

Текущее устройство ф.0 позволяет отключать заливку окна (C = 1 - не закрашивать рабочую область при отрисовке окна), т.е. рисуется внешняя рамка и заголовок. Это сделано было с целью убрать моргание (blink) появляю щееся при последовательной отрисовке фона, а поверх него отличающиеся по цвету элементы. Способность полезная, спору нет, однако, имеется недостаток - программисту приходится самому вычислять все пустоты между элементами (кнопки, боксы, бары...) и заливать их ф.13. Получается куча лишних действий и кода, и так в каждой программе.

У меня уже давно идея вертелась в голове - указывать таблицу прямоугольных областей пустот, где фон не должен отрисовываться. Т.е. такой список в каждой строке которого хранится четыре элемента, описывающих крайние углы области пустоты (верхний левый, верхний правый, нижний левый, нижний правый). Опция может включаться флагом, например, можно выбросить градиентную заливку, которую по факту ни одна программа (кроме SETUP) не использует. Указателем на структуру с областями пустот будет служить ESI.

Естественно, при каждом изменение размера окна, эту структуру придется обновлять, но это несложно, так как размеры и расположение для "резинового" окна приходится все равно вычислять. Области пустот могут пересекаться. При заливке фона, перед тем как залить очередной пиксел, код пробежится по этому списку, если координаты будут находиться за пределами описанных областей пустот, то пиксел будет отображен, в противном случае место останется не тронутым, с расчетом на последующую отрисовку пользовательскими элементами.

Плюсы: не нужно высчитывать и отрисовывать ф.13 оставшиеся между элементами пустоты, меньше головной боли для прикладного програмиса.

Минусы: некоторое снижение скорости отрисовки фона для этого режима, за счет добавления лишних проверок.

Author:  Serge [ Wed Apr 16, 2014 8:08 pm ]
Post subject:  Re: Области пустоты в окне.

Mario_r4
И что будет с Fplay и другими программами, которые сами всё рисуют ?

Author:  Leency [ Wed Apr 16, 2014 10:11 pm ]
Post subject:  Re: Области пустоты в окне.

Идея отличная.

Совместимость со старыми программами будет сохранена?

Author:  Mario_r4 [ Wed Apr 16, 2014 11:47 pm ]
Post subject:  Re: Области пустоты в окне.

Serge wrote:
И что будет с Fplay и другими программами, которые сами всё рисуют ?

Ничего, они будут продолжать рисовать как раньше - это же выбираемая вещь. Единственно я пока не знаю, что делать в случае аппаратной отрисовки. Можешь ли ты по простому объяснить, что происходит с отрисовкой окон со скинами, при задействовании драйвера?
Leency wrote:
Идея отличная. Совместимость со старыми программами будет сохранена?

Да.

Author:  Serge [ Thu Apr 17, 2014 12:43 am ]
Post subject:  Re: Области пустоты в окне.

Mario_r4
Ничего не происходит. Ядро про акселерацию не знает.
Драйвер делает то же, что и ф.73 - выводит битмап на экран. Демки Mesa выводят картинку на месте клиентской области и поэтому заливку фоном не используют. Fplay рисует всё окно в битмап и выводит через ф73 а видео через ф73 или драйвер.

У меня есть некоторые сомнения.
Графическая часть ядра уже сильно запутана, а новый функционал сделает её ещё сложнее. С реализацией тоже не ясно. Сколько прямоугольников можно определять, где их хранить - ядерный malloc не безразмерный.

Author:  Mario_r4 [ Thu Apr 17, 2014 1:01 am ]
Post subject:  Re: Области пустоты в окне.

Serge wrote:
Ничего не происходит. Ядро про акселерацию не знает.

Т.е. 2D ускорения для обычных приложений нет. Но ведь не факт, что в будущем не изменится?
Serge wrote:
Драйвер делает то же, что и ф.73 - выводит битмап на экран. Демки Mesa выводят картинку на месте клиентской области и поэтому заливку фоном не используют. Fplay рисует всё окно в битмап и выводит через ф73 а видео через ф73 или драйвер.

Я спрашивал именно про отрисовку скинованных окон, про вывод через битмап это не коснется вообще.
Serge wrote:
У меня есть некоторые сомнения.
Графическая часть ядра уже сильно запутана, а новый функционал сделает её ещё сложнее.

В WinAPI такая фича с пустотами есть, чем мы хуже? Насчет запутанности - по моему документация нормально все описывает и у меня лично проблем не было. С прикладной точки зрения отрисовка окна значительно упрощается, и я как ты знаешь не любитель траты памяти (код вывод курсора передает горячий привет ненужному фреймбуферу).
Serge wrote:
С реализацией тоже не ясно. Сколько прямоугольников можно определять, где их хранить - ядерный malloc не безразмерный.

Не нужен мне malloc - обычное приложение ведь само отрисовывает свое окно. Это будет по реализации подобно "B = 1 - координаты всех графических примитивов задаются относительно клиентской области окна", т.е. ядру особых телодвижений не требуется. Зачем мне копировать данные в область ядра, если код отрисовки окна, в ядре, всегда имеет доступ к исходной области памяти, т.к. все выполняется в одном потоке. Для системной механики оконного стека абсолютно ничего не меняется.

З.Ы. Мне кажется ты просто не понял о чем именно идет речь.

Author:  Serge [ Thu Apr 17, 2014 10:02 am ]
Post subject:  Re: Области пустоты в окне.

Quote:
В WinAPI такая фича с пустотами есть, чем мы хуже?
Фича есть, используется редко, когда надо что-то совсем нестандартное
Quote:
Насчет запутанности - по моему документация нормально все описывает и у меня лично проблем не было.
Я про исходники. Множественное отсечение вообще не подарок. GDI и X server делают CombineRgn(RGN_DIFF) и рисуют оставшиеся прямоугольники. Так же и с отрисовкой курсора. Каждый пиксель не проверяют.

Author:  Mario_r4 [ Thu Apr 17, 2014 10:18 am ]
Post subject:  Re: Области пустоты в окне.

Serge wrote:
Я про исходники. Множественное отсечение вообще не подарок. GDI и X server делают CombineRgn(RGN_DIFF) и рисуют оставшиеся прямоугольники. Так же и с отрисовкой курсора. Каждый пиксель не проверяют.

Я не хочу зря расходовать память - жаба придет ко мне ночью и начнет душить меня.

Author:  Serge [ Thu Apr 17, 2014 10:26 am ]
Post subject:  Re: Области пустоты в окне.

Будешь каждый пиксель на отсечение проверять ?

Author:  Mario_r4 [ Thu Apr 17, 2014 11:02 am ]
Post subject:  Re: Области пустоты в окне.

Serge wrote:
Будешь каждый пиксель на отсечение проверять ?

Еще раз - если не установлен флаг D (сейчас используется для отрисовки градиента), то будет однократная проверка на установленность флага и все. Для существующих приложение абсолютно ничего не изменится. Если флаг установлен, отрисовка заливки фона перенаправляется в другую процедуру, в которой уже идет контроль каждого пиксела. Как вариант для ускорения можно написать процедуру разбиения на области рисуемых прямоугольников, но тут уже алгоритм сложнее получается. Еще раз - существующие приложения не будут затронуты вообще никак.

Author:  SoUrcerer [ Thu Apr 17, 2014 11:27 am ]
Post subject:  Re: Области пустоты в окне.

А почему не поручить заливку boxlib?

Author:  Akyltist [ Thu Apr 17, 2014 11:51 am ]
Post subject:  Re: Области пустоты в окне.

Извините, что влезаю в дискуссию, помимо "Setup" эту заливку использует "Арканойд v 0.3" - это чтобы не забыть поправить потом.

Author:  Mario_r4 [ Thu Apr 17, 2014 12:42 pm ]
Post subject:  Re: Области пустоты в окне.

SoUrcerer wrote:
А почему не поручить заливку boxlib?

А приложения которым не нужен Box_Lib должны быть лишены такой возможности?
Spoiler: Show
Akyltist

Спасибо, учту.

З.Ы. В общем все как обычно - в 90% случаев, когда предложишь новую полезную вещь, которая старых вещей не затрагивает, начинаются реакционные настроения. Когда сделаешь все успокаиваются и так до следующего раза...

Author:  lev [ Thu Apr 17, 2014 3:48 pm ]
Post subject:  Re: Области пустоты в окне.

Позволит ли новый функционал не рисовать на правой и нижней рамках окна битмапы-тексты-кнопки-..., или лучше этим отдельно заняться?

Author:  Mario_r4 [ Thu Apr 17, 2014 4:00 pm ]
Post subject:  Re: Области пустоты в окне.

lev wrote:
Позволит ли новый функционал не рисовать на правой и нижней рамках окна битмапы-тексты-кнопки-..., или лучше этим отдельно заняться?

Я не понял суть идеи. Можно в виде рисунка изложить?

Page 1 of 2 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/