Icon - менеджер иконок рабочего стола
-
Вот моя версия icon(от предыдущего осталось только код загрузки iconstrp). Можно указывать путь и параметры в 256 символов. Имя 11 символов. Не оптимизирован, правда. Можно перетаскивать иконки(во время перетаскивания она не рисуется, т. е. видна только мышь, без иконки под ней). Писал так, что бы можно было поменять размер иконок. Например, на скрине иконки 48х48. Но это меняется через константу в исходниках. Не совместим с @rb(она просто заменяет его). Можно помещать иконки в любую точку стола(можно выравнивать). Глюков много, правда, и ещё не всё реализовано. Например в поле "Иконка" при создании приходится в ручную вводить номер(считается с нуля, но это первым делом исправлю). Ещё попробую добавить возможность выбора иконок с ico с любого места. Старый Icons.dat не подходит. В архив положил свой icons.dat и свой iconstrp.png, хоть часть иконок работать не будет, так хоть нарисует нормально, посмотреть можно. И ещё не проверяется, есть ли заявленная иконка, потому если ошибиться с номером, то слетает(приходится восстанавливать прошлый icons.dat).
- Attachments
-
-
icon.zip (123.87 KiB)Downloaded 170 times
-
IC48.JPG (198.91 KiB)Viewed 3432 times
-
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
И ещё. Как уже писал при перетаскивании видна только мышь, без иконки под ней. А хотелось бы. Пробовал сразу рисовать её на фоне, но получалось жуткое мельтешение. Делал по алгоритму восстановил фон под прошлой позицией иконки, нарисовал все иконки кроме перетаскиваемой, нарисовал перетаскиваемую в позиции мыши. Но это очень медленно. Пробовал при начале перетаскивания создавать окно под мышью заменяющую иконку, но то ли сам напортачил, то ли ещё что-то, но окно появлялось только после отпускания кнопки мыши. Нужны идеи.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Распаковал архив, закинул программу, иконки и dat-файл в образ 3627. При запуске в Qemu 0.12.2 получаю:
Запуск из RUN - то же самое.
З.Ы. Соглашаюсь с автором:
Spoiler:
З.Ы. Соглашаюсь с автором:
Spoiler:
GerdtR wrote:Глюков много, правда, и ещё не всё реализовано.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Ясно, поправлю.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
А почему бы не рисовать рамку при перетаскивании? Как реализовано перетаскивание при развернутых окнах? Ну и т.д.
Очень много вопросов - не к реализации, а к концепту drag&drop.
Очень много вопросов - не к реализации, а к концепту drag&drop.
Mario_r4, у Вас прога не нашла icons.dat . Поправил, теперь если не нашла, то на доску отладки сообщает и выходит. Ничего не делал на случай, если ещё иконок нет.
- Attachments
-
-
ICON (2.99 KiB)Downloaded 172 times
-
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Собственно почему не нашла? Я все три файла в корень рамдиска закинул.GerdtR wrote:Mario_r4, у Вас прога не нашла icons.dat .
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Не знаю. Вот поправил. Если не нашла, то создаёт. Теперь нормально работает, если файла нет вообще или нет созданных иконок. Можно удалять все иконки до конца(раньше все, кроме последней (случайность из-за которой не увидел ещё кучу багов
)).
SoUrcerer, наверное так и сделаю. Остаётся понять, что делать, если иконку перетащить на окно. Рамка-то рисоваться будет. Сворачивать все окна что ли
.
SoUrcerer, наверное так и сделаю. Остаётся понять, что делать, если иконку перетащить на окно. Рамка-то рисоваться будет. Сворачивать все окна что ли
- Attachments
-
-
icon.zip (39.94 KiB)Downloaded 177 times
-
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
1. Даю подсказку - сядь на досуге и подумай, почему в текущем ICON два потока.GerdtR wrote:Пробовал сразу рисовать её на фоне, но получалось жуткое мельтешение. Делал по алгоритму восстановил фон под прошлой позицией иконки, нарисовал все иконки кроме перетаскиваемой, нарисовал перетаскиваемую в позиции мыши. Но это очень медленно. Пробовал при начале перетаскивания создавать окно под мышью заменяющую иконку, но то ли сам напортачил, то ли ещё что-то, но окно появлялось только после отпускания кнопки мыши. Нужны идеи.
2. Окно естественно не будет рисоваться до отпуская клавиши - так работает код в ядре и это правильно, во время перетаскивания должна рисоваться рамка.
3. При пересечении новых и старых координат иконки (а это вероятно будет в 99% случаев), можно вычислять 2 прямоугольника, которые требуется восстановить и это будет быстрее, чем восстанавливать всю область. Проблемы начнутся когда по тем же координатам попадется другая иконка.
Last edited by Mario_r4 on Mon Jun 10, 2013 1:15 am, edited 1 time in total.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Что бы перерисовка не зависела от действий мыши?
В этой версии можно при создании и изменении иконки кликать по картинкам. Поле автоматически заполнится.
В этой версии можно при создании и изменении иконки кликать по картинкам. Поле автоматически заполнится.
- Attachments
-
-
icon.zip (40.33 KiB)Downloaded 184 times
-
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Я там в пост дописал кое-чего.
З.Ы. Кстати, раз уж отказался от старого icon.dat, то зачем изобретать собственный формат, если есть LibINI.obj
З.З.Ы. Сравнил тут размер потребляемой памяти - текущий Icon потребляет в запущенном виде - 184 Кб, а новый - 276 Кб. Даже с учетом замены @RB, который в ассемблерном варианте помещается в 4 Кб (тот который в ночной сборке написан на C--), получается немалый прирост. На фоне ЯВУ программ разумеется не смертельно, но мне почему-то думается, что если посмотреть код, то можно оптимизировать.
З.Ы. Кстати, раз уж отказался от старого icon.dat, то зачем изобретать собственный формат, если есть LibINI.obj
З.З.Ы. Сравнил тут размер потребляемой памяти - текущий Icon потребляет в запущенном виде - 184 Кб, а новый - 276 Кб. Даже с учетом замены @RB, который в ассемблерном варианте помещается в 4 Кб (тот который в ночной сборке написан на C--), получается немалый прирост. На фоне ЯВУ программ разумеется не смертельно, но мне почему-то думается, что если посмотреть код, то можно оптимизировать.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
А я сразу написал, что не оптимизирован
А по поводу формата, то мой меньше места занимает
Вот. А если серьёзно, то уже лень переделывать, а потери в размере кода не большие.
А окно хотел передвигать с помощью сисфункции вслед за мышью, но что-то не нравится мне это
Рамка выглядит проще. Осталось понять, как её рисовать. Типа так: прочитать цвет точки фона, инвертировать, нарисовать, и так для всего квадрата? Ну и затереть предыдущий квадрат таким же кодом. Что-то медленно, кажется. Хотя это побыстрее, чем стирать/рисовать иконку.
PS: Забыл упомянуть. В последней версии поправил баг при неправильной иконке. Если её не существует, то берётся самая первая.
А окно хотел передвигать с помощью сисфункции вслед за мышью, но что-то не нравится мне это
PS: Забыл упомянуть. В последней версии поправил баг при неправильной иконке. Если её не существует, то берётся самая первая.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Так и не понял чего так моя прога много памяти ест. Поптимизировал... теперь съедает 270336 байт
Не ахти. Ну ещё надо учитывать мой увеличенный iconstrp.png. Там иконок побольше, 37(итого 32*32*4*37=151552). Хотя всё равно не вижу, что так кушает.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Мда, рамка не очень проще. Для того, что бы нарисовать рамку надо после изменения фона его перерисовать(я так понимаю достаточно перерисовать только фон под рамкой). А это вновь поднимает вопрос о пересечении с другими иконками. Слишком медленный код получается. Очень много рисования. Хорошо, что я сохранил пробную версию с созданием окна... Попробую создавать окно в другом потоке и перемещать его за мышью. В худшем случае будет отставание окна от мыши. Вроде не страшно...
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Всё-таки окно запустил. В результате жуткое мигание окон, если мышь над ним и если иконка с прозрачностью, то видны артефакты. Плюс ещё надо добавит перерисовку иконок, если окно их задело. Тоже не вариант. Всё ещё нужны идеи. Хм, вроде же как-то можно рисовать прямо на экране? Сразу в видеопамять. Или нельзя? Читать же можно через [gs: (y*xsize+x)*4] ?
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Who is online
Users browsing this forum: No registered users and 5 guests