| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 |
- DEFINITION MODULE FOR "C" tigr;
- FROM SYSTEM IMPORT ADDRESS,BYTE;
- FROM DynamicStrings IMPORT String;
- EXPORT UNQUALIFIED tigrWindow, TigrPtr, tigrFree, tigrClosed,
- tigrClear,tigrUpdate,TPixelPtr,TPixelType,tigrLine, TK_ESCAPE, tigrKeyDown,
- tigrReadChar, tfont, tigrPrint,tigrFill,tigrCircle, tigrRect, tigrFillCircle,
- tigrTime, tigrError, tigrClip, tigrFillRect, tigrTextWidth, tigrTextHeight,
- tigrLoadImage,tigrReadFile, tigrBitmap, TIGR_2X ,tigrSetPostFX, tigrMouse,
- tigrBlit, tigrBlitAlpha ,tigrEncodeUTF8, TK_RIGHT,tigrKeyHeld, TK_SPACE, TK_LEFT;
- CONST
- TIGR_FIXED = 0; (* window's bitmap is a fixed size (default) *)
- TIGR_AUTO = 1; (* window's bitmap is scaled with the window *)
- TIGR_2X = 2; (* always enforce (at least) 2X pixel scale *)
- TIGR_3X = 4; (* always enforce (at least) 3X pixel scale *)
- TIGR_4X = 8; (* always enforce (at least) 4X pixel scale *)
- TIGR_RETINA = 16; (* enable retina support on OS X *)
- TIGR_NOCURSOR = 32; (* hide cursor *)
- TIGR_FULLSCREEN = 64;
- TYPE
- TPixelPtr = POINTER TO TPixelType;
- TPixelType = RECORD
- r, g, b, a : BYTE;
- END;
- TigrPtr = POINTER TO TigrType;
- TigrType = RECORD
- w,h : CARDINAL;
- cx, cy, cw, ch : CARDINAL;
- pix : TPixelPtr;
- handle : ADDRESS;
- blitMode : CARDINAL;
- END;
- intPtr = POINTER TO INTEGER;
- shortRealPtr = POINTER TO SHORTREAL;
- VAR Tigr : TigrType;
- (* 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. *)
- PROCEDURE tigrWindow( w, h: CARDINAL; title : String; flags : INTEGER): TigrPtr;
- (* Creates an empty off-screen bitmap. *)
- PROCEDURE tigrBitmap(w,h : CARDINAL): TigrPtr;
- (* Deletes a window/bitmap. *)
- PROCEDURE tigrFree(bmp: TigrPtr);
- (* Returns non-zero if the user requested to close a window. *)
- PROCEDURE tigrClosed(bmp: TigrPtr): INTEGER;
- (* Displays a window's contents on-screen and updates input. *)
- PROCEDURE tigrUpdate(bmp: TigrPtr);
- (* Called before doing direct OpenGL calls and before tigrUpdate.
- Returns non-zero if OpenGL is available. *)
- PROCEDURE tigrBeginOpenGL(bmp: TigrPtr): INTEGER;
- (* Sets post shader for a window.
- This replaces the built-in post-FX shader. *)
- PROCEDURE tigrSetPostShader(bmp: TigrPtr; code: ARRAY OF CHAR; size: CARDINAL);
- (* 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) *)
- PROCEDURE tigrSetPostFX(bmp: TigrPtr; p1, p2, p3, p4 : SHORTREAL);
- (* Drawing ---------------------------------------------------------------- *)
- (* Helper for reading pixels.
- For high performance, just access bmp->pix directly. *)
- PROCEDURE tigrGet(bmp: TigrPtr; x, y: CARDINAL): TPixelType;
- (* Plots a pixel.
- Clips and blends.
- For high performance, just access bmp->pix directly. *)
- PROCEDURE tigrPlot(bmp: TigrPtr; x, y: CARDINAL; pix: TPixelType);
- (* Clears a bitmap to a color.
- No blending, no clipping. *)
- PROCEDURE tigrClear(bmp: TigrPtr; color: TPixelType);
- (* Fills a rectangular area.
- No blending, no clipping. *)
- PROCEDURE tigrFill(bmp: TigrPtr; x, y, w, h: CARDINAL; color: TPixelType);
- (* Draws a line.
- Start pixel is drawn, end pixel is not.
- Clips and blends. *)
- PROCEDURE tigrLine(bmp: TigrPtr; x0, y0, x1, y1: CARDINAL; color: TPixelType);
- (* Draws an empty rectangle.
- Drawing a 1x1 rectangle yields the same result as calling tigrPlot.
- Clips and blends. *)
- PROCEDURE tigrRect(bmp: TigrPtr; x, y, w, h: CARDINAL; color: TPixelType);
- (* 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. *)
- PROCEDURE tigrFillRect(bmp: TigrPtr; x, y, w, h: CARDINAL; color: TPixelType);
- (* 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. *)
- PROCEDURE tigrCircle(bmp: TigrPtr; x, y, r: CARDINAL; color: TPixelType);
- (* 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. *)
- PROCEDURE tigrFillCircle(bmp: TigrPtr; x,y,r: CARDINAL; color: TPixelType );
- (* Sets clip rect.
- Set to (0, 0, -1, -1) to reset clipping to full bitmap. *)
- PROCEDURE tigrClip(bmp : TigrPtr; cx,cy,cw,ch: CARDINAL);
- (* Heper procedures in a separate file*)
- (* Copies bitmap data.
- dx/dy = dest co-ordinates
- sx/sy = source co-ordinates
- w/h = width/height
- RGBAdest = RGBAsrc
- Clips, does not blend. *)
- PROCEDURE tigrBlit(dest: TigrPtr; src: TigrPtr; dx, dy, sx, sy, w, h: CARDINAL);
- (*
- 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.
- *)
- PROCEDURE tigrBlitAlpha(dest, src: TigrPtr; dx, dy, sx, sy, w, h: CARDINAL; alpha: SHORTREAL);
- (* 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. *)
- PROCEDURE tigrBlitTint(dest, src: TigrPtr; dx, dy, sx, sy, w, h: CARDINAL; tint: TPixelType);
- (*TIGR_KEEP_ALPHA Keep destination alpha value*)
- (*TIGR_BLEND_ALPHA Blend destination alpha (default) *)
- CONST
- TIGR_KEEP_ALPHA = 0;
- TIGR_BLEND_ALPHA = -1;
- (* Set destination bitmap blend mode for blit operations. *)
- PROCEDURE tigrBlitMode(dest : TigrPtr; mode: CARDINAL);
- (* Font printing ---------------------------------------------------------- *)
- TYPE
- TigrGlyphType = RECORD
- code: INTEGER;
- x, y, w, h: CARDINAL;
- END;
- TigrFontTypePtr = POINTER TO TigrFontType;
- TigrFontType = RECORD
- bitmap: TigrPtr;
- numGlyphs: CARDINAL;
- glyphs: POINTER TO TigrGlyphType;
- END;
-
- TCodepageType = (TCP_ASCII, TCP_1252, TCP_UTF32);
-
- VAR
- TigrGlyph: TigrGlyphType;
- TigrFont: TigrFontType;
- TCodepage: TCodepageType;
- (* 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. *)
- PROCEDURE tigrLoadFont(bitmap: TigrPtr; codepage: CARDINAL): TigrFontTypePtr;
- (* Frees a font and associated font sheet. *)
- PROCEDURE tigrFreeFont(font: TigrFontTypePtr);
- (* Prints UTF-8 text onto a bitmap.
- NOTE:
- This uses the target bitmap blit mode.
- See tigrBlitTint for details. *)
- PROCEDURE tigrPrint(dest: TigrPtr; font: TigrFontTypePtr; x, y: CARDINAL; color: TPixelType; text : String; ...);
- (* Returns the width/height of a string. *)
- PROCEDURE tigrTextWidth(font: TigrFontTypePtr; text: ARRAY OF CHAR): INTEGER;
- PROCEDURE tigrTextHeight(font: TigrFontTypePtr; text: ARRAY OF CHAR): INTEGER;
- (* The built-in font. *)
- VAR tfont: TigrFontTypePtr;
- (* User Input -------------------------------------------------------------
- Key scancodes. For letters/numbers, use ASCII ('A'-'Z' and '0'-'9'). *)
- CONST
- TK_PAD0 = 128;
- TK_PAD1 = 129;
- TK_PAD2 = 130;
- TK_PAD3 = 131;
- TK_PAD4 = 132;
- TK_PAD5 = 133;
- TK_PAD6 = 134;
- TK_PAD7 = 135;
- TK_PAD8 = 136;
- TK_PAD9 = 137;
- TK_PADMUL = 138;
- TK_PADADD = 139;
- TK_PADENTER = 140;
- TK_PADSUB = 141;
- TK_PADDOT = 142;
- TK_PADDIV = 143;
- TK_F1 = 144;
- TK_F2 = 145;
- TK_F3 = 146;
- TK_F4 = 147;
- TK_F5 = 148;
- TK_F6 = 149;
- TK_F7 = 150;
- TK_F8 = 151;
- TK_F9 = 152;
- TK_F10 = 153;
- TK_F11 = 154;
- TK_F12 = 155;
- TK_BACKSPACE = 156;
- TK_TAB = 157;
- TK_RETURN = 158;
- TK_SHIFT = 159;
- TK_CONTROL = 160;
- TK_ALT = 161;
- TK_PAUSE = 162;
- TK_CAPSLOCK = 163;
- TK_ESCAPE = 164;
- TK_SPACE = 165;
- TK_PAGEUP = 166;
- TK_PAGEDN = 167;
- TK_END = 168;
- TK_HOME = 169;
- TK_LEFT = 170;
- TK_UP = 171;
- TK_RIGHT = 172;
- TK_DOWN = 173;
- TK_INSERT = 174;
- TK_DELETE = 175;
- TK_LWIN = 176;
- TK_RWIN = 177;
- TK_NUMLOCK = 178;
- TK_SCROLL = 179;
- TK_LSHIFT = 180;
- TK_RSHIFT = 181;
- TK_LCONTROL = 182;
- TK_RCONTROL = 183;
- TK_LALT = 184;
- TK_RALT = 185;
- TK_SEMICOLON = 186;
- TK_EQUALS = 187;
- TK_COMMA = 188;
- TK_MINUS = 189;
- TK_DOT = 190;
- TK_SLASH = 191;
- TK_BACKTICK = 192;
- TK_LSQUARE = 193;
- TK_BACKSLASH = 194;
- TK_RSQUARE = 195;
- TK_TICK = 196;
- (* 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. *)
- PROCEDURE tigrMouse(bmp: TigrPtr; VAR x,y,buttons: CARDINAL);
- TYPE
- TigrTouchPoint = RECORD
- x,y : INTEGER;
- END;
- TigrTouchPointPtr = POINTER TO TigrTouchPoint;
- (* Reads touch input for a window.
- Returns number of touch points read. *)
- PROCEDURE tigrTouch(bmp: TigrPtr; points: TigrTouchPointPtr; maxPoints: CARDINAL): INTEGER;
- (* 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. *)
- PROCEDURE tigrScrollWheel(bmp: TigrPtr; x, y: shortRealPtr);
- (* 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. *)
- PROCEDURE tigrKeyDown(bmp: TigrPtr; key: CARDINAL): CARDINAL;
- PROCEDURE tigrKeyHeld(bmp: TigrPtr; key: CARDINAL): CARDINAL;
- (* Reads character input for a window.
- Returns the Unicode value of the last key pressed, or 0 if none. *)
- PROCEDURE tigrReadChar(bmp: TigrPtr): CARDINAL;
- (* Show / hide virtual keyboard.
- (Only available on iOS / Android) *)
- PROCEDURE tigrShowKeyboard(show: CARDINAL);
- (* Bitmap I/O ------------------------------------------------------------- *)
- (* Loads a PNG, from either a file or memory. (fileName is UTF-8)
- On error, returns NULL and sets errno. *)
- PROCEDURE tigrLoadImage(fileName: ARRAY OF CHAR): TigrPtr;
- PROCEDURE tigrLoadImageMem(data: ADDRESS; length: CARDINAL): TigrPtr;
- (* Saves a PNG to a file. (fileName is UTF-8)
- On error, returns zero and sets errno. *)
- PROCEDURE tigrSaveImage(fileName: ARRAY OF CHAR; bmp: TigrPtr): INTEGER;
- (* Helpers ---------------------------------------------------------------- *)
- (* Returns the amount of time elapsed since tigrTime was last called,
- or zero on the first call. *)
- PROCEDURE tigrTime(): SHORTREAL;
- (* Displays an error message and quits. (UTF-8)
- 'bmp' can be NULL. *)
- PROCEDURE tigrError(bmp: TigrPtr; message: ARRAY OF CHAR; ...);
- (* 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) *)
- PROCEDURE tigrReadFile(fileName: ARRAY OF CHAR; length: intPtr): String;
- (* Decompresses DEFLATEd zip/zlib data into a buffer.
- Returns non-zero on success. *)
- PROCEDURE tigrInflate(out: ADDRESS; outlen: CARDINAL; in: ADDRESS; inlen: CARDINAL);
- (* Decodes a single UTF8 codepoint and returns the next pointer. *)
- PROCEDURE tigrDecodeUTF8(text: String; cp: intPtr): String;
- (* Encodes a single UTF8 codepoint and returns the next pointer. *)
- PROCEDURE tigrEncodeUTF8(text: String; cp: INTEGER): String;
- END tigr.
|