48 lines
1.8 KiB
C
48 lines
1.8 KiB
C
/*
|
|
* FnixLib - dibujo 2D por software.
|
|
*
|
|
* Todas las funciones dibujan sobre el lienzo de destino (fnix_get_target()).
|
|
* Sin destino no hacen nada y dejan un error en fnix_last_error().
|
|
*
|
|
* Reglas comunes:
|
|
* - Se recorta al lienzo: dibujar parcial o totalmente fuera es seguro.
|
|
* - Color con alfa 255 reemplaza el píxel; alfa 0 no dibuja; los valores
|
|
* intermedios se mezclan con el fondo (alfa "source-over").
|
|
* - Cada píxel se modifica como máximo una vez por llamada, así que la mezcla
|
|
* con alfa nunca se aplica dos veces sobre el mismo píxel.
|
|
* - Coordenadas, anchos, altos y radios deben estar en [-2^28, 2^28]; fuera
|
|
* de ese rango no se dibuja nada y se registra un error.
|
|
*/
|
|
#ifndef FNIX_DRAW2D_H
|
|
#define FNIX_DRAW2D_H
|
|
|
|
#include "fnix/types.h"
|
|
|
|
FNIX_BEGIN_DECLS
|
|
|
|
/* Rellena todo el lienzo. Ignora el alfa del color (escribe color opaco). */
|
|
void fnix_clear(FnixColor color);
|
|
|
|
void fnix_draw_pixel(int x, int y, FnixColor color);
|
|
|
|
/* Línea de 1 píxel de grosor; incluye ambos extremos. */
|
|
void fnix_draw_line(int x_start, int y_start, int x_end, int y_end,
|
|
FnixColor color);
|
|
|
|
/* Rectángulo con esquina superior izquierda (x, y). width o height <= 0
|
|
* no dibujan nada. */
|
|
void fnix_draw_rect(int x, int y, int width, int height, FnixColor color);
|
|
void fnix_draw_rect_outline(int x, int y, int width, int height,
|
|
FnixColor color);
|
|
|
|
/* Círculo de centro (cx, cy). Un píxel (dx, dy) pertenece al disco si
|
|
* dx*dx + dy*dy <= radius*radius + radius. radius 0 dibuja un píxel;
|
|
* radius < 0 no dibuja nada. El contorno es el disco de radio `radius`
|
|
* menos el de radio `radius - 1` (1 píxel de grosor). */
|
|
void fnix_draw_circle(int cx, int cy, int radius, FnixColor color);
|
|
void fnix_draw_circle_outline(int cx, int cy, int radius, FnixColor color);
|
|
|
|
FNIX_END_DECLS
|
|
|
|
#endif /* FNIX_DRAW2D_H */
|