diff --git a/Source/Ember/DensityFilter.h b/Source/Ember/DensityFilter.h
index ec6436e..d0a006e 100644
--- a/Source/Ember/DensityFilter.h
+++ b/Source/Ember/DensityFilter.h
@@ -56,6 +56,12 @@ public:
if (m_MaxRad < m_MinRad)
m_MaxRad = m_MinRad + 1;
+
+ //Ensure it's valid.
+ while (!Valid())
+ {
+ m_Curve += T(0.1);
+ }
}
///
diff --git a/Source/Ember/Renderer.cpp b/Source/Ember/Renderer.cpp
index f81b1bd..361eca3 100644
--- a/Source/Ember/Renderer.cpp
+++ b/Source/Ember/Renderer.cpp
@@ -244,6 +244,8 @@ bool Renderer::CreateSpatialFilter(bool& newAlloc)
{
m_SpatialFilter = unique_ptr>(
SpatialFilterCreator::Create(m_Ember.m_SpatialFilterType, m_Ember.m_SpatialFilterRadius, m_Ember.m_Supersample, m_PixelAspectRatio));
+
+ m_Ember.m_SpatialFilterRadius = m_SpatialFilter->FilterRadius();//It may have been changed internally if it was too small, so ensure they're synced.
newAlloc = true;
}
diff --git a/Source/Ember/SpatialFilter.h b/Source/Ember/SpatialFilter.h
index d21082b..5e4b421 100644
--- a/Source/Ember/SpatialFilter.h
+++ b/Source/Ember/SpatialFilter.h
@@ -105,45 +105,51 @@ public:
///
void Create()
{
- T fw = T(2.0) * m_Support * m_Supersample * m_FilterRadius / m_PixelAspectRatio;
- T adjust, ii, jj;
-
- int fwidth = ((int)fw) + 1;
- int i, j;
-
- //Make sure the filter kernel has same parity as oversample.
- if ((fwidth ^ m_Supersample) & 1)
- fwidth++;
-
- //Calculate the coordinate scaling factor for the kernel values.
- if (fw > 0.0)
- adjust = m_Support * fwidth / fw;
- else
- adjust = T(1.0);
-
- m_Filter.resize(fwidth * fwidth);
-
- //Fill in the coefs.
- for (i = 0; i < fwidth; i++)
+ do
{
- for (j = 0; j < fwidth; j++)
+ T fw = T(2.0) * m_Support * m_Supersample * m_FilterRadius / m_PixelAspectRatio;
+ T adjust, ii, jj;
+
+ int fwidth = ((int)fw) + 1;
+ int i, j;
+
+ //Make sure the filter kernel has same parity as oversample.
+ if ((fwidth ^ m_Supersample) & 1)
+ fwidth++;
+
+ //Calculate the coordinate scaling factor for the kernel values.
+ if (fw > 0.0)
+ adjust = m_Support * fwidth / fw;
+ else
+ adjust = T(1.0);
+
+ m_Filter.resize(fwidth * fwidth);
+
+ //Fill in the coefs.
+ for (i = 0; i < fwidth; i++)
{
- //Calculate the function inputs for the kernel function.
- ii = ((T(2.0) * i + T(1.0)) / T(fwidth) - T(1.0)) * adjust;
- jj = ((T(2.0) * j + T(1.0)) / T(fwidth) - T(1.0)) * adjust;
+ for (j = 0; j < fwidth; j++)
+ {
+ //Calculate the function inputs for the kernel function.
+ ii = ((T(2.0) * i + T(1.0)) / T(fwidth) - T(1.0)) * adjust;
+ jj = ((T(2.0) * j + T(1.0)) / T(fwidth) - T(1.0)) * adjust;
- //Adjust for aspect ratio.
- jj /= m_PixelAspectRatio;
+ //Adjust for aspect ratio.
+ jj /= m_PixelAspectRatio;
- m_Filter[i + j * fwidth] = Filter(ii) * Filter(jj);//Call virtual Filter(), implemented in specific derived filter classes.
+ m_Filter[i + j * fwidth] = Filter(ii) * Filter(jj);//Call virtual Filter(), implemented in specific derived filter classes.
+ }
}
- }
- //Normalize, and return a bad value if the values were too small.
- if (!Normalize())
- m_FinalFilterWidth = -1;
- else
- m_FinalFilterWidth = fwidth;
+ //Attempt to normalize, and increase the filter width if the values were too small.
+ if (!Normalize())
+ {
+ m_FinalFilterWidth = fwidth;
+ break;
+ }
+
+ m_FilterRadius += T(0.01);//Values were too small.
+ } while (1);
}
///
diff --git a/Source/Fractorium/DoubleSpinBox.cpp b/Source/Fractorium/DoubleSpinBox.cpp
index c062898..ec41eb5 100644
--- a/Source/Fractorium/DoubleSpinBox.cpp
+++ b/Source/Fractorium/DoubleSpinBox.cpp
@@ -117,26 +117,26 @@ bool DoubleSpinBox::eventFilter(QObject* o, QEvent* e)
{
if (e->type() == QMouseEvent::MouseButtonPress && isEnabled())
{
- QPoint pt;
-
- if (QMouseEvent* me = (QMouseEvent*)e)
- pt = me->localPos().toPoint();
-
- int pos = lineEdit()->cursorPositionAt(pt);
-
- if (lineEdit()->selectedText() != "")
- {
- lineEdit()->deselect();
- lineEdit()->setCursorPosition(pos);
- return true;
- }
- else if (m_Select)
- {
- lineEdit()->setCursorPosition(pos);
- selectAll();
- m_Select = false;
- return true;
- }
+ // QPoint pt;
+ //
+ // if (QMouseEvent* me = (QMouseEvent*)e)
+ // pt = me->localPos().toPoint();
+ //
+ // int pos = lineEdit()->cursorPositionAt(pt);
+ //
+ // if (lineEdit()->selectedText() != "")
+ // {
+ // lineEdit()->deselect();
+ // lineEdit()->setCursorPosition(pos);
+ // return true;
+ // }
+ // else if (m_Select)
+ // {
+ // lineEdit()->setCursorPosition(pos);
+ // selectAll();
+ // m_Select = false;
+ // return true;
+ // }
}
else if (m_DoubleClick && e->type() == QMouseEvent::MouseButtonDblClick && isEnabled())
{
@@ -172,7 +172,7 @@ bool DoubleSpinBox::eventFilter(QObject* o, QEvent* e)
/// The event
void DoubleSpinBox::focusInEvent(QFocusEvent* e)
{
- lineEdit()->setReadOnly(false);
+ //lineEdit()->setReadOnly(false);
QDoubleSpinBox::focusInEvent(e);
}
@@ -185,8 +185,8 @@ void DoubleSpinBox::focusInEvent(QFocusEvent* e)
/// The event
void DoubleSpinBox::focusOutEvent(QFocusEvent* e)
{
- lineEdit()->deselect();//Clear selection when leaving.
- lineEdit()->setReadOnly(true);//Clever hack to clear the cursor when leaving.
+ //lineEdit()->deselect();//Clear selection when leaving.
+ //lineEdit()->setReadOnly(true);//Clever hack to clear the cursor when leaving.
QDoubleSpinBox::focusOutEvent(e);
}
@@ -197,8 +197,8 @@ void DoubleSpinBox::focusOutEvent(QFocusEvent* e)
/// The event
void DoubleSpinBox::enterEvent(QEvent* e)
{
- m_Select = true;
- setFocus();
+ //m_Select = true;
+ //setFocus();
QDoubleSpinBox::enterEvent(e);
}
@@ -209,7 +209,7 @@ void DoubleSpinBox::enterEvent(QEvent* e)
/// The event
void DoubleSpinBox::leaveEvent(QEvent* e)
{
- m_Select = false;
- clearFocus();
+ //m_Select = false;
+ //clearFocus();
QDoubleSpinBox::leaveEvent(e);
}
diff --git a/Source/Fractorium/FractoriumXformsAffine.cpp b/Source/Fractorium/FractoriumXformsAffine.cpp
index 4403960..2b8207a 100644
--- a/Source/Fractorium/FractoriumXformsAffine.cpp
+++ b/Source/Fractorium/FractoriumXformsAffine.cpp
@@ -33,13 +33,21 @@ void Fractorium::InitXformsAffineUI()
SetupAffineSpinner(table, this, 2, 0, m_PostO1Spin, spinHeight, affineMin, affineMax, affineStep, affinePrec, SIGNAL(valueChanged(double)), SLOT(OnO1Changed(double)));
SetupAffineSpinner(table, this, 2, 1, m_PostO2Spin, spinHeight, affineMin, affineMax, affineStep, affinePrec, SIGNAL(valueChanged(double)), SLOT(OnO2Changed(double)));
- ui.PreRotateCombo->setValidator(new QDoubleValidator(ui.PreRotateCombo));
- ui.PreMoveCombo->setValidator( new QDoubleValidator(ui.PreMoveCombo));
- ui.PreScaleCombo->setValidator( new QDoubleValidator(ui.PreScaleCombo));
+ QDoubleValidator* preRotateVal = new QDoubleValidator(ui.PreRotateCombo); preRotateVal->setLocale(QLocale::system());
+ QDoubleValidator* preMoveVal = new QDoubleValidator(ui.PreMoveCombo); preMoveVal->setLocale(QLocale::system());
+ QDoubleValidator* preScaleVal = new QDoubleValidator(ui.PreScaleCombo); preScaleVal->setLocale(QLocale::system());
- ui.PostRotateCombo->setValidator(new QDoubleValidator(ui.PostRotateCombo));
- ui.PostMoveCombo->setValidator( new QDoubleValidator(ui.PostMoveCombo));
- ui.PostScaleCombo->setValidator( new QDoubleValidator(ui.PostScaleCombo));
+ QDoubleValidator* postRotateVal = new QDoubleValidator(ui.PostRotateCombo); postRotateVal->setLocale(QLocale::system());
+ QDoubleValidator* postMoveVal = new QDoubleValidator(ui.PostMoveCombo); postMoveVal->setLocale(QLocale::system());
+ QDoubleValidator* postScaleVal = new QDoubleValidator(ui.PostScaleCombo); postScaleVal->setLocale(QLocale::system());
+
+ ui.PreRotateCombo->setValidator(preRotateVal);
+ ui.PreMoveCombo->setValidator(preMoveVal);
+ ui.PreScaleCombo->setValidator(preScaleVal);
+
+ ui.PostRotateCombo->setValidator(postRotateVal);
+ ui.PostMoveCombo->setValidator(postMoveVal);
+ ui.PostScaleCombo->setValidator(postScaleVal);
connect(ui.PreFlipHorizontalButton, SIGNAL(clicked(bool)), this, SLOT(OnFlipHorizontalButtonClicked(bool)), Qt::QueuedConnection);
connect(ui.PreFlipVerticalButton, SIGNAL(clicked(bool)), this, SLOT(OnFlipVerticalButtonClicked(bool)), Qt::QueuedConnection);
diff --git a/Source/Fractorium/SpinBox.cpp b/Source/Fractorium/SpinBox.cpp
index 761fb87..6e4177a 100644
--- a/Source/Fractorium/SpinBox.cpp
+++ b/Source/Fractorium/SpinBox.cpp
@@ -107,26 +107,26 @@ bool SpinBox::eventFilter(QObject* o, QEvent* e)
{
if (e->type() == QMouseEvent::MouseButtonPress && isEnabled())
{
- QPoint pt;
-
- if (QMouseEvent* me = (QMouseEvent*)e)
- pt = me->localPos().toPoint();
-
- int pos = lineEdit()->cursorPositionAt(pt);
-
- if (lineEdit()->selectedText() != "")
- {
- lineEdit()->deselect();
- lineEdit()->setCursorPosition(pos);
- return true;
- }
- else if (m_Select)
- {
- lineEdit()->setCursorPosition(pos);
- selectAll();
- m_Select = false;
- return true;
- }
+ //QPoint pt;
+ //
+ //if (QMouseEvent* me = (QMouseEvent*)e)
+ // pt = me->localPos().toPoint();
+ //
+ //int pos = lineEdit()->cursorPositionAt(pt);
+ //
+ //if (lineEdit()->selectedText() != "")
+ //{
+ // lineEdit()->deselect();
+ // lineEdit()->setCursorPosition(pos);
+ // return true;
+ //}
+ //else if (m_Select)
+ //{
+ // lineEdit()->setCursorPosition(pos);
+ // selectAll();
+ // m_Select = false;
+ // return true;
+ //}
}
else if (m_DoubleClick && e->type() == QMouseEvent::MouseButtonDblClick && isEnabled())
{
@@ -153,7 +153,7 @@ bool SpinBox::eventFilter(QObject* o, QEvent* e)
}
}
- return false;
+ return QSpinBox::eventFilter(o, e);
}
///
@@ -162,7 +162,7 @@ bool SpinBox::eventFilter(QObject* o, QEvent* e)
/// The event
void SpinBox::focusInEvent(QFocusEvent* e)
{
- lineEdit()->setReadOnly(false);
+ //lineEdit()->setReadOnly(false);
QSpinBox::focusInEvent(e);
}
@@ -175,8 +175,8 @@ void SpinBox::focusInEvent(QFocusEvent* e)
/// The event
void SpinBox::focusOutEvent(QFocusEvent* e)
{
- lineEdit()->deselect();//Clear selection when leaving.
- lineEdit()->setReadOnly(true);//Clever hack to clear the cursor when leaving.
+ //lineEdit()->deselect();//Clear selection when leaving.
+ //lineEdit()->setReadOnly(true);//Clever hack to clear the cursor when leaving.
QSpinBox::focusOutEvent(e);
}
@@ -187,8 +187,8 @@ void SpinBox::focusOutEvent(QFocusEvent* e)
/// The event
void SpinBox::enterEvent(QEvent* e)
{
- m_Select = true;
- setFocus();
+ //m_Select = true;
+ //setFocus();
QSpinBox::enterEvent(e);
}
@@ -199,7 +199,7 @@ void SpinBox::enterEvent(QEvent* e)
/// The event
void SpinBox::leaveEvent(QEvent* e)
{
- m_Select = false;
- clearFocus();
+ //m_Select = false;
+ //clearFocus();
QSpinBox::leaveEvent(e);
}