Skip to content

Commit 41e47e2

Browse files
author
mhugent
committed
Fix for paint event problems in case of multiple composer maps
git-svn-id: http://svn.osgeo.org/qgis/trunk@14761 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 72b2ed4 commit 41e47e2

File tree

3 files changed

+48
-18
lines changed

3 files changed

+48
-18
lines changed

src/app/composer/qgscomposer.cpp

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "qgscomposerattributetable.h"
3939
#include "qgscomposertablewidget.h"
4040
#include "qgsexception.h"
41+
#include "qgslogger.h"
4142
#include "qgsproject.h"
4243
#include "qgsmapcanvas.h"
4344
#include "qgsmaprenderer.h"
@@ -46,26 +47,29 @@
4647
#include "qgscursors.h"
4748

4849
#include <QCloseEvent>
50+
#include <QCheckBox>
4951
#include <QDesktopWidget>
5052
#include <QFileDialog>
5153
#include <QFileInfo>
54+
#include <QIcon>
55+
#include <QImageWriter>
5256
#include <QMatrix>
5357
#include <QMenuBar>
5458
#include <QMessageBox>
5559
#include <QPageSetupDialog>
5660
#include <QPainter>
57-
61+
#include <QPixmap>
5862
#include <QPrintDialog>
5963
#include <QSettings>
60-
#include <QIcon>
61-
#include <QPixmap>
64+
#include <QSizeGrip>
6265
#include <QSvgGenerator>
6366
#include <QToolBar>
6467
#include <QToolButton>
65-
#include <QImageWriter>
66-
#include <QCheckBox>
67-
#include <QSizeGrip>
68-
#include "qgslogger.h"
68+
//#include <QUndoView>
69+
70+
71+
72+
6973

7074
QgsComposer::QgsComposer( QgisApp *qgis, const QString& title ): QMainWindow(), mTitle( title )
7175
{
@@ -212,6 +216,10 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title ): QMainWindow(),
212216

213217
mCompositionNameComboBox->insertItem( 0, tr( "Map 1" ) );
214218

219+
//undo widget
220+
/*QUndoView* undoWidget = new QUndoView( mComposition->undoStack(), this );
221+
mOptionsTabWidget->addTab( undoWidget, tr( "Command history" ) );*/
222+
215223
// Create size grip (needed by Mac OS X for QMainWindow if QStatusBar is not visible)
216224
mSizeGrip = new QSizeGrip( this );
217225
mSizeGrip->resize( mSizeGrip->sizeHint() );
@@ -507,7 +515,7 @@ void QgsComposer::on_mActionPrint_triggered()
507515

508516
void QgsComposer::print( QPrinter &printer )
509517
{
510-
if ( !mComposition )
518+
if ( !mComposition || !mView )
511519
return;
512520

513521
if ( containsWMSLayer() )
@@ -530,6 +538,7 @@ void QgsComposer::print( QPrinter &printer )
530538
QApplication::setOverrideCursor( Qt::BusyCursor );
531539

532540
bool printAsRaster = mComposition->printAsRaster();
541+
//mView->setScene( 0 );
533542

534543
if ( printAsRaster )
535544
{
@@ -545,8 +554,9 @@ void QgsComposer::print( QPrinter &printer )
545554
QPainter imagePainter( &image );
546555
QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
547556
QRectF targetArea( 0, 0, width, height );
557+
mView->setPaintingEnabled( false );
548558
mComposition->render( &imagePainter, targetArea, sourceArea );
549-
imagePainter.end();
559+
mView->setPaintingEnabled( true );
550560
p.drawImage( targetArea, image, targetArea );
551561
}
552562
else
@@ -574,7 +584,10 @@ void QgsComposer::print( QPrinter &printer )
574584
//better in case of custom page size, but only possible with Qt>=4.4.0
575585
QRectF paperRectMM = printer.pageRect( QPrinter::Millimeter );
576586
QRectF paperRectPixel = printer.pageRect( QPrinter::DevicePixel );
587+
588+
mView->setPaintingEnabled( false );
577589
mComposition->render( &p, paperRectPixel, paperRectMM );
590+
mView->setPaintingEnabled( true );
578591
}
579592

580593
mComposition->setPlotStyle( savedPlotStyle );
@@ -707,19 +720,18 @@ void QgsComposer::on_mActionExportAsImage_triggered()
707720
}
708721

709722
mComposition->setPlotStyle( QgsComposition::Print );
710-
mView->setScene( 0 );
711723
image.setDotsPerMeterX( mComposition->printResolution() / 25.4 * 1000 );
712724
image.setDotsPerMeterY( mComposition->printResolution() / 25.4 * 1000 );
713725
image.fill( 0 );
714726
QPainter p( &image );
715727
QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
716728
QRectF targetArea( 0, 0, width, height );
729+
mView->setPaintingEnabled( false );
717730
mComposition->render( &p, targetArea, sourceArea );
718731
p.end();
719-
720732
mComposition->setPlotStyle( QgsComposition::Preview );
733+
mView->setPaintingEnabled( true );
721734
image.save( myOutputFileNameQString, myFilterMap[myFilterString].toLocal8Bit().data() );
722-
mView->setScene( mComposition );
723735
}
724736

725737

@@ -779,8 +791,6 @@ void QgsComposer::on_mActionExportAsSVG_triggered()
779791
}
780792

781793
myQSettings.setValue( "/UI/lastSaveAsSvgFile", myOutputFileNameQString );
782-
783-
//mView->setScene(0);//don't redraw the scene on the display while we render
784794
mComposition->setPlotStyle( QgsComposition::Print );
785795

786796
QSvgGenerator generator;
@@ -799,12 +809,11 @@ void QgsComposer::on_mActionExportAsSVG_triggered()
799809

800810
QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
801811
QRectF targetArea( 0, 0, width, height );
812+
mView->setPaintingEnabled( false );
802813
mComposition->render( &p, targetArea, sourceArea );
803-
804814
p.end();
805-
806815
mComposition->setPlotStyle( QgsComposition::Preview );
807-
//mView->setScene(mComposition->canvas()); //now that we're done, set the view to show the scene again
816+
mView->setPaintingEnabled( true );
808817
}
809818

810819
void QgsComposer::on_mActionSelectMoveItem_triggered()

src/gui/qgscomposerview.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#include "qgscomposerattributetable.h"
3232

3333
QgsComposerView::QgsComposerView( QWidget* parent, const char* name, Qt::WFlags f ) :
34-
QGraphicsView( parent ), mShiftKeyPressed( false ), mRubberBandItem( 0 ), mRubberBandLineItem( 0 ), mMoveContentItem( 0 )
34+
QGraphicsView( parent ), mShiftKeyPressed( false ), mRubberBandItem( 0 ), mRubberBandLineItem( 0 ), mMoveContentItem( 0 ), mPaintingEnabled( true )
3535
{
3636
setResizeAnchor( QGraphicsView::AnchorViewCenter );
3737
setMouseTracking( true );
@@ -204,6 +204,7 @@ void QgsComposerView::mouseReleaseEvent( QMouseEvent* e )
204204

205205
double moveX = scenePoint.x() - mMoveContentStartPos.x();
206206
double moveY = scenePoint.y() - mMoveContentStartPos.y();
207+
207208
mMoveContentItem->moveContent( -moveX, -moveY );
208209
mMoveContentItem = 0;
209210
}
@@ -450,6 +451,19 @@ void QgsComposerView::wheelEvent( QWheelEvent* event )
450451
}
451452
}
452453

454+
void QgsComposerView::paintEvent( QPaintEvent* event )
455+
{
456+
if ( mPaintingEnabled )
457+
{
458+
QGraphicsView::paintEvent( event );
459+
event->accept();
460+
}
461+
else
462+
{
463+
event->ignore();
464+
}
465+
}
466+
453467
void QgsComposerView::setComposition( QgsComposition* c )
454468
{
455469
setScene( c );

src/gui/qgscomposerview.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ class GUI_EXPORT QgsComposerView: public QGraphicsView
9898
/**Returns the composer main window*/
9999
QMainWindow* composerWindow();
100100

101+
void setPaintingEnabled( bool enabled ) { mPaintingEnabled = enabled; }
102+
bool paintingEnabled() const { return mPaintingEnabled; }
103+
101104
protected:
102105
void mousePressEvent( QMouseEvent* );
103106
void mouseReleaseEvent( QMouseEvent* );
@@ -109,6 +112,8 @@ class GUI_EXPORT QgsComposerView: public QGraphicsView
109112

110113
void wheelEvent( QWheelEvent* event );
111114

115+
void paintEvent( QPaintEvent* event );
116+
112117
private:
113118
/**Status of shift key (used for multiple selection)*/
114119
bool mShiftKeyPressed;
@@ -125,6 +130,8 @@ class GUI_EXPORT QgsComposerView: public QGraphicsView
125130
/**Start of rubber band creation*/
126131
QPointF mRubberBandStartPos;
127132

133+
bool mPaintingEnabled;
134+
128135
public slots:
129136
/**For QgsComposerItemGroup to send its signals to QgsComposer (or other classes that keep track of input widgets)*/
130137
void sendItemRemovedSignal( QgsComposerItem* item );

0 commit comments

Comments
 (0)