60 const QSize oldSize = oldRect.size();
61 QSize newSize = oldSize;
62 QPoint newOffset = oldRect.topLeft();
67 qreal xOffsetFromSizeChange = 1.0;
68 qreal yOffsetFromSizeChange = 1.0;
70 int baseSizeCoeff = 1;
72 bool useMoveOnly =
false;
78 xOffsetFromSizeChange = -1.0;
79 yOffsetFromSizeChange = -1.0;
84 xOffsetFromSizeChange = 0.0;
85 yOffsetFromSizeChange = -1.0;
93 xOffsetFromSizeChange = 0.0;
94 yOffsetFromSizeChange = 0.0;
99 xOffsetFromSizeChange = -1.0;
100 yOffsetFromSizeChange = 0.0;
105 xOffsetFromSizeChange = -0.5;
106 yOffsetFromSizeChange = -1.0;
111 xOffsetFromSizeChange = 0.0;
112 yOffsetFromSizeChange = -0.5;
117 xOffsetFromSizeChange = -0.5;
118 yOffsetFromSizeChange = 0.0;
123 xOffsetFromSizeChange = -1.0;
124 yOffsetFromSizeChange = -0.5;
134 const int centeringSizeCoeff =
m_centered ? 2 : 1;
136 xOffsetFromSizeChange = -0.5;
137 yOffsetFromSizeChange = -0.5;
141 QSize sizeDiff(offset.x() * xSizeCoeff * centeringSizeCoeff,
142 offset.y() * ySizeCoeff * centeringSizeCoeff);
144 QSize tempSize = baseSizeCoeff * oldSize + sizeDiff;
145 bool widthPreferable = qAbs(tempSize.width()) > qAbs(tempSize.height() *
m_ratio);
148 if ((widthPreferable && xSizeCoeff != 0) || ySizeCoeff == 0) {
149 newSize.setWidth(tempSize.width());
151 }
else if ((!widthPreferable && ySizeCoeff != 0) || xSizeCoeff == 0) {
152 newSize.setHeight(tempSize.height());
170 newSize.setHeight(tempSize.height());
174 newSize.setWidth(tempSize.width());
177 newSize = baseSizeCoeff * oldSize + sizeDiff;
181 QSize realSizeDiff = newSize - baseSizeCoeff * oldSize;
182 QPoint offsetDiff(realSizeDiff.width() * xOffsetFromSizeChange,
183 realSizeDiff.height() * yOffsetFromSizeChange);
185 newOffset = oldRect.topLeft() + offsetDiff;
187 newOffset = oldRect.topLeft() + offset;
190 QPoint prevOffset = newOffset;
193 if (newOffset.x() + newSize.width() >
m_cropRect.width()) {
194 newOffset.setX(
m_cropRect.width() - newSize.width());
197 if (newOffset.y() + newSize.height() >
m_cropRect.height()) {
198 newOffset.setY(
m_cropRect.height() - newSize.height());
209 newOffset = prevOffset;
212 m_rect = QRect(newOffset, newSize);
218 qreal newRatio =
m_rect.width() / (qreal)(
m_rect.height());