if (mode == Qt::IgnoreAspectRatio || wd == 0 || ht == 0) {
wd = s.wd;
ht = s.ht;
- } else if (mode == Qt::KeepAspectRatio) {
- int rw = s.ht * wd / ht;
- if (rw <= s.wd) {
- wd = rw;
- ht = s.ht;
- } else {
- ht = s.wd * ht / wd;
- wd = s.wd;
+ } else {
+ bool useHeight;
+ qint64 rw = qint64(s.ht) * qint64(wd) / qint64(ht);
+
+ if (mode == Qt::KeepAspectRatio) {
+ useHeight = (rw <= s.wd);
+ } else { // mode == Qt::KeepAspectRatioByExpanding
+ useHeight = (rw >= s.wd);
}
- } else { // mode == Qt::KeepAspectRatioByExpanding
- int rw = s.ht * wd / ht;
- if (rw >= s.wd) {
+
+ if (useHeight) {
wd = rw;
ht = s.ht;
} else {
- ht = s.wd * ht / wd;
+ ht = qint32(qint64(s.wd) * qint64(ht) / qint64(wd));
wd = s.wd;
}
}