Hasty Badger
Small UI library (a branch of Turbo Badger)
 All Classes Namespaces Functions Variables Enumerations Enumerator Friends Groups Pages
tb_image_manager.h
1 // ================================================================================
2 // == This file is a part of Turbo Badger. (C) 2011-2014, Emil SegerÃ¥s ==
3 // == See tb_core.h for more information. ==
4 // ================================================================================
5 
6 #ifndef TB_IMAGE_MANAGER_H
7 #define TB_IMAGE_MANAGER_H
8 
9 #include "tb_core.h"
10 
11 #ifdef TB_IMAGE
12 
13 #include "tb_linklist.h"
14 #include "tb_hashtable.h"
15 #include "tb_bitmap_fragment.h"
16 #include "tb_renderer.h"
17 
18 namespace tb {
19 
20 class TBImageManager;
21 
24 class TBImageRep
25 {
26  friend class TBImageManager;
27  friend class TBImage;
28 
29  TBImageRep(TBImageManager *image_manager, TBBitmapFragment *fragment, uint32_t hash_key);
30 
31  void IncRef();
32  void DecRef();
33 
34  int ref_count;
35  uint32_t hash_key;
36  TBImageManager *image_manager;
37  TBBitmapFragment *fragment;
38 };
39 
46 class TBImage
47 {
48 public:
49  TBImage() : m_image_rep(nullptr) {}
50  TBImage(TBImageRep *rep);
51  TBImage(const TBImage &image);
52  ~TBImage();
53 
55  bool IsEmpty() const;
56 
58  int Width() const;
59 
61  int Height() const;
62 
64  TBBitmapFragment *GetBitmap() const;
65 
66  const TBImage& operator = (const TBImage &image) { SetImageRep(image.m_image_rep); return *this; }
67  bool operator == (const TBImage &image) const { return m_image_rep == image.m_image_rep; }
68  bool operator != (const TBImage &image) const { return m_image_rep != image.m_image_rep; }
69 private:
70  void SetImageRep(TBImageRep *image_rep);
71  TBImageRep *m_image_rep;
72 };
73 
82 class TBImageManager : private TBRendererListener
83 {
84 public:
85  TBImageManager();
86  ~TBImageManager();
87 
90  TBImage GetImage(const char *filename);
91 
92 #ifdef TB_RUNTIME_DEBUG_INFO
93 
94  void Debug() { m_frag_manager.Debug(); }
95 #endif
96 
97  // Implementing TBRendererListener
98  virtual void OnContextLost();
99  virtual void OnContextRestored();
100 private:
101  TBBitmapFragmentManager m_frag_manager;
102  TBHashTableOf<TBImageRep> m_image_rep_hash;
103 
104  friend class TBImageRep;
105  void RemoveImageRep(TBImageRep *image_rep);
106 };
107 
109 extern TBImageManager *g_image_manager;
110 
111 } // namespace tb
112 
113 #endif // TB_IMAGE
114 #endif // TB_IMAGE_MANAGER_H