4 void puSlider::draw ( int dx, int dy )
6 if ( !visible ) return ;
9 (style==PUSTYLE_BEVELLED||
10 style==PUSTYLE_SHADED) ? -PUSTYLE_BOXED : -style,
15 if ( isVertical() ) { sd = 1 ; od = 0 ; } else { sd = 0 ; od = 1 ; }
17 int sz = abox.max [sd] - abox.min [sd] ;
23 if ( val < 0.0f ) val = 0.0f ;
24 if ( val > 1.0f ) val = 1.0f ;
26 val *= (float) sz * (1.0f - slider_fraction) ;
30 bx . min [ sd ] = abox . min [ sd ] + (int) val ;
31 bx . max [ sd ] = (int) ( (float) bx . min [ sd ] + (float) sz * slider_fraction ) ;
32 bx . min [ od ] = abox . min [ od ] + 2 ;
33 bx . max [ od ] = abox . max [ od ] - 2 ;
35 bx . draw ( dx, dy, PUSTYLE_SMALL_SHADED, colour, FALSE ) ;
37 /* If greyed out then halve the opacity when drawing the label and legend */
40 glColor4fv ( colour [ PUCOL_LEGEND ] ) ;
42 glColor4f ( colour [ PUCOL_LEGEND ][0],
43 colour [ PUCOL_LEGEND ][1],
44 colour [ PUCOL_LEGEND ][2],
45 colour [ PUCOL_LEGEND ][3] / 2.0f ) ; /* 50% more transparent */
47 int xx = ( abox.max[0] - abox.min[0] - puGetStringWidth(legendFont,legend) ) / 2 ;
48 int yy = ( abox.max[1] - abox.min[1] - puGetStringHeight(legendFont) ) / 2 ;
50 puDrawString ( legendFont, legend,
51 dx + abox.min[0] + xx,
52 dy + abox.min[1] + yy ) ;
54 draw_label ( dx, dy ) ;
58 void puSlider::doHit ( int button, int updown, int x, int y )
60 if ( button == PU_LEFT_BUTTON )
62 int sd = isVertical() ;
63 int sz = abox.max [sd] - abox.min [sd] ;
64 int coord = isVertical() ? y : x ;
72 next_value = ( (float)coord - (float)abox.min[sd] - (float)sz * slider_fraction / 2.0f ) /
73 ( (float) sz * (1.0f - slider_fraction) ) ;
76 next_value = (next_value < 0.0f) ? 0.0f : (next_value > 1.0) ? 1.0f : next_value ;
78 setValue ( next_value ) ;
83 if ( updown == active_mouse_edge )
85 last_cb_value = next_value ;
91 if ( fabs ( last_cb_value - next_value ) >= cb_delta )
93 last_cb_value = next_value ;
98 case PUSLIDER_ALWAYS :
100 last_cb_value = next_value ;