Встраивание иконок в приложения

All that makes Kolibri beautiful outside while we are working inside
  • JohnXenox wrote:Да и менять иконку(и) не удобно (чуть что, придётся перекомпилировать программу).
    Иконку "меняет" один раз разработчик программы. Пользователю совершенно не зачем этого делать.
    JohnXenox wrote:Ага. производители всего на свете узнали о возможности встраивания иконок в программы Колибри, сразу подорвались, и тут же стали клепать программы для Колибри. :lol: :lol: :lol:
    Я тебе привёл пример, чтобы ты понял. Представь аналогичную ситуацию в больших ОС(разработчики(adobe, mozilla, google ... ) добавляют свои иконки в какой-нибудь png-файл :lol: )
    JohnXenox wrote:JohnXenox писал(а):
    В конце концов, иконку можно хранить рядом с программой, в любом удобном формате (raw, bmp, png и т.д.) - если требуется, в сжатом виде (например, kpack).
    И редактировать удобно, и добавлять-удалять.
    Твой подход предполагает хранение(округление на размер кластера, не забываем), загрузку и распаковку 2-ух файлов. Мой подход — только 1 файл. Ну где больше накладных расходов?
  • 0CodErr wrote:
    JohnXenox wrote:Да и менять иконку(и) не удобно (чуть что, придётся перекомпилировать программу).
    Иконку "меняет" один раз разработчик программы. Пользователю совершенно не зачем этого делать.
    Как это не зачем? А если я нарисовал свой набор иконок, или другие люди, что, теперь каждую программу перекомпилировать, чтобы применить иконки? Или просто иконка не понравилась и я хочу её заменить на другую, опять перекомпилировать? То есть ты за пользователя решил, что ему нужно делать, а что нет?
    0CodErr wrote:
    JohnXenox wrote:В конце концов, иконку можно хранить рядом с программой, в любом удобном формате (raw, bmp, png и т.д.) - если требуется, в сжатом виде (например, kpack).
    И редактировать удобно, и добавлять-удалять.
    Твой подход предполагает хранение(округление на размер кластера, не забываем), загрузку и распаковку 2-ух файлов. Мой подход — только 1 файл. Ну где больше накладных расходов?
    Твой подход не удобен. Мало того, что программа ожиреет и будет тормозить при распаковке, так ещё и редактировать иконки будет невозможно.

    P.S. 0CodErr
    Можешь встраивать иконки в программы, дело твоё, я тебе не запрещаю, но лично я, против встроенных иконок.
    The Glass is Always Half Full! :mrgreen:
  • JohnXenox wrote:Как это не зачем? А если я нарисовал свой набор иконок, или другие люди, что, теперь каждую программу перекомпилировать, чтобы применить иконки? Или просто иконка не понравилась и я хочу её заменить на другую, опять перекомпилировать? То есть ты за пользователя решил, что ему нужно делать, а что нет?
    Лол. Ну окей, как часто ты меняешь иконки в программах? Сколько раз ты за всю свою жизнь поменял? Лично я — раз 5 Restorator-ом и ResourceHacker-ом, и то исключительно ради интереса.
    JohnXenox wrote:программа ожиреет
    То ли иконка внутри, то ли снаружи — от перестановки слагаемых занимаемый размер не изменился бы. Но в случае 2 файлов размер может быть больше, выше я уже говорил про округление на размер кластера.
    Например, иконка 16x16, 256 colors имеет размер 1,37 КБ (1406 байт), но на диске она займёт ровное число кластеров, если кластер 512 байтов, то файл займёт 1536 байтов. Да, в этом случае самое настоящее ожирение.
    JohnXenox wrote:будет тормозить при распаковке
    Ну распаковывать в любом случае, одну иконку распаковать, конечно, быстрее. Можно в принципе хранить в kpack-файлах отдельно сжатую программу и отдельно сжатую иконку. Для индикации этого выставлять дополнительный флаг в заголовке, он это позволяет, сейчас он выглядит так:

    Code: Select all

      TPackedFile = Packed Record
        Signature:    Packed Array [0..3] Of Char; (* 'KPCK' *)
        UnpackedSize: Dword;                       (* size of unpacked data*)
        PackMethod:   Dword;                       (* LZMA, CallTrick, NoCallTrick*)
        PackedData:   Packed Array [0..0] Of Char;
      End;
    Если решать эту проблему таким образом, то без правки ядра(возможно ещё программы kpack) уже не обойтись, там наверняка проверка на невалидные флаги.
    Да, в этом случае даже можно её поменять без перекомпиляции программы. Только я всё равно не понимаю, зачем это делать. Вот, предположим, не понравилась мне иконка автокада и я такой, значит, разворошил экзешник и заменил, например, на иконку от фаерфокса(а чё она красивая же, ну) :lol:
  • 0CodErr wrote:
    JohnXenox wrote:Как это не зачем? А если я нарисовал свой набор иконок, или другие люди, что, теперь каждую программу перекомпилировать, чтобы применить иконки? Или просто иконка не понравилась и я хочу её заменить на другую, опять перекомпилировать? То есть ты за пользователя решил, что ему нужно делать, а что нет?
    Лол. Ну окей, как часто ты меняешь иконки в программах? Сколько раз ты за всю свою жизнь поменял? Лично я — раз 5 Restorator-ом и ResourceHacker-ом, и то исключительно ради интереса.
    Ну, уж точно больше 5 раз. В Linux иногда попадаются иконки не в тему, приходится менять, благо иконок для Линукс нарисовано очень много. Там иконки лежат отдельно, и это очень удобно. А также, пробовал менять иконки в Колибри, на Линуксовые.
    0CodErr wrote:
    JohnXenox wrote:программа ожиреет
    То ли иконка внутри, то ли снаружи — от перестановки слагаемых занимаемый размер не изменился бы. Но в случае 2 файлов размер может быть больше, выше я уже говорил про округление на размер кластера.
    Например, иконка 16x16, 256 colors имеет размер 1,37 КБ (1406 байт), но на диске она займёт ровное число кластеров, если кластер 512 байтов, то файл займёт 1536 байтов. Да, в этом случае самое настоящее ожирение.
    JohnXenox wrote:будет тормозить при распаковке
    Ну распаковывать в любом случае, одну иконку распаковать, конечно, быстрее. Можно в принципе хранить в kpack-файлах отдельно сжатую программу и отдельно сжатую иконку. Для индикации этого выставлять дополнительный флаг в заголовке, он это позволяет, сейчас он выглядит так:

    Code: Select all

      TPackedFile = Packed Record
        Signature:    Packed Array [0..3] Of Char; (* 'KPCK' *)
        UnpackedSize: Dword;                       (* size of unpacked data*)
        PackMethod:   Dword;                       (* LZMA, CallTrick, NoCallTrick*)
        PackedData:   Packed Array [0..0] Of Char;
      End;
    Если решать эту проблему таким образом, то без правки ядра(возможно ещё программы kpack) уже не обойтись, там наверняка проверка на невалидные флаги.
    Да, в этом случае даже можно её поменять без перекомпиляции программы. Только я всё равно не понимаю, зачем это делать. Вот, предположим, не понравилась мне иконка автокада и я такой, значит, разворошил экзешник и заменил, например, на иконку от фаерфокса(а чё она красивая же, ну) :lol:
    Иконку всегда можно удалить, а встроенную проблематично. Свет клином на одном фаерфоксе, не сошёля. Как не крути, а меня, это не устраевает.

    Ещё раз говорю. Делай как тебе нравится, я не запрещаю. Но я, против этого.
    The Glass is Always Half Full! :mrgreen:
  • А вот, как мне кажется, способ не требующий правки ни ядра, ни kpack.
    Распаковщику нужны только указатели на данные и буфер.
    Процедура UnPack объявлена так:

    Code: Select all

    Procedure UnPack(Const Src; Var Dst); StdCall; External;
    То есть, можно что-то дополнительно записать после сжатого файла программы.
    Поэтому, можем считать, если в самом конце файла сигнатура ICON, то файл содержит в конце себя иконку. Загружать в память полностью весь файл не требуется.
    А можно расширить: сигнатура RSRC, количество ресурсов, их тип(в том числе ICON), ну и т.п.
    JohnXenox wrote:Иконку всегда можно удалить, а встроенную проблематично.
    Я понять не могу, зачем тебе трогать вообще встроенную иконку???
    Для того, чтобы она тебе не понравилась, ты её где-то видеть должен. Иконку этой программы ты можешь обычно наблюдать в панелях запуска или на рабочем столе(ну или в фм, но там показывается ровно то, что создал разработчик, ни больше — ни меньше, так что в фм всё правильно), если не нравится встроенная иконка на панелях — меняешь в настройках панели на другую.
    А то может у меня этих панелей штук 20 и для каждой я хочу разную иконку(почему нет?).
    В том числе, могу хотеть иконку, поставляемую самим разработчиком.
    Ещё раз повторюсь, иконка программы — принадлежит самой этой программе, а на рабочем столе и в панелях запуска можно вообще выбирать что-угодно, даже бывают анимированные иконки(в Menuet32, кстати, раньше была анимация иконок, может и в первых версиях KolibriOS была — не помню уже).
  • 0CodErr wrote:Я понять не могу, зачем тебе трогать вообще встроенную иконку???
    Может не понравится. Может быть не в тему. Может нарисую свой набор иконок. Или возьму готовый набор, который мне нравится (из того же Линукса). Или захочу вообще, форк сделать, со своим оформлением. Случаи бываю разные.
    0CodErr wrote:Для того, чтобы она тебе не понравилась, ты её где-то видеть должен. Иконку этой программы ты можешь обычно наблюдать в панелях запуска или на рабочем столе(ну или в фм, но там показывается ровно то, что создал разработчик, ни больше — ни меньше, так что в фм всё правильно), если не нравится встроенная иконка на панелях — меняешь в настройках панели на другую.
    В Линукс, в основном отображаются иконки из общего набора, а если нет в наборе, то из папки этой программы, и это очень удобно. Да и ВиндовсХП, многие встроенные иконки не использовались, висели мёртвым грузом (как сейчас - не знаю) (там какой-то файл был с набором иконок (забыл, как называетс)).
    Так же и в Колибри, встроенные мконки будут висеть мертвым грузом. А не встроенные, можно удалить, и использовать иконку(и) из общего набора иконок. Экономится место и распаковка программы быстрее.
    0CodErr wrote:А то может у меня этих панелей штук 20 и для каждой я хочу разную иконку(почему нет?).
    Так, никто не запрещает.
    0CodErr wrote:В том числе, могу хотеть иконку, поставляемую самим разработчиком.
    А что мешает разработчику положить иконку(и) рядом с программой или положить в общий набор, чтобы было удобно всем, а не только разработчику?
    0CodErr wrote:Ещё раз повторюсь, иконка программы — принадлежит самой этой программе, а на рабочем столе и в панелях запуска можно вообще выбирать что-угодно, даже бывают анимированные иконки(в Menuet32, кстати, раньше была анимация иконок, может и в первых версиях KolibriOS была — не помню уже).
    Я не против выбора, а только за, но против встраивания иконок впрограммы.
    Потому что, если я захочу и не только я, иконки из общей темы, или собственные, или ещё какие, а они будут встроены в программу, у меня и у других, не будет выбора (удалить или оставить), придётся их таскать с собой. Меня это не устраевает.
    The Glass is Always Half Full! :mrgreen:
  • JohnXenox wrote:(там какой-то файл был с набором иконок (забыл, как называетс)).
    Ты не про это?
    Spoiler:
    3.PNG
    3.PNG (46.22 KiB)
    Viewed 5994 times
    JohnXenox wrote:Экономится место и распаковка программы быстрее.
    Наоборот, место в большинстве случаев занимать будет больше, иногда — одинаково, распаковка программы — без изменения, так как иконка распаковывается отдельно.
    JohnXenox wrote:встроенные мконки будут висеть мертвым грузом. А не встроенные, можно удалить
    Встроенные точно так же можно удалить(я про тот способ http://board.kolibrios.org/viewtopic.php?p=70502#p70502)Вообще сжатые 16x16 весят всего 0,5 Кб.
    JohnXenox wrote:0CodErr писал(а):
    А то может у меня этих панелей штук 20 и для каждой я хочу разную иконку(почему нет?).
    Так, никто не запрещает.
    Кстати, насчёт панелей:
    Программа может быть одна и та же, а иконка может зависеть от параметров запуска, пример:
    В TopPanel используются разные иконки для запуска программы WebView и для перехода на сайт KolibriOS.org с помощью той же самой программы см. скриншот http://board.kolibrios.org/viewtopic.ph ... =15#p69440
    JohnXenox wrote:А что мешает разработчику положить иконку(и) рядом с программой или положить в общий набор, чтобы было удобно всем, а не только разработчику?
    В какой ещё общий набор? Он к тебе домой что ли придти должен? :mrgreen:

    Может ты не совсем понял суть этой темы?
    С таким же успехом разработчик может включить любой другой ресурс в программу, который для тебя будет "мёртвым грузом"(например, показывать 1 раз в год пасхальные яйца на Пасху :mrgreen: ) Но это его право, как разработчика. Пользователь сам решит пользоваться или нет такой программой.
    А в этой теме обсуждается именно включение иконки в исполняемый файл как ресурса. Теоретически, можно было так же обсуждать, стоит ли включать поле version в исполняемый файл и должна ли сигнатура(MENUETXX) занимать 8 байт, а не, например, 4(MTXX)
    На панелях можешь выбирать какие угодно,

    Вот пример диалога, в котором можно указать путь к иконке, можно указать в том числе путь к исполняемому файлу — будет выбрана иконка из ресурса, а можно указать другую, а для запуска в каком-нибудь другом месте — третью, и т.п.
    Spoiler:
    4.PNG
    4.PNG (14.2 KiB)
    Viewed 5994 times
    JohnXenox wrote:JohnXenox писал(а):
    В конце концов, иконку можно хранить рядом с программой, в любом удобном формате (raw, bmp, png и т.д.) - если требуется, в сжатом виде (например, kpack).
    И редактировать удобно, и добавлять-удалять.
    Это в реализации проще, конечно, но места будет занимать больше. Если сжатая kpack — в других ОС неудобно просматривать, если png — для загрузки обязательно нужна ещё дополнительно библиотека(или с собой таскать код). А если нужно несколько иконок — ещё более неэкономично. Но вообще вот уже сколько лет как-то ведь обходились без этого :) А то можно ещё захотеть какой-нибудь стартовый звуковой сигнал при запуске прорамм :) Я считаю, нужно использовать только реально полезные вещи — иконка небольшого размера(16x16) была бы полезной.
  • 0CodErr wrote:Ты не про это?
    Spoiler:3.PNG
    Про это.
    0CodErr wrote:Встроенные точно так же можно удалить(я про тот способ http://board.kolibrios.org/viewtopic.php?p=70502#p70502)
    Нет, для простого пользователя это всё слишком сложно.
    0CodErr wrote:Вообще сжатые 16x16 весят всего 0,5 Кб.
    Лишних 500 байт - это давольно много.
    0CodErr wrote:Кстати, насчёт панелей:
    Программа может быть одна и та же, а иконка может зависеть от параметров запуска, пример:
    В TopPanel используются разные иконки для запуска программы WebView и для перехода на сайт KolibriOS.org с помощью той же самой программы см. скриншот http://board.kolibrios.org/viewtopic.ph ... =15#p69440
    Так, я же не спорю с этим.
    0CodErr wrote:В какой ещё общий набор? Он к тебе домой что ли придти должен? :mrgreen:
    В Колибри - это ICONS16.PNG и ICONS32.PNG. В Линукс - это /usr/share/icons или ~/.icons.
    0CodErr wrote:Может ты не совсем понял суть этой темы?
    Понял. Вот суть-то не устраевает.
    0CodErr wrote:С таким же успехом разработчик может включить любой другой ресурс в программу, который для тебя будет "мёртвым грузом"(например, показывать 1 раз в год пасхальные яйца на Пасху :mrgreen: ) Но это его право, как разработчика. Пользователь сам решит пользоваться или нет такой программой.
    Так, я же никому не запрещаю. Просто высказал своё несогласие по этому поводу, это моё право.
    0CodErr wrote:А в этой теме обсуждается именно включение иконки в исполняемый файл как ресурса.
    Я знаю. Иначе бы, в это теме не присутствовал.
    0CodErr wrote:Теоретически, можно было так же обсуждать, стоит ли включать поле version в исполняемый файл и должна ли сигнатура(MENUETXX) занимать 8 байт, а не, например, 4(MTXX)
    Можно. Хотя это меня мало интересует.
    0CodErr wrote:На панелях можешь выбирать какие угодно,
    Я про панели ничего не говорил.
    0CodErr wrote:Вот пример диалога, в котором можно указать путь к иконке, можно указать в том числе путь к исполняемому файлу — будет выбрана иконка из ресурса, а можно указать другую, а для запуска в каком-нибудь другом месте — третью, и т.п.
    Spoiler:4.PNG
    Понятно. По ходу, ты собрался полностью скопировать Виндовс.
    0CodErr wrote:Это в реализации проще, конечно, но места будет занимать больше.
    Нет, если сжато будет. Но зато, есть возможно изменить или удалить иконку.
    0CodErr wrote:Если сжатая kpack — в других ОС неудобно просматривать, если png — для загрузки обязательно нужна ещё дополнительно библиотека(или с собой таскать код). А если нужно несколько иконок — ещё более неэкономично.
    А при чём тут другие ОС, если прогаммы будут писаться для Колибри? Лично я, программами для Колибри, пользуюсь в Колибри. И вообще, для чего тогда нужна Колибри, если все будут писать программы с оглядкой на друегие ОС? Может лучше сразу писать программы для других ОС?
    0CodErr wrote:Но вообще вот уже сколько лет как-то ведь обходились без этого :)
    Ну вот.
    0CodErr wrote:А то можно ещё захотеть какой-нибудь стартовый звуковой сигнал при запуске прорамм :)
    Так, я не против. Но он не приоритетен.
    0CodErr wrote:Я считаю, нужно использовать только реально полезные вещи
    Ничего не имею против реально полезных вещей, но тут получается фигня какая-то. Я не запрещаю фигнёй страдать, но и не одобряю.
    Лучше бы, все силы бросили на написание реально полезных программ, а не встраивали мало полезные ресурсы.
    0CodErr wrote:иконка небольшого размера(16x16) была бы полезной.
    Встроенная, нет.
    The Glass is Always Half Full! :mrgreen:
  • JohnXenox wrote:0CodErr писал(а):
    Встроенные точно так же можно удалить(я про тот способ viewtopic.php?p=70502#p70502)
    Нет, для простого пользователя это всё слишком сложно.
    Не сложнее твоего варианта — точно так же нужна программа для распаковки иконки(не важно из файла с программой или из отдельного).
    JohnXenox wrote:0CodErr писал(а):
    Вообще сжатые 16x16 весят всего 0,5 Кб.
    Лишних 500 байт - это давольно много.
    Да, о том и речь была про лишние байты
    0CodErr wrote:Например, иконка 16x16, 256 colors имеет размер 1,37 КБ (1406 байт), но на диске она займёт ровное число кластеров, если кластер 512 байтов, то файл займёт 1536 байтов. Да, в этом случае самое настоящее ожирение.
    JohnXenox wrote:Это в реализации проще, конечно, но места будет занимать больше.
    Нет, если сжато будет. Но зато, есть возможно изменить или удалить иконку.
    Ты либо не читаешь, либо не понимаешь. Просто исключительно чтобы показать: кластер может быть равен, например, 64 Kb, так вот отдельный файл с иконкой пусть даже весящей менее 1 Kb всё равно займёт весь кластер(проигрываем более чем в 60 раз). Я потому и говорю, что держать всё в одном файле экономичнее.
    JohnXenox wrote:А при чём тут другие ОС, если прогаммы будут писаться для Колибри? Лично я, программами для Колибри, пользуюсь в Колибри. И вообще, для чего тогда нужна Колибри, если все будут писать программы с оглядкой на друегие ОС? Может лучше сразу писать программы для других ОС?
    Не, ну это правильно всё, я тоже согласен с этим. Только почему-то некоторые ядерные разработчики так и норовят сделать гибрид недо-windows и недо-linux. Даже разработку ведут с оглядкой на существующие в этих ОС инструменты разработки(с этим отчасти согласен — качество инструментов всё-таки важно, но можно и своё было пилить потихоньку).
    JohnXenox wrote:0CodErr писал(а):
    А то можно ещё захотеть какой-нибудь стартовый звуковой сигнал при запуске прорамм :)
    Так, я не против. Но он не приоритетен.
    Он вообще, имхо, не нужен :)

    Итак, имеем 2 варианта:
    • в обоих случаях необходима распаковка иконки
      но в одном случае есть экономия дискового пространства
      реальное удобство редактирования — только в случае png(либо другого распространённого формата), но при этом появляется неудобство загрузки — встроенная в ядро функция распаковки поддерживает только kpack-файлы, для загрузки png — нужен дополнительный код.
  • Who is online

    Users browsing this forum: No registered users and 3 guests