Skip to content

Commit 2a8b094

Browse files
committed
Gizmos v1.8
Ref: #601
1 parent 6acceee commit 2a8b094

File tree

11 files changed

+152
-191
lines changed

11 files changed

+152
-191
lines changed

src/app/GUI/extraactions.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -652,24 +652,20 @@ void MainWindow::setupMenuGizmo(QMenu *menu,
652652
{
653653
if (!menu) { return; }
654654

655-
bool visible = false;
655+
const bool visible = mDocument.getGizmoVisibility(ti);
656656
QString title;
657657

658658
switch (ti) {
659659
case Core::Gizmos::Interact::Position:
660-
visible = mDocument.showPositionGizmo();
661660
title = tr("Position");
662661
break;
663662
case Core::Gizmos::Interact::Rotate:
664-
visible = mDocument.showRotateGizmo();
665663
title = tr("Rotate");
666664
break;
667665
case Core::Gizmos::Interact::Scale:
668-
visible = mDocument.showScaleGizmo();
669666
title = tr("Scale");
670667
break;
671668
case Core::Gizmos::Interact::Shear:
672-
visible = mDocument.showShearGizmo();
673669
title = tr("Shear");
674670
break;
675671
default: return;
@@ -680,7 +676,9 @@ void MainWindow::setupMenuGizmo(QMenu *menu,
680676
act->setChecked(visible);
681677

682678
connect(act, &QAction::toggled,
683-
&mActions, &Actions::setPositionGizmoVisible);
679+
this, [this, ti]() {
680+
mDocument.setGizmoVisibility(ti, !mDocument.getGizmoVisibility(ti));
681+
});
684682
connect(&mDocument, &Document::gizmoVisibilityChanged,
685683
this, [ti, act](Core::Gizmos::Interact i,
686684
bool enabled) {

src/core/Boxes/boundingbox.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -794,7 +794,8 @@ void BoundingBox::scaleRelativeToSavedPivot(const qreal scaleBy) {
794794
void BoundingBox::shearRelativeToSavedPivot(const qreal shearXBy,
795795
const qreal shearYBy) {
796796
if (auto boxTransform = getBoxTransformAnimator()) {
797-
boxTransform->shearRelativeToSavedValue(shearXBy, shearYBy, mSavedTransformPivot);
797+
boxTransform->shearRelativeToSavedValue(shearXBy, shearYBy,
798+
mSavedTransformPivot);
798799
}
799800
}
800801

src/core/MovablePoints/movablepoint.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,15 +172,19 @@ void MovablePoint::rotateRelativeToSavedPivot(const qreal rot) {
172172
moveToRel(mat.map(mSavedRelPos));
173173
}
174174

175-
void MovablePoint::scaleRelativeToSavedPivot(const qreal sx, const qreal sy) {
175+
void MovablePoint::scaleRelativeToSavedPivot(const qreal sx,
176+
const qreal sy)
177+
{
176178
QMatrix mat;
177179
mat.translate(mPivot.x(), mPivot.y());
178180
mat.scale(sx, sy);
179181
mat.translate(-mPivot.x(), -mPivot.y());
180182
moveToRel(mat.map(mSavedRelPos));
181183
}
182184

183-
void MovablePoint::shearRelativeToSavedPivot(const qreal shearX, const qreal shearY) {
185+
void MovablePoint::shearRelativeToSavedPivot(const qreal shearX,
186+
const qreal shearY)
187+
{
184188
QMatrix mat;
185189
mat.translate(mPivot.x(), mPivot.y());
186190
mat.shear(shearX, shearY);

src/core/MovablePoints/movablepoint.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,10 @@ class CORE_EXPORT MovablePoint : public StdSelfRef {
6464
virtual void setRelativePos(const QPointF &relPos) = 0;
6565

6666
virtual void scale(const qreal scaleXBy, const qreal scaleYBy);
67-
virtual void scaleRelativeToSavedPivot(const qreal sx, const qreal sy);
68-
virtual void shearRelativeToSavedPivot(const qreal shearX, const qreal shearY);
67+
virtual void scaleRelativeToSavedPivot(const qreal sx,
68+
const qreal sy);
69+
virtual void shearRelativeToSavedPivot(const qreal shearX,
70+
const qreal shearY);
6971
virtual void rotateRelativeToSavedPivot(const qreal rot);
7072
virtual void saveTransformPivotAbsPos(const QPointF &absPivot);
7173

src/core/Private/document.cpp

Lines changed: 58 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,15 @@
2727
#include "FileCacheHandlers/filecachehandler.h"
2828
#include "canvas.h"
2929
#include "simpletask.h"
30-
#include "appsupport.h"
3130

3231
Document* Document::sInstance = nullptr;
3332

3433
using namespace Friction::Core;
3534

36-
Document::Document(TaskScheduler& taskScheduler) {
35+
Document::Document(TaskScheduler& taskScheduler)
36+
{
3737
Q_ASSERT(!sInstance);
3838
sInstance = this;
39-
fShowRotateGizmo = AppSupport::getSettings("gizmos", "Rotate", true).toBool();
40-
fShowPositionGizmo = AppSupport::getSettings("gizmos", "Position", true).toBool();
41-
fShowScaleGizmo = AppSupport::getSettings("gizmos", "Scale", false).toBool();
42-
fShowShearGizmo = AppSupport::getSettings("gizmos", "Shear", false).toBool();
4339
connect(&taskScheduler, &TaskScheduler::finishedAllQuedTasks,
4440
this, &Document::updateScenes);
4541
}
@@ -120,62 +116,78 @@ void Document::setCanvasMode(const CanvasMode mode) {
120116
actionFinished();
121117
}
122118

123-
void Document::setShowRotateGizmo(bool show)
119+
void Document::setGizmoVisibility(const Gizmos::Interact &ti,
120+
const bool visibility)
124121
{
125-
if (fShowRotateGizmo == show) { return; }
126-
fShowRotateGizmo = show;
127-
for (const auto &scene : fScenes) {
128-
if (scene) { scene->setShowRotateGizmo(show); }
122+
QString key;
123+
124+
switch (ti) {
125+
case Gizmos::Interact::Position:
126+
if (fGizmoPositionVisibility == visibility) { return; }
127+
key = "Position";
128+
fGizmoPositionVisibility = visibility;
129+
break;
130+
case Gizmos::Interact::Rotate:
131+
if (fGizmoRotateVisibility == visibility) { return; }
132+
key = "Rotate";
133+
fGizmoRotateVisibility = visibility;
134+
break;
135+
case Gizmos::Interact::Scale:
136+
if (fGizmoScaleVisibility == visibility) { return; }
137+
key = "Scale";
138+
fGizmoScaleVisibility = visibility;
139+
break;
140+
case Gizmos::Interact::Shear:
141+
if (fGizmoShearVisibility == visibility) { return; }
142+
key = "Shear";
143+
fGizmoShearVisibility = visibility;
144+
break;
145+
default: return;
129146
}
130-
AppSupport::setSettings("gizmos", "Rotate", show);
131-
132-
emit gizmoVisibilityChanged(Gizmos::Interact::Rotate, show);
133-
}
134147

135-
void Document::setShowPositionGizmo(bool show)
136-
{
137-
if (fShowPositionGizmo == show) { return; }
138-
fShowPositionGizmo = show;
139148
for (const auto &scene : fScenes) {
140-
if (scene) { scene->setShowPositionGizmo(show); }
149+
if (scene) { scene->setGizmoVisibility(ti, visibility); }
141150
}
142-
AppSupport::setSettings("gizmos", "Position", show);
143151

144-
emit gizmoVisibilityChanged(Gizmos::Interact::Position, show);
152+
AppSupport::setSettings("gizmos", key, visibility);
153+
emit gizmoVisibilityChanged(ti, visibility);
145154
}
146155

147-
void Document::setShowScaleGizmo(bool show)
156+
bool Document::getGizmoVisibility(const Gizmos::Interact &ti)
148157
{
149-
if (fShowScaleGizmo == show) { return; }
150-
fShowScaleGizmo = show;
151-
for (const auto &scene : fScenes) {
152-
if (scene) { scene->setShowScaleGizmo(show); }
158+
switch (ti) {
159+
case Gizmos::Interact::Position:
160+
return fGizmoPositionVisibility;
161+
break;
162+
case Gizmos::Interact::Rotate:
163+
return fGizmoRotateVisibility;
164+
break;
165+
case Gizmos::Interact::Scale:
166+
return fGizmoScaleVisibility;
167+
break;
168+
case Gizmos::Interact::Shear:
169+
return fGizmoShearVisibility;
170+
break;
171+
default:;
153172
}
154-
AppSupport::setSettings("gizmos", "Scale", show);
155-
156-
emit gizmoVisibilityChanged(Gizmos::Interact::Scale, show);
173+
return false;
157174
}
158175

159-
void Document::setShowShearGizmo(bool show)
176+
Canvas *Document::createNewScene(const bool emitCreated)
160177
{
161-
if (fShowShearGizmo == show) { return; }
162-
fShowShearGizmo = show;
163-
for (const auto &scene : fScenes) {
164-
if (scene) { scene->setShowShearGizmo(show); }
165-
}
166-
AppSupport::setSettings("gizmos", "Shear", show);
167-
168-
emit gizmoVisibilityChanged(Gizmos::Interact::Shear, show);
169-
}
170-
171-
Canvas *Document::createNewScene(const bool emitCreated) {
172178
const auto newScene = enve::make_shared<Canvas>(*this);
173179
fScenes.append(newScene);
174180
SWT_addChild(newScene.get());
175-
newScene->setShowRotateGizmo(fShowRotateGizmo);
176-
newScene->setShowPositionGizmo(fShowPositionGizmo);
177-
newScene->setShowScaleGizmo(fShowScaleGizmo);
178-
newScene->setShowShearGizmo(fShowShearGizmo);
181+
182+
newScene->setGizmoVisibility(Gizmos::Interact::Position,
183+
fGizmoPositionVisibility);
184+
newScene->setGizmoVisibility(Gizmos::Interact::Rotate,
185+
fGizmoRotateVisibility);
186+
newScene->setGizmoVisibility(Gizmos::Interact::Scale,
187+
fGizmoScaleVisibility);
188+
newScene->setGizmoVisibility(Gizmos::Interact::Shear,
189+
fGizmoShearVisibility);
190+
179191
if (emitCreated) {
180192
emit sceneCreated(newScene.get());
181193
}

src/core/Private/document.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "ReadWrite/ereadstream.h"
4646
#include "ReadWrite/ewritestream.h"
4747
#include "gizmos.h"
48+
#include "appsupport.h"
4849

4950
class SceneBoundGradient;
5051
class FileDataCacheHandler;
@@ -74,11 +75,14 @@ class CORE_EXPORT Document : public SingleWidgetTarget {
7475
QString fEvFile;
7576

7677
NodeVisiblity fNodeVisibility = NodeVisiblity::dissolvedAndNormal;
78+
7779
bool fLocalPivot = true;
78-
bool fShowRotateGizmo = true;
79-
bool fShowPositionGizmo = true;
80-
bool fShowScaleGizmo = true;
81-
bool fShowShearGizmo = true;
80+
81+
bool fGizmoPositionVisibility = AppSupport::getSettings("gizmos", "Position", true).toBool();
82+
bool fGizmoRotateVisibility = AppSupport::getSettings("gizmos", "Rotate", true).toBool();
83+
bool fGizmoScaleVisibility = AppSupport::getSettings("gizmos", "Scale", false).toBool();
84+
bool fGizmoShearVisibility = AppSupport::getSettings("gizmos", "Shear", false).toBool();
85+
8286
CanvasMode fCanvasMode;
8387

8488
// bookmarked
@@ -128,14 +132,10 @@ class CORE_EXPORT Document : public SingleWidgetTarget {
128132
QString projectDirectory() const;
129133

130134
void setCanvasMode(const CanvasMode mode);
131-
bool showRotateGizmo() const { return fShowRotateGizmo; }
132-
void setShowRotateGizmo(bool show);
133-
bool showPositionGizmo() const { return fShowPositionGizmo; }
134-
void setShowPositionGizmo(bool show);
135-
bool showScaleGizmo() const { return fShowScaleGizmo; }
136-
void setShowScaleGizmo(bool show);
137-
bool showShearGizmo() const { return fShowShearGizmo; }
138-
void setShowShearGizmo(bool show);
135+
136+
void setGizmoVisibility(const Friction::Core::Gizmos::Interact &ti,
137+
const bool visibility);
138+
bool getGizmoVisibility(const Friction::Core::Gizmos::Interact &ti);
139139

140140
Canvas * createNewScene(const bool emitCreated = true);
141141
bool removeScene(const qsptr<Canvas>& scene);

src/core/actions.cpp

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -649,30 +649,6 @@ void Actions::setPathEffectsVisible(const bool bT) {
649649
afterAction();
650650
}
651651

652-
void Actions::setRotateGizmoVisible(const bool visible)
653-
{
654-
mDocument.setShowRotateGizmo(visible);
655-
afterAction();
656-
}
657-
658-
void Actions::setPositionGizmoVisible(const bool visible)
659-
{
660-
mDocument.setShowPositionGizmo(visible);
661-
afterAction();
662-
}
663-
664-
void Actions::setScaleGizmoVisible(const bool visible)
665-
{
666-
mDocument.setShowScaleGizmo(visible);
667-
afterAction();
668-
}
669-
670-
void Actions::setShearGizmoVisible(const bool visible)
671-
{
672-
mDocument.setShowShearGizmo(visible);
673-
afterAction();
674-
}
675-
676652
#include "filesourcescache.h"
677653
//#include "svgimporter.h"
678654
#include "Boxes/videobox.h"

src/core/actions.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,6 @@ class CORE_EXPORT Actions : public QObject {
9191

9292
void setRasterEffectsVisible(const bool bT);
9393
void setPathEffectsVisible(const bool bT);
94-
void setRotateGizmoVisible(const bool visible);
95-
void setPositionGizmoVisible(const bool visible);
96-
void setScaleGizmoVisible(const bool visible);
97-
void setShearGizmoVisible(const bool visible);
9894

9995
eBoxOrSound* handleDropEvent(QDropEvent * const event,
10096
const QPointF &relDropPos = QPointF(0, 0),

src/core/canvas.h

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -437,14 +437,9 @@ class CORE_EXPORT Canvas : public CanvasBase
437437
mPathEffectsVisible = bT;
438438
}
439439

440-
bool showRotateGizmo() const;
441-
void setShowRotateGizmo(bool enabled);
442-
bool showPositionGizmo() const;
443-
void setShowPositionGizmo(bool enabled);
444-
bool showScaleGizmo() const;
445-
void setShowScaleGizmo(bool enabled);
446-
bool showShearGizmo() const;
447-
void setShowShearGizmo(bool enabled);
440+
void setGizmoVisibility(const Friction::Core::Gizmos::Interact &ti,
441+
const bool visibility);
442+
bool getGizmoVisibility(const Friction::Core::Gizmos::Interact &ti);
448443

449444
void setEasingAction(const QString &easing)
450445
{

0 commit comments

Comments
 (0)