Fl_Osc_TSlider.cpp (1809B)
1 /* 2 ZynAddSubFX - a software synthesizer 3 4 Fl_Osc_TSlider.cpp - Variant Of OSC Based Slider 5 Copyright (C) 2016 Mark McCurry 6 7 This program is free software; you can redistribute it and/or 8 modify it under the terms of the GNU General Public License 9 as published by the Free Software Foundation; either version 2 10 of the License, or (at your option) any later version. 11 */ 12 #include <cmath> 13 #include "Fl_Osc_TSlider.H" 14 //Copyright (c) 2015 Christopher Oliver 15 //License: GNU GPL version 2 or later 16 17 static float identity(float value) 18 { 19 return value; 20 } 21 22 Fl_Osc_TSlider::Fl_Osc_TSlider(int x, int y, int w, int h, const char *label) 23 :Fl_Osc_Slider(x, y, w, h, label), transform(identity) 24 { 25 Fl_Group *save = Fl_Group::current(); 26 tipwin = new TipWin(); 27 tipwin->hide(); 28 Fl_Group::current(save); 29 tipwin->set_rounding(); 30 } 31 32 Fl_Osc_TSlider::~Fl_Osc_TSlider() 33 { 34 if (tipwin) 35 delete tipwin; 36 } 37 38 void Fl_Osc_TSlider::set_rounding(unsigned int digits) 39 { 40 tipwin->set_rounding(digits); 41 } 42 43 44 int Fl_Osc_TSlider::handle(int event) 45 { 46 int super = 1; 47 48 super = Fl_Osc_Slider::handle(event); 49 50 switch(event) { 51 case FL_PUSH: 52 case FL_MOUSEWHEEL: 53 if (!Fl::event_inside(x(),y(),w(),h())) 54 return(1); 55 tipwin->position(Fl::event_x_root()-Fl::event_x()+x(), 56 Fl::event_y_root()-Fl::event_y()+h()+y()+5); 57 // fall through 58 case FL_DRAG: 59 tipwin->showValue(transform(value())); 60 break; 61 case FL_RELEASE: 62 case FL_HIDE: 63 case FL_LEAVE: 64 if (tipwin) 65 tipwin->hide(); 66 return 1; 67 } 68 69 return super; 70 } 71 72 void Fl_Osc_TSlider::set_transform(float (*transformer)(float)) 73 { 74 transform = transformer; 75 }