[WIP] Add line thickness to side panel (#374)

* Add thickness slider

* Fix enums compatibility

* Rename ColorPickerWidget to SidePanelWidget
This commit is contained in:
Alfredo Ramos
2018-10-10 16:34:42 -05:00
committed by Dharkael
parent 6c49a227c4
commit da49ed556f
17 changed files with 119 additions and 75 deletions

View File

@@ -140,7 +140,7 @@ SOURCES += src/main.cpp \
src/tools/text/textwidget.cpp \
src/core/capturerequest.cpp \
src/tools/text/textconfig.cpp \
src/widgets/panel/colorpickerwidget.cpp
src/widgets/panel/sidepanelwidget.cpp
HEADERS += src/widgets/capture/buttonhandler.h \
src/widgets/infowindow.h \
@@ -212,7 +212,7 @@ HEADERS += src/widgets/capture/buttonhandler.h \
src/tools/text/textwidget.h \
src/core/capturerequest.h \
src/tools/text/textconfig.h \
src/widgets/panel/colorpickerwidget.h
src/widgets/panel/sidepanelwidget.h
unix:!macx {
SOURCES += src/core/flameshotdbusadapter.cpp \

View File

@@ -27,7 +27,6 @@ class CaptureTool;
class CaptureButton : public QPushButton {
Q_OBJECT
Q_ENUMS(ButtonType)
public:
// Don't forget to add the new types to CaptureButton::iterableButtonTypes
@@ -54,6 +53,12 @@ public:
TYPE_TEXT = 18,
};
#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
Q_ENUMS(ButtonType)
#else
Q_ENUM(ButtonType)
#endif
CaptureButton() = delete;
explicit CaptureButton(const ButtonType, QWidget *parent = nullptr);

View File

@@ -23,7 +23,7 @@
#include "capturewidget.h"
#include "src/widgets/capture/hovereventfilter.h"
#include "src/widgets/panel/colorpickerwidget.h"
#include "src/widgets/panel/sidepanelwidget.h"
#include "src/utils/colorutils.h"
#include "src/utils/globalvalues.h"
#include "src/widgets/capture/notifierbox.h"
@@ -541,16 +541,21 @@ void CaptureWidget::initPanel() {
panelRect.setWidth(m_colorPicker->width() * 3);
m_panel->setGeometry(panelRect);
ColorPickerWidget *colorPicker =
new ColorPickerWidget(&m_context.screenshot);
connect(colorPicker, &ColorPickerWidget::colorChanged,
SidePanelWidget *sidePanel =
new SidePanelWidget(&m_context.screenshot);
connect(sidePanel, &SidePanelWidget::colorChanged,
this, &CaptureWidget::setDrawColor);
connect(sidePanel, &SidePanelWidget::thicknessChanged,
this, &CaptureWidget::setDrawThickness);
connect(this, &CaptureWidget::colorChanged,
colorPicker, &ColorPickerWidget::updateColor);
connect(colorPicker, &ColorPickerWidget::togglePanel,
sidePanel, &SidePanelWidget::updateColor);
connect(this, &CaptureWidget::thicknessChanged,
sidePanel, &SidePanelWidget::updateThickness);
connect(sidePanel, &SidePanelWidget::togglePanel,
m_panel, &UtilityPanel::toggle);
colorPicker->colorChanged(m_context.color);
m_panel->pushWidget(colorPicker);
sidePanel->colorChanged(m_context.color);
sidePanel->thicknessChanged(m_context.thickness);
m_panel->pushWidget(sidePanel);
m_panel->pushWidget(new QUndoView(&m_undoStack, this));
}
@@ -692,6 +697,13 @@ void CaptureWidget::setDrawColor(const QColor &c) {
emit colorChanged(c);
}
void CaptureWidget::setDrawThickness(const int &t)
{
m_context.thickness = qBound(0, t, 100);
ConfigHandler().setdrawThickness(m_context.thickness);
emit thicknessChanged(m_context.thickness);
}
void CaptureWidget::leftResize() {
if (m_selection->isVisible() && m_selection->geometry().right() > m_selection->geometry().left()) {
m_selection->setGeometry(m_selection->geometry() + QMargins(0, 0, -1, 0));

View File

@@ -14,10 +14,10 @@
//
// You should have received a copy of the GNU General Public License
// along with Flameshot. If not, see <http://www.gnu.org/licenses/>.
// Based on Lightscreen areadialog.h, Copyright 2017 Christian Kaiser <info@ckaiser.com.ar>
// released under the GNU GPL2 <https://www.gnu.org/licenses/gpl-2.0.txt>
// Based on KDE's KSnapshot regiongrabber.cpp, revision 796531, Copyright 2007 Luca Gugelmann <lucag@student.ethz.ch>
// released under the GNU LGPL <http://www.gnu.org/licenses/old-licenses/library.txt>
@@ -89,6 +89,7 @@ private slots:
void processTool(CaptureTool *t);
void handleButtonSignal(CaptureTool::Request r);
void setDrawColor(const QColor &c);
void setDrawThickness(const int &t);
protected:
void paintEvent(QPaintEvent *);

View File

@@ -15,7 +15,7 @@
// You should have received a copy of the GNU General Public License
// along with Flameshot. If not, see <http://www.gnu.org/licenses/>.
#include "colorpickerwidget.h"
#include "sidepanelwidget.h"
#include "src/utils/pathinfo.h"
#include "src/utils/colorutils.h"
#include <QVBoxLayout>
@@ -23,12 +23,13 @@
#include <QPushButton>
#include <QLabel>
#include <QKeyEvent>
#include <QSlider>
class QColorPickingEventFilter : public QObject {
public:
explicit QColorPickingEventFilter(
ColorPickerWidget *pw, QObject *parent = 0) :
SidePanelWidget *pw, QObject *parent = nullptr) :
QObject(parent), m_pw(pw) {}
bool eventFilter(QObject *, QEvent *event) override {
@@ -48,22 +49,30 @@ public:
}
private:
ColorPickerWidget *m_pw;
SidePanelWidget *m_pw;
};
////////////////////////
ColorPickerWidget::ColorPickerWidget(QPixmap *p, QWidget *parent) :
SidePanelWidget::SidePanelWidget(QPixmap *p, QWidget *parent) :
QWidget(parent), m_pixmap(p), m_eventFilter(nullptr)
{
m_layout = new QVBoxLayout(this);
QFormLayout *colorForm = new QFormLayout();
m_thicknessSlider = new QSlider(Qt::Horizontal);
m_thicknessSlider->setValue(m_thickness);
m_colorLabel = new QLabel();
m_colorLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
colorForm->addRow(tr("Active thickness:"), m_thicknessSlider);
colorForm->addRow(tr("Active color:"), m_colorLabel);
m_layout->addLayout(colorForm);
connect(m_thicknessSlider, &QSlider::sliderReleased,
this, &SidePanelWidget::updateCurrentThickness);
connect(this, &SidePanelWidget::thicknessChanged,
this, &SidePanelWidget::updateThickness);
QColor background = this->palette().background().color();
bool isDark = ColorUtils::colorIsDark(background);
QString modifier = isDark ? PathInfo::whiteIconPath() :
@@ -72,32 +81,43 @@ ColorPickerWidget::ColorPickerWidget(QPixmap *p, QWidget *parent) :
m_colorGrabButton = new QPushButton(grabIcon, "");
updateGrabButton(false);
connect(m_colorGrabButton, &QPushButton::pressed,
this, &ColorPickerWidget::colorGrabberActivated);
this, &SidePanelWidget::colorGrabberActivated);
m_layout->addWidget(m_colorGrabButton);
m_colorWheel = new color_widgets::ColorWheel(this);
m_colorWheel->setColor(m_color);
connect(m_colorWheel, &color_widgets::ColorWheel::mouseReleaseOnColor, this,
&ColorPickerWidget::colorChanged);
&SidePanelWidget::colorChanged);
connect(m_colorWheel, &color_widgets::ColorWheel::colorChanged, this,
&ColorPickerWidget::updateColorNoWheel);
&SidePanelWidget::updateColorNoWheel);
m_layout->addWidget(m_colorWheel);
}
void ColorPickerWidget::updateColor(const QColor &c) {
void SidePanelWidget::updateColor(const QColor &c) {
m_color = c;
m_colorLabel->setStyleSheet(
QString("QLabel { background-color : %1; }").arg(c.name()));
m_colorWheel->setColor(m_color);
}
void ColorPickerWidget::updateColorNoWheel(const QColor &c) {
void SidePanelWidget::updateThickness(const int &t)
{
m_thickness = qBound(0, t, 100);
m_thicknessSlider->setValue(m_thickness);
}
void SidePanelWidget::updateColorNoWheel(const QColor &c) {
m_color = c;
m_colorLabel->setStyleSheet(
QString("QLabel { background-color : %1; }").arg(c.name()));
}
void ColorPickerWidget::colorGrabberActivated() {
void SidePanelWidget::updateCurrentThickness()
{
emit thicknessChanged(m_thicknessSlider->value());
}
void SidePanelWidget::colorGrabberActivated() {
grabKeyboard();
grabMouse(Qt::CrossCursor);
setMouseTracking(true);
@@ -109,7 +129,7 @@ void ColorPickerWidget::colorGrabberActivated() {
updateGrabButton(true);
}
void ColorPickerWidget::releaseColorGrab() {
void SidePanelWidget::releaseColorGrab() {
setMouseTracking(false);
removeEventFilter(m_eventFilter);
releaseMouse();
@@ -118,7 +138,7 @@ void ColorPickerWidget::releaseColorGrab() {
updateGrabButton(false);
}
QColor ColorPickerWidget::grabPixmapColor(const QPoint &p) {
QColor SidePanelWidget::grabPixmapColor(const QPoint &p) {
QColor c;
if (m_pixmap) {
QPixmap pixel = m_pixmap->copy(QRect(p, p));
@@ -127,7 +147,7 @@ QColor ColorPickerWidget::grabPixmapColor(const QPoint &p) {
return c;
}
bool ColorPickerWidget::handleKeyPress(QKeyEvent *e) {
bool SidePanelWidget::handleKeyPress(QKeyEvent *e) {
if (e->key() == Qt::Key_Space) {
emit togglePanel();
} else if (e->key() == Qt::Key_Escape) {
@@ -141,7 +161,7 @@ bool ColorPickerWidget::handleKeyPress(QKeyEvent *e) {
return true;
}
bool ColorPickerWidget::handleMouseButtonPressed(QMouseEvent *e) {
bool SidePanelWidget::handleMouseButtonPressed(QMouseEvent *e) {
if (m_colorGrabButton->geometry().contains(e->pos()) ||
e->button() == Qt::RightButton)
{
@@ -154,12 +174,12 @@ bool ColorPickerWidget::handleMouseButtonPressed(QMouseEvent *e) {
return true;
}
bool ColorPickerWidget::handleMouseMove(QMouseEvent *e) {
bool SidePanelWidget::handleMouseMove(QMouseEvent *e) {
updateColorNoWheel(grabPixmapColor(e->globalPos()));
return true;
}
void ColorPickerWidget::updateGrabButton(const bool activated) {
void SidePanelWidget::updateGrabButton(const bool activated) {
if (activated) {
m_colorGrabButton->setText(tr("Press ESC to cancel"));
} else {

View File

@@ -24,23 +24,27 @@ class QVBoxLayout;
class QPushButton;
class QLabel;
class QColorPickingEventFilter;
class QSlider;
class ColorPickerWidget : public QWidget {
class SidePanelWidget : public QWidget {
Q_OBJECT
friend class QColorPickingEventFilter;
public:
explicit ColorPickerWidget(QPixmap *p, QWidget *parent = nullptr);
explicit SidePanelWidget(QPixmap *p, QWidget *parent = nullptr);
signals:
void colorChanged(const QColor &c);
void thicknessChanged(const int &t);
void togglePanel();
public slots:
void updateColor(const QColor &c);
void updateThickness(const int &t);
private slots:
void updateColorNoWheel(const QColor &c);
void updateCurrentThickness();
private slots:
void colorGrabberActivated();
@@ -62,6 +66,8 @@ private:
QPixmap *m_pixmap;
QColor m_colorBackup;
QColor m_color;
QSlider *m_thicknessSlider;
int m_thickness;
QColorPickingEventFilter *m_eventFilter;
};

View File

@@ -106,19 +106,19 @@ Press Space to open the side panel.</source>
</message>
</context>
<context>
<name>ColorPickerWidget</name>
<name>SidePanelWidget</name>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="64"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="64"/>
<source>Active color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="164"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="164"/>
<source>Press ESC to cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="166"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="166"/>
<source>Grab Color</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -109,19 +109,19 @@ Presiona Espacion para abrir el panel lateral.</translation>
</message>
</context>
<context>
<name>ColorPickerWidget</name>
<name>SidePanelWidget</name>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="64"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="64"/>
<source>Active color:</source>
<translation>Color activo:</translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="164"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="164"/>
<source>Press ESC to cancel</source>
<translation>Presiona Esc para cancelar</translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="166"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="166"/>
<source>Grab Color</source>
<translation>Tomar Color</translation>
</message>

View File

@@ -105,19 +105,19 @@ Press Space to open the side panel.</source>
</message>
</context>
<context>
<name>ColorPickerWidget</name>
<name>SidePanelWidget</name>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="64"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="64"/>
<source>Active color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="164"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="164"/>
<source>Press ESC to cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="166"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="166"/>
<source>Grab Color</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -109,19 +109,19 @@ Enter を押すと画面をキャプチャー。
</message>
</context>
<context>
<name>ColorPickerWidget</name>
<name>SidePanelWidget</name>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="64"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="64"/>
<source>Active color:</source>
<translation>:</translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="164"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="164"/>
<source>Press ESC to cancel</source>
<translation>ESC </translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="166"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="166"/>
<source>Grab Color</source>
<translation></translation>
</message>

View File

@@ -105,19 +105,19 @@ Press Space to open the side panel.</source>
</message>
</context>
<context>
<name>ColorPickerWidget</name>
<name>SidePanelWidget</name>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="64"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="64"/>
<source>Active color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="164"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="164"/>
<source>Press ESC to cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="166"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="166"/>
<source>Grab Color</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -108,19 +108,19 @@ Spacja, aby pokazać panel boczny.</translation>
</message>
</context>
<context>
<name>ColorPickerWidget</name>
<name>SidePanelWidget</name>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="64"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="64"/>
<source>Active color:</source>
<translation>Aktywny kolor:</translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="164"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="164"/>
<source>Press ESC to cancel</source>
<translation>Wciśnij ESC, aby anulować</translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="166"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="166"/>
<source>Grab Color</source>
<translation>Pobierz kolor</translation>
</message>

View File

@@ -109,19 +109,19 @@ Pressione espaço abrir o painel lateral.</translation>
</message>
</context>
<context>
<name>ColorPickerWidget</name>
<name>SidePanelWidget</name>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="64"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="64"/>
<source>Active color:</source>
<translation>Cor ativa:</translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="164"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="164"/>
<source>Press ESC to cancel</source>
<translation>Presione Esc para cancelar</translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="166"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="166"/>
<source>Grab Color</source>
<translation>Usar Cor</translation>
</message>

View File

@@ -105,19 +105,19 @@ Press Space to open the side panel.</source>
</message>
</context>
<context>
<name>ColorPickerWidget</name>
<name>SidePanelWidget</name>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="64"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="64"/>
<source>Active color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="164"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="164"/>
<source>Press ESC to cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="166"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="166"/>
<source>Grab Color</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -109,19 +109,19 @@ Yan paneli açmak için Boşluk tuşuna basın.</translation>
</message>
</context>
<context>
<name>ColorPickerWidget</name>
<name>SidePanelWidget</name>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="64"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="64"/>
<source>Active color:</source>
<translation>Aktif Renk:</translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="164"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="164"/>
<source>Press ESC to cancel</source>
<translation>Çıkmak için ESC&apos;ye tıklayın</translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="166"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="166"/>
<source>Grab Color</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -110,19 +110,19 @@ Press Space to open the side panel.</source>
</message>
</context>
<context>
<name>ColorPickerWidget</name>
<name>SidePanelWidget</name>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="64"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="64"/>
<source>Active color:</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="164"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="164"/>
<source>Press ESC to cancel</source>
<translation> ESC </translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="166"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="166"/>
<source>Grab Color</source>
<translation></translation>
</message>

View File

@@ -105,19 +105,19 @@ Press Space to open the side panel.</source>
</message>
</context>
<context>
<name>ColorPickerWidget</name>
<name>SidePanelWidget</name>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="64"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="64"/>
<source>Active color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="164"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="164"/>
<source>Press ESC to cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/panel/colorpickerwidget.cpp" line="166"/>
<location filename="../src/widgets/panel/sidepanelwidget.cpp" line="166"/>
<source>Grab Color</source>
<translation type="unfinished"></translation>
</message>