libc: BGI Фаза 2d-3 — settextstyle (масштаб и направление текста)
settextstyle/gettextsettings/textwidth/textheight: DEFAULT_FONT 8×8, целочисленный масштаб 1..10, HORIZ/VERT (поворот 90° CCW), прозрачный фон. Свой scaled-рендер (_bgi_draw_scaled) читает глиф через leaf _bgi_font_rows (interleaved системный шрифт) и рисует блоки size×size raw в одной W3-скобке. outtext/outtextxy переведены на него. Проверено в MAME (tests/bgitest): размеры 1..4 + вертикальный текст. Доки обновлены (Ф2d-1/2/3 готовы; осталось viewport/клиппинг). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+25
-28
@@ -1,14 +1,13 @@
|
||||
/*
|
||||
* bgitest — демонстрация BGI-слоя graphics.h (режим 320×256×256).
|
||||
* Фаза 2d-2: setlinestyle (SOLID/DOTTED/CENTER/DASHED + THICK).
|
||||
* Фаза 2d-3: settextstyle — масштаб и направление текста.
|
||||
*/
|
||||
|
||||
#include <graphics.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int mx, my, i, y;
|
||||
static const char *name[4] = { "SOLID", "DOTTED", "CENTER", "DASHED" };
|
||||
int mx, my;
|
||||
|
||||
initgraph();
|
||||
mx = getmaxx();
|
||||
@@ -17,37 +16,35 @@ int main(void)
|
||||
|
||||
setcolor(WHITE);
|
||||
rectangle(0, 0, mx, my);
|
||||
|
||||
setcolor(YELLOW);
|
||||
outtextxy(104, 6, "BGI linestyle");
|
||||
settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);
|
||||
outtextxy(96, 8, "settextstyle demo");
|
||||
|
||||
/* Четыре стиля тонкой линией. */
|
||||
for (i = 0; i < 4; i++) {
|
||||
y = 40 + i * 22;
|
||||
setcolor(WHITE);
|
||||
outtextxy(12, y - 3, name[i]);
|
||||
setcolor(LIGHTGREEN);
|
||||
setlinestyle(i, 0, NORM_WIDTH);
|
||||
line(80, y, 300, y);
|
||||
}
|
||||
setcolor(LIGHTGREEN);
|
||||
settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);
|
||||
outtextxy(16, 34, "size 1 ABC");
|
||||
|
||||
/* Толстые версии тех же стилей. */
|
||||
for (i = 0; i < 4; i++) {
|
||||
y = 140 + i * 16;
|
||||
setcolor(LIGHTCYAN);
|
||||
setlinestyle(i, 0, THICK_WIDTH);
|
||||
line(80, y, 300, y);
|
||||
}
|
||||
setcolor(WHITE);
|
||||
outtextxy(12, 150, "THICK");
|
||||
setcolor(LIGHTCYAN);
|
||||
settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);
|
||||
outtextxy(16, 52, "size 2 ABC");
|
||||
|
||||
setcolor(LIGHTRED);
|
||||
settextstyle(DEFAULT_FONT, HORIZ_DIR, 3);
|
||||
outtextxy(16, 86, "size 3");
|
||||
|
||||
/* Прямоугольник пунктиром + диагонали. */
|
||||
setcolor(LIGHTMAGENTA);
|
||||
setlinestyle(DASHED_LINE, 0, NORM_WIDTH);
|
||||
rectangle(20, 212, 130, 250);
|
||||
line(20, 212, 130, 250);
|
||||
settextstyle(DEFAULT_FONT, HORIZ_DIR, 4);
|
||||
outtextxy(16, 140, "BIG 4");
|
||||
|
||||
/* Вертикальный текст (поворот 90° CCW). */
|
||||
setcolor(YELLOW);
|
||||
settextstyle(DEFAULT_FONT, VERT_DIR, 2);
|
||||
outtextxy(280, 240, "VERTICAL");
|
||||
|
||||
setcolor(WHITE);
|
||||
setlinestyle(SOLID_LINE, 0, NORM_WIDTH);
|
||||
outtextxy(150, 228, "dashed rect");
|
||||
settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);
|
||||
outtextxy(16, 200, "horiz + vert, scale 1..4");
|
||||
|
||||
for (;;) { }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user