summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/tilereg.h
diff options
context:
space:
mode:
authorEnne Walker <ennewalker@users.sourceforge.net>2010-02-12 19:03:33 -0500
committerEnne Walker <ennewalker@users.sourceforge.net>2010-02-12 19:17:09 -0500
commit06e43b85bf23c624001a592a5ae3a47ced07138f (patch)
tree1df95618fcf47170e019f394f1ae8cdc84cba762 /crawl-ref/source/tilereg.h
parent3f71ccaa3c7588fd4aae27aa1794007e0e75f4da (diff)
downloadcrawl-ref-06e43b85bf23c624001a592a5ae3a47ced07138f.tar.gz
crawl-ref-06e43b85bf23c624001a592a5ae3a47ced07138f.zip
Add visual tabs to switch tiles inventory pane.
This adds horizontal tabs to the side of the inventory pane to switch between items, spells, and memorisation. InventoryRegion has been refactored into GridRegion (base class) and split into SpellRegion and MemoriseRegion, rather than having all of the pesky explicit branching logic. I'm not amazingly happy with the tab graphics, but I think they're workable.
Diffstat (limited to 'crawl-ref/source/tilereg.h')
-rw-r--r--crawl-ref/source/tilereg.h124
1 files changed, 107 insertions, 17 deletions
diff --git a/crawl-ref/source/tilereg.h b/crawl-ref/source/tilereg.h
index b6a1a9a82b..ca0a1cf7b7 100644
--- a/crawl-ref/source/tilereg.h
+++ b/crawl-ref/source/tilereg.h
@@ -40,6 +40,7 @@ public:
void resize(int mx, int my);
void place(int sx, int sy, int margin);
+ void place(int sx, int sy);
void resize_to_fit(int wx, int wy);
// Returns true if the mouse position is over the region
@@ -328,39 +329,128 @@ public:
bool empty() const;
};
-class InventoryRegion : public TileRegion
+class GridRegion : public TileRegion
{
public:
- InventoryRegion(ImageManager *im, FTFont *tag_font,
- int tile_x, int tile_y);
- virtual ~InventoryRegion();
+ GridRegion(ImageManager *im, FTFont *tag_font, int tile_x, int tile_y);
+ virtual ~GridRegion();
virtual void clear();
virtual void render();
virtual void on_resize();
- virtual int handle_spells_mouse(MouseEvent &event, int item_idx);
- virtual int handle_mouse(MouseEvent &event);
- void update(int num, InventoryTile *items);
- void update_slot(int slot, InventoryTile &item);
- virtual bool update_tip_text(std::string &tip);
- virtual bool update_alt_text(std::string &alt);
+ virtual void update() = 0;
+ void place_cursor(const coord_def &cursor);
protected:
- void pack_tile(int x, int y, int idx);
- void pack_buffers();
- void add_quad_char(char c, int x, int y, int ox, int oy);
- void place_cursor(const coord_def &cursor);
+ virtual void pack_buffers() = 0;
+ virtual void draw_tag(int item_idx) = 0;
+
+ // Place the cursor and set idx with the index into m_items of the click.
+ // If click was invalid, return false.
+ bool place_cursor(MouseEvent &event, unsigned int &idx);
unsigned int cursor_index() const;
+ void add_quad_char(char c, int x, int y, int ox, int oy);
+ void draw_number(int x, int y, int number);
+ void draw_desc(const char *desc);
- std::vector<InventoryTile> m_items;
unsigned char *m_flavour;
+ coord_def m_cursor;
+
+ std::vector<InventoryTile> m_items;
TileBuffer m_buf_dngn;
- TileBuffer m_buf_main;
TileBuffer m_buf_spells;
+ TileBuffer m_buf_main;
+};
- coord_def m_cursor;
+class InventoryRegion : public GridRegion
+{
+public:
+ InventoryRegion(ImageManager *im, FTFont *tag_font,
+ int tile_x, int tile_y);
+
+ virtual void update();
+ virtual int handle_mouse(MouseEvent &event);
+ virtual bool update_tip_text(std::string &tip);
+ virtual bool update_alt_text(std::string &alt);
+
+protected:
+ virtual void pack_buffers();
+ virtual void draw_tag(int item_idx);
+};
+
+class SpellRegion : public GridRegion
+{
+public:
+ SpellRegion(ImageManager *im, FTFont *tag_font,
+ int tile_x, int tile_y);
+
+ virtual void update();
+ virtual int handle_mouse(MouseEvent &event);
+ virtual bool update_tip_text(std::string &tip);
+ virtual bool update_alt_text(std::string &alt);
+
+protected:
+ virtual void pack_buffers();
+ virtual void draw_tag(int item_idx);
+};
+
+class MemoriseRegion : public SpellRegion
+{
+public:
+ MemoriseRegion(ImageManager *im, FTFont *tag_font,
+ int tile_x, int tile_y);
+
+ virtual void update();
+ virtual int handle_mouse(MouseEvent &event);
+ virtual bool update_tip_text(std::string &tip);
+
+protected:
+ virtual void draw_tag(int item_idx);
+};
+
+// A region that contains multiple region, selectable by tabs.
+class TabbedRegion : public TileRegion
+{
+public:
+ TabbedRegion(ImageManager *im, FTFont *tag_font,
+ int tile_x, int tile_y);
+
+ virtual ~TabbedRegion();
+
+ void set_tab_region(int idx, GridRegion *reg, int tile_sel, int tile_unsel);
+ GridRegion *get_tab_region(int idx);
+ void activate_tab(int idx);
+ int active_tab() const;
+ int num_tabs() const;
+
+ void update();
+
+ virtual void clear();
+ virtual void render();
+ virtual void on_resize();
+ virtual int handle_mouse(MouseEvent &event);
+ virtual bool update_tip_text(std::string &tip);
+ virtual bool update_alt_text(std::string &alt);
+
+protected:
+ int m_active;
+ bool active_is_valid() const;
+
+ TileBuffer m_buf_gui;
+
+ struct TabInfo
+ {
+ GridRegion *reg;
+ int tile_sel;
+ int tile_unsel;
+ int offset_sel;
+ int offset_unsel;
+ int min_y;
+ int max_y;
+ };
+ std::vector<TabInfo> m_tabs;
};
enum map_colour