+/* $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"
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;
}
}
-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;
}