This is massive optimization of CtrlCore / CtrlLib meant to reduce the memory footprint of widgets.
While most changes are limited to CtrlCore, there are some minimal interface changes:
- caret handling is changed to virtual method; there is no more Ctrl::SetCaret method but virtual Rect GetCaret() const;
- Label is no longer derived from LabelBase (irronically
Also note of interest is the new PackedData class in Core and set of protected Ctrl::*Attr* methods - this allows effective sparse attribute storage (e.g. most of time Label does not have any additional attributes like special Font. If it does, PackedData allocates heap block when it effectively stores only attributes that are not default, usually fitting within additional 32 heap bytes).