Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вт июл 25, 2017 9:29 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 19 сообщений ]  На страницу 1 2 След.
Автор Сообщение
 Заголовок сообщения: Области пустоты в окне.
СообщениеДобавлено: Ср апр 16, 2014 7:53 pm 
Не в сети
Kernel Developer

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

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

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

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

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

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Ср апр 16, 2014 8:08 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3927
Mario_r4
И что будет с Fplay и другими программами, которые сами всё рисуют ?


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Ср апр 16, 2014 10:11 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4092
Идея отличная.

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

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Ср апр 16, 2014 11:47 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Serge писал(а):
И что будет с Fplay и другими программами, которые сами всё рисуют ?

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

Да.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Чт апр 17, 2014 12:43 am 
Не в сети
Kernel Developer

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

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


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Чт апр 17, 2014 1:01 am 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Serge писал(а):
Ничего не происходит. Ядро про акселерацию не знает.

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

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

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

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

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

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Чт апр 17, 2014 10:02 am 
Не в сети
Kernel Developer

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


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Чт апр 17, 2014 10:18 am 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Serge писал(а):
Я про исходники. Множественное отсечение вообще не подарок. GDI и X server делают CombineRgn(RGN_DIFF) и рисуют оставшиеся прямоугольники. Так же и с отрисовкой курсора. Каждый пиксель не проверяют.

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

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Чт апр 17, 2014 10:26 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3927
Будешь каждый пиксель на отсечение проверять ?


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Чт апр 17, 2014 11:02 am 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Serge писал(а):
Будешь каждый пиксель на отсечение проверять ?

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

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Чт апр 17, 2014 11:27 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
А почему не поручить заливку boxlib?


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Чт апр 17, 2014 11:51 am 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
Извините, что влезаю в дискуссию, помимо "Setup" эту заливку использует "Арканойд v 0.3" - это чтобы не забыть поправить потом.


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Чт апр 17, 2014 12:42 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
SoUrcerer писал(а):
А почему не поручить заливку boxlib?

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

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

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

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Чт апр 17, 2014 3:48 pm 
Не в сети

Зарегистрирован: Вт окт 05, 2010 6:05 pm
Сообщения: 176
Позволит ли новый функционал не рисовать на правой и нижней рамках окна битмапы-тексты-кнопки-..., или лучше этим отдельно заняться?


Вернуться к началу
 Заголовок сообщения: Re: Области пустоты в окне.
СообщениеДобавлено: Чт апр 17, 2014 4:00 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
lev писал(а):
Позволит ли новый функционал не рисовать на правой и нижней рамках окна битмапы-тексты-кнопки-..., или лучше этим отдельно заняться?

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

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 19 сообщений ]  На страницу 1 2 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB