MCPcopy Create free account
hub / github.com/TankOs/SFGUI / HandleMouseMoveEvent

Method HandleMouseMoveEvent

src/SFGUI/Scale.cpp:126–167  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

124}
125
126void 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
169const std::string& Scale::GetName() const {
170 static const std::string name( "Scale" );

Callers

nothing calls this directly

Calls 6

GetUpperMethod · 0.80
GetLowerMethod · 0.80
GetPageSizeMethod · 0.80
GetMinorStepMethod · 0.80
DecrementMethod · 0.80
IncrementMethod · 0.80

Tested by

no test coverage detected