]> git.tdb.fi Git - libs/gltk.git/blob - source/part.h
edc8f77a5b84230d883d277f5bf29c2e77fe6ef9
[libs/gltk.git] / source / part.h
1 /* $Id$
2
3 This file is part of libmspgltk
4 Copyright © 2007  Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #ifndef MSP_GLTK_PART_H_
9 #define MSP_GLTK_PART_H_
10
11 #include <map>
12 #include <string>
13 #include <msp/datafile/loader.h>
14 //#include "alignment.h"
15 #include "geometry.h"
16 #include "state.h"
17
18 namespace Msp {
19 namespace GLtk {
20
21 class Graphic;
22 class Resources;
23
24 /**
25 Defines a single graphical element of a widget style.
26 */
27 class Part
28 {
29 public:
30         class Loader: public DataFile::Loader
31         {
32         private:
33                 Part &part;
34                 Resources &res;
35
36         public:
37                 Loader(Part &, Resources &);
38                 ~Loader();
39         private:
40                 void graphic(State, const std::string &);
41                 void align(float, float);
42                 void fill(float, float);
43                 void margin();
44         };
45
46 private:
47         std::string name;
48         const Graphic *graphic[N_STATES_];
49         Geometry geom;
50         Sides margin;
51         Alignment align;
52
53 public:
54         Part(const std::string &);
55         const std::string &get_name() const { return name; }
56         const Graphic *get_graphic(State) const;
57         const Geometry &get_geometry() const { return geom; }
58         const Sides &get_margin() const { return margin; }
59         const Alignment &get_alignment() const { return align; }
60         void render(const Geometry &, State) const;
61 };
62 typedef std::list<Part> PartSeq;
63
64 } // namespace GLtk
65 } // namespace Msp
66
67 #endif