rubidium@6872: /* $Id$ */ rubidium@6872: rubidium@6872: /** @file gfx_type.h Types related to the graphics and/or input devices. */ rubidium@6872: rubidium@6872: #ifndef GFX_TYPE_H rubidium@6872: #define GFX_TYPE_H rubidium@6872: rubidium@6872: #include "core/enum_type.hpp" rubidium@6872: #include "core/geometry_type.hpp" rubidium@6872: #include "zoom_type.h" rubidium@6872: rubidium@6872: typedef uint32 SpriteID; ///< The number of a sprite, without mapping bits and colortables rubidium@6872: struct PalSpriteID { rubidium@6872: SpriteID sprite; rubidium@6872: SpriteID pal; rubidium@6872: }; rubidium@6872: typedef int32 CursorID; rubidium@6872: rubidium@6872: enum WindowKeyCodes { rubidium@6872: WKC_SHIFT = 0x8000, rubidium@6872: WKC_CTRL = 0x4000, rubidium@6872: WKC_ALT = 0x2000, rubidium@6872: WKC_META = 0x1000, rubidium@6872: rubidium@6872: /* Special ones */ rubidium@6872: WKC_NONE = 0, rubidium@6872: WKC_ESC = 1, rubidium@6872: WKC_BACKSPACE = 2, rubidium@6872: WKC_INSERT = 3, rubidium@6872: WKC_DELETE = 4, rubidium@6872: rubidium@6872: WKC_PAGEUP = 5, rubidium@6872: WKC_PAGEDOWN = 6, rubidium@6872: WKC_END = 7, rubidium@6872: WKC_HOME = 8, rubidium@6872: rubidium@6872: /* Arrow keys */ rubidium@6872: WKC_LEFT = 9, rubidium@6872: WKC_UP = 10, rubidium@6872: WKC_RIGHT = 11, rubidium@6872: WKC_DOWN = 12, rubidium@6872: rubidium@6872: /* Return & tab */ rubidium@6872: WKC_RETURN = 13, rubidium@6872: WKC_TAB = 14, rubidium@6872: rubidium@6872: /* Space */ rubidium@6872: WKC_SPACE = 32, rubidium@6872: rubidium@6872: /* Function keys */ rubidium@6872: WKC_F1 = 33, rubidium@6872: WKC_F2 = 34, rubidium@6872: WKC_F3 = 35, rubidium@6872: WKC_F4 = 36, rubidium@6872: WKC_F5 = 37, rubidium@6872: WKC_F6 = 38, rubidium@6872: WKC_F7 = 39, rubidium@6872: WKC_F8 = 40, rubidium@6872: WKC_F9 = 41, rubidium@6872: WKC_F10 = 42, rubidium@6872: WKC_F11 = 43, rubidium@6872: WKC_F12 = 44, rubidium@6872: rubidium@6872: /* Backquote is the key left of "1" rubidium@6872: * we only store this key here, no matter what character is really mapped to it rubidium@6872: * on a particular keyboard. (US keyboard: ` and ~ ; German keyboard: ^ and °) */ rubidium@6872: WKC_BACKQUOTE = 45, rubidium@6872: WKC_PAUSE = 46, rubidium@6872: rubidium@6872: /* 0-9 are mapped to 48-57 rubidium@6872: * A-Z are mapped to 65-90 rubidium@6872: * a-z are mapped to 97-122 */ rubidium@6872: rubidium@6872: /* Numerical keyboard */ rubidium@6872: WKC_NUM_0 = 128, rubidium@6872: WKC_NUM_1 = 129, rubidium@6872: WKC_NUM_2 = 130, rubidium@6872: WKC_NUM_3 = 131, rubidium@6872: WKC_NUM_4 = 132, rubidium@6872: WKC_NUM_5 = 133, rubidium@6872: WKC_NUM_6 = 134, rubidium@6872: WKC_NUM_7 = 135, rubidium@6872: WKC_NUM_8 = 136, rubidium@6872: WKC_NUM_9 = 137, rubidium@6872: WKC_NUM_DIV = 138, rubidium@6872: WKC_NUM_MUL = 139, rubidium@6872: WKC_NUM_MINUS = 140, rubidium@6872: WKC_NUM_PLUS = 141, rubidium@6872: WKC_NUM_ENTER = 142, rubidium@6872: WKC_NUM_DECIMAL = 143, rubidium@6872: rubidium@6872: /* Other keys */ rubidium@6872: WKC_SLASH = 144, ///< / Forward slash rubidium@6872: WKC_SEMICOLON = 145, ///< ; Semicolon rubidium@6872: WKC_EQUALS = 146, ///< = Equals rubidium@6872: WKC_L_BRACKET = 147, ///< [ Left square bracket rubidium@6872: WKC_BACKSLASH = 148, ///< \ Backslash rubidium@6872: WKC_R_BRACKET = 149, ///< ] Right square bracket rubidium@6872: WKC_SINGLEQUOTE = 150, ///< ' Single quote rubidium@6872: WKC_COMMA = 151, ///< , Comma rubidium@6872: WKC_PERIOD = 152, ///< . Period rubidium@6872: WKC_MINUS = 153, ///< - Minus rubidium@6872: }; rubidium@6872: rubidium@6872: /** A single sprite of a list of animated cursors */ rubidium@6872: struct AnimCursor { rubidium@6872: static const CursorID LAST = MAX_UVALUE(CursorID); rubidium@6872: CursorID sprite; ///< Must be set to LAST_ANIM when it is the last sprite of the loop rubidium@6872: byte display_time; ///< Amount of ticks this sprite will be shown rubidium@6872: }; rubidium@6872: rubidium@6872: struct CursorVars { rubidium@6872: Point pos, size, offs, delta; ///< position, size, offset from top-left, and movement rubidium@6872: Point draw_pos, draw_size; ///< position and size bounding-box for drawing rubidium@6872: SpriteID sprite; ///< current image of cursor rubidium@6872: SpriteID pal; rubidium@6872: rubidium@6872: int wheel; ///< mouse wheel movement rubidium@6872: rubidium@6872: /* We need two different vars to keep track of how far the scrollwheel moved. rubidium@6872: * OSX uses this for scrolling around the map. */ rubidium@6872: int v_wheel; rubidium@6872: int h_wheel; rubidium@6872: rubidium@6872: const AnimCursor *animate_list; ///< in case of animated cursor, list of frames rubidium@6872: const AnimCursor *animate_cur; ///< in case of animated cursor, current frame rubidium@6872: uint animate_timeout; ///< in case of animated cursor, number of ticks to show the current cursor rubidium@6872: rubidium@6872: bool visible; ///< cursor is visible rubidium@6872: bool dirty; ///< the rect occupied by the mouse is dirty (redraw) rubidium@6872: bool fix_at; ///< mouse is moving, but cursor is not (used for scrolling) rubidium@6872: bool in_window; ///< mouse inside this window, determines drawing logic richk@10184: richk@10184: bool vehchain; ///< vehicle chain is dragged rubidium@6872: }; rubidium@6872: rubidium@6872: struct DrawPixelInfo { rubidium@6872: void *dst_ptr; rubidium@6872: int left, top, width, height; rubidium@6872: int pitch; rubidium@6872: ZoomLevel zoom; rubidium@6872: }; rubidium@6872: rubidium@6872: struct Colour { rubidium@6872: byte r; rubidium@6872: byte g; rubidium@6872: byte b; rubidium@6872: }; rubidium@6872: rubidium@6872: enum FontSize { rubidium@6872: FS_NORMAL, rubidium@6872: FS_SMALL, rubidium@6872: FS_LARGE, rubidium@6872: FS_END, rubidium@6872: }; rubidium@6872: DECLARE_POSTFIX_INCREMENT(FontSize); rubidium@6872: rubidium@6872: /** rubidium@6872: * Used to only draw a part of the sprite. rubidium@6872: * Draw the subsprite in the rect (sprite_x_offset + left, sprite_y_offset + top) to (sprite_x_offset + right, sprite_y_offset + bottom). rubidium@6872: * Both corners are included in the drawing area. rubidium@6872: */ rubidium@6872: struct SubSprite { rubidium@6872: int left, top, right, bottom; rubidium@6872: }; rubidium@6872: rubidium@6872: enum { rubidium@6872: COLOUR_DARK_BLUE, rubidium@6872: COLOUR_PALE_GREEN, rubidium@6872: COLOUR_PINK, rubidium@6872: COLOUR_YELLOW, rubidium@6872: COLOUR_RED, rubidium@6872: COLOUR_LIGHT_BLUE, rubidium@6872: COLOUR_GREEN, rubidium@6872: COLOUR_DARK_GREEN, rubidium@6872: COLOUR_BLUE, rubidium@6872: COLOUR_CREAM, rubidium@6872: COLOUR_MAUVE, rubidium@6872: COLOUR_PURPLE, rubidium@6872: COLOUR_ORANGE, rubidium@6872: COLOUR_BROWN, rubidium@6872: COLOUR_GREY, rubidium@6872: COLOUR_WHITE rubidium@6872: }; rubidium@6872: rubidium@6872: /** Colour of the strings, see _string_colormap in table/palettes.h or docs/ottd-colourtext-palette.png */ rubidium@6872: enum TextColour { rubidium@6872: TC_FROMSTRING = 0x00, rubidium@6872: TC_BLUE = 0x00, rubidium@6872: TC_SILVER = 0x01, rubidium@6872: TC_GOLD = 0x02, rubidium@6872: TC_RED = 0x03, rubidium@6872: TC_PURPLE = 0x04, rubidium@6872: TC_LIGHT_BROWN = 0x05, rubidium@6872: TC_ORANGE = 0x06, rubidium@6872: TC_GREEN = 0x07, rubidium@6872: TC_YELLOW = 0x08, rubidium@6872: TC_DARK_GREEN = 0x09, rubidium@6872: TC_CREAM = 0x0A, rubidium@6872: TC_BROWN = 0x0B, rubidium@6872: TC_WHITE = 0x0C, rubidium@6872: TC_LIGHT_BLUE = 0x0D, rubidium@6872: TC_GREY = 0x0E, rubidium@6872: TC_DARK_BLUE = 0x0F, rubidium@6872: TC_BLACK = 0x10, rubidium@6872: }; rubidium@6872: rubidium@6872: enum StringColorFlags { rubidium@6872: IS_PALETTE_COLOR = 0x100, ///< color value is already a real palette color index, not an index of a StringColor rubidium@6872: }; rubidium@6872: rubidium@6872: #endif /* GFX_TYPE_H */