mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-02-08 05:50:07 -05:00
Merged mfeemster/fractorium into master
This commit is contained in:
commit
1559a8e779
@ -4410,6 +4410,11 @@
|
|||||||
<property name="frame">
|
<property name="frame">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>101</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>110</string>
|
<string>110</string>
|
||||||
@ -4665,6 +4670,11 @@
|
|||||||
<property name="frame">
|
<property name="frame">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>5</string>
|
<string>5</string>
|
||||||
@ -5279,6 +5289,11 @@
|
|||||||
<property name="frame">
|
<property name="frame">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>5</string>
|
<string>5</string>
|
||||||
@ -5620,6 +5635,11 @@
|
|||||||
<property name="frame">
|
<property name="frame">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>101</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>110</string>
|
<string>110</string>
|
||||||
|
@ -400,7 +400,9 @@ void TreePreviewRenderer<T>::PreviewRenderFunc(uint start, uint end)
|
|||||||
//It is critical that Qt::BlockingQueuedConnection is passed because this is running on a different thread than the UI.
|
//It is critical that Qt::BlockingQueuedConnection is passed because this is running on a different thread than the UI.
|
||||||
//This ensures the events are processed in order as each preview is updated, and that control does not return here
|
//This ensures the events are processed in order as each preview is updated, and that control does not return here
|
||||||
//until the update is complete.
|
//until the update is complete.
|
||||||
QMetaObject::invokeMethod(f, "SetLibraryTreeItemData", Qt::BlockingQueuedConnection,
|
if (m_PreviewRun)
|
||||||
|
{
|
||||||
|
QMetaObject::invokeMethod(f, "SetLibraryTreeItemData", Qt::DirectConnection,
|
||||||
Q_ARG(EmberTreeWidgetItemBase*, treeItem),
|
Q_ARG(EmberTreeWidgetItemBase*, treeItem),
|
||||||
Q_ARG(vv4F&, m_PreviewFinalImage),
|
Q_ARG(vv4F&, m_PreviewFinalImage),
|
||||||
Q_ARG(uint, PREVIEW_SIZE),
|
Q_ARG(uint, PREVIEW_SIZE),
|
||||||
@ -410,6 +412,7 @@ void TreePreviewRenderer<T>::PreviewRenderFunc(uint start, uint end)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template class FractoriumEmberController<float>;
|
template class FractoriumEmberController<float>;
|
||||||
template class PreviewRenderer<float>;
|
template class PreviewRenderer<float>;
|
||||||
|
@ -625,7 +625,6 @@ public:
|
|||||||
{
|
{
|
||||||
m_PreviewRun = false;
|
m_PreviewRun = false;
|
||||||
m_PreviewRenderer.Abort();
|
m_PreviewRenderer.Abort();
|
||||||
m_PreviewResult.cancel();
|
|
||||||
m_PreviewResult.waitForFinished();
|
m_PreviewResult.waitForFinished();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,7 +132,6 @@ void FractoriumEmberController<T>::SyncLibrary(eLibraryUpdate update)
|
|||||||
{
|
{
|
||||||
auto it = m_EmberFile.m_Embers.begin();
|
auto it = m_EmberFile.m_Embers.begin();
|
||||||
auto tree = m_Fractorium->ui.LibraryTree;
|
auto tree = m_Fractorium->ui.LibraryTree;
|
||||||
tree->blockSignals(true);
|
|
||||||
|
|
||||||
if (auto top = tree->topLevelItem(0))
|
if (auto top = tree->topLevelItem(0))
|
||||||
{
|
{
|
||||||
@ -154,8 +153,6 @@ void FractoriumEmberController<T>::SyncLibrary(eLibraryUpdate update)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tree->blockSignals(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -173,8 +170,7 @@ void FractoriumEmberController<T>::FillLibraryTree(int selectIndex)
|
|||||||
vector<byte> v(size * size * 4);
|
vector<byte> v(size * size * 4);
|
||||||
StopAllPreviewRenderers();
|
StopAllPreviewRenderers();
|
||||||
tree->clear();
|
tree->clear();
|
||||||
QCoreApplication::flush();
|
QCoreApplication::processEvents();
|
||||||
tree->blockSignals(true);
|
|
||||||
auto fileItem = new QTreeWidgetItem(tree);
|
auto fileItem = new QTreeWidgetItem(tree);
|
||||||
QFileInfo info(m_EmberFile.m_Filename);
|
QFileInfo info(m_EmberFile.m_Filename);
|
||||||
fileItem->setText(0, info.fileName());
|
fileItem->setText(0, info.fileName());
|
||||||
@ -194,13 +190,10 @@ void FractoriumEmberController<T>::FillLibraryTree(int selectIndex)
|
|||||||
emberItem->SetImage(v, size, size);
|
emberItem->SetImage(v, size, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
tree->blockSignals(false);
|
|
||||||
|
|
||||||
if (selectIndex != -1)
|
if (selectIndex != -1)
|
||||||
m_Fractorium->SelectLibraryItem(selectIndex);
|
m_Fractorium->SelectLibraryItem(selectIndex);
|
||||||
|
|
||||||
m_Fractorium->SyncFileCountToSequenceCount();
|
m_Fractorium->SyncFileCountToSequenceCount();
|
||||||
QCoreApplication::flush();
|
|
||||||
RenderLibraryPreviews(0, uint(m_EmberFile.Size()));
|
RenderLibraryPreviews(0, uint(m_EmberFile.Size()));
|
||||||
tree->expandAll();
|
tree->expandAll();
|
||||||
}
|
}
|
||||||
@ -220,7 +213,6 @@ void FractoriumEmberController<T>::UpdateLibraryTree()
|
|||||||
{
|
{
|
||||||
int origChildCount = top->childCount();
|
int origChildCount = top->childCount();
|
||||||
int i = origChildCount;
|
int i = origChildCount;
|
||||||
tree->blockSignals(true);
|
|
||||||
|
|
||||||
for (auto it = Advance(m_EmberFile.m_Embers.begin(), i); it != m_EmberFile.m_Embers.end(); ++it)
|
for (auto it = Advance(m_EmberFile.m_Embers.begin(), i); it != m_EmberFile.m_Embers.end(); ++it)
|
||||||
{
|
{
|
||||||
@ -238,7 +230,6 @@ void FractoriumEmberController<T>::UpdateLibraryTree()
|
|||||||
//When adding elements, ensure all indices are sequential.
|
//When adding elements, ensure all indices are sequential.
|
||||||
SyncLibrary(eLibraryUpdate::INDEX);
|
SyncLibrary(eLibraryUpdate::INDEX);
|
||||||
m_Fractorium->SyncFileCountToSequenceCount();
|
m_Fractorium->SyncFileCountToSequenceCount();
|
||||||
tree->blockSignals(false);
|
|
||||||
RenderLibraryPreviews(origChildCount, uint(m_EmberFile.Size()));
|
RenderLibraryPreviews(origChildCount, uint(m_EmberFile.Size()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -277,7 +268,6 @@ void FractoriumEmberController<T>::EmberTreeItemChanged(QTreeWidgetItem* item, i
|
|||||||
if (oldName == newName)//If nothing changed, nothing to do.
|
if (oldName == newName)//If nothing changed, nothing to do.
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tree->blockSignals(true);
|
|
||||||
emberItem->UpdateEmberName();//Copy edit text to the ember's name variable.
|
emberItem->UpdateEmberName();//Copy edit text to the ember's name variable.
|
||||||
m_EmberFile.MakeNamesUnique();//Ensure all names remain unique.
|
m_EmberFile.MakeNamesUnique();//Ensure all names remain unique.
|
||||||
SyncLibrary(eLibraryUpdate::NAME);//Copy all ember names to the tree items since some might have changed to be made unique.
|
SyncLibrary(eLibraryUpdate::NAME);//Copy all ember names to the tree items since some might have changed to be made unique.
|
||||||
@ -288,8 +278,6 @@ void FractoriumEmberController<T>::EmberTreeItemChanged(QTreeWidgetItem* item, i
|
|||||||
m_Ember.m_Name = newName;
|
m_Ember.m_Name = newName;
|
||||||
m_LastSaveCurrent = "";//Reset will force the dialog to show on the next save current since the user probably wants a different name.
|
m_LastSaveCurrent = "";//Reset will force the dialog to show on the next save current since the user probably wants a different name.
|
||||||
}
|
}
|
||||||
|
|
||||||
tree->blockSignals(false);
|
|
||||||
}
|
}
|
||||||
else if (auto parentItem = dynamic_cast<QTreeWidgetItem*>(item))
|
else if (auto parentItem = dynamic_cast<QTreeWidgetItem*>(item))
|
||||||
{
|
{
|
||||||
@ -433,8 +421,6 @@ void FractoriumEmberController<T>::RenderPreviews(QTreeWidget* tree, TreePreview
|
|||||||
|
|
||||||
if (start == UINT_MAX && end == UINT_MAX)
|
if (start == UINT_MAX && end == UINT_MAX)
|
||||||
{
|
{
|
||||||
tree->blockSignals(true);
|
|
||||||
|
|
||||||
if (auto top = tree->topLevelItem(0))
|
if (auto top = tree->topLevelItem(0))
|
||||||
{
|
{
|
||||||
int childCount = top->childCount();
|
int childCount = top->childCount();
|
||||||
@ -445,7 +431,6 @@ void FractoriumEmberController<T>::RenderPreviews(QTreeWidget* tree, TreePreview
|
|||||||
treeItem->SetImage(emptyPreview, PREVIEW_SIZE, PREVIEW_SIZE);
|
treeItem->SetImage(emptyPreview, PREVIEW_SIZE, PREVIEW_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
tree->blockSignals(false);
|
|
||||||
renderer->Render(0, uint(file.Size()));
|
renderer->Render(0, uint(file.Size()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -490,8 +475,7 @@ void FractoriumEmberController<T>::FillSequenceTree()
|
|||||||
vector<byte> v(size * size * 4);
|
vector<byte> v(size * size * 4);
|
||||||
m_SequencePreviewRenderer->Stop();
|
m_SequencePreviewRenderer->Stop();
|
||||||
tree->clear();
|
tree->clear();
|
||||||
QCoreApplication::flush();
|
QCoreApplication::processEvents();//Having to flush events is usually a sign of poor design. However, in this case, it's critical to have this here, else rapid button clicks will crash.
|
||||||
tree->blockSignals(true);
|
|
||||||
auto fileItem = new QTreeWidgetItem(tree);
|
auto fileItem = new QTreeWidgetItem(tree);
|
||||||
QFileInfo info(m_SequenceFile.m_Filename);
|
QFileInfo info(m_SequenceFile.m_Filename);
|
||||||
fileItem->setText(0, info.fileName());
|
fileItem->setText(0, info.fileName());
|
||||||
@ -503,19 +487,18 @@ void FractoriumEmberController<T>::FillSequenceTree()
|
|||||||
auto emberItem = new EmberTreeWidgetItemBase(fileItem);
|
auto emberItem = new EmberTreeWidgetItemBase(fileItem);
|
||||||
|
|
||||||
if (it.m_Name.empty())
|
if (it.m_Name.empty())
|
||||||
emberItem->setText(0, ToString(i++));
|
emberItem->setText(0, ToString(i));
|
||||||
else
|
else
|
||||||
emberItem->setText(0, it.m_Name.c_str());
|
emberItem->setText(0, it.m_Name.c_str());
|
||||||
|
|
||||||
|
i++;
|
||||||
emberItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
emberItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
||||||
emberItem->setToolTip(0, emberItem->text(0));
|
emberItem->setToolTip(0, emberItem->text(0));
|
||||||
emberItem->SetImage(v, size, size);
|
emberItem->SetImage(v, size, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
tree->blockSignals(false);
|
|
||||||
QCoreApplication::flush();
|
|
||||||
RenderSequencePreviews(0, uint(m_SequenceFile.Size()));
|
|
||||||
tree->expandAll();
|
tree->expandAll();
|
||||||
|
RenderSequencePreviews(0, uint(m_SequenceFile.Size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
6
debian/changelog
vendored
6
debian/changelog
vendored
@ -1,3 +1,9 @@
|
|||||||
|
fractorium (1.0.0.17a-0ubuntu1) bionic; urgency=low
|
||||||
|
|
||||||
|
* release 1.0.0.17
|
||||||
|
|
||||||
|
-- Matt Feemster <matt.feemster@gmail.com> Fri, 28 Jun 2019 21:04:38 -0700
|
||||||
|
|
||||||
fractorium (1.0.0.17-0ubuntu1) bionic; urgency=low
|
fractorium (1.0.0.17-0ubuntu1) bionic; urgency=low
|
||||||
|
|
||||||
* release 1.0.0.17
|
* release 1.0.0.17
|
||||||
|
Loading…
Reference in New Issue
Block a user