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:
Haris Gušić
2021-09-11 19:57:43 +02:00
committed by GitHub
parent 23cf19308b
commit 9147d4ea03
5 changed files with 26 additions and 16 deletions

View File

@@ -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;