X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fslider.cpp;h=15621db5b9b06e8035523cf2a479d3549ab7e587;hb=08b66dd1b4478fef61525ad2dad1a1fb54eab0f0;hp=425f721f0ccf052bd0eb74a78b44eaca80570498;hpb=0af3c2393bd00f39db3bfaf5b78a7a44f0fd5ff1;p=libs%2Fgltk.git diff --git a/source/slider.cpp b/source/slider.cpp index 425f721..15621db 100644 --- a/source/slider.cpp +++ b/source/slider.cpp @@ -1,23 +1,16 @@ -/* $Id$ - -This file is part of libmspgltk -Copyright © 2007 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #include "slider.h" namespace Msp { namespace GLtk { -Slider::Slider(const Resources &r): - Widget(r), +Slider::Slider(): min(0), max(1), value(0), step(0.1), dragging(false), - drag_area_size(0) + drag_area_size(0), + slider_size(1) { } void Slider::set_value(double v) @@ -35,7 +28,10 @@ void Slider::set_value(double v) } if(value!=old_value) + { signal_value_changed.emit(value); + rebuild(); + } } void Slider::set_range(double a, double b) @@ -51,12 +47,23 @@ void Slider::set_step(double s) set_value(value); } +void Slider::click(int p) +{ + int sp = static_cast(drag_area_size*(value-min)/(max-min)); + if(p=static_cast(sp+slider_size)) + set_value(value+step*10); + else + start_drag(p); +} + void Slider::start_drag(int p) { dragging = true; drag_start_pos = p; drag_start_value = value; - state |= ACTIVE; + set_state(ACTIVE); } void Slider::drag(int p) @@ -68,22 +75,17 @@ void Slider::drag(int p) void Slider::end_drag() { dragging = false; - state &= ~ACTIVE; + clear_state(ACTIVE); } Slider::Loader::Loader(Slider &s): - Widget::Loader(s) + DataFile::DerivedObjectLoader(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