4 void puSlider::draw ( int dx, int dy )
6 if ( !visible ) return ;
9 style==PUSTYLE_BEVELLED ? -PUSTYLE_BOXED : -style,
14 if ( isVertical() ) { sd = 1 ; od = 0 ; } else { sd = 0 ; od = 1 ; }
16 int sz = abox.max [sd] - abox.min [sd] ;
22 if ( val < 0.0f ) val = 0.0f ;
23 if ( val > 1.0f ) val = 1.0f ;
25 val *= (float) sz * (1.0f - slider_fraction) ;
29 bx . min [ sd ] = abox . min [ sd ] + (int) val ;
30 bx . max [ sd ] = (int) ( (float) bx . min [ sd ] + (float) sz * slider_fraction ) ;
31 bx . min [ od ] = abox . min [ od ] + 2 ;
32 bx . max [ od ] = abox . max [ od ] - 2 ;
34 bx . draw ( dx, dy, PUSTYLE_SMALL_BEVELLED, colour, FALSE ) ;
36 /* If greyed out then halve the opacity when drawing the label and legend */
39 glColor4fv ( colour [ PUCOL_LEGEND ] ) ;
41 glColor4f ( colour [ PUCOL_LEGEND ][0],
42 colour [ PUCOL_LEGEND ][1],
43 colour [ PUCOL_LEGEND ][2],
44 colour [ PUCOL_LEGEND ][3] / 2.0 ) ; /* 50% more transparent */
46 int xx = ( abox.max[0] - abox.min[0] - puGetStringWidth(legendFont,legend) ) / 2 ;
47 int yy = ( abox.max[1] - abox.min[1] - puGetStringHeight(legendFont) ) / 2 ;
49 puDrawString ( legendFont, legend,
50 dx + abox.min[0] + xx,
51 dy + abox.min[1] + yy ) ;
53 draw_label ( dx, dy ) ;
57 void puSlider::doHit ( int button, int updown, int x, int y )
59 if ( button == PU_LEFT_BUTTON )
61 int sd = isVertical() ;
62 int sz = abox.max [sd] - abox.min [sd] ;
63 int coord = isVertical() ? y : x ;
71 next_value = ( (float)coord - (float)abox.min[sd] - (float)sz * slider_fraction / 2.0f ) /
72 ( (float) sz * (1.0f - slider_fraction) ) ;
75 next_value = (next_value < 0.0f) ? 0.0f : (next_value > 1.0) ? 1.0f : next_value ;
77 setValue ( next_value ) ;
82 if ( updown == active_mouse_edge )
84 last_cb_value = next_value ;
90 if ( fabs ( last_cb_value - next_value ) >= cb_delta )
92 last_cb_value = next_value ;
97 case PUSLIDER_ALWAYS :
99 last_cb_value = next_value ;