Distributed under the LGPL
*/
+#include <msp/gl/transform.h>
#include "geometry.h"
#include "part.h"
#include "resources.h"
Part::Part(const string &n):
name(n),
- width(1),
- height(1),
fill_x(true),
fill_y(true)
{
return graphic[state];
}
-void Part::render(const Geometry &geom, State state) const
+void Part::render(const Geometry &parent, State state) const
{
- unsigned gw=(fill_x ? geom.w : width);
- unsigned gh=(fill_y ? geom.h : height);
- align.apply(geom, gw, gh);
- graphic[state]->render(gw, gh);
+ if(!graphic[state])
+ return;
+
+ Geometry rgeom=geom;
+ if(fill_x)
+ rgeom.w=parent.w-margin.left-margin.right;
+ if(fill_y)
+ rgeom.h=parent.h-margin.bottom-margin.top;
+ align.apply(rgeom, parent, margin);
+ GL::translate(rgeom.x, rgeom.y, 0);
+ graphic[state]->render(rgeom.w, rgeom.h);
}
add("graphic", &Loader::graphic);
add("align", &Loader::align);
add("fill", &Loader::fill);
+ add("margin", &Loader::margin);
}
Part::Loader::~Loader()
if(part.graphic[i])
{
const Sides &shadow=part.graphic[i]->get_shadow();
- part.width=max(part.width, part.graphic[i]->get_width()-shadow.left-shadow.right);
- part.height=max(part.height, part.graphic[i]->get_height()-shadow.bottom-shadow.top);
+ part.geom.w=max(part.geom.w, part.graphic[i]->get_width()-shadow.left-shadow.right);
+ part.geom.h=max(part.geom.h, part.graphic[i]->get_height()-shadow.bottom-shadow.top);
}
else
part.graphic[i]=part.graphic[NORMAL];
part.graphic[s]=res.get<Graphic>(n);
}
-void Part::Loader::align(int x, int y)
+void Part::Loader::align(float x, float y)
{
part.align.x=x;
part.align.y=y;
part.fill_y=y;
}
+void Part::Loader::margin()
+{
+ load_sub(part.margin);
+}
+
} // namespace GLtk
} // namespace Msp