Esempio n. 1
0
void Flu_Spinner::draw()
{
  int W = w()*15/100;
  if( W < h()/2 )
    W = h()/2;
  int X = x()+w()-W, Y = y();

  // fltk 2.0 behavior
  bool refresh;
  if( step() >= 1.0 )
    {
      refresh = ( _input.type() != FL_INT_INPUT );
      _input.type( FL_INT_INPUT );
    }
  else
    {
      refresh = ( _input.type() != FL_FLOAT_INPUT );
      _input.type( FL_FLOAT_INPUT );
    }
  if( refresh )
    value_damage();

  // draw the up/down arrow buttons
  fl_draw_box( (Fl_Boxtype)_valbox[0], X, Y, W, h()/2, color() );
  fl_draw_box( (Fl_Boxtype)_valbox[1], X, Y+h()/2, W, h()/2, color() );
  fl_color( active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR) );
  fl_polygon( X+4, Y+h()/2-4, X+W/2, Y+4, X+W-4, Y+h()/2-4 );
  Y += h()/2;
  fl_polygon( X+4, Y+4, X+W/2, Y+h()/2-4, X+W-4, Y+4 );

  _input.resize( x(), y(), w()-h()/2-1, h() );
  _input.redraw();
}
Fl_Value_Input_Spin::Fl_Value_Input_Spin(int in_x, int in_y, int in_w, int in_h, const char* in_l) : 
  Fl_Valuator(in_x,in_y,in_w,in_h,in_l), 
  input(in_x, in_y, in_w, in_h, nullptr)
{
  soft_ = 0;
  if (input.parent())
  {
    // defeat automatic-add
    ((Fl_Group*)input.parent())->remove(input);
  }
  input.parent((Fl_Group *)this); // kludge!
  input.callback(input_cb, this);
  input.when(FL_WHEN_CHANGED);
  selection_color(input.selection_color());
  align(FL_ALIGN_LEFT);
  box(input.box());
  value_damage();
  buttonssize(15);
  ix=in_x;
  iy=in_y; 
  drag=0;
  indrag=0;
  sldrag=0;
  mouseobj = 0;
  deltadir=0;
  delta=0;
}
Esempio n. 3
0
	Fl_new_adjuster(int X, int Y, int W, int H, const char* L=0)
		:Fl_Adjuster(X,Y,W/2,H, L)
		,b(FL_DOWN_BOX, X+W/2,Y, W/2,H,buf2)
	{
		if(b.h()<=20 && b.labelsize()>11)
			b.labelsize(11);

		align(FL_ALIGN_LEFT);
		step(1);
		value_damage();
	}
Fl_Value_Slider_Input::Fl_Value_Slider_Input(int in_x, int in_y, int in_w, int in_h, const char* in_l) : 
  Fl_Value_Slider(in_x,in_y,in_w,in_h,in_l),
  input(in_x, in_y, in_w, in_h, nullptr)
{
  soft_ = 0;
  if (input.parent())
  {
    // defeat automatic-add
    ((Fl_Group*)input.parent())->remove(input);
  }
  input.parent((Fl_Group*)this); // kludge!
  input.callback(input_cb, this);
//  input.when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY);
  input.when(FL_WHEN_CHANGED );
  selection_color(input.selection_color());
  input.align(FL_ALIGN_LEFT);
  align(FL_ALIGN_LEFT);
  textboxsize(35);
  value_damage();
}
Esempio n. 5
0
Flu_Spinner :: Flu_Spinner( int X, int Y, int W, int H, const char* l )
  : Fl_Valuator( X, Y, W, H, l ), _input( this, X, Y, W, H, 0 )
{
  // we always want the buttons to be square and half the height of the widget
  int wid = W*15/100;
  if( wid < H/2 )
    wid = H/2;

  _wrapRange = false;
  _dragging = false;
  _editable = true;
  _totalTime = 0.0f;
  _initialDelay = 0.5f;
  _repeatTime[0] = 0.1f;
  _repeatTime[1] = 0.02f;
  _rapidDelay = 2.0f;
  _doRepeat = true;
  _pushed = false;
  _valbox[0] = _valbox[1] = FL_UP_BOX;

  box( FL_DOWN_BOX );
  align( FL_ALIGN_LEFT );
  when( FL_WHEN_CHANGED );
  precision( 2 );
  range( 0, 1 );
  value( 0 );

  {
    _input.callback(input_cb, this);
    _input.resize( X, Y, W-wid-1, H );
    _input.color( FL_WHITE, FL_SELECTION_COLOR );
    _input.textfont( FL_HELVETICA );
    _input.textsize(  FL_NORMAL_SIZE );
    _input.textcolor( FL_FOREGROUND_COLOR );
    _input.type( FL_FLOAT_INPUT );
    value_damage();
  }
}
Esempio n. 6
0
int WidgetPDial::handle(int event)
{
    double dragsize, min = minimum(), max = maximum(), result;
    int dy;

    if (event == FL_RELEASE && Fl::event_clicks() == 1) {
        Fl::event_clicks(0);
        value(reset_value);
        tipwin->hide();
        value_damage();
        if (this->when() != 0)
            do_callback();
        return 1;
    }

    int old_mod_state;

    switch(event) {
        case FL_PUSH:
            mod_state = Fl::event_state() & MOD_MASK;
            if (!use_rounding) {
                if (integer_step)
                    set_rounding(0);
                else if (mod_state == MOD_MASK)
                    set_rounding(5);
                else if (mod_state == FL_SHIFT)
                    set_rounding(4);
                else
                    set_rounding((Fl::event_button3() || mod_state & FL_CTRL)
                                 ? 3 : 2);
            }
            oldvalue = value();
            old_y = Fl::event_y();
        case FL_DRAG:
            getPos();
            old_mod_state = mod_state;
            mod_state = Fl::event_state() & MOD_MASK;
            if (old_mod_state != mod_state) {
                oldvalue = value();
                old_y = Fl::event_y();
                if (!use_rounding) {
                    if (integer_step)
                        set_rounding(0);
                    else if (mod_state == MOD_MASK)
                        set_rounding(5);
                    else if (mod_state == FL_SHIFT)
                        set_rounding(4);
                    else
                        set_rounding((Fl::event_button3() ||
                                      mod_state & FL_CTRL)
                                     ? 3 : 2);
                }
                break;
            }
            dy = old_y - Fl::event_y();
            if (dy < -1 || dy > 1)
                Fl::event_clicks(0);

            if (!integer_step && mod_state == MOD_MASK)
                dragsize = 200000.0f;
            else if (!integer_step && mod_state == FL_SHIFT)
                dragsize = 20000.0f;
            else
                dragsize = (Fl::event_button3() || mod_state & MOD_MASK)
                    ? 1000.0f : 200.0f;

            value(clamp(oldvalue + dy / dragsize * (max - min)));
            tipwin->showValue(transform(value()));
            value_damage();
            if(this->when() != 0)
                do_callback();
            return 1;
        case FL_MOUSEWHEEL:
            if (Fl::event_buttons() || Fl::belowmouse() != this)
                return 1;
            mod_state = Fl::event_state() & MOD_MASK;
            dy = - Fl::event_dy();

            if (integer_step) {
                if (!use_rounding) set_rounding(0);
                result = (int)(value() +
                               dy * ((Fl::event_ctrl() ||
                                      Fl::event_shift()) ? 1 : 8));
            } else {
                float dragsize;
                if (mod_state == MOD_MASK) {
                    dragsize = 100000.0;
                    if (!use_rounding) set_rounding(5);
                } else if (mod_state == FL_SHIFT) {
                    dragsize = 10000.0;
                    if (!use_rounding) set_rounding(4);
                } else if (mod_state == FL_CTRL) {
                    dragsize = 1000.0;
                    if (!use_rounding) set_rounding(3);
                } else {
                    dragsize = 100.0;
                    if (!use_rounding) set_rounding(2);
                }
                result = value() + dy / dragsize * (max - min);
            }
            value(clamp(result));

            tipwin->showValue(transform(value()));
            value_damage();
            if(this->when() != 0)
                do_callback();
            return 1;
        case FL_ENTER:
            getPos();
            tipwin->showText();
            return 1;
        case FL_HIDE:
        case FL_LEAVE:
            tipwin->hide();
            resetPos();
            break;
        case FL_RELEASE:
            if (integer_step) {
                float rounded = floorf(value() + 0.5);
                value(clamp(rounded));
            }
            tipwin->hide();
            resetPos();
            if(this->when() == 0)
                do_callback();
            return 1;
    }
    return 0;
//#endif
}