23 #include <QHeaderView>
24 #include <QPushButton>
26 #include <QToolButton>
27 #include <QFileDialog>
28 #include <QMessageBox>
29 #include <QDesktopWidget>
30 #include <QMouseEvent>
32 #include <QInputDialog>
33 #include <QVBoxLayout>
39 connect( mHueRadio, &QRadioButton::toggled,
this, &QgsCompoundColorWidget::mHueRadio_toggled );
40 connect( mSaturationRadio, &QRadioButton::toggled,
this, &QgsCompoundColorWidget::mSaturationRadio_toggled );
41 connect( mValueRadio, &QRadioButton::toggled,
this, &QgsCompoundColorWidget::mValueRadio_toggled );
42 connect( mRedRadio, &QRadioButton::toggled,
this, &QgsCompoundColorWidget::mRedRadio_toggled );
43 connect( mGreenRadio, &QRadioButton::toggled,
this, &QgsCompoundColorWidget::mGreenRadio_toggled );
44 connect( mBlueRadio, &QRadioButton::toggled,
this, &QgsCompoundColorWidget::mBlueRadio_toggled );
45 connect( mAddColorToSchemeButton, &QPushButton::clicked,
this, &QgsCompoundColorWidget::mAddColorToSchemeButton_clicked );
46 connect( mAddCustomColorButton, &QPushButton::clicked,
this, &QgsCompoundColorWidget::mAddCustomColorButton_clicked );
47 connect( mSampleButton, &QPushButton::clicked,
this, &QgsCompoundColorWidget::mSampleButton_clicked );
48 connect( mTabWidget, &QTabWidget::currentChanged,
this, &QgsCompoundColorWidget::mTabWidget_currentChanged );
49 connect( mActionShowInButtons, &QAction::toggled,
this, &QgsCompoundColorWidget::mActionShowInButtons_toggled );
54 QVBoxLayout *newLayout =
new QVBoxLayout();
55 newLayout->setMargin( 0 );
56 newLayout->setContentsMargins( 0, 0, 0, 0 );
57 newLayout->addWidget( mTabWidget );
58 newLayout->addWidget( mSlidersWidget );
59 newLayout->addWidget( mPreviewWidget );
60 newLayout->addWidget( mSwatchesWidget );
62 setLayout( newLayout );
67 mSchemeList->header()->hide();
68 #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
69 mSchemeList->setColumnWidth( 0,
static_cast< int >(
Qgis::UI_SCALE_FACTOR * fontMetrics().width(
'X' ) * 6 ) );
71 mSchemeList->setColumnWidth( 0,
static_cast< int >(
Qgis::UI_SCALE_FACTOR * fontMetrics().horizontalAdvance(
'X' ) * 6 ) );
76 refreshSchemeComboBox();
80 int activeScheme = settings.
value( QStringLiteral(
"Windows/ColorDialog/activeScheme" ), 0 ).toInt();
81 activeScheme = activeScheme >= mSchemeComboBox->count() ? 0 : activeScheme;
83 mSchemeList->setScheme( schemeList.at( activeScheme ) );
85 mSchemeComboBox->setCurrentIndex( activeScheme );
86 updateActionsForCurrentScheme();
89 connect( mSchemeList->selectionModel(), &QItemSelectionModel::selectionChanged,
this, &QgsCompoundColorWidget::listSelectionChanged );
91 mActionCopyColors->setEnabled(
false );
97 connect( mActionImportPalette, &QAction::triggered,
this, &QgsCompoundColorWidget::importPalette );
98 connect( mActionRemovePalette, &QAction::triggered,
this, &QgsCompoundColorWidget::removePalette );
99 connect( mActionNewPalette, &QAction::triggered,
this, &QgsCompoundColorWidget::newPalette );
102 QMenu *schemeMenu =
new QMenu( mSchemeToolButton );
103 schemeMenu->addAction( mActionCopyColors );
104 schemeMenu->addAction( mActionPasteColors );
105 schemeMenu->addSeparator();
106 schemeMenu->addAction( mActionImportColors );
107 schemeMenu->addAction( mActionExportColors );
108 schemeMenu->addSeparator();
109 schemeMenu->addAction( mActionNewPalette );
110 schemeMenu->addAction( mActionImportPalette );
111 schemeMenu->addAction( mActionRemovePalette );
112 schemeMenu->addAction( mActionShowInButtons );
113 mSchemeToolButton->setMenu( schemeMenu );
115 connect( mSchemeComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsCompoundColorWidget::schemeIndexChanged );
118 mOldColorLabel->hide();
121 mVerticalRamp->setInteriorMargin( 2 );
122 mVerticalRamp->setShowFrame(
true );
132 mSwatchButton1->setShowMenu(
false );
134 mSwatchButton2->setShowMenu(
false );
136 mSwatchButton3->setShowMenu(
false );
138 mSwatchButton4->setShowMenu(
false );
140 mSwatchButton5->setShowMenu(
false );
142 mSwatchButton6->setShowMenu(
false );
144 mSwatchButton7->setShowMenu(
false );
146 mSwatchButton8->setShowMenu(
false );
148 mSwatchButton9->setShowMenu(
false );
150 mSwatchButton10->setShowMenu(
false );
152 mSwatchButton11->setShowMenu(
false );
154 mSwatchButton12->setShowMenu(
false );
156 mSwatchButton13->setShowMenu(
false );
158 mSwatchButton14->setShowMenu(
false );
160 mSwatchButton15->setShowMenu(
false );
162 mSwatchButton16->setShowMenu(
false );
165 mSwatchButton1->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor1" ), QVariant( QColor() ) ).value<QColor>() );
166 mSwatchButton2->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor2" ), QVariant( QColor() ) ).value<QColor>() );
167 mSwatchButton3->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor3" ), QVariant( QColor() ) ).value<QColor>() );
168 mSwatchButton4->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor4" ), QVariant( QColor() ) ).value<QColor>() );
169 mSwatchButton5->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor5" ), QVariant( QColor() ) ).value<QColor>() );
170 mSwatchButton6->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor6" ), QVariant( QColor() ) ).value<QColor>() );
171 mSwatchButton7->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor7" ), QVariant( QColor() ) ).value<QColor>() );
172 mSwatchButton8->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor8" ), QVariant( QColor() ) ).value<QColor>() );
173 mSwatchButton9->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor9" ), QVariant( QColor() ) ).value<QColor>() );
174 mSwatchButton10->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor10" ), QVariant( QColor() ) ).value<QColor>() );
175 mSwatchButton11->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor11" ), QVariant( QColor() ) ).value<QColor>() );
176 mSwatchButton12->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor12" ), QVariant( QColor() ) ).value<QColor>() );
177 mSwatchButton13->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor13" ), QVariant( QColor() ) ).value<QColor>() );
178 mSwatchButton14->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor14" ), QVariant( QColor() ) ).value<QColor>() );
179 mSwatchButton15->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor15" ), QVariant( QColor() ) ).value<QColor>() );
180 mSwatchButton16->setColor( settings.
value( QStringLiteral(
"Windows/ColorDialog/customColor16" ), QVariant( QColor() ) ).value<QColor>() );
183 mSpinBoxRadius->setValue( settings.
value( QStringLiteral(
"Windows/ColorDialog/sampleRadius" ), 1 ).toInt() );
184 mSamplePreview->setColor( QColor() );
187 const int swatchWidth =
static_cast< int >( std::round( std::max(
Qgis::UI_SCALE_FACTOR * 1.9 * mSwatchButton1->fontMetrics().height(), 38.0 ) ) );
188 const int swatchHeight =
static_cast< int >( std::round( std::max(
Qgis::UI_SCALE_FACTOR * 1.5 * mSwatchButton1->fontMetrics().height(), 30.0 ) ) );
189 mSwatchButton1->setMinimumSize( swatchWidth, swatchHeight );
190 mSwatchButton1->setMaximumSize( swatchWidth, swatchHeight );
191 mSwatchButton2->setMinimumSize( swatchWidth, swatchHeight );
192 mSwatchButton2->setMaximumSize( swatchWidth, swatchHeight );
193 mSwatchButton3->setMinimumSize( swatchWidth, swatchHeight );
194 mSwatchButton3->setMaximumSize( swatchWidth, swatchHeight );
195 mSwatchButton4->setMinimumSize( swatchWidth, swatchHeight );
196 mSwatchButton4->setMaximumSize( swatchWidth, swatchHeight );
197 mSwatchButton5->setMinimumSize( swatchWidth, swatchHeight );
198 mSwatchButton5->setMaximumSize( swatchWidth, swatchHeight );
199 mSwatchButton6->setMinimumSize( swatchWidth, swatchHeight );
200 mSwatchButton6->setMaximumSize( swatchWidth, swatchHeight );
201 mSwatchButton7->setMinimumSize( swatchWidth, swatchHeight );
202 mSwatchButton7->setMaximumSize( swatchWidth, swatchHeight );
203 mSwatchButton8->setMinimumSize( swatchWidth, swatchHeight );
204 mSwatchButton8->setMaximumSize( swatchWidth, swatchHeight );
205 mSwatchButton9->setMinimumSize( swatchWidth, swatchHeight );
206 mSwatchButton9->setMaximumSize( swatchWidth, swatchHeight );
207 mSwatchButton10->setMinimumSize( swatchWidth, swatchHeight );
208 mSwatchButton10->setMaximumSize( swatchWidth, swatchHeight );
209 mSwatchButton11->setMinimumSize( swatchWidth, swatchHeight );
210 mSwatchButton11->setMaximumSize( swatchWidth, swatchHeight );
211 mSwatchButton12->setMinimumSize( swatchWidth, swatchHeight );
212 mSwatchButton12->setMaximumSize( swatchWidth, swatchHeight );
213 mSwatchButton13->setMinimumSize( swatchWidth, swatchHeight );
214 mSwatchButton13->setMaximumSize( swatchWidth, swatchHeight );
215 mSwatchButton14->setMinimumSize( swatchWidth, swatchHeight );
216 mSwatchButton14->setMaximumSize( swatchWidth, swatchHeight );
217 mSwatchButton15->setMinimumSize( swatchWidth, swatchHeight );
218 mSwatchButton15->setMaximumSize( swatchWidth, swatchHeight );
219 mSwatchButton16->setMinimumSize( swatchWidth, swatchHeight );
220 mSwatchButton16->setMaximumSize( swatchWidth, swatchHeight );
221 const int previewHeight =
static_cast< int >( std::round( std::max(
Qgis::UI_SCALE_FACTOR * 2.0 * mSwatchButton1->fontMetrics().height(), 40.0 ) ) );
222 mColorPreview->setMinimumSize( 0, previewHeight );
223 mPreviewWidget->setMaximumHeight( previewHeight * 2 );
224 const int swatchAddSize =
static_cast< int >( std::round( std::max(
Qgis::UI_SCALE_FACTOR * 1.4 * mSwatchButton1->fontMetrics().height(), 28.0 ) ) );
225 mAddCustomColorButton->setMinimumWidth( swatchAddSize );
226 mAddCustomColorButton->setMaximumWidth( swatchAddSize );
231 if (
color.isValid() )
237 int activeRadio = settings.
value( QStringLiteral(
"Windows/ColorDialog/activeComponent" ), 2 ).toInt();
238 switch ( activeRadio )
241 mHueRadio->setChecked(
true );
244 mSaturationRadio->setChecked(
true );
247 mValueRadio->setChecked(
true );
250 mRedRadio->setChecked(
true );
253 mGreenRadio->setChecked(
true );
256 mBlueRadio->setChecked(
true );
259 int currentTab = settings.
value( QStringLiteral(
"Windows/ColorDialog/activeTab" ), 0 ).toInt();
260 mTabWidget->setCurrentIndex( currentTab );
306 return mColorPreview->color();
311 mAllowAlpha = allowOpacity;
312 mAlphaLabel->setVisible( allowOpacity );
313 mAlphaSlider->setVisible( allowOpacity );
316 mAlphaLayout->setContentsMargins( 0, 0, 0, 0 );
317 mAlphaLayout->setSpacing( 0 );
321 void QgsCompoundColorWidget::refreshSchemeComboBox()
323 mSchemeComboBox->blockSignals(
true );
324 mSchemeComboBox->clear();
326 QList<QgsColorScheme *>::const_iterator schemeIt = schemeList.constBegin();
327 for ( ; schemeIt != schemeList.constEnd(); ++schemeIt )
329 mSchemeComboBox->addItem( ( *schemeIt )->schemeName() );
331 mSchemeComboBox->blockSignals(
false );
338 QString lastDir = s.
value( QStringLiteral(
"/UI/lastGplPaletteDir" ), QDir::homePath() ).toString();
339 QString filePath = QFileDialog::getOpenFileName( parent, tr(
"Select Palette File" ), lastDir, QStringLiteral(
"GPL (*.gpl);;All files (*.*)" ) );
341 parent->activateWindow();
342 if ( filePath.isEmpty() )
348 QFileInfo fileInfo( filePath );
349 if ( !fileInfo.exists() || !fileInfo.isReadable() )
351 QMessageBox::critical(
nullptr, tr(
"Import Color Palette" ), tr(
"Error, file does not exist or is not readable." ) );
355 s.
setValue( QStringLiteral(
"/UI/lastGplPaletteDir" ), fileInfo.absolutePath() );
356 QFile file( filePath );
364 QMessageBox::critical(
nullptr, tr(
"Import Color Palette" ), tr(
"Palette file is not readable." ) );
368 if ( importedColors.length() == 0 )
371 QMessageBox::critical(
nullptr, tr(
"Import Color Palette" ), tr(
"No colors found in palette file." ) );
377 importedScheme->
setName( paletteName );
378 importedScheme->
setColors( importedColors );
381 return importedScheme;
384 void QgsCompoundColorWidget::importPalette()
389 refreshSchemeComboBox();
390 mSchemeComboBox->setCurrentIndex( mSchemeComboBox->count() - 1 );
397 if ( QMessageBox::question( parent, tr(
"Remove Color Palette" ),
398 QString( tr(
"Are you sure you want to remove %1?" ) ).arg( scheme->
schemeName() ),
399 QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
406 if ( !scheme->
erase() )
417 void QgsCompoundColorWidget::removePalette()
421 int prevIndex = mSchemeComboBox->currentIndex();
422 if ( prevIndex >= schemeList.length() )
436 refreshSchemeComboBox();
437 prevIndex = std::max( std::min( prevIndex, mSchemeComboBox->count() - 1 ), 0 );
438 mSchemeComboBox->setCurrentIndex( prevIndex );
445 QString name = QInputDialog::getText( parent, tr(
"Create New Palette" ), tr(
"Enter a name for the new palette:" ),
446 QLineEdit::Normal, tr(
"New palette" ), &ok );
448 if ( !ok || name.isEmpty() )
455 QDir palettePath( gplFilePath() );
456 QRegExp badChars(
"[,^@={}\\[\\]~!?:&*\"|#%<>$\"'();`' /\\\\]" );
457 QString filename = name.simplified().toLower().replace( badChars, QStringLiteral(
"_" ) );
458 if ( filename.isEmpty() )
460 filename = tr(
"new_palette" );
462 QFileInfo destFileInfo( palettePath.filePath( filename +
".gpl" ) );
464 while ( destFileInfo.exists() )
467 destFileInfo = QFileInfo( palettePath.filePath( filename + QStringLiteral(
"%1.gpl" ).arg( fileNumber ) ) );
478 void QgsCompoundColorWidget::newPalette()
483 refreshSchemeComboBox();
484 mSchemeComboBox->setCurrentIndex( mSchemeComboBox->count() - 1 );
488 QString QgsCompoundColorWidget::gplFilePath()
493 if ( !localDir.mkpath( palettesDir ) )
501 void QgsCompoundColorWidget::schemeIndexChanged(
int index )
504 if ( mSchemeList->isDirty() )
506 mSchemeList->saveColorsToScheme();
511 if ( index >= schemeList.length() )
517 mSchemeList->setScheme( scheme );
519 updateActionsForCurrentScheme();
522 mActionCopyColors->setEnabled(
false );
525 void QgsCompoundColorWidget::listSelectionChanged(
const QItemSelection &selected,
const QItemSelection &deselected )
527 Q_UNUSED( deselected )
528 mActionCopyColors->setEnabled( selected.length() > 0 );
531 void QgsCompoundColorWidget::mAddCustomColorButton_clicked()
533 switch ( mLastCustomColorIndex )
536 mSwatchButton1->setColor( mColorPreview->color() );
539 mSwatchButton2->setColor( mColorPreview->color() );
542 mSwatchButton3->setColor( mColorPreview->color() );
545 mSwatchButton4->setColor( mColorPreview->color() );
548 mSwatchButton5->setColor( mColorPreview->color() );
551 mSwatchButton6->setColor( mColorPreview->color() );
554 mSwatchButton7->setColor( mColorPreview->color() );
557 mSwatchButton8->setColor( mColorPreview->color() );
560 mSwatchButton9->setColor( mColorPreview->color() );
563 mSwatchButton10->setColor( mColorPreview->color() );
566 mSwatchButton11->setColor( mColorPreview->color() );
569 mSwatchButton12->setColor( mColorPreview->color() );
572 mSwatchButton13->setColor( mColorPreview->color() );
575 mSwatchButton14->setColor( mColorPreview->color() );
578 mSwatchButton15->setColor( mColorPreview->color() );
581 mSwatchButton16->setColor( mColorPreview->color() );
584 mLastCustomColorIndex++;
585 if ( mLastCustomColorIndex >= 16 )
587 mLastCustomColorIndex = 0;
591 void QgsCompoundColorWidget::mSampleButton_clicked()
597 mPickingColor =
true;
598 setMouseTracking(
true );
601 void QgsCompoundColorWidget::mTabWidget_currentChanged(
int index )
604 bool enabled = index == 0;
605 mRedRadio->setEnabled( enabled );
606 mBlueRadio->setEnabled( enabled );
607 mGreenRadio->setEnabled( enabled );
608 mHueRadio->setEnabled( enabled );
609 mSaturationRadio->setEnabled( enabled );
610 mValueRadio->setEnabled( enabled );
613 void QgsCompoundColorWidget::mActionShowInButtons_toggled(
bool state )
622 QScreen *QgsCompoundColorWidget::findScreenAt( QPoint pos )
624 const QList< QScreen * > screens = QGuiApplication::screens();
625 for ( QScreen *screen : screens )
627 if ( screen->geometry().contains( pos ) )
635 void QgsCompoundColorWidget::saveSettings()
638 if ( mSchemeList->isDirty() )
640 mSchemeList->saveColorsToScheme();
647 if ( mHueRadio->isChecked() )
649 if ( mSaturationRadio->isChecked() )
651 if ( mValueRadio->isChecked() )
653 if ( mRedRadio->isChecked() )
655 if ( mGreenRadio->isChecked() )
657 if ( mBlueRadio->isChecked() )
659 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/activeComponent" ), activeRadio );
662 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/activeScheme" ), mSchemeComboBox->currentIndex() );
665 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/activeTab" ), mTabWidget->currentIndex() );
668 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor1" ), QVariant( mSwatchButton1->color() ) );
669 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor2" ), QVariant( mSwatchButton2->color() ) );
670 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor3" ), QVariant( mSwatchButton3->color() ) );
671 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor4" ), QVariant( mSwatchButton4->color() ) );
672 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor5" ), QVariant( mSwatchButton5->color() ) );
673 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor6" ), QVariant( mSwatchButton6->color() ) );
674 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor7" ), QVariant( mSwatchButton7->color() ) );
675 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor8" ), QVariant( mSwatchButton8->color() ) );
676 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor9" ), QVariant( mSwatchButton9->color() ) );
677 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor10" ), QVariant( mSwatchButton10->color() ) );
678 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor11" ), QVariant( mSwatchButton11->color() ) );
679 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor12" ), QVariant( mSwatchButton12->color() ) );
680 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor13" ), QVariant( mSwatchButton13->color() ) );
681 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor14" ), QVariant( mSwatchButton14->color() ) );
682 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor15" ), QVariant( mSwatchButton15->color() ) );
683 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/customColor16" ), QVariant( mSwatchButton16->color() ) );
686 settings.
setValue( QStringLiteral(
"Windows/ColorDialog/sampleRadius" ), mSpinBoxRadius->value() );
689 void QgsCompoundColorWidget::stopPicking( QPoint eventPos,
const bool takeSample )
695 setMouseTracking(
false );
696 mPickingColor =
false;
705 QColor snappedColor = sampleColor( eventPos );
706 mSamplePreview->setColor( snappedColor );
707 mColorPreview->setColor( snappedColor,
true );
712 if ( !
color.isValid() )
717 QColor fixedColor = QColor(
color );
721 fixedColor.setAlpha( 255 );
723 QList<QgsColorWidget *> colorWidgets = this->findChildren<QgsColorWidget *>();
724 const auto constColorWidgets = colorWidgets;
727 if ( widget == mSamplePreview )
731 widget->blockSignals(
true );
732 widget->setColor( fixedColor );
733 widget->blockSignals(
false );
740 mOldColorLabel->setVisible(
color.isValid() );
741 mColorPreview->setColor2(
color );
753 QWidget::mousePressEvent( e );
756 QColor QgsCompoundColorWidget::averageColor(
const QImage &image )
const
764 for (
int heightIndex = 0; heightIndex < image.height(); ++heightIndex )
766 const QRgb *scanLine =
reinterpret_cast< const QRgb *
>( image.constScanLine( heightIndex ) );
767 for (
int widthIndex = 0; widthIndex < image.width(); ++widthIndex )
769 tmpRgb = scanLine[widthIndex];
770 sumRed += qRed( tmpRgb );
771 sumBlue += qBlue( tmpRgb );
772 sumGreen += qGreen( tmpRgb );
777 double avgRed =
static_cast<double>( sumRed ) / ( 255.0 * colorCount );
778 double avgGreen =
static_cast<double>( sumGreen ) / ( 255.0 * colorCount );
779 double avgBlue =
static_cast<double>( sumBlue ) / ( 255.0 * colorCount );
782 return QColor::fromRgbF( avgRed, avgGreen, avgBlue );
785 QColor QgsCompoundColorWidget::sampleColor( QPoint point )
const
787 int sampleRadius = mSpinBoxRadius->value() - 1;
788 QScreen *screen = findScreenAt( point );
793 QPixmap snappedPixmap = screen->grabWindow( QApplication::desktop()->winId(),
794 point.x() - sampleRadius,
795 point.y() - sampleRadius,
796 1 + sampleRadius * 2,
797 1 + sampleRadius * 2 );
798 QImage snappedImage = snappedPixmap.toImage();
800 return averageColor( snappedImage );
809 QColor hoverColor = sampleColor( e->globalPos() );
810 mSamplePreview->setColor( hoverColor );
816 QWidget::mouseMoveEvent( e );
824 stopPicking( e->globalPos() );
829 QWidget::mouseReleaseEvent( e );
834 if ( !mPickingColor )
842 stopPicking( QCursor::pos(), e->key() == Qt::Key_Space );
845 void QgsCompoundColorWidget::mHueRadio_toggled(
bool checked )
854 void QgsCompoundColorWidget::mSaturationRadio_toggled(
bool checked )
863 void QgsCompoundColorWidget::mValueRadio_toggled(
bool checked )
872 void QgsCompoundColorWidget::mRedRadio_toggled(
bool checked )
881 void QgsCompoundColorWidget::mGreenRadio_toggled(
bool checked )
890 void QgsCompoundColorWidget::mBlueRadio_toggled(
bool checked )
899 void QgsCompoundColorWidget::mAddColorToSchemeButton_clicked()
904 void QgsCompoundColorWidget::updateActionsForCurrentScheme()
908 mActionImportColors->setEnabled( scheme->
isEditable() );
909 mActionPasteColors->setEnabled( scheme->
isEditable() );
910 mAddColorToSchemeButton->setEnabled( scheme->
isEditable() );
911 mRemoveColorsFromSchemeButton->setEnabled( scheme->
isEditable() );
914 mActionRemovePalette->setEnabled(
static_cast< bool >( userScheme ) );
917 mActionShowInButtons->setEnabled(
true );
923 mActionShowInButtons->setEnabled(
false );