/* https://github.com/peterix/dfhack Copyright (c) 2009-2012 Petr Mr�zek (peterix@gmail.com) This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /******************************************************************************* GRAPHIC Changing tile cache *******************************************************************************/ #pragma once #ifndef CL_MOD_GRAPHIC #define CL_MOD_GRAPHIC #include #include "Export.h" #include "Module.h" #include namespace DFHack { // SDL stuff typedef signed short SINT16; typedef struct { int16_t x, y; uint16_t w, h; } DFSDL_Rect; typedef struct { void *palette; // SDL_Palette* uint8_t BitsPerPixel; uint8_t BytesPerPixel; uint8_t Rloss; uint8_t Gloss; uint8_t Bloss; uint8_t Aloss; uint8_t Rshift; uint8_t Gshift; uint8_t Bshift; uint8_t Ashift; uint32_t Rmask; uint32_t Gmask; uint32_t Bmask; uint32_t Amask; uint32_t colorkey; uint8_t alpha; } DFSDL_PixelFormat; typedef struct { uint32_t flags; DFSDL_PixelFormat* format; int w, h; int pitch; void* pixels; void* userdata; // as far as i could see DF doesnt use this int locked; void* lock_data; DFSDL_Rect clip_rect; void* map; int refcount; } DFSDL_Surface; // ========= struct DFTileSurface { bool paintOver; // draw over original tile? DFSDL_Surface* surface; // from where it should be drawn DFSDL_Rect* rect; // from which coords (NULL to draw whole surface) DFSDL_Rect* dstResize; // if not NULL dst rect will be resized (x/y/w/h will be added to original dst) }; class DFHACK_EXPORT Graphic : public Module { public: bool Finish() { return true; } bool Register(DFTileSurface* (*func)(int,int)); bool Unregister(DFTileSurface* (*func)(int,int)); DFTileSurface* Call(int x, int y); private: std::vector funcs; }; } #endif