--- /dev/null
+#ifndef MSP_GLTK_GRAPHIC_H_
+#define MSP_GLTK_GRAPHIC_H_
+
+#include <msp/gl/texture2d.h>
+#include <msp/parser/loader.h>
+#include "geometry.h"
+
+namespace Msp {
+namespace GLtk {
+
+class Resources;
+
+class Graphic
+{
+public:
+ class Loader: public Parser::Loader
+ {
+ public:
+ Loader(Graphic &);
+ private:
+ Graphic &graph;
+
+ void texture(const std::string &);
+ void slice(unsigned, unsigned, unsigned, unsigned);
+ void border();
+ void shadow();
+ };
+
+ struct Sides
+ {
+ class Loader: public Parser::Loader
+ {
+ public:
+ Loader(Sides &);
+ Sides &get_object() { return sides; }
+ private:
+ Sides &sides;
+ };
+
+ unsigned top;
+ unsigned right;
+ unsigned bottom;
+ unsigned left;
+
+ Sides();
+ };
+
+ Graphic(const Resources &, const std::string &);
+ const Sides &get_border() const { return border; }
+ const Sides &get_shadow() const { return shadow; }
+ const GL::Texture2D *get_texture() const { return texture; }
+ unsigned get_width() const { return slice.w; }
+ unsigned get_height() const { return slice.h; }
+ void render(unsigned, unsigned) const;
+private:
+ const Resources &res;
+ std::string name;
+ Sides border;
+ Sides shadow;
+ const GL::Texture2D *texture;
+ Geometry slice;
+};
+
+} // namespace GLtk
+} // namespace Msp
+
+#endif