mirror of
https://github.com/fergalmoran/flameshot.git
synced 2025-12-28 20:59:31 +00:00
Implement tool thickness via keyboard (#1882)
* Implement changing tool size by keyboard Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com> * Fix very poor performance when changing thickness * Make thickness get saved to config Signed-off-by: Haris Gušić <harisgusic.dev@gmail.com>
This commit is contained in:
@@ -69,6 +69,7 @@ CaptureWidget::CaptureWidget(uint id,
|
||||
, m_selection(nullptr)
|
||||
, m_existingObjectIsChanged(false)
|
||||
, m_startMove(false)
|
||||
, m_thicknessByKeyboard(0)
|
||||
{
|
||||
m_undoStack.setUndoLimit(ConfigHandler().undoLimit());
|
||||
|
||||
@@ -193,6 +194,8 @@ CaptureWidget::CaptureWidget(uint id,
|
||||
connect(m_notifierBox, &NotifierBox::hidden, this, [this]() {
|
||||
// Show cursor if it was hidden while adjusting tool thickness
|
||||
updateCursor();
|
||||
m_thicknessByKeyboard = 0;
|
||||
setDrawThickness(m_context.thickness);
|
||||
});
|
||||
|
||||
initPanel();
|
||||
@@ -762,10 +765,9 @@ void CaptureWidget::moveSelection(QPoint p)
|
||||
adjustSelection(QMargins(-p.x(), -p.y(), p.x(), p.y()));
|
||||
}
|
||||
|
||||
void CaptureWidget::updateThickness(int thicknessOffset)
|
||||
void CaptureWidget::updateThickness(int thickness)
|
||||
{
|
||||
m_context.thickness += thicknessOffset;
|
||||
m_context.thickness = qBound(1, m_context.thickness, 100);
|
||||
m_context.thickness = qBound(1, thickness, 100);
|
||||
|
||||
QPoint topLeft =
|
||||
QGuiAppCurrentScreen().currentScreen()->geometry().topLeft();
|
||||
@@ -788,7 +790,6 @@ void CaptureWidget::updateThickness(int thicknessOffset)
|
||||
m_existingObjectIsChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
emit thicknessChanged(m_context.thickness);
|
||||
}
|
||||
|
||||
@@ -814,6 +815,20 @@ void CaptureWidget::moveDown()
|
||||
|
||||
void CaptureWidget::keyPressEvent(QKeyEvent* e)
|
||||
{
|
||||
// If the key is a digit, change the thickness
|
||||
bool ok;
|
||||
int digit = e->text().toInt(&ok);
|
||||
if (ok && e->modifiers() == Qt::NoModifier) { // digit received
|
||||
m_thicknessByKeyboard = 10 * m_thicknessByKeyboard + digit;
|
||||
updateThickness(m_thicknessByKeyboard);
|
||||
if (m_context.thickness != m_thicknessByKeyboard) {
|
||||
// The thickness was out of range and was clipped by updateThickness
|
||||
m_thicknessByKeyboard = 0;
|
||||
}
|
||||
} else {
|
||||
m_thicknessByKeyboard = 0;
|
||||
}
|
||||
|
||||
if (!m_selection->isVisible()) {
|
||||
return;
|
||||
} else if (e->key() == Qt::Key_Control) {
|
||||
@@ -866,7 +881,7 @@ void CaptureWidget::wheelEvent(QWheelEvent* e)
|
||||
}
|
||||
}
|
||||
|
||||
updateThickness(thicknessOffset);
|
||||
updateThickness(m_context.thickness + thicknessOffset);
|
||||
}
|
||||
|
||||
void CaptureWidget::resizeEvent(QResizeEvent* e)
|
||||
@@ -1166,10 +1181,10 @@ void CaptureWidget::handleToolSignal(CaptureTool::Request r)
|
||||
}
|
||||
break;
|
||||
case CaptureTool::REQ_INCREASE_TOOL_SIZE:
|
||||
updateThickness(1);
|
||||
updateThickness(m_context.thickness + 1);
|
||||
break;
|
||||
case CaptureTool::REQ_DECREASE_TOOL_SIZE:
|
||||
updateThickness(-1);
|
||||
updateThickness(m_context.thickness - 1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -152,6 +152,7 @@ private:
|
||||
|
||||
// Outside selection opacity
|
||||
int m_opacity;
|
||||
int m_thicknessByKeyboard;
|
||||
|
||||
// utility flags
|
||||
bool m_mouseIsClicked;
|
||||
|
||||
@@ -14,7 +14,7 @@ NotifierBox::NotifierBox(QWidget* parent)
|
||||
{
|
||||
m_timer = new QTimer(this);
|
||||
m_timer->setSingleShot(true);
|
||||
m_timer->setInterval(1200);
|
||||
m_timer->setInterval(600);
|
||||
connect(m_timer, &QTimer::timeout, this, &NotifierBox::hide);
|
||||
m_bgColor = ConfigHandler().uiMainColorValue();
|
||||
m_foregroundColor =
|
||||
|
||||
@@ -65,9 +65,9 @@ SidePanelWidget::SidePanelWidget(QPixmap* p, QWidget* parent)
|
||||
m_layout->addLayout(colorForm);
|
||||
|
||||
connect(m_thicknessSlider,
|
||||
&QSlider::valueChanged,
|
||||
&QSlider::sliderMoved,
|
||||
this,
|
||||
&SidePanelWidget::updateCurrentThickness);
|
||||
&SidePanelWidget::thicknessChanged);
|
||||
connect(this,
|
||||
&SidePanelWidget::thicknessChanged,
|
||||
this,
|
||||
@@ -120,11 +120,6 @@ void SidePanelWidget::updateColorNoWheel(const QColor& c)
|
||||
QStringLiteral("QLabel { background-color : %1; }").arg(c.name()));
|
||||
}
|
||||
|
||||
void SidePanelWidget::updateCurrentThickness(int value)
|
||||
{
|
||||
emit thicknessChanged(value);
|
||||
}
|
||||
|
||||
void SidePanelWidget::colorGrabberActivated()
|
||||
{
|
||||
grabKeyboard();
|
||||
|
||||
@@ -32,7 +32,6 @@ public slots:
|
||||
|
||||
private slots:
|
||||
void updateColorNoWheel(const QColor& c);
|
||||
void updateCurrentThickness(int value);
|
||||
|
||||
private slots:
|
||||
void colorGrabberActivated();
|
||||
|
||||
Reference in New Issue
Block a user