diff --git a/Builds/MSVC/VS2013/Fractorium.sln b/Builds/MSVC/VS2013/Fractorium.sln
index c4666f2..8daf31f 100644
--- a/Builds/MSVC/VS2013/Fractorium.sln
+++ b/Builds/MSVC/VS2013/Fractorium.sln
@@ -80,6 +80,11 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "FractoriumInstaller", "..\I
{6547D5FA-64CE-44BA-9D3C-B6E217456445} = {6547D5FA-64CE-44BA-9D3C-B6E217456445}
EndProjectSection
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5CD06D80-903E-45D6-90F3-3C3EB4FFE46F}"
+ ProjectSection(SolutionItems) = preProject
+ ..\..\..\Data\Version History.txt = ..\..\..\Data\Version History.txt
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug Library|Mixed Platforms = Debug Library|Mixed Platforms
diff --git a/Data/Version History.txt b/Data/Version History.txt
index e029d4e..e94ec47 100644
--- a/Data/Version History.txt
+++ b/Data/Version History.txt
@@ -1,16 +1,25 @@
+0.4.1.7 Beta 01/02/2015
--User changes
Use actual strips count when computing memory requirements in the final render dialog.
Output CL_DEVICE_ADDRESS_BITS when passing --openclinfo to command line programs.
Warn if single/total allocations are greater than the max allowed for OpenCL in the final render dialog.
-
+ Make about box properly sized for different fonts.
+ Dock widget is slightly resizable now.
+ Center scroll area when loading a new ember.
+
--Bug Fixes
Fix bad values left in an ember when a render with strips > 1 fails in the final render dialog.
Fix incorrect calculation in dc_cube variation when using OpenCL.
--Code Changes
+ Major work to get it running on Linux.
+ Migrate from QGLWidget to QOpenGLWidget.
+ Delayed init due to QOpenGLWidget.
Break RendererBase::MemoryRequired() into two functions, it and HistMemRequired() and return a tuple.
Add GlobalMemSize() and MaxAllocSize() functions in OpenCLWrapper.
Change CHOOSE_XFORM_GRAIN to be 16384, so we can & with 16383 instead of using modulo when selecting an xform. This results in a 9% speed increase on the CPU.
+ Save each newly loaded ember in a file called "last.flame" in the executable folder. This will help diagnose crashes that occur when switching embers.
+ Use nullptr instead of NULL in the Fractorium project. It had previously been done in all other places.
0.4.1.6 Beta 11/29/2014
--User Changes
diff --git a/Source/Fractorium/AboutDialog.cpp b/Source/Fractorium/AboutDialog.cpp
index b07dc88..1fdeeda 100644
--- a/Source/Fractorium/AboutDialog.cpp
+++ b/Source/Fractorium/AboutDialog.cpp
@@ -5,10 +5,15 @@
/// Constructor that takes a parent widget and passes it to the base, then
/// sets up the GUI.
///
-/// The parent widget. Default: NULL.
+/// The parent widget. Default: nullptr.
/// The window flags. Default: 0.
FractoriumAboutDialog::FractoriumAboutDialog(QWidget* p, Qt::WindowFlags f)
: QDialog(p, f)
{
ui.setupUi(this);
+ adjustSize();//Must do this to ensure all text is displayed when using different fonts.
+ setMinimumHeight(height());//Once properly sized, disallow resizing.
+ setMaximumHeight(height());
+ setMinimumWidth(width());
+ setMaximumWidth(width());
}
diff --git a/Source/Fractorium/AboutDialog.ui b/Source/Fractorium/AboutDialog.ui
index acf1074..4b10e3e 100644
--- a/Source/Fractorium/AboutDialog.ui
+++ b/Source/Fractorium/AboutDialog.ui
@@ -7,11 +7,11 @@
0
0
488
- 565
+ 567
-
+
0
0
@@ -19,19 +19,19 @@
488
- 565
+ 546
- 587
- 565
+ 16777215
+ 16777215
About
-
+
6
@@ -45,7 +45,13 @@
6
-
-
+
+
+
+ 0
+ 0
+
+
12
@@ -70,10 +76,22 @@
-
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
Code Copied
-
+
4
@@ -81,7 +99,19 @@
6
-
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
<html><head/><body><p><a href="http://code.google.com/p/flam3"><span style=" text-decoration: underline; color:#0000ff;">flam3</span></a>: Scott Draves, Erik Reckase (GPL v2)<br/><a href="http://github.com/stevenrobertson/cuburn"><span style=" text-decoration: underline; color:#0000ff;">cuburn</span></a>: Steven Robertson, Michael Semeniuk, Matthew Znoj, Nicolas Mejia (GPL v3)<br/><a href="http://fractron9000.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">Fractron 9000</span></a>: Mike Thiesen (GPL)<br/><a href="http://sourceforge.net/projects/apophysis7x"><span style=" text-decoration: underline; color:#0000ff;">Apophysis</span></a>: Mark Townsend, Ronald Hordijk, Peter Sdobnov, Piotr Borys, Georg Kiehne (GPL)<br/><a href="http://jwildfire.org/"><span style=" text-decoration: underline; color:#0000ff;">JWildfire</span></a>: Andreas Maschke (LGPL)<br/>Numerous Apophysis plugin developers (GPL)</p></body></html>
@@ -101,10 +131,22 @@
-
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
Libraries Linked
-
+
4
@@ -112,7 +154,13 @@
6
-
-
+
+
+
+ 0
+ 0
+
+
<html><head/><body><p><a href="http://qt-project.org"><span style=" text-decoration: underline; color:#0000ff;">Qt</span></a>: Digia Plc (GPL v3, LGPL v2)<br/><a href="http://g-truc.net"><span style=" text-decoration: underline; color:#0000ff;">glm</span></a>: Christophe Riccio (MIT License)<br/><a href="http://threadingbuildingblocks.org"><span style=" text-decoration: underline; color:#0000ff;">Threading Building Blocks</span></a>: Intel Corporation (GPLv2)<br/><a href="http://libjpeg.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">libjpeg</span></a>: Independent JPEG Group (Free Software License)<br/><a href="http://libpng.org"><span style=" text-decoration: underline; color:#0000ff;">libpng</span></a>: Glenn Randers-Pehrson et al (Libpng License)<br/><a href="http://xmlsoft.org"><span style=" text-decoration: underline; color:#0000ff;">libxml2</span></a>: Daniel Veillard (MIT License)<br/><a href="http://zlib.net"><span style=" text-decoration: underline; color:#0000ff;">zlib</span></a>: Jean-loup Gailly, Mark Adler (Zlib License)<br/><a href="http://burtleburtle.net/bob/rand/isaac.html"><span style=" text-decoration: underline; color:#0000ff;">QTIsaac</span></a>: Robert J. Jenkins, Quinn Tyler Jackson (Public Domain)<br/><a href="http://cas.ee.ic.ac.uk/people/dt10/index.html"><span style=" text-decoration: underline; color:#0000ff;">MWC64X Random Number Generator</span></a>: David Thomas (Public Domain)<br/><a href="http://code.jellycan.com/simpleopt/"><span style=" text-decoration: underline; color:#0000ff;">SimpleOpt</span></a>: Brodie Thiesfield (MIT License)</p></body></html>
@@ -132,10 +180,16 @@
-
+
+
+ 0
+ 0
+
+
Icons Used
-
+
4
@@ -143,7 +197,13 @@
6
-
-
+
+
+
+ 0
+ 0
+
+
<html><head/><body><p><a href="http://famfamfam.com"><span style=" text-decoration: underline; color:#0000ff;">Silk</span></a>: Mark James (Creative Commons Attribution 2.5 License)<br/><a href="http://momentumdesignlab.com"><span style=" text-decoration: underline; color:#0000ff;">Momentum</span></a>: Momentum Design Lab (Creative Commons Attribution-ShareAlike 3.5 License)<br/><a href="http://everaldo.com"><span style=" text-decoration: underline; color:#0000ff;">Crystal Clear</span></a>: Everaldo Coelho (LGPL)<br/><a href="http://openiconlibrary.sourceforge.net"><span style=" text-decoration: underline; color:#0000ff;">Open Icon Library</span></a>: Jeff Israel (GPL, LGPL, Creative Commons, Public Domain)<br/><a href="http://icons.mysitemyway.com/category/3d-transparent-glass-icons/"><span style=" text-decoration: underline; color:#0000ff;">3D Transparent Glass</span></a>: iconsETC (Public Domain)<br/><a href="http://p.yusukekamiyamane.com"><span style=" text-decoration: underline; color:#0000ff;">Fugue</span></a>: Yusuke Kamiyamane (Creative Commons Attribution 3.0 License)</p></body></html>
@@ -162,12 +222,9 @@
-
-
-
- 6
-
+
- 0
+ 6
-
diff --git a/Source/Fractorium/DoubleSpinBox.cpp b/Source/Fractorium/DoubleSpinBox.cpp
index d857744..0bc1d20 100644
--- a/Source/Fractorium/DoubleSpinBox.cpp
+++ b/Source/Fractorium/DoubleSpinBox.cpp
@@ -7,7 +7,7 @@
/// and change its value using the mouse wheel without explicitly having to click
/// inside of it.
///
-/// The parent widget. Default: NULL.
+/// The parent widget. Default: nullptr.
/// The height of the spin box. Default: 16.
/// The step used to increment/decrement the spin box when using the mouse wheel. Default: 0.05.
DoubleSpinBox::DoubleSpinBox(QWidget* p, int h, double step)
diff --git a/Source/Fractorium/FinalRenderDialog.cpp b/Source/Fractorium/FinalRenderDialog.cpp
index 0758b1c..a08a4c0 100644
--- a/Source/Fractorium/FinalRenderDialog.cpp
+++ b/Source/Fractorium/FinalRenderDialog.cpp
@@ -19,7 +19,7 @@ FractoriumFinalRenderDialog::FractoriumFinalRenderDialog(FractoriumSettings* set
uint i;
double dmax = numeric_limits::max();
QTableWidget* table = ui.FinalRenderParamsTable;
- QTableWidgetItem* item = NULL;
+ QTableWidgetItem* item = nullptr;
m_Fractorium = dynamic_cast(p);
m_Settings = settings;
@@ -649,9 +649,9 @@ bool FractoriumFinalRenderDialog::CreateControllerFromGUI(bool createRenderer)
#ifdef DO_DOUBLE
size_t elementSize = Double() ? sizeof(double) : sizeof(float);
#else
- size_t elementSize = sizeof(float);
+ size_t elementSize = sizeof(float);
#endif
-
+
if (!m_Controller.get() || (m_Controller->SizeOfT() != elementSize))
{
#ifdef DO_DOUBLE
diff --git a/Source/Fractorium/FinalRenderDialog.h b/Source/Fractorium/FinalRenderDialog.h
index 17e6d76..794d911 100644
--- a/Source/Fractorium/FinalRenderDialog.h
+++ b/Source/Fractorium/FinalRenderDialog.h
@@ -40,7 +40,7 @@ class FractoriumFinalRenderDialog : public QDialog
friend Fractorium;
friend FinalRenderEmberControllerBase;
friend FinalRenderEmberController;
-
+
#ifdef DO_DOUBLE
friend FinalRenderEmberController;
#endif
diff --git a/Source/Fractorium/FinalRenderEmberController.cpp b/Source/Fractorium/FinalRenderEmberController.cpp
index 725321e..85800c8 100644
--- a/Source/Fractorium/FinalRenderEmberController.cpp
+++ b/Source/Fractorium/FinalRenderEmberController.cpp
@@ -93,7 +93,7 @@ FinalRenderEmberController::FinalRenderEmberController(FractoriumFinalRenderD
: FinalRenderEmberControllerBase(finalRender)
{
m_FinalPreviewRenderer = unique_ptr>(new EmberNs::Renderer());
- m_FinalPreviewRenderer->Callback(NULL);
+ m_FinalPreviewRenderer->Callback(nullptr);
m_FinalPreviewRenderer->NumChannels(4);
m_FinalPreviewRenderFunc = [&]()
@@ -669,10 +669,10 @@ void FinalRenderEmberController::RenderComplete(Ember& ember)
QString newPath = xmlFileInfo.absolutePath() + '/' + xmlFileInfo.completeBaseName() + ".flame";
xmlDocPtr tempEdit = ember.m_Edits;
- ember.m_Edits = m_XmlWriter.CreateNewEditdoc(&ember, NULL, "edit", m_Settings->Nick().toStdString(), m_Settings->Url().toStdString(), m_Settings->Id().toStdString(), "", 0, 0);
+ ember.m_Edits = m_XmlWriter.CreateNewEditdoc(&ember, nullptr, "edit", m_Settings->Nick().toStdString(), m_Settings->Url().toStdString(), m_Settings->Id().toStdString(), "", 0, 0);
m_XmlWriter.Save(newPath.toStdString().c_str(), ember, 0, true, false, true);//Note that the ember passed is used, rather than m_Ember because it's what was actually rendered.
- if (tempEdit != NULL)
+ if (tempEdit != nullptr)
xmlFreeDoc(tempEdit);
}
diff --git a/Source/Fractorium/Fractorium.cpp b/Source/Fractorium/Fractorium.cpp
index f3df81c..7aacea1 100644
--- a/Source/Fractorium/Fractorium.cpp
+++ b/Source/Fractorium/Fractorium.cpp
@@ -24,8 +24,8 @@ Fractorium::Fractorium(QWidget* p)
m_ColorDialog = new QColorDialog(this);
m_Settings = new FractoriumSettings(this);
- m_FileDialog = NULL;//Use lazy instantiation upon first use.
- m_FolderDialog = NULL;
+ m_FileDialog = nullptr;//Use lazy instantiation upon first use.
+ m_FolderDialog = nullptr;
m_FinalRenderDialog = new FractoriumFinalRenderDialog(m_Settings, this);
m_OptionsDialog = new FractoriumOptionsDialog(m_Settings, this);
m_AboutDialog = new FractoriumAboutDialog(this);
@@ -122,8 +122,8 @@ Fractorium::Fractorium(QWidget* p)
//Setup pointer in the GL window to point back to here.
ui.GLDisplay->SetMainWindow(this);
- showMaximized();
-
+ showMaximized();//This won't fully set things up and show them until after this constructor exits.
+
connect(ui.DockWidget, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), this, SLOT(dockLocationChanged(Qt::DockWidgetArea)));
connect(ui.DockWidget, SIGNAL(topLevelChanged(bool)), this, SLOT(OnDockTopLevelChanged(bool)));
@@ -155,9 +155,10 @@ Fractorium::Fractorium(QWidget* p)
ui.GLParentScrollArea->installEventFilter(this);
//At this point, everything has been setup except the renderer. Shortly after
- //this constructor exits, GLWidget::initializeGL() will create the initial flock and start the rendering timer
+ //this constructor exits, GLWidget::InitGL() will create the initial flock and start the rendering timer
//which executes whenever the program is idle. Upon starting the timer, the renderer
//will be initialized.
+ QTimer::singleShot(500, [&]() { ui.GLDisplay->InitGL(); });
}
///
@@ -183,6 +184,19 @@ void Fractorium::SetCoordinateStatus(int rasX, int rasY, float worldX, float wor
m_CoordinateStatusLabel->setText(QString(m_CoordinateString));
}
+///
+/// Center the scroll area.
+/// Called in response to a resizing, or setting of new ember.
+///
+void Fractorium::CenterScrollbars()
+{
+ QScrollBar* w = ui.GLParentScrollArea->horizontalScrollBar();
+ QScrollBar* h = ui.GLParentScrollArea->verticalScrollBar();
+
+ w->setValue(w->maximum() / 2);
+ h->setValue(h->maximum() / 2);
+}
+
///
/// Apply the settings for saving an ember to an Xml file to an ember (presumably about to be saved).
///
diff --git a/Source/Fractorium/Fractorium.h b/Source/Fractorium/Fractorium.h
index d03a6d6..d0aee0a 100644
--- a/Source/Fractorium/Fractorium.h
+++ b/Source/Fractorium/Fractorium.h
@@ -87,6 +87,7 @@ public:
void SetRotation(double rot, bool stealth);
void SetScale(double scale);
void SetCoordinateStatus(int rasX, int rasY, float worldX, float worldY);
+ void CenterScrollbars();
//Xforms.
void CurrentXform(uint i);
diff --git a/Source/Fractorium/Fractorium.ui b/Source/Fractorium/Fractorium.ui
index 9890712..32bf551 100644
--- a/Source/Fractorium/Fractorium.ui
+++ b/Source/Fractorium/Fractorium.ui
@@ -48,6 +48,9 @@
0
+
+ true
+
true
@@ -71,8 +74,8 @@
0
0
- 926
- 941
+ 923
+ 942
@@ -87,6 +90,12 @@
0
+
+ true
+
+
+ Qt::WheelFocus
+