Revised vector selection pivot logic
This commit is contained in:
parent
8b393cd03c
commit
7c36741cc5
2 changed files with 25 additions and 12 deletions
|
@ -737,6 +737,10 @@ void DragSelectionTool::VectorDeformTool::leftButtonUp(const TPointD &pos,
|
||||||
m_isDragging = false;
|
m_isDragging = false;
|
||||||
|
|
||||||
tool->notifyImageChanged();
|
tool->notifyImageChanged();
|
||||||
|
|
||||||
|
VectorSelectionTool *selectionTool =
|
||||||
|
dynamic_cast<VectorSelectionTool *>(m_tool);
|
||||||
|
selectionTool->setResetCenter(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
@ -766,6 +770,8 @@ void DragSelectionTool::VectorRotationTool::transform(TAffine aff,
|
||||||
|
|
||||||
void DragSelectionTool::VectorRotationTool::leftButtonDrag(
|
void DragSelectionTool::VectorRotationTool::leftButtonDrag(
|
||||||
const TPointD &pos, const TMouseEvent &e) {
|
const TPointD &pos, const TMouseEvent &e) {
|
||||||
|
VectorSelectionTool *tool = dynamic_cast<VectorSelectionTool *>(m_tool);
|
||||||
|
tool->setResetCenter(false);
|
||||||
m_rotation->leftButtonDrag(pos, e);
|
m_rotation->leftButtonDrag(pos, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -785,6 +791,8 @@ DragSelectionTool::VectorFreeDeformTool::VectorFreeDeformTool(
|
||||||
|
|
||||||
void DragSelectionTool::VectorFreeDeformTool::leftButtonDrag(
|
void DragSelectionTool::VectorFreeDeformTool::leftButtonDrag(
|
||||||
const TPointD &pos, const TMouseEvent &e) {
|
const TPointD &pos, const TMouseEvent &e) {
|
||||||
|
VectorSelectionTool *tool = dynamic_cast<VectorSelectionTool *>(m_tool);
|
||||||
|
tool->setResetCenter(false);
|
||||||
m_freeDeform->leftButtonDrag(pos, e);
|
m_freeDeform->leftButtonDrag(pos, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -819,6 +827,8 @@ void DragSelectionTool::VectorMoveSelectionTool::leftButtonDown(
|
||||||
|
|
||||||
void DragSelectionTool::VectorMoveSelectionTool::leftButtonDrag(
|
void DragSelectionTool::VectorMoveSelectionTool::leftButtonDrag(
|
||||||
const TPointD &pos, const TMouseEvent &e) {
|
const TPointD &pos, const TMouseEvent &e) {
|
||||||
|
VectorSelectionTool *tool = dynamic_cast<VectorSelectionTool *>(m_tool);
|
||||||
|
tool->setResetCenter(false);
|
||||||
if (e.isCtrlPressed() ||
|
if (e.isCtrlPressed() ||
|
||||||
norm2(pos - getStartPos()) > l_dragThreshold * getTool()->getPixelSize())
|
norm2(pos - getStartPos()) > l_dragThreshold * getTool()->getPixelSize())
|
||||||
m_moveSelection->leftButtonDrag(pos, e);
|
m_moveSelection->leftButtonDrag(pos, e);
|
||||||
|
@ -885,6 +895,8 @@ void DragSelectionTool::VectorScaleTool::leftButtonDown(const TPointD &pos,
|
||||||
|
|
||||||
void DragSelectionTool::VectorScaleTool::leftButtonDrag(const TPointD &pos,
|
void DragSelectionTool::VectorScaleTool::leftButtonDrag(const TPointD &pos,
|
||||||
const TMouseEvent &e) {
|
const TMouseEvent &e) {
|
||||||
|
VectorSelectionTool *tool = dynamic_cast<VectorSelectionTool *>(m_tool);
|
||||||
|
tool->setResetCenter(false);
|
||||||
m_scale->leftButtonDrag(pos, e);
|
m_scale->leftButtonDrag(pos, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1099,6 +1111,8 @@ void DragSelectionTool::VectorChangeThicknessTool::leftButtonDrag(
|
||||||
TPointD delta = pos - m_curPos;
|
TPointD delta = pos - m_curPos;
|
||||||
TVectorImageP vi = getTool()->getImage(true);
|
TVectorImageP vi = getTool()->getImage(true);
|
||||||
if (!vi) return;
|
if (!vi) return;
|
||||||
|
VectorSelectionTool *tool = dynamic_cast<VectorSelectionTool *>(m_tool);
|
||||||
|
tool->setResetCenter(false);
|
||||||
m_thicknessChange = (pos.y - m_firstPos.y) * 0.2;
|
m_thicknessChange = (pos.y - m_firstPos.y) * 0.2;
|
||||||
changeImageThickness(*vi, m_thicknessChange);
|
changeImageThickness(*vi, m_thicknessChange);
|
||||||
getTool()->m_deformValues.m_maxSelectionThickness = m_thicknessChange;
|
getTool()->m_deformValues.m_maxSelectionThickness = m_thicknessChange;
|
||||||
|
@ -1196,7 +1210,8 @@ VectorSelectionTool::VectorSelectionTool(int targetType)
|
||||||
, m_joinStyle("Join")
|
, m_joinStyle("Join")
|
||||||
, m_miterJoinLimit("Miter:", 0, 100, 4)
|
, m_miterJoinLimit("Miter:", 0, 100, 4)
|
||||||
, m_selectionCount(0)
|
, m_selectionCount(0)
|
||||||
, m_canEnterGroup(true) {
|
, m_canEnterGroup(true)
|
||||||
|
, m_resetCenter(true) {
|
||||||
assert(targetType == TTool::Vectors);
|
assert(targetType == TTool::Vectors);
|
||||||
m_prop.bind(m_selectionTarget);
|
m_prop.bind(m_selectionTarget);
|
||||||
m_prop.bind(m_constantThickness);
|
m_prop.bind(m_constantThickness);
|
||||||
|
@ -1437,7 +1452,6 @@ void VectorSelectionTool::clearSelectedStrokes() {
|
||||||
m_strokeSelection.selectNone();
|
m_strokeSelection.selectNone();
|
||||||
m_levelSelection.styles().clear();
|
m_levelSelection.styles().clear();
|
||||||
m_deformValues.reset();
|
m_deformValues.reset();
|
||||||
m_centers.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -1496,7 +1510,6 @@ void VectorSelectionTool::modifySelectionOnClick(TImageP image,
|
||||||
|
|
||||||
if (selectionChanged) {
|
if (selectionChanged) {
|
||||||
m_deformValues.reset(); // Resets selection values shown in the toolbar
|
m_deformValues.reset(); // Resets selection values shown in the toolbar
|
||||||
m_centers.clear();
|
|
||||||
|
|
||||||
finalizeSelection();
|
finalizeSelection();
|
||||||
notifySelectionChanged();
|
notifySelectionChanged();
|
||||||
|
@ -1594,10 +1607,7 @@ void VectorSelectionTool::leftButtonDrag(const TPointD &pos,
|
||||||
selectionChanged = (selectStroke(s, false) || selectionChanged);
|
selectionChanged = (selectStroke(s, false) || selectionChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selectionChanged) {
|
if (selectionChanged) finalizeSelection();
|
||||||
m_centers.clear();
|
|
||||||
finalizeSelection();
|
|
||||||
}
|
|
||||||
|
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
@ -1782,6 +1792,7 @@ bool VectorSelectionTool::isSelectionEmpty() {
|
||||||
|
|
||||||
void VectorSelectionTool::computeBBox() {
|
void VectorSelectionTool::computeBBox() {
|
||||||
m_bboxs.clear();
|
m_bboxs.clear();
|
||||||
|
if (canResetCenter()) m_centers.clear();
|
||||||
|
|
||||||
TVectorImageP vi = getImage(false);
|
TVectorImageP vi = getImage(false);
|
||||||
if (!vi) return;
|
if (!vi) return;
|
||||||
|
@ -1841,7 +1852,7 @@ void VectorSelectionTool::computeBBox() {
|
||||||
FourPoints bbox;
|
FourPoints bbox;
|
||||||
bbox = newBbox;
|
bbox = newBbox;
|
||||||
m_bboxs.push_back(bbox);
|
m_bboxs.push_back(bbox);
|
||||||
if (getCenter() == TPointD())
|
if (canResetCenter())
|
||||||
m_centers.push_back(0.5 * (bbox.getP11() + bbox.getP00()));
|
m_centers.push_back(0.5 * (bbox.getP11() + bbox.getP00()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1939,7 +1950,6 @@ void VectorSelectionTool::onImageChanged() {
|
||||||
vi->getPalette() !=
|
vi->getPalette() !=
|
||||||
selectedImg->getPalette()) // if palettes still match
|
selectedImg->getPalette()) // if palettes still match
|
||||||
selectedStyles().clear();
|
selectedStyles().clear();
|
||||||
m_centers.clear();
|
|
||||||
} else {
|
} else {
|
||||||
// Remove any eventual stroke index outside the valid range
|
// Remove any eventual stroke index outside the valid range
|
||||||
if (!m_strokeSelection.isEmpty()) {
|
if (!m_strokeSelection.isEmpty()) {
|
||||||
|
@ -1966,7 +1976,6 @@ void VectorSelectionTool::doOnDeactivate() {
|
||||||
m_deformValues.reset();
|
m_deformValues.reset();
|
||||||
|
|
||||||
m_polyline.clear();
|
m_polyline.clear();
|
||||||
m_centers.clear();
|
|
||||||
|
|
||||||
TTool::getApplication()->getCurrentSelection()->setSelection(0);
|
TTool::getApplication()->getCurrentSelection()->setSelection(0);
|
||||||
|
|
||||||
|
@ -2155,7 +2164,6 @@ void VectorSelectionTool::selectRegionVectorImage() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selectionChanged) {
|
if (selectionChanged) {
|
||||||
m_centers.clear();
|
|
||||||
finalizeSelection();
|
finalizeSelection();
|
||||||
notifySelectionChanged();
|
notifySelectionChanged();
|
||||||
invalidate();
|
invalidate();
|
||||||
|
|
|
@ -306,6 +306,11 @@ public:
|
||||||
|
|
||||||
TPropertyGroup *getProperties(int targetType) override;
|
TPropertyGroup *getProperties(int targetType) override;
|
||||||
|
|
||||||
|
bool m_resetCenter;
|
||||||
|
|
||||||
|
void setResetCenter(bool update) { m_resetCenter = update; }
|
||||||
|
bool canResetCenter() { return m_resetCenter; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void onActivate() override;
|
void onActivate() override;
|
||||||
void onDeactivate() override;
|
void onDeactivate() override;
|
||||||
|
|
Loading…
Reference in a new issue