Today's progress report on the custom layout engine: -) Improved font-face loading: Before I had to re-load a TrueType font file every time I needed a specific style and size font. Now it's optimized to work as it should - by using a single TrueType face and processing it through specified sizes. Of course, it required quite a lot of structural change again, but in the end, the 'API' is a lot easier to use: FontFace* face = new FontFace("fonts/veronascript.ttf"); Font* font = face->CreateFont(48, FONT_STROKE, 3.0f, 96); // fontHeight, style, outlineParam, dpi Text* text = font->CreateText(L"Hello text!"); // ... render text -) DPI awareness: With a multitude of different DPI settings out there, it was logical to make the font system DPI-aware. In this case, if the user has changed the default system DPI value, the fonts will be rendered accordingly. Increasing the DPI values will make the text look bigger (and thus more readable). I should emphasize again, that the DPI setting itself is a system-wide property and is changed by the user to make the system text bigger. The default DPI value in windows is 96.Here's a sample with DPI 108: -) What's still left to do: Implement embolden, slanting, underline, strikethrough. Improve the naive shelf-packing algorithm to achieve better texture space usage. (performance) Buffer all static text into a single Vertex Buffer Object, render by offset into buffer. (performance) Implement this beast into 0 A.D.