zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

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 }