Skip to content

Commit 0587a59

Browse files
committedSep 30, 2015
Only save effect element if it is non-default
(decreases file size of qgs project files)
1 parent 29ac48e commit 0587a59

13 files changed

+88
-9
lines changed
 

‎python/core/effects/qgspainteffectregistry.sip

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,18 @@ class QgsPaintEffectRegistry
106106
* effects. All effects except the standard draw source effect are disabled,
107107
* but are included so that they can be easily drawn just by enabling the effect.
108108
* @returns default effects stack
109+
* @see isDefaultStack()
109110
*/
110111
static QgsPaintEffect* defaultStack() /Factory/;
111112

113+
/** Tests whether a paint effect matches the default effects stack.
114+
* @param effect paint effect to test
115+
* @returns true if effect is default stack
116+
* @note added in QGIS 2.12
117+
* @see defaultStack()
118+
*/
119+
static bool isDefaultStack( QgsPaintEffect* effect );
120+
112121
protected:
113122
QgsPaintEffectRegistry();
114123
~QgsPaintEffectRegistry();

‎src/core/effects/qgspainteffectregistry.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ QStringList QgsPaintEffectRegistry::effects() const
122122

123123
QgsPaintEffect* QgsPaintEffectRegistry::defaultStack()
124124
{
125+
//NOTE - also remember to update isDefaultStack below if making changes to this list
125126
QgsEffectStack* stack = new QgsEffectStack();
126127
QgsDropShadowEffect* dropShadow = new QgsDropShadowEffect();
127128
dropShadow->setEnabled( false );
@@ -138,3 +139,34 @@ QgsPaintEffect* QgsPaintEffectRegistry::defaultStack()
138139
stack->appendEffect( innerGlow );
139140
return stack;
140141
}
142+
143+
bool QgsPaintEffectRegistry::isDefaultStack( QgsPaintEffect* effect )
144+
{
145+
QgsEffectStack* effectStack = dynamic_cast< QgsEffectStack* >( effect );
146+
if ( !effectStack )
147+
return false;
148+
149+
if ( effectStack->count() != 5 )
150+
return false;
151+
152+
for ( int i = 0; i < 5; ++i )
153+
{
154+
//only the third effect should be enabled
155+
if ( effectStack->effect( i )->enabled() != ( i == 2 ) )
156+
return false;
157+
}
158+
159+
if ( !dynamic_cast< QgsDropShadowEffect* >( effectStack->effect( 0 ) ) )
160+
return false;
161+
if ( !dynamic_cast< QgsOuterGlowEffect* >( effectStack->effect( 1 ) ) )
162+
return false;
163+
if ( !dynamic_cast< QgsDrawSourceEffect* >( effectStack->effect( 2 ) ) )
164+
return false;
165+
if ( !dynamic_cast< QgsInnerShadowEffect* >( effectStack->effect( 3 ) ) )
166+
return false;
167+
if ( !dynamic_cast< QgsInnerGlowEffect* >( effectStack->effect( 4 ) ) )
168+
return false;
169+
170+
//we don't go as far as to check the individual effect's properties
171+
return true;
172+
}

‎src/core/effects/qgspainteffectregistry.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,18 @@ class CORE_EXPORT QgsPaintEffectRegistry
193193
* effects. All effects except the standard draw source effect are disabled,
194194
* but are included so that they can be easily drawn just by enabling the effect.
195195
* @returns default effects stack
196+
* @see isDefaultStack()
196197
*/
197198
static QgsPaintEffect* defaultStack();
198199

200+
/** Tests whether a paint effect matches the default effects stack.
201+
* @param effect paint effect to test
202+
* @returns true if effect is default stack
203+
* @note added in QGIS 2.12
204+
* @see defaultStack()
205+
*/
206+
static bool isDefaultStack( QgsPaintEffect* effect );
207+
199208
protected:
200209
QgsPaintEffectRegistry();
201210
~QgsPaintEffectRegistry();

‎src/core/symbology-ng/qgscategorizedsymbolrendererv2.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "qgspointdisplacementrenderer.h"
2323
#include "qgsinvertedpolygonrenderer.h"
2424
#include "qgspainteffect.h"
25+
#include "qgspainteffectregistry.h"
2526
#include "qgsscaleexpression.h"
2627
#include "qgsdatadefined.h"
2728

@@ -686,7 +687,7 @@ QDomElement QgsCategorizedSymbolRendererV2::save( QDomDocument& doc )
686687
sizeScaleElem.setAttribute( "scalemethod", QgsSymbolLayerV2Utils::encodeScaleMethod( mScaleMethod ) );
687688
rendererElem.appendChild( sizeScaleElem );
688689

689-
if ( mPaintEffect )
690+
if ( mPaintEffect && !QgsPaintEffectRegistry::isDefaultStack( mPaintEffect ) )
690691
mPaintEffect->saveProperties( doc, rendererElem );
691692

692693
return rendererElem;

‎src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "qgspointdisplacementrenderer.h"
2222
#include "qgsinvertedpolygonrenderer.h"
2323
#include "qgspainteffect.h"
24+
#include "qgspainteffectregistry.h"
2425
#include "qgsscaleexpression.h"
2526
#include "qgsdatadefined.h"
2627

@@ -1156,7 +1157,7 @@ QDomElement QgsGraduatedSymbolRendererV2::save( QDomDocument& doc )
11561157
mLabelFormat.saveToDomElement( labelFormatElem );
11571158
rendererElem.appendChild( labelFormatElem );
11581159

1159-
if ( mPaintEffect )
1160+
if ( mPaintEffect && !QgsPaintEffectRegistry::isDefaultStack( mPaintEffect ) )
11601161
mPaintEffect->saveProperties( doc, rendererElem );
11611162

11621163
return rendererElem;

‎src/core/symbology-ng/qgsheatmaprenderer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "qgsvectorcolorrampv2.h"
2727
#include "qgsrendercontext.h"
2828
#include "qgspainteffect.h"
29+
#include "qgspainteffectregistry.h"
2930

3031
#include <QDomDocument>
3132
#include <QDomElement>
@@ -361,7 +362,7 @@ QDomElement QgsHeatmapRenderer::save( QDomDocument& doc )
361362
}
362363
rendererElem.setAttribute( "invert_ramp", QString::number( mInvertRamp ) );
363364

364-
if ( mPaintEffect )
365+
if ( mPaintEffect && !QgsPaintEffectRegistry::isDefaultStack( mPaintEffect ) )
365366
mPaintEffect->saveProperties( doc, rendererElem );
366367

367368
return rendererElem;

‎src/core/symbology-ng/qgsinvertedpolygonrenderer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "qgssymbollayerv2.h"
2525
#include "qgsogcutils.h"
2626
#include "qgspainteffect.h"
27+
#include "qgspainteffectregistry.h"
2728

2829
#include <QDomDocument>
2930
#include <QDomElement>
@@ -375,7 +376,7 @@ QDomElement QgsInvertedPolygonRenderer::save( QDomDocument& doc )
375376
rendererElem.appendChild( embeddedRendererElem );
376377
}
377378

378-
if ( mPaintEffect )
379+
if ( mPaintEffect && !QgsPaintEffectRegistry::isDefaultStack( mPaintEffect ) )
379380
mPaintEffect->saveProperties( doc, rendererElem );
380381

381382
return rendererElem;

‎src/core/symbology-ng/qgspointdisplacementrenderer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "qgsvectorlayer.h"
2525
#include "qgssinglesymbolrendererv2.h"
2626
#include "qgspainteffect.h"
27+
#include "qgspainteffectregistry.h"
2728
#include "qgsfontutils.h"
2829
#include "qgsmultipointv2.h"
2930
#include "qgspointv2.h"
@@ -412,7 +413,7 @@ QDomElement QgsPointDisplacementRenderer::save( QDomDocument& doc )
412413
rendererElement.appendChild( centerSymbolElem );
413414
}
414415

415-
if ( mPaintEffect )
416+
if ( mPaintEffect && !QgsPaintEffectRegistry::isDefaultStack( mPaintEffect ) )
416417
mPaintEffect->saveProperties( doc, rendererElement );
417418

418419
return rendererElement;

‎src/core/symbology-ng/qgsrendererv2.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ QDomElement QgsFeatureRendererV2::save( QDomDocument& doc )
523523
QDomElement rendererElem = doc.createElement( RENDERER_TAG_NAME );
524524
rendererElem.setAttribute( "forceraster", ( mForceRaster ? "1" : "0" ) );
525525

526-
if ( mPaintEffect )
526+
if ( mPaintEffect && !QgsPaintEffectRegistry::isDefaultStack( mPaintEffect ) )
527527
mPaintEffect->saveProperties( doc, rendererElem );
528528

529529
return rendererElem;

‎src/core/symbology-ng/qgsrulebasedrendererv2.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "qgspointdisplacementrenderer.h"
2626
#include "qgsinvertedpolygonrenderer.h"
2727
#include "qgspainteffect.h"
28+
#include "qgspainteffectregistry.h"
2829
#include "qgsdatadefined.h"
2930

3031
#include <QSet>
@@ -947,7 +948,7 @@ QDomElement QgsRuleBasedRendererV2::save( QDomDocument& doc )
947948
QDomElement symbolsElem = QgsSymbolLayerV2Utils::saveSymbols( symbols, "symbols", doc );
948949
rendererElem.appendChild( symbolsElem );
949950

950-
if ( mPaintEffect )
951+
if ( mPaintEffect && !QgsPaintEffectRegistry::isDefaultStack( mPaintEffect ) )
951952
mPaintEffect->saveProperties( doc, rendererElem );
952953

953954
return rendererElem;

‎src/core/symbology-ng/qgssinglesymbolrendererv2.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "qgspointdisplacementrenderer.h"
2727
#include "qgsinvertedpolygonrenderer.h"
2828
#include "qgspainteffect.h"
29+
#include "qgspainteffectregistry.h"
2930
#include "qgsscaleexpression.h"
3031
#include "qgsdatadefined.h"
3132

@@ -377,7 +378,7 @@ QDomElement QgsSingleSymbolRendererV2::save( QDomDocument& doc )
377378
sizeScaleElem.setAttribute( "scalemethod", QgsSymbolLayerV2Utils::encodeScaleMethod( mScaleMethod ) );
378379
rendererElem.appendChild( sizeScaleElem );
379380

380-
if ( mPaintEffect )
381+
if ( mPaintEffect && !QgsPaintEffectRegistry::isDefaultStack( mPaintEffect ) )
381382
mPaintEffect->saveProperties( doc, rendererElem );
382383

383384
return rendererElem;

‎src/core/symbology-ng/qgssymbollayerv2utils.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1019,7 +1019,8 @@ QDomElement QgsSymbolLayerV2Utils::saveSymbol( QString name, QgsSymbolV2* symbol
10191019
layerEl.setAttribute( "locked", layer->isLocked() );
10201020
layerEl.setAttribute( "pass", layer->renderingPass() );
10211021
saveProperties( layer->properties(), doc, layerEl );
1022-
layer->paintEffect()->saveProperties( doc, layerEl );
1022+
if ( !QgsPaintEffectRegistry::isDefaultStack( layer->paintEffect() ) )
1023+
layer->paintEffect()->saveProperties( doc, layerEl );
10231024

10241025
if ( layer->subSymbol() != NULL )
10251026
{

‎tests/src/core/testqgspainteffectregistry.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "qgspainteffectregistry.h"
1919
#include "qgspainteffect.h"
20+
#include "qgseffectstack.h"
2021
#include <QObject>
2122
#include <QtTest/QtTest>
2223

@@ -50,6 +51,7 @@ class TestQgsPaintEffectRegistry : public QObject
5051
void addEffect(); // check adding an effect to an empty registry
5152
void fetchEffects(); //check fetching effects
5253
void createEffect(); //check creating effect
54+
void defaultStack(); //check creating/testing default stack
5355

5456
private:
5557

@@ -152,5 +154,24 @@ void TestQgsPaintEffectRegistry::createEffect()
152154
QVERIFY( !effect );
153155
}
154156

157+
void TestQgsPaintEffectRegistry::defaultStack()
158+
{
159+
QgsPaintEffectRegistry* registry = QgsPaintEffectRegistry::instance();
160+
QgsEffectStack* effect = static_cast<QgsEffectStack*>( registry->defaultStack() );
161+
QVERIFY( registry->isDefaultStack( effect ) );
162+
effect->effect( 1 )->setEnabled( true );
163+
QVERIFY( !registry->isDefaultStack( effect ) );
164+
effect->effect( 1 )->setEnabled( false );
165+
effect->effect( 2 )->setEnabled( false ); //third effect should be enabled by default
166+
QVERIFY( !registry->isDefaultStack( effect ) );
167+
effect->effect( 2 )->setEnabled( true );
168+
effect->appendEffect( new QgsEffectStack() );
169+
QVERIFY( !registry->isDefaultStack( effect ) );
170+
delete effect;
171+
QgsPaintEffect* effect2 = new DummyPaintEffect();
172+
QVERIFY( !registry->isDefaultStack( effect2 ) );
173+
delete effect2;
174+
}
175+
155176
QTEST_MAIN( TestQgsPaintEffectRegistry )
156177
#include "testqgspainteffectregistry.moc"

0 commit comments

Comments
 (0)
Please sign in to comment.