]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/hslider.cpp
Refactor filling from Part to Alignment
[libs/gltk.git] / source / hslider.cpp
index dda8b43168643a74825480c72e3017891adce8fd..3b68dacfa1b142eafe31851ed6f8dfc6fcd5d64e 100644 (file)
@@ -1,3 +1,10 @@
+/* $Id$
+
+This file is part of libmspgltk
+Copyright © 2007  Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
 #include <msp/gl/matrix.h>
 #include <msp/gl/transform.h>
 #include "graphic.h"
@@ -20,7 +27,7 @@ void HSlider::button_press(int x, int y, unsigned btn)
        if(geom.is_inside(x, y))
        {
                int sw=get_slider_width();
-               int sx=static_cast<int>((geom.w-sw)*(value-min)/(max-min));
+               int sx=geom.x+static_cast<int>((geom.w-sw)*(value-min)/(max-min));
                if(btn==1 && x>=sx && x<sx+sw)
                {
                        dragging=true;
@@ -48,27 +55,28 @@ void HSlider::pointer_motion(int x, int)
        }
 }
 
-void HSlider::render_part(const Part &part) const
+void HSlider::render_special(const Part &part) const
 {
        if(part.get_name()=="slider")
        {
-               unsigned gw=part.get_width();
-               unsigned gh=(part.get_fill_y() ? geom.h : part.get_height());
+               Alignment align=part.get_alignment();
+               align.x=(value-min)/(max-min);
+
+               Geometry pgeom=part.get_geometry();
+               align.apply(pgeom, geom, part.get_margin());
+
                GL::push_matrix();
-               GL::translate((geom.w-gw)*(value-min)/(max-min), (geom.h-gh)*(part.get_alignment().y+1)/2, 0);
-               const Graphic *graphic=part.get_graphic(state);
-               graphic->render(gw, gh);
+               GL::translate(pgeom.x, pgeom.y, 0);
+               part.get_graphic(state)->render(pgeom.w, pgeom.h);
                GL::pop_matrix();
        }
-       else
-               Widget::render_part(part);
 }
 
 unsigned HSlider::get_slider_width() const
 {
        for(PartSeq::const_iterator i=style->get_parts().begin(); i!=style->get_parts().end(); ++i)
                if(i->get_name()=="slider")
-                       return i->get_width();
+                       return i->get_geometry().w;
 
        return 0;
 }