#include <QtCore>
#include <QWidget>
+#include <QFrame>
-class QSpinBox;
+class QFrame;
#ifdef Q_WS_X11
-class KCDPickerFilter;
+#include <X11/Xlib.h>
#endif
+
+class MyFrame : public QFrame
+{
+ Q_OBJECT
+public:
+ explicit MyFrame(QWidget* parent = 0);
+
+protected:
+ void hideEvent ( QHideEvent * event );
+
+signals:
+ void getColor();
+};
+
/**
* @class ColorPickerWidget
* @brief A widget to pick a color anywhere on the screen.
* @author Till Theato
*
- * The code is based on the color picker in KColorDialog.
+ * The code is partially based on the color picker in KColorDialog.
*/
class ColorPickerWidget : public QWidget
public:
/** @brief Sets up the widget. */
- ColorPickerWidget(QWidget *parent = 0);
+ explicit ColorPickerWidget(QWidget *parent = 0);
/** @brief Makes sure the event filter is removed. */
virtual ~ColorPickerWidget();
protected:
- virtual void mousePressEvent(QMouseEvent *event);
- virtual void mouseReleaseEvent(QMouseEvent *event);
- virtual void keyPressEvent(QKeyEvent *event);
+ void mousePressEvent(QMouseEvent *event);
+ void mouseReleaseEvent(QMouseEvent *event);
+ void mouseMoveEvent(QMouseEvent *event);
+ bool eventFilter(QObject *object, QEvent *event);
private:
/** @brief Closes the event filter and makes mouse and keyboard work again on other widgets/windows. */
void closeEventFilter();
- /** @brief Calculates the average color for a rect around @param pos with m_size->value() as width. */
- QColor averagePickedColor(const QPoint pos);
+
+ /** @brief Color of the screen at point @param p.
+ * @param p Position of color requested
+ * @param destroyImage (optional) Whether or not to keep the XImage in m_image
+ (needed for fast processing of rects) */
+ QColor grabColor(const QPoint &p, bool destroyImage = true);
+
bool m_filterActive;
- QSpinBox *m_size;
+ QRect m_grabRect;
+ QFrame *m_grabRectFrame;
#ifdef Q_WS_X11
- KCDPickerFilter *m_filter;
-#endif
-
+ XImage *m_image;
+#else
+ QImage m_image;
+#endif
+
private slots:
/** @brief Sets up an event filter for picking a color. */
void slotSetupEventFilter();
+ /** @brief Calculates the average color for the pixels in the rect m_grabRect and emits colorPicked. */
+ void slotGetAverageColor();
+
signals:
- void colorPicked(QColor);
+ void colorPicked(const QColor&);
+ void displayMessage(const QString&, int);
+ /** @brief When user wants to pick a color, it's better to disable filter so we get proper color values. */
+ void disableCurrentFilter(bool);
};
#endif