2 // control/visual/slider.qc
8 // returns a value in the range of 0..1
19 Raise_DataEvent( lLink, ITEM_DATALINK_GET );
21 if( lLink.maxValue <= lLink.minValue )
24 lValue = ( lLink._realValue - lLink.minValue ) / (lLink.maxValue - lLink.minValue);
28 void( bool pSelect, bool pUser ) Item_Slider_Select =
31 Sound_Play( self.soundSelected );
34 void() Item_Slider_Draw =
37 local vector lSliderPos;
39 lValue = _IS_GetValue();
40 lSliderPos_x = self.pos_x + self.size_x * (self.proportions_x + lValue * self.proportions_y) - lValue * self.sizeSlider_x;
41 lSliderPos_y = self.pos_y + (self.size_y - self.sizeSlider_y) * (1 - (self.direction_y - self.direction_x) * lValue - self.direction_x);
43 if( Menu_ActiveItem == self ) {
44 Menu_DrawPicture( self.pos, self.picture, self.size, self.colorSelected, self.alphas_y, self.drawFlags_y );
45 Menu_DrawPicture( lSliderPos, self.pictureSlider, self.sizeSlider, self.colorSelected, self.alphas_y, self.drawFlags_y );
47 Menu_DrawPicture( self.pos, self.picture, self.size, self.color, self.alphas_x, self.drawFlags_x );
48 Menu_DrawPicture( lSliderPos, self.pictureSlider, self.sizeSlider, self.color, self.alphas_x, self.drawFlags_x );
52 void( float pValue ) _IS_Change =
55 Sound_Play( self.soundDecrease );
57 Sound_Play( self.soundIncrease );
59 self._target._realValue = self._target._realValue + pValue;
60 // FIXME: self._target.realValue += pValue; FTEQCC BUG
61 Raise_DataEvent( self._target, ITEM_DATALINK_SET );
66 bool( float pKey, float pAscii ) Item_Slider_Key =
73 _IS_Change( 0 - self._target.stepValue );
77 _IS_Change( self._target.stepValue );
83 // test if it is within the slider area at all
84 // TODO: Check if this is necessary with the future composition implementations
85 if( !Util_InRect( Menu_Cursor_Position, self.pos, self.size ) )
87 lPos = ( Menu_Cursor_Position_x - self.pos_x ) / self.size_x;
88 if( lPos <= self.proportions_x )
89 _IS_Change( 0 - self._target.stepValue );
90 else if( lPos <= self.proportions_x + self.proportions_y && self.proportions_y ) {
93 lValue = Menu_Cursor_Position_x - self.pos_x - self.sizeSlider_x / 2 - self.size_x * self.proportions_x;
94 lValue = lValue / (self.size_x * self.proportions_y - self.sizeSlider_x);
95 lValue = lValue * ( self._target.maxValue - self._target.minValue ) + self._target.minValue;
96 _IS_Change( lValue - self._target._realValue );
98 _IS_Change( self._target.stepValue );
105 void() Item_Slider_Destroy =
109 Item_DataUser_Destroy();
111 String_EntityFree( self, picture );
112 String_EntityFree( self, pictureSlider );
113 String_EntityFree( self, soundSelected );
114 String_EntityFree( self, soundIncrease );
115 String_EntityFree( self, soundDecrease );
118 void() Item_Slider_Spawn =
120 String_EntityZone( self, picture );
121 String_EntityZone( self, pictureSlider );
122 String_EntityZone( self, soundSelected );
123 String_EntityZone( self, soundIncrease );
124 String_EntityZone( self, soundDecrease );
125 Item_DataUser_Init();
127 Gfx_Precache( self.picture );
128 Gfx_Precache( self.pictureSlider );
129 Sound_Precache( self.soundSelected );
130 Sound_Precache( self.soundIncrease );
131 Sound_Precache( self.soundDecrease );
133 if( self.size == '0 0 0' )
134 self.size = Gfx_GetImageSize( self.picture );
135 if( self.sizeSlider == '0 0 0' )
136 self.sizeSlider = Gfx_GetImageSize( self.pictureSlider );
138 self._reinit = CtCall_Reinit;
139 self._destroy = Item_Slider_Destroy;
140 self._key = Item_Slider_Key;
141 self._draw = Item_Slider_Draw;
142 self._select = Item_Slider_Select;
143 self._update = Item_DataUser_Update;