66 lines
2.5 KiB
C
66 lines
2.5 KiB
C
/*
|
|
* FnixLib - ventanas.
|
|
*
|
|
* Uso típico:
|
|
*
|
|
* FnixWindow *window = fnix_window_create("Mi juego", 800, 600);
|
|
* while (!fnix_window_should_close(window)) {
|
|
* fnix_begin_frame(window); // lee eventos, fija el destino
|
|
* fnix_clear(FNIX_BLACK);
|
|
* fnix_draw_circle(400, 300, 50, FNIX_RED);
|
|
* fnix_end_frame(window); // muestra y limita los FPS
|
|
* }
|
|
* fnix_window_destroy(window);
|
|
*
|
|
* Limitaciones de la versión 0.1.0: la ventana tiene tamaño fijo y solo existe
|
|
* la implementación para Linux/X11 (ver README.md).
|
|
*
|
|
* Todas las funciones aceptan window == NULL (no hacen nada o devuelven 0).
|
|
*/
|
|
#ifndef FNIX_WINDOW_H
|
|
#define FNIX_WINDOW_H
|
|
|
|
#include "fnix/types.h"
|
|
|
|
FNIX_BEGIN_DECLS
|
|
|
|
/* Crea y muestra una ventana de width x height píxeles (cada lado entre 1 y
|
|
* FNIX_CANVAS_MAX_SIZE) y su lienzo. Devuelve NULL si falla; el motivo está
|
|
* en fnix_last_error(). Límite inicial de FPS: 60. */
|
|
FnixWindow *fnix_window_create(const char *title, int width, int height);
|
|
|
|
/* Cierra la ventana y libera todos sus recursos. Acepta NULL. */
|
|
void fnix_window_destroy(FnixWindow *window);
|
|
|
|
/* true cuando el usuario cerró la ventana o se llamó a fnix_window_request_close. */
|
|
bool fnix_window_should_close(const FnixWindow *window);
|
|
void fnix_window_request_close(FnixWindow *window);
|
|
|
|
int fnix_window_width(const FnixWindow *window);
|
|
int fnix_window_height(const FnixWindow *window);
|
|
|
|
/* Lienzo de la ventana; lo que se dibuje en él se muestra en fnix_end_frame().
|
|
* Pertenece a la ventana: no se debe destruir por separado. */
|
|
FnixCanvas *fnix_window_canvas(FnixWindow *window);
|
|
|
|
/* Limita los fotogramas por segundo durmiendo en fnix_end_frame().
|
|
* 0 desactiva el límite (el bucle usará toda la CPU). Valores negativos = 0. */
|
|
void fnix_window_set_target_fps(FnixWindow *window, int fps);
|
|
|
|
/* Segundos entre el inicio del fotograma anterior y el del actual (medidos en
|
|
* fnix_begin_frame). Vale 0 en el primer fotograma. */
|
|
double fnix_window_delta_time(const FnixWindow *window);
|
|
|
|
/* Inicio de fotograma: borra los "pressed/released" y la rueda del fotograma
|
|
* anterior, procesa los eventos pendientes del sistema, calcula el delta time
|
|
* y fija el lienzo de la ventana como destino de dibujo. NO borra el lienzo. */
|
|
void fnix_begin_frame(FnixWindow *window);
|
|
|
|
/* Fin de fotograma: muestra el lienzo en la ventana y espera lo necesario para
|
|
* respetar el límite de FPS. */
|
|
void fnix_end_frame(FnixWindow *window);
|
|
|
|
FNIX_END_DECLS
|
|
|
|
#endif /* FNIX_WINDOW_H */
|