@@ -28,7 +28,7 | |||||
28 |
|
28 | |||
29 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
29 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
30 |
|
30 | |||
31 |
static const qreal |
|
31 | static const qreal maxAxisPortion = 0.4; | |
32 |
|
32 | |||
33 | ChartLayout::ChartLayout(ChartPresenter *presenter) |
|
33 | ChartLayout::ChartLayout(ChartPresenter *presenter) | |
34 | : m_presenter(presenter), |
|
34 | : m_presenter(presenter), | |
@@ -159,15 +159,51 QRectF ChartLayout::calculateAxisGeometry(const QRectF &geometry, const QList<Ch | |||||
159 | } |
|
159 | } | |
160 | } |
|
160 | } | |
161 |
|
161 | |||
162 |
int |
|
162 | int totalVerticalAxes = leftCount + rightCount; | |
|
163 | qreal leftSqueezeRatio = 1.0; | |||
|
164 | qreal rightSqueezeRatio = 1.0; | |||
|
165 | qreal vratio = 0; | |||
|
166 | ||||
|
167 | if (totalVerticalAxes > 0) | |||
|
168 | vratio = (maxAxisPortion * geometry.width()) / totalVerticalAxes; | |||
|
169 | ||||
|
170 | if (leftCount > 0) { | |||
|
171 | int maxWidth = vratio * leftCount; | |||
|
172 | if (left.width() > maxWidth) { | |||
|
173 | leftSqueezeRatio = maxWidth / left.width(); | |||
|
174 | left.setWidth(maxWidth); | |||
|
175 | } | |||
|
176 | } | |||
|
177 | if (rightCount > 0) { | |||
|
178 | int maxWidth = vratio * rightCount; | |||
|
179 | if (right.width() > maxWidth) { | |||
|
180 | rightSqueezeRatio = maxWidth / right.width(); | |||
|
181 | right.setWidth(maxWidth); | |||
|
182 | } | |||
|
183 | } | |||
|
184 | ||||
|
185 | int totalHorizontalAxes = topCount + bottomCount; | |||
|
186 | qreal topSqueezeRatio = 1.0; | |||
|
187 | qreal bottomSqueezeRatio = 1.0; | |||
163 |
qreal hratio = 0 |
|
188 | qreal hratio = 0; | |
164 | if(horizontal>0) |
|
|||
165 | hratio = (golden_ratio*geometry.width())/horizontal; |
|
|||
166 |
|
189 | |||
167 | if(leftCount>0) |
|
190 | if (totalHorizontalAxes > 0) | |
168 | left.setWidth(qMin(left.width(),hratio*leftCount)); |
|
191 | hratio = (maxAxisPortion * geometry.height()) / totalHorizontalAxes; | |
169 | if(rightCount>0) |
|
192 | ||
170 | right.setWidth(qMin(right.width(),hratio*rightCount)); |
|
193 | if (topCount > 0) { | |
|
194 | int maxHeight = hratio * topCount; | |||
|
195 | if (top.height() > maxHeight) { | |||
|
196 | topSqueezeRatio = maxHeight / top.height(); | |||
|
197 | top.setHeight(maxHeight); | |||
|
198 | } | |||
|
199 | } | |||
|
200 | if (bottomCount > 0) { | |||
|
201 | int maxHeight = hratio * bottomCount; | |||
|
202 | if (bottom.height() > maxHeight) { | |||
|
203 | bottomSqueezeRatio = maxHeight / bottom.height(); | |||
|
204 | bottom.setHeight(maxHeight); | |||
|
205 | } | |||
|
206 | } | |||
171 |
|
207 | |||
172 | qreal minHeight = qMax(minLeft.height(),minRight.height()) + 1; |
|
208 | qreal minHeight = qMax(minLeft.height(),minRight.height()) + 1; | |
173 | qreal minWidth = qMax(minTop.width(),minBottom.width()) + 1; |
|
209 | qreal minWidth = qMax(minTop.width(),minBottom.width()) + 1; | |
@@ -191,24 +227,35 QRectF ChartLayout::calculateAxisGeometry(const QRectF &geometry, const QList<Ch | |||||
191 |
|
227 | |||
192 | switch(axis->alignment()){ |
|
228 | switch(axis->alignment()){ | |
193 | case Qt::AlignLeft:{ |
|
229 | case Qt::AlignLeft:{ | |
194 |
qreal width = |
|
230 | qreal width = size.width(); | |
|
231 | if (leftSqueezeRatio < 1.0) | |||
|
232 | width *= leftSqueezeRatio; | |||
195 | leftOffset+=width; |
|
233 | leftOffset+=width; | |
196 | axis->setGeometry(QRect(chartRect.left()-leftOffset, geometry.top(),width, geometry.bottom()),chartRect); |
|
234 | axis->setGeometry(QRect(chartRect.left()-leftOffset, geometry.top(),width, geometry.bottom()),chartRect); | |
197 | break; |
|
235 | break; | |
198 | } |
|
236 | } | |
199 | case Qt::AlignRight:{ |
|
237 | case Qt::AlignRight:{ | |
200 |
qreal width = |
|
238 | qreal width = size.width(); | |
|
239 | if (rightSqueezeRatio < 1.0) | |||
|
240 | width *= rightSqueezeRatio; | |||
201 | axis->setGeometry(QRect(chartRect.right()+rightOffset,geometry.top(),width,geometry.bottom()),chartRect); |
|
241 | axis->setGeometry(QRect(chartRect.right()+rightOffset,geometry.top(),width,geometry.bottom()),chartRect); | |
202 | rightOffset+=width; |
|
242 | rightOffset+=width; | |
203 | break; |
|
243 | break; | |
204 | } |
|
244 | } | |
205 | case Qt::AlignTop: |
|
245 | case Qt::AlignTop: { | |
206 | axis->setGeometry(QRect(geometry.left(), chartRect.top() - topOffset - size.height(), geometry.width(), size.height()), chartRect); |
|
246 | qreal height = size.height(); | |
207 | topOffset += size.height(); |
|
247 | if (topSqueezeRatio < 1.0) | |
|
248 | height *= topSqueezeRatio; | |||
|
249 | axis->setGeometry(QRect(geometry.left(), chartRect.top() - topOffset - height, geometry.width(), height), chartRect); | |||
|
250 | topOffset += height; | |||
208 | break; |
|
251 | break; | |
|
252 | } | |||
209 | case Qt::AlignBottom: |
|
253 | case Qt::AlignBottom: | |
210 | axis->setGeometry(QRect(geometry.left(), chartRect.bottom() + bottomOffset, geometry.width(), size.height()), chartRect); |
|
254 | qreal height = size.height(); | |
211 | bottomOffset += size.height(); |
|
255 | if (bottomSqueezeRatio < 1.0) | |
|
256 | height *= bottomSqueezeRatio; | |||
|
257 | axis->setGeometry(QRect(geometry.left(), chartRect.bottom() + bottomOffset, geometry.width(), height), chartRect); | |||
|
258 | bottomOffset += height; | |||
212 | break; |
|
259 | break; | |
213 | } |
|
260 | } | |
214 | } |
|
261 | } | |
@@ -270,13 +317,13 QRectF ChartLayout::calculateLegendGeometry(const QRectF &geometry, QLegend *leg | |||||
270 | break; |
|
317 | break; | |
271 | } |
|
318 | } | |
272 | case Qt::AlignLeft: { |
|
319 | case Qt::AlignLeft: { | |
273 |
qreal width = qMin(size.width(), geometry.width() * |
|
320 | qreal width = qMin(size.width(), geometry.width() * maxAxisPortion); | |
274 | legendRect = QRectF(geometry.topLeft(), QSizeF(width, geometry.height())); |
|
321 | legendRect = QRectF(geometry.topLeft(), QSizeF(width, geometry.height())); | |
275 | result = geometry.adjusted(width, 0, 0, 0); |
|
322 | result = geometry.adjusted(width, 0, 0, 0); | |
276 | break; |
|
323 | break; | |
277 | } |
|
324 | } | |
278 | case Qt::AlignRight: { |
|
325 | case Qt::AlignRight: { | |
279 |
qreal width = qMin(size.width(), geometry.width() * |
|
326 | qreal width = qMin(size.width(), geometry.width() * maxAxisPortion); | |
280 | legendRect = QRectF(QPointF(geometry.right() - width, geometry.top()), QSizeF(width, geometry.height())); |
|
327 | legendRect = QRectF(QPointF(geometry.right() - width, geometry.top()), QSizeF(width, geometry.height())); | |
281 | result = geometry.adjusted(0, 0, -width, 0); |
|
328 | result = geometry.adjusted(0, 0, -width, 0); | |
282 | break; |
|
329 | break; |
General Comments 0
You need to be logged in to leave comments.
Login now