10#include <kcolormimedata.h>
11#include <kconfiggroup.h>
12#include <ksharedconfig.h>
14#include "dcolorarrow.xbm"
15#include "dcolorreset.xpm"
17#include <QColorDialog>
24#include <QDragEnterEvent>
28#include <QApplication>
36 QWidget *_dialogParent,
38 : dialogParent(_dialogParent)
40 , miniCtlFlag( false )
41 , foregroundColor(fgColor)
42 , backgroundColor(bgColor)
44 , displayRenderer(_displayRenderer)
47 resetPixmap = QPixmap( (
const char **)dcolorreset_xpm );
53 arrowBitmap = QPixmap(12,12);
54 arrowBitmap.fill(Qt::transparent);
56 QPainter
p(&arrowBitmap);
57 p.setPen(dialogParent->palette().windowText().color());
60 p.drawLine(0, 3, 7, 3);
61 p.drawLine(1, 2, 1, 4);
62 p.drawLine(2, 1, 2, 5);
63 p.drawLine(3, 0, 3, 6);
66 p.drawLine(8, 4, 8, 11);
67 p.drawLine(5, 8, 11, 8);
68 p.drawLine(6, 9, 10, 9);
69 p.drawLine(7, 10, 9, 10);
99 q->setAcceptDrops(
true );
100 QString caption = i18n(
"Select a Color");
102 config.
modal =
false;
109 d( new
Private(foregroundColor, backgroundColor,
118 QWidget *parent, QWidget* dialogParent)
120 d( new
Private(foregroundColor, backgroundColor,
134 return d->foregroundColor;
139 return d->backgroundColor;
149 return QSize(34, 34);
154 d->foregroundColor = color;
155 if (
d->colorDialogState &&
d->colorDialogState->selection ==
Foreground) {
161 d->colorSelectorDialog->slotColorUpdated(color);
168 d->backgroundColor = color;
170 if (
d->colorDialogState &&
d->colorDialogState->selection ==
Background) {
176 d->colorSelectorDialog->slotColorUpdated(color);
185 d->displayRenderer->disconnect(
this);
190 connect(
d->displayRenderer, SIGNAL(destroyed()),
this, SLOT(
setDisplayRenderer()), Qt::UniqueConnection);
191 connect(
d->displayRenderer, SIGNAL(displayConfigurationChanged()),
this, SLOT(update()));
199 d->colorSelectorDialog->lockUsedColorSpace(cs);
205 if (
d->displayRenderer) {
206 c.
convertTo(
d->displayRenderer->getPaintingColorSpace());
207 col =
d->displayRenderer->toQColor(c);
221 foregroundRect = QRect( 0, 0, width() - 14, height() - 14 );
222 backgroundRect = QRect( 14, 14, width() - 14, height() - 14 );
227 QRect foregroundRect;
228 QRect backgroundRect;
230 QPainter painter(
this );
232 metrics( foregroundRect, backgroundRect );
234 QBrush defBrush =
palette().brush( QPalette::Button );
238 qDrawShadeRect( &painter, backgroundRect,
palette(),
false, 1, 0,
239 isEnabled() ? &backgroundBrush : &defBrush );
241 qDrawShadeRect( &painter, foregroundRect,
palette(),
false, 1, 0,
242 isEnabled() ? &foregroundBrush : &defBrush );
244 painter.setPen(
palette().color( QPalette::Shadow ) );
246 painter.drawPixmap( foregroundRect.right() + 2, 1,
d->arrowBitmap );
247 painter.drawPixmap( 1, foregroundRect.bottom() + 2,
d->resetPixmap );
252 event->setAccepted( isEnabled() && KColorMimeData::canDecode(
event->mimeData() ) );
276 d->foregroundColor = color;
283 d->backgroundColor = color;
290 d->colorDialogState = std::nullopt;
295 d->colorDialogState.emplace();
300 d->colorSelectorDialog->slotColorUpdated(
d->foregroundColor);
301 d->colorSelectorDialog->setPreviousColor(
d->foregroundColor);
302 d->colorSelectorDialog->show();
308 d->colorDialogState.emplace();
313 d->colorSelectorDialog->slotColorUpdated(
d->backgroundColor);
314 d->colorSelectorDialog->setPreviousColor(
d->backgroundColor);
315 d->colorSelectorDialog->show();
321 QRect foregroundRect;
322 QRect backgroundRect;
324 metrics( foregroundRect, backgroundRect );
326 d->dragPosition =
event->pos();
330 if ( foregroundRect.contains(
d->dragPosition ) ) {
332 d->miniCtlFlag =
false;
334 else if( backgroundRect.contains(
d->dragPosition ) ) {
336 d->miniCtlFlag =
false;
338 else if (
event->pos().x() > foregroundRect.width() ) {
343 d->foregroundColor =
d->backgroundColor;
344 d->backgroundColor =
tmp;
349 d->miniCtlFlag =
true;
351 else if (
event->pos().x() < backgroundRect.x() ) {
352 d->foregroundColor =
d->displayRenderer->approximateFromRenderedQColor(Qt::black);
353 d->backgroundColor =
d->displayRenderer->approximateFromRenderedQColor(Qt::white);
358 d->miniCtlFlag =
true;
366 if ( !
d->miniCtlFlag ) {
367 int delay = QApplication::startDragDistance();
369 if (
event->x() >=
d->dragPosition.x() + delay ||
event->x() <=
d->dragPosition.x() - delay ||
370 event->y() >=
d->dragPosition.y() + delay ||
event->y() <=
d->dragPosition.y() - delay ) {
371 KColorMimeData::createDrag(
d->tmpSelection ==
Foreground ?
384 if (
d->miniCtlFlag )
387 d->miniCtlFlag =
false;
389 QRect foregroundRect;
390 QRect backgroundRect;
391 metrics( foregroundRect, backgroundRect );
393 KConfigGroup cfg = KSharedConfig::openConfig()->group(
"colorselector");
394 bool usePlatformDialog = cfg.readEntry(
"UsePlatformColorDialog",
false);
396 if (foregroundRect.contains(
event->pos())) {
399 if (usePlatformDialog) {
400 QColor c =
d->foregroundColor.toQColor();
401 c = QColorDialog::getColor(c,
this);
403 d->foregroundColor =
d->displayRenderer->approximateFromRenderedQColor(c);
413 d->foregroundColor =
d->backgroundColor;
417 else if (backgroundRect.contains(
event->pos())) {
420 if (usePlatformDialog) {
421 QColor c =
d->backgroundColor.toQColor();
422 c = QColorDialog::getColor(c,
this);
424 d->backgroundColor =
d->displayRenderer->approximateFromRenderedQColor(c);
433 d->backgroundColor =
d->foregroundColor;
443 QWidget::changeEvent(
event);
445 switch (
event->type()) {
446 case QEvent::StyleChange:
447 case QEvent::PaletteChange:
456 if (
event->type() == QEvent::ToolTip) {
457 QRect foregroundRect;
458 QRect backgroundRect;
459 metrics( foregroundRect, backgroundRect );
461 const QHelpEvent *helpEvent =
static_cast<QHelpEvent*
>(
event);
463 if (this->mapFromGlobal(helpEvent->globalPos()).x() < backgroundRect.x() ) {
464 if (this->mapFromGlobal(helpEvent->globalPos()).y() < backgroundRect.y()){
465 this->setToolTip(i18n(
"Foreground color selector"));
468 this->setToolTip(i18n(
"Set foreground and background colors to black and white"));
472 if (this->mapFromGlobal(helpEvent->globalPos()).y() < backgroundRect.y() ) {
473 this->setToolTip(i18n(
"Swap foreground and background colors"));
476 this->setToolTip(i18n(
"Background color selector"));
480 return QWidget::event(
event);
PythonPluginManager * instance
The KisInternalColorSelector class.
void convertTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)
void toQColor(QColor *c) const
a convenience method for the above.
static KoColorDisplayRendererInterface * instance()
rgba palette[MAX_PALETTE]