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