Merge branch 'dev' into rt-cli2

This commit is contained in:
Hombre
2017-05-02 23:10:40 +02:00
37 changed files with 889 additions and 721 deletions

View File

@@ -945,21 +945,53 @@ void BayerProcess::pixelShiftMotionMethodChanged ()
void BayerProcess::FrameCountChanged(int n, int frameNum)
{
GThreadLock lock;
imageNumber->block (true);
struct Data {
BayerProcess *me;
int n;
int frameNum;
};
const auto func = [](gpointer data) -> gboolean {
Data *d = static_cast<Data *>(data);
BayerProcess *me = d->me;
me->imageNumber->block (true);
int n = d->n;
int frameNum = d->frameNum;
imageNumber->remove_all();
imageNumber->append("1");
for(int i = 2; i <= std::min(n, 4); ++i) {
std::ostringstream entry;
entry << i;
imageNumber->append(entry.str());
}
imageNumber->set_active(std::min(frameNum, n - 1));
if(n == 1) {
imageNumberBox->hide();
} else {
imageNumberBox->show();
}
imageNumber->block (false);
me->imageNumber->remove_all();
me->imageNumber->append("1");
for(int i = 2; i <= std::min(n, 4); ++i) {
std::ostringstream entry;
entry << i;
me->imageNumber->append(entry.str());
}
me->imageNumber->set_active(std::min(frameNum, n - 1));
if(n == 1) {
me->imageNumberBox->hide();
} else {
me->imageNumberBox->show();
}
me->imageNumber->block (false);
delete d;
return FALSE;
};
idle_register.add(func, new Data { this, n, frameNum });
// GThreadLock lock;
// imageNumber->block (true);
// imageNumber->remove_all();
// imageNumber->append("1");
// for(int i = 2; i <= std::min(n, 4); ++i) {
// std::ostringstream entry;
// entry << i;
// imageNumber->append(entry.str());
// }
// imageNumber->set_active(std::min(frameNum, n - 1));
// if(n == 1) {
// imageNumberBox->hide();
// } else {
// imageNumberBox->show();
// }
// imageNumber->block (false);
}

View File

@@ -74,6 +74,8 @@ protected:
Adjuster* pixelShiftRedBlueWeight;
#endif
int oldMethod;
IdleRegister idle_register;
public:
BayerProcess ();

View File

@@ -187,18 +187,6 @@ void ExifPanel::setImageData (const ImageMetaData* id)
idata = id;
exifTreeModel->clear ();
const std::vector<Tag*> defTags = ExifManager::getDefaultTIFFTags (nullptr);
for (size_t i = 0; i < defTags.size(); i++) {
Tag* defTag = defTags[i];
if (defTag->nameToString() == "ImageWidth" || defTag->nameToString() == "ImageHeight" || defTag->nameToString() == "BitsPerSample") {
addTag (exifTreeModel->children(), defTag->nameToString(), "?", AC_SYSTEM, false);
} else {
addTag (exifTreeModel->children(), defTag->nameToString(), defTag->valueToString(), AC_SYSTEM, false);
}
delete defTag;
}
if (id && id->getExifData ()) {
// id->getExifData ()->printAll ();
addDirectory (id->getExifData (), exifTreeModel->children());

View File

@@ -45,12 +45,6 @@ IdleRegister::~IdleRegister()
void IdleRegister::add(GSourceFunc function, gpointer data, gint priority)
{
struct DataWrapper {
IdleRegister* const self;
GSourceFunc function;
gpointer data;
};
const auto dispatch = [](gpointer data) -> gboolean {
DataWrapper* const data_wrapper = static_cast<DataWrapper*>(data);
@@ -80,9 +74,11 @@ void IdleRegister::add(GSourceFunc function, gpointer data, gint priority)
void IdleRegister::destroy()
{
mutex.lock();
for (const auto id : ids) {
for (const auto& id : ids) {
g_source_remove(id.second);
delete id.first;
}
ids.clear();
mutex.unlock();
}

View File

@@ -54,7 +54,13 @@ public:
void destroy();
private:
std::map<void*, guint> ids;
struct DataWrapper {
IdleRegister* const self;
GSourceFunc function;
gpointer data;
};
std::map<const DataWrapper*, guint> ids;
MyMutex mutex;
};

File diff suppressed because it is too large Load Diff