[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-kimageshop
Subject: [calligra/calligra/2.9] krita/plugins/assistants/RulerAssistant: Allow 'shift'-modifer after draggin
From: Wolthera van Hovell <griffinvalley () gmail ! com>
Date: 2015-08-25 16:14:28
Message-ID: E1ZUGrk-000636-Hq () scm ! kde ! org
[Download RAW message or body]
Git commit b3af582293435373785167c2ccfbdece92e2ac71 by Wolthera van Hovell.
Committed on 25/08/2015 at 16:14.
Pushed by woltherav into branch 'calligra/2.9'.
Allow 'shift'-modifer after dragging an assistant handle to snap lines.
This gives horizontal snapping to most straight-line assistants.
The radial assistants will have the third handle snap to 'perfectly circular'.
Shift is a bit of an unfortunate choice given the dis-merge node function was
at one point also on shift, but shift-snap is similar to the other two tools
in krita(straight line and gradient tool), but that had been disabled anyway.
CCBUG: 332527
CCMAIL:kimageshop@kde.org
M +71 -2 krita/plugins/assistants/RulerAssistant/kis_ruler_assistant_tool.cc
M +4 -0 krita/plugins/assistants/RulerAssistant/kis_ruler_assistant_tool.h
http://commits.kde.org/calligra/b3af582293435373785167c2ccfbdece92e2ac71
diff --git a/krita/plugins/assistants/RulerAssistant/kis_ruler_assistant_tool.cc \
b/krita/plugins/assistants/RulerAssistant/kis_ruler_assistant_tool.cc index \
0a156b6..77bdc2d 100644
--- a/krita/plugins/assistants/RulerAssistant/kis_ruler_assistant_tool.cc
+++ b/krita/plugins/assistants/RulerAssistant/kis_ruler_assistant_tool.cc
@@ -141,6 +141,7 @@ void KisRulerAssistantTool::beginPrimaryAction(KoPointerEvent \
*event) if (dist < minDist) {
minDist = dist;
}
+ m_dragStart = \
QPointF(assistant->topRight().data()->x(),assistant->topRight().data()->y()); \
m_internalMode = MODE_DRAGGING_NODE; } else if (m_handleDrag == \
assistant->topRight()) {
double dist = norm2(mousePos - \
m_canvas->viewConverter()->documentToView(*m_handleDrag)); @@ -148,20 +149,25 @@ void \
KisRulerAssistantTool::beginPrimaryAction(KoPointerEvent *event) minDist = dist;
}
m_internalMode = MODE_DRAGGING_NODE;
+ m_dragStart = \
QPointF(assistant->topLeft().data()->x(),assistant->topLeft().data()->y()); } else \
if (m_handleDrag == assistant->bottomLeft()) {
double dist = norm2(mousePos - \
m_canvas->viewConverter()->documentToView(*m_handleDrag)); if (dist < minDist) {
minDist = dist;
}
m_internalMode = MODE_DRAGGING_NODE;
+ m_dragStart = \
QPointF(assistant->bottomRight().data()->x(),assistant->bottomRight().data()->y()); \
} else if (m_handleDrag == assistant->bottomRight()) {
double dist = norm2(mousePos - \
m_canvas->viewConverter()->documentToView(*m_handleDrag)); if (dist < minDist) {
minDist = dist;
}
m_internalMode = MODE_DRAGGING_NODE;
+ m_dragStart = \
QPointF(assistant->bottomLeft().data()->x(),assistant->bottomLeft().data()->y()); } \
else if (m_handleDrag == assistant->leftMiddle()) { m_internalMode = \
MODE_DRAGGING_TRANSLATING_TWONODES; + m_dragStart = \
QPointF((assistant->bottomLeft().data()->x()+assistant->topLeft().data()->x())*0.5, + \
(assistant->bottomLeft().data()->y()+assistant->topLeft().data()->y())*0.5);
m_selectedNode1 = new \
KisPaintingAssistantHandle(assistant->topLeft().data()->x(),assistant->topLeft().data()->y());
m_selectedNode2 = new \
KisPaintingAssistantHandle(assistant->bottomLeft().data()->x(),assistant->bottomLeft().data()->y());
m_newAssistant = \
KisPaintingAssistantFactoryRegistry::instance()->get("perspective")->createPaintingAssistant();
@@ -174,6 +180,8 @@ void KisRulerAssistantTool::beginPrimaryAction(KoPointerEvent \
*event)
m_canvas->updateCanvas(); // TODO update only the relevant part of \
the canvas return;
} else if (m_handleDrag == assistant->rightMiddle()) {
+ m_dragStart = \
QPointF((assistant->topRight().data()->x()+assistant->bottomRight().data()->x())*0.5, \
+ \
(assistant->topRight().data()->y()+assistant->bottomRight().data()->y())*0.5); \
m_internalMode = MODE_DRAGGING_TRANSLATING_TWONODES;
m_selectedNode1 = new \
KisPaintingAssistantHandle(assistant->topRight().data()->x(),assistant->topRight().data()->y());
m_selectedNode2 = new \
KisPaintingAssistantHandle(assistant->bottomRight().data()->x(),assistant->bottomRight().data()->y());
@@ -187,6 +195,8 @@ void KisRulerAssistantTool::beginPrimaryAction(KoPointerEvent \
*event)
m_canvas->updateCanvas(); // TODO update only the relevant part of \
the canvas return;
} else if (m_handleDrag == assistant->topMiddle()) {
+ m_dragStart = \
QPointF((assistant->topLeft().data()->x()+assistant->topRight().data()->x())*0.5, + \
(assistant->topLeft().data()->y()+assistant->topRight().data()->y())*0.5); \
m_internalMode = MODE_DRAGGING_TRANSLATING_TWONODES;
m_selectedNode1 = new \
KisPaintingAssistantHandle(assistant->topLeft().data()->x(),assistant->topLeft().data()->y());
m_selectedNode2 = new \
KisPaintingAssistantHandle(assistant->topRight().data()->x(),assistant->topRight().data()->y());
@@ -200,6 +210,8 @@ void KisRulerAssistantTool::beginPrimaryAction(KoPointerEvent \
*event)
m_canvas->updateCanvas(); // TODO update only the relevant part of \
the canvas return;
} else if (m_handleDrag == assistant->bottomMiddle()) {
+ m_dragStart = \
QPointF((assistant->bottomLeft().data()->x()+assistant->bottomRight().data()->x())*0.5,
+ \
(assistant->bottomLeft().data()->y()+assistant->bottomRight().data()->y())*0.5); \
m_internalMode = MODE_DRAGGING_TRANSLATING_TWONODES;
m_selectedNode1 = new \
KisPaintingAssistantHandle(assistant->bottomLeft().data()->x(),assistant->bottomLeft().data()->y());
m_selectedNode2 = new \
KisPaintingAssistantHandle(assistant->bottomRight().data()->x(),assistant->bottomRight().data()->y());
@@ -213,8 +225,39 @@ void KisRulerAssistantTool::beginPrimaryAction(KoPointerEvent \
*event)
m_canvas->updateCanvas(); // TODO update only the relevant part of \
the canvas return;
}
+ m_snapIsRadial = false;
+ } else if (m_handleDrag && assistant->handles().size()>1 && (assistant->id() \
== "ruler" || + assistant->id() == "parallel \
ruler" || + assistant->id() == "infinite ruler" ||
+ assistant->id() == "spline")){
+ if (m_handleDrag == assistant->handles()[0]) {
+ m_dragStart = *assistant->handles()[1];
+ } else if (m_handleDrag == assistant->handles()[1]) {
+ m_dragStart = *assistant->handles()[0];
+ } else if (m_handleDrag == assistant->handles()[2]) {
+ m_dragStart = *assistant->handles()[0];
+ } else if (m_handleDrag == assistant->handles()[3]) {
+ m_dragStart = *assistant->handles()[1];
+ }
+ m_snapIsRadial = false;
+ } else if (m_handleDrag && assistant->handles().size()>2 && (assistant->id() \
== "ellipse" || + assistant->id() == "concentric \
ellipse" || + assistant->id() == \
"fisheye-point")){ + m_snapIsRadial = false;
+ if (m_handleDrag == assistant->handles()[0]) {
+ m_dragStart = *assistant->handles()[1];
+ } else if (m_handleDrag == assistant->handles()[1]) {
+ m_dragStart = *assistant->handles()[0];
+ } else if (m_handleDrag == assistant->handles()[2]) {
+ m_dragStart = assistant->buttonPosition();
+ m_radius = QLineF(m_dragStart, *assistant->handles()[0]);
+ m_snapIsRadial = true;
+ }
+
+ } else {
+ m_dragStart = assistant->buttonPosition();
+ m_snapIsRadial = false;
}
-
}
if (m_handleDrag) {
@@ -289,6 +332,16 @@ void KisRulerAssistantTool::continuePrimaryAction(KoPointerEvent \
*event) {
if (m_handleDrag) {
*m_handleDrag = event->point;
+ //ported from the gradient tool... we need to think about this more in the \
future. + if (event->modifiers() == Qt::ShiftModifier && m_snapIsRadial) {
+ QLineF dragRadius = QLineF(m_dragStart, event->point);
+ dragRadius.setLength(m_radius.length());
+ *m_handleDrag = dragRadius.p2();
+ } else if (event->modifiers() == Qt::ShiftModifier ) {
+ *m_handleDrag = straightLine(event->point, m_dragStart);
+ } else {
+ *m_handleDrag = event->point;
+ }
m_handleDrag->uncache();
m_handleCombine = 0;
@@ -464,7 +517,7 @@ void KisRulerAssistantTool::mouseMoveEvent(KoPointerEvent *event)
*m_newAssistant->handles().back() = event->point;
m_canvas->updateCanvas();
} else if (m_newAssistant && m_internalMode == \
MODE_DRAGGING_TRANSLATING_TWONODES) {
- QPointF translate = event->point - m_dragEnd;
+ QPointF translate = event->point - m_dragEnd;;
m_dragEnd = event->point;
m_selectedNode1.data()->operator \
=(QPointF(m_selectedNode1.data()->x(),m_selectedNode1.data()->y()) + \
translate);
m_selectedNode2.data()->operator = \
(QPointF(m_selectedNode2.data()->x(),m_selectedNode2.data()->y()) + translate); @@ \
-472,6 +525,22 @@ void KisRulerAssistantTool::mouseMoveEvent(KoPointerEvent *event) \
} }
+QPointF KisRulerAssistantTool::straightLine(QPointF point, QPointF compare)
+{
+ QPointF comparison = point - compare;
+ QPointF result;
+
+ if (fabs(comparison.x()) > fabs(comparison.y())) {
+ result.setX(point.x());
+ result.setY(compare.y());
+ } else {
+ result.setX(compare.x());
+ result.setY(point.y());
+ }
+
+ return result;
+}
+
void KisRulerAssistantTool::paint(QPainter& _gc, const KoViewConverter &_converter)
{
QColor handlesColor(0, 0, 0, 125);
diff --git a/krita/plugins/assistants/RulerAssistant/kis_ruler_assistant_tool.h \
b/krita/plugins/assistants/RulerAssistant/kis_ruler_assistant_tool.h index \
f4dc154..0ff02c9 100644
--- a/krita/plugins/assistants/RulerAssistant/kis_ruler_assistant_tool.h
+++ b/krita/plugins/assistants/RulerAssistant/kis_ruler_assistant_tool.h
@@ -59,6 +59,7 @@ private:
void outlineOn(KisPaintingAssistant* assistant);
void outlineOff(KisPaintingAssistant* assistant);
bool mouseNear(const QPointF& mousep, const QPointF& point);
+ QPointF straightLine(QPointF point, QPointF compare);
KisPaintingAssistantHandleSP nodeNearPoint(KisPaintingAssistant* grid, QPointF \
point);
public Q_SLOTS:
@@ -84,6 +85,9 @@ protected:
QPointF m_mousePosition;
Ui::AssistantsToolOptions m_options;
QWidget* m_optionsWidget;
+ QPointF m_dragStart;
+ QLineF m_radius;
+ bool m_snapIsRadial;
QPointF m_dragEnd;
private:
_______________________________________________
Krita mailing list
kimageshop@kde.org
https://mail.kde.org/mailman/listinfo/kimageshop
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic