[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [krita/krita-testing-wolthera] libs/ui/widgets: change kodualcolorbutton about to simply code.
From:       Wolthera van Hovell tot Westerflier <griffinvalley () gmail ! com>
Date:       2016-08-20 17:26:00
Message-ID: E1bbA1w-0005ay-6z () code ! kde ! org
[Download RAW message or body]

Git commit 8c2914254e053f314b803b4f064c5534a7aeb4ba by Wolthera van Hovell tot Westerflier.
Committed on 20/08/2016 at 17:24.
Pushed by woltherav into branch 'krita-testing-wolthera'.

change kodualcolorbutton about to simply code.

This doesn't prevent a crash when closing all available documents, sadly.

M  +18   -4    libs/ui/widgets/KoDualColorButton.cpp
M  +9    -0    libs/ui/widgets/KoDualColorButton.h

http://commits.kde.org/krita/8c2914254e053f314b803b4f064c5534a7aeb4ba

diff --git a/libs/ui/widgets/KoDualColorButton.cpp b/libs/ui/widgets/KoDualColorButton.cpp
index 4f086ab..994e0acd 100644
--- a/libs/ui/widgets/KoDualColorButton.cpp
+++ b/libs/ui/widgets/KoDualColorButton.cpp
@@ -165,7 +165,21 @@ void KoDualColorButton::setDisplayRenderer(const KoColorDisplayRendererInterface
     if (displayRenderer) {
         d->displayRenderer = displayRenderer;
         d->colorSelectorDialog->setDisplayRenderer(displayRenderer);
+    } else {
+        d->displayRenderer = KoDumbColorDisplayRenderer::instance();
+    }
+}
+
+QColor KoDualColorButton::getColorFromDisplayRenderer(KoColor c)
+{
+    QColor col;
+    if (d->displayRenderer) {
+        c.convertTo(d->displayRenderer->getPaintingColorSpace());
+        col = d->displayRenderer->toQColor(c);
+    } else {
+        col = c.toQColor();
     }
+    return col;
 }
 
 void KoDualColorButton::setPopDialog( bool popDialog )
@@ -189,8 +203,8 @@ void KoDualColorButton::paintEvent(QPaintEvent *)
   metrics( foregroundRect, backgroundRect );
 
   QBrush defBrush = palette().brush( QPalette::Button );
-  QBrush foregroundBrush( d->displayRenderer->toQColor(d->foregroundColor), Qt::SolidPattern );
-  QBrush backgroundBrush( d->displayRenderer->toQColor(d->backgroundColor), Qt::SolidPattern );
+  QBrush foregroundBrush( getColorFromDisplayRenderer(d->foregroundColor), Qt::SolidPattern );
+  QBrush backgroundBrush( getColorFromDisplayRenderer(d->backgroundColor), Qt::SolidPattern );
 
   qDrawShadeRect( &painter, backgroundRect, palette(), false, 1, 0,
                   isEnabled() ? &backgroundBrush : &defBrush );
@@ -286,8 +300,8 @@ void KoDualColorButton::mouseMoveEvent( QMouseEvent *event )
     if ( event->x() >= d->dragPosition.x() + delay || event->x() <= d->dragPosition.x() - delay ||
          event->y() >= d->dragPosition.y() + delay || event->y() <= d->dragPosition.y() - delay ) {
       KColorMimeData::createDrag( d->tmpSelection == Foreground ?
-                                  d->displayRenderer->toQColor(d->foregroundColor) :
-                                  d->displayRenderer->toQColor(d->backgroundColor),
+                                  getColorFromDisplayRenderer(d->foregroundColor) :
+                                  getColorFromDisplayRenderer(d->backgroundColor),
                                   this )->start();
       d->dragFlag = true;
     }
diff --git a/libs/ui/widgets/KoDualColorButton.h b/libs/ui/widgets/KoDualColorButton.h
index e98e82d..675665c 100644
--- a/libs/ui/widgets/KoDualColorButton.h
+++ b/libs/ui/widgets/KoDualColorButton.h
@@ -120,6 +120,15 @@ class KRITAWIDGETS_EXPORT KoDualColorButton : public QWidget
     void setDisplayRenderer(const KoColorDisplayRendererInterface *displayRenderer);
 
     /**
+     * @brief getColorFromDisplayRenderer
+     * convenience function to get the right qcolor from the display renderer, including checking
+     * whether the display renderer actually exists.
+     * @param c the kocolor to convert.
+     * @return the qcolor to use for display.
+     */
+    QColor getColorFromDisplayRenderer(KoColor c);
+
+    /**
      * Sets if a dialog with a color chooser should be popped up when clicking
      * If you set this to false then you could connect to the pleasePopDialog signal
      * and pop your own dialog. Just set the current color afterwards.
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic