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:
+14
-7
@@ -46,13 +46,20 @@ outtext/outtextxy. initgraph грузит EGA-палитру 0..15. Пакет
|
||||
- 2c: floodfill (scanline span; медленный — self-bracket чтение, но
|
||||
корректный), pieslice, sector.
|
||||
|
||||
**Фаза 2d (осталось):** getimage/putimage/imagesize (COPY/XOR/AND/OR/
|
||||
NOT_PUT), setviewport/clearviewport + клиппинг, settextstyle/textwidth/
|
||||
textheight (размеры/направление), setlinestyle, setactivepage/
|
||||
setvisualpage (2 страницы в gfx уже есть), setaspectratio (пиксели
|
||||
320×256 неквадратные — круги визуально эллиптичны), setfillpattern
|
||||
(USER_FILL). Оптимизации: floodfill на raw-чтении; ellipse/arc в одной
|
||||
W3-сессии. Потом drv16 + sprinter_gfx16.lib (--gfx 16).
|
||||
**Фаза 2d-1/2/3 ГОТОВЫ (2026-07-08, MAME tests/bgitest):**
|
||||
- 2d-1: getimage/putimage/imagesize (COPY/XOR/OR/AND/NOT_PUT), raw-блит
|
||||
в одной W3-скобке (_gfx_getpixel256_raw).
|
||||
- 2d-2: setlinestyle/getlinesettings (SOLID/DOTTED/CENTER/DASHED/USERBIT
|
||||
+ NORM/THICK) — line/lineto/linerel/rectangle/drawpoly.
|
||||
- 2d-3: settextstyle/gettextsettings/textwidth/textheight — масштаб
|
||||
1..10, HORIZ/VERT, прозрачный фон (свой scaled-рендер поверх 8×8).
|
||||
|
||||
**Фаза 2d (осталось):** setviewport/clearviewport + клиппинг (инвазивно —
|
||||
трогает все примитивы), settextjustify, setaspectratio (пиксели 320×256
|
||||
неквадратные — круги визуально эллиптичны), setfillpattern (USER_FILL),
|
||||
setactivepage/setvisualpage (2 страницы в gfx уже есть). Оптимизации:
|
||||
floodfill на raw-чтении; ellipse/arc в одной W3-сессии. Потом drv16 +
|
||||
sprinter_gfx16.lib (--gfx 16).
|
||||
Acceptance: типичная BGI-программа переносится без существенных
|
||||
правок. Референс: Turbo C 2.x BGIDEMO.
|
||||
|
||||
|
||||
+10
-2
@@ -229,11 +229,19 @@ CP), `line(x1,y1,x2,y2)` (не двигает).
|
||||
`fillpoly(n,pts)`, `fillellipse(x,y,xr,yr)`.
|
||||
Заливка областей (Ф2c): `floodfill(x,y,border)` (медленно, но верно),
|
||||
`pieslice(x,y,st,end,r)`, `sector(x,y,st,end,xr,yr)`.
|
||||
Спрайты (Ф2d): `imagesize/getimage/putimage` (COPY/XOR/OR/AND/NOT_PUT;
|
||||
формат буфера: uint16 w,h + w*h байт).
|
||||
Стиль линий (Ф2d): `setlinestyle(style,upattern,thick)`/`getlinesettings`
|
||||
(SOLID/DOTTED/CENTER/DASHED/USERBIT + NORM/THICK) — на line/rectangle/
|
||||
drawpoly.
|
||||
Стиль текста (Ф2d): `settextstyle(font,dir,size)`/`gettextsettings`,
|
||||
`textwidth`/`textheight` — масштаб 1..10, HORIZ/VERT, прозрачный фон
|
||||
(только DEFAULT_FONT 8×8).
|
||||
Реализация: libc/bgi/*.c (math) + libc/bgi/drv256/*.c (leaf →
|
||||
sprinter_gfx256.lib). Пакетные примитивы — одна W3-скобка на примитив;
|
||||
тригонометрия/эллипсы целочисленные (Q7/isqrt, БЕЗ 32-бит).
|
||||
Ф2d (осталось): getimage/putimage, viewport/клиппинг, settextstyle,
|
||||
setlinestyle, setaspectratio — см. docs/TODO.md.
|
||||
Ф2d (осталось): setviewport/клиппинг, settextjustify, setaspectratio —
|
||||
см. docs/TODO.md.
|
||||
|
||||
## <irq.h> — user-ISR кадрового прерывания (IM 2)
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ banked 1056
|
||||
bankedbg 1067
|
||||
banklocl 4832
|
||||
banktest 3767
|
||||
bgitest 3896
|
||||
bgitest 4196
|
||||
bios_text 4470
|
||||
cat 915
|
||||
cblstream 6277
|
||||
|
||||
|
Reference in New Issue
Block a user