1
1
#include <assert.h>
2
2
#include <errno.h>
3
+ #include <math.h>
3
4
#include <stdlib.h>
4
5
#include <string.h>
5
6
#include <time.h>
@@ -198,42 +199,36 @@ static void
198
199
requestpointermovement (Movement * m , int usec )
199
200
{
200
201
if (!m -> dir ) return ;
201
- // -1, 0, 1
202
- int xsign = ((m -> dir & RIGHT ) ? 1 : 0 ) - ((m -> dir & LEFT ) ? 1 : 0 );
203
- int ysign = ((m -> dir & UP ) ? 1 : 0 ) - ((m -> dir & DOWN ) ? 1 : 0 );
204
- // x, y units per second
205
- int xps = m -> basespeed * xsign * m -> mul * usec + m -> xrem ;
206
- int yps = m -> basespeed * ysign * m -> mul * usec + m -> yrem ;
207
- int dx = xps / 1000000 ;
208
- int dy = - yps / 1000000 ;
209
- // Subunit remainders.
210
- m -> xrem = xps % 1000000 ;
211
- m -> yrem = yps % 1000000 ;
202
+ // xsign and ysign can be one of -1, 0, 1.
203
+ double xsign = ((m -> dir & RIGHT ) ? 1 : 0 ) - ((m -> dir & LEFT ) ? 1 : 0 );
204
+ double ysign = ((m -> dir & UP ) ? 1 : 0 ) - ((m -> dir & DOWN ) ? 1 : 0 );
205
+ double dx = m -> basespeed * xsign * m -> mul * usec / 1e6 + m -> xrem ;
206
+ double dy = - m -> basespeed * ysign * m -> mul * usec / 1e6 + m -> yrem ;
207
+ double dummy ;
208
+ m -> xrem = modf (dx , & dummy );
209
+ m -> yrem = modf (dy , & dummy );
212
210
213
- XWarpPointer (dpy , None , None , 0 , 0 , 0 , 0 , dx , dy );
211
+ XWarpPointer (dpy , None , None , 0 , 0 , 0 , 0 , ( int ) dx , ( int ) dy );
214
212
}
215
213
216
214
static void
217
215
requestscrolling (Movement * m , int usec )
218
216
{
219
217
if (!m -> dir ) return ;
220
- // -1, 0, 1
221
- int xsign = ((m -> dir & RIGHT ) ? 1 : 0 ) - ((m -> dir & LEFT ) ? 1 : 0 );
222
- int ysign = ((m -> dir & UP ) ? 1 : 0 ) - ((m -> dir & DOWN ) ? 1 : 0 );
223
- // x, y units per second
224
- int xps = m -> basespeed * xsign * m -> mul * usec + m -> xrem ;
225
- int yps = m -> basespeed * ysign * m -> mul * usec + m -> yrem ;
226
- int dx = xps / 1000000 ;
227
- int dy = - yps / 1000000 ;
228
- // Subunit remainders.
229
- m -> xrem = xps % 1000000 ;
230
- m -> yrem = yps % 1000000 ;
218
+ // xsign and ysign can be one of -1, 0, 1.
219
+ double xsign = ((m -> dir & RIGHT ) ? 1 : 0 ) - ((m -> dir & LEFT ) ? 1 : 0 );
220
+ double ysign = ((m -> dir & UP ) ? 1 : 0 ) - ((m -> dir & DOWN ) ? 1 : 0 );
221
+ double dx = m -> basespeed * xsign * m -> mul * usec / 1e6 + m -> xrem ;
222
+ double dy = m -> basespeed * ysign * m -> mul * usec / 1e6 + m -> yrem ;
223
+ double dummy ;
224
+ m -> xrem = modf (dx , & dummy );
225
+ m -> yrem = modf (dy , & dummy );
231
226
232
227
unsigned int xbutton = (m -> dir & LEFT ) ? SCROLLLEFT : SCROLLRIGHT ;
233
- unsigned int ybutton = (m -> dir & UP ) ? 4 : 5 ;
228
+ unsigned int ybutton = (m -> dir & UP ) ? SCROLLUP : SCROLLDOWN ;
234
229
235
- int xevents = abs (dx );
236
- int yevents = abs (dy );
230
+ int xevents = abs (( int ) dx );
231
+ int yevents = abs (( int ) dy );
237
232
// Scroll immediately after a scroll key is pressed, but adjust the
238
233
// remainder so the configured number of scroll events occur in the first
239
234
// second.
@@ -576,10 +571,8 @@ move2scroll(const Arg *enable)
576
571
void
577
572
togglem2s (const Arg * ignored )
578
573
{
579
- printmovement ();
580
574
Arg arg = {.i = !ismove2scroll };
581
575
move2scroll (& arg );
582
- printmovement ();
583
576
}
584
577
585
578
void
@@ -597,19 +590,19 @@ scrollstop(const Arg *dir)
597
590
}
598
591
599
592
void
600
- multiplyspeed (const Arg * n )
593
+ multiplyspeed (const Arg * factor )
601
594
{
602
- if (!n ) die ("multiplyspeed: NULL arg" );
603
- mvptr .mul += n -> ui ;
604
- mvscroll .mul += n -> ui ;
595
+ if (!factor ) die ("multiplyspeed: NULL arg" );
596
+ mvptr .mul *= factor -> f ;
597
+ mvscroll .mul *= factor -> f ;
605
598
}
606
599
607
600
void
608
- dividespeed (const Arg * n )
601
+ dividespeed (const Arg * factor )
609
602
{
610
- if (!n ) die ("dividespeed: NULL arg" );
611
- mvptr .mul -= n -> ui ;
612
- mvscroll .mul -= n -> ui ;
603
+ if (!factor ) die ("dividespeed: NULL arg" );
604
+ mvptr .mul /= factor -> f ;
605
+ mvscroll .mul /= factor -> f ;
613
606
}
614
607
615
608
void
0 commit comments