Skip to content

Commit

Permalink
Pass tool constraints to Tool::end
Browse files Browse the repository at this point in the history
That is, if Shift or Alt are held. Needed in the next commit.
  • Loading branch information
askmeaboutlo0m committed Jul 14, 2024
1 parent 8d9a269 commit 7e881ed
Show file tree
Hide file tree
Showing 34 changed files with 89 additions and 70 deletions.
15 changes: 7 additions & 8 deletions src/desktop/scene/canvasview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1028,13 +1028,6 @@ void CanvasView::onPenMove(
}
}

void CanvasView::onPenUp()
{
if(!m_locked && m_penmode == PenMode::Normal) {
emit penUp();
}
}

void CanvasView::penPressEvent(
QEvent *event, long long timeMsec, const QPointF &pos, qreal pressure,
qreal xtilt, qreal ytilt, qreal rotation, Qt::MouseButton button,
Expand Down Expand Up @@ -1285,7 +1278,13 @@ void CanvasView::penReleaseEvent(
m_pendown == TABLETDOWN ||
((button == Qt::LeftButton || button == Qt::RightButton) &&
m_pendown == MOUSEDOWN)) {
onPenUp();
if(!m_locked && m_penmode == PenMode::Normal) {
CanvasShortcuts::ConstraintMatch constraintMatch =
m_canvasShortcuts.matchConstraints(modifiers, m_keysDown);
emit penUp(
constraintMatch.toolConstraint1(),
constraintMatch.toolConstraint2());
}
m_pendown = NOTDOWN;

m_hoveringOverHud = m_scene->checkHover(mapToScene(pos.toPoint())) !=
Expand Down
3 changes: 1 addition & 2 deletions src/desktop/scene/canvasview.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ class CanvasView final : public QGraphicsView {
const QPointF &viewPos);
void penHover(
const QPointF &point, qreal angle, qreal zoom, bool mirror, bool flip);
void penUp();
void penUp(bool constrain, bool center);
void quickAdjust(qreal value);
void coordinatesChanged(const QPointF &coordinates);

Expand Down Expand Up @@ -326,7 +326,6 @@ private slots:
void onPenMove(
const canvas::Point &p, bool right, bool constrain1, bool constrain2,
const QPointF &viewPos);
void onPenUp();

void flushTouchDrawBuffer();

Expand Down
6 changes: 5 additions & 1 deletion src/desktop/view/canvascontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1627,7 +1627,11 @@ void CanvasController::penReleaseEvent(
m_penState == PenState::MouseDown)) {

if(!m_locked && m_penMode == PenMode::Normal) {
emit penUp();
CanvasShortcuts::ConstraintMatch constraintMatch =
m_canvasShortcuts.matchConstraints(modifiers, m_keysDown);
emit penUp(
constraintMatch.toolConstraint1(),
constraintMatch.toolConstraint2());
}
m_penState = PenState::Up;

Expand Down
2 changes: 1 addition & 1 deletion src/desktop/view/canvascontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ class CanvasController : public QObject {
const QPointF &viewPos);
void penHover(
const QPointF &point, qreal angle, qreal zoom, bool mirror, bool flip);
void penUp();
void penUp(bool constrain, bool center);
void coordinatesChanged(const QPointF &coordinates);
void quickAdjust(qreal value);
void cursorChanged(const QCursor &cursor);
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/document.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ void Document::onSessionResetted()
// Cancel any possibly active local drawing process.
// This prevents jumping lines across the canvas if it shifts.
m_toolctrl->cancelMultipartDrawing();
m_toolctrl->endDrawing();
m_toolctrl->endDrawing(false, false);

emit sessionResetState(m_canvas->paintEngine()->viewCanvasState());

Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/annotation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ void Annotation::motion(const MotionParams &params)
* If we have a selected annotation, adjust its shape.
* Otherwise, create a new annotation.
*/
void Annotation::end()
void Annotation::end(const EndParams &)
{
if(m_selectedId == 0)
return;
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/annotation.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class Annotation final : public Tool {

void begin(const BeginParams &params) override;
void motion(const MotionParams &params) override;
void end() override;
void end(const EndParams &params) override;

private:
/// Where the annotation was grabbed
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/beziertool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void BezierTool::hover(const HoverParams &params)
}
}

void BezierTool::end()
void BezierTool::end(const EndParams &)
{
const int s = m_points.size();

Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/beziertool.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class BezierTool final : public Tool {
void begin(const BeginParams &params) override;
void motion(const MotionParams &params) override;
void hover(const HoverParams &params) override;
void end() override;
void end(const EndParams &params) override;
void finishMultipart() override;
void cancelMultipart() override;
void undoMultipart() override;
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/colorpicker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ void ColorPicker::motion(const MotionParams &params)
}
}

void ColorPicker::end()
void ColorPicker::end(const EndParams &)
{
m_picking = false;
}
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/colorpicker.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class ColorPicker final : public Tool {

void begin(const BeginParams &params) override;
void motion(const MotionParams &params) override;
void end() override;
void end(const EndParams &params) override;

//! Pick from the current active layer only?
void setPickFromCurrentLayer(bool p) { m_pickFromCurrentLayer = p; }
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/floodfill.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ void FloodFill::motion(const MotionParams &params)
Q_UNUSED(params);
}

void FloodFill::end() {}
void FloodFill::end(const EndParams &) {}

bool FloodFill::isMultipart() const
{
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/floodfill.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class FloodFill final : public Tool {

void begin(const BeginParams &params) override;
void motion(const MotionParams &params) override;
void end() override;
void end(const EndParams &params) override;
bool isMultipart() const override;
void finishMultipart() override;
void undoMultipart() override;
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/freehand.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ void Freehand::motion(const MotionParams &params)
m_brushEngine.sendMessagesTo(m_owner.client());
}

void Freehand::end()
void Freehand::end(const EndParams &)
{
if(m_drawing) {
m_drawing = false;
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/freehand.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class Freehand final : public Tool {

void begin(const BeginParams &params) override;
void motion(const MotionParams &params) override;
void end() override;
void end(const EndParams &params) override;

bool usesBrushColor() const override { return true; }

Expand Down
19 changes: 12 additions & 7 deletions src/libclient/tools/inspector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,14 @@ void Inspector::motion(const MotionParams &params)
}
}

void Inspector::end()
void Inspector::end(const EndParams &)
{
m_inspecting = false;
canvas::CanvasModel *canvas = m_owner.model();
if(canvas) {
canvas->stopInspectingCanvas();
}
endInspecting();
}

void Inspector::cancelMultipart()
{
end();
endInspecting();
}

void Inspector::inspect(const QPointF &point, bool clobber) const
Expand All @@ -49,4 +45,13 @@ void Inspector::inspect(const QPointF &point, bool clobber) const
}
}

void Inspector::endInspecting()
{
m_inspecting = false;
canvas::CanvasModel *canvas = m_owner.model();
if(canvas) {
canvas->stopInspectingCanvas();
}
}

}
3 changes: 2 additions & 1 deletion src/libclient/tools/inspector.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@ class Inspector final : public Tool {

void begin(const BeginParams &params) override;
void motion(const MotionParams &params) override;
void end() override;
void end(const EndParams &params) override;

void cancelMultipart() override;

void setShowTiles(bool showTiles) { m_showTiles = showTiles; }

private:
void inspect(const QPointF &point, bool clobber) const;
void endInspecting();

bool m_inspecting = false;
bool m_showTiles = false;
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/laser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ void LaserPointer::motion(const MotionParams &params)
}
}

void LaserPointer::end()
void LaserPointer::end(const EndParams &)
{
if(m_drawing) {
m_drawing = false;
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/laser.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class LaserPointer final : public Tool {

void begin(const BeginParams &params) override;
void motion(const MotionParams &params) override;
void end() override;
void end(const EndParams &params) override;

void setPersistence(int p) { m_persistence = p; }

Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/magicwand.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ void MagicWandTool::motion(const MotionParams &params)
Q_UNUSED(params);
}

void MagicWandTool::end() {}
void MagicWandTool::end(const EndParams &) {}

bool MagicWandTool::isMultipart() const
{
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/magicwand.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class MagicWandTool final : public Tool {

void begin(const BeginParams &params) override;
void motion(const MotionParams &params) override;
void end() override;
void end(const EndParams &params) override;
bool isMultipart() const override;
void finishMultipart() override;
void undoMultipart() override;
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/pan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ void PanTool::motion(const MotionParams &params)
}
}

void PanTool::end()
void PanTool::end(const EndParams &)
{
if(m_panning) {
setCursor(Qt::OpenHandCursor);
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/pan.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class PanTool final : public Tool {

void begin(const BeginParams &params) override;
void motion(const MotionParams &params) override;
void end() override;
void end(const EndParams &params) override;

private:
QPointF m_lastViewPos;
Expand Down
47 changes: 26 additions & 21 deletions src/libclient/tools/selection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,32 +35,14 @@ void SelectionTool::motion(const MotionParams &params)
}
}

void SelectionTool::end()
void SelectionTool::end(const EndParams &)
{
m_clickDetector.end();
if(m_op != -1) {
bool isClick = m_clickDetector.isClick();
if(isClick && isInsideSelection(startPoint())) {
cancelSelection();
emit m_owner.transformRequested();
} else {
net::Client *client = m_owner.client();
uint8_t contextId = client->myId();
net::MessageList msgs = m_op != defaultOp() || !isClick
? endSelection(contextId)
: endDeselection(contextId);
if(!msgs.isEmpty()) {
msgs.prepend(net::makeUndoPointMessage(contextId));
client->sendMessages(msgs.size(), msgs.constData());
}
}
m_op = -1;
}
endSelection(true);
}

void SelectionTool::finishMultipart()
{
end();
endSelection(false);
}

void SelectionTool::cancelMultipart()
Expand Down Expand Up @@ -120,6 +102,29 @@ void SelectionTool::removeSelectionPreview() const
updateSelectionPreview(QPainterPath());
}

void SelectionTool::endSelection(bool click)
{
m_clickDetector.end();
if(m_op != -1) {
bool isClick = click && m_clickDetector.isClick();
if(isClick && isInsideSelection(startPoint())) {
cancelSelection();
emit m_owner.transformRequested();
} else {
net::Client *client = m_owner.client();
uint8_t contextId = client->myId();
net::MessageList msgs = m_op != defaultOp() || !isClick
? endSelection(contextId)
: endDeselection(contextId);
if(!msgs.isEmpty()) {
msgs.prepend(net::makeUndoPointMessage(contextId));
client->sendMessages(msgs.size(), msgs.constData());
}
}
m_op = -1;
}
}

net::MessageList SelectionTool::endDeselection(uint8_t contextId)
{
cancelSelection();
Expand Down
3 changes: 2 additions & 1 deletion src/libclient/tools/selection.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class SelectionTool : public Tool {

void begin(const BeginParams &params) final override;
void motion(const MotionParams &params) final override;
void end() override;
void end(const EndParams &params) override;

void finishMultipart() override final;
void cancelMultipart() override final;
Expand All @@ -51,6 +51,7 @@ class SelectionTool : public Tool {
virtual net::MessageList endSelection(uint8_t contextId) = 0;

private:
void endSelection(bool click);
net::MessageList endDeselection(uint8_t contextId);
bool isInsideSelection(const QPointF &point) const;

Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/shapetools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ void ShapeTool::cancelMultipart()
m_drawing = false;
}

void ShapeTool::end()
void ShapeTool::end(const EndParams &)
{
if(!m_drawing)
return;
Expand Down
2 changes: 1 addition & 1 deletion src/libclient/tools/shapetools.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class ShapeTool : public Tool {

void begin(const BeginParams &params) final override;
void motion(const MotionParams &params) override;
void end() final override;
void end(const EndParams &params) final override;

void cancelMultipart() final override;
bool usesBrushColor() const final override { return true; }
Expand Down
7 changes: 6 additions & 1 deletion src/libclient/tools/tool.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@ class Tool {
bool flip;
};

struct EndParams {
bool constrain;
bool center;
};

Tool(
ToolController &owner, Type type, const QCursor &cursor,
bool allowColorPick, bool allowToolAdjust, bool allowRightClick,
Expand Down Expand Up @@ -106,7 +111,7 @@ class Tool {
virtual void begin(const BeginParams &params) = 0;
virtual void motion(const MotionParams &params) = 0;
virtual void hover(const HoverParams &params) { Q_UNUSED(params); }
virtual void end() = 0;
virtual void end(const EndParams &params) = 0;

//! Finish and commit a multipart stroke
virtual void finishMultipart() {}
Expand Down
Loading

0 comments on commit 7e881ed

Please sign in to comment.