Page 10 of 30
Re: Icon - менеджер иконок рабочего стола
Posted: Sun Jun 09, 2013 8:05 pm
by GerdtR
Вот моя версия icon(от предыдущего осталось только код загрузки iconstrp). Можно указывать путь и параметры в 256 символов. Имя 11 символов. Не оптимизирован, правда. Можно перетаскивать иконки(во время перетаскивания она не рисуется, т. е. видна только мышь, без иконки под ней). Писал так, что бы можно было поменять размер иконок. Например, на скрине иконки 48х48. Но это меняется через константу в исходниках. Не совместим с @rb(она просто заменяет его). Можно помещать иконки в любую точку стола(можно выравнивать). Глюков много, правда, и ещё не всё реализовано. Например в поле "Иконка" при создании приходится в ручную вводить номер(считается с нуля, но это первым делом исправлю). Ещё попробую добавить возможность выбора иконок с ico с любого места. Старый Icons.dat не подходит. В архив положил свой icons.dat и свой iconstrp.png, хоть часть иконок работать не будет, так хоть нарисует нормально, посмотреть можно. И ещё не проверяется, есть ли заявленная иконка, потому если ошибиться с номером, то слетает(приходится восстанавливать прошлый icons.dat).
Re: Icon - менеджер иконок рабочего стола
Posted: Sun Jun 09, 2013 8:48 pm
by GerdtR
И ещё. Как уже писал при перетаскивании видна только мышь, без иконки под ней. А хотелось бы. Пробовал сразу рисовать её на фоне, но получалось жуткое мельтешение. Делал по алгоритму восстановил фон под прошлой позицией иконки, нарисовал все иконки кроме перетаскиваемой, нарисовал перетаскиваемую в позиции мыши. Но это очень медленно. Пробовал при начале перетаскивания создавать окно под мышью заменяющую иконку, но то ли сам напортачил, то ли ещё что-то, но окно появлялось только после отпускания кнопки мыши. Нужны идеи.
Re: Icon - менеджер иконок рабочего стола
Posted: Sun Jun 09, 2013 9:11 pm
by Mario_r4
Распаковал архив, закинул программу, иконки и dat-файл в образ 3627. При запуске в Qemu 0.12.2 получаю:
Spoiler:

-
icon_pf.png (22.84 KiB)
Viewed 3411 times
Запуск из RUN - то же самое.
З.Ы. Соглашаюсь с автором:
Spoiler:
GerdtR wrote:Глюков много, правда, и ещё не всё реализовано.
Re: Icon - менеджер иконок рабочего стола
Posted: Sun Jun 09, 2013 9:25 pm
by GerdtR
Ясно, поправлю.
Re: Icon - менеджер иконок рабочего стола
Posted: Sun Jun 09, 2013 10:00 pm
by SoUrcerer
А почему бы не рисовать рамку при перетаскивании? Как реализовано перетаскивание при развернутых окнах? Ну и т.д.
Очень много вопросов - не к реализации, а к концепту drag&drop.
Re: Icon - менеджер иконок рабочего стола
Posted: Sun Jun 09, 2013 10:07 pm
by GerdtR
Mario_r4, у Вас прога не нашла icons.dat . Поправил, теперь если не нашла, то на доску отладки сообщает и выходит. Ничего не делал на случай, если ещё иконок нет.
Re: Icon - менеджер иконок рабочего стола
Posted: Sun Jun 09, 2013 10:40 pm
by Mario_r4
GerdtR wrote:Mario_r4, у Вас прога не нашла icons.dat .
Собственно почему не нашла? Я все три файла в корень рамдиска закинул.
Re: Icon - менеджер иконок рабочего стола
Posted: Sun Jun 09, 2013 11:26 pm
by GerdtR
Не знаю. Вот поправил. Если не нашла, то создаёт. Теперь нормально работает, если файла нет вообще или нет созданных иконок. Можно удалять все иконки до конца(раньше все, кроме последней (случайность из-за которой не увидел ещё кучу багов

)).
SoUrcerer, наверное так и сделаю. Остаётся понять, что делать, если иконку перетащить на окно. Рамка-то рисоваться будет. Сворачивать все окна что ли

.
Re: Icon - менеджер иконок рабочего стола
Posted: Mon Jun 10, 2013 1:04 am
by Mario_r4
GerdtR wrote:Пробовал сразу рисовать её на фоне, но получалось жуткое мельтешение. Делал по алгоритму восстановил фон под прошлой позицией иконки, нарисовал все иконки кроме перетаскиваемой, нарисовал перетаскиваемую в позиции мыши. Но это очень медленно. Пробовал при начале перетаскивания создавать окно под мышью заменяющую иконку, но то ли сам напортачил, то ли ещё что-то, но окно появлялось только после отпускания кнопки мыши. Нужны идеи.
1. Даю подсказку - сядь на досуге и подумай, почему в текущем ICON два потока.
2. Окно естественно не будет рисоваться до отпуская клавиши - так работает код в ядре и это правильно, во время перетаскивания должна рисоваться рамка.
3. При пересечении новых и старых координат иконки (а это вероятно будет в 99% случаев), можно вычислять 2 прямоугольника, которые требуется восстановить и это будет быстрее, чем восстанавливать всю область. Проблемы начнутся когда по тем же координатам попадется другая иконка.
Re: Icon - менеджер иконок рабочего стола
Posted: Mon Jun 10, 2013 1:07 am
by GerdtR
Что бы перерисовка не зависела от действий мыши?
В этой версии можно при создании и изменении иконки кликать по картинкам. Поле автоматически заполнится.
Re: Icon - менеджер иконок рабочего стола
Posted: Mon Jun 10, 2013 1:15 am
by Mario_r4
Я там в пост дописал кое-чего.
З.Ы. Кстати, раз уж отказался от старого icon.dat, то зачем изобретать собственный формат, если есть LibINI.obj
З.З.Ы. Сравнил тут размер потребляемой памяти - текущий Icon потребляет в запущенном виде - 184 Кб, а новый - 276 Кб. Даже с учетом замены @RB, который в ассемблерном варианте помещается в 4 Кб (тот который в ночной сборке написан на C--), получается немалый прирост. На фоне ЯВУ программ разумеется не смертельно, но мне почему-то думается, что если посмотреть код, то можно оптимизировать.
Re: Icon - менеджер иконок рабочего стола
Posted: Mon Jun 10, 2013 2:38 am
by GerdtR
А я сразу написал, что не оптимизирован

А по поводу формата, то мой меньше места занимает

Вот. А если серьёзно, то уже лень переделывать, а потери в размере кода не большие.
А окно хотел передвигать с помощью сисфункции вслед за мышью, но что-то не нравится мне это

Рамка выглядит проще. Осталось понять, как её рисовать. Типа так: прочитать цвет точки фона, инвертировать, нарисовать, и так для всего квадрата? Ну и затереть предыдущий квадрат таким же кодом. Что-то медленно, кажется. Хотя это побыстрее, чем стирать/рисовать иконку.
PS: Забыл упомянуть. В последней версии поправил баг при неправильной иконке. Если её не существует, то берётся самая первая.
Re: Icon - менеджер иконок рабочего стола
Posted: Mon Jun 10, 2013 3:57 am
by GerdtR
Так и не понял чего так моя прога много памяти ест. Поптимизировал... теперь съедает 270336 байт

Не ахти. Ну ещё надо учитывать мой увеличенный iconstrp.png. Там иконок побольше, 37(итого 32*32*4*37=151552). Хотя всё равно не вижу, что так кушает.
Re: Icon - менеджер иконок рабочего стола
Posted: Tue Jun 11, 2013 12:10 am
by GerdtR
Мда, рамка не очень проще. Для того, что бы нарисовать рамку надо после изменения фона его перерисовать(я так понимаю достаточно перерисовать только фон под рамкой). А это вновь поднимает вопрос о пересечении с другими иконками. Слишком медленный код получается. Очень много рисования. Хорошо, что я сохранил пробную версию с созданием окна... Попробую создавать окно в другом потоке и перемещать его за мышью. В худшем случае будет отставание окна от мыши. Вроде не страшно...
Re: Icon - менеджер иконок рабочего стола
Posted: Sun Jun 16, 2013 11:53 pm
by GerdtR
Всё-таки окно запустил. В результате жуткое мигание окон, если мышь над ним и если иконка с прозрачностью, то видны артефакты. Плюс ещё надо добавит перерисовку иконок, если окно их задело. Тоже не вариант. Всё ещё нужны идеи. Хм, вроде же как-то можно рисовать прямо на экране? Сразу в видеопамять. Или нельзя? Читать же можно через [gs: (y*xsize+x)*4] ?