mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-06-30 21:36:33 -04:00
--User changes
-Clear all color curves when clicking Reset while holding down Ctrl. --Code changes -No longer assume palettes are 256 elements. Can now read and write longer palettes. -Ensure OpenCL images always get written when created.
This commit is contained in:
@ -248,6 +248,7 @@ public:
|
||||
virtual void PaletteCellClicked(int row, int col) { }
|
||||
virtual void SetBasePaletteAndAdjust(const Palette<float>& palette) { }
|
||||
virtual void PaletteEditorButtonClicked() { }
|
||||
virtual void PaletteEditorColorChanged() { }
|
||||
QImage& FinalPaletteImage() { return m_FinalPaletteImage; }
|
||||
|
||||
//Info.
|
||||
@ -535,6 +536,7 @@ public:
|
||||
virtual void PaletteCellClicked(int row, int col) override;
|
||||
virtual void SetBasePaletteAndAdjust(const Palette<float>& palette) override;
|
||||
virtual void PaletteEditorButtonClicked() override;
|
||||
virtual void PaletteEditorColorChanged() override;
|
||||
|
||||
//Info.
|
||||
virtual void FillSummary() override;
|
||||
|
@ -406,7 +406,7 @@ void FractoriumEmberController<T>::PaletteEditorButtonClicked()
|
||||
if (auto xform = m_Ember.GetTotalXform(index.first, forceFinal))
|
||||
xform->m_ColorX = index.second;
|
||||
|
||||
edPal = ed->GetPalette(int(256));
|
||||
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())
|
||||
@ -458,10 +458,16 @@ void Fractorium::OnPaletteEditorButtonClicked(bool checked)
|
||||
/// <summary>
|
||||
/// Slot called every time a color is changed in the palette editor.
|
||||
/// </summary>
|
||||
template <typename T>
|
||||
void FractoriumEmberController<T>::PaletteEditorColorChanged()
|
||||
{
|
||||
SetBasePaletteAndAdjust(m_Fractorium->m_PaletteEditor->GetPalette(int(m_TempPalette.Size())));
|
||||
}
|
||||
|
||||
void Fractorium::OnPaletteEditorColorChanged()
|
||||
{
|
||||
m_PaletteChanged = true;
|
||||
m_Controller->SetBasePaletteAndAdjust(m_PaletteEditor->GetPalette(int(256)));
|
||||
m_Controller->PaletteEditorColorChanged();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -569,7 +575,7 @@ void Fractorium::SetPaletteFileComboIndex(const string& filename)
|
||||
/// <summary>
|
||||
/// Reset the color curve values for the selected curve in the current ember to their default state and also update the curves control.
|
||||
/// Called when ResetCurvesButton is clicked.
|
||||
/// Note if they click Reset Curves when the "All" radio button is selected, then it clears all curves.
|
||||
/// Note if they click Reset Curves when the ctrl is pressed, then it clears all curves.
|
||||
/// Resets the rendering process at either ACCUM_ONLY by default, or FILTER_AND_ACCUM when using early clip.
|
||||
/// </summary>
|
||||
/// <param name="i">The index of the curve to be cleared, 0 to clear all.</param>
|
||||
@ -578,26 +584,34 @@ void FractoriumEmberController<T>::ClearColorCurves(int i)
|
||||
{
|
||||
Update([&]
|
||||
{
|
||||
if (i)
|
||||
m_Ember.m_Curves.Init(i);
|
||||
else
|
||||
m_Ember.m_Curves.Init(0);
|
||||
m_Ember.m_Curves.Init(i);
|
||||
|
||||
}, true, m_Renderer->EarlyClip() ? eProcessAction::FILTER_AND_ACCUM : eProcessAction::ACCUM_ONLY);
|
||||
FillCurvesControl();
|
||||
}
|
||||
|
||||
void Fractorium::OnResetCurvesButtonClicked(bool checked)
|
||||
{
|
||||
if (ui.CurvesAllRadio->isChecked())
|
||||
m_Controller->ClearColorCurves(0);
|
||||
else if (ui.CurvesRedRadio->isChecked())
|
||||
m_Controller->ClearColorCurves(1);
|
||||
else if (ui.CurvesGreenRadio->isChecked())
|
||||
m_Controller->ClearColorCurves(2);
|
||||
else if (ui.CurvesBlueRadio->isChecked())
|
||||
m_Controller->ClearColorCurves(3);
|
||||
if (!QGuiApplication::keyboardModifiers().testFlag(Qt::ControlModifier))
|
||||
{
|
||||
if (ui.CurvesAllRadio->isChecked())
|
||||
m_Controller->ClearColorCurves(0);
|
||||
else if (ui.CurvesRedRadio->isChecked())
|
||||
m_Controller->ClearColorCurves(1);
|
||||
else if (ui.CurvesGreenRadio->isChecked())
|
||||
m_Controller->ClearColorCurves(2);
|
||||
else if (ui.CurvesBlueRadio->isChecked())
|
||||
m_Controller->ClearColorCurves(3);
|
||||
else
|
||||
m_Controller->ClearColorCurves(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Controller->ClearColorCurves(0);
|
||||
m_Controller->ClearColorCurves(1);
|
||||
m_Controller->ClearColorCurves(2);
|
||||
m_Controller->ClearColorCurves(3);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -22,12 +22,12 @@ void Fractorium::InitParamsUI()
|
||||
SetFixedTableHeader(ui.IterationTableHeader->horizontalHeader());
|
||||
SetFixedTableHeader(ui.AnimationTableHeader->horizontalHeader());
|
||||
//Color.
|
||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_BrightnessSpin, spinHeight, 0.05, 1000, 1, SIGNAL(valueChanged(double)), SLOT(OnBrightnessChanged(double)), true, 4.0, 4.0, 4.0);
|
||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_GammaSpin, spinHeight, 1, 9999, 0.5, SIGNAL(valueChanged(double)), SLOT(OnGammaChanged(double)), true, 4.0, 4.0, 4.0);
|
||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_GammaThresholdSpin, spinHeight, 0, 10, 0.01, SIGNAL(valueChanged(double)), SLOT(OnGammaThresholdChanged(double)), true, 0.1, 0.1, 0.0);
|
||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_VibrancySpin, spinHeight, 0, 30, 0.01, SIGNAL(valueChanged(double)), SLOT(OnVibrancyChanged(double)), true, 1.0, 1.0, 0.0);
|
||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_BrightnessSpin, spinHeight, 0.01, dmax, 1, SIGNAL(valueChanged(double)), SLOT(OnBrightnessChanged(double)), true, 4.0, 4.0, 4.0);
|
||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_GammaSpin, spinHeight, 1, dmax, 0.5, SIGNAL(valueChanged(double)), SLOT(OnGammaChanged(double)), true, 4.0, 4.0, 4.0);
|
||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_GammaThresholdSpin, spinHeight, 0, dmax, 0.01, SIGNAL(valueChanged(double)), SLOT(OnGammaThresholdChanged(double)), true, 0.1, 0.1, 0.0);
|
||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_VibrancySpin, spinHeight, 0, dmax, 0.01, SIGNAL(valueChanged(double)), SLOT(OnVibrancyChanged(double)), true, 1.0, 1.0, 0.0);
|
||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_HighlightSpin, spinHeight, -1.0, 10, 0.1, SIGNAL(valueChanged(double)), SLOT(OnHighlightPowerChanged(double)), true, 1.0, 1.0, -1.0);
|
||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_K2Spin, spinHeight, 0, 10.0, 0.0001, SIGNAL(valueChanged(double)), SLOT(OnK2Changed(double)), true, 0, 0.0001, 0);
|
||||
SetupSpinner<DoubleSpinBox, double>(table, this, row, 1, m_K2Spin, spinHeight, 0, 99.0, 0.0001, SIGNAL(valueChanged(double)), SLOT(OnK2Changed(double)), true, 0, 0.0001, 0);
|
||||
m_HighlightSpin->DoubleClickLowVal(-1.0);
|
||||
int dec = 6;
|
||||
m_BrightnessSpin->setDecimals(dec);
|
||||
|
@ -229,7 +229,7 @@ void Fractorium::OnXformRefPaletteResized(int logicalIndex, int oldSize, int new
|
||||
template <typename T>
|
||||
QColor FractoriumEmberController<T>::ColorIndexToQColor(double d)
|
||||
{
|
||||
v4F entry = m_Ember.m_Palette[Clamp<size_t>(d * COLORMAP_LENGTH_MINUS_1, 0, m_Ember.m_Palette.Size())];
|
||||
v4F entry = m_Ember.m_Palette[Clamp<size_t>(d * (m_Ember.m_Palette.Size() - 1), 0, m_Ember.m_Palette.Size())];
|
||||
entry.r *= 255;
|
||||
entry.g *= 255;
|
||||
entry.b *= 255;
|
||||
|
Reference in New Issue
Block a user