Changeset View
Changeset View
Standalone View
Standalone View
libkwineffects/kwineffects.cpp
Show First 20 Lines • Show All 1149 Lines • ▼ Show 20 Line(s) | 1143 | #endif | |||
---|---|---|---|---|---|
1150 | WindowQuadList ret; | 1150 | WindowQuadList ret; | ||
1151 | 1151 | | |||
1152 | foreach (const WindowQuad &quad, *this) { | 1152 | foreach (const WindowQuad &quad, *this) { | ||
1153 | const double quadLeft = quad.left(); | 1153 | const double quadLeft = quad.left(); | ||
1154 | const double quadRight = quad.right(); | 1154 | const double quadRight = quad.right(); | ||
1155 | const double quadTop = quad.top(); | 1155 | const double quadTop = quad.top(); | ||
1156 | const double quadBottom = quad.bottom(); | 1156 | const double quadBottom = quad.bottom(); | ||
1157 | 1157 | | |||
1158 | // sanity check, see BUG 390953 | ||||
1159 | if (quadLeft == quadRight || quadTop == quadBottom) { | ||||
zzag: Comparison of floating point numbers should be done in a different way. | |||||
There are more places where doubles are compared exactly like that. E.g. in WindowQuadList::splitAtX, sliptAtY, WindowMotionManager::moveWindow, WindowQuad::smoothNeeded() Basically that's everywhere wrong. My suggestion is to commit as is and afterwards do a correction for all cases in one go. graesslin: There are more places where doubles are compared exactly like that. E.g. in WindowQuadList… | |||||
zzag: Seems reasonable. | |||||
1160 | ret.append(quad); | ||||
1161 | continue; | ||||
1162 | } | ||||
1163 | | ||||
1158 | // Compute the top-left corner of the first intersecting grid cell | 1164 | // Compute the top-left corner of the first intersecting grid cell | ||
1159 | const double xBegin = left + qFloor((quadLeft - left) / maxQuadSize) * maxQuadSize; | 1165 | const double xBegin = left + qFloor((quadLeft - left) / maxQuadSize) * maxQuadSize; | ||
1160 | const double yBegin = top + qFloor((quadTop - top) / maxQuadSize) * maxQuadSize; | 1166 | const double yBegin = top + qFloor((quadTop - top) / maxQuadSize) * maxQuadSize; | ||
1161 | 1167 | | |||
1162 | // Loop over all intersecting cells and add sub-quads | 1168 | // Loop over all intersecting cells and add sub-quads | ||
1163 | for (double y = yBegin; y < quadBottom; y += maxQuadSize) { | 1169 | for (double y = yBegin; y < quadBottom; y += maxQuadSize) { | ||
1164 | const double y0 = qMax(y, quadTop); | 1170 | const double y0 = qMax(y, quadTop); | ||
1165 | const double y1 = qMin(quadBottom, y + maxQuadSize); | 1171 | const double y1 = qMin(quadBottom, y + maxQuadSize); | ||
Show All 38 Lines | 1200 | #endif | |||
1204 | WindowQuadList ret; | 1210 | WindowQuadList ret; | ||
1205 | 1211 | | |||
1206 | foreach (const WindowQuad &quad, *this) { | 1212 | foreach (const WindowQuad &quad, *this) { | ||
1207 | const double quadLeft = quad.left(); | 1213 | const double quadLeft = quad.left(); | ||
1208 | const double quadRight = quad.right(); | 1214 | const double quadRight = quad.right(); | ||
1209 | const double quadTop = quad.top(); | 1215 | const double quadTop = quad.top(); | ||
1210 | const double quadBottom = quad.bottom(); | 1216 | const double quadBottom = quad.bottom(); | ||
1211 | 1217 | | |||
1218 | // sanity check, see BUG 390953 | ||||
1219 | if (quadLeft == quadRight || quadTop == quadBottom) { | ||||
zzag: Same here. | |||||
1220 | ret.append(quad); | ||||
1221 | continue; | ||||
1222 | } | ||||
1223 | | ||||
1212 | // Compute the top-left corner of the first intersecting grid cell | 1224 | // Compute the top-left corner of the first intersecting grid cell | ||
1213 | const double xBegin = left + qFloor((quadLeft - left) / xIncrement) * xIncrement; | 1225 | const double xBegin = left + qFloor((quadLeft - left) / xIncrement) * xIncrement; | ||
1214 | const double yBegin = top + qFloor((quadTop - top) / yIncrement) * yIncrement; | 1226 | const double yBegin = top + qFloor((quadTop - top) / yIncrement) * yIncrement; | ||
1215 | 1227 | | |||
1216 | // Loop over all intersecting cells and add sub-quads | 1228 | // Loop over all intersecting cells and add sub-quads | ||
1217 | for (double y = yBegin; y < quadBottom; y += yIncrement) { | 1229 | for (double y = yBegin; y < quadBottom; y += yIncrement) { | ||
1218 | const double y0 = qMax(y, quadTop); | 1230 | const double y0 = qMax(y, quadTop); | ||
1219 | const double y1 = qMin(quadBottom, y + yIncrement); | 1231 | const double y1 = qMin(quadBottom, y + yIncrement); | ||
▲ Show 20 Lines • Show All 664 Lines • Show Last 20 Lines |
Comparison of floating point numbers should be done in a different way.