Merge branch 'idle_harder' into dev

This commit is contained in:
heckflosse
2017-04-09 02:18:09 +02:00
31 changed files with 466 additions and 452 deletions

View File

@@ -67,6 +67,7 @@ FileBrowserEntry::FileBrowserEntry (Thumbnail* thm, const Glib::ustring& fname)
FileBrowserEntry::~FileBrowserEntry ()
{
idle_register.destroy();
// so jobs arriving now do nothing
if (feih->pending) {
@@ -176,39 +177,6 @@ void FileBrowserEntry::procParamsChanged (Thumbnail* thm, int whoChangedIt)
}
}
struct tiupdate {
FileBrowserEntryIdleHelper* feih;
rtengine::IImage8* img;
double scale;
rtengine::procparams::CropParams cropParams;
};
int updateImageUI (void* data)
{
tiupdate* params = static_cast<tiupdate*>(data);
FileBrowserEntryIdleHelper* feih = params->feih;
if (feih->destroyed) {
if (feih->pending == 1) {
delete feih;
} else {
feih->pending--;
}
params->img->free ();
delete params;
return 0;
}
feih->fbentry->_updateImage (params->img, params->scale, params->cropParams);
feih->pending--;
delete params;
return 0;
}
void FileBrowserEntry::updateImage (rtengine::IImage8* img, double scale, rtengine::procparams::CropParams cropParams)
{
@@ -225,16 +193,51 @@ void FileBrowserEntry::updateImage (rtengine::IImage8* img, double scale, rtengi
feih->pending++;
}
tiupdate* param = new tiupdate ();
param->feih = feih;
param->img = img;
param->scale = scale;
param->cropParams = cropParams;
struct tiupdate {
FileBrowserEntryIdleHelper* feih;
rtengine::IImage8* img;
double scale;
rtengine::procparams::CropParams cropParams;
};
tiupdate* param = new tiupdate{
feih,
img,
scale,
cropParams
};
#if __GNUC__ == 4 && __GNUC_MINOR__ == 8 && defined( WIN32 ) && defined(__x86_64__)
g_idle_add_full (G_PRIORITY_DEFAULT, updateImageUI, param, NULL);
const gint priority = G_PRIORITY_DEFAULT;
#else
g_idle_add_full (G_PRIORITY_LOW, updateImageUI, param, nullptr);
const gint priority = G_PRIORITY_LOW;
#endif
const auto func = [](gpointer data) -> gboolean {
tiupdate* const params = static_cast<tiupdate*>(data);
FileBrowserEntryIdleHelper* const feih = params->feih;
if (feih->destroyed) {
if (feih->pending == 1) {
delete feih;
} else {
feih->pending--;
}
params->img->free ();
delete params;
return 0;
}
feih->fbentry->_updateImage (params->img, params->scale, params->cropParams);
feih->pending--;
delete params;
return FALSE;
};
idle_register.add(func, param, priority);
}
void FileBrowserEntry::_updateImage (rtengine::IImage8* img, double s, rtengine::procparams::CropParams cropParams)