diff --git a/capture/capturemodification.cpp b/capture/capturemodification.cpp
index f3d244f3..b3e0a316 100644
--- a/capture/capturemodification.cpp
+++ b/capture/capturemodification.cpp
@@ -16,22 +16,20 @@
// along with Flameshot. If not, see .
#include "capturemodification.h"
-#include
#include
// CaptureModification is a single modification in the screenshot drawn
// by the user.
CaptureModification::CaptureModification(
- const Button::Type t, QPoint p) : m_type(t) {
+ const Button::Type t, QPoint p, const QColor c) : m_type(t) {
m_coords.append(p);
if (m_type == Button::Type::circle || m_type == Button::Type::rectangle
|| m_type == Button::Type::arrow || m_type == Button::Type::line ||
m_type == Button::Type::marker) {
m_coords.append(p);
}
- QSettings settings;
- m_color = settings.value("drawColor").value();
+ m_color = c;
}
CaptureModification::CaptureModification() {
diff --git a/capture/capturemodification.h b/capture/capturemodification.h
index ac34ddd4..aea9ee47 100644
--- a/capture/capturemodification.h
+++ b/capture/capturemodification.h
@@ -26,7 +26,7 @@ class QPoint;
class CaptureModification {
public:
CaptureModification();
- CaptureModification(const Button::Type, const QPoint);
+ CaptureModification(const Button::Type, const QPoint, const QColor);
Button::Type getType() const;
QColor getColor() const;
QVector getPoints() const;
diff --git a/capture/capturewidget.cpp b/capture/capturewidget.cpp
index c6f459d1..22d57438 100644
--- a/capture/capturewidget.cpp
+++ b/capture/capturewidget.cpp
@@ -53,8 +53,8 @@ namespace {
CaptureWidget::CaptureWidget(QWidget *parent) :
QWidget(parent), m_mouseOverHandle(0), m_mouseIsClicked(false),
- m_newSelection(false), m_grabbing(false), m_onButton(false),
- m_state(Button::Type::move) {
+ m_rightClick(false), m_newSelection(false), m_grabbing(false),
+ m_onButton(false), m_state(Button::Type::move) {
setAttribute(Qt::WA_DeleteOnClose);
// create selection handlers
@@ -151,6 +151,8 @@ void CaptureWidget::paintEvent(QPaintEvent *) {
void CaptureWidget::mousePressEvent(QMouseEvent *e) {
if (e->button() == Qt::RightButton) {
+ m_rightClick = true;
+ setCursor(Qt::ArrowCursor);
m_colorPicker->move(e->pos().x()-m_colorPicker->width()/2,
e->pos().y()-m_colorPicker->height()/2);
m_colorPicker->show();
@@ -160,7 +162,8 @@ void CaptureWidget::mousePressEvent(QMouseEvent *e) {
if (e->button() == Qt::LeftButton) {
m_mouseIsClicked = true;
if (m_state != Button::Type::move) {
- m_modifications.append(CaptureModification(m_state, e->pos()));
+ m_modifications.append(CaptureModification(m_state, e->pos(),
+ m_colorPicker->getDrawColor()));
return;
}
m_dragStartPoint = e->pos();
@@ -256,7 +259,10 @@ void CaptureWidget::mouseMoveEvent(QMouseEvent *e) {
if (!found) {
m_mouseOverHandle = 0;
- if (m_selection.contains(e->pos()) && !m_onButton &&
+
+ if (m_rightClick) {
+ setCursor(Qt::ArrowCursor);
+ } else if (m_selection.contains(e->pos()) && !m_onButton &&
m_state == Button::Type::move) {
setCursor(Qt::OpenHandCursor);
} else if (m_onButton) {
@@ -283,6 +289,7 @@ void CaptureWidget::mouseMoveEvent(QMouseEvent *e) {
void CaptureWidget::mouseReleaseEvent(QMouseEvent *e) {
if (e->button() == Qt::RightButton) {
m_colorPicker->hide();
+ m_rightClick = false;
return;
}
diff --git a/capture/capturewidget.h b/capture/capturewidget.h
index 28f9adaa..01470f66 100644
--- a/capture/capturewidget.h
+++ b/capture/capturewidget.h
@@ -84,6 +84,7 @@ protected:
QRect m_selectionBeforeDrag;
// utility flags
bool m_mouseIsClicked;
+ bool m_rightClick;
bool m_newSelection;
bool m_grabbing;
bool m_onButton;
diff --git a/capture/colorpicker.cpp b/capture/colorpicker.cpp
index be6f00b8..8f4f1f69 100644
--- a/capture/colorpicker.cpp
+++ b/capture/colorpicker.cpp
@@ -1,17 +1,25 @@
-#include "colorpicker.h"
+#include "colorpicker.h"
#include
+#include
+#include
#include
ColorPicker::ColorPicker(QWidget *parent) : QWidget(parent),
m_colorAreaSize(18) {
setMouseTracking(true);
+ QSettings settings;
+ m_uiColor = settings.value("uiColor").value();
+ m_drawColor = settings.value("drawColor").value();
+ const int extraSize = 6;
double radius = (colorList.size()*m_colorAreaSize/1.3)/(3.141592);
- resize(radius*2 + m_colorAreaSize, radius*2 + m_colorAreaSize);
+ resize(radius*2 + m_colorAreaSize + extraSize,
+ radius*2 + m_colorAreaSize+ extraSize);
double degree = 360 / (colorList.size());
double degreeAcum = degree;
- QLineF baseLine = QLineF(QPoint(radius, radius), QPoint(radius*2, radius));
+ QLineF baseLine = QLineF(QPoint(radius+extraSize/2, radius+extraSize/2),
+ QPoint(radius*2, radius));
for (int i = 0; i rects = handleMask();
painter.setPen(QColor(Qt::black));
for(int i = 0; i < rects.size(); ++i) {
+ if (m_drawColor == QColor(colorList.at(i))) {
+ QColor c = QColor(m_uiColor);
+ c.setAlpha(155);
+ painter.setBrush(c);
+ c.setAlpha(100);
+ painter.setPen(c);
+ QRect highlight = rects.at(i);
+ highlight.moveTo(highlight.x() - 3, highlight.y() - 3);
+ highlight.setHeight(highlight.height() + 6);
+ highlight.setWidth(highlight.width() + 6);
+ painter.drawRoundRect(highlight, 100, 100);
+ painter.setPen(QColor(Qt::black));
+ }
painter.setBrush(QColor(colorList.at(i)));
painter.drawRoundRect(rects.at(i), 100, 100);
}
}
+void ColorPicker::mouseMoveEvent(QMouseEvent *e) {
+ for(int i = 0; i < colorList.size(); ++i) {
+ if (m_colorAreaList.at(i).contains(e->pos())) {
+ m_drawColor = colorList.at(i);
+ update();
+ break;
+ }
+ }
+}
+
QVector ColorPicker::handleMask() const {
QVector areas;
for(QRect rect: m_colorAreaList) {
@@ -48,9 +87,8 @@ QVector ColorPicker::colorList = {
Qt::yellow,
Qt::green,
Qt::darkGreen,
- Qt::darkCyan,
- Qt::blue,
Qt::cyan,
+ Qt::blue,
Qt::magenta,
Qt::darkMagenta
};
diff --git a/capture/colorpicker.h b/capture/colorpicker.h
index 4ecf67a1..8cffaab5 100644
--- a/capture/colorpicker.h
+++ b/capture/colorpicker.h
@@ -8,10 +8,15 @@ class ColorPicker : public QWidget
Q_OBJECT
public:
explicit ColorPicker(QWidget *parent = 0);
+ ~ColorPicker();
static QVector colorList;
+ QColor getDrawColor();
+
protected:
void paintEvent(QPaintEvent *);
+ void mouseMoveEvent(QMouseEvent *);
+
QVector handleMask() const;
signals:
@@ -21,6 +26,8 @@ public slots:
private:
const int m_colorAreaSize;
QVector m_colorAreaList;
+
+ QColor m_uiColor, m_drawColor;
};
#endif // COLORPICKER_H