libc: BGI Фаза 2b — заливки (setfillstyle/bar/bar3d/fillpoly/fillellipse)
setfillstyle/getfillsettings + 10 стандартных 8×8 паттернов Borland. bar теперь честно учитывает стиль заливки; bar3d (3D-брусок), fillpoly (scanline min/max по строкам через брезенхэмовский проход рёбер), fillellipse (полуширина строки через целочисленный _bgi_isqrt — без 32-бит). Общий _bgi_fill_span (SOLID/EMPTY/паттерн) с клипом, поверх raw-hline в одной W3-скобке. Проверено в MAME (tests/bgitest): solid/ hatch бары, bar3d со slash, синий fillellipse, xhatch-треугольник. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <graphics.h>
|
||||
#include <gfx.h> /* GFX_WIDTH/HEIGHT для внутренних таблиц */
|
||||
|
||||
/* ---- Состояние (_bgi_state.c) ------------------------------------ */
|
||||
extern uint8_t _bgi_fg; /* текущий цвет рисования */
|
||||
@@ -53,6 +54,27 @@ int _bgi_cos128(int deg);
|
||||
* по точкам от stangle до endangle с полуосями xr,yr вокруг (cx,cy). */
|
||||
void _bgi_ellipse_arc(int cx, int cy, int stangle, int endangle,
|
||||
int xr, int yr, uint8_t color);
|
||||
|
||||
/* Целочисленный sqrt (0..~32767) для fillellipse (_bgi_isqrt.c). */
|
||||
int _bgi_isqrt(int n);
|
||||
|
||||
/* ---- Состояние заливки (_bgi_fill_state.c) ----------------------- */
|
||||
extern uint8_t _bgi_fill_pattern; /* *_FILL */
|
||||
extern uint8_t _bgi_fill_color;
|
||||
|
||||
/* Raw horizontal span (без своей W3-скобки; клип делает сам gfx-raw). */
|
||||
void _bgi_hspan_raw(int x, int y, int len, uint8_t color);
|
||||
|
||||
/* Залить строку [x0..x1] на y ТЕКУЩИМ стилем заливки (паттерн+цвет),
|
||||
* с клипом по экрану. Вызывать между _bgi_begin/_bgi_end. */
|
||||
void _bgi_fill_span(int x0, int x1, int y);
|
||||
|
||||
/* Скан-таблицы min/max X по строкам для fillpoly (_bgi_poly_state.c). */
|
||||
extern int _bgi_span_min[GFX_HEIGHT];
|
||||
extern int _bgi_span_max[GFX_HEIGHT];
|
||||
|
||||
/* Прогнать ребро (Брезенхэм) обновляя _bgi_span_min/max (_bgi_poly_edge.c). */
|
||||
void _bgi_poly_edge(int x0, int y0, int x1, int y1);
|
||||
void _bgi_hspan(int x, int y, int len, uint8_t color);
|
||||
void _bgi_lineseg(int x0, int y0, int x1, int y1, uint8_t color);
|
||||
void _bgi_fillrect(int x, int y, int w, int h, uint8_t color);
|
||||
|
||||
Reference in New Issue
Block a user