Changeset View
Changeset View
Standalone View
Standalone View
src/KChart/KChartChart.cpp
Show First 20 Lines • Show All 1338 Lines • ▼ Show 20 Line(s) | 1336 | { | |||
---|---|---|---|---|---|
1339 | d->reapplyInternalLayouts(); | 1339 | d->reapplyInternalLayouts(); | ||
1340 | } | 1340 | } | ||
1341 | 1341 | | |||
1342 | int Chart::globalLeadingBottom() const | 1342 | int Chart::globalLeadingBottom() const | ||
1343 | { | 1343 | { | ||
1344 | return d->globalLeadingBottom; | 1344 | return d->globalLeadingBottom; | ||
1345 | } | 1345 | } | ||
1346 | 1346 | | |||
1347 | void Chart::paint( QPainter* painter, const QRect& target ) | 1347 | void Chart::paint( QPainter* painter, const QRect& rect ) | ||
1348 | { | 1348 | { | ||
1349 | if ( target.isEmpty() || !painter ) { | 1349 | if ( rect.isEmpty() || !painter ) { | ||
1350 | return; | 1350 | return; | ||
1351 | } | 1351 | } | ||
1352 | 1352 | | |||
1353 | QPaintDevice* prevDevice = GlobalMeasureScaling::paintDevice(); | 1353 | QPaintDevice* prevDevice = GlobalMeasureScaling::paintDevice(); | ||
1354 | GlobalMeasureScaling::setPaintDevice( painter->device() ); | 1354 | GlobalMeasureScaling::setPaintDevice( painter->device() ); | ||
1355 | int prevScaleFactor = PrintingParameters::scaleFactor(); | ||||
1355 | 1356 | | |||
1356 | // Output on a widget | | |||
1357 | if ( dynamic_cast< QWidget* >( painter->device() ) != nullptr ) { | | |||
1358 | GlobalMeasureScaling::setFactors( qreal( target.width() ) / qreal( geometry().size().width() ), | | |||
1359 | qreal( target.height() ) / qreal( geometry().size().height() ) ); | | |||
1360 | } else { | | |||
1361 | // Output onto a QPixmap | 1357 | // Output onto a QPixmap | ||
1362 | PrintingParameters::setScaleFactor( qreal( painter->device()->logicalDpiX() ) / qreal( logicalDpiX() ) ); | 1358 | PrintingParameters::setScaleFactor( qreal( painter->device()->logicalDpiX() ) / qreal( logicalDpiX() ) ); | ||
1363 | | ||||
1364 | const qreal resX = qreal( logicalDpiX() ) / qreal( painter->device()->logicalDpiX() ); | | |||
1365 | const qreal resY = qreal( logicalDpiY() ) / qreal( painter->device()->logicalDpiY() ); | | |||
1366 | | ||||
1367 | GlobalMeasureScaling::setFactors( qreal( target.width() ) / qreal( geometry().size().width() ) * resX, | | |||
1368 | qreal( target.height() ) / qreal( geometry().size().height() ) * resY ); | | |||
1369 | } | 1359 | } | ||
1370 | 1360 | | |||
1371 | const QPoint translation = target.topLeft(); | 1361 | const QRect oldGeometry( geometry() ); | ||
1372 | painter->translate( translation ); | 1362 | if ( oldGeometry != rect ) | ||
1373 | 1363 | setGeometry( rect ); | |||
1374 | // the following layout logic has the disadvantage that repeatedly calling this method can | 1364 | painter->translate( rect.left(), rect.top() ); | ||
1375 | // cause a relayout every time, but since this method's main use seems to be printing, the | | |||
1376 | // gratuitous relayouts shouldn't be much of a performance problem. | | |||
1377 | const bool differentSize = target.size() != size(); | | |||
1378 | QRect oldGeometry; | | |||
1379 | if ( differentSize ) { | | |||
1380 | oldGeometry = geometry(); | | |||
1381 | d->isPlanesLayoutDirty = true; | | |||
1382 | d->isFloatingLegendsLayoutDirty = true; | | |||
1383 | invalidateLayoutTree( d->dataAndLegendLayout ); | | |||
1384 | d->dataAndLegendLayout->setGeometry( QRect( QPoint(), target.size() ) ); | | |||
1385 | } | | |||
1386 | | ||||
1387 | d->overrideSize = target.size(); | | |||
1388 | d->paintAll( painter ); | 1365 | d->paintAll( painter ); | ||
1389 | d->overrideSize = QSize(); | | |||
1390 | | ||||
1391 | if ( differentSize ) { | | |||
1392 | invalidateLayoutTree( d->dataAndLegendLayout ); | | |||
1393 | d->dataAndLegendLayout->setGeometry( oldGeometry ); | | |||
1394 | d->isPlanesLayoutDirty = true; | | |||
1395 | d->isFloatingLegendsLayoutDirty = true; | | |||
1396 | } | | |||
1397 | 1366 | | |||
1398 | // for debugging | 1367 | // for debugging | ||
1399 | // painter->setPen( QPen( Qt::blue, 8 ) ); | 1368 | // painter->setPen( QPen( Qt::blue, 8 ) ); | ||
1400 | // painter->drawRect( target ); | 1369 | // painter->drawRect( rect ); | ||
1401 | 1370 | | |||
1402 | painter->translate( -translation.x(), -translation.y() ); | 1371 | painter->translate( -rect.left(), -rect.top() ); | ||
1372 | if ( oldGeometry != rect ) | ||||
1373 | setGeometry( oldGeometry ); | ||||
1403 | 1374 | | |||
1404 | GlobalMeasureScaling::instance()->resetFactors(); | 1375 | PrintingParameters::setScaleFactor( prevScaleFactor ); | ||
1405 | PrintingParameters::resetScaleFactor(); | | |||
1406 | GlobalMeasureScaling::setPaintDevice( prevDevice ); | 1376 | GlobalMeasureScaling::setPaintDevice( prevDevice ); | ||
1407 | } | 1377 | } | ||
1408 | 1378 | | |||
1409 | void Chart::resizeEvent ( QResizeEvent* event ) | 1379 | void Chart::resizeEvent ( QResizeEvent* event ) | ||
1410 | { | 1380 | { | ||
1411 | d->isPlanesLayoutDirty = true; | 1381 | d->isPlanesLayoutDirty = true; | ||
1412 | d->isFloatingLegendsLayoutDirty = true; | 1382 | d->isFloatingLegendsLayoutDirty = true; | ||
1413 | QWidget::resizeEvent( event ); | 1383 | QWidget::resizeEvent( event ); | ||
▲ Show 20 Lines • Show All 392 Lines • Show Last 20 Lines |