From 2d2d561e297404a85a0844fd79795690e4cc7b16 Mon Sep 17 00:00:00 2001 From: Michel Mastriani Date: Sun, 19 May 2019 18:10:56 -0300 Subject: [PATCH 1/4] Solving Gnome Palette Editor problem --- Source/Fractorium/Fractorium.h | 2 + Source/Fractorium/FractoriumEmberController.h | 4 +- Source/Fractorium/FractoriumPalette.cpp | 63 ++++++++++++++++++- .../PaletteEditor/PaletteEditor.cpp | 23 ++++++- .../Fractorium/PaletteEditor/PaletteEditor.h | 6 +- 5 files changed, 94 insertions(+), 4 deletions(-) diff --git a/Source/Fractorium/Fractorium.h b/Source/Fractorium/Fractorium.h index 5de0a75..0ecc8b0 100644 --- a/Source/Fractorium/Fractorium.h +++ b/Source/Fractorium/Fractorium.h @@ -21,6 +21,7 @@ class GLWidget; class QssDialog; +class PaletteEditor; // michel class FractoriumOptionsDialog; class FractoriumVariationsDialog; class FractoriumFinalRenderDialog; @@ -359,6 +360,7 @@ public slots: void OnPaletteEditorColorChanged(); void OnPaletteEditorFileChanged(); void OnPaletteEditorColorIndexChanged(size_t index, float value); + void OnPaletteEditorFinished(int result); // michel //Info. void OnSummaryTableHeaderResized(int logicalIndex, int oldSize, int newSize); diff --git a/Source/Fractorium/FractoriumEmberController.h b/Source/Fractorium/FractoriumEmberController.h index 918b464..0322aa9 100644 --- a/Source/Fractorium/FractoriumEmberController.h +++ b/Source/Fractorium/FractoriumEmberController.h @@ -249,6 +249,7 @@ public: virtual void SetBasePaletteAndAdjust(const Palette& palette) { } virtual void PaletteEditorButtonClicked() { } virtual void PaletteEditorColorChanged() { } + virtual void SyncPalette(bool accepted) { } // michel QImage& FinalPaletteImage() { return m_FinalPaletteImage; } //Info. @@ -310,7 +311,7 @@ protected: unique_ptr m_Renderer; QTIsaac m_Rand; Fractorium* m_Fractorium; - Palette m_TempPalette; + Palette m_TempPalette, m_PreviosTempPalette; // michel std::unique_ptr m_RenderTimer; std::unique_ptr m_RenderRestartTimer; shared_ptr> m_PaletteList; @@ -537,6 +538,7 @@ public: virtual void SetBasePaletteAndAdjust(const Palette& palette) override; virtual void PaletteEditorButtonClicked() override; virtual void PaletteEditorColorChanged() override; + virtual void SyncPalette(bool accepted) override; // michel //Info. virtual void FillSummary() override; diff --git a/Source/Fractorium/FractoriumPalette.cpp b/Source/Fractorium/FractoriumPalette.cpp index 37d9ae6..b349c98 100644 --- a/Source/Fractorium/FractoriumPalette.cpp +++ b/Source/Fractorium/FractoriumPalette.cpp @@ -396,6 +396,12 @@ void FractoriumEmberController::PaletteEditorButtonClicked() ed->SetColorIndices(colorIndices); ed->SetPaletteFile(m_CurrentPaletteFilePath); + // michel - waiting to be approved - may be used with IFDEF LINUX + m_PreviosTempPalette = m_TempPalette; + ed->SetPreviousColorIndices(colorIndices); + ed->show(); + return; + //ed->setpal if (ed->exec() == QDialog::Accepted) { @@ -444,10 +450,11 @@ void Fractorium::OnPaletteEditorButtonClicked(bool checked) { if (!m_PaletteEditor) { - m_PaletteEditor = new PaletteEditor(this); + m_PaletteEditor = new PaletteEditor(this); connect(m_PaletteEditor, SIGNAL(PaletteChanged()), this, SLOT(OnPaletteEditorColorChanged()), Qt::QueuedConnection); connect(m_PaletteEditor, SIGNAL(PaletteFileChanged()), this, SLOT(OnPaletteEditorFileChanged()), Qt::QueuedConnection); connect(m_PaletteEditor, SIGNAL(ColorIndexChanged(size_t, float)), this, SLOT(OnPaletteEditorColorIndexChanged(size_t, float)), Qt::QueuedConnection); + connect(m_PaletteEditor, SIGNAL(finished(int)), this, SLOT(OnPaletteEditorFinished(int)), Qt::QueuedConnection); // michel } m_PaletteChanged = false; @@ -455,6 +462,51 @@ void Fractorium::OnPaletteEditorButtonClicked(bool checked) m_Controller->PaletteEditorButtonClicked(); } +// michel +/// +/// Slot called when palette editor window is closed. +/// +template +void FractoriumEmberController::SyncPalette(bool accepted) +{ + size_t i = 0; + auto ed = m_Fractorium->m_PaletteEditor; + Palette edPal; + Palette prevPal = m_PreviosTempPalette; + map colorIndices; + bool forceFinal = m_Fractorium->HaveFinal(); + + if (accepted) + { + //Copy all just to be safe, because they may or may not have synced. + colorIndices = ed->GetColorIndices(); + + for (auto& index : colorIndices) + if (auto xform = m_Ember.GetTotalXform(index.first, forceFinal)) + xform->m_ColorX = index.second; + + edPal = ed->GetPalette(int(prevPal.Size())); + SetBasePaletteAndAdjust(edPal);//This will take care of updating the color index controls. + + if (edPal.m_Filename.get() && !edPal.m_Filename->empty()) + m_Fractorium->SetPaletteFileComboIndex(*edPal.m_Filename); + } + else if (m_Fractorium->PaletteChanged())//They clicked cancel, but synced at least once, restore the previous palette. + { + colorIndices = ed->GetPreviousColorIndices(); + + for (auto& index : colorIndices) + if (auto xform = m_Ember.GetTotalXform(index.first, forceFinal)) + xform->m_ColorX = index.second; + + SetBasePaletteAndAdjust(prevPal);//This will take care of updating the color index controls. + } + + //Whether the current palette file was changed or not, if it's modifiable then reload it just to be safe (even though it might be overkill). + if (m_PaletteList->IsModifiable(m_CurrentPaletteFilePath)) + m_Fractorium->OnPaletteFilenameComboChanged(QString::fromStdString(m_CurrentPaletteFilePath)); +} + /// /// Slot called every time a color is changed in the palette editor. /// @@ -497,6 +549,15 @@ void Fractorium::OnPaletteEditorColorIndexChanged(size_t index, float value) OnXformColorIndexChanged(value, true, true, true, eXformUpdate::UPDATE_SPECIFIC, index); } +// michel +/// Slot called after EditPallete is closed. +/// +/// Cancel/OK action +void Fractorium::OnPaletteEditorFinished(int result) +{ + m_Controller->SyncPalette(result == QDialog::Accepted); +} + /// /// Apply the text in the palette filter text box to only show palettes whose names /// contain the substring. diff --git a/Source/Fractorium/PaletteEditor/PaletteEditor.cpp b/Source/Fractorium/PaletteEditor/PaletteEditor.cpp index 2e5ebd6..a76c5ac 100644 --- a/Source/Fractorium/PaletteEditor/PaletteEditor.cpp +++ b/Source/Fractorium/PaletteEditor/PaletteEditor.cpp @@ -117,6 +117,17 @@ map PaletteEditor::GetColorIndices() const return m_GradientColorView->GetColorIndices(); } +// michel +/// +/// Return the previous xform color indices as a map. +/// The keys are the xform indices, and the values are the color indices. +/// +/// The color indices +map PaletteEditor::GetPreviousColorIndices() const +{ + return m_PreviousColorIndices; +} + /// /// Assign the values of the xform color indices to the arrows. /// This will clear out any existing values first. @@ -127,6 +138,16 @@ void PaletteEditor::SetColorIndices(const map& indices) m_GradientColorView->SetColorIndices(indices); } +// michel +/// +/// Backup xform color +/// +/// The color indices to backup +void PaletteEditor::SetPreviousColorIndices(const map& indices) +{ + m_PreviousColorIndices = indices; +} + /// /// Return the filename of the currently selected palette. /// Note this will only be filled in if the user has clicked in the palette @@ -636,4 +657,4 @@ void PaletteEditor::EnablePaletteControls() bool PaletteEditor::IsCurrentPaletteAndFileEditable() { return m_PaletteList->IsModifiable(m_CurrentPaletteFilePath) && !m_GradientColorView->GetPalette(256).m_SourceColors.empty(); -} \ No newline at end of file +} diff --git a/Source/Fractorium/PaletteEditor/PaletteEditor.h b/Source/Fractorium/PaletteEditor/PaletteEditor.h index 4893e30..24ffc3b 100644 --- a/Source/Fractorium/PaletteEditor/PaletteEditor.h +++ b/Source/Fractorium/PaletteEditor/PaletteEditor.h @@ -1,6 +1,7 @@ #pragma once #include "FractoriumPch.h" +#include "Fractorium.h" // michel #include "ColorPickerWidget.h" #include "GradientColorsView.h" #include "EmberFile.h" @@ -26,14 +27,16 @@ class PaletteEditor : public QDialog Q_OBJECT public: - explicit PaletteEditor(QWidget* p = nullptr); + explicit PaletteEditor(QWidget* p = nullptr); public: bool Sync(); Palette& GetPalette(int size); void SetPalette(const Palette& palette); map GetColorIndices() const; + map GetPreviousColorIndices() const; // michel void SetColorIndices(const map& indices); + void SetPreviousColorIndices(const map& indices); // michel string GetPaletteFile() const; void SetPaletteFile(const string& filename); @@ -77,6 +80,7 @@ private: bool IsCurrentPaletteAndFileEditable(); bool m_PaletteFileChanged = false; int m_PaletteIndex = 0; + map m_PreviousColorIndices; // michel QString m_Filename; string m_CurrentPaletteFilePath; ColorPickerWidget* m_ColorPicker = nullptr; From 9fdf512a1f55173167bc19acb028bf46af4b9e3f Mon Sep 17 00:00:00 2001 From: Michel Mastriani Date: Tue, 21 May 2019 13:33:00 -0300 Subject: [PATCH 2/4] Solving Linux-Gnome Palette Editor problem --- Source/Fractorium/Fractorium.h | 4 ++-- Source/Fractorium/FractoriumEmberController.h | 6 +++--- Source/Fractorium/FractoriumPalette.cpp | 11 ++++++----- Source/Fractorium/PaletteEditor/PaletteEditor.cpp | 2 -- Source/Fractorium/PaletteEditor/PaletteEditor.h | 8 ++++---- 5 files changed, 15 insertions(+), 16 deletions(-) diff --git a/Source/Fractorium/Fractorium.h b/Source/Fractorium/Fractorium.h index 0ecc8b0..70308d2 100644 --- a/Source/Fractorium/Fractorium.h +++ b/Source/Fractorium/Fractorium.h @@ -21,7 +21,7 @@ class GLWidget; class QssDialog; -class PaletteEditor; // michel +class PaletteEditor; class FractoriumOptionsDialog; class FractoriumVariationsDialog; class FractoriumFinalRenderDialog; @@ -360,7 +360,7 @@ public slots: void OnPaletteEditorColorChanged(); void OnPaletteEditorFileChanged(); void OnPaletteEditorColorIndexChanged(size_t index, float value); - void OnPaletteEditorFinished(int result); // michel + void OnPaletteEditorFinished(int result); //Info. void OnSummaryTableHeaderResized(int logicalIndex, int oldSize, int newSize); diff --git a/Source/Fractorium/FractoriumEmberController.h b/Source/Fractorium/FractoriumEmberController.h index 0322aa9..94d8fd8 100644 --- a/Source/Fractorium/FractoriumEmberController.h +++ b/Source/Fractorium/FractoriumEmberController.h @@ -249,7 +249,7 @@ public: virtual void SetBasePaletteAndAdjust(const Palette& palette) { } virtual void PaletteEditorButtonClicked() { } virtual void PaletteEditorColorChanged() { } - virtual void SyncPalette(bool accepted) { } // michel + virtual void SyncPalette(bool accepted) { } QImage& FinalPaletteImage() { return m_FinalPaletteImage; } //Info. @@ -311,7 +311,7 @@ protected: unique_ptr m_Renderer; QTIsaac m_Rand; Fractorium* m_Fractorium; - Palette m_TempPalette, m_PreviosTempPalette; // michel + Palette m_TempPalette, m_PreviosTempPalette; std::unique_ptr m_RenderTimer; std::unique_ptr m_RenderRestartTimer; shared_ptr> m_PaletteList; @@ -538,7 +538,7 @@ public: virtual void SetBasePaletteAndAdjust(const Palette& palette) override; virtual void PaletteEditorButtonClicked() override; virtual void PaletteEditorColorChanged() override; - virtual void SyncPalette(bool accepted) override; // michel + virtual void SyncPalette(bool accepted) override; //Info. virtual void FillSummary() override; diff --git a/Source/Fractorium/FractoriumPalette.cpp b/Source/Fractorium/FractoriumPalette.cpp index b349c98..7f4fda2 100644 --- a/Source/Fractorium/FractoriumPalette.cpp +++ b/Source/Fractorium/FractoriumPalette.cpp @@ -396,11 +396,11 @@ void FractoriumEmberController::PaletteEditorButtonClicked() ed->SetColorIndices(colorIndices); ed->SetPaletteFile(m_CurrentPaletteFilePath); - // michel - waiting to be approved - may be used with IFDEF LINUX +#ifdef __linux__ m_PreviosTempPalette = m_TempPalette; ed->SetPreviousColorIndices(colorIndices); ed->show(); - return; +#else //ed->setpal if (ed->exec() == QDialog::Accepted) @@ -430,6 +430,7 @@ void FractoriumEmberController::PaletteEditorButtonClicked() //Whether the current palette file was changed or not, if it's modifiable then reload it just to be safe (even though it might be overkill). if (m_PaletteList->IsModifiable(m_CurrentPaletteFilePath)) m_Fractorium->OnPaletteFilenameComboChanged(QString::fromStdString(m_CurrentPaletteFilePath)); +#endif } /// @@ -454,7 +455,9 @@ void Fractorium::OnPaletteEditorButtonClicked(bool checked) connect(m_PaletteEditor, SIGNAL(PaletteChanged()), this, SLOT(OnPaletteEditorColorChanged()), Qt::QueuedConnection); connect(m_PaletteEditor, SIGNAL(PaletteFileChanged()), this, SLOT(OnPaletteEditorFileChanged()), Qt::QueuedConnection); connect(m_PaletteEditor, SIGNAL(ColorIndexChanged(size_t, float)), this, SLOT(OnPaletteEditorColorIndexChanged(size_t, float)), Qt::QueuedConnection); - connect(m_PaletteEditor, SIGNAL(finished(int)), this, SLOT(OnPaletteEditorFinished(int)), Qt::QueuedConnection); // michel +#ifdef __linux__ + connect(m_PaletteEditor, SIGNAL(finished(int)), this, SLOT(OnPaletteEditorFinished(int)), Qt::QueuedConnection); +#endif } m_PaletteChanged = false; @@ -462,7 +465,6 @@ void Fractorium::OnPaletteEditorButtonClicked(bool checked) m_Controller->PaletteEditorButtonClicked(); } -// michel /// /// Slot called when palette editor window is closed. /// @@ -549,7 +551,6 @@ void Fractorium::OnPaletteEditorColorIndexChanged(size_t index, float value) OnXformColorIndexChanged(value, true, true, true, eXformUpdate::UPDATE_SPECIFIC, index); } -// michel /// Slot called after EditPallete is closed. /// /// Cancel/OK action diff --git a/Source/Fractorium/PaletteEditor/PaletteEditor.cpp b/Source/Fractorium/PaletteEditor/PaletteEditor.cpp index a76c5ac..63c78cb 100644 --- a/Source/Fractorium/PaletteEditor/PaletteEditor.cpp +++ b/Source/Fractorium/PaletteEditor/PaletteEditor.cpp @@ -117,7 +117,6 @@ map PaletteEditor::GetColorIndices() const return m_GradientColorView->GetColorIndices(); } -// michel /// /// Return the previous xform color indices as a map. /// The keys are the xform indices, and the values are the color indices. @@ -138,7 +137,6 @@ void PaletteEditor::SetColorIndices(const map& indices) m_GradientColorView->SetColorIndices(indices); } -// michel /// /// Backup xform color /// diff --git a/Source/Fractorium/PaletteEditor/PaletteEditor.h b/Source/Fractorium/PaletteEditor/PaletteEditor.h index 24ffc3b..82010e6 100644 --- a/Source/Fractorium/PaletteEditor/PaletteEditor.h +++ b/Source/Fractorium/PaletteEditor/PaletteEditor.h @@ -1,7 +1,7 @@ #pragma once #include "FractoriumPch.h" -#include "Fractorium.h" // michel +#include "Fractorium.h" #include "ColorPickerWidget.h" #include "GradientColorsView.h" #include "EmberFile.h" @@ -34,9 +34,9 @@ public: Palette& GetPalette(int size); void SetPalette(const Palette& palette); map GetColorIndices() const; - map GetPreviousColorIndices() const; // michel + map GetPreviousColorIndices() const; void SetColorIndices(const map& indices); - void SetPreviousColorIndices(const map& indices); // michel + void SetPreviousColorIndices(const map& indices); string GetPaletteFile() const; void SetPaletteFile(const string& filename); @@ -80,7 +80,7 @@ private: bool IsCurrentPaletteAndFileEditable(); bool m_PaletteFileChanged = false; int m_PaletteIndex = 0; - map m_PreviousColorIndices; // michel + map m_PreviousColorIndices; QString m_Filename; string m_CurrentPaletteFilePath; ColorPickerWidget* m_ColorPicker = nullptr; From fcdfb0b300c0354624f2d7ba4d38de7490898399 Mon Sep 17 00:00:00 2001 From: Michel Mastriani Date: Tue, 21 May 2019 19:15:45 -0300 Subject: [PATCH 3/4] Removed duplicated code --- Source/Fractorium/FractoriumPalette.cpp | 50 ++++++------------------- 1 file changed, 11 insertions(+), 39 deletions(-) diff --git a/Source/Fractorium/FractoriumPalette.cpp b/Source/Fractorium/FractoriumPalette.cpp index 7f4fda2..2979d95 100644 --- a/Source/Fractorium/FractoriumPalette.cpp +++ b/Source/Fractorium/FractoriumPalette.cpp @@ -383,53 +383,25 @@ template void FractoriumEmberController::PaletteEditorButtonClicked() { size_t i = 0; - auto ed = m_Fractorium->m_PaletteEditor; - Palette edPal; - Palette prevPal = m_TempPalette; + auto ed = m_Fractorium->m_PaletteEditor; map colorIndices; - bool forceFinal = m_Fractorium->HaveFinal(); - ed->SetPalette(m_TempPalette); + bool forceFinal = m_Fractorium->HaveFinal(); + + m_PreviosTempPalette = m_TempPalette; // it's necessary because m_TempPalette is changed when the user make changes in palette editor + + ed->SetPalette(m_TempPalette); while (auto xform = m_Ember.GetTotalXform(i, forceFinal)) colorIndices[i++] = xform->m_ColorX; ed->SetColorIndices(colorIndices); + ed->SetPreviousColorIndices(colorIndices); // also necessary because the colors are changed in palette editor ed->SetPaletteFile(m_CurrentPaletteFilePath); -#ifdef __linux__ - m_PreviosTempPalette = m_TempPalette; - ed->SetPreviousColorIndices(colorIndices); +#ifndef __linux__ ed->show(); -#else - - //ed->setpal - if (ed->exec() == QDialog::Accepted) - { - //Copy all just to be safe, because they may or may not have synced. - colorIndices = ed->GetColorIndices(); - - for (auto& index : colorIndices) - if (auto xform = m_Ember.GetTotalXform(index.first, forceFinal)) - xform->m_ColorX = index.second; - - edPal = ed->GetPalette(int(prevPal.Size())); - SetBasePaletteAndAdjust(edPal);//This will take care of updating the color index controls. - - if (edPal.m_Filename.get() && !edPal.m_Filename->empty()) - m_Fractorium->SetPaletteFileComboIndex(*edPal.m_Filename); - } - else if (m_Fractorium->PaletteChanged())//They clicked cancel, but synced at least once, restore the previous palette. - { - for (auto& index : colorIndices) - if (auto xform = m_Ember.GetTotalXform(index.first, forceFinal)) - xform->m_ColorX = index.second; - - SetBasePaletteAndAdjust(prevPal);//This will take care of updating the color index controls. - } - - //Whether the current palette file was changed or not, if it's modifiable then reload it just to be safe (even though it might be overkill). - if (m_PaletteList->IsModifiable(m_CurrentPaletteFilePath)) - m_Fractorium->OnPaletteFilenameComboChanged(QString::fromStdString(m_CurrentPaletteFilePath)); +#else + SyncPalette(ed->exec() == QDialog::Accepted); #endif } @@ -455,7 +427,7 @@ void Fractorium::OnPaletteEditorButtonClicked(bool checked) connect(m_PaletteEditor, SIGNAL(PaletteChanged()), this, SLOT(OnPaletteEditorColorChanged()), Qt::QueuedConnection); connect(m_PaletteEditor, SIGNAL(PaletteFileChanged()), this, SLOT(OnPaletteEditorFileChanged()), Qt::QueuedConnection); connect(m_PaletteEditor, SIGNAL(ColorIndexChanged(size_t, float)), this, SLOT(OnPaletteEditorColorIndexChanged(size_t, float)), Qt::QueuedConnection); -#ifdef __linux__ +#ifndef __linux__ connect(m_PaletteEditor, SIGNAL(finished(int)), this, SLOT(OnPaletteEditorFinished(int)), Qt::QueuedConnection); #endif } From 96e8bcdb235298446f49a3402e5025d9f7b66902 Mon Sep 17 00:00:00 2001 From: Michel Mastriani Date: Tue, 21 May 2019 22:35:23 +0000 Subject: [PATCH 4/4] FractoriumPalette.cpp edited online with Bitbucket --- Source/Fractorium/FractoriumPalette.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Fractorium/FractoriumPalette.cpp b/Source/Fractorium/FractoriumPalette.cpp index 2979d95..7405026 100644 --- a/Source/Fractorium/FractoriumPalette.cpp +++ b/Source/Fractorium/FractoriumPalette.cpp @@ -398,7 +398,7 @@ void FractoriumEmberController::PaletteEditorButtonClicked() ed->SetPreviousColorIndices(colorIndices); // also necessary because the colors are changed in palette editor ed->SetPaletteFile(m_CurrentPaletteFilePath); -#ifndef __linux__ +#ifdef __linux__ ed->show(); #else SyncPalette(ed->exec() == QDialog::Accepted); @@ -427,7 +427,7 @@ void Fractorium::OnPaletteEditorButtonClicked(bool checked) connect(m_PaletteEditor, SIGNAL(PaletteChanged()), this, SLOT(OnPaletteEditorColorChanged()), Qt::QueuedConnection); connect(m_PaletteEditor, SIGNAL(PaletteFileChanged()), this, SLOT(OnPaletteEditorFileChanged()), Qt::QueuedConnection); connect(m_PaletteEditor, SIGNAL(ColorIndexChanged(size_t, float)), this, SLOT(OnPaletteEditorColorIndexChanged(size_t, float)), Qt::QueuedConnection); -#ifndef __linux__ +#ifdef __linux__ connect(m_PaletteEditor, SIGNAL(finished(int)), this, SLOT(OnPaletteEditorFinished(int)), Qt::QueuedConnection); #endif }