]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/part.cpp
Inherit Root from sigc::trackable so it's safe to delete it
[libs/gltk.git] / source / part.cpp
index a92e7208ca6883015cd978eb5c9218700538faec..1f58b6187d679c983ad044310b20b5b739e1a6c5 100644 (file)
@@ -16,9 +16,7 @@ namespace Msp {
 namespace GLtk {
 
 Part::Part(const string &n):
-       name(n),
-       fill_x(true),
-       fill_y(true)
+       name(n)
 {
        for(unsigned i=0; i<N_STATES_; ++i)
                graphic[i]=0;
@@ -38,10 +36,6 @@ void Part::render(const Geometry &parent, State state) const
                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);
@@ -56,26 +50,26 @@ Part::Loader::Loader(Part &p, Resources &r):
        add("align",   &Loader::align);
        add("fill",    &Loader::fill);
        add("margin",  &Loader::margin);
+       add("size",    &Loader::size);
 }
 
 Part::Loader::~Loader()
 {
        for(unsigned i=0; i<N_STATES_; ++i)
-       {
                if(part.graphic[i])
                {
                        const Sides &shadow=part.graphic[i]->get_shadow();
                        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];
-       }
 }
 
 void Part::Loader::graphic(State s, const string &n)
 {
-       part.graphic[s]=res.get<Graphic>(n);
+       Graphic *grph=res.get<Graphic>(n);
+       for(int i=0; i<N_STATES_; ++i)
+               if((i&s)==s)
+                       part.graphic[i]=grph;
 }
 
 void Part::Loader::align(float x, float y)
@@ -84,10 +78,10 @@ void Part::Loader::align(float x, float y)
        part.align.y=y;
 }
 
-void Part::Loader::fill(bool x, bool y)
+void Part::Loader::fill(float w, float h)
 {
-       part.fill_x=x;
-       part.fill_y=y;
+       part.align.w=w;
+       part.align.h=h;
 }
 
 void Part::Loader::margin()
@@ -95,5 +89,11 @@ void Part::Loader::margin()
        load_sub(part.margin);
 }
 
+void Part::Loader::size(unsigned w, unsigned h)
+{
+       part.geom.w=w;
+       part.geom.h=h;
+}
+
 } // namespace GLtk
 } // namespace Msp