Fix issues found by AddressSanitizer
Fix memcpy overlap in TIFF reader. Fix memory leaks of SpotRows in control spot panel. Fix memory leaks of SpotRows in locallab. Fix memory leak of Glib::ThreadPool in file browser entry. Fix memory leak of Glib::ThreadPool in thumbnail image updater.
This commit is contained in:
parent
f93c3ddf94
commit
c5bb1f093e
@ -791,7 +791,7 @@ int ImageIO::loadTIFF (const Glib::ustring &fname)
|
|||||||
|
|
||||||
if (samplesperpixel > 3) {
|
if (samplesperpixel > 3) {
|
||||||
for (int i = 0; i < width; i++) {
|
for (int i = 0; i < width; i++) {
|
||||||
memcpy(linebuffer.get() + i * 3 * bitspersample / 8, linebuffer.get() + i * samplesperpixel * bitspersample / 8, 3 * bitspersample / 8);
|
memmove(linebuffer.get() + i * 3 * bitspersample / 8, linebuffer.get() + i * samplesperpixel * bitspersample / 8, 3 * bitspersample / 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (samplesperpixel == 1) {
|
else if (samplesperpixel == 1) {
|
||||||
|
@ -660,7 +660,7 @@ void ControlSpotPanel::on_button_delete()
|
|||||||
nbSpotChanged_ = true;
|
nbSpotChanged_ = true;
|
||||||
selSpotChanged_ = true;
|
selSpotChanged_ = true;
|
||||||
eventType = SpotDeletion;
|
eventType = SpotDeletion;
|
||||||
SpotRow* const delSpotRow = getSpot(selIndex);
|
std::unique_ptr<SpotRow> const delSpotRow = getSpot(selIndex);
|
||||||
listener->panelChanged(EvLocallabSpotDeleted, delSpotRow->name);
|
listener->panelChanged(EvLocallabSpotDeleted, delSpotRow->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -682,7 +682,7 @@ void ControlSpotPanel::on_button_duplicate()
|
|||||||
nbSpotChanged_ = true;
|
nbSpotChanged_ = true;
|
||||||
selSpotChanged_ = true;
|
selSpotChanged_ = true;
|
||||||
eventType = SpotDuplication;
|
eventType = SpotDuplication;
|
||||||
SpotRow* const duplSpotRow = getSpot(selIndex);
|
std::unique_ptr<SpotRow> const duplSpotRow = getSpot(selIndex);
|
||||||
listener->panelChanged(EvLocallabSpotCreated, M("TP_LOCALLAB_EV_DUPL") + " "
|
listener->panelChanged(EvLocallabSpotCreated, M("TP_LOCALLAB_EV_DUPL") + " "
|
||||||
+ duplSpotRow->name);
|
+ duplSpotRow->name);
|
||||||
}
|
}
|
||||||
@ -779,7 +779,7 @@ bool ControlSpotPanel::on_button_visibility(GdkEventButton* event)
|
|||||||
|
|
||||||
// Raise event
|
// Raise event
|
||||||
visibilityChanged_ = true;
|
visibilityChanged_ = true;
|
||||||
SpotRow* const spotRow = getSpot(getSelectedSpot());
|
std::unique_ptr<SpotRow> const spotRow = getSpot(getSelectedSpot());
|
||||||
|
|
||||||
if (row[spots_.isvisible]) {
|
if (row[spots_.isvisible]) {
|
||||||
listener->panelChanged(EvLocallabSpotVisibility, M("TP_LOCALLAB_EV_VIS") + " (" + spotRow->name + ")");
|
listener->panelChanged(EvLocallabSpotVisibility, M("TP_LOCALLAB_EV_VIS") + " (" + spotRow->name + ")");
|
||||||
@ -896,7 +896,7 @@ void ControlSpotPanel::controlspotChanged()
|
|||||||
|
|
||||||
selSpotChanged_ = true;
|
selSpotChanged_ = true;
|
||||||
eventType = SpotSelection;
|
eventType = SpotSelection;
|
||||||
SpotRow* const spotRow = getSpot(selIndex);
|
std::unique_ptr<SpotRow> const spotRow = getSpot(selIndex);
|
||||||
|
|
||||||
// Image area shall be regenerated if mask or deltaE preview was active when switching spot
|
// Image area shall be regenerated if mask or deltaE preview was active when switching spot
|
||||||
if (maskPrevActive || preview_->get_active()) {
|
if (maskPrevActive || preview_->get_active()) {
|
||||||
@ -2535,13 +2535,16 @@ int ControlSpotPanel::getEventType()
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
ControlSpotPanel::SpotRow* ControlSpotPanel::getSpot(const int index)
|
std::unique_ptr<ControlSpotPanel::SpotRow> ControlSpotPanel::getSpot(const int index)
|
||||||
{
|
{
|
||||||
|
// TODO: Return an std::optional<ControlSpotPanel::SpotRow> after upgrading
|
||||||
|
// to C++17.
|
||||||
|
|
||||||
// printf("getSpot: %d\n", index);
|
// printf("getSpot: %d\n", index);
|
||||||
|
|
||||||
MyMutex::MyLock lock(mTreeview);
|
MyMutex::MyLock lock(mTreeview);
|
||||||
|
|
||||||
SpotRow* r = new SpotRow();
|
std::unique_ptr<SpotRow> r(new SpotRow());
|
||||||
|
|
||||||
int i = -1;
|
int i = -1;
|
||||||
|
|
||||||
@ -2676,58 +2679,58 @@ void ControlSpotPanel::resetDeltaEPreview()
|
|||||||
previewConn_.block(false);
|
previewConn_.block(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ControlSpotPanel::addControlSpot(SpotRow* newSpot)
|
void ControlSpotPanel::addControlSpot(const SpotRow &newSpot)
|
||||||
{
|
{
|
||||||
// printf("addControlSpot: %d\n", newSpot->name);
|
// printf("addControlSpot: %d\n", newSpot.name);
|
||||||
|
|
||||||
MyMutex::MyLock lock(mTreeview);
|
MyMutex::MyLock lock(mTreeview);
|
||||||
|
|
||||||
disableParamlistener(true);
|
disableParamlistener(true);
|
||||||
Gtk::TreeModel::Row row = *(treemodel_->append());
|
Gtk::TreeModel::Row row = *(treemodel_->append());
|
||||||
row[spots_.mouseover] = false;
|
row[spots_.mouseover] = false;
|
||||||
row[spots_.name] = newSpot->name;
|
row[spots_.name] = newSpot.name;
|
||||||
row[spots_.isvisible] = newSpot->isvisible;
|
row[spots_.isvisible] = newSpot.isvisible;
|
||||||
row[spots_.curveid] = 0; // No associated curve
|
row[spots_.curveid] = 0; // No associated curve
|
||||||
row[spots_.prevMethod] = newSpot->prevMethod;
|
row[spots_.prevMethod] = newSpot.prevMethod;
|
||||||
row[spots_.shape] = newSpot->shape;
|
row[spots_.shape] = newSpot.shape;
|
||||||
row[spots_.spotMethod] = newSpot->spotMethod;
|
row[spots_.spotMethod] = newSpot.spotMethod;
|
||||||
row[spots_.sensiexclu] = newSpot->sensiexclu;
|
row[spots_.sensiexclu] = newSpot.sensiexclu;
|
||||||
row[spots_.structexclu] = newSpot->structexclu;
|
row[spots_.structexclu] = newSpot.structexclu;
|
||||||
row[spots_.shapeMethod] = newSpot->shapeMethod;
|
row[spots_.shapeMethod] = newSpot.shapeMethod;
|
||||||
row[spots_.locX] = newSpot->locX;
|
row[spots_.locX] = newSpot.locX;
|
||||||
row[spots_.locXL] = newSpot->locXL;
|
row[spots_.locXL] = newSpot.locXL;
|
||||||
row[spots_.locY] = newSpot->locY;
|
row[spots_.locY] = newSpot.locY;
|
||||||
row[spots_.locYT] = newSpot->locYT;
|
row[spots_.locYT] = newSpot.locYT;
|
||||||
row[spots_.centerX] = newSpot->centerX;
|
row[spots_.centerX] = newSpot.centerX;
|
||||||
row[spots_.centerY] = newSpot->centerY;
|
row[spots_.centerY] = newSpot.centerY;
|
||||||
row[spots_.circrad] = newSpot->circrad;
|
row[spots_.circrad] = newSpot.circrad;
|
||||||
row[spots_.qualityMethod] = newSpot->qualityMethod;
|
row[spots_.qualityMethod] = newSpot.qualityMethod;
|
||||||
row[spots_.transit] = newSpot->transit;
|
row[spots_.transit] = newSpot.transit;
|
||||||
row[spots_.transitweak] = newSpot->transitweak;
|
row[spots_.transitweak] = newSpot.transitweak;
|
||||||
row[spots_.transitgrad] = newSpot->transitgrad;
|
row[spots_.transitgrad] = newSpot.transitgrad;
|
||||||
row[spots_.feather] = newSpot->feather;
|
row[spots_.feather] = newSpot.feather;
|
||||||
row[spots_.struc] = newSpot->struc;
|
row[spots_.struc] = newSpot.struc;
|
||||||
row[spots_.thresh] = newSpot->thresh;
|
row[spots_.thresh] = newSpot.thresh;
|
||||||
row[spots_.iter] = newSpot->iter;
|
row[spots_.iter] = newSpot.iter;
|
||||||
row[spots_.balan] = newSpot->balan;
|
row[spots_.balan] = newSpot.balan;
|
||||||
row[spots_.balanh] = newSpot->balanh;
|
row[spots_.balanh] = newSpot.balanh;
|
||||||
row[spots_.colorde] = newSpot->colorde;
|
row[spots_.colorde] = newSpot.colorde;
|
||||||
row[spots_.colorscope] = newSpot->colorscope;
|
row[spots_.colorscope] = newSpot.colorscope;
|
||||||
row[spots_.avoidrad] = newSpot->avoidrad;
|
row[spots_.avoidrad] = newSpot.avoidrad;
|
||||||
row[spots_.hishow] = newSpot->hishow;
|
row[spots_.hishow] = newSpot.hishow;
|
||||||
row[spots_.activ] = newSpot->activ;
|
row[spots_.activ] = newSpot.activ;
|
||||||
row[spots_.blwh] = newSpot->blwh;
|
row[spots_.blwh] = newSpot.blwh;
|
||||||
row[spots_.recurs] = newSpot->recurs;
|
row[spots_.recurs] = newSpot.recurs;
|
||||||
row[spots_.laplac] = newSpot->laplac;
|
row[spots_.laplac] = newSpot.laplac;
|
||||||
row[spots_.deltae] = newSpot->deltae;
|
row[spots_.deltae] = newSpot.deltae;
|
||||||
row[spots_.scopemask] = newSpot->scopemask;
|
row[spots_.scopemask] = newSpot.scopemask;
|
||||||
row[spots_.denoichmask] = newSpot->denoichmask;
|
row[spots_.denoichmask] = newSpot.denoichmask;
|
||||||
row[spots_.shortc] = newSpot->shortc;
|
row[spots_.shortc] = newSpot.shortc;
|
||||||
row[spots_.lumask] = newSpot->lumask;
|
row[spots_.lumask] = newSpot.lumask;
|
||||||
//row[spots_.savrest] = newSpot->savrest;
|
//row[spots_.savrest] = newSpot.savrest;
|
||||||
row[spots_.complexMethod] = newSpot->complexMethod;
|
row[spots_.complexMethod] = newSpot.complexMethod;
|
||||||
row[spots_.wavMethod] = newSpot->wavMethod;
|
row[spots_.wavMethod] = newSpot.wavMethod;
|
||||||
row[spots_.avoidgamutMethod] = newSpot->avoidgamutMethod;
|
row[spots_.avoidgamutMethod] = newSpot.avoidgamutMethod;
|
||||||
updateParamVisibility();
|
updateParamVisibility();
|
||||||
disableParamlistener(false);
|
disableParamlistener(false);
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
#ifndef _CONTROLSPOTPANEL_H_
|
#ifndef _CONTROLSPOTPANEL_H_
|
||||||
#define _CONTROLSPOTPANEL_H_
|
#define _CONTROLSPOTPANEL_H_
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include "../rtengine/coord.h"
|
#include "../rtengine/coord.h"
|
||||||
#include "editcallbacks.h"
|
#include "editcallbacks.h"
|
||||||
#include "threadutils.h"
|
#include "threadutils.h"
|
||||||
@ -141,7 +143,7 @@ public:
|
|||||||
* @param index The spot index to get params
|
* @param index The spot index to get params
|
||||||
* @return A SpotRow structure containing params of associated spot
|
* @return A SpotRow structure containing params of associated spot
|
||||||
*/
|
*/
|
||||||
SpotRow* getSpot(const int index);
|
std::unique_ptr<SpotRow> getSpot(const int index);
|
||||||
/**
|
/**
|
||||||
* Getter of spots number
|
* Getter of spots number
|
||||||
*
|
*
|
||||||
@ -187,7 +189,7 @@ public:
|
|||||||
*
|
*
|
||||||
* @param newSpot A SpotRow structure containing new spot params
|
* @param newSpot A SpotRow structure containing new spot params
|
||||||
*/
|
*/
|
||||||
void addControlSpot(SpotRow* newSpot);
|
void addControlSpot(const SpotRow &newSpot);
|
||||||
|
|
||||||
// Control spot delete function
|
// Control spot delete function
|
||||||
/**
|
/**
|
||||||
|
@ -241,113 +241,113 @@ void Locallab::read(const rtengine::procparams::ProcParams* pp, const ParamsEdit
|
|||||||
|
|
||||||
// TODO Manage it with read function in controlspotpanel.cc
|
// TODO Manage it with read function in controlspotpanel.cc
|
||||||
// Add existent spots based on pp
|
// Add existent spots based on pp
|
||||||
ControlSpotPanel::SpotRow* const r = new ControlSpotPanel::SpotRow();
|
ControlSpotPanel::SpotRow r;
|
||||||
|
|
||||||
for (int i = 0; i < (int)pp->locallab.spots.size(); i++) {
|
for (int i = 0; i < (int)pp->locallab.spots.size(); i++) {
|
||||||
r->name = pp->locallab.spots.at(i).name;
|
r.name = pp->locallab.spots.at(i).name;
|
||||||
r->isvisible = pp->locallab.spots.at(i).isvisible;
|
r.isvisible = pp->locallab.spots.at(i).isvisible;
|
||||||
|
|
||||||
if (pp->locallab.spots.at(i).shape == "ELI") {
|
if (pp->locallab.spots.at(i).shape == "ELI") {
|
||||||
r->shape = 0;
|
r.shape = 0;
|
||||||
} else {
|
} else {
|
||||||
r->shape = 1;
|
r.shape = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pp->locallab.spots.at(i).prevMethod == "hide") {
|
if (pp->locallab.spots.at(i).prevMethod == "hide") {
|
||||||
r->prevMethod = 0;
|
r.prevMethod = 0;
|
||||||
} else {
|
} else {
|
||||||
r->prevMethod = 1;
|
r.prevMethod = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pp->locallab.spots.at(i).spotMethod == "norm") {
|
if (pp->locallab.spots.at(i).spotMethod == "norm") {
|
||||||
r->spotMethod = 0;
|
r.spotMethod = 0;
|
||||||
} else if(pp->locallab.spots.at(i).spotMethod == "exc"){
|
} else if(pp->locallab.spots.at(i).spotMethod == "exc"){
|
||||||
r->spotMethod = 1;
|
r.spotMethod = 1;
|
||||||
} else if (pp->locallab.spots.at(i).spotMethod == "full"){
|
} else if (pp->locallab.spots.at(i).spotMethod == "full"){
|
||||||
r->spotMethod = 2;
|
r.spotMethod = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->sensiexclu = pp->locallab.spots.at(i).sensiexclu;
|
r.sensiexclu = pp->locallab.spots.at(i).sensiexclu;
|
||||||
r->structexclu = pp->locallab.spots.at(i).structexclu;
|
r.structexclu = pp->locallab.spots.at(i).structexclu;
|
||||||
|
|
||||||
if (pp->locallab.spots.at(i).shapeMethod == "IND") {
|
if (pp->locallab.spots.at(i).shapeMethod == "IND") {
|
||||||
r->shapeMethod = 0;
|
r.shapeMethod = 0;
|
||||||
} else if (pp->locallab.spots.at(i).shapeMethod == "SYM") {
|
} else if (pp->locallab.spots.at(i).shapeMethod == "SYM") {
|
||||||
r->shapeMethod = 1;
|
r.shapeMethod = 1;
|
||||||
} else if (pp->locallab.spots.at(i).shapeMethod == "INDSL") {
|
} else if (pp->locallab.spots.at(i).shapeMethod == "INDSL") {
|
||||||
r->shapeMethod = 2;
|
r.shapeMethod = 2;
|
||||||
} else {
|
} else {
|
||||||
r->shapeMethod = 3;
|
r.shapeMethod = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pp->locallab.spots.at(i).avoidgamutMethod == "NONE") {
|
if (pp->locallab.spots.at(i).avoidgamutMethod == "NONE") {
|
||||||
r->avoidgamutMethod = 0;
|
r.avoidgamutMethod = 0;
|
||||||
} else if (pp->locallab.spots.at(i).avoidgamutMethod == "LAB") {
|
} else if (pp->locallab.spots.at(i).avoidgamutMethod == "LAB") {
|
||||||
r->avoidgamutMethod = 1;
|
r.avoidgamutMethod = 1;
|
||||||
} else if (pp->locallab.spots.at(i).avoidgamutMethod == "XYZ") {
|
} else if (pp->locallab.spots.at(i).avoidgamutMethod == "XYZ") {
|
||||||
r->avoidgamutMethod= 2;
|
r.avoidgamutMethod= 2;
|
||||||
} else if (pp->locallab.spots.at(i).avoidgamutMethod == "XYZREL") {
|
} else if (pp->locallab.spots.at(i).avoidgamutMethod == "XYZREL") {
|
||||||
r->avoidgamutMethod= 3;
|
r.avoidgamutMethod= 3;
|
||||||
} else if (pp->locallab.spots.at(i).avoidgamutMethod == "MUNS") {
|
} else if (pp->locallab.spots.at(i).avoidgamutMethod == "MUNS") {
|
||||||
r->avoidgamutMethod= 4;
|
r.avoidgamutMethod= 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->locX = pp->locallab.spots.at(i).loc.at(0);
|
r.locX = pp->locallab.spots.at(i).loc.at(0);
|
||||||
r->locXL = pp->locallab.spots.at(i).loc.at(1);
|
r.locXL = pp->locallab.spots.at(i).loc.at(1);
|
||||||
r->locY = pp->locallab.spots.at(i).loc.at(2);
|
r.locY = pp->locallab.spots.at(i).loc.at(2);
|
||||||
r->locYT = pp->locallab.spots.at(i).loc.at(3);
|
r.locYT = pp->locallab.spots.at(i).loc.at(3);
|
||||||
r->centerX = pp->locallab.spots.at(i).centerX;
|
r.centerX = pp->locallab.spots.at(i).centerX;
|
||||||
r->centerY = pp->locallab.spots.at(i).centerY;
|
r.centerY = pp->locallab.spots.at(i).centerY;
|
||||||
r->circrad = pp->locallab.spots.at(i).circrad;
|
r.circrad = pp->locallab.spots.at(i).circrad;
|
||||||
|
|
||||||
if (pp->locallab.spots.at(i).qualityMethod == "enh") {
|
if (pp->locallab.spots.at(i).qualityMethod == "enh") {
|
||||||
r->qualityMethod = 0;
|
r.qualityMethod = 0;
|
||||||
} else {
|
} else {
|
||||||
r->qualityMethod = 1;
|
r.qualityMethod = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->transit = pp->locallab.spots.at(i).transit;
|
r.transit = pp->locallab.spots.at(i).transit;
|
||||||
r->transitweak = pp->locallab.spots.at(i).transitweak;
|
r.transitweak = pp->locallab.spots.at(i).transitweak;
|
||||||
r->transitgrad = pp->locallab.spots.at(i).transitgrad;
|
r.transitgrad = pp->locallab.spots.at(i).transitgrad;
|
||||||
r->feather = pp->locallab.spots.at(i).feather;
|
r.feather = pp->locallab.spots.at(i).feather;
|
||||||
r->struc = pp->locallab.spots.at(i).struc;
|
r.struc = pp->locallab.spots.at(i).struc;
|
||||||
r->thresh = pp->locallab.spots.at(i).thresh;
|
r.thresh = pp->locallab.spots.at(i).thresh;
|
||||||
r->iter = pp->locallab.spots.at(i).iter;
|
r.iter = pp->locallab.spots.at(i).iter;
|
||||||
r->balan = pp->locallab.spots.at(i).balan;
|
r.balan = pp->locallab.spots.at(i).balan;
|
||||||
r->balanh = pp->locallab.spots.at(i).balanh;
|
r.balanh = pp->locallab.spots.at(i).balanh;
|
||||||
r->colorde = pp->locallab.spots.at(i).colorde;
|
r.colorde = pp->locallab.spots.at(i).colorde;
|
||||||
r->colorscope = pp->locallab.spots.at(i).colorscope;
|
r.colorscope = pp->locallab.spots.at(i).colorscope;
|
||||||
r->avoidrad = pp->locallab.spots.at(i).avoidrad;
|
r.avoidrad = pp->locallab.spots.at(i).avoidrad;
|
||||||
r->hishow = pp->locallab.spots.at(i).hishow;
|
r.hishow = pp->locallab.spots.at(i).hishow;
|
||||||
r->activ = pp->locallab.spots.at(i).activ;
|
r.activ = pp->locallab.spots.at(i).activ;
|
||||||
r->blwh = pp->locallab.spots.at(i).blwh;
|
r.blwh = pp->locallab.spots.at(i).blwh;
|
||||||
r->recurs = pp->locallab.spots.at(i).recurs;
|
r.recurs = pp->locallab.spots.at(i).recurs;
|
||||||
r->laplac = true; //pp->locallab.spots.at(i).laplac;
|
r.laplac = true; //pp->locallab.spots.at(i).laplac;
|
||||||
r->deltae = pp->locallab.spots.at(i).deltae;
|
r.deltae = pp->locallab.spots.at(i).deltae;
|
||||||
r->scopemask = pp->locallab.spots.at(i).scopemask;
|
r.scopemask = pp->locallab.spots.at(i).scopemask;
|
||||||
r->denoichmask = pp->locallab.spots.at(i).denoichmask;
|
r.denoichmask = pp->locallab.spots.at(i).denoichmask;
|
||||||
r->shortc = pp->locallab.spots.at(i).shortc;
|
r.shortc = pp->locallab.spots.at(i).shortc;
|
||||||
r->lumask = pp->locallab.spots.at(i).lumask;
|
r.lumask = pp->locallab.spots.at(i).lumask;
|
||||||
//r->savrest = pp->locallab.spots.at(i).savrest;
|
//r.savrest = pp->locallab.spots.at(i).savrest;
|
||||||
|
|
||||||
if (pp->locallab.spots.at(i).complexMethod == "sim") {
|
if (pp->locallab.spots.at(i).complexMethod == "sim") {
|
||||||
r->complexMethod = 0;
|
r.complexMethod = 0;
|
||||||
} else if (pp->locallab.spots.at(i).complexMethod == "mod") {
|
} else if (pp->locallab.spots.at(i).complexMethod == "mod") {
|
||||||
r->complexMethod = 1;
|
r.complexMethod = 1;
|
||||||
} else if (pp->locallab.spots.at(i).complexMethod == "all") {
|
} else if (pp->locallab.spots.at(i).complexMethod == "all") {
|
||||||
r->complexMethod = 2;
|
r.complexMethod = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pp->locallab.spots.at(i).wavMethod == "D2") {
|
if (pp->locallab.spots.at(i).wavMethod == "D2") {
|
||||||
r->wavMethod = 0;
|
r.wavMethod = 0;
|
||||||
} else if (pp->locallab.spots.at(i).wavMethod == "D4") {
|
} else if (pp->locallab.spots.at(i).wavMethod == "D4") {
|
||||||
r->wavMethod = 1;
|
r.wavMethod = 1;
|
||||||
} else if (pp->locallab.spots.at(i).wavMethod == "D6") {
|
} else if (pp->locallab.spots.at(i).wavMethod == "D6") {
|
||||||
r->wavMethod = 2;
|
r.wavMethod = 2;
|
||||||
} else if (pp->locallab.spots.at(i).wavMethod == "D10") {
|
} else if (pp->locallab.spots.at(i).wavMethod == "D10") {
|
||||||
r->wavMethod = 3;
|
r.wavMethod = 3;
|
||||||
} else if (pp->locallab.spots.at(i).wavMethod == "D14") {
|
} else if (pp->locallab.spots.at(i).wavMethod == "D14") {
|
||||||
r->wavMethod = 4;
|
r.wavMethod = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
expsettings->addControlSpot(r);
|
expsettings->addControlSpot(r);
|
||||||
@ -401,7 +401,6 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
|||||||
|
|
||||||
const int spotPanelEvent = expsettings->getEventType();
|
const int spotPanelEvent = expsettings->getEventType();
|
||||||
int spotIndex;
|
int spotIndex;
|
||||||
ControlSpotPanel::SpotRow* r;
|
|
||||||
rtengine::procparams::LocallabParams::LocallabSpot* newSpot;
|
rtengine::procparams::LocallabParams::LocallabSpot* newSpot;
|
||||||
|
|
||||||
int imW, imH; // Size of image
|
int imW, imH; // Size of image
|
||||||
@ -412,57 +411,57 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
|||||||
int toolNb;
|
int toolNb;
|
||||||
|
|
||||||
switch (spotPanelEvent) {
|
switch (spotPanelEvent) {
|
||||||
case (ControlSpotPanel::SpotCreation): // Spot creation event
|
case (ControlSpotPanel::SpotCreation): { // Spot creation event
|
||||||
// Spot creation (default initialization)
|
// Spot creation (default initialization)
|
||||||
newSpot = new LocallabParams::LocallabSpot();
|
newSpot = new LocallabParams::LocallabSpot();
|
||||||
r = new ControlSpotPanel::SpotRow();
|
ControlSpotPanel::SpotRow r;
|
||||||
r->name = newSpot->name = M("TP_LOCALLAB_SPOTNAME");
|
r.name = newSpot->name = M("TP_LOCALLAB_SPOTNAME");
|
||||||
r->isvisible = newSpot->isvisible;
|
r.isvisible = newSpot->isvisible;
|
||||||
|
|
||||||
if (newSpot->shape == "ELI") {
|
if (newSpot->shape == "ELI") {
|
||||||
r->shape = 0;
|
r.shape = 0;
|
||||||
} else {
|
} else {
|
||||||
r->shape = 1;
|
r.shape = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newSpot->prevMethod == "hide") {
|
if (newSpot->prevMethod == "hide") {
|
||||||
r->prevMethod = 0;
|
r.prevMethod = 0;
|
||||||
} else {
|
} else {
|
||||||
r->prevMethod = 1;
|
r.prevMethod = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (newSpot->spotMethod == "norm") {
|
if (newSpot->spotMethod == "norm") {
|
||||||
r->spotMethod = 0;
|
r.spotMethod = 0;
|
||||||
} else if(newSpot->spotMethod == "exc") {
|
} else if(newSpot->spotMethod == "exc") {
|
||||||
r->spotMethod = 1;
|
r.spotMethod = 1;
|
||||||
} else if(newSpot->spotMethod == "full") {
|
} else if(newSpot->spotMethod == "full") {
|
||||||
r->spotMethod = 2;
|
r.spotMethod = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->sensiexclu = newSpot->sensiexclu;
|
r.sensiexclu = newSpot->sensiexclu;
|
||||||
r->structexclu = newSpot->structexclu;
|
r.structexclu = newSpot->structexclu;
|
||||||
|
|
||||||
if (newSpot->shapeMethod == "IND") {
|
if (newSpot->shapeMethod == "IND") {
|
||||||
r->shapeMethod = 0;
|
r.shapeMethod = 0;
|
||||||
} else if (newSpot->shapeMethod == "SYM") {
|
} else if (newSpot->shapeMethod == "SYM") {
|
||||||
r->shapeMethod = 1;
|
r.shapeMethod = 1;
|
||||||
} else if (newSpot->shapeMethod == "INDSL") {
|
} else if (newSpot->shapeMethod == "INDSL") {
|
||||||
r->shapeMethod = 2;
|
r.shapeMethod = 2;
|
||||||
} else {
|
} else {
|
||||||
r->shapeMethod = 3;
|
r.shapeMethod = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newSpot->avoidgamutMethod == "NONE") {
|
if (newSpot->avoidgamutMethod == "NONE") {
|
||||||
r->avoidgamutMethod = 0;
|
r.avoidgamutMethod = 0;
|
||||||
} else if (newSpot->avoidgamutMethod == "LAB") {
|
} else if (newSpot->avoidgamutMethod == "LAB") {
|
||||||
r->avoidgamutMethod = 1;
|
r.avoidgamutMethod = 1;
|
||||||
} else if (newSpot->avoidgamutMethod == "XYZ") {
|
} else if (newSpot->avoidgamutMethod == "XYZ") {
|
||||||
r->avoidgamutMethod = 2;
|
r.avoidgamutMethod = 2;
|
||||||
} else if (newSpot->avoidgamutMethod == "XYZREL") {
|
} else if (newSpot->avoidgamutMethod == "XYZREL") {
|
||||||
r->avoidgamutMethod = 3;
|
r.avoidgamutMethod = 3;
|
||||||
} else if (newSpot->avoidgamutMethod == "MUNS") {
|
} else if (newSpot->avoidgamutMethod == "MUNS") {
|
||||||
r->avoidgamutMethod = 4;
|
r.avoidgamutMethod = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate spot size and center position according to preview area
|
// Calculate spot size and center position according to preview area
|
||||||
@ -483,63 +482,63 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
r->locX = newSpot->loc.at(0);
|
r.locX = newSpot->loc.at(0);
|
||||||
r->locXL = newSpot->loc.at(1);
|
r.locXL = newSpot->loc.at(1);
|
||||||
r->locY = newSpot->loc.at(2);
|
r.locY = newSpot->loc.at(2);
|
||||||
r->locYT = newSpot->loc.at(3);
|
r.locYT = newSpot->loc.at(3);
|
||||||
r->centerX = newSpot->centerX;
|
r.centerX = newSpot->centerX;
|
||||||
r->centerY = newSpot->centerY;
|
r.centerY = newSpot->centerY;
|
||||||
|
|
||||||
r->circrad = newSpot->circrad;
|
r.circrad = newSpot->circrad;
|
||||||
|
|
||||||
if (newSpot->qualityMethod == "enh") {
|
if (newSpot->qualityMethod == "enh") {
|
||||||
r->qualityMethod = 0;
|
r.qualityMethod = 0;
|
||||||
} else {
|
} else {
|
||||||
r->qualityMethod = 1;
|
r.qualityMethod = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->transit = newSpot->transit;
|
r.transit = newSpot->transit;
|
||||||
r->transitweak = newSpot->transitweak;
|
r.transitweak = newSpot->transitweak;
|
||||||
r->transitgrad = newSpot->transitgrad;
|
r.transitgrad = newSpot->transitgrad;
|
||||||
r->feather = newSpot->feather;
|
r.feather = newSpot->feather;
|
||||||
r->struc = newSpot->struc;
|
r.struc = newSpot->struc;
|
||||||
r->thresh = newSpot->thresh;
|
r.thresh = newSpot->thresh;
|
||||||
r->iter = newSpot->iter;
|
r.iter = newSpot->iter;
|
||||||
r->balan = newSpot->balan;
|
r.balan = newSpot->balan;
|
||||||
r->balanh = newSpot->balanh;
|
r.balanh = newSpot->balanh;
|
||||||
r->colorde = newSpot->colorde;
|
r.colorde = newSpot->colorde;
|
||||||
r->colorscope = newSpot->colorscope;
|
r.colorscope = newSpot->colorscope;
|
||||||
r->avoidrad = newSpot->avoidrad;
|
r.avoidrad = newSpot->avoidrad;
|
||||||
r->hishow = newSpot->hishow;
|
r.hishow = newSpot->hishow;
|
||||||
r->activ = newSpot->activ;
|
r.activ = newSpot->activ;
|
||||||
r->blwh = newSpot->blwh;
|
r.blwh = newSpot->blwh;
|
||||||
r->recurs = newSpot->recurs;
|
r.recurs = newSpot->recurs;
|
||||||
r->laplac = newSpot->laplac;
|
r.laplac = newSpot->laplac;
|
||||||
r->deltae = newSpot->deltae;
|
r.deltae = newSpot->deltae;
|
||||||
r->scopemask = newSpot->scopemask;
|
r.scopemask = newSpot->scopemask;
|
||||||
r->denoichmask = newSpot->denoichmask;
|
r.denoichmask = newSpot->denoichmask;
|
||||||
r->shortc = newSpot->shortc;
|
r.shortc = newSpot->shortc;
|
||||||
r->lumask = newSpot->lumask;
|
r.lumask = newSpot->lumask;
|
||||||
//r->savrest = newSpot->savrest;
|
//r.savrest = newSpot->savrest;
|
||||||
|
|
||||||
if (newSpot->complexMethod == "sim") {
|
if (newSpot->complexMethod == "sim") {
|
||||||
r->complexMethod = 0;
|
r.complexMethod = 0;
|
||||||
} else if (newSpot->complexMethod == "mod") {
|
} else if (newSpot->complexMethod == "mod") {
|
||||||
r->complexMethod = 1;
|
r.complexMethod = 1;
|
||||||
} else if (newSpot->complexMethod == "all") {
|
} else if (newSpot->complexMethod == "all") {
|
||||||
r->complexMethod = 2;
|
r.complexMethod = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newSpot->wavMethod == "D2") {
|
if (newSpot->wavMethod == "D2") {
|
||||||
r->wavMethod = 0;
|
r.wavMethod = 0;
|
||||||
} else if (newSpot->wavMethod == "D4") {
|
} else if (newSpot->wavMethod == "D4") {
|
||||||
r->wavMethod = 1;
|
r.wavMethod = 1;
|
||||||
} else if (newSpot->wavMethod == "D6") {
|
} else if (newSpot->wavMethod == "D6") {
|
||||||
r->wavMethod = 2;
|
r.wavMethod = 2;
|
||||||
} else if (newSpot->wavMethod == "D10") {
|
} else if (newSpot->wavMethod == "D10") {
|
||||||
r->wavMethod = 3;
|
r.wavMethod = 3;
|
||||||
} else if (newSpot->wavMethod == "D14") {
|
} else if (newSpot->wavMethod == "D14") {
|
||||||
r->wavMethod = 4;
|
r.wavMethod = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
expsettings->addControlSpot(r);
|
expsettings->addControlSpot(r);
|
||||||
@ -584,6 +583,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
|||||||
// Note: No need to manage pedited as batch mode is deactivated for Locallab
|
// Note: No need to manage pedited as batch mode is deactivated for Locallab
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case (ControlSpotPanel::SpotDeletion): // Spot deletion event
|
case (ControlSpotPanel::SpotDeletion): // Spot deletion event
|
||||||
// Get deleted spot index in ProcParams and update it
|
// Get deleted spot index in ProcParams and update it
|
||||||
@ -724,7 +724,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (ControlSpotPanel::SpotDuplication): // Spot duplication event
|
case (ControlSpotPanel::SpotDuplication): { // Spot duplication event
|
||||||
newSpot = nullptr;
|
newSpot = nullptr;
|
||||||
spotIndex = expsettings->getSelectedSpot();
|
spotIndex = expsettings->getSelectedSpot();
|
||||||
|
|
||||||
@ -740,53 +740,53 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Spot creation (initialization at currently selected spot)
|
// Spot creation (initialization at currently selected spot)
|
||||||
r = new ControlSpotPanel::SpotRow();
|
ControlSpotPanel::SpotRow r;
|
||||||
r->name = newSpot->name = newSpot->name + " - " + M("TP_LOCALLAB_DUPLSPOTNAME");
|
r.name = newSpot->name = newSpot->name + " - " + M("TP_LOCALLAB_DUPLSPOTNAME");
|
||||||
r->isvisible = newSpot->isvisible;
|
r.isvisible = newSpot->isvisible;
|
||||||
|
|
||||||
if (newSpot->shape == "ELI") {
|
if (newSpot->shape == "ELI") {
|
||||||
r->shape = 0;
|
r.shape = 0;
|
||||||
} else {
|
} else {
|
||||||
r->shape = 1;
|
r.shape = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newSpot->prevMethod == "hide") {
|
if (newSpot->prevMethod == "hide") {
|
||||||
r->prevMethod = 0;
|
r.prevMethod = 0;
|
||||||
} else {
|
} else {
|
||||||
r->prevMethod = 1;
|
r.prevMethod = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newSpot->spotMethod == "norm") {
|
if (newSpot->spotMethod == "norm") {
|
||||||
r->spotMethod = 0;
|
r.spotMethod = 0;
|
||||||
} else if (newSpot->spotMethod == "exc") {
|
} else if (newSpot->spotMethod == "exc") {
|
||||||
r->spotMethod = 1;
|
r.spotMethod = 1;
|
||||||
} else if (newSpot->spotMethod == "full") {
|
} else if (newSpot->spotMethod == "full") {
|
||||||
r->spotMethod = 2;
|
r.spotMethod = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->sensiexclu = newSpot->sensiexclu;
|
r.sensiexclu = newSpot->sensiexclu;
|
||||||
r->structexclu = newSpot->structexclu;
|
r.structexclu = newSpot->structexclu;
|
||||||
|
|
||||||
if (newSpot->shapeMethod == "IND") {
|
if (newSpot->shapeMethod == "IND") {
|
||||||
r->shapeMethod = 0;
|
r.shapeMethod = 0;
|
||||||
} else if (newSpot->shapeMethod == "SYM") {
|
} else if (newSpot->shapeMethod == "SYM") {
|
||||||
r->shapeMethod = 1;
|
r.shapeMethod = 1;
|
||||||
} else if (newSpot->shapeMethod == "INDSL") {
|
} else if (newSpot->shapeMethod == "INDSL") {
|
||||||
r->shapeMethod = 2;
|
r.shapeMethod = 2;
|
||||||
} else {
|
} else {
|
||||||
r->shapeMethod = 3;
|
r.shapeMethod = 3;
|
||||||
}
|
}
|
||||||
//printf("n0=%f n1=%f n2=%f n3=%f\n", (double) newSpot->loc.at(0), (double) newSpot->loc.at(1), (double) newSpot->loc.at(2), (double) newSpot->loc.at(3));
|
//printf("n0=%f n1=%f n2=%f n3=%f\n", (double) newSpot->loc.at(0), (double) newSpot->loc.at(1), (double) newSpot->loc.at(2), (double) newSpot->loc.at(3));
|
||||||
if (newSpot->avoidgamutMethod == "NONE") {
|
if (newSpot->avoidgamutMethod == "NONE") {
|
||||||
r->avoidgamutMethod = 0;
|
r.avoidgamutMethod = 0;
|
||||||
} else if (newSpot->avoidgamutMethod == "LAB") {
|
} else if (newSpot->avoidgamutMethod == "LAB") {
|
||||||
r->avoidgamutMethod = 1;
|
r.avoidgamutMethod = 1;
|
||||||
} else if (newSpot->avoidgamutMethod== "XYZ") {
|
} else if (newSpot->avoidgamutMethod== "XYZ") {
|
||||||
r->avoidgamutMethod = 2;
|
r.avoidgamutMethod = 2;
|
||||||
} else if (newSpot->avoidgamutMethod== "XYZREL") {
|
} else if (newSpot->avoidgamutMethod== "XYZREL") {
|
||||||
r->avoidgamutMethod = 3;
|
r.avoidgamutMethod = 3;
|
||||||
} else if (newSpot->avoidgamutMethod== "MUNS") {
|
} else if (newSpot->avoidgamutMethod== "MUNS") {
|
||||||
r->avoidgamutMethod = 4;
|
r.avoidgamutMethod = 4;
|
||||||
}
|
}
|
||||||
//printf("n0=%f n1=%f n2=%f n3=%f\n", (double) newSpot->loc.at(0), (double) newSpot->loc.at(1), (double) newSpot->loc.at(2), (double) newSpot->loc.at(3));
|
//printf("n0=%f n1=%f n2=%f n3=%f\n", (double) newSpot->loc.at(0), (double) newSpot->loc.at(1), (double) newSpot->loc.at(2), (double) newSpot->loc.at(3));
|
||||||
|
|
||||||
@ -810,70 +810,70 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(r->spotMethod != 2) {
|
if(r.spotMethod != 2) {
|
||||||
r->locX = newSpot->loc.at(0);
|
r.locX = newSpot->loc.at(0);
|
||||||
r->locXL = newSpot->loc.at(1);
|
r.locXL = newSpot->loc.at(1);
|
||||||
r->locY = newSpot->loc.at(2);
|
r.locY = newSpot->loc.at(2);
|
||||||
r->locYT = newSpot->loc.at(3);
|
r.locYT = newSpot->loc.at(3);
|
||||||
} else {
|
} else {
|
||||||
r->locX = 3000.;
|
r.locX = 3000.;
|
||||||
r->locXL = 3000.;
|
r.locXL = 3000.;
|
||||||
r->locY = 3000.;
|
r.locY = 3000.;
|
||||||
r->locYT = 3000.;
|
r.locYT = 3000.;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->centerX = newSpot->centerX;
|
r.centerX = newSpot->centerX;
|
||||||
r->centerY = newSpot->centerY;
|
r.centerY = newSpot->centerY;
|
||||||
|
|
||||||
r->circrad = newSpot->circrad;
|
r.circrad = newSpot->circrad;
|
||||||
|
|
||||||
if (newSpot->qualityMethod == "enh") {
|
if (newSpot->qualityMethod == "enh") {
|
||||||
r->qualityMethod = 0;
|
r.qualityMethod = 0;
|
||||||
} else {
|
} else {
|
||||||
r->qualityMethod = 1;
|
r.qualityMethod = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
r->transit = newSpot->transit;
|
r.transit = newSpot->transit;
|
||||||
r->transitweak = newSpot->transitweak;
|
r.transitweak = newSpot->transitweak;
|
||||||
r->transitgrad = newSpot->transitgrad;
|
r.transitgrad = newSpot->transitgrad;
|
||||||
r->feather = newSpot->feather;
|
r.feather = newSpot->feather;
|
||||||
r->struc = newSpot->struc;
|
r.struc = newSpot->struc;
|
||||||
r->thresh = newSpot->thresh;
|
r.thresh = newSpot->thresh;
|
||||||
r->iter = newSpot->iter;
|
r.iter = newSpot->iter;
|
||||||
r->balan = newSpot->balan;
|
r.balan = newSpot->balan;
|
||||||
r->balanh = newSpot->balanh;
|
r.balanh = newSpot->balanh;
|
||||||
r->colorde = newSpot->colorde;
|
r.colorde = newSpot->colorde;
|
||||||
r->colorscope = newSpot->colorscope;
|
r.colorscope = newSpot->colorscope;
|
||||||
r->avoidrad = newSpot->avoidrad;
|
r.avoidrad = newSpot->avoidrad;
|
||||||
r->activ = newSpot->activ;
|
r.activ = newSpot->activ;
|
||||||
r->blwh = newSpot->blwh;
|
r.blwh = newSpot->blwh;
|
||||||
r->recurs = newSpot->recurs;
|
r.recurs = newSpot->recurs;
|
||||||
r->laplac = newSpot->laplac;
|
r.laplac = newSpot->laplac;
|
||||||
r->deltae = newSpot->deltae;
|
r.deltae = newSpot->deltae;
|
||||||
r->scopemask = newSpot->scopemask;
|
r.scopemask = newSpot->scopemask;
|
||||||
r->denoichmask = newSpot->denoichmask;
|
r.denoichmask = newSpot->denoichmask;
|
||||||
r->shortc = newSpot->shortc;
|
r.shortc = newSpot->shortc;
|
||||||
r->lumask = newSpot->lumask;
|
r.lumask = newSpot->lumask;
|
||||||
//r->savrest = newSpot->savrest;
|
//r.savrest = newSpot->savrest;
|
||||||
|
|
||||||
if (newSpot->complexMethod == "sim") {
|
if (newSpot->complexMethod == "sim") {
|
||||||
r->complexMethod = 0;
|
r.complexMethod = 0;
|
||||||
} else if (newSpot->complexMethod == "mod") {
|
} else if (newSpot->complexMethod == "mod") {
|
||||||
r->complexMethod = 1;
|
r.complexMethod = 1;
|
||||||
} else if (newSpot->complexMethod == "all") {
|
} else if (newSpot->complexMethod == "all") {
|
||||||
r->complexMethod = 2;
|
r.complexMethod = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newSpot->wavMethod == "D2") {
|
if (newSpot->wavMethod == "D2") {
|
||||||
r->wavMethod = 0;
|
r.wavMethod = 0;
|
||||||
} else if (newSpot->wavMethod == "D4") {
|
} else if (newSpot->wavMethod == "D4") {
|
||||||
r->wavMethod = 1;
|
r.wavMethod = 1;
|
||||||
} else if (newSpot->wavMethod == "D6") {
|
} else if (newSpot->wavMethod == "D6") {
|
||||||
r->wavMethod = 2;
|
r.wavMethod = 2;
|
||||||
} else if (newSpot->wavMethod == "D10") {
|
} else if (newSpot->wavMethod == "D10") {
|
||||||
r->wavMethod = 3;
|
r.wavMethod = 3;
|
||||||
} else if (newSpot->wavMethod == "D14") {
|
} else if (newSpot->wavMethod == "D14") {
|
||||||
r->wavMethod = 4;
|
r.wavMethod = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
expsettings->addControlSpot(r);
|
expsettings->addControlSpot(r);
|
||||||
@ -915,9 +915,10 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
|||||||
// Note: No need to manage pedited as batch mode is deactivated for Locallab
|
// Note: No need to manage pedited as batch mode is deactivated for Locallab
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case (ControlSpotPanel::SpotAllVisibilityChanged): // Event when updating visibility of all spots
|
case (ControlSpotPanel::SpotAllVisibilityChanged): { // Event when updating visibility of all spots
|
||||||
r = expsettings->getSpot(expsettings->getSelectedSpot());
|
const auto r = expsettings->getSpot(expsettings->getSelectedSpot());
|
||||||
|
|
||||||
// ProcParams update
|
// ProcParams update
|
||||||
for (size_t i = 0; i < pp->locallab.spots.size(); i++) {
|
for (size_t i = 0; i < pp->locallab.spots.size(); i++) {
|
||||||
@ -927,10 +928,11 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
|||||||
// Note: No need to manage pedited as batch mode is deactivated for Locallab
|
// Note: No need to manage pedited as batch mode is deactivated for Locallab
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default: // Spot or locallab GUI updated
|
default: // Spot or locallab GUI updated
|
||||||
if (pp->locallab.spots.size() > 0) {
|
if (pp->locallab.spots.size() > 0) {
|
||||||
r = expsettings->getSpot(expsettings->getSelectedSpot());
|
const auto r = expsettings->getSpot(expsettings->getSelectedSpot());
|
||||||
|
|
||||||
// ProcParams update
|
// ProcParams update
|
||||||
if (pp->locallab.selspot < (int)pp->locallab.spots.size()) {
|
if (pp->locallab.selspot < (int)pp->locallab.spots.size()) {
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
* along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
|
* along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include "cachemanager.h"
|
#include "cachemanager.h"
|
||||||
#include "filebrowserentry.h"
|
#include "filebrowserentry.h"
|
||||||
@ -81,10 +82,10 @@ public:
|
|||||||
int threadCount = 2;
|
int threadCount = 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
threadPool_ = new Glib::ThreadPool(threadCount, 0);
|
threadPool_.reset(new Glib::ThreadPool(threadCount, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
Glib::ThreadPool* threadPool_;
|
std::unique_ptr<Glib::ThreadPool> threadPool_;
|
||||||
MyMutex mutex_;
|
MyMutex mutex_;
|
||||||
JobSet jobs_;
|
JobSet jobs_;
|
||||||
gint nConcurrentThreads;
|
gint nConcurrentThreads;
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
#include <memory>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
#include <gtkmm.h>
|
#include <gtkmm.h>
|
||||||
@ -83,10 +84,10 @@ public:
|
|||||||
threadCount = omp_get_num_procs();
|
threadCount = omp_get_num_procs();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
threadPool_ = new Glib::ThreadPool(threadCount, 0);
|
threadPool_.reset(new Glib::ThreadPool(threadCount, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
Glib::ThreadPool* threadPool_;
|
std::unique_ptr<Glib::ThreadPool> threadPool_;
|
||||||
|
|
||||||
// Need to be a std::mutex because used in a std::condition_variable object...
|
// Need to be a std::mutex because used in a std::condition_variable object...
|
||||||
// This is the only exceptions along with GThreadMutex (guiutils.cc), MyMutex is used everywhere else
|
// This is the only exceptions along with GThreadMutex (guiutils.cc), MyMutex is used everywhere else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user