]> git.tdb.fi Git - libs/gltk.git/blob - source/graphic.h
Initial revision
[libs/gltk.git] / source / graphic.h
1 #ifndef MSP_GLTK_GRAPHIC_H_
2 #define MSP_GLTK_GRAPHIC_H_
3
4 #include <msp/gl/texture2d.h>
5 #include <msp/parser/loader.h>
6 #include "geometry.h"
7
8 namespace Msp {
9 namespace GLtk {
10
11 class Resources;
12
13 class Graphic
14 {
15 public:
16         class Loader: public Parser::Loader
17         {
18         public:
19                 Loader(Graphic &);
20         private:
21                 Graphic &graph;
22
23                 void texture(const std::string &);
24                 void slice(unsigned, unsigned, unsigned, unsigned);
25                 void border();
26                 void shadow();
27         };
28
29         struct Sides
30         {
31                 class Loader: public Parser::Loader
32                 {
33                 public:
34                         Loader(Sides &);
35                         Sides &get_object() { return sides; }
36                 private:
37                         Sides &sides;
38                 };
39
40                 unsigned top;
41                 unsigned right;
42                 unsigned bottom;
43                 unsigned left;
44
45                 Sides();
46         };
47
48         Graphic(const Resources &, const std::string &);
49         const Sides &get_border() const { return border; }
50         const Sides &get_shadow() const { return shadow; }
51         const GL::Texture2D *get_texture() const { return texture; }
52         unsigned get_width() const  { return slice.w; }
53         unsigned get_height() const { return slice.h; }
54         void render(unsigned, unsigned) const;
55 private:
56         const Resources &res;
57         std::string name;
58         Sides border;
59         Sides shadow;
60         const GL::Texture2D *texture;
61         Geometry slice;
62 };
63
64 } // namespace GLtk
65 } // namespace Msp
66
67 #endif