add output gamma to partialpast and suppress crash when no output file #issue1081
This commit is contained in:
parent
800e03fdf6
commit
22f9910edb
@ -527,6 +527,7 @@ PARTIALPASTE_HLRECOVERY;Highlight recovery
|
||||
PARTIALPASTE_HLRECOVERYTHRESHOLD;Highlight recovery threshold
|
||||
PARTIALPASTE_HSVEQUALIZER;HSV Equalizer
|
||||
PARTIALPASTE_ICMSETTINGS;ICM settings
|
||||
PARTIALPASTE_ICMGAMMA;Output gamma
|
||||
PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction
|
||||
PARTIALPASTE_IPTCINFO;IPTC info
|
||||
PARTIALPASTE_LABCURVE;Lab adjustments
|
||||
|
@ -330,7 +330,7 @@ Image16* ImProcFunctions::lab2rgb16b (LabImage* lab, int cx, int cy, int cw, int
|
||||
int t50;
|
||||
int select_temp =1;//5003K
|
||||
double eps=0.000000001;// not divide by zero
|
||||
//primaries
|
||||
//primaries for 7 working profiles ==> output profiles
|
||||
if(profi=="ProPhoto") {p1=0.7347; p2=0.2653; p3=0.1596; p4=0.8404; p5=0.0366; p6=0.0001;select_temp=1;}//Prophoto primaries
|
||||
else if (profi=="WideGamut") {p1=0.7350; p2=0.2650; p3=0.1150; p4=0.8260; p5=0.1570; p6=0.0180;select_temp=1;}//Widegamut primaries
|
||||
else if (profi=="Adobe RGB") {p1=0.6400; p2=0.3300; p3=0.2100; p4=0.7100; p5=0.1500; p6=0.0600;select_temp=2;}//Adobe primaries
|
||||
@ -376,7 +376,7 @@ Image16* ImProcFunctions::lab2rgb16b (LabImage* lab, int cx, int cy, int cw, int
|
||||
// 7 parameters for smoother curves
|
||||
cmsWhitePointFromTemp(&xyD, t50);
|
||||
GammaTRC[0] = GammaTRC[1] = GammaTRC[2] = cmsBuildParametricToneCurve(NULL, 5, Parameters);//5 = more smoother than 4
|
||||
cmsHPROFILE oprofdef = cmsCreateRGBProfileTHR(NULL, &xyD, &Primaries, GammaTRC);
|
||||
cmsHPROFILE oprofdef = cmsCreateRGBProfileTHR(NULL, &xyD, &Primaries, GammaTRC); //oprofdef become Outputprofile
|
||||
|
||||
cmsFreeToneCurve(GammaTRC[0]);
|
||||
|
||||
|
@ -489,6 +489,8 @@ class ProcParams {
|
||||
HRecParams hlrecovery; ///< Highlight recovery parameters
|
||||
ResizeParams resize; ///< Resize parameters
|
||||
ColorManagementParams icm; ///< profiles/color spaces used during the image processing
|
||||
ColorManagementParams gam; ///< profiles/color spaces used during the image processing
|
||||
|
||||
RAWParams raw; ///< RAW parameters before demosaicing
|
||||
DirPyrEqualizerParams dirpyrequalizer; ///< directional pyramid equalizer parameters
|
||||
HSVEqualizerParams hsvequalizer; ///< hsv equalizer parameters
|
||||
|
@ -33,6 +33,8 @@
|
||||
|
||||
|
||||
namespace rtengine {
|
||||
extern const Settings* settings;
|
||||
|
||||
IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* pl, bool tunnelMetaData) {
|
||||
|
||||
errorCode = 0;
|
||||
@ -217,14 +219,48 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
|
||||
if(params.icm.gamma != "default" || params.icm.freegamma)
|
||||
{ // if select gamma output between BT709, sRGB, linear, low, high, 2.2 , 1.8
|
||||
//or selected Free gamma
|
||||
Image16* readyImgP;
|
||||
Image16* readyImg = ipf.lab2rgb16b (labView, cx, cy, cw, ch, params.icm.output, params.icm.working, params.icm.gamma, params.icm.freegamma, params.icm.gampos, params.icm.slpos);
|
||||
|
||||
readyImgP=readyImg;
|
||||
delete labView;
|
||||
if (pl) pl->setProgress (0.70);
|
||||
|
||||
int drapeau=0;
|
||||
// get the resize parameters
|
||||
int refw, refh;
|
||||
double tmpScale;
|
||||
Glib::ustring chpro, outProfile;
|
||||
int present_space[7]={0,0,0,0,0,0,0};
|
||||
std::vector<std::string> opnames = iccStore->getOutputProfiles ();
|
||||
//test if files are in system
|
||||
for (int j=0; j<7;j++) {
|
||||
// one can modify "option" [Color Management] to adapt name of profile if there are different for windows, MacOS, Linux ??
|
||||
if(j==0) chpro=options.rtSettings.prophoto;
|
||||
else if(j==1) chpro=options.rtSettings.adobe;
|
||||
else if(j==2) chpro=options.rtSettings.widegamut;
|
||||
else if(j==3) chpro=options.rtSettings.beta;
|
||||
else if(j==4) chpro=options.rtSettings.best;
|
||||
else if(j==5) chpro=options.rtSettings.bruce;
|
||||
else if(j==6) chpro=options.rtSettings.srgb;
|
||||
for (int i=0; i<opnames.size(); i++)
|
||||
if(chpro.compare(opnames[i]) ==0) present_space[j]=1;
|
||||
if (present_space[j]==0) {
|
||||
if (pl) pl->setProgressStr ("Missing file..");pl->setProgress (0.0);// display file not present: not very good display information...!!
|
||||
if (settings->verbose) printf("Missing file: %s \n", chpro.c_str());} //c_str()
|
||||
}
|
||||
|
||||
// Check that output profiles exist, otherwise use LCMS2
|
||||
if (params.icm.working=="ProPhoto" && present_space[0]==1) outProfile=options.rtSettings.prophoto;//in option we can change the name of file - if different...
|
||||
else if (params.icm.working=="Adobe RGB" && present_space[1]==1) outProfile=options.rtSettings.adobe;
|
||||
else if (params.icm.working=="WideGamut" && present_space[2]==1) outProfile=options.rtSettings.widegamut;
|
||||
else if (params.icm.working=="Beta RGB" && present_space[3]==1) outProfile=options.rtSettings.beta;
|
||||
else if (params.icm.working=="BestRGB" && present_space[4]==1) outProfile=options.rtSettings.best;
|
||||
else if (params.icm.working=="BruceRGB" && present_space[5]==1) outProfile=options.rtSettings.bruce;
|
||||
else if (params.icm.working== "sRGB" && present_space[6]==1) outProfile=options.rtSettings.srgb;
|
||||
//OutProfile become Profile's system
|
||||
else {if (settings->verbose) printf("No file:%s in system - use LCMS2 substitution\n",params.icm.working.c_str() ); drapeau=1; }
|
||||
|
||||
if (settings->verbose && drapeau==0) printf("Output profile: %s \n", outProfile.c_str()); //c_str()
|
||||
|
||||
|
||||
if (params.resize.enabled) {
|
||||
|
||||
@ -293,34 +329,8 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
|
||||
|
||||
|
||||
ProfileContent pc;
|
||||
Glib::ustring chpro, outProfile;
|
||||
int present_space[7]={0,0,0,0,0,0,0};
|
||||
std::vector<std::string> opnames = iccStore->getOutputProfiles ();
|
||||
//test if files are in system
|
||||
for (int j=0; j<7;j++) {
|
||||
// one can modify "option" [Color Management] to adapt name of profile if there are different for windows, MacOS, Linux ??
|
||||
if(j==0) chpro=options.rtSettings.prophoto;
|
||||
else if(j==1) chpro=options.rtSettings.adobe;
|
||||
else if(j==2) chpro=options.rtSettings.widegamut;
|
||||
else if(j==3) chpro=options.rtSettings.beta;
|
||||
else if(j==4) chpro=options.rtSettings.best;
|
||||
else if(j==5) chpro=options.rtSettings.bruce;
|
||||
else if(j==6) chpro=options.rtSettings.srgb;
|
||||
for (int i=0; i<opnames.size(); i++)
|
||||
if(chpro.compare(opnames[i]) ==0) present_space[j]=1;
|
||||
if (present_space[j]==0) { if (pl) pl->setProgressStr ("Missing file..");pl->setProgress (0.0);}// display file not present: not very good display information...!!
|
||||
}
|
||||
|
||||
// Check that output profiles exist, otherwise revert to sRGB
|
||||
if (params.icm.output=="ProPhoto" && present_space[0]==1) outProfile=options.rtSettings.prophoto;
|
||||
else if (params.icm.output=="Adobe RGB" && present_space[1]==1) outProfile=options.rtSettings.adobe;
|
||||
else if (params.icm.output=="WideGamut" && present_space[2]==1) outProfile=options.rtSettings.widegamut;
|
||||
else if (params.icm.output=="Beta RGB" && present_space[3]==1) outProfile=options.rtSettings.beta;
|
||||
else if (params.icm.output=="BestRGB" && present_space[4]==1) outProfile=options.rtSettings.best;
|
||||
else if (params.icm.output=="BruceRGB" && present_space[5]==1) outProfile=options.rtSettings.bruce;
|
||||
else outProfile=options.rtSettings.srgb; //if not found or choice=srgb
|
||||
|
||||
pc = iccStore->getContent (outProfile);
|
||||
if (drapeau==0) pc = iccStore->getContent (outProfile);// use profile in system (Prophoto.icm, sRGB.icm, etc.) if present, otherwise use LCMS2 profile generate by lab2rgb16b
|
||||
|
||||
readyImg->setOutputProfile (pc.data, pc.length);
|
||||
|
||||
@ -337,7 +347,6 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
|
||||
}
|
||||
else
|
||||
{//if default mode : profil = selection by choice in list (Prophoto.icm, sRGB.icm, etc., etc.) , gamma = gamma of profile or not selected Free gamma
|
||||
|
||||
Image16* readyImg = ipf.lab2rgb16 (labView, cx, cy, cw, ch, params.icm.output);
|
||||
delete labView;
|
||||
if (pl) pl->setProgress (0.70);
|
||||
|
@ -50,8 +50,10 @@
|
||||
#define ADDSET_VIBRANCE_PASTELS 40
|
||||
#define ADDSET_VIBRANCE_SATURATED 41
|
||||
#define ADDSET_VIBRANCE_PSTHRESHOLD 42
|
||||
#define ADDSET_FREE_OUPUT_GAMMA 43
|
||||
#define ADDSET_FREE_OUTPUT_SLOPE 44
|
||||
|
||||
// When adding items, make sure to update ADDSET_PARAM_NUM
|
||||
#define ADDSET_PARAM_NUM 43 // THIS IS USED AS A DELIMITER!!
|
||||
#define ADDSET_PARAM_NUM 45 // THIS IS USED AS A DELIMITER!!
|
||||
|
||||
#endif
|
||||
|
@ -131,6 +131,7 @@ void BatchToolPanelCoordinator::initSession () {
|
||||
sharpening->setAdjusterBehavior (false);
|
||||
sharpenEdge->setAdjusterBehavior (false, false);
|
||||
sharpenMicro->setAdjusterBehavior (false, false);
|
||||
icm->setAdjusterBehavior (false, false);
|
||||
|
||||
chmixer->setAdjusterBehavior (false);
|
||||
shadowshighlights->setAdjusterBehavior (false, false, false);
|
||||
@ -154,6 +155,7 @@ void BatchToolPanelCoordinator::initSession () {
|
||||
sharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_AMOUNT]);
|
||||
sharpenEdge->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENEDGE_AMOUNT],options.baBehav[ADDSET_SHARPENEDGE_PASS]);
|
||||
sharpenMicro->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENMICRO_AMOUNT],options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]);
|
||||
icm->setAdjusterBehavior (options.baBehav[ADDSET_FREE_OUPUT_GAMMA],options.baBehav[ADDSET_FREE_OUTPUT_SLOPE]);
|
||||
|
||||
chmixer->setAdjusterBehavior (options.baBehav[ADDSET_CHMIXER]);
|
||||
shadowshighlights->setAdjusterBehavior (options.baBehav[ADDSET_SH_HIGHLIGHTS], options.baBehav[ADDSET_SH_SHADOWS], options.baBehav[ADDSET_SH_LOCALCONTRAST]);
|
||||
@ -194,6 +196,9 @@ void BatchToolPanelCoordinator::initSession () {
|
||||
if (options.baBehav[ADDSET_VIBRANCE_PASTELS]) pparams.vibrance.pastels = 0;
|
||||
if (options.baBehav[ADDSET_VIBRANCE_SATURATED]) pparams.vibrance.saturated = 0;
|
||||
|
||||
if (options.baBehav[ADDSET_FREE_OUPUT_GAMMA]) pparams.icm.gampos = 0;
|
||||
if (options.baBehav[ADDSET_FREE_OUTPUT_SLOPE]) pparams.icm.slpos = 0;
|
||||
|
||||
if (options.baBehav[ADDSET_CBOOST_AMOUNT]) pparams.colorBoost.amount = 0;
|
||||
|
||||
if (options.baBehav[ADDSET_CS_BLUEYELLOW]) pparams.colorShift.a = 0;
|
||||
|
@ -127,16 +127,16 @@ ICMPanel::ICMPanel () : Gtk::VBox(), FoldableToolPanel(this), iunchanged(NULL),
|
||||
freegamma->set_active (false);
|
||||
pack_start( *freegamma);
|
||||
|
||||
g_ampos = Gtk::manage(new Adjuster (M("TP_GAMMA_CURV"),1,3.5,0.01,2.22));
|
||||
g_ampos->setAdjusterListener (this);
|
||||
if (g_ampos->delay < 1000) g_ampos->delay = 1000;
|
||||
g_ampos->show();
|
||||
s_lpos = Gtk::manage(new Adjuster (M("TP_GAMMA_SLOP"),0,15,0.01,4.5));
|
||||
s_lpos->setAdjusterListener (this);
|
||||
if (s_lpos->delay < 1000) s_lpos->delay = 1000;
|
||||
s_lpos->show();
|
||||
pack_start( *g_ampos, Gtk::PACK_SHRINK, 4);//gamma
|
||||
pack_start( *s_lpos, Gtk::PACK_SHRINK, 4);//slope
|
||||
gampos = Gtk::manage(new Adjuster (M("TP_GAMMA_CURV"),1,3.5,0.01,2.22));
|
||||
gampos->setAdjusterListener (this);
|
||||
if (gampos->delay < 1000) gampos->delay = 1000;
|
||||
gampos->show();
|
||||
slpos = Gtk::manage(new Adjuster (M("TP_GAMMA_SLOP"),0,15,0.01,4.5));
|
||||
slpos->setAdjusterListener (this);
|
||||
if (slpos->delay < 1000) slpos->delay = 1000;
|
||||
slpos->show();
|
||||
pack_start( *gampos, Gtk::PACK_SHRINK, 4);//gamma
|
||||
pack_start( *slpos, Gtk::PACK_SHRINK, 4);//slope
|
||||
|
||||
gamcsconn = freegamma->signal_toggled().connect ( sigc::mem_fun(*this, &ICMPanel::GamChanged));
|
||||
|
||||
@ -243,8 +243,8 @@ void ICMPanel::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
||||
wgamma->set_active_text(M("GENERAL_UNCHANGED"));
|
||||
wgamma->set_active_text(M("GENERAL_UNCHANGED"));
|
||||
}
|
||||
g_ampos->setEditedState (pedited->icm.gampos ? Edited : UnEdited);
|
||||
s_lpos->setEditedState (pedited->icm.slpos ? Edited : UnEdited);
|
||||
gampos->setEditedState (pedited->icm.gampos ? Edited : UnEdited);
|
||||
slpos->setEditedState (pedited->icm.slpos ? Edited : UnEdited);
|
||||
|
||||
}
|
||||
|
||||
@ -253,8 +253,8 @@ void ICMPanel::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
||||
gamcsconn.block (false);
|
||||
|
||||
lastgamfree = pp->icm.freegamma;
|
||||
g_ampos->setValue (pp->icm.gampos);
|
||||
s_lpos->setValue (pp->icm.slpos);
|
||||
gampos->setValue (pp->icm.gampos);
|
||||
slpos->setValue (pp->icm.slpos);
|
||||
|
||||
|
||||
ipc.block (false);
|
||||
@ -290,8 +290,8 @@ void ICMPanel::write (ProcParams* pp, ParamsEdited* pedited) {
|
||||
pp->icm.output = onames->get_active_text();
|
||||
pp->icm.freegamma = freegamma->get_active();
|
||||
pp->icm.blendCMSMatrix = ckbBlendCMSMatrix->get_active ();
|
||||
pp->icm.gampos =(double) g_ampos->getValue();
|
||||
pp->icm.slpos =(double) s_lpos->getValue();
|
||||
pp->icm.gampos =(double) gampos->getValue();
|
||||
pp->icm.slpos =(double) slpos->getValue();
|
||||
|
||||
if (pedited) {
|
||||
pedited->icm.input = !iunchanged->get_active ();
|
||||
@ -300,35 +300,42 @@ void ICMPanel::write (ProcParams* pp, ParamsEdited* pedited) {
|
||||
pedited->icm.blendCMSMatrix = !ckbBlendCMSMatrix->get_inconsistent ();
|
||||
pedited->icm.gamma = wgamma->get_active_text()!=M("GENERAL_UNCHANGED");
|
||||
pedited->icm.freegamma =!freegamma->get_inconsistent();
|
||||
pedited->icm.gampos = g_ampos->getEditedState ();
|
||||
pedited->icm.slpos = s_lpos->getEditedState ();
|
||||
pedited->icm.gampos = gampos->getEditedState ();
|
||||
pedited->icm.slpos = slpos->getEditedState ();
|
||||
|
||||
}
|
||||
}
|
||||
void ICMPanel::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) {
|
||||
g_ampos->setDefault (defParams->icm.gampos);
|
||||
s_lpos->setDefault (defParams->icm.slpos);
|
||||
gampos->setDefault (defParams->icm.gampos);
|
||||
slpos->setDefault (defParams->icm.slpos);
|
||||
|
||||
if (pedited) {
|
||||
g_ampos->setDefaultEditedState (pedited->icm.gampos ? Edited : UnEdited);
|
||||
s_lpos->setDefaultEditedState (pedited->icm.slpos ? Edited : UnEdited);
|
||||
gampos->setDefaultEditedState (pedited->icm.gampos ? Edited : UnEdited);
|
||||
slpos->setDefaultEditedState (pedited->icm.slpos ? Edited : UnEdited);
|
||||
|
||||
}
|
||||
else {
|
||||
g_ampos->setDefaultEditedState (Irrelevant);
|
||||
s_lpos->setDefaultEditedState (Irrelevant);
|
||||
gampos->setDefaultEditedState (Irrelevant);
|
||||
slpos->setDefaultEditedState (Irrelevant);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void ICMPanel::setAdjusterBehavior (bool gammaadd, bool slopeadd) {
|
||||
gampos->setAddMode (gammaadd);
|
||||
slpos->setAddMode (slopeadd);
|
||||
}
|
||||
|
||||
|
||||
void ICMPanel::adjusterChanged (Adjuster* a, double newval) {
|
||||
|
||||
if (listener && freegamma->get_active()) {
|
||||
|
||||
Glib::ustring costr = Glib::ustring::format ((int)a->getValue());
|
||||
|
||||
if (a==g_ampos)
|
||||
if (a==gampos)
|
||||
listener->panelChanged (EvGAMPOS, costr);
|
||||
else if (a==s_lpos)
|
||||
else if (a==slpos)
|
||||
listener->panelChanged (EvSLPOS, costr);
|
||||
|
||||
}
|
||||
@ -468,8 +475,8 @@ void ICMPanel::setBatchMode (bool batchMode) {
|
||||
onames->append_text (M("GENERAL_UNCHANGED"));
|
||||
wnames->append_text (M("GENERAL_UNCHANGED"));
|
||||
wgamma->append_text (M("GENERAL_UNCHANGED"));
|
||||
g_ampos->showEditedCB ();
|
||||
s_lpos->showEditedCB ();
|
||||
gampos->showEditedCB ();
|
||||
slpos->showEditedCB ();
|
||||
|
||||
|
||||
}
|
||||
|
@ -35,8 +35,8 @@ class ICMPanelListener {
|
||||
class ICMPanel : public Gtk::VBox, public AdjusterListener, public FoldableToolPanel {
|
||||
|
||||
protected:
|
||||
Adjuster* g_ampos;
|
||||
Adjuster* s_lpos;
|
||||
Adjuster* gampos;
|
||||
Adjuster* slpos;
|
||||
bool lastgamfree;
|
||||
sigc::connection gamcsconn;
|
||||
//bool freegamma;
|
||||
@ -74,6 +74,7 @@ class ICMPanel : public Gtk::VBox, public AdjusterListener, public FoldableToolP
|
||||
void setBatchMode (bool batchMode);
|
||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL);
|
||||
void adjusterChanged (Adjuster* a, double newval);
|
||||
void setAdjusterBehavior (bool gammaadd, bool slopeadd);
|
||||
|
||||
void wpChanged ();
|
||||
void opChanged ();
|
||||
|
@ -212,7 +212,9 @@ void Options::setDefaults () {
|
||||
0, // ADDSET_SHARPENMICRO_UNIFORMITY
|
||||
1, // ADDSET_VIBRANCE_PASTELS
|
||||
1, // ADDSET_VIBRANCE_SATURATED
|
||||
0 // ADDSET_VIBRANCE_SATURATED
|
||||
0, // ADDSET_VIBRANCE_PSTHRESHOLD
|
||||
0, // ADDSET_FREE_OUPUT_GAMMA
|
||||
0, // ADDSET_FREE_OUTPUT_SLOPE
|
||||
|
||||
};
|
||||
baBehav = std::vector<int> (babehav, babehav+ADDSET_PARAM_NUM);
|
||||
|
@ -431,6 +431,11 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
||||
if (vibrance.protectskins) toEdit.vibrance.protectskins = mods.vibrance.protectskins;
|
||||
if (vibrance.avoidcolorshift) toEdit.vibrance.avoidcolorshift = mods.vibrance.avoidcolorshift;
|
||||
if (vibrance.pastsattog) toEdit.vibrance.pastsattog = mods.vibrance.pastsattog;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (colorBoost.amount) toEdit.colorBoost.amount = dontforceSet && options.baBehav[ADDSET_CBOOST_AMOUNT] ? toEdit.colorBoost.amount + mods.colorBoost.amount : mods.colorBoost.amount;
|
||||
if (colorBoost.avoidclip) toEdit.colorBoost.avoidclip = mods.colorBoost.avoidclip;
|
||||
if (colorBoost.enable_saturationlimiter)toEdit.colorBoost.enable_saturationlimiter = mods.colorBoost.enable_saturationlimiter;
|
||||
@ -509,8 +514,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
||||
if (icm.blendCMSMatrix) toEdit.icm.blendCMSMatrix = mods.icm.blendCMSMatrix;
|
||||
if (icm.working) toEdit.icm.working = mods.icm.working;
|
||||
if (icm.output) toEdit.icm.output = mods.icm.output;
|
||||
if (icm.gampos) toEdit.icm.gampos = mods.icm.gampos;
|
||||
if (icm.slpos) toEdit.icm.slpos = mods.icm.slpos;
|
||||
//if (icm.gampos) toEdit.icm.gampos = mods.icm.gampos;
|
||||
//if (icm.slpos) toEdit.icm.slpos = mods.icm.slpos;
|
||||
if (icm.gampos) toEdit.icm.gampos = dontforceSet && options.baBehav[ADDSET_FREE_OUPUT_GAMMA] ? toEdit.icm.gampos + mods.icm.gampos : mods.icm.gampos;
|
||||
if (icm.slpos) toEdit.icm.slpos = dontforceSet && options.baBehav[ADDSET_FREE_OUTPUT_SLOPE] ? toEdit.icm.slpos + mods.icm.slpos : mods.icm.slpos;
|
||||
if (icm.gamma) toEdit.icm.gamma = mods.icm.gamma;
|
||||
if (icm.freegamma) toEdit.icm.freegamma = mods.icm.freegamma;
|
||||
if (raw.ccSteps) toEdit.raw.ccSteps = mods.raw.ccSteps;
|
||||
|
@ -80,6 +80,7 @@ PartialPasteDlg::PartialPasteDlg () {
|
||||
exifch = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXIFCHANGES")));
|
||||
iptc = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IPTCINFO")));
|
||||
icm = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ICMSETTINGS")));
|
||||
gam = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_ICMGAMMA")));
|
||||
|
||||
// options in raw:
|
||||
raw_expos = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWEXPOS_LINEAR")));
|
||||
@ -158,6 +159,7 @@ PartialPasteDlg::PartialPasteDlg () {
|
||||
vboxes[5]->pack_start (*exifch, Gtk::PACK_SHRINK, 2);
|
||||
vboxes[5]->pack_start (*iptc, Gtk::PACK_SHRINK, 2);
|
||||
vboxes[5]->pack_start (*icm, Gtk::PACK_SHRINK, 2);
|
||||
vboxes[5]->pack_start (*gam, Gtk::PACK_SHRINK, 2);
|
||||
|
||||
vboxes[6]->pack_start (*raw, Gtk::PACK_SHRINK, 2);
|
||||
vboxes[6]->pack_start (*hseps[6], Gtk::PACK_SHRINK, 2);
|
||||
@ -262,6 +264,7 @@ PartialPasteDlg::PartialPasteDlg () {
|
||||
exifchConn = exifch->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
|
||||
iptcConn = iptc->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
|
||||
icmConn = icm->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
|
||||
gamcsconn = gam->signal_toggled().connect (sigc::bind (sigc::mem_fun(*metaicm, &Gtk::CheckButton::set_inconsistent), true));
|
||||
|
||||
raw_dmethodConn = raw_dmethod->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
|
||||
raw_ccStepsConn = raw_ccSteps->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
|
||||
@ -459,16 +462,19 @@ void PartialPasteDlg::colorToggled () {
|
||||
vibranceConn.block (true);
|
||||
chmixerConn.block (true);
|
||||
hsveqConn.block (true);
|
||||
|
||||
gamcsconn.block (true);
|
||||
color->set_inconsistent (false);
|
||||
|
||||
vibrance->set_active (color->get_active ());
|
||||
chmixer->set_active (color->get_active ());
|
||||
hsveq->set_active (color->get_active ());
|
||||
icm->set_active (color->get_active ());
|
||||
|
||||
vibranceConn.block (false);
|
||||
chmixerConn.block (false);
|
||||
hsveqConn.block (false);
|
||||
gamcsconn.block (false);
|
||||
|
||||
}
|
||||
|
||||
void PartialPasteDlg::lensToggled () {
|
||||
@ -519,16 +525,19 @@ void PartialPasteDlg::metaicmToggled () {
|
||||
exifchConn.block (true);
|
||||
iptcConn.block (true);
|
||||
icmConn.block (true);
|
||||
|
||||
gamcsconn.block (true);
|
||||
metaicm->set_inconsistent (false);
|
||||
|
||||
exifch->set_active (metaicm->get_active ());
|
||||
iptc->set_active (metaicm->get_active ());
|
||||
icm->set_active (metaicm->get_active ());
|
||||
gam->set_active (metaicm->get_active ());
|
||||
|
||||
exifchConn.block (false);
|
||||
iptcConn.block (false);
|
||||
icmConn.block (false);
|
||||
gamcsconn.block (false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -551,6 +560,8 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r
|
||||
if (vibrance->get_active ()) dst->vibrance = src->vibrance;
|
||||
if (chmixer->get_active ()) dst->chmixer = src->chmixer;
|
||||
if (hsveq->get_active ()) dst->hsvequalizer = src->hsvequalizer;
|
||||
if (icm->get_active ()) dst->icm = src->icm;
|
||||
|
||||
if (distortion->get_active ()) dst->distortion = src->distortion;
|
||||
if (cacorr->get_active ()) dst->cacorrection = src->cacorrection;
|
||||
if (vignetting->get_active ()) dst->vignetting = src->vignetting;
|
||||
@ -565,6 +576,7 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r
|
||||
if (exifch->get_active ()) dst->exif = src->exif;
|
||||
if (iptc->get_active ()) dst->iptc = src->iptc;
|
||||
if (icm->get_active ()) dst->icm = src->icm;
|
||||
if (gam->get_active ()) dst->gam = src->gam;
|
||||
|
||||
if (raw_dmethod->get_active ()) dst->raw.dmethod =src->raw.dmethod;
|
||||
if (raw_ccSteps->get_active ()) dst->raw.ccSteps =src->raw.ccSteps;
|
||||
|
@ -58,6 +58,7 @@ class PartialPasteDlg : public Gtk::Dialog {
|
||||
Gtk::CheckButton* vibrance;
|
||||
Gtk::CheckButton* chmixer;
|
||||
Gtk::CheckButton* hsveq;
|
||||
// Gtk::CheckButton* icm;
|
||||
|
||||
// options in lens:
|
||||
Gtk::CheckButton* distortion;
|
||||
@ -76,6 +77,7 @@ class PartialPasteDlg : public Gtk::Dialog {
|
||||
Gtk::CheckButton* exifch;
|
||||
Gtk::CheckButton* iptc;
|
||||
Gtk::CheckButton* icm;
|
||||
Gtk::CheckButton* gam;
|
||||
|
||||
// options in raw:
|
||||
Gtk::CheckButton* raw_expos;
|
||||
@ -107,7 +109,7 @@ class PartialPasteDlg : public Gtk::Dialog {
|
||||
sigc::connection vibranceConn, chmixerConn, hsveqConn;
|
||||
sigc::connection distortionConn, cacorrConn, vignettingConn;
|
||||
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, perspectiveConn, commonTransConn;
|
||||
sigc::connection exifchConn, iptcConn, icmConn;
|
||||
sigc::connection exifchConn, iptcConn, icmConn, gamcsconn;
|
||||
sigc::connection df_fileConn, df_AutoSelectConn, ff_fileConn, ff_AutoSelectConn, ff_BlurRadiusConn, ff_BlurTypeConn;
|
||||
sigc::connection raw_caredConn, raw_cablueConn, raw_ca_autocorrectConn, raw_hotdeadpix_filtConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_dmethodConn, raw_dcb_iterationsConn, raw_all_enhanceConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn;
|
||||
|
||||
|
@ -195,6 +195,12 @@ Gtk::Widget* Preferences::getBatchProcPanel () {
|
||||
appendBehavList (mi, M("TP_VIBRANCE_SATURATED"), ADDSET_VIBRANCE_SATURATED, false);
|
||||
appendBehavList (mi, M("TP_VIBRANCE_PSTHRESHOLD"), ADDSET_VIBRANCE_PSTHRESHOLD, false);
|
||||
|
||||
mi = behModel->append ();
|
||||
mi->set_value (behavColumns.label, M("TP_GAMMA_OUTPUT"));
|
||||
appendBehavList (mi, M("TP_GAMMA_CURV"), ADDSET_FREE_OUPUT_GAMMA, false);
|
||||
appendBehavList (mi, M("TP_GAMMA_SLOP"), ADDSET_FREE_OUTPUT_SLOPE, false);
|
||||
|
||||
|
||||
mi = behModel->append ();
|
||||
mi->set_value (behavColumns.label, M("TP_CHMIXER_LABEL"));
|
||||
appendBehavList (mi, M("TP_CHMIXER_RED")+", "+M("TP_CHMIXER_GREEN")+", "+M("TP_CHMIXER_BLUE"), ADDSET_CHMIXER, false);
|
||||
|
Loading…
x
Reference in New Issue
Block a user