November 1, 2006

Font leading space

В сепцификации MIDP в описании метода Font.getHeight() четко написано, что он возвращает собственно высоту символов (body size) + размер промежутка между двумя строками. Причем этот промежуток должен находиться именно под строкой, поэтому «Applications that wish to position graphics closely with respect to text (for example, to paint a rectangle around a string of text) may assume that there is space below and to the right of a string and that there is no space above and to the left of the string» (см. MIDP 1 или 2, класс Graphics, секция Anchor Points).

Однако почему-то на телефонах Motorola Razr v3(i/x), SLVR L2-L6 и скорее-всего других, промежуток между строками (leading) находится сверху при отрисовке текста. У той-же Nokia E60 этой проблеммы не наблюдается.

Зато наблюдается другая проблемма (общая для MIDP): нельзя вычислить body size, т.е. высоту шрифта без промежутка. Поэтому, попытки выровнять текст вертикально по центру закончатся неудачей, т.к. при определении центра строки способом Font.getHeight() / 2 текст будет находиться на несколько пикселей выше (а в моторолах - ниже), чем нужно. Что мешало включить в спецификацию метод типа Font.getLeadingSize() мне не ясно, тем-более что метод для определение позиции базовой линии имеется.

Про то, что добрая половина трубок абсолютно игнорит FONT_UNDERLINE и FONT_BOLD я вообще молчу.