--User changes

-Fix stylesheets.
-Make various fields in the options window be resettable via double click.
-Get stylesheets working properly on Windows and Linux with Qt6.
-Set default style to Fusion.

--Code changes
-Get build and deployment scripts working with latest versions of Qt6, AppImage, and various library dependencies.
-Add two new macros so it would build with the latest gcc: SINGLETON_DERIVED_DECL_T and SINGLETON_DERIVED_IMPL_T.
-Small changes to opencl.hpp.
-Center progress bars on Linux.
-Proper sizing of vertical header on the xaos visualization table on Linux.
This commit is contained in:
Person 2023-06-22 19:25:53 -06:00
parent 6b641d233d
commit 484b2e3123
20 changed files with 843 additions and 765 deletions

View File

@ -124,19 +124,19 @@
<File Id="libxml2.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\Release\libxml2.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes" />
</Component>
<Component Id="msvcp140.dll" Guid="8f1ffde7-c1bd-45fb-8bc8-26dde552eafd">
<File Id="msvcp140.dll" Source="$(var.DevEnvDir)..\..\VC\Redist\MSVC\14.34.31931\x64\Microsoft.VC143.CRT\msvcp140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes" />
<File Id="msvcp140.dll" Source="$(var.DevEnvDir)..\..\VC\Redist\MSVC\14.36.32532\x64\Microsoft.VC143.CRT\msvcp140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes" />
</Component>
<Component Id="vcruntime140.dll" Guid="50c9bc27-c547-4a03-9f6c-cd416f449dd8">
<File Id="vcruntime140.dll" Source="$(var.DevEnvDir)..\..\VC\Redist\MSVC\14.34.31931\x64\Microsoft.VC143.CRT\vcruntime140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes" />
<File Id="vcruntime140.dll" Source="$(var.DevEnvDir)..\..\VC\Redist\MSVC\14.36.32532\x64\Microsoft.VC143.CRT\vcruntime140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes" />
</Component>
<Component Id="vcruntime140_1.dll" Guid="a02507f8-326b-45b2-b734-e5091921559f">
<File Id="vcruntime140_1.dll" Source="$(var.DevEnvDir)..\..\VC\Redist\MSVC\14.34.31931\x64\Microsoft.VC143.CRT\vcruntime140_1.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes" />
<File Id="vcruntime140_1.dll" Source="$(var.DevEnvDir)..\..\VC\Redist\MSVC\14.36.32532\x64\Microsoft.VC143.CRT\vcruntime140_1.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes" />
</Component>
<Component Id="vccorlib140.dll" Guid="affe33e7-1e64-4bb0-a062-2b56f77459b4">
<File Id="vccorlib140.dll" Source="$(var.DevEnvDir)..\..\VC\Redist\MSVC\14.34.31931\x64\Microsoft.VC143.CRT\vccorlib140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes" />
<File Id="vccorlib140.dll" Source="$(var.DevEnvDir)..\..\VC\Redist\MSVC\14.36.32532\x64\Microsoft.VC143.CRT\vccorlib140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes" />
</Component>
<Component Id="concrt140.dll" Guid="7fb716a1-1b4f-42fb-89c7-4d216ebd6e2e">
<File Id="concrt140.dll" Source="$(var.DevEnvDir)..\..\VC\Redist\MSVC\14.34.31931\x64\Microsoft.VC143.CRT\concrt140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes" />
<File Id="concrt140.dll" Source="$(var.DevEnvDir)..\..\VC\Redist\MSVC\14.36.32532\x64\Microsoft.VC143.CRT\concrt140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes" />
</Component>
<Component Id="flam3palettes.xml" Guid="d3adb0bb-14ef-4923-99d9-a5784b7ef04e">
<File Id="flam3palettes.xml" Source="$(var.SolutionDir)..\..\..\Data\flam3-palettes.xml" KeyPath="yes" Checksum="yes" ReadOnly="yes" />

View File

@ -94,7 +94,10 @@ win32 {
LIBS += -ljpeg
LIBS += -lpng
LIBS += -lpthread
LIBS += -lOpenEXR
LIBS += -lIlmImf
LIBS += -lHalf
LIBS += -lImath
LIBS += -lIex
unix:!macx {
LIBS += -lxml2

View File

@ -4,12 +4,12 @@ You should keep this at the top of whatever custom style you make to ensure the
/*
QTabBar::tab { height: 4ex; }
*/
/*
/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
*
{
font: 8pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
font: 8pt "MS Shell Dlg 2";
}
*/
/*This is needed to give the labels on the status bar some padding.*/
QStatusBar QLabel { padding-left: 2px; padding-right: 2px; }
@ -246,7 +246,7 @@ QProgressBar
background-color: gray;
border: 0px none gray;
border-radius: 3px;
text-align: center;
text-align: center center;
}
QProgressBar::chunk

View File

@ -4,12 +4,11 @@ You should keep this at the top of whatever custom style you make to ensure the
/*
QTabBar::tab { height: 4ex; }
*/
/*
/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
*
{
font: 8pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
font: 8pt "MS Shell Dlg 2";
}
*/
/*Specific styles below this line*/
Fractorium
@ -243,7 +242,7 @@ QProgressBar
background-color: gray;
border: 0px none gray;
border-radius: 3px;
text-align: center;
text-align: center center;
}
QProgressBar::chunk

View File

@ -244,7 +244,7 @@ QProgressBar
background-color: gray;
border: 0px none gray;
border-radius: 3px;
text-align: center;
text-align: center center;
}
QProgressBar::chunk

View File

@ -4,9 +4,10 @@ You should keep this at the top of whatever custom style you make to ensure the
/*
QTabBar::tab { height: 4ex; }
*/
/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
*
{
font: 8pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
font: 8pt "MS Shell Dlg 2";
}
QObject
@ -41,7 +42,6 @@ QTableView
/*For some reason, Qt does not draw table headers correctly, so the style must always be manually specified.*/
QHeaderView::section::vertical:enabled
{
width: 12px;
color: black;
background-color: lightgray;
border: none;
@ -61,7 +61,6 @@ QHeaderView::section::horizontal:enabled
QHeaderView::section::vertical:disabled
{
width: 12px;
color: rgb(35, 35, 35);
background-color: rgb(53, 53, 53);
border: none;
@ -154,7 +153,15 @@ QScrollBar::sub-line::vertical
subcontrol-origin: margin;
}
QScrollBar::up-arrow::vertical, QScrollBar::down-arrow::vertical
QScrollBar::up-arrow::vertical
{
border: 2px solid darkgray;
width: 5px;
height: 12px;
background-color: gray;
}
QScrollBar::down-arrow::vertical
{
border: 2px solid darkgray;
width: 5px;
@ -204,7 +211,14 @@ QScrollBar::sub-line::horizontal
subcontrol-origin: margin;
}
QScrollBar::left-arrow::horizontal,
QScrollBar::left-arrow::horizontal
{
border: 2px solid darkgray;
width: 12px;
height: 5px;
background-color: gray;
}
QScrollBar::right-arrow::horizontal
{
border: 2px solid darkgray;
@ -523,11 +537,13 @@ QPushButton
{
margin: 1px;
padding: 4px;
color: white;
background-color: gray;
}
QPushButton:pressed
{
background-color: gray;
background-color: darkgray;
}
QPushButton:focus
@ -659,7 +675,7 @@ QProgressBar
background-color: gray;
border: 0px none gray;
border-radius: 3px;
text-align: center;
text-align: center center;
}
QProgressBar::chunk
@ -751,13 +767,6 @@ QTableView#FinalRenderParamsTable QPushButton
margin-bottom: 2px;
}
QTableView#XaosTableView QHeaderView::section::vertical,
QTableView#XaosDistVizTableWidget QHeaderView::section::vertical,
QTableView#XaosAppliedTableView QHeaderView::section::vertical
{
width: 19px;
}
QTableView#SummaryTable QHeaderView::section::vertical
{
width: 69px;

View File

@ -4,9 +4,10 @@ You should keep this at the top of whatever custom style you make to ensure the
/*
QTabBar::tab { height: 4ex; }
*/
/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
*
{
font: 8pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
font: 8pt "MS Shell Dlg 2";
}
QObject
@ -45,7 +46,6 @@ QTableView
/*For some reason, Qt does not draw table headers correctly, so the style must always be manually specified.*/
QHeaderView::section::vertical:enabled
{
width: 12px;
color: black;
background-color: rgb(176, 204, 177);
border: none;
@ -65,7 +65,6 @@ QHeaderView::section::horizontal:enabled
QHeaderView::section::vertical:disabled
{
width: 12px;
color: rgb(35, 35, 35);
background-color: rgb(53, 53, 53);
border: none;
@ -174,7 +173,15 @@ QScrollBar::sub-line::vertical
subcontrol-origin: margin;
}
QScrollBar::up-arrow::vertical, QScrollBar::down-arrow::vertical
QScrollBar::up-arrow::vertical
{
border: 2px solid rgb(124, 232, 0);
width: 5px;
height: 12px;
background-color: gray;
}
QScrollBar::down-arrow::vertical
{
border: 2px solid rgb(124, 232, 0);
width: 5px;
@ -192,7 +199,7 @@ QScrollBar::sub-page::horizontal
QScrollBar::horizontal
{
background-color: rgb(176, 204, 177);
background-color: rgb(115, 133, 116);
border: 0px solid darkgray;
height: 15px;
margin: 0px 20px 0 20px;
@ -224,7 +231,14 @@ QScrollBar::sub-line::horizontal
subcontrol-origin: margin;
}
QScrollBar::left-arrow::horizontal,
QScrollBar::left-arrow::horizontal
{
border: 2px solid rgb(124, 232, 0);
width: 12px;
height: 5px;
background-color: gray;
}
QScrollBar::right-arrow::horizontal
{
border: 2px solid rgb(124, 232, 0);
@ -718,7 +732,7 @@ QProgressBar
background-color: gray;
border: 0px none gray;
border-radius: 3px;
text-align: center;
text-align: center center;
}
QProgressBar::chunk
@ -832,13 +846,6 @@ QTableView#FinalRenderParamsTable QPushButton
margin-bottom: 2px;
}
QTableView#XaosTableView QHeaderView::section::vertical,
QTableView#XaosDistVizTableWidget QHeaderView::section::vertical,
QTableView#XaosAppliedTableView QHeaderView::section::vertical
{
width: 19px;
}
QTableView#SummaryTable QHeaderView::section::vertical
{
width: 69px;

View File

@ -49,7 +49,7 @@ public:
bool IsModifiable(const string& filename);
const map<string, vector<Palette<T>>>& Palettes() const;
SINGLETON_DERIVED_DECL(PaletteList<T>);
SINGLETON_DERIVED_DECL_T(PaletteList, T);
private:
PaletteList();
bool Save(const string& filename);

View File

@ -277,6 +277,14 @@ protected:
x(const x& other) = delete; \
const x& operator=(const x& other) = delete//Semicolon deliberately omitted to force it on the caller.
//Use this if the body of the destructor will be implemented in a cpp file and the type is templated.
#define SINGLETON_DERIVED_DECL_T(x, T) \
friend class Singleton<x<T>>; \
public: \
~x(); \
x(const x& other) = delete; \
const x& operator=(const x& other) = delete//Semicolon deliberately omitted to force it on the caller.
//Use this if the body of the destructor is empty and is will be implemented inline in the header file.
#define SINGLETON_DERIVED_IMPL(x) \
friend class Singleton<x>; \
@ -285,6 +293,14 @@ protected:
x(const x& other) = delete; \
const x& operator=(const x& other) = delete
//Use this if the body of the destructor is empty and is will be implemented inline in the header file and the type is templated.
#define SINGLETON_DERIVED_IMPL_T(x, T) \
friend class Singleton<x<T>>; \
public: \
~x(){} \
x(const x& other) = delete; \
const x& operator=(const x& other) = delete
/// <summary>
/// The calculations in some variations were changed from what they were in flam3/Apophysis to match Chaotica.
/// Some users prefer the old functionality, so provide an option to retain it.

View File

@ -709,7 +709,7 @@ public:
}
}
SINGLETON_DERIVED_IMPL(VarFuncs<T>);
SINGLETON_DERIVED_IMPL_T(VarFuncs, T);
private:
/// <summary>

View File

@ -49,7 +49,7 @@ public:
const vector<const Variation<T>*>& NonParametricVariations() const;
const vector<const ParametricVariation<T>*>& ParametricVariations() const;
SINGLETON_DERIVED_DECL(VariationList<T>);
SINGLETON_DERIVED_DECL_T(VariationList, T);
private:
VariationList();

View File

@ -6773,7 +6773,7 @@ inline Kernel::Kernel(const Program& program, const char* name, cl_int* err)
enum class QueueProperties : cl_command_queue_properties
{
None = 0,
None_ = 0,//Had to change this because "None" wouldn't compile in gcc.
Profiling = CL_QUEUE_PROFILING_ENABLE,
OutOfOrder = CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,
};
@ -8687,7 +8687,7 @@ CL_HPP_DEFINE_STATIC_MEMBER_ cl_int CommandQueue::default_error_ = CL_SUCCESS;
#if CL_HPP_TARGET_OPENCL_VERSION >= 200
enum class DeviceQueueProperties : cl_command_queue_properties
{
None = 0,
None_ = 0,//Had to change this because "None" wouldn't compile in gcc.
Profiling = CL_QUEUE_PROFILING_ENABLE,
};
@ -8737,7 +8737,7 @@ public:
DeviceCommandQueue(
const Context& context,
const Device& device,
DeviceQueueProperties properties = DeviceQueueProperties::None,
DeviceQueueProperties properties = DeviceQueueProperties::None_,
cl_int* err = nullptr)
{
cl_int error;
@ -8762,7 +8762,7 @@ public:
const Context& context,
const Device& device,
cl_uint queueSize,
DeviceQueueProperties properties = DeviceQueueProperties::None,
DeviceQueueProperties properties = DeviceQueueProperties::None_,
cl_int* err = nullptr)
{
cl_int error;

View File

@ -25,6 +25,10 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(QWidget* p, Qt::WindowF
m_Info = OpenCLInfo::Instance();
m_Fractorium = qobject_cast<Fractorium*>(p);
m_Settings = FractoriumSettings::DefInstance();
ui.FinalRenderIterationProgress->setAlignment(Qt::AlignCenter);
ui.FinalRenderFilteringProgress->setAlignment(Qt::AlignCenter);
ui.FinalRenderAccumProgress->setAlignment(Qt::AlignCenter);
ui.FinalRenderTotalProgress->setAlignment(Qt::AlignCenter);
ui.FinalRenderThreadCountSpin->setRange(1, Timing::ProcessorCount());
connect(ui.FinalRenderEarlyClipCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnEarlyClipCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.FinalRenderYAxisUpCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnYAxisUpCheckBoxStateChanged(int)), Qt::QueuedConnection);
@ -44,7 +48,7 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(QWidget* p, Qt::WindowF
SetupSpinner<SpinBox, int>(ui.FinalRenderSizeTable, this, row, -1, m_WidthSpin, spinHeight, 10, std::numeric_limits<int>::max(), 10, SIGNAL(valueChanged(int)), SLOT(OnWidthChanged(int)), true, 1920, 1920, 1920);
SetupSpinner<DoubleSpinBox, double>(ui.FinalRenderSizeTable, this, row, -1, m_HeightScaleSpin, spinHeight, 0.001, 99.99, 0.1, SIGNAL(valueChanged(double)), SLOT(OnHeightScaleChanged(double)), true, 1.0, 1.0, 1.0);
SetupSpinner<SpinBox, int>(ui.FinalRenderSizeTable, this, row, -1, m_HeightSpin, spinHeight, 10, std::numeric_limits<int>::max(), 10, SIGNAL(valueChanged(int)), SLOT(OnHeightChanged(int)), true, 1080, 1080, 1080);
m_SubBatchPctSpin = (DoubleSpinBox*)ui.FinalRenderOpenCLSubBatchPctSpin;
m_SubBatchPctSpin = ui.FinalRenderOpenCLSubBatchPctSpin;
m_SubBatchPctSpin->DoubleClick(true);
m_SubBatchPctSpin->DoubleClickZero(0.025);
m_SubBatchPctSpin->DoubleClickNonZero(0.025);

View File

@ -296,15 +296,15 @@
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<row>
<property name="text">
<string>AMD</string>
@ -419,7 +419,7 @@
</widget>
</item>
<item>
<widget class="DoubleSpinBox" name="FinalRenderOpenCLSubBatchPctSpin">
<widget class="DoubleSpinBox" name="FinalRenderOpenCLSubBatchPctSpin" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -441,22 +441,22 @@
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The percentage of a sub batch to execute on each thread per kernel call when using OpenCL. Default: 0.025 (256 iters with a 10k sub batch size).&lt;/p&gt;&lt;p&gt;Increase this number for slightly faster render times.&lt;/p&gt;&lt;p&gt;Note that this can cause a crash and subsequent restart of the graphics driver if each kernel call takes too long. So reduce the value if you encounter such a problem.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>OpenCL sub batch % per thread </string>
</property>
<property name="decimals">
<property name="decimals" stdset="0">
<number>3</number>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<double>0.010000000000000</double>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<double>1.000000000000000</double>
</property>
<property name="singleStep">
<property name="singleStep" stdset="0">
<double>0.010000000000000</double>
</property>
<property name="value">
<property name="value" stdset="0">
<double>0.250000000000000</double>
</property>
</widget>
@ -593,30 +593,30 @@
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>85</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<row>
<property name="text">
<string>Width Scale</string>
@ -811,30 +811,30 @@
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>110</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
@ -1055,6 +1055,9 @@
<property name="value">
<number>0</number>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
@ -1094,6 +1097,9 @@
<property name="value">
<number>0</number>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1">
@ -1107,6 +1113,9 @@
<property name="value">
<number>0</number>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="0">
@ -1146,6 +1155,9 @@
<property name="value">
<number>0</number>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
@ -1293,6 +1305,13 @@
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>DoubleSpinBox</class>
<extends>QWidget</extends>
<header>doublespinbox.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>FinalRenderEarlyClipCheckBox</tabstop>
<tabstop>FinalRenderDoublePrecisionCheckBox</tabstop>

View File

@ -148,6 +148,7 @@ Fractorium::Fractorium(QWidget* p)
m_ProgressBar->setMaximumHeight(progressBarHeight);
m_ProgressBar->setMinimumWidth(progressBarWidth);
m_ProgressBar->setMaximumWidth(progressBarWidth);
m_ProgressBar->setAlignment(Qt::AlignCenter);
ui.StatusBar->addPermanentWidget(m_ProgressBar);
//Setup pointer in the GL window to point back to here.
ui.GLDisplay->SetMainWindow(this);
@ -196,11 +197,27 @@ Fractorium::Fractorium(QWidget* p)
else
{
if (!QStyleFactory::keys().empty())
{
auto foundFusion = false;
for (auto& s : QStyleFactory::keys())
{
if (s.compare("fusion", Qt::CaseInsensitive) == 0)//Default to fusion if it exists and the style has not been set yet.
{
m_Theme = QStyleFactory::create(s);
setStyle(m_Theme);
foundFusion = true;
break;
}
}
if (!foundFusion)
{
m_Theme = QStyleFactory::create(qApp->style()->objectName());
setStyle(m_Theme);
}
}
}
#ifdef __APPLE__

View File

@ -77,8 +77,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>1279</width>
<height>980</height>
<width>1280</width>
<height>985</height>
</rect>
</property>
<property name="sizePolicy">
@ -170,7 +170,7 @@
<x>0</x>
<y>0</y>
<width>230</width>
<height>931</height>
<height>926</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
@ -480,9 +480,6 @@
<property name="text">
<string>Geometry</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -561,9 +558,6 @@
<property name="text">
<string>Iteration</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -661,9 +655,6 @@
<property name="text">
<string>Filter</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -1324,9 +1315,6 @@
<property name="text">
<string>Animation</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -1864,9 +1852,6 @@
<property name="text">
<string>Color</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -1895,7 +1880,7 @@
<property name="minimumSize">
<size>
<width>310</width>
<height>439</height>
<height>444</height>
</size>
</property>
<property name="floating">
@ -2465,8 +2450,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>285</width>
<height>675</height>
<width>307</width>
<height>674</height>
</rect>
</property>
<property name="sizePolicy">
@ -3155,7 +3140,7 @@
<x>0</x>
<y>0</y>
<width>291</width>
<height>874</height>
<height>869</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_16">
@ -3533,33 +3518,21 @@
<property name="text">
<string>Weight</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
<column>
<property name="text">
<string>Name</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
<item row="0" column="0">
<property name="text">
<string/>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</item>
<item row="0" column="1">
<property name="text">
<string/>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</item>
</widget>
</item>
@ -3761,9 +3734,6 @@
<property name="toolTip">
<string/>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</item>
</widget>
</item>
@ -3845,7 +3815,7 @@
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>21</number>
<number>24</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
@ -4124,9 +4094,6 @@
<kerning>true</kerning>
</font>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</item>
<item row="1" column="0">
<property name="text">
@ -4156,6 +4123,19 @@
</item>
</widget>
</item>
<item row="6" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="SoloXformCheckBox">
<property name="toolTip">
@ -6279,8 +6259,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>267</width>
<height>656</height>
<width>269</width>
<height>650</height>
</rect>
</property>
<property name="sizePolicy">
@ -6410,7 +6390,7 @@
<x>0</x>
<y>0</y>
<width>291</width>
<height>854</height>
<height>849</height>
</rect>
</property>
<property name="sizePolicy">
@ -7153,9 +7133,6 @@
<kerning>true</kerning>
</font>
</property>
<property name="textAlignment">
<set>AlignLeading|AlignVCenter</set>
</property>
</item>
</widget>
</item>
@ -7291,7 +7268,7 @@
<x>0</x>
<y>0</y>
<width>1712</width>
<height>21</height>
<height>22</height>
</rect>
</property>
<widget class="QMenu" name="MenuFile">
@ -7524,8 +7501,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>422</width>
<height>587</height>
<width>418</width>
<height>631</height>
</rect>
</property>
<property name="sizePolicy">
@ -7534,7 +7511,7 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout_10" stretch="3,0,8">
<layout class="QVBoxLayout" name="verticalLayout_10" stretch="3,0,8,0">
<property name="spacing">
<number>4</number>
</property>
@ -8081,12 +8058,12 @@
<property name="prefix">
<string>Animation FPS: </string>
</property>
<property name="maximum">
<number>200</number>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>200</number>
</property>
<property name="value">
<number>30</number>
</property>
@ -8142,7 +8119,7 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="SequenceAnimateButtonsHLayout" stretch="0,0,0,0">
<layout class="QHBoxLayout" name="SequenceAnimateButtonsHLayout" stretch="0,0">
<property name="spacing">
<number>2</number>
</property>

View File

@ -176,16 +176,16 @@ void Fractorium::FillXaosTable()
m_AppliedXaosTableModel->setVerticalHeaderLabels(vl);
ui.XaosDistVizTableWidget->setRowCount(1);
ui.XaosDistVizTableWidget->setColumnCount(count);
ui.XaosDistVizTableWidget->setHorizontalHeaderLabels(hl);
ui.XaosDistVizTableWidget->setVerticalHeaderLabels(blanks);
ui.XaosDistVizTableWidget->verticalHeader()->setSectionsClickable(false);
ui.XaosDistVizTableWidget->horizontalHeader()->setSectionsClickable(false);
ui.XaosTableView->setModel(m_XaosTableModel);
ui.XaosAppliedTableView->setModel(m_AppliedXaosTableModel);
ui.XaosTableView->setItemDelegate(m_XaosTableItemDelegate);//No need for a delegate on the applied table because it's read-only.
ui.XaosDistVizTableWidget->verticalHeader()->setFixedWidth(ui.XaosTableView->verticalHeader()->width());
SetTabOrder(this, ui.ClearXaosButton, ui.RandomXaosButton);
ui.XaosDistVizTableWidget->setRowHeight(0, ui.XaosTableView->rowHeight(0) * count);
ui.XaosDistVizTableWidget->setHorizontalHeaderLabels(hl);
ui.XaosDistVizTableWidget->setVerticalHeaderLabels(vl);
SetTabOrder(this, ui.ClearXaosButton, ui.RandomXaosButton);
ui.XaosDistVizTableWidget->verticalHeader()->setStyleSheet("QHeaderView::section::vertical { color: rgba(0, 0, 0, 0); }");
m_Controller->FillXaos();
m_Controller->FillAppliedXaos();
//Needed to get the dark stylesheet to correctly color the top left corner button.

View File

@ -20,15 +20,39 @@ FractoriumOptionsDialog::FractoriumOptionsDialog(QWidget* p, Qt::WindowFlags f)
ui.ThreadCountSpin->setRange(1, Timing::ProcessorCount());
connect(ui.OpenCLCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnOpenCLCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.DeviceTable, SIGNAL(cellChanged(int, int)), this, SLOT(OnDeviceTableCellChanged(int, int)), Qt::QueuedConnection);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlTemporalSamplesSpin, spinHeight, 1, 1000, 100, "", "", true, 1000);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlQualitySpin, spinHeight, 1, 200000, 50, "", "", true, 1000);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlSupersampleSpin, spinHeight, 1, 4, 1, "", "", true, 2);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlTemporalSamplesSpin, spinHeight, 1, 100000, 100, "", "", true, 300, 100, 100);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlQualitySpin, spinHeight, 1, 200000, 50, "", "", true, 1000, 1000, 1000);
SetupSpinner<SpinBox, int>(table, this, row, 1, m_XmlSupersampleSpin, spinHeight, 1, 4, 1, "", "", true, 2, 2, 2);
m_IdEdit = new QLineEdit(ui.OptionsIdentityTable);
ui.OptionsIdentityTable->setCellWidget(0, 1, m_IdEdit);
m_UrlEdit = new QLineEdit(ui.OptionsIdentityTable);
ui.OptionsIdentityTable->setCellWidget(1, 1, m_UrlEdit);
m_NickEdit = new QLineEdit(ui.OptionsIdentityTable);
ui.OptionsIdentityTable->setCellWidget(2, 1, m_NickEdit);
auto dspin = ui.OpenCLSubBatchPctSpin;
dspin->DoubleClick(true);
dspin->DoubleClickZero(0.025);
dspin->DoubleClickNonZero(0.025);
auto spin = ui.CpuQualitySpin;
spin->DoubleClick(true);
spin->DoubleClickZero(10);
spin->DoubleClickNonZero(10);
spin = ui.OpenCLQualitySpin;
spin->DoubleClick(true);
spin->DoubleClickZero(30);
spin->DoubleClickNonZero(30);
spin = ui.CpuSubBatchSpin;
spin->DoubleClick(true);
spin->DoubleClickZero(1);
spin->DoubleClickNonZero(1);
spin = ui.OpenCLSubBatchSpin;
spin->DoubleClick(true);
spin->DoubleClickZero(1);
spin->DoubleClickNonZero(1);
spin = ui.RandomCountSpin;
spin->DoubleClick(true);
spin->DoubleClickZero(1);
spin->DoubleClickNonZero(1);
table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
ui.OptionsIdentityTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
table = ui.DeviceTable;

View File

@ -193,15 +193,15 @@
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<row>
<property name="text">
<string>AMD</string>
@ -221,25 +221,16 @@
<property name="text">
<string>Use</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
<column>
<property name="text">
<string>Primary</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
<column>
<property name="text">
<string>Device</string>
</property>
<property name="textAlignment">
<set>AlignCenter</set>
</property>
</column>
</widget>
</item>
@ -290,36 +281,36 @@
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="OpenCLQualitySpin">
<widget class="SpinBox" name="OpenCLQualitySpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The default quality per device to use for the interactive renderer when using OpenCL.&lt;/p&gt;&lt;p&gt;30 is a good number for this, but you can use a larger value if you have a faster GPU.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>OpenCL Quality </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>99999</number>
</property>
<property name="value">
<property name="value" stdset="0">
<number>30</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QSpinBox" name="OpenCLSubBatchSpin">
<widget class="SpinBox" name="OpenCLSubBatchSpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The number of ~8M iteration chunks ran using OpenCL in interactive mode for each mouse movement.&lt;/p&gt;&lt;p&gt;Increase this number for a higher quality image on each mouse movement, at the expense of responsiveness.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>OpenCL chunks per mouse movement </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>100</number>
</property>
</widget>
@ -372,93 +363,93 @@
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="CpuSubBatchSpin">
<widget class="SpinBox" name="CpuSubBatchSpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The number of ~10,000 iteration chunks ran per thread on the CPU in interactive mode for each mouse movement.&lt;/p&gt;&lt;p&gt;Increase this number for a higher quality image on each mouse movement, at the expense of responsiveness.&lt;/p&gt;&lt;p&gt;The number of iterations done in each chunk is controlled by the Sub Batch Size field in the Flame tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>CPU chunks per mouse movement </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>100</number>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QSpinBox" name="ThreadCountSpin">
<widget class="SpinBox" name="ThreadCountSpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The number of threads to use with CPU rendering.&lt;/p&gt;&lt;p&gt;Decrease for more responsive editing, increase for better performance.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>Threads </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>64</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QSpinBox" name="RandomCountSpin">
<widget class="SpinBox" name="RandomCountSpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The number of random flames to generate on startup.&lt;/p&gt;&lt;p&gt;These are usually of low quality, so leave the count as 1 unless you are searching for good randoms.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>Randoms </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>99999</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QDoubleSpinBox" name="OpenCLSubBatchPctSpin">
<widget class="DoubleSpinBox" name="OpenCLSubBatchPctSpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The percentage of a sub batch to execute on each thread per kernel call when using OpenCL in interactive mode. Default: 0.025 (256 iters).&lt;/p&gt;&lt;p&gt;Increase this number for a higher quality image on each mouse movement, at the expense of responsiveness.&lt;/p&gt;&lt;p&gt;Note that this can cause a crash and subsequent restart of the graphics driver if each kernel call takes too long. So reduce the value if you encounter such a problem.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>OpenCL sub batch percent per thread </string>
</property>
<property name="decimals">
<property name="decimals" stdset="0">
<number>3</number>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<double>0.010000000000000</double>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<double>1.000000000000000</double>
</property>
<property name="singleStep">
<property name="singleStep" stdset="0">
<double>0.010000000000000</double>
</property>
<property name="value">
<property name="value" stdset="0">
<double>0.025000000000000</double>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="CpuQualitySpin">
<widget class="SpinBox" name="CpuQualitySpin" native="true">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The default quality to use for the interactive renderer when using the CPU.&lt;/p&gt;&lt;p&gt;10 is a good number for this, but you can use a larger value if you have a faster system.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="prefix">
<property name="prefix" stdset="0">
<string>CPU Quality </string>
</property>
<property name="minimum">
<property name="minimum" stdset="0">
<number>1</number>
</property>
<property name="maximum">
<property name="maximum" stdset="0">
<number>99999</number>
</property>
<property name="value">
<property name="value" stdset="0">
<number>10</number>
</property>
</widget>
@ -638,30 +629,30 @@
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>110</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
@ -831,30 +822,30 @@
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>110</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>35</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>22</number>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
@ -952,6 +943,18 @@
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>SpinBox</class>
<extends>QWidget</extends>
<header>spinbox.h</header>
</customwidget>
<customwidget>
<class>DoubleSpinBox</class>
<extends>QWidget</extends>
<header>doublespinbox.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>EarlyClipCheckBox</tabstop>
<tabstop>OpenCLCheckBox</tabstop>

View File

@ -12,9 +12,9 @@ FRACTORIUM_RPM_PACKAGE=$BUILD_PATH/../Bin/rpmbuild
EXTRA_LIBS=/usr/lib/x86_64-linux-gnu
# replace 5.12.8 by your QT version, and ensure the installation path is the same
QT_PATH=/home/$USER/Dev/Qt/5.12.8/gcc_64/bin
QT_PATH=/home/$USER/Dev/Qt/6.5.1/gcc_64/bin
LINUX_DEPLOY_QT=/home/$USER/Dev/linuxdeployqt-6-x86_64.AppImage
LINUX_DEPLOY_QT=/home/$USER/Dev/linuxdeployqt-continuous-x86_64.AppImage
APP_IMAGE_TOOL=/home/$USER/Dev/appimagetool-x86_64.AppImage
#######################
@ -84,12 +84,12 @@ cp $FRACTORIUM_RELEASE_ROOT/ember* $FRACTORIUM_BIN
cp $FRACTORIUM_RELEASE_ROOT/fractorium $FRACTORIUM_BIN
cp $FRACTORIUM_RELEASE_ROOT/lib* $FRACTORIUM_LIB
cp $EXTRA_LIBS/libHalf.so.12 $FRACTORIUM_LIB
cp $EXTRA_LIBS/libIex-2_2.so.12 $FRACTORIUM_LIB
cp $EXTRA_LIBS/libIexMath-2_2.so.12 $FRACTORIUM_LIB
cp $EXTRA_LIBS/libIlmImf-2_2.so.22 $FRACTORIUM_LIB
cp $EXTRA_LIBS/libIlmThread-2_2.so.12 $FRACTORIUM_LIB
cp $EXTRA_LIBS/libImath-2_2.so.12 $FRACTORIUM_LIB
cp $EXTRA_LIBS/libHalf.so $FRACTORIUM_LIB
cp $EXTRA_LIBS/libIex.so $FRACTORIUM_LIB
cp $EXTRA_LIBS/libIexMath.so $FRACTORIUM_LIB
cp $EXTRA_LIBS/libIlmImf.so $FRACTORIUM_LIB
cp $EXTRA_LIBS/libIlmThread.so $FRACTORIUM_LIB
cp $EXTRA_LIBS/libImath.so $FRACTORIUM_LIB
cp $EXTRA_LIBS/libjpeg.so.8 $FRACTORIUM_LIB
cp $EXTRA_LIBS/libpng16.so.16 $FRACTORIUM_LIB
cp $EXTRA_LIBS/libOpenCL.so.1 $FRACTORIUM_LIB