[GSoC 2023] Improving Icon-O-Matic Final Report | Haiku Project

There’s a good chance that not everyone reading this article will know what Icon-O-Matic is, so I’ll start by explaining what it is. Icon-O-Matic is a vector graphics editing program like Illustrator or Inkscape. It is specifically made to work with Haiku’s custom HVIF vector graphics format. This format is similar to the SVG format, except optimized to be much, much smaller. The blog post “500 Byte Images: The Haiku Vector Icon Format” provides a more in-depth discussion for those interested.

This is a companion discussion topic for the original entry at https://www.haiku-os.org/blog/zardshard/2023-08-18_gsoc_2023_improving_icon-o-matic_final_report

It’s nice that a true Haiku-native application got some love.
The UI is what makes Haiku unique and the consistent icon style is a big part of that UI.
I know from my own projects that time plans are never correct,most times it takes longer than expected.
What was achieved in that time is worth a lot,anyway :+1:


Thanks on all! the work you have done over the GSoC period, much appreciated by the whole pack! :slight_smile:


Very nice!
I love the attention to small details with efficiency in mind in HVIF and Haiku (it beats the “memory is cheap” thinking that ignores real-world speed impacts).
As a side note the 500-byte Images blog post makes me think a regex could be written to “explain” any HVIF file.

Great work!

1 Like

Thank you for your efforts on improving this application – the file format and this application are a gem and it is great to see it get some polishing.

1 Like

This would push regex behin their normal limits, because some parts of the format are bit based instead of byte based, and it is not ASCII text (what regexes are very good at).

However, Zardshard already added a python script to the repository that will “explain” files. Or you can just look at them in Icon-O-Matic, the UI there does quite a good job at directly representing what’s in the file.

Actually, it only encodes and decodes the format’s custom three-byte float format :wink:

Thanks for your good work on I-O-M this GSoC! I think our regular icon artists will have to get used to the new Perspective transformer first, before we can say how useful it actually turns out to be. I think at least for creating shadows it’ll come in handy.

Any chance of one last bug fix? :slight_smile:
This one is a major showstopper IMO: #16760 (IOM: Selection of multiple path vertices broken) – Haiku

I any case, I hope you keep taps on Haiku and maybe even got a taste for contributing fixes and enhancements. An OS has always interesting challenges, and considering Haiku’s small dev team, you can be sure that your contributions are noticed and appreciated.
Thank you!


Ok, fine :wink: . The changeset can be found at https://review.haiku-os.org/c/haiku/+/6871


Congrats to all involved for the things achieved! :partying_face:

Specially to @Zardshard of course, not only for all the effort with the code itself, but also for the great posts, for resurfacing important parts of the history of our tiny works of art, and the passion and respect demonstrated towards well crafted things.

When this GSoC for refreshing Icon-O-Matic was announced, my first thoughts were more or less along the lines of “Hey, good, at last some bugs will be ironed out, oh, I need to remember to mention the one that prevents the selection of this, or the one that causes all this glitches when doing that!”.
Practically all of them already had tickets that just needed to be upvoted, some others that I didn’t remember to file also have been dealt with, and lots of others that I didn’t knew about.

Just the bug squashing and tidying up would have been more than enough.

Couldn’t have imagined that the program will end up gaining such useful functionalities.
Much less that I could have some voice in the process, even though I’m left with a bit of a bittersweet feeling, as my enthusiasm asking for complicated things, combined with my ignorance of the level of dificulty of implementing such things, at some moment have got in the way of a more varied and easily attainable set of enhancements.
Thank you for the patience and the excellent attitude.

Anyway, leaving that feeling apart, I’m excited to think that the foundation laid out after all this hard work could serve as the base for the next iterations of the HVIF format, and that it could be done maintaining the heritage of neat features, mix of sensible choices and ingenious solutions that has characterized it until now.

I only wish that this potential gets eventually realized in a not so distant future.
Say, 10 to 12 years from now?
Just joking, I hope this future arrives a bit sooner!! :scream:

For the most part the inner workings of the format are still a mystery to me, but the few additional things that I have learnt in the process keep giving to me this “lets find the way to squeeze a whole game in a 40KB cartridge” kind of vibes. Good, good vibes.

It has been great having you around, I hope the experience has been satisfactory enough to keep you hooked to the project for a bit more time.


Brilliant! That was quick… :slight_smile:
Unfortunately, I still cannot test it because I’m still locked out of Gerrit/git.haiku since I bodged my mail address change…

1 Like

Ah yes, I too had little idea how long adding the perspective transformation would take…

Regardless, I enjoyed hearing from you and talking to you and “dreaming” with you :grin:


It has been a pleasure :smile:

Well, in essence we were just being faithful to the spirit of the project.

Recreating practically from scratch a whole operating system?
Hold my beer…
This will take us a while, come again in three years” :seedling:

That was more than two decades ago :evergreen_tree: :rofl:

We can’t help it, this project tends to attract people that have a long term vision that is longer than common life expectancy permits :person_shrugging:
The leafs in the logo are no joke :deciduous_tree: :leaves: :fallen_leaf:
They serve as a warning… :wink:
…a subliminal one :kissing_smiling_eyes:

But hey, inside dreams time expands.
We just have to insert another dream inside this dream.
Its like abstraction, you just keep adding another level and everything’s fine’n’dandy :nesting_dolls:


What could be that crumbling noise I keep hearing all day? :thinking: