Mikko Mononen
mikkomononen.bsky.social
Mikko Mononen
@mikkomononen.bsky.social
Coder and woodworker. Author of Recast&Detour and NanoVG. Previously at Epic Games, Unity, Tinkercad, Crytek, demoscene.

https://github.com/memononen
Links... links are special.

Usually you pick the text style from the previous character, so that if you write something after a bold text, it will be bold.

Except links, where the style does not "bleed". It's ok to type in the middle, though.
November 13, 2025 at 9:17 PM
I have been working recently on input rules for the skribidi editor.

Stuff like:
- what happens when you press enter after a header
- automatically starting a list when you start a line with -,
- or stuff like keeping the tabs in taps when typing code (who uses spaces, anyways!)
October 29, 2025 at 11:35 AM
So nice to finally get to the actual rich text editing, not just the stuff that enables it. Still ways to go, but baby steps.

There's a lot of rich text editing tricks to discover, like that when you press enter after a header, you will automatically get body text style.
October 14, 2025 at 6:27 PM
The flat I have setup is definitely usable, but makes the spacing a bit clunky.

It's definitely solvable, but solutions are potentially unorthodox.

One option would be to treat all the list items as one section for vertical padding, and add another option for spacing between same type of blocks.
September 25, 2025 at 9:08 PM
Which in turn allows stuff like lists.

Lists are a bit tricky, though. You want to style them for:
- line height, green (easy, already supported)
- space between list items, yellow
- space around the list

The whole list kind reads like a single paragraph, but actually each list item is a block.
September 25, 2025 at 9:08 PM
I've been working on paragraph styling support for skribidi.

My goal is to support roughly markdown for the rich text rendering and editing.

I'm trying my best to not make things complicated. For example I really would like to avoid adding hierarchy to the text.
September 25, 2025 at 9:08 PM
For the past weeks I have been writing and refactoring things to get rich text editing to work in Scribidi. It's so close now.

There are always tons of small details, like changing the caret to preview the italic/oblique.
September 15, 2025 at 7:20 PM
There's still heaps to do, but...
August 23, 2025 at 9:35 PM
I've been working on things that will allow users of Skribidi to create hyperlink or button kind of interactions.

The biggest struggle is how to make things simple. I dont want to include an UI library in the text library (that would be another project). But it should not be too hard either.
August 19, 2025 at 7:36 PM
I have been working on inline objects for Skribidi. Things like icons and stuff that you want to embed in the text.

This merited another visit to the vertical text alignment rabbit hole. A lot of frustration and hopefully a solution.
August 1, 2025 at 7:20 PM
One interesting thing in Figma is what they call "Vertical Trim". It allows to center text based on ascender-to-descender (the usual), or cap-height-to-baseline.

I've earlier used just half the descender to vertically align text to buttons, but the cap-height to baseline seems more versatile.
July 28, 2025 at 9:12 PM
I have been working on text alignment, wrapping and overflow for Skribidi. It's been pretty hard to find a good reference since the CSS in that area does not feel very solid to me.

Ended up with some parts of CSS and some parts of Figma.
July 28, 2025 at 9:12 PM
Implemented the actual underline patterns for Skribidi. A bit more plumbing that I hoped for, but not it's done.
July 1, 2025 at 5:37 PM
I have recently been working on how to represent text attributes (color, font, underline, etc) for Skribidi. It's coming together and managed to get underline working.
June 19, 2025 at 7:44 PM
One of the text input features I have been wanting to try out is input method editors (IME). Felt like 🪱🥫so I have been postponing it.

The IME itself is not part of Skribidi, it should be handled by the platform abstraction, but showing the IME composition is.
June 11, 2025 at 6:35 PM
I'm almost done with the first version of my text library thing. The stuff left to do are api docs and allowing to exit the sample app (I have a feeling that some of the games I worked in the past had similar final showstopper too :)).
May 30, 2025 at 9:47 AM
While cleaning up the code, I rewrote shelf allocator to use "vertical allocator" like github.com/nical/etagere

That allowed me to let the middle rows to grow too if there's empty space above. I previously had that only for the last row. It seems to help once there starts to be fragmentation.
May 26, 2025 at 12:28 PM
Just to close the loop, a test with 1k x 4k textures. Works as good if not better than the column stuff. I think the slightly longer work works well here, since on 512 wide columns, we could not fit that many glyphs in there.
May 25, 2025 at 6:24 PM
Boring you with more atlas tests! Turns out that shelf packing + columns can do as good as the binary partitioning packing.
May 24, 2025 at 6:45 PM
Binary tree atlas goes... wroom :) I've never used this algorithm before, but I like it!

This is straight up implementation of Blackpawn atlas: blackpawn.com/texts/lightm...

But added remove and consolidation.
May 23, 2025 at 12:07 PM
Atlas shelf-packer goes... pfffft :( I remember having the same issue way back then in font stash.
May 22, 2025 at 10:53 AM
Anyone on Rider 25.1.2 and have it take 30% CPU on idle?
May 15, 2025 at 1:12 PM
It works pretty well! It saves some space, but more importantly improves locality, as in, similar things get packed closer to each other. Keeper, thanks! :)
May 9, 2025 at 12:23 PM
I've been working on texture atlases recently.

For dynamic atlases, I have liked the skyline packer as it's simple and effective. And growing the atlas texture up to certain point and then rebuilding everything has worked well as garba collection strategy.
May 7, 2025 at 11:38 AM
I have been looking into SDF font rendering lately (again).

I want to find an option that is faster than the analytic method (e.g. used by stb_tt and FT), as it gets into the hundreds of milliseconds per glyph on larger sizes.

I also wanted something that has a change to work with emojis.
April 25, 2025 at 11:52 AM