From 3cd970a347d5c3020157b6a956c277a7d765a801 Mon Sep 17 00:00:00 2001 From: mfeemster <matt.feemster@gmail.com> 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 @@ <file>Icons/infomation.png</file> <file>Icons/del.png</file> <file>Icons/add.png</file> + <file>Icons/link-add.png</file> <file>Icons/eraser.png</file> <file>Icons/editraise.png</file> <file>Icons/square.png</file> 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 @@ <widget class="QDockWidget" name="XformsDockWidget"> <property name="geometry"> <rect> - <x>300</x> + <x>280</x> <y>0</y> - <width>240</width> + <width>267</width> <height>881</height> </rect> </property> <property name="minimumSize"> <size> - <width>240</width> + <width>267</width> <height>613</height> </size> </property> @@ -2261,6 +2261,38 @@ </property> </widget> </item> + <item> + <widget class="QPushButton" name="AddLinkedXformButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>25</width> + <height>24</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>24</height> + </size> + </property> + <property name="toolTip"> + <string>Add linked xform</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="Fractorium.qrc"> + <normaloff>:/Fractorium/Icons/link-add.png</normaloff>:/Fractorium/Icons/link-add.png</iconset> + </property> + </widget> + </item> <item> <widget class="QPushButton" name="DuplicateXformButton"> <property name="sizePolicy"> @@ -3252,7 +3284,7 @@ SpinBox <rect> <x>0</x> <y>0</y> - <width>216</width> + <width>237</width> <height>745</height> </rect> </property> @@ -4909,7 +4941,7 @@ SpinBox <rect> <x>0</x> <y>0</y> - <width>216</width> + <width>237</width> <height>680</height> </rect> </property> 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<T>::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<T>::AddXform() Update([&]() { Xform<T> newXform; - QComboBox* combo = m_Fractorium->ui.CurrentXformCombo; newXform.m_Weight = 0.25; newXform.m_ColorX = m_Rand.Frand01<T>(); @@ -116,6 +117,55 @@ void FractoriumEmberController<T>::AddXform() void Fractorium::OnAddXformButtonClicked(bool checked) { m_Controller->AddXform(); } +/// <summary> +/// 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. +/// </summary> +/// <param name="checked">Ignored</param> +template <typename T> +void FractoriumEmberController<T>::AddLinkedXform() +{ + UpdateXform([&](Xform<T>* xform) + { + size_t i, count = m_Ember.XformCount(); + Xform<T> 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(); } + /// <summary> /// 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 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 bZnx`C8)wZj<^`Mh00000NkvXXu0mjfTbADU literal 0 HcmV?d00001