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>
34 QWidget *_dialogParent,
36 : dialogParent(_dialogParent)
38 , miniCtlFlag( false )
39 , foregroundColor(fgColor)
40 , backgroundColor(bgColor)
42 , displayRenderer(_displayRenderer)
45 resetPixmap = QPixmap( (
const char **)dcolorreset_xpm );
51 arrowBitmap = QPixmap(12,12);
52 arrowBitmap.fill(Qt::transparent);
54 QPainter
p(&arrowBitmap);
55 p.setPen(dialogParent->palette().windowText().color());
58 p.drawLine(0, 3, 7, 3);
59 p.drawLine(1, 2, 1, 4);
60 p.drawLine(2, 1, 2, 5);
61 p.drawLine(3, 0, 3, 6);
64 p.drawLine(8, 4, 8, 11);
65 p.drawLine(5, 8, 11, 8);
66 p.drawLine(6, 9, 10, 9);
67 p.drawLine(7, 10, 9, 10);
91 q->setAcceptDrops(
true );
92 QString caption = i18n(
"Select a Color");
96 connect(colorSelectorDialog, SIGNAL(signalForegroundColorChosen(
KoColor)), q, SLOT(slotSetForeGroundColorFromDialog(
KoColor)));
97 connect(q, SIGNAL(foregroundColorChanged(
KoColor)), colorSelectorDialog, SLOT(slotColorUpdated(
KoColor)));
102 d( new
Private(foregroundColor, backgroundColor,
111 QWidget *parent, QWidget* dialogParent)
113 d( new
Private(foregroundColor, backgroundColor,
127 return d->foregroundColor;
132 return d->backgroundColor;
142 return QSize(34, 34);
147 d->foregroundColor = color;
154 d->colorSelectorDialog->slotColorUpdated(color);
161 d->backgroundColor = color;
168 d->displayRenderer->disconnect(
this);
174 connect(
d->displayRenderer, SIGNAL(displayConfigurationChanged()),
this, SLOT(update()));
182 d->colorSelectorDialog->lockUsedColorSpace(cs);
188 if (
d->displayRenderer) {
189 c.
convertTo(
d->displayRenderer->getPaintingColorSpace());
190 col =
d->displayRenderer->toQColor(c);
204 foregroundRect = QRect( 0, 0, width() - 14, height() - 14 );
205 backgroundRect = QRect( 14, 14, width() - 14, height() - 14 );
210 QRect foregroundRect;
211 QRect backgroundRect;
213 QPainter painter(
this );
215 metrics( foregroundRect, backgroundRect );
217 QBrush defBrush =
palette().brush( QPalette::Button );
221 qDrawShadeRect( &painter, backgroundRect,
palette(),
false, 1, 0,
222 isEnabled() ? &backgroundBrush : &defBrush );
224 qDrawShadeRect( &painter, foregroundRect,
palette(),
false, 1, 0,
225 isEnabled() ? &foregroundBrush : &defBrush );
227 painter.setPen(
palette().color( QPalette::Shadow ) );
229 painter.drawPixmap( foregroundRect.right() + 2, 1,
d->arrowBitmap );
230 painter.drawPixmap( 1, foregroundRect.bottom() + 2,
d->resetPixmap );
235 event->setAccepted( isEnabled() && KColorMimeData::canDecode(
event->mimeData() ) );
259 d->foregroundColor = color;
266 d->colorSelectorDialog->setPreviousColor(
d->foregroundColor);
267 d->colorSelectorDialog->show();
274 d->backgroundColor = c;
280 QRect foregroundRect;
281 QRect backgroundRect;
283 metrics( foregroundRect, backgroundRect );
285 d->dragPosition =
event->pos();
289 if ( foregroundRect.contains(
d->dragPosition ) ) {
291 d->miniCtlFlag =
false;
293 else if( backgroundRect.contains(
d->dragPosition ) ) {
295 d->miniCtlFlag =
false;
297 else if (
event->pos().x() > foregroundRect.width() ) {
302 d->foregroundColor =
d->backgroundColor;
303 d->backgroundColor =
tmp;
308 d->miniCtlFlag =
true;
310 else if (
event->pos().x() < backgroundRect.x() ) {
311 d->foregroundColor =
d->displayRenderer->approximateFromRenderedQColor(Qt::black);
312 d->backgroundColor =
d->displayRenderer->approximateFromRenderedQColor(Qt::white);
317 d->miniCtlFlag =
true;
325 if ( !
d->miniCtlFlag ) {
326 int delay = QApplication::startDragDistance();
328 if (
event->x() >=
d->dragPosition.x() + delay ||
event->x() <=
d->dragPosition.x() - delay ||
329 event->y() >=
d->dragPosition.y() + delay ||
event->y() <=
d->dragPosition.y() - delay ) {
330 KColorMimeData::createDrag(
d->tmpSelection ==
Foreground ?
343 if (
d->miniCtlFlag )
346 d->miniCtlFlag =
false;
348 QRect foregroundRect;
349 QRect backgroundRect;
350 metrics( foregroundRect, backgroundRect );
352 KConfigGroup cfg = KSharedConfig::openConfig()->group(
"colorselector");
353 bool usePlatformDialog = cfg.readEntry(
"UsePlatformColorDialog",
false);
355 if (foregroundRect.contains(
event->pos())) {
358 if (usePlatformDialog) {
359 QColor c =
d->foregroundColor.toQColor();
360 c = QColorDialog::getColor(c,
this);
362 d->foregroundColor =
d->displayRenderer->approximateFromRenderedQColor(c);
367 d->colorSelectorDialog->setPreviousColor(
d->foregroundColor);
368 d->colorSelectorDialog->show();
373 d->foregroundColor =
d->backgroundColor;
377 else if (backgroundRect.contains(
event->pos())) {
380 if (usePlatformDialog) {
381 QColor c =
d->backgroundColor.toQColor();
382 c = QColorDialog::getColor(c,
this);
384 d->backgroundColor =
d->displayRenderer->approximateFromRenderedQColor(c);
391 d->backgroundColor = c;
396 d->backgroundColor =
d->foregroundColor;
406 QWidget::changeEvent(
event);
408 switch (
event->type()) {
409 case QEvent::StyleChange:
410 case QEvent::PaletteChange:
419 if (
event->type() == QEvent::ToolTip) {
420 QRect foregroundRect;
421 QRect backgroundRect;
422 metrics( foregroundRect, backgroundRect );
424 if (this->mapFromGlobal(QCursor::pos()).x() < backgroundRect.x() ) {
425 if (this->mapFromGlobal(QCursor::pos()).y() < backgroundRect.y()){
426 this->setToolTip(i18n(
"Foreground color selector"));
429 this->setToolTip(i18n(
"Set foreground and background colors to black and white"));
433 if (this->mapFromGlobal(QCursor::pos()).y() < backgroundRect.y() ) {
434 this->setToolTip(i18n(
"Swap foreground and background colors"));
437 this->setToolTip(i18n(
"Background color selector"));
441 return QWidget::event(
event);
PythonPluginManager * instance
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
The KisInternalColorSelector class.
static KoColor getModalColorDialog(const KoColor color, QWidget *parent=0, QString caption=QString())
getModalColorDialog Execute this dialog modally. The function returns the KoColor you want.
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]