mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 12:28:22 +01:00
wmaker: Removed equality comparison on floating point number
The equality comparison (a == b) is known to be a dangerous trap when floating-point arithmetics are involved. In the current case the offending operation can be done with integers directly.
This commit is contained in:
committed by
Carlos R. Mafra
parent
0e41122680
commit
1da498ff3b
26
src/misc.c
26
src/misc.c
@@ -159,8 +159,9 @@ void SlideWindow(Window win, int from_x, int from_y, int to_x, int to_y)
|
|||||||
void SlideWindows(Window *wins[], int n, int from_x, int from_y, int to_x, int to_y)
|
void SlideWindows(Window *wins[], int n, int from_x, int from_y, int to_x, int to_y)
|
||||||
{
|
{
|
||||||
time_t time0 = time(NULL);
|
time_t time0 = time(NULL);
|
||||||
float dx, dy, x = from_x, y = from_y, sx, sy, px, py;
|
float dx, dy, x = from_x, y = from_y, px, py;
|
||||||
int dx_is_bigger = 0;
|
Bool is_dx_nul, is_dy_nul;
|
||||||
|
int dx_is_bigger = 0, dx_int, dy_int;
|
||||||
int slide_delay, slide_steps, slide_slowdown;
|
int slide_delay, slide_steps, slide_slowdown;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -181,10 +182,12 @@ void SlideWindows(Window *wins[], int n, int from_x, int from_y, int to_x, int t
|
|||||||
slide_steps = apars[(int)wPreferences.icon_slide_speed].steps;
|
slide_steps = apars[(int)wPreferences.icon_slide_speed].steps;
|
||||||
slide_delay = apars[(int)wPreferences.icon_slide_speed].delay;
|
slide_delay = apars[(int)wPreferences.icon_slide_speed].delay;
|
||||||
|
|
||||||
dx = (float)(to_x - from_x);
|
dx_int = to_x - from_x;
|
||||||
dy = (float)(to_y - from_y);
|
dy_int = to_y - from_y;
|
||||||
sx = (dx == 0 ? 0 : fabs(dx) / dx);
|
is_dx_nul = (dx_int == 0);
|
||||||
sy = (dy == 0 ? 0 : fabs(dy) / dy);
|
is_dy_nul = (dy_int == 0);
|
||||||
|
dx = (float) dx_int;
|
||||||
|
dy = (float) dy_int;
|
||||||
|
|
||||||
if (fabs(dx) > fabs(dy)) {
|
if (fabs(dx) > fabs(dy)) {
|
||||||
dx_is_bigger = 1;
|
dx_is_bigger = 1;
|
||||||
@@ -196,17 +199,18 @@ void SlideWindows(Window *wins[], int n, int from_x, int from_y, int to_x, int t
|
|||||||
px = slide_steps;
|
px = slide_steps;
|
||||||
else if (px > -slide_steps && px < 0)
|
else if (px > -slide_steps && px < 0)
|
||||||
px = -slide_steps;
|
px = -slide_steps;
|
||||||
py = (sx == 0 ? 0 : px * dy / dx);
|
py = (is_dx_nul ? 0.0 : px * dy / dx);
|
||||||
} else {
|
} else {
|
||||||
py = dy / slide_slowdown;
|
py = dy / slide_slowdown;
|
||||||
if (py < slide_steps && py > 0)
|
if (py < slide_steps && py > 0)
|
||||||
py = slide_steps;
|
py = slide_steps;
|
||||||
else if (py > -slide_steps && py < 0)
|
else if (py > -slide_steps && py < 0)
|
||||||
py = -slide_steps;
|
py = -slide_steps;
|
||||||
px = (sy == 0 ? 0 : py * dx / dy);
|
px = (is_dy_nul ? 0.0 : py * dx / dy);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (x != to_x || y != to_y) {
|
while (((int)x) != to_x ||
|
||||||
|
((int)y) != to_y) {
|
||||||
x += px;
|
x += px;
|
||||||
y += py;
|
y += py;
|
||||||
if ((px < 0 && (int)x < to_x) || (px > 0 && (int)x > to_x))
|
if ((px < 0 && (int)x < to_x) || (px > 0 && (int)x > to_x))
|
||||||
@@ -220,14 +224,14 @@ void SlideWindows(Window *wins[], int n, int from_x, int from_y, int to_x, int t
|
|||||||
px = slide_steps;
|
px = slide_steps;
|
||||||
else if (px > -slide_steps && px < 0)
|
else if (px > -slide_steps && px < 0)
|
||||||
px = -slide_steps;
|
px = -slide_steps;
|
||||||
py = (sx == 0 ? 0 : px * dy / dx);
|
py = (is_dx_nul ? 0.0 : px * dy / dx);
|
||||||
} else {
|
} else {
|
||||||
py = py * (1.0 - 1 / (float)slide_slowdown);
|
py = py * (1.0 - 1 / (float)slide_slowdown);
|
||||||
if (py < slide_steps && py > 0)
|
if (py < slide_steps && py > 0)
|
||||||
py = slide_steps;
|
py = slide_steps;
|
||||||
else if (py > -slide_steps && py < 0)
|
else if (py > -slide_steps && py < 0)
|
||||||
py = -slide_steps;
|
py = -slide_steps;
|
||||||
px = (sy == 0 ? 0 : py * dx / dy);
|
px = (is_dy_nul ? 0.0 : py * dx / dy);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user