# gfx_func.h

Go to the documentation of this file.

    00001 /* $Id: gfx_func.h 18575 2009-12-20 16:42:35Z rubidium $ */
    00002
    00003 /*
    00004  * This file is part of OpenTTD.
    00005  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
    00006  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    00007  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
    00008  */
    00009
    00042 #ifndef GFX_FUNC_H
    00043 #define GFX_FUNC_H
    00044
    00045 #include "gfx_type.h"
    00046 #include "strings_type.h"
    00047
    00048 void GameLoop();
    00049
    00050 void CreateConsole();
    00051
    00052 extern byte _dirkeys;
    00053 extern bool _fullscreen;
    00054 extern CursorVars _cursor;
    00055 extern bool _ctrl_pressed;
    00056 extern bool _shift_pressed;
    00057 extern byte _fast_forward;
    00058
    00059 extern bool _left_button_down;
    00060 extern bool _left_button_clicked;
    00061 extern bool _right_button_down;
    00062 extern bool _right_button_clicked;
    00063
    00064 extern DrawPixelInfo _screen;
    00065 extern bool _screen_disable_anim;
    00066
    00067 extern int _pal_first_dirty;
    00068 extern int _pal_count_dirty;
    00069 extern int _num_resolutions;
    00070 extern Dimension _resolutions[32];
    00071 extern Dimension _cur_resolution;
    00072 extern Colour _cur_palette[256];
    00073
    00074 void HandleKeypress(uint32 key);
    00075 void HandleCtrlChanged();
    00076 void HandleMouseEvents();
    00077 void CSleep(int milliseconds);
    00078 void UpdateWindows();
    00079
    00080 void DrawMouseCursor();
    00081 void ScreenSizeChanged();
    00082 void GameSizeChanged();
    00083 void UndrawMouseCursor();
    00084
    00085 enum {
    00086   /* Size of the buffer used for drawing strings. */
    00087   DRAW_STRING_BUFFER = 2048,
    00088 };
    00089
    00090 void RedrawScreenRect(int left, int top, int right, int bottom);
    00091 void GfxScroll(int left, int top, int width, int height, int xo, int yo);
    00092
    00093 Dimension GetSpriteSize(SpriteID sprid);
    00094 void DrawSprite(SpriteID img, SpriteID pal, int x, int y, const SubSprite *sub = NULL);
    00095
    00097 enum StringAlignment {
    00098   SA_LEFT,
    00099   SA_CENTER,
    00100   SA_RIGHT,
    00101   SA_MASK  = 3,
    00102   SA_FORCE = 4,
    00103   SA_STRIP = 8,
    00104 };
    00105 DECLARE_ENUM_AS_BIT_SET(StringAlignment);
    00106
    00107 int DrawString(int left, int right, int top, const char *str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false);
    00108 int DrawString(int left, int right, int top, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false);
    00109 int DrawStringMultiLine(int left, int right, int top, int bottom, StringID str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false);
    00110
    00111 void DrawCharCentered(uint32 c, int x, int y, TextColour colour);
    00112
    00113 void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectMode mode = FILLRECT_OPAQUE);
    00114 void GfxDrawLine(int left, int top, int right, int bottom, int colour);
    00115 void DrawBox(int x, int y, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3);
    00116
    00117 Dimension GetStringBoundingBox(const char *str);
    00118 Dimension GetStringBoundingBox(StringID strid);
    00119 uint32 FormatStringLinebreaks(char *str, const char *last, int maxw);
    00120 int GetStringHeight(StringID str, int maxw);
    00121 Dimension GetStringMultiLineBoundingBox(StringID str, const Dimension &suggestion);
    00122 void LoadStringWidthTable();
    00123
    00129 void DrawDirtyBlocks();
    00130
    00136 void SetDirtyBlocks(int left, int top, int right, int bottom);
    00137
    00143 void MarkWholeScreenDirty();
    00144
    00145 void GfxInitPalettes();
    00146
    00147 bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int height);
    00148
    00149 /* window.cpp */
    00150 void DrawOverlappedWindowForAll(int left, int top, int right, int bottom);
    00151
    00152 void SetMouseCursor(SpriteID sprite, SpriteID pal);
    00153 void SetAnimatedMouseCursor(const AnimCursor *table);
    00154 void CursorTick();
    00155 bool ChangeResInGame(int w, int h);
    00156 void SortResolutions(int count);
    00157 bool ToggleFullScreen(bool fs);
    00158
    00159 /* gfx.cpp */
    00160 extern FontSize _cur_fontsize;
    00161
    00162 byte GetCharacterWidth(FontSize size, uint32 key);
    00163 byte GetDigitWidth(FontSize size = FS_NORMAL);
    00164
    00170 static inline byte GetCharacterHeight(FontSize size)
    00171 {
    00172   assert(size < FS_END);
    00173   extern int _font_height[FS_END];
    00174   return _font_height[size];
    00175 }
    00176
    00178 #define FONT_HEIGHT_SMALL  (GetCharacterHeight(FS_SMALL))
    00179
    00181 #define FONT_HEIGHT_NORMAL (GetCharacterHeight(FS_NORMAL))
    00182
    00184 #define FONT_HEIGHT_LARGE  (GetCharacterHeight(FS_LARGE))
    00185
    00186 extern DrawPixelInfo *_cur_dpi;
    00187
    00192 extern byte _colour_gradient[COLOUR_END][8];
    00193
    00194 extern PaletteType _use_palette;
    00195 extern bool _palette_remap_grf[];
    00196 extern const byte *_palette_remap;
    00197 extern const byte *_palette_reverse_remap;
    00198
    00199 #endif /* GFX_FUNC_H */