I have looked at the hinting-related issues that Martin raised, but it is clear to me from the code that the two sets of units are the principal cause of these problems, and we have to move to using a single set of units before we can properly handle font scaling.
So I would like to remove the layout units ASAP, probably this weekend; I have got bulk of the changes done in my tree and it compiles and kind-of runs. I will initially commit this using #ifdef USE_LAYOUT_UNITS so as to minimize disruption, but once things start working reasonably, I will delete the old code for the sake of readability. For now I want to continue using int's for our widths; this will make the transition easier and there will be nothing stoping us from moving to floats later, if we wish to do so. I want the new system of units to have a resolution 1024 times greater than the device on which we operate; this will give us some extra margin against rounding errors on low resolution devices, such as the screen; I will define macros UT_DEV_UNITS() and UT_LOG_UNITS() for the conversions. Please note that these conversions only will need to be done inside the gr_*Graphics classes, to the rest of AW this will be entirely transparent. All our widths in screen context will be scaled by the zoom factor, as they are now. The key thing in this change is that when the gr_*Graphics:: functions retrieve the fonts and measure char widths, etc, they have to be processing the font point size correctly, i.e., they have to be requesting the metrics for the given point size and present device resolution, not, as it is done at the moment, adjusting the point size by the device resolution. This is very simple to do on win32, and should not be hard anywhere else, since this is the normal and only correct way of doing it. Tomas
