summaryrefslogtreecommitdiff
path: root/gfx.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx.h')
-rw-r--r--gfx.h110
1 files changed, 110 insertions, 0 deletions
diff --git a/gfx.h b/gfx.h
new file mode 100644
index 000000000..869287c58
--- /dev/null
+++ b/gfx.h
@@ -0,0 +1,110 @@
+#ifndef GFX_H
+#define GFX_H
+
+
+typedef struct ColorList {
+ byte unk0, unk1, unk2;
+ byte window_color_1a, window_color_1b;
+ byte window_color_bga, window_color_bgb;
+ byte window_color_2;
+} ColorList;
+
+struct DrawPixelInfo {
+ byte *dst_ptr;
+ int left, top, width, height;
+ int pitch;
+ uint16 zoom;
+};
+
+
+typedef struct SpriteHdr {
+ byte info;
+ byte height;
+ uint16 width;
+ int16 x_offs, y_offs;
+} SpriteHdr;
+assert_compile(sizeof(SpriteHdr) == 8);
+
+typedef struct CursorVars {
+ Point pos, size, offs, delta;
+ Point draw_pos, draw_size;
+ uint32 sprite;
+
+ int wheel; // mouse wheel movement
+ const uint16 *animate_list, *animate_cur;
+ uint animate_timeout;
+
+ bool visible;
+ bool dirty;
+ bool fix_at;
+} CursorVars;
+
+
+void RedrawScreenRect(int left, int top, int right, int bottom);
+void GfxScroll(int left, int top, int width, int height, int xo, int yo);
+int DrawStringCentered(int x, int y, uint16 str, byte color);
+int DrawString(int x, int y, uint16 str, byte color);
+void DrawStringCenterUnderline(int x, int y, uint16 str, byte color);
+int DoDrawString(const byte *string, int x, int y, byte color);
+void DrawStringRightAligned(int x, int y, uint16 str, byte color);
+void GfxFillRect(int left, int top, int right, int bottom, int color);
+void GfxDrawLine(int left, int top, int right, int bottom, int color);
+void DrawFrameRect(int left, int top, int right, int bottom, int color, int flags);
+
+int GetStringWidth(const byte *str);
+void LoadStringWidthTable();
+void DrawStringMultiCenter(int x, int y, uint16 str, int maxw);
+void DrawStringMultiLine(int x, int y, uint16 str, int maxw);
+void DrawDirtyBlocks();
+void SetDirtyBlocks(int left, int top, int right, int bottom);
+void MarkWholeScreenDirty();
+
+void GfxInitPalettes();
+
+bool FillDrawPixelInfo(DrawPixelInfo *n, DrawPixelInfo *o, int left, int top, int width, int height);
+
+/* window.c */
+void DrawOverlappedWindowForAll(int left, int top, int right, int bottom);
+
+/* spritecache.c */
+byte *GetSpritePtr(uint sprite);
+void GfxInitSpriteMem(byte *ptr, uint32 size);
+void GfxLoadSprites();
+
+void SetMouseCursor(uint cursor);
+void SetAnimatedMouseCursor(const uint16 *table);
+void CursorTick();
+void DrawMouseCursor();
+void ScreenSizeChanged();
+void UndrawMouseCursor();
+bool ChangeResInGame(int w, int h);
+
+typedef struct {
+ int xoffs, yoffs;
+ int xsize, ysize;
+} SpriteDimension;
+
+const SpriteDimension *GetSpriteDimension(uint sprite);
+
+/* gfx.c */
+VARDEF int _stringwidth_base;
+VARDEF byte _stringwidth_table[0x2A0];
+
+VARDEF DrawPixelInfo _screen;
+VARDEF DrawPixelInfo *_cur_dpi;
+VARDEF ColorList _color_list[16];
+VARDEF CursorVars _cursor;
+
+VARDEF int _pal_first_dirty;
+VARDEF int _pal_last_dirty;
+
+/* spritecache.c */
+//enum { NUM_SPRITES = 0x1320 };
+//enum { NUM_SPRITES = 0x1500 };
+enum { NUM_SPRITES = 0x3500 }; // 1500 + space for custom GRF sets
+
+/* tables.h */
+extern byte _palettes[4][256 * 3];
+VARDEF byte _cur_palette[768];
+
+#endif