From 3cd970a347d5c3020157b6a956c277a7d765a801 Mon Sep 17 00:00:00 2001 From: mfeemster Date: Wed, 24 Jun 2015 20:49:09 -0700 Subject: [PATCH] --User changes Add linked xform support, with new button and icon on the xforms tab. --- Source/Fractorium/Fractorium.h | 1 + Source/Fractorium/Fractorium.qrc | 1 + Source/Fractorium/Fractorium.ui | 42 ++++++++++++-- Source/Fractorium/FractoriumEmberController.h | 2 + Source/Fractorium/FractoriumXforms.cpp | 52 +++++++++++++++++- Source/Fractorium/Icons/link-add.png | Bin 0 -> 4125 bytes 6 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 Source/Fractorium/Icons/link-add.png diff --git a/Source/Fractorium/Fractorium.h b/Source/Fractorium/Fractorium.h index 6a4d469..ac92fe1 100644 --- a/Source/Fractorium/Fractorium.h +++ b/Source/Fractorium/Fractorium.h @@ -190,6 +190,7 @@ public slots: //Xforms. void OnCurrentXformComboChanged(int index); void OnAddXformButtonClicked(bool checked); + void OnAddLinkedXformButtonClicked(bool checked); void OnDuplicateXformButtonClicked(bool checked); void OnClearXformButtonClicked(bool checked); void OnDeleteXformButtonClicked(bool checked); diff --git a/Source/Fractorium/Fractorium.qrc b/Source/Fractorium/Fractorium.qrc index 4526a6f..7aa53a3 100644 --- a/Source/Fractorium/Fractorium.qrc +++ b/Source/Fractorium/Fractorium.qrc @@ -38,6 +38,7 @@ Icons/infomation.png Icons/del.png Icons/add.png + Icons/link-add.png Icons/eraser.png Icons/editraise.png Icons/square.png diff --git a/Source/Fractorium/Fractorium.ui b/Source/Fractorium/Fractorium.ui index 8ded213..caf978c 100644 --- a/Source/Fractorium/Fractorium.ui +++ b/Source/Fractorium/Fractorium.ui @@ -2146,15 +2146,15 @@ - 300 + 280 0 - 240 + 267 881 - 240 + 267 613 @@ -2261,6 +2261,38 @@ + + + + + 0 + 0 + + + + + 25 + 24 + + + + + 16777215 + 24 + + + + Add linked xform + + + + + + + :/Fractorium/Icons/link-add.png:/Fractorium/Icons/link-add.png + + + @@ -3252,7 +3284,7 @@ SpinBox 0 0 - 216 + 237 745 @@ -4909,7 +4941,7 @@ SpinBox 0 0 - 216 + 237 680 diff --git a/Source/Fractorium/FractoriumEmberController.h b/Source/Fractorium/FractoriumEmberController.h index 25cce67..4a6b5af 100644 --- a/Source/Fractorium/FractoriumEmberController.h +++ b/Source/Fractorium/FractoriumEmberController.h @@ -62,6 +62,7 @@ public: virtual void SetEmber(size_t index) { } //virtual void Clear() { } virtual void AddXform() { } + virtual void AddLinkedXform() { } virtual void DuplicateXform() { } virtual void ClearXform() { } virtual void DeleteXforms() { } @@ -290,6 +291,7 @@ public: virtual void SetEmber(size_t index) override; //virtual void Clear() override { } virtual void AddXform() override; + virtual void AddLinkedXform() override; virtual void DuplicateXform() override; virtual void ClearXform() override; virtual void DeleteXforms() override; diff --git a/Source/Fractorium/FractoriumXforms.cpp b/Source/Fractorium/FractoriumXforms.cpp index b2105aa..85dda72 100644 --- a/Source/Fractorium/FractoriumXforms.cpp +++ b/Source/Fractorium/FractoriumXforms.cpp @@ -9,6 +9,7 @@ void Fractorium::InitXformsUI() int spinHeight = 20, row = 0; connect(ui.AddXformButton, SIGNAL(clicked(bool)), this, SLOT(OnAddXformButtonClicked(bool)), Qt::QueuedConnection); + connect(ui.AddLinkedXformButton, SIGNAL(clicked(bool)), this, SLOT(OnAddLinkedXformButtonClicked(bool)), Qt::QueuedConnection); connect(ui.DuplicateXformButton, SIGNAL(clicked(bool)), this, SLOT(OnDuplicateXformButtonClicked(bool)), Qt::QueuedConnection); connect(ui.ClearXformButton, SIGNAL(clicked(bool)), this, SLOT(OnClearXformButtonClicked(bool)), Qt::QueuedConnection); connect(ui.DeleteXformButton, SIGNAL(clicked(bool)), this, SLOT(OnDeleteXformButtonClicked(bool)), Qt::QueuedConnection); @@ -86,6 +87,7 @@ void FractoriumEmberController::CurrentXformComboChanged(int index) m_Fractorium->ui.DuplicateXformButton->setEnabled(enable); m_Fractorium->m_XformWeightSpin->setEnabled(enable); m_Fractorium->ui.SoloXformCheckBox->setEnabled(enable); + m_Fractorium->ui.AddLinkedXformButton->setEnabled(enable); m_Fractorium->ui.AddFinalXformButton->setEnabled(enable); } } @@ -104,7 +106,6 @@ void FractoriumEmberController::AddXform() Update([&]() { Xform newXform; - QComboBox* combo = m_Fractorium->ui.CurrentXformCombo; newXform.m_Weight = 0.25; newXform.m_ColorX = m_Rand.Frand01(); @@ -116,6 +117,55 @@ void FractoriumEmberController::AddXform() void Fractorium::OnAddXformButtonClicked(bool checked) { m_Controller->AddXform(); } +/// +/// Add a new linked xform in the current ember and set it as the current xform. +/// Linked means: +/// +/// Called when the add xform button is clicked. +/// Resets the rendering process. +/// +/// Ignored +template +void FractoriumEmberController::AddLinkedXform() +{ + UpdateXform([&](Xform* xform) + { + size_t i, count = m_Ember.XformCount(); + Xform newXform; + + newXform.m_Weight = 0.5; + newXform.m_Opacity = 1; + newXform.m_ColorSpeed = 1; + newXform.m_ColorX = xform->m_ColorX; + //newXform.m_ColorY = xform->m_ColorY; + + //Set all of the new xform's xaos values to the selected xform's xaos values, + //then set the selected xform's xaos values to 0. + for (i = 0; i < count; i++) + { + newXform.SetXaos(i, xform->Xaos(i)); + xform->SetXaos(i, 0); + } + + //Add the new xform and update the total count. + m_Ember.AddXform(newXform); + count = m_Ember.XformCount(); + + //Set the xaos for all xforms pointing to the new one to zero. + for (i = 0; i < count; i++) + if (auto* xf = m_Ember.GetXform(i)) + xf->SetXaos(count - 1, 0); + + xform->SetXaos(count - 1, 1);//Set the xaos value for the previous xform pointing to the new one to one. + xform->m_Opacity = 0;//Clear the opacity of the previous xform. + int index = m_Ember.TotalXformCount() - (m_Ember.UseFinalXform() ? 2 : 1);//Set index to the last item before final. + FillXforms(index); + FillXaos(); + }, eXformUpdate::UPDATE_CURRENT); +} + +void Fractorium::OnAddLinkedXformButtonClicked(bool checked) { m_Controller->AddLinkedXform(); } + /// /// Duplicate the specified xforms in the current ember, and set the last one as the current xform. /// Called when the duplicate xform button is clicked. diff --git a/Source/Fractorium/Icons/link-add.png b/Source/Fractorium/Icons/link-add.png new file mode 100644 index 0000000000000000000000000000000000000000..8dfce00b380226de65bba244748f4e52291921d3 GIT binary patch literal 4125 zcmV+&5aRENP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 bZnx`C8)wZj<^`Mh00000NkvXXu0mjfTbADU literal 0 HcmV?d00001