Files
FnixLib/include/fnix/window.h
T

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 */