feat: drawing popout now clips strokes again + add redo + add undo and redo keybinds
C++ / fmt (pull_request) Failing after 6s
C++ / build (pull_request) Failing after 12s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 9s
JS/TS / lint (pull_request) Successful in 9s
Python / static (pull_request) Successful in 28s
Python / verify (pull_request) Failing after 1m41s
Rust / build (pull_request) Successful in 1m15s
Rust / fmt (pull_request) Successful in 42s
Rust / clippy (pull_request) Successful in 1m6s
C++ / fmt (pull_request) Failing after 6s
C++ / build (pull_request) Failing after 12s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 9s
JS/TS / lint (pull_request) Successful in 9s
Python / static (pull_request) Successful in 28s
Python / verify (pull_request) Failing after 1m41s
Rust / build (pull_request) Successful in 1m15s
Rust / fmt (pull_request) Successful in 42s
Rust / clippy (pull_request) Successful in 1m6s
This commit is contained in:
@@ -71,11 +71,23 @@ static QCanvasPath buildStrokePath(
|
||||
|
||||
void StrokeCanvasItem::undoLastGroup() {
|
||||
if (m_strokes.isEmpty()) return;
|
||||
|
||||
const int lastGroup = m_strokes.last().groupId;
|
||||
|
||||
QVector<Stroke> group;
|
||||
for (int i = static_cast<int>(m_strokes.size()) - 1;
|
||||
i >= 0 && m_strokes[i].groupId == lastGroup;
|
||||
--i)
|
||||
m_strokes.remove(i);
|
||||
group.prepend(m_strokes.takeAt(i));
|
||||
|
||||
m_redoStack.append(group);
|
||||
update();
|
||||
}
|
||||
|
||||
void StrokeCanvasItem::redo() {
|
||||
if (m_redoStack.isEmpty()) return;
|
||||
|
||||
m_strokes.append(m_redoStack.takeLast());
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -106,19 +118,14 @@ void StrokeCanvasItem::setHoverPoint(const QPointF& point) {
|
||||
emit hoverPointChanged();
|
||||
}
|
||||
|
||||
void StrokeCanvasItem::showHover(qreal x, qreal y) {
|
||||
const QPointF newPoint{x, y};
|
||||
const bool pointChanged = (m_hoverPoint != newPoint);
|
||||
const bool visibleChanged = !m_hoverVisible;
|
||||
void StrokeCanvasItem::showHover() {
|
||||
if (m_hoverVisible) return;
|
||||
|
||||
|
||||
if (pointChanged || visibleChanged) {
|
||||
m_hoverVisible = true;
|
||||
m_hoverPoint = newPoint;
|
||||
if (pointChanged) emit hoverPointChanged();
|
||||
if (visibleChanged) emit hoverVisibleChanged();
|
||||
update();
|
||||
}
|
||||
m_hoverVisible = true;
|
||||
update();
|
||||
|
||||
emit hoverVisibleChanged();
|
||||
}
|
||||
|
||||
void StrokeCanvasItem::hideHover() {
|
||||
@@ -139,6 +146,24 @@ void StrokeCanvasItem::setPenWidth(qreal width) {
|
||||
emit penWidthChanged();
|
||||
}
|
||||
|
||||
void StrokeCanvasItem::setHole(const QRectF& hole) {
|
||||
if (m_hole == hole) return;
|
||||
|
||||
m_hole = hole;
|
||||
update();
|
||||
|
||||
emit holeChanged();
|
||||
}
|
||||
|
||||
void StrokeCanvasItem::setHoleRadius(qreal radius) {
|
||||
if (qFuzzyCompare(m_holeRadius, radius)) return;
|
||||
|
||||
m_holeRadius = radius;
|
||||
update();
|
||||
|
||||
emit holeRadiusChanged();
|
||||
}
|
||||
|
||||
void StrokeCanvasItem::beginStroke(qreal x, qreal y, bool polyline) {
|
||||
m_isDrawing = true;
|
||||
m_currentStroke.points.clear();
|
||||
@@ -199,6 +224,7 @@ void StrokeCanvasItem::endStroke() {
|
||||
m_currentStroke.points.clear();
|
||||
m_strokes.append(m_currentStroke);
|
||||
m_currentStroke = {};
|
||||
m_redoStack.clear();
|
||||
|
||||
update();
|
||||
}
|
||||
@@ -206,6 +232,7 @@ void StrokeCanvasItem::endStroke() {
|
||||
void StrokeCanvasItem::clear() {
|
||||
m_strokes.clear();
|
||||
m_currentStroke = {};
|
||||
m_redoStack.clear();
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user