#ifndef MSP_GLTK_PART_H_
#define MSP_GLTK_PART_H_
-#include <map>
#include <string>
-#include <msp/parser/loader.h>
-#include "alignment.h"
+#include <msp/datafile/objectloader.h>
+#include "geometry.h"
+#include "mspgltk_api.h"
#include "state.h"
namespace Msp {
namespace GLtk {
class Graphic;
+class PartCache;
class Resources;
-class Part
+/**
+Defines a single graphical element of a widget style.
+*/
+class MSPGLTK_API Part
{
public:
- class Loader: public Parser::Loader
+ class Loader: public DataFile::CollectionObjectLoader<Part>
{
public:
- Loader(Part &);
+ Loader(Part &, Resources &);
+
private:
- Part ∂
+ void finish() override;
+ void graphic_normal(const std::string &);
void graphic(State, const std::string &);
- void align(int, int);
- void fill(bool, bool);
+ void align(float, float);
+ void fill(float, float);
+ void margin();
+ void size(unsigned, unsigned);
};
- Part(const Resources &, const std::string &);
- const std::string &get_name() const { return name; }
- const Graphic *get_graphic(State) const;
- const Alignment &get_alignment() const { return align; }
- bool get_fill_x() const { return fill_x; }
- bool get_fill_y() const { return fill_y; }
- void render(const Geometry &, State) const;
private:
- const Resources &res;
std::string name;
- const Graphic *graphic[N_STATES_];
+ const Graphic *graphic[N_STATES_] = { };
+ Geometry geom;
+ Sides margin;
Alignment align;
- bool fill_x;
- bool fill_y;
+
+public:
+ Part(const std::string &);
+
+ const std::string &get_name() const { return name; }
+ const Graphic *get_graphic(State) const;
+ const Geometry &get_geometry() const { return geom; }
+ const Sides &get_margin() const { return margin; }
+ const Alignment &get_alignment() const { return align; }
+ void build(const Geometry &, State, PartCache &) const;
};
-typedef std::list<Part> PartSeq;
} // namespace GLtk
} // namespace Msp