1 /***************************************************************************
2 qgspainteffectwidget.cpp
3 ------------------------
4 begin : January 2015
5 copyright : (C) 2015 by Nyall Dawson
6 email : nyall dot dawson at gmail.com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16
17 #include "qgspainteffectwidget.h"
18 #include "qgslogger.h"
19 #include "qgspainteffect.h"
20 #include "qgsshadoweffect.h"
21 #include "qgsblureffect.h"
22 #include "qgsgloweffect.h"
23 #include "qgstransformeffect.h"
24 #include "qgscoloreffect.h"
25 #include "qgsstyle.h"
26 #include "qgscolorramp.h"
27 #include "qgscolorrampbutton.h"
28
29 //
30 // draw source
31 //
32
QgsDrawSourceWidget(QWidget * parent)33 QgsDrawSourceWidget::QgsDrawSourceWidget( QWidget *parent )
34 : QgsPaintEffectWidget( parent )
35
36 {
37 setupUi( this );
38 connect( mDrawModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsDrawSourceWidget::mDrawModeComboBox_currentIndexChanged );
39 connect( mBlendCmbBx, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsDrawSourceWidget::mBlendCmbBx_currentIndexChanged );
40 initGui();
41 }
42
43
setPaintEffect(QgsPaintEffect * effect)44 void QgsDrawSourceWidget::setPaintEffect( QgsPaintEffect *effect )
45 {
46 if ( !effect || effect->type() != QLatin1String( "drawSource" ) )
47 return;
48
49 mEffect = static_cast<QgsDrawSourceEffect *>( effect );
50 initGui();
51
52 connect( mOpacityWidget, &QgsOpacityWidget::opacityChanged, this, &QgsDrawSourceWidget::opacityChanged );
53 }
54
initGui()55 void QgsDrawSourceWidget::initGui()
56 {
57 if ( !mEffect )
58 {
59 return;
60 }
61
62 blockSignals( true );
63
64 mOpacityWidget->setOpacity( mEffect->opacity() );
65 mBlendCmbBx->setBlendMode( mEffect->blendMode() );
66 mDrawModeComboBox->setDrawMode( mEffect->drawMode() );
67
68 blockSignals( false );
69 }
70
blockSignals(const bool block)71 void QgsDrawSourceWidget::blockSignals( const bool block )
72 {
73 mOpacityWidget->blockSignals( block );
74 mBlendCmbBx->blockSignals( block );
75 mDrawModeComboBox->blockSignals( block );
76 }
77
opacityChanged(double value)78 void QgsDrawSourceWidget::opacityChanged( double value )
79 {
80 if ( !mEffect )
81 return;
82
83 mEffect->setOpacity( value );
84 emit changed();
85 }
86
mDrawModeComboBox_currentIndexChanged(int index)87 void QgsDrawSourceWidget::mDrawModeComboBox_currentIndexChanged( int index )
88 {
89 Q_UNUSED( index )
90
91 if ( !mEffect )
92 return;
93
94 mEffect->setDrawMode( mDrawModeComboBox->drawMode() );
95 emit changed();
96 }
97
mBlendCmbBx_currentIndexChanged(int index)98 void QgsDrawSourceWidget::mBlendCmbBx_currentIndexChanged( int index )
99 {
100 Q_UNUSED( index )
101
102 if ( !mEffect )
103 return;
104
105 mEffect->setBlendMode( mBlendCmbBx->blendMode() );
106 emit changed();
107 }
108
109
110 //
111 // blur
112 //
113
QgsBlurWidget(QWidget * parent)114 QgsBlurWidget::QgsBlurWidget( QWidget *parent )
115 : QgsPaintEffectWidget( parent )
116
117 {
118 setupUi( this );
119 connect( mBlurTypeCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsBlurWidget::mBlurTypeCombo_currentIndexChanged );
120 connect( mBlurStrengthSpnBx, static_cast< void ( QDoubleSpinBox::* )( double ) >( &QDoubleSpinBox::valueChanged ), this, &QgsBlurWidget::mBlurStrengthSpnBx_valueChanged );
121 connect( mBlurUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsBlurWidget::mBlurUnitWidget_changed );
122 connect( mDrawModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsBlurWidget::mDrawModeComboBox_currentIndexChanged );
123 connect( mBlendCmbBx, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsBlurWidget::mBlendCmbBx_currentIndexChanged );
124
125 mBlurTypeCombo->addItem( tr( "Stack Blur (fast, doesn't support high dpi)" ), QgsBlurEffect::StackBlur );
126 mBlurTypeCombo->addItem( tr( "Gaussian Blur (quality, supports high dpi)" ), QgsBlurEffect::GaussianBlur );
127
128 mBlurUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderMapUnits
129 << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
130
131 initGui();
132 connect( mOpacityWidget, &QgsOpacityWidget::opacityChanged, this, &QgsBlurWidget::opacityChanged );
133 }
134
135
setPaintEffect(QgsPaintEffect * effect)136 void QgsBlurWidget::setPaintEffect( QgsPaintEffect *effect )
137 {
138 if ( !effect || effect->type() != QLatin1String( "blur" ) )
139 return;
140
141 mEffect = static_cast<QgsBlurEffect *>( effect );
142 initGui();
143 }
144
initGui()145 void QgsBlurWidget::initGui()
146 {
147 if ( !mEffect )
148 {
149 return;
150 }
151
152 blockSignals( true );
153
154 mBlurTypeCombo->setCurrentIndex( mBlurTypeCombo->findData( mEffect->blurMethod() ) );
155 mBlurStrengthSpnBx->setValue( mEffect->blurLevel() );
156 mOpacityWidget->setOpacity( mEffect->opacity() );
157 mBlendCmbBx->setBlendMode( mEffect->blendMode() );
158 mDrawModeComboBox->setDrawMode( mEffect->drawMode() );
159
160 mBlurUnitWidget->setUnit( mEffect->blurUnit() );
161 mBlurUnitWidget->setMapUnitScale( mEffect->blurMapUnitScale() );
162
163 blockSignals( false );
164 }
165
blockSignals(const bool block)166 void QgsBlurWidget::blockSignals( const bool block )
167 {
168 mBlurTypeCombo->blockSignals( block );
169 mBlurStrengthSpnBx->blockSignals( block );
170 mOpacityWidget->blockSignals( block );
171 mBlendCmbBx->blockSignals( block );
172 mDrawModeComboBox->blockSignals( block );
173 }
174
mBlurTypeCombo_currentIndexChanged(int index)175 void QgsBlurWidget::mBlurTypeCombo_currentIndexChanged( int index )
176 {
177 if ( !mEffect )
178 return;
179
180 const QgsBlurEffect::BlurMethod method = ( QgsBlurEffect::BlurMethod ) mBlurTypeCombo->itemData( index ).toInt();
181 mEffect->setBlurMethod( method );
182
183 //also update max radius
184 switch ( method )
185 {
186 case QgsBlurEffect::StackBlur:
187 mBlurStrengthSpnBx->setMaximum( 16 );
188 break;
189 case QgsBlurEffect::GaussianBlur:
190 mBlurStrengthSpnBx->setMaximum( 200 );
191 break;
192 }
193
194 emit changed();
195 }
196
mBlurStrengthSpnBx_valueChanged(double value)197 void QgsBlurWidget::mBlurStrengthSpnBx_valueChanged( double value )
198 {
199 if ( !mEffect )
200 return;
201
202 mEffect->setBlurLevel( value );
203 emit changed();
204 }
205
mBlurUnitWidget_changed()206 void QgsBlurWidget::mBlurUnitWidget_changed()
207 {
208 if ( !mEffect )
209 {
210 return;
211 }
212
213 mEffect->setBlurUnit( mBlurUnitWidget->unit() );
214 mEffect->setBlurMapUnitScale( mBlurUnitWidget->getMapUnitScale() );
215 emit changed();
216 }
217
opacityChanged(double value)218 void QgsBlurWidget::opacityChanged( double value )
219 {
220 if ( !mEffect )
221 return;
222
223 mEffect->setOpacity( value );
224 emit changed();
225 }
226
mDrawModeComboBox_currentIndexChanged(int index)227 void QgsBlurWidget::mDrawModeComboBox_currentIndexChanged( int index )
228 {
229 Q_UNUSED( index )
230
231 if ( !mEffect )
232 return;
233
234 mEffect->setDrawMode( mDrawModeComboBox->drawMode() );
235 emit changed();
236 }
237
mBlendCmbBx_currentIndexChanged(int index)238 void QgsBlurWidget::mBlendCmbBx_currentIndexChanged( int index )
239 {
240 Q_UNUSED( index )
241
242 if ( !mEffect )
243 return;
244
245 mEffect->setBlendMode( mBlendCmbBx->blendMode() );
246 emit changed();
247 }
248
249
250 //
251 // Drop Shadow
252 //
253
QgsShadowEffectWidget(QWidget * parent)254 QgsShadowEffectWidget::QgsShadowEffectWidget( QWidget *parent )
255 : QgsPaintEffectWidget( parent )
256
257 {
258 setupUi( this );
259 connect( mShadowOffsetAngleSpnBx, static_cast< void ( QSpinBox::* )( int ) >( &QSpinBox::valueChanged ), this, &QgsShadowEffectWidget::mShadowOffsetAngleSpnBx_valueChanged );
260 connect( mShadowOffsetAngleDial, &QDial::valueChanged, this, &QgsShadowEffectWidget::mShadowOffsetAngleDial_valueChanged );
261 connect( mShadowOffsetSpnBx, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsShadowEffectWidget::mShadowOffsetSpnBx_valueChanged );
262 connect( mOffsetUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsShadowEffectWidget::mOffsetUnitWidget_changed );
263 connect( mShadowColorBtn, &QgsColorButton::colorChanged, this, &QgsShadowEffectWidget::mShadowColorBtn_colorChanged );
264 connect( mDrawModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsShadowEffectWidget::mDrawModeComboBox_currentIndexChanged );
265 connect( mShadowBlendCmbBx, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsShadowEffectWidget::mShadowBlendCmbBx_currentIndexChanged );
266 connect( mShadowRadiuSpnBx, static_cast< void ( QDoubleSpinBox::* )( double ) >( &QDoubleSpinBox::valueChanged ), this, &QgsShadowEffectWidget::mShadowRadiuSpnBx_valueChanged );
267 connect( mBlurUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsShadowEffectWidget::mBlurUnitWidget_changed );
268
269 mShadowColorBtn->setAllowOpacity( false );
270 mShadowColorBtn->setColorDialogTitle( tr( "Select Shadow Color" ) );
271 mShadowColorBtn->setContext( QStringLiteral( "symbology" ) );
272 mShadowOffsetAngleSpnBx->setClearValue( 0 );
273
274 mOffsetUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderMapUnits
275 << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
276 mBlurUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderMapUnits
277 << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
278
279 initGui();
280
281 connect( mOpacityWidget, &QgsOpacityWidget::opacityChanged, this, &QgsShadowEffectWidget::opacityChanged );
282 }
283
setPaintEffect(QgsPaintEffect * effect)284 void QgsShadowEffectWidget::setPaintEffect( QgsPaintEffect *effect )
285 {
286 if ( !effect || ( effect->type() != QLatin1String( "dropShadow" ) && effect->type() != QLatin1String( "innerShadow" ) ) )
287 return;
288
289 mEffect = static_cast<QgsShadowEffect *>( effect );
290 initGui();
291 }
292
initGui()293 void QgsShadowEffectWidget::initGui()
294 {
295 if ( !mEffect )
296 {
297 return;
298 }
299
300 blockSignals( true );
301
302 mShadowOffsetAngleSpnBx->setValue( mEffect->offsetAngle() );
303 mShadowOffsetAngleDial->setValue( mEffect->offsetAngle() );
304 mShadowOffsetSpnBx->setValue( mEffect->offsetDistance() );
305 mOffsetUnitWidget->setUnit( mEffect->offsetUnit() );
306 mOffsetUnitWidget->setMapUnitScale( mEffect->offsetMapUnitScale() );
307 mShadowRadiuSpnBx->setValue( mEffect->blurLevel() );
308 mBlurUnitWidget->setUnit( mEffect->blurUnit() );
309 mBlurUnitWidget->setMapUnitScale( mEffect->blurMapUnitScale() );
310 mOpacityWidget->setOpacity( mEffect->opacity() );
311 mShadowColorBtn->setColor( mEffect->color() );
312 mShadowBlendCmbBx->setBlendMode( mEffect->blendMode() );
313 mDrawModeComboBox->setDrawMode( mEffect->drawMode() );
314
315 blockSignals( false );
316 }
317
blockSignals(const bool block)318 void QgsShadowEffectWidget::blockSignals( const bool block )
319 {
320 mShadowOffsetAngleSpnBx->blockSignals( block );
321 mShadowOffsetAngleDial->blockSignals( block );
322 mShadowOffsetSpnBx->blockSignals( block );
323 mOffsetUnitWidget->blockSignals( block );
324 mShadowRadiuSpnBx->blockSignals( block );
325 mBlurUnitWidget->blockSignals( block );
326 mOpacityWidget->blockSignals( block );
327 mShadowColorBtn->blockSignals( block );
328 mShadowBlendCmbBx->blockSignals( block );
329 mDrawModeComboBox->blockSignals( block );
330 }
331
mShadowOffsetAngleSpnBx_valueChanged(int value)332 void QgsShadowEffectWidget::mShadowOffsetAngleSpnBx_valueChanged( int value )
333 {
334 mShadowOffsetAngleDial->blockSignals( true );
335 mShadowOffsetAngleDial->setValue( value );
336 mShadowOffsetAngleDial->blockSignals( false );
337
338 if ( !mEffect )
339 return;
340
341 mEffect->setOffsetAngle( value );
342 emit changed();
343 }
344
mShadowOffsetAngleDial_valueChanged(int value)345 void QgsShadowEffectWidget::mShadowOffsetAngleDial_valueChanged( int value )
346 {
347 mShadowOffsetAngleSpnBx->setValue( value );
348 }
349
mShadowOffsetSpnBx_valueChanged(double value)350 void QgsShadowEffectWidget::mShadowOffsetSpnBx_valueChanged( double value )
351 {
352 if ( !mEffect )
353 return;
354
355 mEffect->setOffsetDistance( value );
356 emit changed();
357 }
358
mOffsetUnitWidget_changed()359 void QgsShadowEffectWidget::mOffsetUnitWidget_changed()
360 {
361 if ( !mEffect )
362 {
363 return;
364 }
365
366 mEffect->setOffsetUnit( mOffsetUnitWidget->unit() );
367 mEffect->setOffsetMapUnitScale( mOffsetUnitWidget->getMapUnitScale() );
368 emit changed();
369 }
370
opacityChanged(double value)371 void QgsShadowEffectWidget::opacityChanged( double value )
372 {
373 if ( !mEffect )
374 return;
375
376 mEffect->setOpacity( value );
377 emit changed();
378 }
379
mShadowColorBtn_colorChanged(const QColor & color)380 void QgsShadowEffectWidget::mShadowColorBtn_colorChanged( const QColor &color )
381 {
382 if ( !mEffect )
383 return;
384
385 mEffect->setColor( color );
386 emit changed();
387 }
388
mShadowRadiuSpnBx_valueChanged(double value)389 void QgsShadowEffectWidget::mShadowRadiuSpnBx_valueChanged( double value )
390 {
391 if ( !mEffect )
392 return;
393
394 mEffect->setBlurLevel( value );
395 emit changed();
396 }
397
mBlurUnitWidget_changed()398 void QgsShadowEffectWidget::mBlurUnitWidget_changed()
399 {
400 if ( !mEffect )
401 {
402 return;
403 }
404
405 mEffect->setBlurUnit( mBlurUnitWidget->unit() );
406 mEffect->setBlurMapUnitScale( mBlurUnitWidget->getMapUnitScale() );
407 emit changed();
408 }
409
mDrawModeComboBox_currentIndexChanged(int index)410 void QgsShadowEffectWidget::mDrawModeComboBox_currentIndexChanged( int index )
411 {
412 Q_UNUSED( index )
413
414 if ( !mEffect )
415 return;
416
417 mEffect->setDrawMode( mDrawModeComboBox->drawMode() );
418 emit changed();
419 }
420
mShadowBlendCmbBx_currentIndexChanged(int index)421 void QgsShadowEffectWidget::mShadowBlendCmbBx_currentIndexChanged( int index )
422 {
423 Q_UNUSED( index )
424
425 if ( !mEffect )
426 return;
427
428 mEffect->setBlendMode( mShadowBlendCmbBx->blendMode() );
429 emit changed();
430 }
431
432
433
434 //
435 // glow
436 //
437
QgsGlowWidget(QWidget * parent)438 QgsGlowWidget::QgsGlowWidget( QWidget *parent )
439 : QgsPaintEffectWidget( parent )
440
441 {
442 setupUi( this );
443 connect( mSpreadSpnBx, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsGlowWidget::mSpreadSpnBx_valueChanged );
444 connect( mSpreadUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsGlowWidget::mSpreadUnitWidget_changed );
445 connect( mColorBtn, &QgsColorButton::colorChanged, this, &QgsGlowWidget::mColorBtn_colorChanged );
446 connect( mBlendCmbBx, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsGlowWidget::mBlendCmbBx_currentIndexChanged );
447 connect( mDrawModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsGlowWidget::mDrawModeComboBox_currentIndexChanged );
448 connect( mBlurRadiusSpnBx, static_cast< void ( QDoubleSpinBox::* )( double ) >( &QDoubleSpinBox::valueChanged ), this, &QgsGlowWidget::mBlurRadiusSpnBx_valueChanged );
449 connect( mBlurUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsGlowWidget::mBlurUnitWidget_changed );
450
451 mColorBtn->setAllowOpacity( false );
452 mColorBtn->setColorDialogTitle( tr( "Select Glow Color" ) );
453 mColorBtn->setContext( QStringLiteral( "symbology" ) );
454
455 mSpreadUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderMapUnits
456 << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
457 mBlurUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderMapUnits
458 << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
459
460 btnColorRamp->setShowGradientOnly( true );
461
462 initGui();
463
464 connect( btnColorRamp, &QgsColorRampButton::colorRampChanged, this, &QgsGlowWidget::applyColorRamp );
465 connect( radioSingleColor, &QAbstractButton::toggled, this, &QgsGlowWidget::colorModeChanged );
466 connect( mOpacityWidget, &QgsOpacityWidget::opacityChanged, this, &QgsGlowWidget::opacityChanged );
467 }
468
setPaintEffect(QgsPaintEffect * effect)469 void QgsGlowWidget::setPaintEffect( QgsPaintEffect *effect )
470 {
471 if ( !effect || ( effect->type() != QLatin1String( "outerGlow" ) && effect->type() != QLatin1String( "innerGlow" ) ) )
472 return;
473
474 mEffect = static_cast<QgsGlowEffect *>( effect );
475 initGui();
476 }
477
initGui()478 void QgsGlowWidget::initGui()
479 {
480 if ( !mEffect )
481 {
482 return;
483 }
484
485 blockSignals( true );
486
487 mSpreadSpnBx->setValue( mEffect->spread() );
488 mSpreadUnitWidget->setUnit( mEffect->spreadUnit() );
489 mSpreadUnitWidget->setMapUnitScale( mEffect->spreadMapUnitScale() );
490 mBlurRadiusSpnBx->setValue( mEffect->blurLevel() );
491 mBlurUnitWidget->setUnit( mEffect->blurUnit() );
492 mBlurUnitWidget->setMapUnitScale( mEffect->blurMapUnitScale() );
493 mOpacityWidget->setOpacity( mEffect->opacity() );
494 mColorBtn->setColor( mEffect->color() );
495 mBlendCmbBx->setBlendMode( mEffect->blendMode() );
496
497 if ( mEffect->ramp() )
498 {
499 btnColorRamp->setColorRamp( mEffect->ramp() );
500 }
501
502 radioSingleColor->setChecked( mEffect->colorType() == QgsGlowEffect::SingleColor );
503 mColorBtn->setEnabled( mEffect->colorType() == QgsGlowEffect::SingleColor );
504 radioColorRamp->setChecked( mEffect->colorType() == QgsGlowEffect::ColorRamp );
505 btnColorRamp->setEnabled( mEffect->colorType() == QgsGlowEffect::ColorRamp );
506 mDrawModeComboBox->setDrawMode( mEffect->drawMode() );
507
508 blockSignals( false );
509 }
510
blockSignals(const bool block)511 void QgsGlowWidget::blockSignals( const bool block )
512 {
513 mSpreadSpnBx->blockSignals( block );
514 mSpreadUnitWidget->blockSignals( block );
515 mBlurRadiusSpnBx->blockSignals( block );
516 mOpacityWidget->blockSignals( block );
517 mColorBtn->blockSignals( block );
518 mBlendCmbBx->blockSignals( block );
519 btnColorRamp->blockSignals( block );
520 radioSingleColor->blockSignals( block );
521 radioColorRamp->blockSignals( block );
522 mDrawModeComboBox->blockSignals( block );
523 }
524
colorModeChanged()525 void QgsGlowWidget::colorModeChanged()
526 {
527 if ( !mEffect )
528 {
529 return;
530 }
531
532 if ( radioSingleColor->isChecked() )
533 {
534 mEffect->setColorType( QgsGlowEffect::SingleColor );
535 }
536 else
537 {
538 mEffect->setColorType( QgsGlowEffect::ColorRamp );
539 mEffect->setRamp( btnColorRamp->colorRamp() );
540 }
541 emit changed();
542 }
543
mSpreadSpnBx_valueChanged(double value)544 void QgsGlowWidget::mSpreadSpnBx_valueChanged( double value )
545 {
546 if ( !mEffect )
547 return;
548
549 mEffect->setSpread( value );
550 emit changed();
551 }
552
mSpreadUnitWidget_changed()553 void QgsGlowWidget::mSpreadUnitWidget_changed()
554 {
555 if ( !mEffect )
556 {
557 return;
558 }
559
560 mEffect->setSpreadUnit( mSpreadUnitWidget->unit() );
561 mEffect->setSpreadMapUnitScale( mSpreadUnitWidget->getMapUnitScale() );
562 emit changed();
563 }
564
opacityChanged(double value)565 void QgsGlowWidget::opacityChanged( double value )
566 {
567 if ( !mEffect )
568 return;
569
570 mEffect->setOpacity( value );
571 emit changed();
572 }
573
mColorBtn_colorChanged(const QColor & color)574 void QgsGlowWidget::mColorBtn_colorChanged( const QColor &color )
575 {
576 if ( !mEffect )
577 return;
578
579 mEffect->setColor( color );
580 emit changed();
581 }
582
mBlurRadiusSpnBx_valueChanged(double value)583 void QgsGlowWidget::mBlurRadiusSpnBx_valueChanged( double value )
584 {
585 if ( !mEffect )
586 return;
587
588 mEffect->setBlurLevel( value );
589 emit changed();
590 }
591
mBlurUnitWidget_changed()592 void QgsGlowWidget::mBlurUnitWidget_changed()
593 {
594 if ( !mEffect )
595 {
596 return;
597 }
598
599 mEffect->setBlurUnit( mBlurUnitWidget->unit() );
600 mEffect->setBlurMapUnitScale( mBlurUnitWidget->getMapUnitScale() );
601 emit changed();
602 }
603
mBlendCmbBx_currentIndexChanged(int index)604 void QgsGlowWidget::mBlendCmbBx_currentIndexChanged( int index )
605 {
606 Q_UNUSED( index )
607
608 if ( !mEffect )
609 return;
610
611 mEffect->setBlendMode( mBlendCmbBx->blendMode() );
612 emit changed();
613 }
614
mDrawModeComboBox_currentIndexChanged(int index)615 void QgsGlowWidget::mDrawModeComboBox_currentIndexChanged( int index )
616 {
617 Q_UNUSED( index )
618
619 if ( !mEffect )
620 return;
621
622 mEffect->setDrawMode( mDrawModeComboBox->drawMode() );
623 emit changed();
624 }
625
applyColorRamp()626 void QgsGlowWidget::applyColorRamp()
627 {
628 if ( !mEffect )
629 {
630 return;
631 }
632
633 QgsColorRamp *ramp = btnColorRamp->colorRamp();
634 if ( !ramp )
635 return;
636
637 mEffect->setRamp( ramp );
638 emit changed();
639 }
640
641 //
642 // transform
643 //
644
QgsTransformWidget(QWidget * parent)645 QgsTransformWidget::QgsTransformWidget( QWidget *parent )
646 : QgsPaintEffectWidget( parent )
647
648 {
649 setupUi( this );
650 connect( mDrawModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsTransformWidget::mDrawModeComboBox_currentIndexChanged );
651 connect( mSpinTranslateX, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsTransformWidget::mSpinTranslateX_valueChanged );
652 connect( mSpinTranslateY, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsTransformWidget::mSpinTranslateY_valueChanged );
653 connect( mTranslateUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsTransformWidget::mTranslateUnitWidget_changed );
654 connect( mReflectXCheckBox, &QCheckBox::stateChanged, this, &QgsTransformWidget::mReflectXCheckBox_stateChanged );
655 connect( mReflectYCheckBox, &QCheckBox::stateChanged, this, &QgsTransformWidget::mReflectYCheckBox_stateChanged );
656 connect( mSpinShearX, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsTransformWidget::mSpinShearX_valueChanged );
657 connect( mSpinShearY, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsTransformWidget::mSpinShearY_valueChanged );
658 connect( mSpinScaleX, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsTransformWidget::mSpinScaleX_valueChanged );
659 connect( mSpinScaleY, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsTransformWidget::mSpinScaleY_valueChanged );
660 connect( mRotationSpinBox, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, &QgsTransformWidget::mRotationSpinBox_valueChanged );
661
662 mTranslateUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderPixels << QgsUnitTypes::RenderMapUnits
663 << QgsUnitTypes::RenderPoints << QgsUnitTypes::RenderInches );
664 mSpinTranslateX->setClearValue( 0 );
665 mSpinTranslateY->setClearValue( 0 );
666 mRotationSpinBox->setClearValue( 0 );
667 mSpinShearX->setClearValue( 0 );
668 mSpinShearY->setClearValue( 0 );
669 mSpinScaleX->setClearValue( 100.0 );
670 mSpinScaleY->setClearValue( 100.0 );
671
672 initGui();
673 }
674
675
setPaintEffect(QgsPaintEffect * effect)676 void QgsTransformWidget::setPaintEffect( QgsPaintEffect *effect )
677 {
678 if ( !effect || effect->type() != QLatin1String( "transform" ) )
679 return;
680
681 mEffect = static_cast<QgsTransformEffect *>( effect );
682 initGui();
683 }
684
initGui()685 void QgsTransformWidget::initGui()
686 {
687 if ( !mEffect )
688 {
689 return;
690 }
691
692 blockSignals( true );
693
694 mReflectXCheckBox->setChecked( mEffect->reflectX() );
695 mReflectYCheckBox->setChecked( mEffect->reflectY() );
696 mDrawModeComboBox->setDrawMode( mEffect->drawMode() );
697 mSpinTranslateX->setValue( mEffect->translateX() );
698 mSpinTranslateY->setValue( mEffect->translateY() );
699 mTranslateUnitWidget->setUnit( mEffect->translateUnit() );
700 mTranslateUnitWidget->setMapUnitScale( mEffect->translateMapUnitScale() );
701 mSpinShearX->setValue( mEffect->shearX() );
702 mSpinShearY->setValue( mEffect->shearY() );
703 mSpinScaleX->setValue( mEffect->scaleX() * 100.0 );
704 mSpinScaleY->setValue( mEffect->scaleY() * 100.0 );
705 mRotationSpinBox->setValue( mEffect->rotation() );
706
707 blockSignals( false );
708 }
709
blockSignals(const bool block)710 void QgsTransformWidget::blockSignals( const bool block )
711 {
712 mDrawModeComboBox->blockSignals( block );
713 mTranslateUnitWidget->blockSignals( block );
714 mSpinTranslateX->blockSignals( block );
715 mSpinTranslateY->blockSignals( block );
716 mReflectXCheckBox->blockSignals( block );
717 mReflectYCheckBox->blockSignals( block );
718 mSpinShearX->blockSignals( block );
719 mSpinShearY->blockSignals( block );
720 mSpinScaleX->blockSignals( block );
721 mSpinScaleY->blockSignals( block );
722 mRotationSpinBox->blockSignals( block );
723 }
724
725
mDrawModeComboBox_currentIndexChanged(int index)726 void QgsTransformWidget::mDrawModeComboBox_currentIndexChanged( int index )
727 {
728 Q_UNUSED( index )
729
730 if ( !mEffect )
731 return;
732
733 mEffect->setDrawMode( mDrawModeComboBox->drawMode() );
734 emit changed();
735 }
736
mSpinTranslateX_valueChanged(double value)737 void QgsTransformWidget::mSpinTranslateX_valueChanged( double value )
738 {
739 if ( !mEffect )
740 return;
741
742 mEffect->setTranslateX( value );
743 emit changed();
744 }
745
mSpinTranslateY_valueChanged(double value)746 void QgsTransformWidget::mSpinTranslateY_valueChanged( double value )
747 {
748 if ( !mEffect )
749 return;
750
751 mEffect->setTranslateY( value );
752 emit changed();
753 }
754
mTranslateUnitWidget_changed()755 void QgsTransformWidget::mTranslateUnitWidget_changed()
756 {
757 if ( !mEffect )
758 {
759 return;
760 }
761
762 mEffect->setTranslateUnit( mTranslateUnitWidget->unit() );
763 mEffect->setTranslateMapUnitScale( mTranslateUnitWidget->getMapUnitScale() );
764 emit changed();
765 }
766
mReflectXCheckBox_stateChanged(int state)767 void QgsTransformWidget::mReflectXCheckBox_stateChanged( int state )
768 {
769 if ( !mEffect )
770 return;
771
772 mEffect->setReflectX( state == Qt::Checked );
773 emit changed();
774 }
775
mReflectYCheckBox_stateChanged(int state)776 void QgsTransformWidget::mReflectYCheckBox_stateChanged( int state )
777 {
778 if ( !mEffect )
779 return;
780
781 mEffect->setReflectY( state == Qt::Checked );
782 emit changed();
783 }
784
mSpinShearX_valueChanged(double value)785 void QgsTransformWidget::mSpinShearX_valueChanged( double value )
786 {
787 if ( !mEffect )
788 return;
789
790 mEffect->setShearX( value );
791 emit changed();
792 }
793
mSpinShearY_valueChanged(double value)794 void QgsTransformWidget::mSpinShearY_valueChanged( double value )
795 {
796 if ( !mEffect )
797 return;
798
799 mEffect->setShearY( value );
800 emit changed();
801 }
802
mSpinScaleX_valueChanged(double value)803 void QgsTransformWidget::mSpinScaleX_valueChanged( double value )
804 {
805 if ( !mEffect )
806 return;
807
808 mEffect->setScaleX( value / 100.0 );
809 emit changed();
810 }
811
mSpinScaleY_valueChanged(double value)812 void QgsTransformWidget::mSpinScaleY_valueChanged( double value )
813 {
814 if ( !mEffect )
815 return;
816
817 mEffect->setScaleY( value / 100.0 );
818 emit changed();
819 }
820
mRotationSpinBox_valueChanged(double value)821 void QgsTransformWidget::mRotationSpinBox_valueChanged( double value )
822 {
823 if ( !mEffect )
824 return;
825
826 mEffect->setRotation( value );
827 emit changed();
828 }
829
830
831 //
832 // color effect
833 //
834
QgsColorEffectWidget(QWidget * parent)835 QgsColorEffectWidget::QgsColorEffectWidget( QWidget *parent )
836 : QgsPaintEffectWidget( parent )
837
838 {
839 setupUi( this );
840 connect( mBlendCmbBx, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsColorEffectWidget::mBlendCmbBx_currentIndexChanged );
841 connect( mDrawModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsColorEffectWidget::mDrawModeComboBox_currentIndexChanged );
842 connect( mBrightnessSpinBox, static_cast< void ( QSpinBox::* )( int ) >( &QSpinBox::valueChanged ), this, &QgsColorEffectWidget::mBrightnessSpinBox_valueChanged );
843 connect( mContrastSpinBox, static_cast< void ( QSpinBox::* )( int ) >( &QSpinBox::valueChanged ), this, &QgsColorEffectWidget::mContrastSpinBox_valueChanged );
844 connect( mSaturationSpinBox, static_cast< void ( QSpinBox::* )( int ) >( &QSpinBox::valueChanged ), this, &QgsColorEffectWidget::mSaturationSpinBox_valueChanged );
845 connect( mColorizeStrengthSpinBox, static_cast< void ( QSpinBox::* )( int ) >( &QSpinBox::valueChanged ), this, &QgsColorEffectWidget::mColorizeStrengthSpinBox_valueChanged );
846 connect( mColorizeCheck, &QCheckBox::stateChanged, this, &QgsColorEffectWidget::mColorizeCheck_stateChanged );
847 connect( mColorizeColorButton, &QgsColorButton::colorChanged, this, &QgsColorEffectWidget::mColorizeColorButton_colorChanged );
848 connect( mGrayscaleCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsColorEffectWidget::mGrayscaleCombo_currentIndexChanged );
849
850 mBrightnessSpinBox->setClearValue( 0 );
851 mContrastSpinBox->setClearValue( 0 );
852 mSaturationSpinBox->setClearValue( 0 );
853 mColorizeStrengthSpinBox->setClearValue( 100 );
854 mColorizeColorButton->setAllowOpacity( false );
855
856 mGrayscaleCombo->addItem( tr( "Off" ), QgsImageOperation::GrayscaleOff );
857 mGrayscaleCombo->addItem( tr( "By Lightness" ), QgsImageOperation::GrayscaleLightness );
858 mGrayscaleCombo->addItem( tr( "By Luminosity" ), QgsImageOperation::GrayscaleLuminosity );
859 mGrayscaleCombo->addItem( tr( "By Average" ), QgsImageOperation::GrayscaleAverage );
860
861 initGui();
862
863 connect( mOpacityWidget, &QgsOpacityWidget::opacityChanged, this, &QgsColorEffectWidget::opacityChanged );
864 }
865
setPaintEffect(QgsPaintEffect * effect)866 void QgsColorEffectWidget::setPaintEffect( QgsPaintEffect *effect )
867 {
868 if ( !effect || effect->type() != QLatin1String( "color" ) )
869 return;
870
871 mEffect = static_cast<QgsColorEffect *>( effect );
872 initGui();
873 }
874
initGui()875 void QgsColorEffectWidget::initGui()
876 {
877 if ( !mEffect )
878 {
879 return;
880 }
881
882 blockSignals( true );
883
884 mSliderBrightness->setValue( mEffect->brightness() );
885 mSliderContrast->setValue( mEffect->contrast() );
886 mSliderSaturation->setValue( ( mEffect->saturation() - 1.0 ) * 100.0 );
887 mColorizeCheck->setChecked( mEffect->colorizeOn() );
888 mSliderColorizeStrength->setValue( mEffect->colorizeStrength() );
889 mColorizeColorButton->setColor( mEffect->colorizeColor() );
890 const int grayscaleIdx = mGrayscaleCombo->findData( QVariant( ( int ) mEffect->grayscaleMode() ) );
891 mGrayscaleCombo->setCurrentIndex( grayscaleIdx == -1 ? 0 : grayscaleIdx );
892 mOpacityWidget->setOpacity( mEffect->opacity() );
893 mBlendCmbBx->setBlendMode( mEffect->blendMode() );
894 mDrawModeComboBox->setDrawMode( mEffect->drawMode() );
895 enableColorizeControls( mEffect->colorizeOn() );
896
897 blockSignals( false );
898 }
899
blockSignals(const bool block)900 void QgsColorEffectWidget::blockSignals( const bool block )
901 {
902 mBrightnessSpinBox->blockSignals( block );
903 mContrastSpinBox->blockSignals( block );
904 mSaturationSpinBox->blockSignals( block );
905 mColorizeStrengthSpinBox->blockSignals( block );
906 mColorizeCheck->blockSignals( block );
907 mColorizeColorButton->blockSignals( block );
908 mGrayscaleCombo->blockSignals( block );
909 mOpacityWidget->blockSignals( block );
910 mBlendCmbBx->blockSignals( block );
911 mDrawModeComboBox->blockSignals( block );
912 }
913
enableColorizeControls(const bool enable)914 void QgsColorEffectWidget::enableColorizeControls( const bool enable )
915 {
916 mSliderColorizeStrength->setEnabled( enable );
917 mColorizeStrengthSpinBox->setEnabled( enable );
918 mColorizeColorButton->setEnabled( enable );
919 }
920
opacityChanged(double value)921 void QgsColorEffectWidget::opacityChanged( double value )
922 {
923 if ( !mEffect )
924 return;
925
926 mEffect->setOpacity( value );
927 emit changed();
928 }
929
mBlendCmbBx_currentIndexChanged(int index)930 void QgsColorEffectWidget::mBlendCmbBx_currentIndexChanged( int index )
931 {
932 Q_UNUSED( index )
933
934 if ( !mEffect )
935 return;
936
937 mEffect->setBlendMode( mBlendCmbBx->blendMode() );
938 emit changed();
939 }
940
mDrawModeComboBox_currentIndexChanged(int index)941 void QgsColorEffectWidget::mDrawModeComboBox_currentIndexChanged( int index )
942 {
943 Q_UNUSED( index )
944
945 if ( !mEffect )
946 return;
947
948 mEffect->setDrawMode( mDrawModeComboBox->drawMode() );
949 emit changed();
950 }
951
mBrightnessSpinBox_valueChanged(int value)952 void QgsColorEffectWidget::mBrightnessSpinBox_valueChanged( int value )
953 {
954 if ( !mEffect )
955 return;
956
957 mEffect->setBrightness( value );
958 emit changed();
959 }
960
mContrastSpinBox_valueChanged(int value)961 void QgsColorEffectWidget::mContrastSpinBox_valueChanged( int value )
962 {
963 if ( !mEffect )
964 return;
965
966 mEffect->setContrast( value );
967 emit changed();
968 }
969
mSaturationSpinBox_valueChanged(int value)970 void QgsColorEffectWidget::mSaturationSpinBox_valueChanged( int value )
971 {
972 if ( !mEffect )
973 return;
974
975 mEffect->setSaturation( value / 100.0 + 1 );
976 emit changed();
977 }
978
mColorizeStrengthSpinBox_valueChanged(int value)979 void QgsColorEffectWidget::mColorizeStrengthSpinBox_valueChanged( int value )
980 {
981 if ( !mEffect )
982 return;
983
984 mEffect->setColorizeStrength( value );
985 emit changed();
986 }
987
mColorizeCheck_stateChanged(int state)988 void QgsColorEffectWidget::mColorizeCheck_stateChanged( int state )
989 {
990 if ( !mEffect )
991 return;
992
993 mEffect->setColorizeOn( state == Qt::Checked );
994 enableColorizeControls( state == Qt::Checked );
995 emit changed();
996 }
997
mColorizeColorButton_colorChanged(const QColor & color)998 void QgsColorEffectWidget::mColorizeColorButton_colorChanged( const QColor &color )
999 {
1000 if ( !mEffect )
1001 return;
1002
1003 mEffect->setColorizeColor( color );
1004 emit changed();
1005 }
1006
mGrayscaleCombo_currentIndexChanged(int index)1007 void QgsColorEffectWidget::mGrayscaleCombo_currentIndexChanged( int index )
1008 {
1009 Q_UNUSED( index )
1010
1011 if ( !mEffect )
1012 return;
1013
1014 mEffect->setGrayscaleMode( ( QgsImageOperation::GrayscaleMode ) mGrayscaleCombo->currentData().toInt() );
1015 emit changed();
1016 }
1017