Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Dec 10, 2019 2:43 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 445 posts ]  Go to page 1 2 3 4 530 Next
Author Message
PostPosted: Tue Sep 14, 2010 10:30 pm 
Занимаясь прикручиванием 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. Я могу и сам попробовать сделать, но дизайнер из меня не важный, да и время отнимает. Можно даже несколько наборов иконок сделать и положить их потом в архив дистрибутива, чтобы пользователю было из чего выбирать, также как например со скинами окошек.


Top
   
PostPosted: Tue Sep 14, 2010 10:48 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
32-х битные иконки - это здорово!
Думаю, можно невозбранно взять свободный набор иконок. Например, oxygen (по лицензиям gpl или ccsa).
А можно и самим нарисовать. В конце концов, теперь не нужно будет ограничиваться 256 цветами для всех иконок, и поэтому наборы иконок будет делать гораздо проще.
Готов предложить свою посильную помощь :)


Top
   
PostPosted: Tue Sep 14, 2010 10:59 pm 
Offline
User avatar

Joined: Sat Mar 04, 2006 12:53 am
Posts: 221
в гимпе не силён... на фотошопе попробую нарисовать чё-нить


Top
   
PostPosted: Wed Sep 15, 2010 12:04 am 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Думаю что для рисования иконок удобно использовать программу Inkscape http://ru.wikipedia.org/wiki/Inkscape . Ее я использовал для рисования игры Nu_pogodi. Она создает изображения в векторном формате, которые можно экспортировать в png (с прозрачностью). Могу в случае необходимости нарисовать иконку по образцу, дизайнер из меня слабый.
Векторные редакторы при изменении размеров какраз то что нужно, в отличие от растровых.


Top
   
PostPosted: Wed Sep 15, 2010 7:18 am 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
Mario
возможность использования полноцветных изображений в качестве иконок и возвращение эффекта вращения это ИМХО здорово. а зачем делать ICON однопоточным?


Top
   
PostPosted: Wed Sep 15, 2010 8:41 am 
Рад что тема вызвала живой отклик, жду готовые иконки. :)

Albom
В принципе не обязательно это делать, но с другой стороны у нас только 256 возможных потоков в текущей системе и один из них всегда занят самим ядром. Конечно при нормальной работе исчерпать 255 потоков сложно. В общем нужно подумать.


Top
   
PostPosted: Wed Sep 15, 2010 9:33 am 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Мне кажется, что 255 потоков могут закончиться очень даже быстро... Сейчас в моем linux'е запущено около 160 процессов, хотя не запушен ни десяток шеллов, ни eclipse, ни куча редакторов с множеством внешних фильтров.
Я конечно понимаю, что понятие "unixway" к Колибри неприменимо.
Но 30 процессов на иконки - это как-то многовато...


Top
   
PostPosted: Wed Sep 15, 2010 9:55 am 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Наборк иконок из всем известной GNOME. Для любителей.
http://www.iconspedia.com/dload.php?up_id=60229
Под лицензией GPL, в архиве список авторов и иконки 32x32, 48x48 и 64x64


Attachments:
Gnome-Accessories-Text-Editor-32.png
Gnome-Accessories-Text-Editor-32.png [ 4.62 KiB | Viewed 7044 times ]
Gnome-Accessories-Calculator-32.png
Gnome-Accessories-Calculator-32.png [ 4.8 KiB | Viewed 7044 times ]
Accessories-Dictionary-32.png
Accessories-Dictionary-32.png [ 4.51 KiB | Viewed 7044 times ]
Top
   
PostPosted: Wed Sep 15, 2010 10:11 am 
Спасибо для экспериментов как раз.


Top
   
PostPosted: Wed Sep 15, 2010 10:24 am 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Мне подумалось... Один поток - одно окно?
То есть запуск программы иконкой приведет к "всплыванию" всех иконок над окнами. Правильно понимаю?


Top
   
PostPosted: Wed Sep 15, 2010 10:47 am 
Если не исхитрятся и делать обычными методами, то да. Я пока не придумал как это можно сделать.


Top
   
PostPosted: Wed Sep 15, 2010 12:10 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
На сколько знаю можно же рисовать на фоновом изображении через системный вызов? Тогда получится что иконки всегда будут находиться на самом нижнем слое. Конечно это вызывает немного другие проблемы - удаление иконки (придется перерисовать оригинальный фон и все иконки без нее), и вторая проблема - возможное всплывание прозрачных (невидимых) областей иконок.


Top
   
PostPosted: Wed Sep 15, 2010 12:24 pm 
Там есть определенные траблы - мы рисуем на фоновом изображении, а не на самом экране. Соответственно это возможно лишь в случае когда картинка один к одному с экраном и режим черепица. В остальных случаях иконки будут либо продублированы, либо растянуты.


Top
   
PostPosted: Wed Sep 15, 2010 1:13 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1358
Veliant wrote:
На сколько знаю можно же рисовать на фоновом изображении через системный вызов?


В принципе можно рисовать поверх всего и без системного вызова, прямо во фреймбуфер, доступ к которому всегда открыт - через сегментный регистр GS.

Хотя лично мне идея отрисовки иконок из отдельного приложения не нравится.
Этим должно заниматься ядро, а "менеджер иконок" мог бы лишь менять дефолтные настройки посредством редактирования системной базы данных
Code:
application_name | application_path | icon_bmp | icon_coords

_________________
Узкий специалист подобен флюсу: полнота его - односторонняя.
Козьма Прутков


Last edited by art_zh on Wed Sep 15, 2010 1:17 pm, edited 1 time in total.

Top
   
PostPosted: Wed Sep 15, 2010 1:17 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Mario

Надо добавить два новых вызова. Первый для отрисовки в пределах рабочего стола с двумя опциями - перед всеми окнами и за всеми окнами.

Это позволит сделать отрисовку всех иконок в один поток и перетаскивание иконок c отрисовкой.

Второй вызов - тест на принадлежность точки на экране, чтобы при клике мышкой проверить что под курсором - фоновый рисунок/иконка или окно программы.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 445 posts ]  Go to page 1 2 3 4 530 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited