diff --git a/Source/Fractorium/Fractorium.cpp b/Source/Fractorium/Fractorium.cpp
index 7f8419b..a75172c 100644
--- a/Source/Fractorium/Fractorium.cpp
+++ b/Source/Fractorium/Fractorium.cpp
@@ -234,7 +234,7 @@ Fractorium::~Fractorium()
{
SyncSequenceSettings();
m_VarDialog->SyncSettings();
- m_Settings->ShowXforms(ui.ActionDrawXforms->isChecked());
+ m_Settings->ShowXforms(ui.ActionDrawPreAffines->isChecked() || ui.ActionDrawPostAffines->isChecked());
m_Settings->ShowGrid(ui.ActionDrawGrid->isChecked());
m_Settings->setValue("windowState", saveState());
m_Settings->sync();
diff --git a/Source/Fractorium/Fractorium.h b/Source/Fractorium/Fractorium.h
index 1116193..51a6455 100644
--- a/Source/Fractorium/Fractorium.h
+++ b/Source/Fractorium/Fractorium.h
@@ -15,6 +15,11 @@
#include "DoubleSpinBoxTableItemDelegate.h"
#include "PaletteEditor/PaletteEditor.h"
+///
+/// An enum representing the type of edit being done.
+///
+enum class eAffineState : int { PRE, ALL_PRE, POST, ALL_POST };
+
///
/// Fractorium class.
///
@@ -116,6 +121,8 @@ public:
void CurrentXform(uint i);
//Xforms Affine.
+ bool DrawPreAffines();
+ bool DrawPostAffines();
bool DrawSelectedPre();
bool DrawAllPre();
bool DrawSelectedPost();
@@ -174,7 +181,8 @@ public slots:
void OnActionDP(bool checked);
void OnActionStyle(bool checked);
void OnActionStartStopRenderer(bool checked);
- void OnActionDrawXforms(bool checked);
+ void OnActionDrawAffines(bool checked);
+ void OnActionDrawAllAffines(bool checked);
void OnActionDrawImage(bool checked);
void OnActionDrawGrid(bool checked);
@@ -412,6 +420,8 @@ private:
bool HaveFinal();
//Toolbar.
+ void SaveAffineState();
+ void SyncAffineStateToToolbar();
void SyncOptionsToToolbar();
//Library.
@@ -592,6 +602,7 @@ private:
QColor m_VariationTreeBgColorNonZero, m_VariationTreeBgColorZero;
vector m_Docks;
+ bool m_PreviousAffineState[4];
int m_FontSize;
int m_VarSortMode;
int m_PaletteSortMode;
diff --git a/Source/Fractorium/Fractorium.qrc b/Source/Fractorium/Fractorium.qrc
index 667eb37..f8c2893 100644
--- a/Source/Fractorium/Fractorium.qrc
+++ b/Source/Fractorium/Fractorium.qrc
@@ -50,5 +50,6 @@
Icons/Function-512.png
Icons/pic.png
Icons/grid.png
+ Icons/reset_scale.png
diff --git a/Source/Fractorium/Fractorium.ui b/Source/Fractorium/Fractorium.ui
index 5f85d85..2e5e2b6 100644
--- a/Source/Fractorium/Fractorium.ui
+++ b/Source/Fractorium/Fractorium.ui
@@ -80,8 +80,8 @@
0
0
- 1277
- 985
+ 1213
+ 978
@@ -173,7 +173,7 @@
0
0
230
- 934
+ 928
@@ -263,30 +263,30 @@
false
+
+ 35
+
145
false
-
- 35
-
true
false
+
+ 22
+
22
false
-
- 22
-
false
@@ -453,7 +453,10 @@
false
- true
+ false
+
+
+ 15
15
@@ -461,24 +464,21 @@
false
-
- 15
-
true
false
+
+ 15
+
15
false
-
- 15
-
Geometry
@@ -534,7 +534,10 @@
false
- true
+ false
+
+
+ 15
15
@@ -542,24 +545,21 @@
false
-
- 15
-
true
false
+
+ 15
+
15
false
-
- 15
-
Iteration
@@ -631,35 +631,35 @@
false
- true
+ false
false
+
+ 15
+
15
false
-
- 15
-
true
false
+
+ 15
+
15
false
-
- 15
-
Filter
@@ -773,30 +773,30 @@
false
+
+ 35
+
120
false
-
- 35
-
true
false
+
+ 22
+
22
false
-
- 22
-
false
@@ -1123,30 +1123,30 @@
false
+
+ 35
+
145
false
-
- 35
-
true
false
+
+ 22
+
22
false
-
- 22
-
false
@@ -1297,7 +1297,10 @@
1
- true
+ false
+
+
+ 15
15
@@ -1305,24 +1308,21 @@
false
-
- 15
-
true
false
+
+ 15
+
15
false
-
- 15
-
Animation
@@ -1408,30 +1408,30 @@
false
+
+ 35
+
145
false
-
- 35
-
true
false
+
+ 22
+
22
false
-
- 22
-
Interpolation
@@ -1572,30 +1572,30 @@
false
+
+ 35
+
120
false
-
- 35
-
true
false
+
+ 22
+
22
false
-
- 22
-
false
@@ -1819,7 +1819,10 @@
false
- true
+ false
+
+
+ 15
15
@@ -1827,24 +1830,21 @@
false
-
- 15
-
true
false
+
+ 16
+
16
false
-
- 16
-
Color
@@ -1867,7 +1867,7 @@
550
0
- 240
+ 252
881
@@ -1879,8 +1879,8 @@
- 240
- 392
+ 252
+ 409
@@ -2093,27 +2093,27 @@
false
+
+ 35
+
35
false
-
- 35
-
false
+
+ 22
+
22
false
-
- 22
-
-
@@ -2211,30 +2211,30 @@
0
- true
+ false
false
-
+
35
-
+
35
false
- true
+ false
false
-
+
22
-
+
22
@@ -2290,14 +2290,17 @@
true
+
+ 35
+
35
false
-
- 35
+
+ 22
22
@@ -2305,9 +2308,6 @@
false
-
- 22
-
@@ -2370,8 +2370,8 @@
0
0
- 285
- 675
+ 389
+ 690
@@ -2474,10 +2474,10 @@
false
-
+
62
-
+
62
@@ -2486,15 +2486,15 @@
false
+
+ 22
+
22
false
-
- 22
-
@@ -2713,10 +2713,10 @@
false
-
+
20
-
+
20
@@ -2825,15 +2825,15 @@
false
+
+ 16
+
16
false
-
- 16
-
false
@@ -3059,8 +3059,8 @@
0
0
- 291
- 876
+ 277
+ 880
@@ -3407,7 +3407,10 @@
2
- true
+ false
+
+
+ 27
110
@@ -3415,24 +3418,21 @@
false
-
- 27
-
true
false
+
+ 21
+
21
false
-
- 21
-
@@ -3502,7 +3502,7 @@
QTabWidget::Triangular
- 2
+ 1
@@ -3627,27 +3627,27 @@
false
-
- false
-
27
+
+ false
+
true
false
+
+ 21
+
21
false
-
- 21
-
false
@@ -3753,7 +3753,7 @@
false
- 19
+ 21
false
@@ -3963,30 +3963,30 @@
false
+
+ 27
+
125
false
-
- 27
-
true
false
+
+ 22
+
22
false
-
- 22
-
false
@@ -4141,7 +4141,7 @@
false
- true
+ false
@@ -4230,15 +4230,15 @@
false
+
+ 40
+
100
false
-
- 40
-
true
@@ -4248,15 +4248,15 @@
false
+
+ 22
+
22
false
-
- 22
-
false
@@ -4996,10 +4996,10 @@
false
- true
+ false
- true
+ false
@@ -5091,15 +5091,15 @@
false
+
+ 40
+
100
false
-
- 40
-
true
@@ -5109,15 +5109,15 @@
false
+
+ 22
+
22
false
-
- 22
-
false
@@ -6061,15 +6061,15 @@
3
+
+ 10
+
70
true
-
- 10
-
true
@@ -6293,8 +6293,8 @@
0
0
- 267
- 670
+ 253
+ 646
@@ -6424,7 +6424,7 @@
0
0
291
- 856
+ 854
@@ -6554,10 +6554,10 @@
false
-
+
22
-
+
22
@@ -6569,10 +6569,10 @@
false
-
+
21
-
+
21
@@ -6678,23 +6678,23 @@
true
- false
+ true
2
- true
+ false
false
-
- 100
-
30
+
+ 100
+
false
@@ -7093,30 +7093,30 @@
false
+
+ 27
+
110
false
-
- 27
-
true
false
+
+ 22
+
22
false
-
- 22
-
false
@@ -7302,7 +7302,7 @@
0
0
1712
- 20
+ 22
@@ -8709,21 +8715,6 @@
Show/Hide grid
-
-
- true
-
-
-
- :/Fractorium/Icons/Function-512.png:/Fractorium/Icons/Function-512.png
-
-
- Show/Hide xforms
-
-
- Show/Hide xforms
-
-
Alternate editor/image
@@ -8733,6 +8724,10 @@
+
+
+ :/Fractorium/Icons/reset_scale.png:/Fractorium/Icons/reset_scale.png
+
Reset scale
@@ -8748,6 +8743,50 @@
Ctrl+K
+
+
+ true
+
+
+ Pre
+
+
+ Show/Hide Pre Affines
+
+
+
+
+ true
+
+
+ All
+
+
+ Show All Pre Affines
+
+
+
+
+ true
+
+
+ Post
+
+
+ Show/Hide Post Affines
+
+
+
+
+ true
+
+
+ All
+
+
+ Show All Post Affines
+
+
diff --git a/Source/Fractorium/FractoriumMenus.cpp b/Source/Fractorium/FractoriumMenus.cpp
index 0cedf7a..2c47a63 100644
--- a/Source/Fractorium/FractoriumMenus.cpp
+++ b/Source/Fractorium/FractoriumMenus.cpp
@@ -766,17 +766,20 @@ void Fractorium::OnActionResetWorkspace(bool checked)
/// Ignored
void Fractorium::OnActionAlternateEditorImage(bool checked)
{
- if (DrawImage())
+ if (DrawPreAffines() || DrawPostAffines())
{
- ui.ActionDrawImage->setChecked(false);
- ui.ActionDrawXforms->setChecked(true);
- ui.ActionDrawGrid->setChecked(true);
+ ui.ActionDrawPreAffines->setChecked(false);
+ ui.ActionDrawAllPreAffines->setChecked(false);
+ ui.ActionDrawPostAffines->setChecked(false);
+ ui.ActionDrawAllPostAffines->setChecked(false);
+ ui.ActionDrawGrid->setChecked(false);
+ ui.ActionDrawImage->setChecked(true);
}
else
{
- ui.ActionDrawXforms->setChecked(false);
- ui.ActionDrawGrid->setChecked(false);
- ui.ActionDrawImage->setChecked(true);
+ ui.ActionDrawImage->setChecked(false);
+ ui.ActionDrawGrid->setChecked(true);
+ SyncAffineStateToToolbar();
}
ui.GLDisplay->update();
diff --git a/Source/Fractorium/FractoriumToolbar.cpp b/Source/Fractorium/FractoriumToolbar.cpp
index 8cd5a7a..684c10f 100644
--- a/Source/Fractorium/FractoriumToolbar.cpp
+++ b/Source/Fractorium/FractoriumToolbar.cpp
@@ -15,24 +15,37 @@ void Fractorium::InitToolbarUI()
spGroup->addAction(ui.ActionDP);
SyncOptionsToToolbar();
ui.ActionDrawImage->setChecked(true);
- connect(ui.ActionCpu, SIGNAL(triggered(bool)), this, SLOT(OnActionCpu(bool)), Qt::QueuedConnection);
- connect(ui.ActionCL, SIGNAL(triggered(bool)), this, SLOT(OnActionCL(bool)), Qt::QueuedConnection);
- connect(ui.ActionSP, SIGNAL(triggered(bool)), this, SLOT(OnActionSP(bool)), Qt::QueuedConnection);
- connect(ui.ActionDP, SIGNAL(triggered(bool)), this, SLOT(OnActionDP(bool)), Qt::QueuedConnection);
- connect(ui.ActionStyle, SIGNAL(triggered(bool)), this, SLOT(OnActionStyle(bool)), Qt::QueuedConnection);
- connect(ui.ActionStartStopRenderer, SIGNAL(triggered(bool)), this, SLOT(OnActionStartStopRenderer(bool)), Qt::QueuedConnection);
- connect(ui.ActionDrawXforms, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawXforms(bool)), Qt::QueuedConnection);
- connect(ui.ActionDrawImage, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawImage(bool)), Qt::QueuedConnection);
- connect(ui.ActionDrawGrid, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawGrid(bool)), Qt::QueuedConnection);
+ m_PreviousAffineState[(int)eAffineState::PRE] = true;
+ m_PreviousAffineState[(int)eAffineState::ALL_PRE] = true;
+ m_PreviousAffineState[(int)eAffineState::POST] = false;
+ m_PreviousAffineState[(int)eAffineState::ALL_POST] = false;
+ connect(ui.ActionCpu, SIGNAL(triggered(bool)), this, SLOT(OnActionCpu(bool)), Qt::QueuedConnection);
+ connect(ui.ActionCL, SIGNAL(triggered(bool)), this, SLOT(OnActionCL(bool)), Qt::QueuedConnection);
+ connect(ui.ActionSP, SIGNAL(triggered(bool)), this, SLOT(OnActionSP(bool)), Qt::QueuedConnection);
+ connect(ui.ActionDP, SIGNAL(triggered(bool)), this, SLOT(OnActionDP(bool)), Qt::QueuedConnection);
+ connect(ui.ActionStyle, SIGNAL(triggered(bool)), this, SLOT(OnActionStyle(bool)), Qt::QueuedConnection);
+ connect(ui.ActionStartStopRenderer, SIGNAL(triggered(bool)), this, SLOT(OnActionStartStopRenderer(bool)), Qt::QueuedConnection);
+ connect(ui.ActionDrawImage, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawImage(bool)), Qt::QueuedConnection);
+ connect(ui.ActionDrawPreAffines, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawAffines(bool)), Qt::QueuedConnection);
+ connect(ui.ActionDrawPostAffines, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawAffines(bool)), Qt::QueuedConnection);
+ connect(ui.ActionDrawAllPreAffines, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawAllAffines(bool)), Qt::QueuedConnection);
+ connect(ui.ActionDrawAllPostAffines, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawAllAffines(bool)), Qt::QueuedConnection);
+ connect(ui.ActionDrawGrid, SIGNAL(triggered(bool)), this, SLOT(OnActionDrawGrid(bool)), Qt::QueuedConnection);
}
///
/// GUI wrapper functions, getters only.
///
-bool Fractorium::DrawXforms() { return ui.ActionDrawXforms->isChecked(); }
-bool Fractorium::DrawImage() { return ui.ActionDrawImage->isChecked(); }
-bool Fractorium::DrawGrid() { return ui.ActionDrawGrid->isChecked(); }
+bool Fractorium::DrawPreAffines() { return ui.ActionDrawPreAffines->isChecked(); }
+bool Fractorium::DrawPostAffines() { return ui.ActionDrawPostAffines->isChecked(); }
+bool Fractorium::DrawSelectedPre() { return !ui.ActionDrawAllPreAffines->isChecked(); }
+bool Fractorium::DrawAllPre() { return ui.ActionDrawAllPreAffines->isChecked(); }
+bool Fractorium::DrawSelectedPost() { return !ui.ActionDrawAllPostAffines->isChecked(); }
+bool Fractorium::DrawAllPost() { return ui.ActionDrawAllPostAffines->isChecked(); }
+bool Fractorium::DrawXforms() { return ui.ActionDrawPreAffines->isChecked() || ui.ActionDrawPostAffines->isChecked(); }
+bool Fractorium::DrawImage() { return ui.ActionDrawImage->isChecked(); }
+bool Fractorium::DrawGrid() { return ui.ActionDrawGrid->isChecked(); }
///
/// Called when the CPU render option on the toolbar is clicked.
@@ -122,18 +135,30 @@ void Fractorium::OnActionStartStopRenderer(bool checked)
}
///
-/// Toggle whether to show the affines.
-/// Called when the editor image button is clicked.
+/// Called when the pre affine button is clicked.
///
-/// Check state, show editor if true, else hide.
-void Fractorium::OnActionDrawXforms(bool checked)
+/// Check state, show pre affines if true, else hide.
+void Fractorium::OnActionDrawAffines(bool checked)
{
- m_Settings->ShowXforms(checked);
+ m_Settings->ShowXforms(checked);
- if (!ui.ActionDrawImage->isChecked() && !ui.ActionDrawXforms->isChecked())
- ui.ActionDrawImage->setChecked(true);
+ if (!ui.ActionDrawImage->isChecked() && !(ui.ActionDrawPreAffines->isChecked() || ui.ActionDrawPostAffines->isChecked()))
+ ui.ActionDrawImage->setChecked(true);
- ui.GLDisplay->update();
+ SaveAffineState();
+
+ ui.GLDisplay->update();
+}
+
+///
+/// Toggle whether to show selected/all post affines.
+/// Called when the show all post affine button is clicked.
+///
+/// Check state, show all pre affines if true, else show selected.
+void Fractorium::OnActionDrawAllAffines(bool checked)
+{
+ SaveAffineState();
+ ui.GLDisplay->update();
}
///
@@ -143,8 +168,8 @@ void Fractorium::OnActionDrawXforms(bool checked)
/// Check state, show image if true, else hide.
void Fractorium::OnActionDrawImage(bool checked)
{
- if (!ui.ActionDrawImage->isChecked() && !ui.ActionDrawXforms->isChecked())
- ui.ActionDrawXforms->setChecked(true);
+ if (!ui.ActionDrawImage->isChecked())
+ SyncAffineStateToToolbar();
ui.GLDisplay->update();
}
@@ -160,6 +185,32 @@ void Fractorium::OnActionDrawGrid(bool checked)
ui.GLDisplay->update();
}
+///
+/// Keep previous state of the affines to switch between Editor and Image
+///
+void Fractorium::SaveAffineState()
+{
+ if(!ui.ActionDrawPreAffines->isChecked() && !ui.ActionDrawPostAffines->isChecked())
+ return;
+
+ m_PreviousAffineState[(int)eAffineState::PRE] = ui.ActionDrawPreAffines->isChecked();
+ m_PreviousAffineState[(int)eAffineState::ALL_PRE] = ui.ActionDrawAllPreAffines->isChecked();
+ m_PreviousAffineState[(int)eAffineState::POST] = ui.ActionDrawPostAffines->isChecked();
+ m_PreviousAffineState[(int)eAffineState::ALL_POST] = ui.ActionDrawAllPostAffines->isChecked();
+}
+
+///
+/// Sync affine state data to the check state of the toolbar buttons.
+/// This does not trigger a clicked() event.
+///
+void Fractorium::SyncAffineStateToToolbar()
+{
+ ui.ActionDrawPreAffines->setChecked(m_PreviousAffineState[(int)eAffineState::PRE]);
+ ui.ActionDrawAllPreAffines->setChecked(m_PreviousAffineState[(int)eAffineState::ALL_PRE]);
+ ui.ActionDrawPostAffines->setChecked(m_PreviousAffineState[(int)eAffineState::POST]);
+ ui.ActionDrawAllPostAffines->setChecked(m_PreviousAffineState[(int)eAffineState::ALL_POST]);
+}
+
///
/// Sync options data to the check state of the toolbar buttons.
/// This does not trigger a clicked() event.
@@ -196,5 +247,8 @@ void Fractorium::SyncOptionsToToolbar()
}
ui.ActionDrawGrid->setChecked(m_Settings->ShowGrid());
- ui.ActionDrawXforms->setChecked(m_Settings->ShowXforms());
-}
\ No newline at end of file
+ ui.ActionDrawPreAffines->setChecked(m_Settings->ShowXforms());
+ ui.ActionDrawAllPreAffines->setChecked(m_Settings->ShowXforms());
+
+ SaveAffineState();
+}
diff --git a/Source/Fractorium/FractoriumXformsAffine.cpp b/Source/Fractorium/FractoriumXformsAffine.cpp
index 82d6e0d..fdafc1a 100644
--- a/Source/Fractorium/FractoriumXformsAffine.cpp
+++ b/Source/Fractorium/FractoriumXformsAffine.cpp
@@ -154,8 +154,10 @@ void Fractorium::InitXformsAffineUI()
m_PostSpins[5] = m_PostO2Spin;
ui.PreAffineGroupBox->setChecked(false);//Flip both once to force enabling/disabling the disabling of the group boxes and the corner buttons.
ui.PreAffineGroupBox->setChecked(true);//Pre affine enabled.
- ui.PostAffineGroupBox->setChecked(true);
- ui.PostAffineGroupBox->setChecked(false);//Post affine disabled.
+ ui.PostAffineGroupBox->setChecked(false);
+ ui.PostAffineGroupBox->setChecked(true);//Post affine enabled.
+ ui.PreAffineShowGroupBox->setVisible(false); // michel - to delete
+ ui.PostAffineShowGroupBox->setVisible(false); // michel - to delete
}
///
@@ -791,13 +793,9 @@ void Fractorium::SetupAffineSpinner(QTableWidget* table, const QObject* receiver
}
///
-/// GUI wrapper functions, getters only.
+/// GUI wrapper function, getter only.
///
-bool Fractorium::DrawSelectedPre() { return ui.ShowPreAffineSelectedRadio->isChecked(); }
-bool Fractorium::DrawAllPre() { return ui.ShowPreAffineAllRadio->isChecked(); }
-bool Fractorium::DrawSelectedPost() { return ui.ShowPostAffineSelectedRadio->isChecked(); }
-bool Fractorium::DrawAllPost() { return ui.ShowPostAffineAllRadio->isChecked(); }
bool Fractorium::LocalPivot() { return ui.LocalPivotRadio->isChecked(); }
template class FractoriumEmberController;
diff --git a/Source/Fractorium/GLWidget.cpp b/Source/Fractorium/GLWidget.cpp
index cc0a79f..1cbe296 100644
--- a/Source/Fractorium/GLWidget.cpp
+++ b/Source/Fractorium/GLWidget.cpp
@@ -523,8 +523,8 @@ void GLWidget::paintGL()
}
//Affine drawing.
- bool pre = m_Fractorium->ui.PreAffineGroupBox->isChecked();
- bool post = m_Fractorium->ui.PostAffineGroupBox->isChecked();
+ bool pre = m_Fractorium->DrawPreAffines();
+ bool post = m_Fractorium->DrawPostAffines();
this->glEnable(GL_BLEND);
this->glEnable(GL_LINE_SMOOTH);
this->glEnable(GL_POINT_SMOOTH);
@@ -1757,8 +1757,8 @@ void GLWidget::DrawAffineHelper(int index, float circleWidth, float lineWidth, b
template
int GLEmberController::UpdateHover(const v3T& glCoords)
{
- bool pre = m_Fractorium->ui.PreAffineGroupBox->isChecked();
- bool post = m_Fractorium->ui.PostAffineGroupBox->isChecked();
+ bool pre = m_Fractorium->DrawPreAffines();
+ bool post = m_Fractorium->DrawPostAffines();
int i = 0, bestIndex = -1;
T bestDist = 10;
auto ember = m_FractoriumEmberController->CurrentEmber();
diff --git a/Source/Fractorium/Icons/grid.png b/Source/Fractorium/Icons/grid.png
old mode 100644
new mode 100755
index 5169259..6ef219b
Binary files a/Source/Fractorium/Icons/grid.png and b/Source/Fractorium/Icons/grid.png differ
diff --git a/Source/Fractorium/Icons/pic.png b/Source/Fractorium/Icons/pic.png
old mode 100644
new mode 100755
index f617f2a..3d3d328
Binary files a/Source/Fractorium/Icons/pic.png and b/Source/Fractorium/Icons/pic.png differ
diff --git a/Source/Fractorium/Icons/reset_scale.png b/Source/Fractorium/Icons/reset_scale.png
new file mode 100755
index 0000000..9189258
Binary files /dev/null and b/Source/Fractorium/Icons/reset_scale.png differ