| 170 | } |
| 171 | |
| 172 | bool Scrollbar::OnMouseDown(const Point& pos, int key) |
| 173 | { |
| 174 | mouse_drag_start_pos = pos; |
| 175 | |
| 176 | if (rect_button_decrement.contains(pos)) |
| 177 | { |
| 178 | mouse_down_mode = mouse_down_button_decr; |
| 179 | FuncScrollOnMouseDown = &FuncScrollLineDecrement; |
| 180 | |
| 181 | double last_position = position; |
| 182 | |
| 183 | position -= line_step; |
| 184 | last_step_size = -line_step; |
| 185 | if (position >= scroll_max) |
| 186 | position = scroll_max - 1.0; |
| 187 | if (position < scroll_min) |
| 188 | position = scroll_min; |
| 189 | |
| 190 | if (last_position != position) |
| 191 | InvokeScrollEvent(&FuncScrollLineDecrement); |
| 192 | } |
| 193 | else if (rect_button_increment.contains(pos)) |
| 194 | { |
| 195 | mouse_down_mode = mouse_down_button_incr; |
| 196 | FuncScrollOnMouseDown = &FuncScrollLineIncrement; |
| 197 | |
| 198 | double last_position = position; |
| 199 | |
| 200 | position += line_step; |
| 201 | last_step_size = line_step; |
| 202 | if (position >= scroll_max) |
| 203 | position = scroll_max - 1.0; |
| 204 | if (position < scroll_min) |
| 205 | position = scroll_min; |
| 206 | |
| 207 | if (last_position != position) |
| 208 | InvokeScrollEvent(&FuncScrollLineIncrement); |
| 209 | } |
| 210 | else if (rect_thumb.contains(pos)) |
| 211 | { |
| 212 | mouse_down_mode = mouse_down_thumb_drag; |
| 213 | thumb_start_position = position; |
| 214 | thumb_start_pixel_position = vertical ? (rect_thumb.y - rect_track_decrement.y) : (rect_thumb.x - rect_track_decrement.x); |
| 215 | } |
| 216 | else if (rect_track_decrement.contains(pos)) |
| 217 | { |
| 218 | mouse_down_mode = mouse_down_track_decr; |
| 219 | FuncScrollOnMouseDown = &FuncScrollPageDecrement; |
| 220 | |
| 221 | double last_position = position; |
| 222 | |
| 223 | position -= page_step; |
| 224 | last_step_size = -page_step; |
| 225 | if (position >= scroll_max) |
| 226 | position = scroll_max - 1.0; |
| 227 | if (position < scroll_min) |
| 228 | position = scroll_min; |
| 229 | |