Thank you so much!
May I suggest one further enhancement? (I am going to do this in my copy of the code, perhaps you may want to include it for everyone)
Right now, DrawText, DrawTextAligned, DrawTextMultiline, etc. are procedures.
My suggestion is to change them to functions, which return the rectangle where the text has been drawn (like GetTextBox).
In this way, the old code doesn't change, if you don't need the text coordinates after DrawText you can ignore the result of the call. But if you need it, you can just get it from the result of the function.
At least in my case, this is an efficient way of doing things because:
1. Most of the time, when I write text on a drawingview, I want to know where it goes. This is especially true when I write several strings of text in various places on the screen.
2. When I don't care where the text goes, it's usually just a single string on a drawingview, so even if the function makes the extra work of getting the final position of the text, which I don't use, it doesn't really waste that much extra CPU time, and the convenience of having the position with one function call instead of two (every time) is much more than the extra CPU time I occasionally waste.
Anyway, that's what makes sense to me, you may consider whether it can also make sense in general.
Many heartfelt thanks for your great work.