diff options
author | rubidium <rubidium@openttd.org> | 2007-01-02 19:19:48 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-01-02 19:19:48 +0000 |
commit | 66bbf336c6af7353ef0aeed58002c46543b30635 (patch) | |
tree | ad4a63860df2626b22f77e7dac712e958bea54cb /src/gfx.h | |
parent | ccc0a3f4dbf58c005b22341ac8874252924690cd (diff) | |
download | openttd-66bbf336c6af7353ef0aeed58002c46543b30635.tar.xz |
(svn r7759) -Merge: makefile rewrite. This merge features:
- A proper ./configure, so everything needs to be configured only once, not for every make.
- Usage of makedepend when available. This greatly reduces the time needed for generating the dependencies.
- A generator for all project files. There is a single file with sources, which is used to generate Makefiles and the project files for MSVC.
- Proper support for OSX universal binaries.
- Object files for non-MSVC compiles are also placed in separate directories, making is faster to switch between debug and release compiles and it does not touch the directory with the source files.
- Functionality to make a bundle of all needed files for for example a nightly or distribution of a binary with all needed GRFs and language files.
Note: as this merge moves almost all files, it is recommended to make a backup of your working copy before updating your working copy.
Diffstat (limited to 'src/gfx.h')
-rw-r--r-- | src/gfx.h | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/src/gfx.h b/src/gfx.h new file mode 100644 index 000000000..8636a36a6 --- /dev/null +++ b/src/gfx.h @@ -0,0 +1,163 @@ +/* $Id$ */ + +#ifndef GFX_H +#define GFX_H + +typedef byte Pixel; + +struct DrawPixelInfo { + Pixel *dst_ptr; + int left, top, width, height; + int pitch; + uint16 zoom; +}; + + +typedef struct CursorVars { + Point pos, size, offs, delta; ///< position, size, offset from top-left, and movement + Point draw_pos, draw_size; ///< position and size bounding-box for drawing + CursorID sprite; ///< current image of cursor + + int wheel; ///< mouse wheel movement + const CursorID *animate_list, *animate_cur; ///< in case of animated cursor, list of frames + uint animate_timeout; ///< current frame in list of animated cursor + + bool visible; ///< cursor is visible + bool dirty; ///< the rect occupied by the mouse is dirty (redraw) + bool fix_at; ///< mouse is moving, but cursor is not (used for scrolling) + bool in_window; ///< mouse inside this window, determines drawing logic +} CursorVars; + + +typedef enum FontSizes { + FS_NORMAL, + FS_SMALL, + FS_LARGE, + FS_END, +} FontSize; + + +void RedrawScreenRect(int left, int top, int right, int bottom); +void GfxScroll(int left, int top, int width, int height, int xo, int yo); + + +// XXX doesn't really belong here, but the only +// consumers always use it in conjunction with DoDrawString() +#define UPARROW "\xEE\x8A\x80" +#define DOWNARROW "\xEE\x8A\xAA" + + +int DrawStringCentered(int x, int y, StringID str, uint16 color); +int DrawStringCenteredTruncated(int xl, int xr, int y, StringID str, uint16 color); +int DoDrawStringCentered(int x, int y, const char *str, uint16 color); + +int DrawString(int x, int y, StringID str, uint16 color); +int DrawStringTruncated(int x, int y, StringID str, uint16 color, uint maxw); + +int DoDrawString(const char *string, int x, int y, uint16 color); +int DoDrawStringTruncated(const char *str, int x, int y, uint16 color, uint maxw); + +void DrawStringCenterUnderline(int x, int y, StringID str, uint16 color); +void DrawStringCenterUnderlineTruncated(int xl, int xr, int y, StringID str, uint16 color); + +int DrawStringRightAligned(int x, int y, StringID str, uint16 color); +void DrawStringRightAlignedTruncated(int x, int y, StringID str, uint16 color, uint maxw); +void DrawStringRightAlignedUnderline(int x, int y, StringID str, uint16 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); + +BoundingRect GetStringBoundingBox(const char *str); +uint32 FormatStringLinebreaks(char *str, int maxw); +void LoadStringWidthTable(void); +void DrawStringMultiCenter(int x, int y, StringID str, int maxw); +uint DrawStringMultiLine(int x, int y, StringID str, int maxw); +void DrawDirtyBlocks(void); +void SetDirtyBlocks(int left, int top, int right, int bottom); +void MarkWholeScreenDirty(void); + +void GfxInitPalettes(void); + +bool FillDrawPixelInfo(DrawPixelInfo* n, int left, int top, int width, int height); + +/* window.c */ +void DrawOverlappedWindowForAll(int left, int top, int right, int bottom); + +void SetMouseCursor(uint cursor); +void SetAnimatedMouseCursor(const CursorID *table); +void CursorTick(void); +void DrawMouseCursor(void); +void ScreenSizeChanged(void); +void UndrawMouseCursor(void); +bool ChangeResInGame(int w, int h); +void SortResolutions(int count); +void ToggleFullScreen(bool fs); + +/* gfx.c */ +#define ASCII_LETTERSTART 32 +extern FontSize _cur_fontsize; + +byte GetCharacterWidth(FontSize size, uint32 key); + +static inline byte GetCharacterHeight(FontSize size) +{ + switch (size) { + default: NOT_REACHED(); + case FS_NORMAL: return 10; + case FS_SMALL: return 6; + case FS_LARGE: return 18; + } +} + +VARDEF DrawPixelInfo _screen; +VARDEF DrawPixelInfo *_cur_dpi; +VARDEF CursorVars _cursor; + +enum { + COLOUR_DARK_BLUE, + COLOUR_PALE_GREEN, + COLOUR_PINK, + COLOUR_YELLOW, + COLOUR_RED, + COLOUR_LIGHT_BLUE, + COLOUR_GREEN, + COLOUR_DARK_GREEN, + COLOUR_BLUE, + COLOUR_CREAM, + COLOUR_MAUVE, + COLOUR_PURPLE, + COLOUR_ORANGE, + COLOUR_BROWN, + COLOUR_GREY, + COLOUR_WHITE +}; + +/** + * All 16 colour gradients + * 8 colours per gradient from darkest (0) to lightest (7) + */ +VARDEF byte _colour_gradient[16][8]; + +VARDEF int _pal_first_dirty; +VARDEF int _pal_last_dirty; + +VARDEF bool _use_dos_palette; + +typedef struct Colour { + byte r; + byte g; + byte b; +} Colour; + +extern Colour _cur_palette[256]; + + +typedef enum StringColorFlags { + IS_PALETTE_COLOR = 0x100, // color value is already a real palette color index, not an index of a StringColor +} StringColorFlags; + +#ifdef _DEBUG +extern bool _dbg_screen_rect; +#endif + +#endif /* GFX_H */ |