1 #ifdef USE_TILE_LOCAL 2 #pragma once 3 4 class ImageManager; 5 struct wm_mouse_event; 6 7 class Region 8 { 9 public: 10 Region(); 11 virtual ~Region(); 12 13 void resize(int mx, int my); 14 void place(int sx, int sy, int margin); 15 void place(int sx, int sy, int ex, int ey, int margin); 16 void place(int sx, int sy); 17 void resize_to_fit(int wx, int wy); 18 19 // Returns true if the mouse position is over the region 20 // If true, then cx and cy are set in the range [0..mx-1], [0..my-1] 21 virtual bool mouse_pos(int mouse_x, int mouse_y, int &cx, int &cy); 22 23 virtual bool inside(int px, int py); update_tip_text(string &)24 virtual bool update_tip_text(string &) { return false; } update_alt_text(string &)25 virtual bool update_alt_text(string &) { return false; } 26 virtual int handle_mouse(wm_mouse_event &event) = 0; 27 28 virtual void render() = 0; 29 virtual void clear() = 0; 30 31 virtual int grid_width_to_pixels(int x) const; 32 virtual int grid_height_to_pixels(int y) const; 33 34 // Geometry 35 // <-----------------wx-----------------------> 36 // sx ox ex 37 // |margin| text/tile area |margin| 38 39 // Offset in pixels 40 int ox; 41 int oy; 42 43 // Unit size 44 int dx; 45 int dy; 46 47 // Region size in dx/dy 48 int mx; 49 int my; 50 51 // Width of the region in pixels 52 int wx; 53 int wy; 54 55 // Start position in pixels (top left) 56 int sx; 57 int sy; 58 59 // End position in pixels (bottom right) 60 int ex; 61 int ey; 62 63 protected: 64 virtual void recalculate(); 65 virtual void calculate_grid_size(int inner_x, int inner_y); 66 virtual void on_resize() = 0; 67 void set_transform(bool no_scaling = false); 68 }; 69 70 class FontWrapper; 71 72 // A convenience class for holding all the data that TileRegion and 73 // derived classes need in their constructors. 74 class TileRegionInit 75 { 76 public: TileRegionInit(ImageManager * _im,FontWrapper * _font,int _tx,int _ty)77 TileRegionInit(ImageManager *_im, FontWrapper *_font, int _tx, int _ty) : 78 im(_im), tag_font(_font), tile_x(_tx), tile_y(_ty) { } TileRegionInit()79 TileRegionInit() { } 80 81 ImageManager *im; 82 FontWrapper *tag_font; 83 int tile_x; 84 int tile_y; 85 }; 86 87 class TileRegion : public Region 88 { 89 public: 90 TileRegion(const TileRegionInit &init); 91 ~TileRegion(); 92 93 protected: 94 ImageManager *m_image; 95 FontWrapper *m_tag_font; 96 bool m_dirty; 97 }; 98 99 // An abstract tiles-only region that takes control over all input. 100 class ControlRegion : public Region 101 { 102 public: 103 virtual void run() = 0; 104 }; 105 106 #endif 107