| 124 | } |
| 125 | |
| 126 | void Scale::HandleMouseMoveEvent( int x, int y ) { |
| 127 | if( !m_dragging || ( x == std::numeric_limits<int>::min() ) || ( y == std::numeric_limits<int>::min() ) ) { |
| 128 | return; |
| 129 | } |
| 130 | |
| 131 | Adjustment::Ptr adjustment( GetAdjustment() ); |
| 132 | auto slider_rect = GetSliderRect(); |
| 133 | |
| 134 | auto value_range = std::max( adjustment->GetUpper() - adjustment->GetLower() - adjustment->GetPageSize(), adjustment->GetMinorStep() / 2.f ); |
| 135 | auto steps = value_range / adjustment->GetMinorStep(); |
| 136 | |
| 137 | if( GetOrientation() == Orientation::HORIZONTAL ) { |
| 138 | auto slider_center_x = GetAllocation().position.x + slider_rect.position.x + slider_rect.size.x / 2.0f; |
| 139 | auto step_distance = (GetAllocation().size.x - slider_rect.size.x) / steps; |
| 140 | auto delta = static_cast<float>( x ) - slider_center_x - m_drag_offset->x; |
| 141 | |
| 142 | while( delta < (-step_distance / 2) ) { |
| 143 | adjustment->Decrement(); |
| 144 | delta += step_distance; |
| 145 | } |
| 146 | |
| 147 | while( delta > (step_distance / 2) ) { |
| 148 | adjustment->Increment(); |
| 149 | delta -= step_distance; |
| 150 | } |
| 151 | } |
| 152 | else { |
| 153 | auto slider_center_y = GetAllocation().position.y + slider_rect.getCenter().y; |
| 154 | auto step_distance = (GetAllocation().size.y - slider_rect.size.y) / steps; |
| 155 | auto delta = static_cast<float>( y ) - slider_center_y - m_drag_offset->y; |
| 156 | |
| 157 | while( delta < (-step_distance / 2) ) { |
| 158 | adjustment->Increment(); |
| 159 | delta += step_distance; |
| 160 | } |
| 161 | |
| 162 | while( delta > (step_distance / 2) ) { |
| 163 | adjustment->Decrement(); |
| 164 | delta -= step_distance; |
| 165 | } |
| 166 | } |
| 167 | } |
| 168 | |
| 169 | const std::string& Scale::GetName() const { |
| 170 | static const std::string name( "Scale" ); |
nothing calls this directly
no test coverage detected