- Primer commit de l'esperada seqüela de Cacaus
This commit is contained in:
154
source/japi/draw.h
Normal file
154
source/japi/draw.h
Normal file
@@ -0,0 +1,154 @@
|
||||
#pragma once
|
||||
#include <cstdint>
|
||||
|
||||
//#define DRAW_FLIP_NONE 0
|
||||
//#define DRAW_FLIP_HORIZONTAL 1
|
||||
//#define DRAW_FLIP_VERTICAL 2
|
||||
//#define DRAW_FLIP_BOTH 3
|
||||
|
||||
// Unitat per a la gestió dels recursos gràfics i dibuixat en pantalla
|
||||
namespace draw
|
||||
{
|
||||
enum flip { none, horizontal, vertical, both };
|
||||
|
||||
// Estructura per a mantindre una superficie de pintat, la "pantalla virtual" de tota la vida
|
||||
struct surface
|
||||
{
|
||||
uint16_t w; // Ample de la superficie
|
||||
uint16_t h; // Alt de la superficie
|
||||
uint8_t *pixels; // pixels de la superficie
|
||||
};
|
||||
|
||||
/// @brief Inicialització de tot el que fa falta per a carregar gràfics i pintar en pantalla.
|
||||
/// @brief La finestra serà width*zoom x height*zoom de gran.
|
||||
/// @param titol es el text que apareixerà en la finestra
|
||||
/// @param width es el ample de la finestra "virtual"
|
||||
/// @param height es el alt de la finestra "virtual"
|
||||
/// @param zoom es com de grans son els pixels.
|
||||
void init(const char *titol, const uint16_t width, const uint16_t height, const int zoom, const bool fullscreen=false, const float ratio=1.0);
|
||||
|
||||
/// @brief Finalització del sistema (tancar coses de SDL, superficies fixes, etc...)
|
||||
void quit();
|
||||
|
||||
void setZoom(const int value);
|
||||
const int getZoom();
|
||||
const float getScaleX();
|
||||
const float getScaleY();
|
||||
const int getOffsetX();
|
||||
const int getOffsetY();
|
||||
|
||||
bool getFullscreen();
|
||||
void setFullscreen(const bool value);
|
||||
|
||||
void loadShader();
|
||||
void setShader(const char* shader_file);
|
||||
void enableShader();
|
||||
void disableShader();
|
||||
void toggleShader();
|
||||
|
||||
void hideCursor();
|
||||
void showCursor();
|
||||
|
||||
/// @brief Crea una superficie i torna un punter a ella
|
||||
/// @param w ample de la superficie
|
||||
/// @param h alt de la superficie
|
||||
/// @return un punter a una nova superficie
|
||||
surface *createSurface(const uint16_t w, const uint16_t h);
|
||||
|
||||
/// @brief Carrega un gràfic d'un arxiu (en format GIF) a una nova superficie, i torna un punter a ella
|
||||
/// @param filename nom de l'arxiu GIF d'on carregar la superficie
|
||||
/// @param loadPalette si es true també se carrega la paleta del GIF
|
||||
/// @return un punter a una nova superficie
|
||||
surface *loadSurface(const char* filename, const bool loadPalette = false);
|
||||
|
||||
/// @brief Allibera la memòria d'una superficie, els seus pixels inclosos
|
||||
/// @param surf punter a la superficie a alliberar
|
||||
void freeSurface(surface *surf);
|
||||
|
||||
/// @brief Estableix una superficie com a superficie que rebrà les funcions de pintat (especificar nullptr per a pintar a pantalla)
|
||||
/// @param surf punter a la superficie a establir com a destinació
|
||||
void setDestination(surface *surf);
|
||||
|
||||
/// @brief Estableix una superficie com a superficie de la que s'agafaràn els gràfics per a pintar
|
||||
/// @param surf punter a la superficie a establir com a oritge
|
||||
void setSource(surface *surf);
|
||||
|
||||
void pushSource();
|
||||
void popSource();
|
||||
|
||||
void setViewport(const int x, const int y, const int w, const int h);
|
||||
void resetViewport();
|
||||
|
||||
const int getLocalX(const int x);
|
||||
const int getLocalY(const int y);
|
||||
|
||||
/// @brief Carrega la paleta d'un GIF i la torna en un array de uint32_t
|
||||
/// @param filename nom de l'arxiu GIF d'on carregar la paleta
|
||||
/// @param paletteSize si no es NULL ens torna el tamany de la paleta carregada
|
||||
uint32_t *loadPalette(const char *filename, int *paletteSize = nullptr);
|
||||
|
||||
/// @brief Estableix la paleta del sistema, o part de ella, des d'un array especificat
|
||||
/// @param pal un array de uint32_t
|
||||
/// @param len quantes entrades volem trasladar a la paleta de sistema (no superar el tamany de 'pal'!)
|
||||
/// @param pos des de quina posició de la paleta de sistema comencem a copiar
|
||||
void setPalette(const uint32_t *pal, const int len, const int pos=0);
|
||||
|
||||
/// @brief Recupera la paleta del sistema, o part de ella, a un array
|
||||
/// @return un array de uint32_t
|
||||
uint32_t *getPalette();
|
||||
|
||||
/// @brief Estableix una entrada de la paleta del sistema
|
||||
/// @param index l'index de l'entrada de la paleta
|
||||
/// @param r la component roja de l'entrada de la paleta
|
||||
/// @param g la component verda de l'entrada de la paleta
|
||||
/// @param b la component blava de l'entrada de la paleta
|
||||
void setPaletteEntry(const uint8_t index, const uint8_t r, const uint8_t g, const uint8_t b);
|
||||
|
||||
/// @brief Esborra la superficie "destination" amb el color especificat
|
||||
/// @param color color a usar per a borrar la superficie de destinació
|
||||
void cls(const uint8_t color);
|
||||
|
||||
/// @brief Estableix el color especificat com a transparent
|
||||
/// @param color color a usar com a transparent
|
||||
void setTrans(const uint8_t color);
|
||||
|
||||
void putPixel(const int x, const int y, const uint8_t color);
|
||||
|
||||
/// @brief Pinta un troç de la superficie "source" en la superficie "destination".
|
||||
/// @param dx coordenada x de la destinació
|
||||
/// @param dy coordenada y de la destinació
|
||||
/// @param w ample del quadrat a pintar
|
||||
/// @param h alt del quadrat a pintar
|
||||
/// @param sx coordenada x de l'oritge
|
||||
/// @param sy coordenada y de l'oritge
|
||||
/// @param flip si s'ha de fer flip en hortizontal o vertical (o ambdos)
|
||||
void draw(const int dx, const int dy, const int w, const int h, const int sx, const int sy, const draw::flip flip = draw::flip::none);
|
||||
|
||||
/// @brief Pinta tota la superficie "source" en la superficie "destination", posició (x,y).
|
||||
/// @param x coordenada x de la destinació
|
||||
/// @param y coordenada y de la destinació
|
||||
void draw(const int x, const int y);
|
||||
|
||||
/// @brief Pinta tota la superficie "source" en la superficie "destination", posició (0,0).
|
||||
void draw();
|
||||
|
||||
/// @brief Carrega la superficie especificada en "source" i la pinta tota en la superficie "destination", posició (0,0).
|
||||
void draw(draw::surface* surf);
|
||||
|
||||
void swapcol(const uint8_t c1, const uint8_t c2);
|
||||
void restorecol(const uint8_t c);
|
||||
void color(const uint8_t col);
|
||||
void hline(const int x, const int y, const int w);
|
||||
void vline(const int x, const int y, const int h);
|
||||
void fillrect(const int x, const int y, const int w, const int h);
|
||||
void rect(const int x, const int y, const int w, const int h);
|
||||
|
||||
void fadein();
|
||||
void fadeout();
|
||||
bool isfading();
|
||||
|
||||
//void print(const char* text, const int x, const int y, const uint8_t color, const uint8_t borde);
|
||||
|
||||
/// @brief Refresca la pantalla
|
||||
void render();
|
||||
}
|
||||
Reference in New Issue
Block a user