File indexing completed on 2024-05-05 04:21:24

0001 
0002 /*
0003    Copyright (c) 2003-2007 Clarence Dang <dang@kde.org>
0004    All rights reserved.
0005 
0006    Redistribution and use in source and binary forms, with or without
0007    modification, are permitted provided that the following conditions
0008    are met:
0009 
0010    1. Redistributions of source code must retain the above copyright
0011       notice, this list of conditions and the following disclaimer.
0012    2. Redistributions in binary form must reproduce the above copyright
0013       notice, this list of conditions and the following disclaimer in the
0014       documentation and/or other materials provided with the distribution.
0015 
0016    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
0017    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
0018    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
0019    IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
0020    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
0021    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
0022    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
0023    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0024    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
0025    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0026 */
0027 
0028 
0029 #ifndef kpDualColorButton_H
0030 #define kpDualColorButton_H
0031 
0032 
0033 #include <QFrame>
0034 
0035 #include "imagelib/kpColor.h"
0036 
0037 
0038 class kpDualColorButton : public QFrame
0039 {
0040 Q_OBJECT
0041 
0042 public:
0043     explicit kpDualColorButton (QWidget *parent);
0044 
0045     kpColor color (int which) const;
0046     kpColor foregroundColor () const;
0047     kpColor backgroundColor () const;
0048 
0049 public Q_SLOTS:
0050     void setColor (int which, const kpColor &color);
0051     void setForegroundColor (const kpColor &color);
0052     void setBackgroundColor (const kpColor &color);
0053 
0054 Q_SIGNALS:
0055     // If you connect to this signal, ignore the following
0056     // foregroundColorChanged() and backgroundColorChanged() signals
0057     void colorsSwapped (const kpColor &newForegroundColor,
0058                         const kpColor &newBackgroundColor);
0059 
0060     void foregroundColorChanged (const kpColor &color);
0061     void backgroundColorChanged (const kpColor &color);
0062 
0063 public:
0064     // (only valid in slots connected to foregroundColorChanged())
0065     kpColor oldForegroundColor () const;
0066     // (only valid in slots connected to backgroundColorChanged())
0067     kpColor oldBackgroundColor () const;
0068 
0069 public:
0070     QSize sizeHint () const override;
0071 
0072 protected:
0073     QRect swapPixmapRect () const;
0074     QRect foregroundBackgroundRect () const;
0075     QRect foregroundRect () const;
0076     QRect backgroundRect () const;
0077 
0078     void dragEnterEvent (QDragEnterEvent *e) override;
0079     void dragMoveEvent (QDragMoveEvent *e) override;
0080     void dropEvent (QDropEvent *e) override;
0081 
0082     void mousePressEvent (QMouseEvent *e) override;
0083     void mouseMoveEvent (QMouseEvent *e) override;
0084     void mouseReleaseEvent (QMouseEvent *e) override;
0085 
0086     void mouseDoubleClickEvent (QMouseEvent *e) override;
0087 
0088     void paintEvent (QPaintEvent *e) override;
0089 
0090     QPoint m_dragStartPoint;
0091     kpColor m_color [2];
0092     kpColor m_oldColor [2];
0093 };
0094 
0095 
0096 #endif  // kpDualColorButton_H