Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт июн 22, 2018 4:08 pm

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




Начать новую тему  Ответить на тему  [ 444 сообщения ]  На страницу Пред. 1 2 3 4 530 След.
Автор Сообщение
СообщениеДобавлено: Ср сен 15, 2010 6:02 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3948
art_zh писал(а):
новые системные вызовы, предложенные Serge'м, фактически подразумевают внос "иконного" :wink: сервиса в ядро.


Нет, это скорее расширениe графических возможностей.

1. Регистр GS уже давно не нужен. Видеопамять мапится по адресу 0xFE000000. Я не вижу большого криминала в возможости для приложения рисовать по всему экрану, хотя это усложняет работу композитного менеджера. Но у нас нет композитного менеджера.

Mario

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

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


Вернуться к началу
СообщениеДобавлено: Ср сен 15, 2010 6:15 pm 
Serge
Я конечно уважаю твое мнение и заинтересованность, но давай вспомним как мы почти год назад обсуждали буфер обмена и где сейчас поезд? :lol:
Больной кстати по прежнему лежит и ждет - какую ногу ему отрежут...

У меня есть свои идеи и я готов реализовывать свои идеи. Да, на взгляд стороннего наблюдателя они могут быть не самыми оптимальными - но это мои идеи и я для начала хотя бы представляю как это реализовать.

Между тем мне очередной раз предлагается реализовать чьи-то идеи. Реализацию которых еще предстоит значительное время осмысливать - потому что это не крутилось в моей голове. А чужие мысли не так то просто уложить в свой поток рассуждений.

Учитывая что работаю я исключительно для своего удовольствия (Just for fun), то удовольствия от этого я не получу никакого. А значит моя заинтересованность стремится к нулю.

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

З.Ы. Если ты готов сам реализовать эти сервисы для ядра, то я могу ими воспользоваться, как в свое время воспользовался расшаренными областями - а их кстати и не намечалось, пока я не спросил у тебя об этой возможности. :wink:


Вернуться к началу
   
СообщениеДобавлено: Ср сен 15, 2010 6:35 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3948
Mario

Я предлагал сделать буфер обмена в ядре, потому что это самый простой и надёжный способ. Но другим хотелось расшареной памяти.

В данном сучае предлагается освободить ядро от необязательного для него кода. Причём это не требует переделки оконной системы.


Вернуться к началу
СообщениеДобавлено: Ср сен 15, 2010 6:37 pm 
Еще раз для понимания - если ты готов сделать эту работу для ядра, то я могу воспользоваться. В противном случае я буду делать по своему, либо как вариант при значительном недовольстве других - опять ничего не буду делать.


Вернуться к началу
   
СообщениеДобавлено: Ср сен 15, 2010 7:22 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3948
Mario

Легко. Только надо с API определиться.

Для доступа к фону есть ф15.6 и 15.7.

Для вывода картинки использовать ф.65 с модификацией. В старшей половине esi указывать флаги отрисовки или номер слота для проверки.

Для проверки принадлежности пикселя функция, возвращающая значение из WinMapAddress для данной точки.

EDIT.

Есть другой вариант.

calculatescreen заполняет карту WinMap значениями для фонового рисунка.

Код:
;------------------------------------------------------------------------------
calculatescreen: ;/////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
;? Scan all windows from bottom to top, calling `setscreen` for each one
;? intersecting given screen area
;------------------------------------------------------------------------------
;> eax = left
;> ebx = top
;> ecx = right
;> edx = bottom
;------------------------------------------------------------------------------
        push    esi
        pushfd
        cli

        mov     esi, 1
        call    window._.set_screen
Если записать в esi не 1, а номер интересуещого нас слота, этот поток сможет рисовать на месте фоной картинки, что нам и требуется. Поток должен получать от ядра сообщения о необходимости перерисовать фон и сообщение об изменении фона. Для этого можно задействовать get_event, правда придётся работать в отдельном потоке (только отрисовка фона и обработка изменения фона. Никаких окон и пользовательского ввода).


Последний раз редактировалось Serge Ср сен 15, 2010 7:43 pm, всего редактировалось 1 раз.

Вернуться к началу
СообщениеДобавлено: Ср сен 15, 2010 7:38 pm 
Serge
Цитата:
Для доступа к фону есть ф15.6 и 15.7.

А как насчет того, что это будет жрать тем больше памяти, чем больше разрешение.
Например на современных мониторах вполне себе уже стоит разрешение 1920*1080? Это ведь 1920*1080*4=7,91 Мб. Ладно на современных компьютерах не жалко, но допустим на старом компьютере с объемом памяти в 8-12 Мб в текущем ядре можно отвести всего 4 Кб на фоновую картинку. А в новой системе получится 640*480 от 0,8 до 1,2 Мб (в зависимости от глубины цвета) не слишком ли большая жертва?
К тому же использование 15 функции не отменяет твоего-же тезиса о:
Цитата:
Существующий сейчас код выполяет ресемплинг картинки при каждой отрисовке, что не очень оптимально, особенно если работаешь в Боше.

А для вот этого
Цитата:
Для вывода картинки использовать ф.65 с модификацией. В старшей половине esi указывать флаги отрисовки или номер слота для проверки.

теперь еще и придется все программы перетрясти на предмет установки ESI полностью. Может стоит просто задействовать новый номер функции?
Цитата:
Для проверки принадлежности пикселя функция, возвращающая значение из WinMapAddress для данной точки.

И это тоже поместить в новую функцию.


Вернуться к началу
   
СообщениеДобавлено: Ср сен 15, 2010 7:51 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3948
Mario

Если модифицировать calculatescreen (см. выше) то
нет необходимости в изменении ф65, хотя такой вызов и не помешал бы. Да и перерасхода памяти не будет. Полный доступ, рисуй как хочу.


Вернуться к началу
СообщениеДобавлено: Ср сен 15, 2010 8:00 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3948
Итого получаются два новых вызова
set_background_thread() - делает текущий поток ответственным за отрисовку фоновой картинки.
Этот поток получает сообщения если надо перерисовать фоновую картинку.
get_thread_pos(x,y) - возвращает номер слота потока, которому принадлежит верхняя точка экрана с координатами x,y.


Вернуться к началу
СообщениеДобавлено: Ср сен 15, 2010 8:23 pm 
Цитата:
set_background_thread() - делает текущий поток ответственным за отрисовку фоновой картинки.

Т.е. просто переносится код ядра в приложение?
Цитата:
Этот поток получает сообщения если надо перерисовать фоновую картинку.

Как?
Цитата:
get_thread_pos(x,y) - возвращает номер слота потока, которому принадлежит верхняя точка экрана с координатами x,y.

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


Вернуться к началу
   
СообщениеДобавлено: Ср сен 15, 2010 10:30 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3948
1) Да, весь код отрисовки фоновой картинки.
2) Поток выполняет обычный оконный цикл и получает сообщения о перерисовке. Или более перспективный вариант с получением событий через 68.14. Потребуется некоторый допил ядра, зато можно сообщать об изменении фоновой картинки другим приложением.
3)Сейчас все приложения, те же потоки Icon, самостоятельно определяют факт клика и ничего, работают. Ядро здесь совсем не причём.


Вернуться к началу
СообщениеДобавлено: Чт сен 16, 2010 10:08 am 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1292
Еще раз проIMHUю, что менеджеру иконок - место в нулевом круге, а не в третьем.
Вынос его в юзерспейс прорубит еще одну дыру в системной защите.

Но если уж вы так решили, то надо по крайней мере

1) повысить его в звании до десктоп-менеджера, и

2) присвоить ему статус специального процесса (незакрываемого, неперезапускаемого и недуплицируемого).

Иначе будет бардак.


Вернуться к началу
СообщениеДобавлено: Чт сен 16, 2010 10:11 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
art_zh писал(а):
) присвоить ему статус специального процесса (незакрываемого, неперезапускаемого и недуплицируемого)

А если он упадет?

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


Вернуться к началу
СообщениеДобавлено: Чт сен 16, 2010 10:20 am 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1292
Sorcerer писал(а):
art_zh писал(а):
) присвоить ему статус специального процесса (незакрываемого, неперезапускаемого и недуплицируемого)

А если он упадет?


А если его сдуру закроют? :shock:

Или повесят второй (третий, десятый) ?


Вернуться к началу
СообщениеДобавлено: Чт сен 16, 2010 11:02 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Может быть, не всем нужны иконки на рабочем столе.
Бороться с повторными запусками не так уж сложно. Проверка при запуске - а нет ли еще одного процесса с таким же именем? А для перезапуска использовать например параметр "--replace", как в *никсах. Сомневаюсь, что на это способен человек, не знающий, что именно он хочет получить.


Вернуться к началу
СообщениеДобавлено: Чт сен 16, 2010 11:59 am 
Sorcerer
Цитата:
А если он упадет?

Не страшно - просто не будет перерисовываться фон.
Цитата:
Одна хотелка по теме, если вдруг будет желание ее реализовать: подписи под иконками сделать длиннее, чем они могут быть сейчас. Длинные имена система поддерживает, а длинные названия программ - пока что нет :)

Это пожалуй самое простое из задуманного.
Цитата:
Может быть, не всем нужны иконки на рабочем столе.

А кто нам мешает запускать процесс-сервер занимающийся работой с параметром отключающим загрузку иконок или вообще в INI файле прописать.

art_zh
Цитата:
Еще раз проIMHUю, что менеджеру иконок - место в нулевом круге, а не в третьем.
Вынос его в юзерспейс прорубит еще одну дыру в системной защите.

Но если уж вы так решили, то надо по крайней мере

1) повысить его в звании до десктоп-менеджера, и

2) присвоить ему статус специального процесса (незакрываемого, неперезапускаемого и недуплицируемого).

Иначе будет бардак.

Фатального ничего нет, а то что ты предлагаешь требует значительной переделки ядра.
Если готов взяться за такую работу - то никто не запрещает, но чужие идеи желающих реализовывать нет.

Цитата:
А если его сдуру закроют? :shock:

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

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


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

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


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

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


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

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