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;
|
||||
|
||||
Reference in New Issue
Block a user