Board.KolibriOS.org http://board.kolibrios.org/ |
|
Icon - менеджер иконок рабочего стола http://board.kolibrios.org/viewtopic.php?f=48&t=1515 |
Page 1 of 30 |
Author: | Mario [ Tue Sep 14, 2010 10:30 pm ] |
Post subject: | Icon - менеджер иконок рабочего стола |
Занимаясь прикручиванием OpenDialog к приложениям, дошла очередь и до приложения Icon. Я думал просто прикрутить к приложению OpenDialog, но посмотрев на размер занимаемый программой в памяти (более 600 Кб) я полез смотреть код и честно говоря он мне не очень нравится. В свое время менеджер иконок был объединен с собственно самой программой ради экономии пространства на рамдиске. Такое объединение вылилось в распухание кода. К тому же в приложении используется статичное выделение памяти - т.е. надо или не надо но 600 килобайт будут потрачены. Хотя если прикинуть при текущем максимальном количестве иконок в 48 штук (кстати сказать их реально используется еще меньше - около 27), максимальные потребности памяти в структурах данных такие: 48*32*32*4 (4 байта = 32 бита = 24 бита цвет и 8 бит альфа-канал) = 192 Кб + 4 Кб (выводимый буфер в котором фон смешивается с самой иконкой учитывая альфа-канал) = 196 Кб. Это собственно на данные. Еще если прикинуть размер занимаемый OpenDialog в памяти (учитывая все загруженные библиотеки) 152 Кб, но Icon не будет содержать менеджер иконок, а это значит минус Box_Lib. Пусть для самого худшего случая будет 100 Кб. Далее на каждую иконку будем динамически выделять стек (не важно мультипоточный или не мультипоточный Icon - промежуточные данные все равно нужно где-то хранить) в 4 Кб, потому что менеджер памяти ядра меньше не может выделить из-за архитектурных особенностей центрального процессора. 48*4=192 Кб. Итого получаем размер 192+100+192=484 Кб и это в самом худшем случае, когда присутствуют все 48 иконок. При 27 иконках будет 192+100+108=400 Кб. В любом случае меньше текущего Icon. Но это опять же наихудший прогноз, скорее всего память будет потребляться еще меньше. Из возможных плюсов новой реализации: 1) Иконки глубиной цвета в 24 бита и альфа каналом, пожатые в PNG, который к слову сжимает в большинстве случаев лучше чем GIF. 2) Можно сделать регулируемым размер иконок. Какие пользователь положил, такие система и выведет. Разумеется в разумных пределах - иконки 128*128 могут попросту не влезть на рамдиск.. 3) Можно вернуть эффект вращения иконок и сделать его опциональным. Это потребует около 8 Кб на данные вращающейся иконки при размере 32*32. 4) Можно попытаться реализовать все в одном потоке - хотя это очень непросто с текущими возможностями ядра. Собственно мне нужна помощь в подборе полноцветных иконок и подготовка их в формате 24+8 бит. Такое можно сделать например в Gimp. Я могу и сам попробовать сделать, но дизайнер из меня не важный, да и время отнимает. Можно даже несколько наборов иконок сделать и положить их потом в архив дистрибутива, чтобы пользователю было из чего выбирать, также как например со скинами окошек. |
Author: | SoUrcerer [ Tue Sep 14, 2010 10:48 pm ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
32-х битные иконки - это здорово! Думаю, можно невозбранно взять свободный набор иконок. Например, oxygen (по лицензиям gpl или ccsa). А можно и самим нарисовать. В конце концов, теперь не нужно будет ограничиваться 256 цветами для всех иконок, и поэтому наборы иконок будет делать гораздо проще. Готов предложить свою посильную помощь ![]() |
Author: | Aqwas [ Tue Sep 14, 2010 10:59 pm ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
в гимпе не силён... на фотошопе попробую нарисовать чё-нить |
Author: | IgorA [ Wed Sep 15, 2010 12:04 am ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
Думаю что для рисования иконок удобно использовать программу Inkscape http://ru.wikipedia.org/wiki/Inkscape . Ее я использовал для рисования игры Nu_pogodi. Она создает изображения в векторном формате, которые можно экспортировать в png (с прозрачностью). Могу в случае необходимости нарисовать иконку по образцу, дизайнер из меня слабый. Векторные редакторы при изменении размеров какраз то что нужно, в отличие от растровых. |
Author: | Albom [ Wed Sep 15, 2010 7:18 am ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
Mario возможность использования полноцветных изображений в качестве иконок и возвращение эффекта вращения это ИМХО здорово. а зачем делать ICON однопоточным? |
Author: | Mario [ Wed Sep 15, 2010 8:41 am ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
Рад что тема вызвала живой отклик, жду готовые иконки. ![]() Albom В принципе не обязательно это делать, но с другой стороны у нас только 256 возможных потоков в текущей системе и один из них всегда занят самим ядром. Конечно при нормальной работе исчерпать 255 потоков сложно. В общем нужно подумать. |
Author: | SoUrcerer [ Wed Sep 15, 2010 9:33 am ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
Мне кажется, что 255 потоков могут закончиться очень даже быстро... Сейчас в моем linux'е запущено около 160 процессов, хотя не запушен ни десяток шеллов, ни eclipse, ни куча редакторов с множеством внешних фильтров. Я конечно понимаю, что понятие "unixway" к Колибри неприменимо. Но 30 процессов на иконки - это как-то многовато... |
Author: | SoUrcerer [ Wed Sep 15, 2010 9:55 am ] | ||||
Post subject: | Re: Icon - менеджер иконок рабочего стола | ||||
Наборк иконок из всем известной GNOME. Для любителей. http://www.iconspedia.com/dload.php?up_id=60229 Под лицензией GPL, в архиве список авторов и иконки 32x32, 48x48 и 64x64
|
Author: | Mario [ Wed Sep 15, 2010 10:11 am ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
Спасибо для экспериментов как раз. |
Author: | SoUrcerer [ Wed Sep 15, 2010 10:24 am ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
Мне подумалось... Один поток - одно окно? То есть запуск программы иконкой приведет к "всплыванию" всех иконок над окнами. Правильно понимаю? |
Author: | Mario [ Wed Sep 15, 2010 10:47 am ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
Если не исхитрятся и делать обычными методами, то да. Я пока не придумал как это можно сделать. |
Author: | Veliant [ Wed Sep 15, 2010 12:10 pm ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
На сколько знаю можно же рисовать на фоновом изображении через системный вызов? Тогда получится что иконки всегда будут находиться на самом нижнем слое. Конечно это вызывает немного другие проблемы - удаление иконки (придется перерисовать оригинальный фон и все иконки без нее), и вторая проблема - возможное всплывание прозрачных (невидимых) областей иконок. |
Author: | Mario [ Wed Sep 15, 2010 12:24 pm ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
Там есть определенные траблы - мы рисуем на фоновом изображении, а не на самом экране. Соответственно это возможно лишь в случае когда картинка один к одному с экраном и режим черепица. В остальных случаях иконки будут либо продублированы, либо растянуты. |
Author: | art_zh [ Wed Sep 15, 2010 1:13 pm ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
Veliant wrote: На сколько знаю можно же рисовать на фоновом изображении через системный вызов? В принципе можно рисовать поверх всего и без системного вызова, прямо во фреймбуфер, доступ к которому всегда открыт - через сегментный регистр GS. Хотя лично мне идея отрисовки иконок из отдельного приложения не нравится. Этим должно заниматься ядро, а "менеджер иконок" мог бы лишь менять дефолтные настройки посредством редактирования системной базы данных Code: application_name | application_path | icon_bmp | icon_coords |
Author: | Serge [ Wed Sep 15, 2010 1:17 pm ] |
Post subject: | Re: Icon - менеджер иконок рабочего стола |
Mario Надо добавить два новых вызова. Первый для отрисовки в пределах рабочего стола с двумя опциями - перед всеми окнами и за всеми окнами. Это позволит сделать отрисовку всех иконок в один поток и перетаскивание иконок c отрисовкой. Второй вызов - тест на принадлежность точки на экране, чтобы при клике мышкой проверить что под курсором - фоновый рисунок/иконка или окно программы. |
Page 1 of 30 | All times are UTC+03:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |