[QGIS Commit] r8261 - in branches/rendercontext-branch/src: app
app/composer core gui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Sat Mar 22 06:26:00 EDT 2008
Author: mhugent
Date: 2008-03-22 06:25:59 -0400 (Sat, 22 Mar 2008)
New Revision: 8261
Modified:
branches/rendercontext-branch/src/app/composer/qgscomposermap.cpp
branches/rendercontext-branch/src/app/qgisapp.cpp
branches/rendercontext-branch/src/core/qgsmaprender.cpp
branches/rendercontext-branch/src/core/qgsvectorlayer.cpp
branches/rendercontext-branch/src/core/qgsvectorlayer.h
branches/rendercontext-branch/src/gui/qgsmapcanvas.cpp
Log:
Added possibility to stop rendering progress with esc-key or the render checkbox
Modified: branches/rendercontext-branch/src/app/composer/qgscomposermap.cpp
===================================================================
--- branches/rendercontext-branch/src/app/composer/qgscomposermap.cpp 2008-03-22 06:54:29 UTC (rev 8260)
+++ branches/rendercontext-branch/src/app/composer/qgscomposermap.cpp 2008-03-22 10:25:59 UTC (rev 8261)
@@ -158,6 +158,8 @@
double widthScale = mWidthScale;
double symbolScale = mSymbolScale;
+ theRenderContext.setScaleFactor( (widthScale + symbolScale) / 2);
+
//TODO: attempt to scale cache lines and point symbols to be larger as we zoom in
/* if(creating cache pixmap)
{
@@ -165,18 +167,18 @@
symbolScale *= (cachePixmap.width / map.rect.width);
}
*/
- QgsRect r1, r2;
- r1 = extent;
- // TODO: revisit later and make this QgsMapRender-aware [MD]
- // bool split = layer->projectExtent(r1, r2);
- bool split = false;
+ //QgsRect r1, r2;
+ //r1 = extent;
+ //bool split = layer->projectExtent(r1, r2);
- vector->draw( painter, r1, transform, ct, FALSE, widthScale, symbolScale);
+ //todo: implement with QgsMapRender
+ vector->draw(theRenderContext);
- if ( split )
- {
- vector->draw( painter, r2, transform, ct, FALSE, widthScale, symbolScale);
- }
+ //if ( split )
+ //{
+ //theRenderContext.setExtent(r2);
+ //vector->draw(theRenderContext);
+ //}
} else {
// raster
if ( plotStyle() == QgsComposition::Print || plotStyle() == QgsComposition::Postscript ) {
@@ -193,7 +195,8 @@
painter->save();
painter->scale( 1./multip, 1./multip);
layer->draw(theRenderContext);
-
+
+ theRenderContext.setMapToPixel(*transform);
painter->restore();
}
else
Modified: branches/rendercontext-branch/src/app/qgisapp.cpp
===================================================================
--- branches/rendercontext-branch/src/app/qgisapp.cpp 2008-03-22 06:54:29 UTC (rev 8260)
+++ branches/rendercontext-branch/src/app/qgisapp.cpp 2008-03-22 10:25:59 UTC (rev 8261)
@@ -5313,9 +5313,27 @@
// commented out for now. [gsherman]
// std::cout << e->text().toLocal8Bit().data() << " (keypress recevied)" << std::endl;
emit keyPressed (e);
+
+ //cancel rendering progress with esc key
+ if(e->key() == Qt::Key_Escape)
+ {
+ if(mMapCanvas)
+ {
+ QgsMapRender* theMapRender = mMapCanvas->mapRender();
+ if(theMapRender)
+ {
+ QgsRenderContext* theRenderContext = theMapRender->renderContext();
+ if(theRenderContext)
+ {
+ theRenderContext->setRenderingStopped(true);
+ }
+ }
+ }
+ }
+
e->ignore();
-
}
+
// Debug hook - used to output diagnostic messages when evoked (usually from the menu)
/* Temporarily disabled...
void QgisApp::debugHook()
Modified: branches/rendercontext-branch/src/core/qgsmaprender.cpp
===================================================================
--- branches/rendercontext-branch/src/core/qgsmaprender.cpp 2008-03-22 06:54:29 UTC (rev 8260)
+++ branches/rendercontext-branch/src/core/qgsmaprender.cpp 2008-03-22 10:25:59 UTC (rev 8261)
@@ -226,6 +226,9 @@
mRenderContext.setDrawEditingInformation(!mOverview);
mRenderContext.setPainter(painter);
mRenderContext.setCoordTransform(0);
+ //this flag is only for stopping during the current rendering progress,
+ //so must be false at every new render operation
+ mRenderContext.setRenderingStopped(false);
// render all layers in the stack, starting at the base
QListIterator<QString> li(mLayerSet);
@@ -235,6 +238,11 @@
while (li.hasPrevious())
{
+ if(mRenderContext.renderingStopped())
+ {
+ break;
+ }
+
QString layerId = li.previous();
QgsDebugMsg("Rendering at layer item " + layerId);
@@ -320,6 +328,11 @@
li.toBack();
while (li.hasPrevious())
{
+ if(mRenderContext.renderingStopped())
+ {
+ break;
+ }
+
QString layerId = li.previous();
// TODO: emit drawingProgress((myRenderCounter++),zOrder.size());
Modified: branches/rendercontext-branch/src/core/qgsvectorlayer.cpp
===================================================================
--- branches/rendercontext-branch/src/core/qgsvectorlayer.cpp 2008-03-22 06:54:29 UTC (rev 8260)
+++ branches/rendercontext-branch/src/core/qgsvectorlayer.cpp 2008-03-22 10:25:59 UTC (rev 8261)
@@ -721,25 +721,6 @@
mUpdateThreshold = settings.readNumEntry("Map/updateThreshold", 0);
//draw ( p, viewExtent, theMapToPixelTransform, ct, drawingToEditingCanvas, 1., 1.);
- QPainter* thePainter = renderContext.painter();
- if(!thePainter)
- {
- return false;
- }
-
- draw(thePainter, renderContext.extent(), &(renderContext.mapToPixel()), renderContext.coordTransform(), \
- renderContext.drawEditingInformation(), renderContext.scaleFactor(), renderContext.scaleFactor());
- return TRUE; // Assume success always
-}
-
-void QgsVectorLayer::draw(QPainter * p,
- const QgsRect& viewExtent,
- const QgsMapToPixel * theMapToPixelTransform,
- const QgsCoordinateTransform* ct,
- bool drawingToEditingCanvas,
- double widthScale,
- double symbolScale)
-{
if (mRenderer)
{
// painter is active (begin has been called
@@ -757,26 +738,32 @@
/* Scale factor of the marker image*/
/* We set this to the symbolScale, and if it is NOT changed, */
/* we don't have to do another scaling here */
- double markerScaleFactor = symbolScale;
+ double markerScaleFactor = renderContext.scaleFactor();
if(mEditable)
{
// Destroy all cached geometries and clear the references to them
deleteCachedGeometries();
}
-
- mDataProvider->updateFeatureCount();
- int totalFeatures = mDataProvider->featureCount();
- int featureCount = 0;
- QgsFeature fet;
- QgsAttributeList attributes = mRenderer->classificationAttributes();
- mDataProvider->select(attributes, viewExtent);
+ mDataProvider->updateFeatureCount();
+ int totalFeatures = mDataProvider->featureCount();
+ int featureCount = 0;
+ QgsFeature fet;
+
+ QgsAttributeList attributes = mRenderer->classificationAttributes();
+ mDataProvider->select(attributes, renderContext.extent());
- try
+ try
{
while (mDataProvider->getNextFeature(fet))
{
+
+ if(renderContext.renderingStopped())
+ {
+ break;
+ }
+
// XXX Something in our draw event is triggering an additional draw event when resizing [TE 01/26/06]
// XXX Calling this will begin processing the next draw event causing image havoc and recursion crashes.
//qApp->processEvents(); //so we can trap for esc press
@@ -833,12 +820,12 @@
//QgsDebugMsg(QString("markerScale before renderFeature(): %1").arg(markerScaleFactor));
// markerScalerFactore reflects the wanted scaling of the marker
- mRenderer->renderFeature(p, fet, &marker, &markerScaleFactor, sel, widthScale );
+ mRenderer->renderFeature(renderContext.painter(), fet, &marker, &markerScaleFactor, sel, renderContext.scaleFactor());
// markerScalerFactore now reflects the actual scaling of the marker that the render performed.
//QgsDebugMsg(QString("markerScale after renderFeature(): %1").arg(markerScaleFactor));
- double scale = symbolScale / markerScaleFactor;
- drawFeature(p,fet,theMapToPixelTransform,ct, &marker, scale, drawingToEditingCanvas);
+ double scale = renderContext.scaleFactor() / markerScaleFactor;
+ drawFeature(renderContext.painter() , fet, &(renderContext.mapToPixel()), renderContext.coordTransform(), &marker, scale, renderContext.drawEditingInformation());
++featureCount;
}
@@ -852,12 +839,12 @@
bool sel = mSelectedFeatureIds.contains((*it).featureId());
QgsDebugMsg(QString("markerScale before renderFeature(): %1").arg(markerScaleFactor));
// markerScalerFactore reflects the wanted scaling of the marker
- mRenderer->renderFeature(p, *it, &marker, &markerScaleFactor,
- sel, widthScale);
+ mRenderer->renderFeature(renderContext.painter(), *it, &marker, &markerScaleFactor,
+ sel, renderContext.scaleFactor());
// markerScalerFactore now reflects the actual scaling of the marker that the render performed.
QgsDebugMsg(QString("markerScale after renderFeature(): %1").arg(markerScaleFactor));
- double scale = symbolScale / markerScaleFactor;
+ double scale = renderContext.scaleFactor() / markerScaleFactor;
if (mChangedGeometries.contains((*it).featureId()))
{
@@ -866,7 +853,7 @@
// give a deep copy of the geometry to mCachedGeometry because it will be erased at each redraw
mCachedGeometries.insert((*it).featureId(), QgsGeometry(*((*it).geometry())) );
- drawFeature(p,*it,theMapToPixelTransform,ct, &marker,scale, drawingToEditingCanvas);
+ drawFeature(renderContext.painter(), *it, &(renderContext.mapToPixel()), renderContext.coordTransform(), &marker, scale, renderContext.drawEditingInformation());
}
}
@@ -878,18 +865,16 @@
msg += cse.what();
QgsLogger::warning(msg);
}
- QgsDebugMsg("Total features processed is " + QString::number(featureCount));
- // XXX Something in our draw event is triggering an additional draw event when resizing [TE 01/26/06]
- // XXX Calling this will begin processing the next draw event causing image havoc and recursion crashes.
- //qApp->processEvents();
+
}
else
{
QgsLogger::warning("QgsRenderer is null in QgsVectorLayer::draw()");
}
+
+ return TRUE; // Assume success always
}
-
void QgsVectorLayer::deleteCachedGeometries()
{
// Destroy any cached geometries
Modified: branches/rendercontext-branch/src/core/qgsvectorlayer.h
===================================================================
--- branches/rendercontext-branch/src/core/qgsvectorlayer.h 2008-03-22 06:54:29 UTC (rev 8260)
+++ branches/rendercontext-branch/src/core/qgsvectorlayer.h 2008-03-22 10:25:59 UTC (rev 8261)
@@ -342,18 +342,6 @@
/** Draws the layer labels using coordinate transformation */
void drawLabels(QgsRenderContext& renderContext);
- /** \brief Draws the layer using coordinate transformation
- * \param widthScale line width scale
- * \param symbolScale symbol scale
- */
- void draw(QPainter * p,
- const QgsRect& viewExtent,
- const QgsMapToPixel * cXf,
- const QgsCoordinateTransform* ct,
- bool drawingToEditingCanvas,
- double widthScale,
- double symbolScale);
-
/** \brief Draws the layer labels using coordinate transformation
* \param scale size scale, applied to all values in pixels
*/
Modified: branches/rendercontext-branch/src/gui/qgsmapcanvas.cpp
===================================================================
--- branches/rendercontext-branch/src/gui/qgsmapcanvas.cpp 2008-03-22 06:54:29 UTC (rev 8260)
+++ branches/rendercontext-branch/src/gui/qgsmapcanvas.cpp 2008-03-22 10:25:59 UTC (rev 8261)
@@ -760,7 +760,19 @@
lastSize = e->size();
- if (isAlreadyIn || mDrawing) return;
+ if (isAlreadyIn || mDrawing)
+ {
+ //cancel current render progress
+ if(mMapRender)
+ {
+ QgsRenderContext* theRenderContext = mMapRender->renderContext();
+ if(theRenderContext)
+ {
+ theRenderContext->setRenderingStopped(true);
+ }
+ }
+ return;
+ }
isAlreadyIn = true;
while (lastSize != QSize(-1,-1))
@@ -1014,6 +1026,15 @@
void QgsMapCanvas::setRenderFlag(bool theFlag)
{
mRenderFlag = theFlag;
+ if(mMapRender)
+ {
+ QgsRenderContext* rc = mMapRender->renderContext();
+ if(rc)
+ {
+ rc->setRenderingStopped(!theFlag);
+ }
+ }
+
if(mRenderFlag)
{
refresh();
More information about the QGIS-commit
mailing list