OpenWiki

Hi Density Mythology

Edit this page (last edited March 2, 2005)
Palm Notes | Recent Changes | Title Index | User Preferences | Random Page | Help

Мифы вокруг HiDensity в PalmOS 5.

  • Мифы вокруг HiDensity в PalmOS 5.
  • Введение
  • Классические экраны
  • Window Manager
  • Form Manager
  • High Denstiy Display
  • Window manager
  • FormManager
  • WinSetScalingMode
  • Введение

    - папа, говорят водка подорожала? теперь ты будешь меньше пить?
    - нет сынок, теперь ты будешь меньше есть.
    
    Объявление поддержки разрешения 320x320 в Palm OS 5 несколько сбило с толку. Статья объясняет как реализован HiDensity? displays в Palm OS и что как поддержка позволяет использовать большее разрешение экрана.

    Классические экраны

    Для начала рассмотрим архитектуру подсистемы вывода информации классических версий Palm OS.

    Window Manager

    Основанием подсистемы вывода является Window Manager. Я объединил этим понятием функции API Win* и Bmp*. Эти функции работают с объектами окон и изображений.

    Битмап представляет собой не просто картинку, но семейство картинок. Каждая картинка ассоциируется с определенной глубиной цвета. Другой тип битмапа - экранный битмап, который занимает пространство не в оперативной памяти, а на экране, в видеопамяти. Практически все Bmp* API позволяет не задумываться о реальном местоположении битмапа.

    Уровнем выше находится Win* API. Эта библиотека реализует работу с окнами и базируется на битмапах. Окно - это поверхность для рисования, к которой привязан битмап. Функции Win* API инкапсулируют особенности конкретного битмапа и позволяют оптимизировать работу с экраном.

    Form Manager

    Form Manager - это набор библиотек, предоставляющий управление формами и контролами на них. Форма - это специализированное окно. Менеджер форм занимается рисованием форм и контролов на окнах с помощью Win* API. Когда на форме рисуется битмап, который отображается с правильной глубиной цвета, в этом нет заслуг менеджера форм. Всю работу по поиску нужной картинки в семействе делает Bmp* API.

    High Denstiy Display

    В Palm OS 5 была предложена идея дисплеев высокой плотности (хотя существует одна модель с Palm OS 4.2 и поддержкой HiDensity?). Эта поддержка позволяла использовать дисплеи с большим разрешением, чем 160x160.

    HiDensity? API проектировалось как абстрактное, позволяющее использовать произвольные разрешения, кратные 160x160: 320x320 (2x), 480x480 (3x) 240x240 (1.5x). В действительности существуют только модели с двухкратными дисплеями.

    Стоит помнить, что увеличение разрешения не означает увеличения физических размеров экрана. То есть каждый пиксель стал в 4 раза меньше. Также стояла задача совместимости с предыдущими API. Для решения этих проблем было принято решение: программная поддержка нужна не для того, чтобы втиснуть в 4 раза больше информации, а чтобы такой же объем информации выглядил качественнее. Слово "качественнее" означает, что битмапы и шрифты будут прорисованы с наилучшим разрешением, но даже если таких шрифтов и битмапов нет, изображения и текст будут занимать те же самые позиции на экране, но будут выглядеть скромнее.

    Такая идеология подразумевает, что разработчику вообще ничего не нужно менять в коде. Он просто обеспечивает HiDensity? шрифты и битмапы, а ОС сама выбирает нужный объект из семейства в зависимости от экрана на конкретной машине. Формы продолжают проектироваться со стандартной плотностью, в которой и задаются все координаты.

    Возникает вопрос - а как будет себя вести операции рисования линий и точек? Неужели они не смогут поставить точку в один пиксел, а не зажечь квадрат 2x2?

    Для рисовальщиков вручную было введено понятие текущей координатной системы. По сути дела, это размерность экрана, которой оперирует пользователь. При переходе от текущей КС к родной КС экрана происходит умножение координат на коэффициент преобразования. Так, при рисовании в kCoordinatesStandard? (немодифицированная программа) на двойном экране происходит удвоение всех координат. При работе в kCoordinatesDouble? происходит простая передача всех координат "как есть".

    Window manager

    Как изменился Window Manager в Palm OS 5? Не слишком существенно, но перетряхнуть пришлось много.

    У битмапов появилось новое свойство - плотность. Теперь битмапы в семействе различаются не только глубиной цвета, но и плотностью. Родная плотность используется для вычисления мнодителя для преобразований от текущей системы координат.

    В реализациях функций Win* API и Bmp* API пришлось добавить перевод параметров из текущей КС в родную КС битмапа. При подборе нужной картинки из битмапа учитывается КС.

    FormManager

    Form Manager не изменился. Это означает, что он до сих пор просто рисует в текущей КС то, что от него требуют отрисовать.

    Palm Source предполагает, что к моменту запуска функций Form Manager текущей КС будет kCoordinatesStandard?, и все формы будут указаны в стандартных координатах. Такой подход приводит к тому, что на HiDensity? экран помещается ровно столько же, сколько и на обычный экран, отличия только в качестве картинки. Если нужно что-то отрисовать в двойной плотности, то временно переключите КС и после отрисовки верните обратно.

    Что будет, если установить КС в kCoordinatesDouble? и попытаться отрисовать обычную форму? Она будет нарисована в верхней левой четверти экрана. Такой подход сподвигает некоторых на попытку нарисовать форму 320x320. Этого делать не стоит. Почему?

    WinSetScalingMode

    В поисках решения задачи "хочу field с маленькими шрифтами" народ бросается на функцию WinSetScalingMode?. Эта функция позволяет по-отдельности регулировать масштабирование битмапов и шрифтов. Но! Обратите внимание, что она поддерживается только с версии Palm OS 5.3, так что число не поддерживающих ее машинок все еще велико.

    Palm Notes | Recent Changes | Title Index | User Preferences | Random Page | Help
    Edit this page | View other revisions
    Print this page | View XML
    Find page by browsing, searching or an index
    Edited March 2, 2005 (diff)
    Valid XHTML 1.0!Valid CSS!