X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fslider.cpp;h=ead5664a303fae8e88ac26c9e0967629a5b02ceb;hb=6081ed9020ad22214a8e5b3829092f97b12d7c71;hp=11e4c24dc6461c0c49910b030ee18a7a6240a00d;hpb=bcdbb414c5f1abe860cad6bb67fd5da7c0122cfd;p=libs%2Fgltk.git diff --git a/source/slider.cpp b/source/slider.cpp index 11e4c24..ead5664 100644 --- a/source/slider.cpp +++ b/source/slider.cpp @@ -1,3 +1,10 @@ +/* $Id$ + +This file is part of libmspgltk +Copyright © 2007 Mikko Rasa, Mikkosoft Productions +Distributed under the LGPL +*/ + #include "slider.h" namespace Msp { @@ -8,22 +15,11 @@ Slider::Slider(const Resources &r): min(0), max(1), value(0), - step(0.1) + step(0.1), + dragging(false), + drag_area_size(0) { } -void Slider::set_range(double a, double b) -{ - min=a; - max=b; - set_value(value); -} - -void Slider::set_step(double s) -{ - step=s; - set_value(value); -} - void Slider::set_value(double v) { double old_value=value; @@ -42,5 +38,52 @@ void Slider::set_value(double v) signal_value_changed.emit(value); } +void Slider::set_range(double a, double b) +{ + min=a; + max=b; + set_value(value); +} + +void Slider::set_step(double s) +{ + step=s; + set_value(value); +} + +void Slider::start_drag(int p) +{ + dragging=true; + drag_start_pos=p; + drag_start_value=value; + state|=ACTIVE; +} + +void Slider::drag(int p) +{ + if(max>min) + set_value(drag_start_value+(p-drag_start_pos)*(max-min)/drag_area_size); +} + +void Slider::end_drag() +{ + dragging=false; + state&=~ACTIVE; +} + + +Slider::Loader::Loader(Slider &s): + Widget::Loader(s) +{ + add("range", &Slider::min, &Slider::max); + add("step", &Slider::step); + add("value", &Slider::value); +} + +Slider &Slider::Loader::get_object() const +{ + return static_cast(wdg); +} + } // namespace GLtk } // namespace Msp