]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/graphic.h
Initial revision
[libs/gltk.git] / source / graphic.h
diff --git a/source/graphic.h b/source/graphic.h
new file mode 100644 (file)
index 0000000..16d8cf4
--- /dev/null
@@ -0,0 +1,67 @@
+#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