diff options
| author | andromeda <andromeda@lenovo> | 2026-04-24 22:07:01 +0200 |
|---|---|---|
| committer | andromeda <andromeda@lenovo> | 2026-04-24 22:07:01 +0200 |
| commit | 643cf49f77e64f00589bc16147be0afc95fc08cf (patch) | |
| tree | a0055c97ba4d024e3c27d2679ddc5c4447ed6b0e /tigr.h | |
| parent | 1b3c57972570f9e79c21a571b6cd1b3273ea3059 (diff) | |
rgfw
Diffstat (limited to 'tigr.h')
| -rw-r--r-- | tigr.h | 366 |
1 files changed, 0 insertions, 366 deletions
@@ -1,366 +0,0 @@ -// TIGR - TIny GRaphics Library - v3.2 -// ^^ ^^ -// -// rawr. - -/* -This is free and unencumbered software released into the public domain. - -Our intent is that anyone is free to copy and use this software, -for any purpose, in any form, and by any means. - -The authors dedicate any and all copyright interest in the software -to the public domain, at their own expense for the betterment of mankind. - -The software is provided "as is", without any kind of warranty, including -any implied warranty. If it breaks, you get to keep both pieces. -*/ - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -// Compiler configuration. -#ifdef _MSC_VER -#define TIGR_INLINE static __forceinline -#else -#define TIGR_INLINE static inline -#endif - -// Bitmaps ---------------------------------------------------------------- - -// This struct contains one pixel. -typedef struct { - unsigned char r, g, b, a; -} TPixel; - -// Window flags. -#define TIGR_FIXED 0 // window's bitmap is a fixed size (default) -#define TIGR_AUTO 1 // window's bitmap is scaled with the window -#define TIGR_2X 2 // always enforce (at least) 2X pixel scale -#define TIGR_3X 4 // always enforce (at least) 3X pixel scale -#define TIGR_4X 8 // always enforce (at least) 4X pixel scale -#define TIGR_RETINA 16 // enable retina support on OS X -#define TIGR_NOCURSOR 32 // hide cursor -#define TIGR_FULLSCREEN 64 // start in full-screen mode - -// A Tigr bitmap. -typedef struct Tigr { - int w, h; // width/height (unscaled) - int cx, cy, cw, ch; // clip rect - TPixel *pix; // pixel data - void *handle; // OS window handle, NULL for off-screen bitmaps. - int blitMode; // Target bitmap blit mode -} Tigr; - -// Creates a new empty window with a given bitmap size. -// -// Title is UTF-8. -// -// In TIGR_FIXED mode, the window is made as large as possible to contain an integer-scaled -// version of the bitmap while still fitting on the screen. Resizing the window will adapt -// the scale in integer steps to fit the bitmap. -// -// In TIGR_AUTO mode, the initial window size is set to the bitmap size times the pixel -// scale. Resizing the window will resize the bitmap using the specified scale. -// For example, in forced 2X mode, the window will be twice as wide (and high) as the bitmap. -// -// Turning on TIGR_RETINA mode will request full backing resolution on OSX, meaning that -// the effective window size might be integer scaled to a larger size. In TIGR_AUTO mode, -// this means that the Tigr bitmap will change size if the window is moved between -// retina and non-retina screens. -// -Tigr *tigrWindow(int w, int h, const char *title, int flags); - -// Creates an empty off-screen bitmap. -Tigr *tigrBitmap(int w, int h); - -// Deletes a window/bitmap. -void tigrFree(Tigr *bmp); - -// Returns non-zero if the user requested to close a window. -int tigrClosed(Tigr *bmp); - -// Displays a window's contents on-screen and updates input. -void tigrUpdate(Tigr *bmp); - -// Called before doing direct OpenGL calls and before tigrUpdate. -// Returns non-zero if OpenGL is available. -int tigrBeginOpenGL(Tigr *bmp); - -// Sets post shader for a window. -// This replaces the built-in post-FX shader. -void tigrSetPostShader(Tigr *bmp, const char* code, int size); - -// Sets post-FX properties for a window. -// -// The built-in post-FX shader uses the following parameters: -// p1: hblur - use bilinear filtering along the x-axis (pixels) -// p2: vblur - use bilinear filtering along the y-axis (pixels) -// p3: scanlines - CRT scanlines effect (0-1) -// p4: contrast - contrast boost (1 = no change, 2 = 2X contrast, etc) -void tigrSetPostFX(Tigr *bmp, float p1, float p2, float p3, float p4); - - -// Drawing ---------------------------------------------------------------- - -// Helper for reading pixels. -// For high performance, just access bmp->pix directly. -TPixel tigrGet(Tigr *bmp, int x, int y); - -// Plots a pixel. -// Clips and blends. -// For high performance, just access bmp->pix directly. -void tigrPlot(Tigr *bmp, int x, int y, TPixel pix); - -// Clears a bitmap to a color. -// No blending, no clipping. -void tigrClear(Tigr *bmp, TPixel color); - -// Fills a rectangular area. -// No blending, no clipping. -void tigrFill(Tigr *bmp, int x, int y, int w, int h, TPixel color); - -// Draws a line. -// Start pixel is drawn, end pixel is not. -// Clips and blends. -void tigrLine(Tigr *bmp, int x0, int y0, int x1, int y1, TPixel color); - -// Draws an empty rectangle. -// Drawing a 1x1 rectangle yields the same result as calling tigrPlot. -// Clips and blends. -void tigrRect(Tigr *bmp, int x, int y, int w, int h, TPixel color); - -// Fills a rectangle. -// Fills the inside of the specified rectangular area. -// Calling tigrRect followed by tigrFillRect using the same arguments -// causes no overdrawing. -// Clips and blends. -void tigrFillRect(Tigr *bmp, int x, int y, int w, int h, TPixel color); - -// Draws a circle. -// Drawing a zero radius circle yields the same result as calling tigrPlot. -// Drawing a circle with radius one draws a circle three pixels wide. -// Clips and blends. -void tigrCircle(Tigr *bmp, int x, int y, int r, TPixel color); - -// Fills a circle. -// Fills the inside of the specified circle. -// Calling tigrCircle followed by tigrFillCircle using the same arguments -// causes no overdrawing. -// Filling a circle with zero radius has no effect. -// Clips and blends. -void tigrFillCircle(Tigr *bmp, int x, int y, int r, TPixel color); - -// Sets clip rect. -// Set to (0, 0, -1, -1) to reset clipping to full bitmap. -void tigrClip(Tigr *bmp, int cx, int cy, int cw, int ch); - -// Copies bitmap data. -// dx/dy = dest co-ordinates -// sx/sy = source co-ordinates -// w/h = width/height -// -// RGBAdest = RGBAsrc -// Clips, does not blend. -void tigrBlit(Tigr *dest, Tigr *src, int dx, int dy, int sx, int sy, int w, int h); - -// Same as tigrBlit, but alpha blends the source bitmap with the -// target using per pixel alpha and the specified global alpha. -// -// Ablend = Asrc * alpha -// RGBdest = RGBsrc * Ablend + RGBdest * (1 - Ablend) -// -// Blit mode == TIGR_KEEP_ALPHA: -// Adest = Adest -// -// Blit mode == TIGR_BLEND_ALPHA: -// Adest = Asrc * Ablend + Adest * (1 - Ablend) -// Clips and blends. -void tigrBlitAlpha(Tigr *dest, Tigr *src, int dx, int dy, int sx, int sy, int w, int h, float alpha); - -// Same as tigrBlit, but tints the source bitmap with a color -// and alpha blends the resulting source with the destination. -// -// Rblend = Rsrc * Rtint -// Gblend = Gsrc * Gtint -// Bblend = Bsrc * Btint -// Ablend = Asrc * Atint -// -// RGBdest = RGBblend * Ablend + RGBdest * (1 - Ablend) -// -// Blit mode == TIGR_KEEP_ALPHA: -// Adest = Adest -// -// Blit mode == TIGR_BLEND_ALPHA: -// Adest = Ablend * Ablend + Adest * (1 - Ablend) -// Clips and blends. -void tigrBlitTint(Tigr *dest, Tigr *src, int dx, int dy, int sx, int sy, int w, int h, TPixel tint); - -enum TIGRBlitMode { - TIGR_KEEP_ALPHA = 0, // Keep destination alpha value - TIGR_BLEND_ALPHA = 1, // Blend destination alpha (default) -}; - -// Set destination bitmap blend mode for blit operations. -void tigrBlitMode(Tigr *dest, int mode); - -// Helper for making colors. -TIGR_INLINE TPixel tigrRGB(unsigned char r, unsigned char g, unsigned char b) -{ - TPixel p; p.r = r; p.g = g; p.b = b; p.a = 0xff; return p; -} - -// Helper for making colors. -TIGR_INLINE TPixel tigrRGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a) -{ - TPixel p; p.r = r; p.g = g; p.b = b; p.a = a; return p; -} - - -// Font printing ---------------------------------------------------------- - -typedef struct { - int code, x, y, w, h; -} TigrGlyph; - -typedef struct { - Tigr *bitmap; - int numGlyphs; - TigrGlyph *glyphs; -} TigrFont; - -typedef enum { - TCP_ASCII = 0, - TCP_1252 = 1252, - TCP_UTF32 = 12001 -} TCodepage; - -// Loads a font from a bitmap font sheet. -// The loaded font takes ownership of the provided bitmap. -// -// Codepages: -// -// TCP_ASCII - Regular 7-bit ASCII -// TCP_1252 - Windows 1252 -// TCP_UTF32 - Unicode subset -// -// For ASCII and 1252, the font bitmap should contain all characters -// for the given codepage, excluding the first 32 control codes. -// -// For UTF32 - the font bitmap contains a subset of Unicode characters -// and must be in the format generated by tigrFont for UTF32. -// -TigrFont *tigrLoadFont(Tigr *bitmap, int codepage); - -// Frees a font and associated font sheet. -void tigrFreeFont(TigrFont *font); - -// Prints UTF-8 text onto a bitmap. -// NOTE: -// This uses the target bitmap blit mode. -// See tigrBlitTint for details. -void tigrPrint(Tigr *dest, TigrFont *font, int x, int y, TPixel color, const char *text, ...); - -// Returns the width/height of a string. -int tigrTextWidth(TigrFont *font, const char *text); -int tigrTextHeight(TigrFont *font, const char *text); - -// The built-in font. -extern TigrFont *tfont; - - -// User Input ------------------------------------------------------------- - -// Key scancodes. For letters/numbers, use ASCII ('A'-'Z' and '0'-'9'). -typedef enum { - TK_PAD0=128,TK_PAD1,TK_PAD2,TK_PAD3,TK_PAD4,TK_PAD5,TK_PAD6,TK_PAD7,TK_PAD8,TK_PAD9, - TK_PADMUL,TK_PADADD,TK_PADENTER,TK_PADSUB,TK_PADDOT,TK_PADDIV, - TK_F1,TK_F2,TK_F3,TK_F4,TK_F5,TK_F6,TK_F7,TK_F8,TK_F9,TK_F10,TK_F11,TK_F12, - TK_BACKSPACE,TK_TAB,TK_RETURN,TK_SHIFT,TK_CONTROL,TK_ALT,TK_PAUSE,TK_CAPSLOCK, - TK_ESCAPE,TK_SPACE,TK_PAGEUP,TK_PAGEDN,TK_END,TK_HOME,TK_LEFT,TK_UP,TK_RIGHT,TK_DOWN, - TK_INSERT,TK_DELETE,TK_LWIN,TK_RWIN,TK_NUMLOCK,TK_SCROLL,TK_LSHIFT,TK_RSHIFT, - TK_LCONTROL,TK_RCONTROL,TK_LALT,TK_RALT,TK_SEMICOLON,TK_EQUALS,TK_COMMA,TK_MINUS, - TK_DOT,TK_SLASH,TK_BACKTICK,TK_LSQUARE,TK_BACKSLASH,TK_RSQUARE,TK_TICK -} TKey; - -// Returns mouse input for a window. -// The value set to "buttons" is a bit set where bits 0, 1 and 2 -// corresponds to the left, right and middle buttons. -// A set bit indicates that a button is held. -void tigrMouse(Tigr *bmp, int *x, int *y, int *buttons); - -typedef struct { - int x; - int y; -} TigrTouchPoint; - -// Reads touch input for a window. -// Returns number of touch points read. -int tigrTouch(Tigr *bmp, TigrTouchPoint* points, int maxPoints); - -// Reads the delta of the scroll "wheel" in somewhat platform neutral -// units where 1.0 corresponds to a "notch". The actual correlation between -// physical movement and this number varies between platforms, input methods -// and settings. -void tigrScrollWheel(Tigr* bmp, float* x, float *y); - -// Reads the keyboard for a window. -// Returns non-zero if a key is pressed/held. -// tigrKeyDown tests for the initial press, tigrKeyHeld repeats each frame. -int tigrKeyDown(Tigr *bmp, int key); -int tigrKeyHeld(Tigr *bmp, int key); - -// Reads character input for a window. -// Returns the Unicode value of the last key pressed, or 0 if none. -int tigrReadChar(Tigr *bmp); - -// Show / hide virtual keyboard. -// (Only available on iOS / Android) -void tigrShowKeyboard(int show); - - -// Bitmap I/O ------------------------------------------------------------- - -// Loads a PNG, from either a file or memory. (fileName is UTF-8) -// On error, returns NULL and sets errno. -Tigr *tigrLoadImage(const char *fileName); -Tigr *tigrLoadImageMem(const void *data, int length); - -// Saves a PNG to a file. (fileName is UTF-8) -// On error, returns zero and sets errno. -int tigrSaveImage(const char *fileName, Tigr *bmp); - - -// Helpers ---------------------------------------------------------------- - -// Returns the amount of time elapsed since tigrTime was last called, -// or zero on the first call. -float tigrTime(void); - -// Displays an error message and quits. (UTF-8) -// 'bmp' can be NULL. -void tigrError(Tigr *bmp, const char *message, ...); - -// Reads an entire file into memory. (fileName is UTF-8) -// Free it yourself after with 'free'. -// On error, returns NULL and sets errno. -// TIGR will automatically append a NUL terminator byte -// to the end (not included in the length) -void *tigrReadFile(const char *fileName, int *length); - -// Decompresses DEFLATEd zip/zlib data into a buffer. -// Returns non-zero on success. -int tigrInflate(void *out, unsigned outlen, const void *in, unsigned inlen); - -// Decodes a single UTF8 codepoint and returns the next pointer. -const char *tigrDecodeUTF8(const char *text, int *cp); - -// Encodes a single UTF8 codepoint and returns the next pointer. -char *tigrEncodeUTF8(char *text, int cp); - -#ifdef __cplusplus -} -#endif |
