logo
Литература_1 / photon_old

Примеры простых функций прорисовки PtRaw

Эта функция прорисовки рисует пару эллипсов, один из которых обрезан:

void my_raw_draw_fn( PtWidget_t *widget, PhTile_t *damage ) {

PhRect_t raw_canvas;

PhPoint_t c1 = { 80, 60 };

PhPoint_t c2 = { 30, 210 };

PhPoint_t r = { 72, 52 };

PtSuperClassDraw( PtBasic, widget, damage);

PtCalcCanvas(widget, &raw_canvas);

/* Установка области обрезки по холсту необработанного виджета. */

PtClipAdd ( widget, &raw_canvas);

/* Рисование эллипсов. */

c1.x += raw_canvas.ul.x;

c1.y += raw_canvas.ul.y;

PgSetFillColor(Pg_YELLOW);

PgDrawEllipse ( &c1, &r, Pg_DRAW_FILL);

c2.x += raw_canvas.ul.x;

c2.y += raw_canvas.ul.y;

PgSetFillColor(Pg_RED);

PgDrawEllipse ( &c2, &r, Pg_DRAW_FILL);

/* Сброс области обрезки. */

PtClipRemove ();

}

Эта функция такая же, но она устанавливает преобразование:

void my_raw_draw_fn( PtWidget_t *widget, PhTile_t *damage ) {

PhRect_t raw_canvas;

PhPoint_t c1 = { 80, 60 };

PhPoint_t c2 = { 30, 210 };

PhPoint_t r = { 72, 52 };

PtSuperClassDraw( PtBasic, widget, damage);

PtCalcCanvas(widget, &raw_canvas);

/* Установка области обрезки по холсту необработанного виджета. */

PtClipAdd ( widget, &raw_canvas);

/* Установка преобразования, так что операции рисования выполняются

относительно холста необработанного виджета.

*/

PgSetTranslation (&raw_canvas.ul, Pg_RELATIVE);

/* Рисование эллипсов. */

PgSetFillColor(Pg_YELLOW);

PgDrawEllipse ( &c1, &r, Pg_DRAW_FILL);

PgSetFillColor(Pg_RED);

PgDrawEllipse ( &c2, &r, Pg_DRAW_FILL);

/* Восстановление преобразования путём получения координат

холста необработанного виджета.

*/

raw_canvas.ul.x *= -1;

raw_canvas.ul.y *= -1;

PgSetTranslation (&raw_canvas.ul, Pg_RELATIVE);

/* Сброс области обрезки. */

PtClipRemove ();

}

    1. Цвет

В микроGUI Photon'а цвета задаются типом PgColor_t. Библиотека и графические драйверы интерпретируют этот тип данных в соответствии с текущей моделью цветности (описанной в документации по PgColor_t).

Принимаемая по умолчанию модель цветности Pg_CM_PRGB использует 32-битное RGB (красный-зелёный-синий) представление:

Зарезервировано

Красный

Зелёный

Синий

0000 0000

r r r r r r r r

g g g g g g g g

b b b b b b b b

Макросы для наиболее часто используемых цветов определены в <photon/Pg.h>.

Несмотря на то, что PgColor_t использует 32 бита, под цвет используется только 24 бита. Такое предоставление называется true color. МикроGUI Photon'а – это оконная система в true color; она использует это 24-битное RGB-предоставление внутренне.

Большинство современных графических карт использует true color (24 бита) или high color (16 бит). Однако некоторые графические драйверы используют достоинства палитры в более старых картах, основанных на палитре. В "Справочнике библиотечных функций Photon'а" описаны следующие типы данных и функции, относящиеся к работе с цветом:

PgAlphaValue()

Получение альфа-компонента из значения цвета

PgARGB()

Преобразование значений альфа, красного, зелёного и синего в комбинированный формат цвета

PgBackgroundShadings()

Вычисление верхнего и нижнего оттенков цветов

PgBlueValue()

Получение синего компонента из значения цвета

PgCMY()

Преобразование голубого, пурпурного и жёлтого значений [CMYcyan/magenta/yellow – Прим. пер.] в комбинированный формат цвета

PgColorHSV_t

Значение цвета HSV [Hue-Saturation-Value, т.е. Оттенок-Насыщеннось-Значение. Прим. пер.]

PgColorMatch()

Запрашивание наилучшего совпадения цвета

PgGetColorModel()

Получение текущей модели цветности

PgGetPalette()

Запрашивание текущей палитры цветов

PgGray()

Генерирование оттенков серого

PgGrayValue()

Получение яркости цвета

PgGreenValue()

Получение зелёной компоненты из значения цвета

PgHSV()

Преобразование оттенка, насыщенности и значения в комбинированный формат цвета

PgHSV2RGB()

Преобразование цветов HSV в RGB

PgRedValue()

Получение красного компонента из значения цвета

PgRGB()

Преобразование значений красного, зелёного и синего в комбинированный формат цвета

PgRGB2HSV()

Преобразование RGB-цветов в HSV

PgSetColorModel()

Установка текущей модели цветности

PgSetPalette()

Установка палитры цветов

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4