Графічна система BTRON базується на двовимірній цілочисельній координатній сітці (Grid) із діапазоном координат від $-32768$ до $+32767$ у 16-бітному форматі.
Вісь X спрямована горизонтально зліва направо, а вісь Y — вертикально зверху вниз. Координатні лінії розміщуються між пікселями, а самі пікселі займають одиничні квадратні комірки на сітці.
typedef struct {
H x; /* Горизонтальна координата X (-32768..+32767) */
H y; /* Вертикальна координата Y (-32768..+32767) */
} PNT;
typedef struct {
H w; /* Ширина (width >= 0) */
H h; /* Висота (height >= 0) */
} SIZE;
typedef struct {
H c_left; /* Ліва межа X (включно) */
H c_top; /* Верхня межа Y (включно) */
H c_right; /* Права межа X (не включно) */
H c_bottom; /* Нижня межа Y (не включно) */
} RECT;
Усі прямокутники у BTRON визначаються за правилом напіввідкритого інтервалу (Half-Open Interval Property): прямокутник охоплює пікселі $[c\_left, c\_right)$ по горизонталі та $[c\_top, c\_bottom)$ по вертикалі. Штирина обчислюється як $w = c\_right - c\_left$, а висота $h = c\_bottom - c\_top$.
typedef struct {
H nrect; /* Кількість прямокутників у списку */
RECT rect[1]; /* Масив прямокутних областей */
} RLIST;
typedef struct {
RECT bounds; /* Загальний описовий прямокутник (Bounding Box) */
RLIST rlist; /* Список прямокутників, що утворюють регіон */
} GRGN;
Бітова карта (Bitmap) — це прямокутна область графічної пам'яті (відеопам'ять VRAM або оперативна пам'ять RAM), де кожен піксель кодується відповідною кількістю бітів.
typedef struct {
W planes; /* Кількість бітових площин (planes > 0; від'ємне = апаратний VRAM) */
W pixbits; /* Глибина кольору пікселя в бітах (1, 2, 4, 8, 16, 24, 32) */
H rowbytes; /* Байт у одному рядку растру (Row Bytes) */
RECT bounds; /* Межі растру у координатах бітової карти */
B *addr; /* Вказівник на початок буфера відеопам'яті у пам'яті */
} BITMAP;
typedef struct {
UW attr; /* Атрибути пристрою (Lock, наявність VRAM, Color Map, Color Mode) */
W planes; /* Кількість бітових площин */
W pixbits; /* Глибина кольору (біт на піксель) */
H hpixels; /* Фізична ширина екрана у пікселях */
H vpixels; /* Фізична висота екрана у пікселях */
H hres; /* Роздільна здатність по горизонталі (пікс/см або -пікс/дюйм) */
H vres; /* Роздільна здатність по вертикалі */
H color[4]; /* Біти каналів кольору (RGB / CMY / Gray) */
H resv[6]; /* Зарезервовано */
} DEV_SPEC;
Колір у BTRON представлений 32-бітним словом типу COLOR:
TCCC CCCC RRRR RRRR GGGG GGGG BBBB BBBB
typedef UW COLOR; /* 32-бітне значення кольору */
typedef struct {
W attr; /* Атрибути колірної системи */
H info[4]; /* Кількість елементів палітри або маски компонент */
COLOR *colmap; /* Вказівник на масив кольорів палітри */
} CSPEC;
Середовище малювання (дескриптор GID) зберігає повний графічний контекст:
FrameRect (кадр), VisibleRect (видима область) та складна область відсікання малювання Clip Region.
#define DM_PAINT 0 /* Пряме заміщення пікселів джерелом (Source Copy) */ #define DM_OVER 1 /* Накладання з урахуванням прозорості (Transparent Over) */ #define DM_XOR 2 /* Побітове виключне АБО (Invert / Toggle) */ #define DM_OR 3 /* Побітове логічне АБО */ #define DM_AND 4 /* Побітове логічне І */
typedef struct {
SIZE size; /* Розмір патерну (зазвичай 8x8 або 16x16) */
H rowbytes; /* Кількість байтів у одному рядку растру патерну */
B data[1]; /* Масив бітової маски патерну */
} PAT;
Виведення текстових символів враховує колір тексту (chfgc), колір фону (chbgc), напрямок письма (CharacterDirection) та міжсимвольні інтервали (CGAP).
enum CharacterDirection {
TORIGHT = 0, /* Зліва направо (стандартний європейський текст) */
TOLEFT = 1, /* Справа наліво (арабська / іврит) */
TOUP = 2, /* Знизу вгору */
TODOWN = 3, /* Згори вниз (традиційне вертикальне японське письмо) */
TOARB = 4 /* Довільний напрямок за вектором кута */
};
typedef struct {
H dir; /* Напрямок: 0 = у напрямку письма, 1 = у зворотному */
UH gap; /* Інтервал у пікселях або частках розміру шрифту */
} SGAP;
typedef struct {
SGAP hgap; /* Горизонтальний інтервал між символами */
SGAP vgap; /* Вертикальний інтервал між рядками */
SGAP hspgap; /* Додатковий горизонтальний інтервал після пробілу */
SGAP vspgap; /* Додатковий вертикальний інтервал після пробілу */
} CGAP;