diff --git a/rtdata/languages/default b/rtdata/languages/default index f28000f0a..daaaffba8 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -759,114 +759,87 @@ HISTORY_MSG_509;L*a*b Spot quality method HISTORY_MSG_510;L*a*b Spot transit HISTORY_MSG_511;L*a*b Spot thresh HISTORY_MSG_512;L*a*b Spot iter +HISTORY_MSG_513;L*a*b Spot scope +HISTORY_MSG_514;L*a*b Spot structure +HISTORY_MSG_515;Local L*a*b* +HISTORY_MSG_516;Local - Color and light +HISTORY_MSG_517;Local - Enable super +HISTORY_MSG_518;Local - Lightness +HISTORY_MSG_519;Local - Contrast +HISTORY_MSG_520;Local - Chrominance +HISTORY_MSG_521;Local - Scope +HISTORY_MSG_522;Local - curve method +HISTORY_MSG_523;Local - LL Curve +HISTORY_MSG_524;Local - CC curve +HISTORY_MSG_525;Local - LH Curve +HISTORY_MSG_526;Local - H curve +HISTORY_MSG_527;Local - Color Inverse +HISTORY_MSG_528;Local - Exposure +HISTORY_MSG_529;Local - Exp Compensation +HISTORY_MSG_530;Local - Exp Hlcompr +HISTORY_MSG_531;Local - Exp hlcomprthresh +HISTORY_MSG_532;Local - Exp black +HISTORY_MSG_533;Local - Exp Shcompr +HISTORY_MSG_534;Local - Warm Cool +HISTORY_MSG_535;Local - Exp Scope +HISTORY_MSG_536;Local - Exp Contrast curve +HISTORY_MSG_537;Local - Vibrance +HISTORY_MSG_538;Local - Vib Saturated +HISTORY_MSG_539;Local - Vib Pastel +HISTORY_MSG_540;Local - Vib Threshold +HISTORY_MSG_541;Local - Vib Protect skin tones +HISTORY_MSG_542;Local - Vib avoid colorshift +HISTORY_MSG_543;Local - Vib link +HISTORY_MSG_544;Local - Vib Scope +HISTORY_MSG_545;Local - Vib H curve +HISTORY_MSG_546;Local - Blur and noise +HISTORY_MSG_547;Local - Radius +HISTORY_MSG_548;Local - Noise +HISTORY_MSG_549;Local - Blur scope +HISTORY_MSG_550;Local - Blur method +HISTORY_MSG_551;Local - Blur Luminance only +HISTORY_MSG_552;Local - Tone mapping +HISTORY_MSG_553;Local - TM strength +HISTORY_MSG_554;Local - TM gamma +HISTORY_MSG_555;Local - TM edge stopping +HISTORY_MSG_556;Local - TM scale +HISTORY_MSG_557;Local - TM Reweighting +HISTORY_MSG_558;Local - TM scope +HISTORY_MSG_559;Local - Retinex +HISTORY_MSG_560;Local - Retinex method +HISTORY_MSG_561;Local - Retinex strength +HISTORY_MSG_562;Local - Retinex chroma +HISTORY_MSG_563;Local - Retinex radius +HISTORY_MSG_564;Local - Retinex contrast +HISTORY_MSG_565;Local - Hue scope +HISTORY_MSG_566;Local - Retinex Gain curve +HISTORY_MSG_567;Local - Retinex Inverse +HISTORY_MSG_568;Local - Sharpening +HISTORY_MSG_569;Local - Sh Radius +HISTORY_MSG_570;Local - Sh Amount +HISTORY_MSG_571;Local - Sh Damping +HISTORY_MSG_572;Local - Sh Iterations +HISTORY_MSG_573;Local - Sh Scope +HISTORY_MSG_574;Local - Sh Inverse +HISTORY_MSG_575;Local - CBDL +HISTORY_MSG_576;Local - cbdl mult +HISTORY_MSG_577;Local - cbdl chroma +HISTORY_MSG_578;Local - cbdl threshold +HISTORY_MSG_579;Local - cbdl scope +HISTORY_MSG_580;Local - Denoise +HISTORY_MSG_581;Local - deNoise lum f +HISTORY_MSG_582;Local - deNoise lum c +HISTORY_MSG_583;Local - deNoise lum detail +HISTORY_MSG_584;Local - deNoise Equalizer white-black +HISTORY_MSG_585;Local - deNoise chro f +HISTORY_MSG_586;Local - deNoise chro c +HISTORY_MSG_587;Local - deNoise chro detail +HISTORY_MSG_588;Local - deNoise Equalizer blue-red +HISTORY_MSG_589;Local - deNoise bilateral +HISTORY_MSG_590;Local - deNoise Scope +HISTORY_MSG_591;Local - Avoid color shift HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping -HISTORY_MSG_LOCLOCX;Local - Right -HISTORY_MSG_LOCCENTER;Local - Center -HISTORY_MSG_LOCDEGRE;Local - Deg -HISTORY_MSG_LOCLIGHT;Local - Lightness -HISTORY_MSG_LOCCONTRA;Local - Contrast -HISTORY_MSG_LOCCHROMA;Local - Chrominance -HISTORY_MSG_LOCTRANSIT;Local - Transition -HISTORY_MSG_LOCAVOID;Local - Avoid color shift -HISTORY_MSG_LOCLOCYT;Local - Top -HISTORY_MSG_LOCXL;Local - Left -HISTORY_MSG_LOCSMET;Local - Method -HISTORY_MSG_LOCINVERS;Local - Color Inverse -HISTORY_MSG_LOCRADIUS;Local - Radius -HISTORY_MSG_LOCINVRAD;Local - Blur Inverse -HISTORY_MSG_LOCSTRENGTH;Local - Noise -HISTORY_MSG_LOCSENSI;Local - Scope -HISTORY_MSG_LOCRETIMETH;Local - Retinex method -HISTORY_MSG_LOCRETISTR;Local - Retinex strength -HISTORY_MSG_LOCRETINEIGH;Local - Retinex radius -HISTORY_MSG_LOCRETIVART;Local - Retinex contrast -HISTORY_MSG_LOCRETIGAINCURV;Local - Retinex Gain curve -HISTORY_MSG_LOCCHRRT;Local - Retinex chroma -HISTORY_MSG_LOCINVRET;Local - Retinex Inverse -HISTORY_MSG_LOCSENSIH;Local - Hue scope -HISTORY_MSG_LOCNBSPOT;Local - Spot -HISTORY_MSG_LOCACTIVLUM;Local - Blur Luminance only -HISTORY_MSG_LOCANBSPOT;Local - Update GUI and Mip -1 -HISTORY_MSG_LOCSHARADIUS;Local - Sh Radius -HISTORY_MSG_LOCSHAAMOUNT;Local - Sh Amount -HISTORY_MSG_LOCSHADAMPING;Local - Sh Damping -HISTORY_MSG_LOCSHAITER;Local - Sh Iterations -HISTORY_MSG_LOCSENSIS;Local - Sh Scope -HISTORY_MSG_LOCINVSHA;Local - Sh Inverse -HISTORY_MSG_LOCCIRCRAD;Local - Spot size -HISTORY_MSG_LOCTHRES;Local - artifacts theshold -HISTORY_MSG_LOCPROXI;Local - artifacts iterations -HISTORY_MSG_LOCQUALMETH;Local - Quality -HISTORY_MSG_LOCNOISLUMF;Local - deNoise lum f -HISTORY_MSG_LOCNOISLUMC;Local - deNoise lum c -HISTORY_MSG_LOCNOISCHROF;Local - deNoise chro f -HISTORY_MSG_LOCNOISCHROC;Local - deNoise chro c -HISTORY_MSG_LOCCBDLTHRESHO;Local - cbdl threshold -HISTORY_MSG_LOCCBDLEQUALIZ;Local - cbdl mult -HISTORY_MSG_LOCSENSICB;Local - cbdl scope -HISTORY_MSG_LOCSENSIBN;Local - Blur scope -HISTORY_MSG_LOCSTREN;Local - TM strength -HISTORY_MSG_LOCGAMM;Local - TM gamma -HISTORY_MSG_LOCESTOP;Local - TM edge stopping -HISTORY_MSG_LOCSCALTM;Local - TM scale -HISTORY_MSG_LOCREWEI;Local - TM Reweighting -HISTORY_MSG_LOCSENSITM;Local - TM scope -HISTORY_MSG_LOCGAINCURRAB;Local - Update GUI and Mip -2 -HISTORY_MSG_LOCRETRAB;Local - Update GUI and Mip -3 -HISTORY_MSG_LOCLSHAPE;Local - LL Curve -HISTORY_MSG_LOCENACOLOR;Local - Color and light -HISTORY_MSG_LOCENABLUR;Local - Blur and noise -HISTORY_MSG_LOCENATM;Local - Tone mapping -HISTORY_MSG_LOCENARETI;Local - Retinex -HISTORY_MSG_LOCENASHARP;Local - Sharpening -HISTORY_MSG_LOCENACBDL;Local - CBDL -HISTORY_MSG_LOCENADENOI;Local - Denoise -HISTORY_MSG_LOCLHSHAPE;Local - LH Curve -HISTORY_MSG_LOCCURVACTIV;Local - Enable super -HISTORY_MSG_LOCCCSHAPE;Local - CC curve -HISTORY_MSG_LOCQUALCURVMETH;Local - curve method -HISTORY_MSG_LOCHUEREF;Local - hueref -HISTORY_MSG_LOCCHROMAREF;Local - chromaref -HISTORY_MSG_LOCLUMAREF;Local - lumaref -HISTORY_MSG_LOCHHSHAPE;Local - H curve -HISTORY_MSG_LOCENAVIBR;Local - Vibrance -HISTORY_MSG_LOCSKINTONCURV;Local - Vib H curve -HISTORY_MSG_LOCPROTSKIN;Local - Vib Protect skin tones -HISTORY_MSG_LOCAVOIDCOLORSHIFT;Local - Vib avoid colorshift -HISTORY_MSG_LOCPASTSATTOG;Local - Vib link -HISTORY_MSG_LOCPASTEL;Local - Vib Pastel -HISTORY_MSG_LOCSATUR;Local - Vib Saturated -HISTORY_MSG_LOCPASTSATTHRES;Local - Vib Threshold -HISTORY_MSG_LOCSENSIV;Local - Vib Scope -HISTORY_MSG_LOCENAEXPOSE;Local - Exposure -HISTORY_MSG_LOCEXPCOMP;Local - Exp Compensation -HISTORY_MSG_LOCHLCOMPR;Local - Exp Hlcompr -HISTORY_MSG_LOCHLCOMPRTHRESH;Local - Exp hlcomprthresh -HISTORY_MSG_LOCBLACK;Local - Exp black -HISTORY_MSG_LOCSHCOMPR;Local - Exp Shcompr -HISTORY_MSG_LOCSENSIEX;Local - Exp Scope -HISTORY_MSG_LOCSHAPE;Local - Exp Contrast curve -HISTORY_MSG_LOCCENTERBUF;Local - Centerbuf -HISTORY_MSG_LOCNOISEEQUALBLURED;Local - deNoise Equalizer blue-red -HISTORY_MSG_LOCCUTPAST;Local - cut past -HISTORY_MSG_LOCCHROCBDL;Local - cbdl chroma -HISTORY_MSG_LOCBLURMETH;Local - Blur method -HISTORY_MSG_LOCDUSTMETH;Local - D method -HISTORY_MSG_LOCLASTDUST;Local - LD -HISTORY_MSG_LOCSOBELREF;Local - Spot method -HISTORY_MSG_LOCEXCLUMETH;Local - Spot Excluding scope -HISTORY_MSG_LOCSENSIEXCL;Local - Spot Excluding struc -HISTORY_MSG_LOCWARM;Local - Warm Cool -HISTORY_MSG_LOCNOISELUMDETAIL;Local - deNoise lum detail -HISTORY_MSG_LOCNOISECHRODETAIL;Local - deNoise chro detail -HISTORY_MSG_LOCSENSIDEN;Local - deNoise Scope -HISTORY_MSG_LOCENABLED;Local L*a*b* -HISTORY_MSG_LOCLOCY;Local - Bottom -HISTORY_MSG_LOCBILATERAL;Local - deNoise bilateral -HISTORY_MSG_LOCNOISELEQUAL;Local - deNoise Equalizer white-black -HISTORY_MSG_LOCSHAPEMETH;Local - Shape Rt-spot method -HISTORY_MSG_LOCSPOTDUP;Local - Spot duplicated HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_DUALDEMOSAIC_CONTRAST;AMaZE+VNG4 - Contrast threshold HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve @@ -1886,10 +1859,7 @@ TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance "Super" TP_LOCALLAB_CURVNONE;Disable curves TP_LOCALLAB_CURVCURR;Normal TP_LOCALLAB_CURVENH;Super -TP_LOCALLAB_CUTPAST;Copy past buffer TP_LOCALLAB_DENOIS;Denoise -TP_LOCALLAB_DSMOV;Local -TP_LOCALLAB_DUST;Dust Spot Removal TP_LOCALLAB_LUM;Curves TP_LOCALLAB_CHROMACBDL;Chroma TP_LOCALLAB_CHROMACB_TOOLTIP;Acts as an amplifier-reducer action compare to sliders of luminance.\nUnder 100 reduce, above 100 amplifie @@ -1925,23 +1895,17 @@ TP_LOCALLAB_INDSL;Independent (mouse + sliders) TP_LOCALLAB_IND;Independent (mouse) TP_LOCALLAB_INVERS;Inverse TP_LOCALLAB_LABEL;Local L*a*b* -TP_LOCALLAB_NEUTRAL;Reset -TP_LOCALLAB_NEUTRAL_TIP;Reset Current Control spot -TP_LOCALLAB_NBSPOT;Control spots -TP_LOCALLAB_NBSPOT_TOOLTIP;Add multiple control spots and select TP_LOCALLAB_STD;Standard TP_LOCALLAB_ENH;Enhanced TP_LOCALLAB_ENHDEN;Enhanced + chroma denoise TP_LOCALLAB_THRES;Threshold chroma TP_LOCALLAB_PROXI;Iterations -TP_LOCALLAB_ANBSPOT;Help to Move Control spot TP_LOCALLAB_ANBSPOT_TOOLTIP;Provisory control (I hope somebody can help to manage events!! and suppress this bad function) TP_LOCALLAB_LIGHTNESS;Lightness TP_LOCALLAB_METHOD_TOOLTIP;'Enhanced + chroma denoise' significantly increases processing times.\nBut reduce artifacts. TP_LOCALLAB_RADIUS;Radius TP_LOCALLAB_RETI;Retinex TP_LOCALLAB_TRANSMISSIONGAIN;Transmission gain -TP_LOCRETI_METHOD;Method TP_LOCALLAB_STREN;Strength TP_LOCALLAB_TM;Tone Mapping TP_LOCALLAB_STR;Strength diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 6b030a701..7f36f8dfd 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -888,7 +888,7 @@ void Crop::update(int todo) int sca = skip; // bool tyty = false; - int maxspot = settings->nspot + 1; + int maxspot = 1; if (needslocal) { for (int sp = 0; sp < params.locallab.nbspot; sp++) { diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index c5dadc94e..bcf0c225d 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -98,7 +98,7 @@ ImProcCoordinator::ImProcCoordinator() fw(0), fh(0), tr(0), fullw(1), fullh(1), pW(-1), pH(-1), - plistener(nullptr), awbListener(nullptr), imageListener(nullptr), aeListener(nullptr), acListener(nullptr), abwListener(nullptr), aloListener(nullptr), actListener(nullptr), adnListener(nullptr), awavListener(nullptr), dehaListener(nullptr), frameCountListener(nullptr), imageTypeListener(nullptr), hListener(nullptr), + plistener(nullptr), awbListener(nullptr), imageListener(nullptr), aeListener(nullptr), acListener(nullptr), abwListener(nullptr), actListener(nullptr), adnListener(nullptr), awavListener(nullptr), dehaListener(nullptr), frameCountListener(nullptr), imageTypeListener(nullptr), hListener(nullptr), resultValid(false), lastOutputProfile("BADFOOD"), lastOutputIntent(RI__COUNT), lastOutputBPC(false), thread(nullptr), changeSinceLast(0), updaterRunning(false), destroying(false), utili(false), autili(false), butili(false), ccutili(false), cclutili(false), clcutili(false), opautili(false), wavcontlutili(false), dataspot(nullptr), maxdata(0), retistr(nullptr), llstr(nullptr), lhstr(nullptr), ccstr(nullptr), hhstr(nullptr), skinstr(nullptr), pthstr(nullptr), exstr(nullptr), @@ -773,7 +773,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall) nprevl->CopyFrom(oprevl); reserv->CopyFrom(oprevl); - int maxspot = settings->nspot + 1; + int maxspot = 1; progress("Applying Color Boost...", 100 * readyphase / numofphases); //************************************************************* diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index 8cb71eea5..4db49d4e3 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -182,7 +182,6 @@ protected: AutoExpListener* aeListener; AutoCamListener* acListener; AutoBWListener* abwListener; - localListener* aloListener; AutoColorTonListener* actListener; AutoChromaListener* adnListener; WaveletListener* awavListener; @@ -513,10 +512,6 @@ public: { abwListener = abw; } - void setlocalListener(localListener* alo) - { - aloListener = alo; - } void setAutoWBListener(AutoWBListener* awb) { diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 002035e2c..bfb9c48b1 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -395,9 +395,9 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall float local_noiself = (float)locallab.noiselumf.at(sp); float local_noiselc = (float)locallab.noiselumc.at(sp); - float local_noiseldetail = locallab.noiselumdetail.at(sp); + float local_noiseldetail = (float)locallab.noiselumdetail.at(sp); int local_noiselequal = locallab.noiselequal.at(sp); - float local_noisechrodetail = 0.f; // Provision + float local_noisechrodetail = (float)locallab.noisechrodetail.at(sp); int local_sensiden = locallab.sensiden.at(sp); float local_noisecf = ((float)locallab.noisechrof.at(sp)) / 10.f; @@ -415,8 +415,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall int local_sensi = locallab.sensi.at(sp); int local_sensibn = locallab.sensibn.at(sp); int local_sensitm = locallab.sensitm.at(sp); - int local_sensiexclu = 19; // Provision - int local_struc = 0; // Provision + int local_sensiexclu = locallab.sensiexclu.at(sp); + int local_struc = locallab.struc.at(sp); int local_warm = locallab.warm.at(sp); int local_sensih = locallab.sensih.at(sp); int local_sensicb = locallab.sensicb.at(sp); diff --git a/rtengine/procevents.h b/rtengine/procevents.h index eb90a5038..eb616ba20 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -539,9 +539,86 @@ enum ProcEventCode { EvLocallabSpotTransit = 509, EvLocallabSpotThresh = 510, EvLocallabSpotIter = 511, + EvLocallabSpotSensiexclu = 512, + EvLocallabSpotStruc = 513, + EvlocallabEnabled = 514, + EvLocenacolor = 515, + Evlocallabcurvactiv = 516, + Evlocallablightness = 517, + Evlocallabcontrast = 518, + Evlocallabchroma = 519, + Evlocallabsensi = 520, + EvlocallabqualitycurveMethod = 521, + Evlocallabllshape = 522, + Evlocallabccshape = 523, + EvlocallabLHshape = 524, + EvlocallabHHshape = 525, + Evlocallabinvers = 526, + EvLocenaexpose = 527, + Evlocallabexpcomp = 528, + Evlocallabhlcompr = 529, + Evlocallabhlcomprthresh = 530, + Evlocallabblack = 531, + Evlocallabshcompr = 532, + Evlocallabwarm = 533, + Evlocallabsensiex = 534, + Evlocallabshapeexpos = 535, + EvLocenavibrance = 536, + EvlocallabSaturated = 537, + EvlocallabPastels = 538, + EvlocallabPastSatThreshold = 539, + EvlocallabProtectSkins = 540, + EvlocallabAvoidColorShift = 541, + EvlocallabPastSatTog = 542, + Evlocallabsensiv = 543, + EvlocallabSkinTonesCurve = 544, + EvLocenablur = 545, + Evlocallabradius = 546, + Evlocallabstrength = 547, + Evlocallabsensibn = 548, + EvlocallabblurMethod = 549, + Evlocallabactivlum = 550, + EvLocenatonemap = 551, + Evlocallabstren = 552, + Evlocallabgamma = 553, + Evlocallabestop = 554, + Evlocallabscaltm = 555, + Evlocallabrewei = 556, + Evlocallabsensitm = 557, + EvLocenareti = 558, + EvlocallabretinexMethod = 559, + Evlocallabstr = 560, + Evlocallabchrrt = 561, + Evlocallabneigh = 562, + Evlocallabvart = 563, + Evlocallabsensih = 564, + EvlocallabCTgainCurve = 565, + Evlocallabinversret = 566, + EvLocenasharp = 567, + Evlocallabsharradius = 568, + Evlocallabsharamount = 569, + Evlocallabshardamping = 570, + Evlocallabshariter = 571, + Evlocallabsensis = 572, + Evlocallabinverssha = 573, + EvLocenacbdl = 574, + EvlocallabEqualizer = 575, + Evlocallabchromacbdl = 576, + EvlocallabThresho = 577, + Evlocallabsensicb = 578, + EvLocenadenoi = 579, + Evlocallabnoiselumf = 580, + Evlocallabnoiselumc = 581, + Evlocallabnoiselumdetail = 582, + Evlocallabnoiselequal = 583, + Evlocallabnoisechrof = 584, + Evlocallabnoisechroc = 585, + Evlocallabnoisechrodetail = 586, + Evlocallabadjblur = 587, + Evlocallabbilateral = 588, + Evlocallabsensiden = 589, + Evlocallabavoid = 590, NUMOFEVENTS - - }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index c0480318a..eef798dd1 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -319,20 +319,20 @@ ToneCurveParams::ToneCurveParams() : curve{ DCT_Linear }, -curve2{ + curve2{ DCT_Linear }, -curveMode(ToneCurveParams::TcMode::STD), - curveMode2(ToneCurveParams::TcMode::STD), - brightness(0), - black(0), - contrast(0), - saturation(0), - shcompr(50), - hlcompr(0), - hlcomprthresh(33), - histmatching(false), - clampOOG(true) + curveMode(ToneCurveParams::TcMode::STD), + curveMode2(ToneCurveParams::TcMode::STD), + brightness(0), + black(0), + contrast(0), + saturation(0), + shcompr(50), + hlcompr(0), + hlcomprthresh(33), + histmatching(false), + clampOOG(true) { } @@ -369,13 +369,13 @@ RetinexParams::RetinexParams() : cdcurve{ DCT_Linear }, -cdHcurve{ + cdHcurve{ DCT_Linear }, -lhcurve{ + lhcurve{ DCT_Linear }, -transmissionCurve{ + transmissionCurve{ FCT_MinMaxCPoints, 0.00, 0.50, @@ -390,7 +390,7 @@ transmissionCurve{ 0.35, 0.35 }, -gaintransmissionCurve{ + gaintransmissionCurve{ FCT_MinMaxCPoints, 0.00, 0.1, @@ -409,33 +409,33 @@ gaintransmissionCurve{ 0.00, 0.00 }, -mapcurve{ + mapcurve{ DCT_Linear }, -str(20), -scal(3), -iter(1), -grad(1), -grads(1), -gam(1.30), -slope(3.), -neigh(80), -offs(0), -highlights(0), -htonalwidth(80), -shadows(0), -stonalwidth(80), -radius(40), -retinexMethod("high"), -retinexcolorspace("Lab"), -gammaretinex("none"), -mapMethod("none"), -viewMethod("none"), -vart(200), -limd(8), -highl(4), -skal(3), -medianmap(false) + str(20), + scal(3), + iter(1), + grad(1), + grads(1), + gam(1.30), + slope(3.), + neigh(80), + offs(0), + highlights(0), + htonalwidth(80), + shadows(0), + stonalwidth(80), + radius(40), + retinexMethod("high"), + retinexcolorspace("Lab"), + gammaretinex("none"), + mapMethod("none"), + viewMethod("none"), + vart(200), + limd(8), + highl(4), + skal(3), + medianmap(false) { } @@ -492,36 +492,36 @@ LCurveParams::LCurveParams() : lcurve{ DCT_Linear }, -acurve{ + acurve{ DCT_Linear }, -bcurve{ + bcurve{ DCT_Linear }, -cccurve{ + cccurve{ DCT_Linear }, -chcurve{ + chcurve{ FCT_Linear }, -lhcurve{ + lhcurve{ FCT_Linear }, -hhcurve{ + hhcurve{ FCT_Linear }, -lccurve{ + lccurve{ DCT_Linear }, -clcurve{ + clcurve{ DCT_Linear }, -brightness(0), -contrast(0), -chromaticity(0), -avoidcolorshift(false), -rstprotection(0), -lcredsk(true) + brightness(0), + contrast(0), + chromaticity(0), + avoidcolorshift(false), + rstprotection(0), + lcredsk(true) { } @@ -557,10 +557,10 @@ RGBCurvesParams::RGBCurvesParams() : rcurve{ DCT_Linear }, -gcurve{ + gcurve{ DCT_Linear }, -bcurve{ + bcurve{ DCT_Linear } { @@ -633,7 +633,7 @@ ColorToningParams::ColorToningParams() : 0.00, 0.00 }, -colorCurve{ + colorCurve{ FCT_MinMaxCPoints, 0.050, 0.62, @@ -644,13 +644,13 @@ colorCurve{ 0.25, 0.25 }, -satProtectionThreshold(30), - saturatedOpacity(80), - strength(50), - balance(0), - hlColSat(60, 80, false), - shadowsColSat(80, 208, false), -clcurve{ + satProtectionThreshold(30), + saturatedOpacity(80), + strength(50), + balance(0), + hlColSat(60, 80, false), + shadowsColSat(80, 208, false), + clcurve{ DCT_NURBS, 0.00, 0.00, @@ -659,7 +659,7 @@ clcurve{ 1.00, 1.00 }, -cl2curve{ + cl2curve{ DCT_NURBS, 0.00, 0.00, @@ -668,24 +668,24 @@ cl2curve{ 1.00, 1.00 }, -method("Lab"), -twocolor("Std"), -redlow(0.0), -greenlow(0.0), -bluelow(0.0), -redmed(0.0), -greenmed(0.0), -bluemed(0.0), -redhigh(0.0), -greenhigh(0.0), -bluehigh(0.0), -satlow(0.0), -sathigh(0.0), -lumamode(true), -labgridALow(0.0), -labgridBLow(0.0), -labgridAHigh(0.0), -labgridBHigh(0.0) + method("Lab"), + twocolor("Std"), + redlow(0.0), + greenlow(0.0), + bluelow(0.0), + redmed(0.0), + greenmed(0.0), + bluemed(0.0), + redhigh(0.0), + greenhigh(0.0), + bluehigh(0.0), + satlow(0.0), + sathigh(0.0), + lumamode(true), + labgridALow(0.0), + labgridBLow(0.0), + labgridAHigh(0.0), + labgridBHigh(0.0) { } @@ -1207,43 +1207,43 @@ ColorAppearanceParams::ColorAppearanceParams() : curve{ DCT_Linear }, -curve2{ + curve2{ DCT_Linear }, -curve3{ + curve3{ DCT_Linear }, -curveMode(TcMode::LIGHT), -curveMode2(TcMode::LIGHT), -curveMode3(CtcMode::CHROMA), -surround("Average"), -surrsrc("Average"), -adapscen(2000.0), -autoadapscen(true), -ybscen(18), -autoybscen(true), -adaplum(16), -badpixsl(0), -wbmodel("RawT"), -algo("No"), -contrast(0.0), -qcontrast(0.0), -jlight(0.0), -qbright(0.0), -chroma(0.0), -schroma(0.0), -mchroma(0.0), -colorh(0.0), -rstprotection(0.0), -surrsource(false), -gamut(true), -datacie(false), -tonecie(false), -tempout(5000), -ybout(18), -greenout(1.0), -tempsc(5000), -greensc(1.0) + curveMode(TcMode::LIGHT), + curveMode2(TcMode::LIGHT), + curveMode3(CtcMode::CHROMA), + surround("Average"), + surrsrc("Average"), + adapscen(2000.0), + autoadapscen(true), + ybscen(18), + autoybscen(true), + adaplum(16), + badpixsl(0), + wbmodel("RawT"), + algo("No"), + contrast(0.0), + qcontrast(0.0), + jlight(0.0), + qbright(0.0), + chroma(0.0), + schroma(0.0), + mchroma(0.0), + colorh(0.0), + rstprotection(0.0), + surrsource(false), + gamut(true), + datacie(false), + tonecie(false), + tempout(5000), + ybout(18), + greenout(1.0), + tempsc(5000), + greensc(1.0) { } @@ -1374,7 +1374,7 @@ DirPyrDenoiseParams::DirPyrDenoiseParams() : 0.35, 0.35 }, -cccurve{ + cccurve{ FCT_MinMaxCPoints, 0.05, 0.50, @@ -1385,25 +1385,25 @@ cccurve{ 0.35, 0.35 }, -enabled(false), -enhance(false), -median(false), -perform(false), -luma(0), -Ldetail(0), -chroma(15), -redchro(0), -bluechro(0), -gamma(1.7), -dmethod("Lab"), -Lmethod("SLI"), -Cmethod("MAN"), -C2method("AUTO"), -smethod("shal"), -medmethod("soft"), -methodmed("none"), -rgbmethod("soft"), -passes(1) + enabled(false), + enhance(false), + median(false), + perform(false), + luma(0), + Ldetail(0), + chroma(15), + redchro(0), + bluechro(0), + gamma(1.7), + dmethod("Lab"), + Lmethod("SLI"), + Cmethod("MAN"), + C2method("AUTO"), + smethod("shal"), + medmethod("soft"), + methodmed("none"), + rgbmethod("soft"), + passes(1) { } @@ -1795,12 +1795,12 @@ ChannelMixerParams::ChannelMixerParams() : 0, 0 }, -green{ + green{ 0, 100, 0 }, -blue{ + blue{ 0, 0, 100 @@ -1836,32 +1836,32 @@ BlackWhiteParams::BlackWhiteParams() : beforeCurve{ DCT_Linear }, -beforeCurveMode(BlackWhiteParams::TcMode::STD_BW), -afterCurve{ + beforeCurveMode(BlackWhiteParams::TcMode::STD_BW), + afterCurve{ DCT_Linear }, -afterCurveMode(BlackWhiteParams::TcMode::STD_BW), -algo("SP"), -luminanceCurve{ + afterCurveMode(BlackWhiteParams::TcMode::STD_BW), + algo("SP"), + luminanceCurve{ FCT_Linear }, -autoc(false), -enabledcc(true), -enabled(false), -filter("None"), -setting("RGB-Rel"), -method("Desaturation"), -mixerRed(33), -mixerOrange(33), -mixerYellow(33), -mixerGreen(33), -mixerCyan(33), -mixerBlue(33), -mixerMagenta(33), -mixerPurple(33), -gammaRed(0), -gammaGreen(0), -gammaBlue(0) + autoc(false), + enabledcc(true), + enabled(false), + filter("None"), + setting("RGB-Rel"), + method("Desaturation"), + mixerRed(33), + mixerOrange(33), + mixerYellow(33), + mixerGreen(33), + mixerCyan(33), + mixerBlue(33), + mixerMagenta(33), + mixerPurple(33), + gammaRed(0), + gammaGreen(0), + gammaBlue(0) { } @@ -2004,7 +2004,7 @@ WaveletParams::WaveletParams() : 0.35, 0.35 }, -opacityCurveRG{ + opacityCurveRG{ static_cast(FCT_MinMaxCPoints), 0.0, 0.50, @@ -2015,7 +2015,7 @@ opacityCurveRG{ 0.35, 0.35 }, -opacityCurveBY{ + opacityCurveBY{ static_cast(FCT_MinMaxCPoints), 0.0, 0.50, @@ -2026,7 +2026,7 @@ opacityCurveBY{ 0.35, 0.35 }, -opacityCurveW{ + opacityCurveW{ static_cast(FCT_MinMaxCPoints), 0.00, 0.35, @@ -2045,7 +2045,7 @@ opacityCurveW{ 0.00, 0.00 }, -opacityCurveWL{ + opacityCurveWL{ static_cast(FCT_MinMaxCPoints), 0.0, 0.50, @@ -2056,90 +2056,90 @@ opacityCurveWL{ 0.35, 0.35 }, -hhcurve{ + hhcurve{ FCT_Linear }, -Chcurve{ + Chcurve{ FCT_Linear }, -wavclCurve { + wavclCurve { DCT_Linear }, -enabled(false), - median(false), - medianlev(false), - linkedg(true), - cbenab(false), - greenlow(0), - bluelow(0), - greenmed(0), - bluemed(0), - greenhigh(0), - bluehigh(0), - lipst(false), - avoid(false), - tmr(false), - strength(100), - balance(0), - iter(0), - expcontrast(false), - expchroma(false), - c{}, - ch{}, - expedge(false), - expresid(false), - expfinal(false), - exptoning(false), - expnoise(false), - Lmethod(4), - CLmethod("all"), - Backmethod("grey"), - Tilesmethod("full"), - daubcoeffmethod("4_"), - CHmethod("without"), - Medgreinf("less"), - CHSLmethod("SL"), - EDmethod("CU"), - NPmethod("none"), - BAmethod("none"), - TMmethod("cont"), - Dirmethod("all"), - HSmethod("with"), - rescon(0), - resconH(0), - reschro(0), - tmrs(0), - gamma(1), - sup(0), - sky(0.0), - thres(7), - chroma(5), - chro(0), - threshold(5), - threshold2(4), - edgedetect(90), - edgedetectthr(20), - edgedetectthr2(0), - edgesensi(60), - edgeampli(10), - contrast(0), - edgrad(15), - edgval(0), - edgthresh(10), - thr(35), - thrH(65), - skinprotect(0.0), - hueskin(-5, 25, 170, 120, false), - hueskin2(-260, -250, -130, -140, false), - hllev(50, 75, 100, 98, false), - bllev(0, 2, 50, 25, false), - pastlev(0, 2, 30, 20, false), - satlev(30, 45, 130, 100, false), - edgcont(0, 10, 75, 40, false), - level0noise(0, 0, false), - level1noise(0, 0, false), - level2noise(0, 0, false), - level3noise(0, 0, false) + enabled(false), + median(false), + medianlev(false), + linkedg(true), + cbenab(false), + greenlow(0), + bluelow(0), + greenmed(0), + bluemed(0), + greenhigh(0), + bluehigh(0), + lipst(false), + avoid(false), + tmr(false), + strength(100), + balance(0), + iter(0), + expcontrast(false), + expchroma(false), + c{}, + ch{}, + expedge(false), + expresid(false), + expfinal(false), + exptoning(false), + expnoise(false), + Lmethod(4), + CLmethod("all"), + Backmethod("grey"), + Tilesmethod("full"), + daubcoeffmethod("4_"), + CHmethod("without"), + Medgreinf("less"), + CHSLmethod("SL"), + EDmethod("CU"), + NPmethod("none"), + BAmethod("none"), + TMmethod("cont"), + Dirmethod("all"), + HSmethod("with"), + rescon(0), + resconH(0), + reschro(0), + tmrs(0), + gamma(1), + sup(0), + sky(0.0), + thres(7), + chroma(5), + chro(0), + threshold(5), + threshold2(4), + edgedetect(90), + edgedetectthr(20), + edgedetectthr2(0), + edgesensi(60), + edgeampli(10), + contrast(0), + edgrad(15), + edgval(0), + edgthresh(10), + thr(35), + thrH(65), + skinprotect(0.0), + hueskin(-5, 25, 170, 120, false), + hueskin2(-260, -250, -130, -140, false), + hllev(50, 75, 100, 98, false), + bllev(0, 2, 50, 25, false), + pastlev(0, 2, 30, 20, false), + satlev(30, 45, 130, 100, false), + edgcont(0, 10, 75, 40, false), + level0noise(0, 0, false), + level1noise(0, 0, false), + level2noise(0, 0, false), + level3noise(0, 0, false) { } @@ -2173,70 +2173,70 @@ bool WaveletParams::operator ==(const WaveletParams& other) const && iter == other.iter && expcontrast == other.expcontrast && expchroma == other.expchroma - && [this, &other]() -> bool { - for (unsigned int i = 0; i < 9; ++i) - { - if (c[i] != other.c[i] || ch[i] != other.ch[i]) { - return false; + && [this, &other]() -> bool { + for (unsigned int i = 0; i < 9; ++i) + { + if (c[i] != other.c[i] || ch[i] != other.ch[i]) { + return false; + } } - } - return true; - }() - && expedge == other.expedge - && expresid == other.expresid - && expfinal == other.expfinal - && exptoning == other.exptoning - && expnoise == other.expnoise - && Lmethod == other.Lmethod - && CLmethod == other.CLmethod - && Backmethod == other.Backmethod - && Tilesmethod == other.Tilesmethod - && daubcoeffmethod == other.daubcoeffmethod - && CHmethod == other.CHmethod - && Medgreinf == other.Medgreinf - && CHSLmethod == other.CHSLmethod - && EDmethod == other.EDmethod - && NPmethod == other.NPmethod - && BAmethod == other.BAmethod - && TMmethod == other.TMmethod - && Dirmethod == other.Dirmethod - && HSmethod == other.HSmethod - && rescon == other.rescon - && resconH == other.resconH - && reschro == other.reschro - && tmrs == other.tmrs - && gamma == other.gamma - && sup == other.sup - && sky == other.sky - && thres == other.thres - && chroma == other.chroma - && chro == other.chro - && threshold == other.threshold - && threshold2 == other.threshold2 - && edgedetect == other.edgedetect - && edgedetectthr == other.edgedetectthr - && edgedetectthr2 == other.edgedetectthr2 - && edgesensi == other.edgesensi - && edgeampli == other.edgeampli - && contrast == other.contrast - && edgrad == other.edgrad - && edgval == other.edgval - && edgthresh == other.edgthresh - && thr == other.thr - && thrH == other.thrH - && skinprotect == other.skinprotect - && hueskin == other.hueskin - && hueskin2 == other.hueskin2 - && hllev == other.hllev - && bllev == other.bllev - && pastlev == other.pastlev - && satlev == other.satlev - && edgcont == other.edgcont - && level0noise == other.level0noise - && level1noise == other.level1noise - && level2noise == other.level2noise - && level3noise == other.level3noise; + return true; + }() + && expedge == other.expedge + && expresid == other.expresid + && expfinal == other.expfinal + && exptoning == other.exptoning + && expnoise == other.expnoise + && Lmethod == other.Lmethod + && CLmethod == other.CLmethod + && Backmethod == other.Backmethod + && Tilesmethod == other.Tilesmethod + && daubcoeffmethod == other.daubcoeffmethod + && CHmethod == other.CHmethod + && Medgreinf == other.Medgreinf + && CHSLmethod == other.CHSLmethod + && EDmethod == other.EDmethod + && NPmethod == other.NPmethod + && BAmethod == other.BAmethod + && TMmethod == other.TMmethod + && Dirmethod == other.Dirmethod + && HSmethod == other.HSmethod + && rescon == other.rescon + && resconH == other.resconH + && reschro == other.reschro + && tmrs == other.tmrs + && gamma == other.gamma + && sup == other.sup + && sky == other.sky + && thres == other.thres + && chroma == other.chroma + && chro == other.chro + && threshold == other.threshold + && threshold2 == other.threshold2 + && edgedetect == other.edgedetect + && edgedetectthr == other.edgedetectthr + && edgedetectthr2 == other.edgedetectthr2 + && edgesensi == other.edgesensi + && edgeampli == other.edgeampli + && contrast == other.contrast + && edgrad == other.edgrad + && edgval == other.edgval + && edgthresh == other.edgthresh + && thr == other.thr + && thrH == other.thrH + && skinprotect == other.skinprotect + && hueskin == other.hueskin + && hueskin2 == other.hueskin2 + && hllev == other.hllev + && bllev == other.bllev + && pastlev == other.pastlev + && satlev == other.satlev + && edgcont == other.edgcont + && level0noise == other.level0noise + && level1noise == other.level1noise + && level2noise == other.level2noise + && level3noise == other.level3noise; } bool WaveletParams::operator !=(const WaveletParams& other) const @@ -2270,6 +2270,8 @@ LocallabParams::LocallabParams() : isvisible(), shape(), spotMethod(), + sensiexclu(), + struc(), shapeMethod(), locX(), locXL(), @@ -2362,9 +2364,11 @@ LocallabParams::LocallabParams() : noiselequal(), noisechrof(), noisechroc(), + noisechrodetail(), adjblur(), bilateral(), sensiden(), + // Others avoid() { } @@ -2382,6 +2386,8 @@ bool LocallabParams::operator ==(const LocallabParams& other) const && isvisible == other.isvisible && shape == other.shape && spotMethod == other.spotMethod + && sensiexclu == other.sensiexclu + && struc == other.struc && shapeMethod == other.shapeMethod && locX == other.locX && locXL == other.locXL @@ -2462,31 +2468,33 @@ bool LocallabParams::operator ==(const LocallabParams& other) const && inverssha == other.inverssha // Constrast by detail levels && expcbdl == other.expcbdl - && [this, &other]()->bool { - for (int i = 0; i < 5; i++) - { - if (mult[i] != other.mult[i]) { - return false; + && [this, &other]()->bool { + for (int i = 0; i < 5; i++) + { + if (mult[i] != other.mult[i]) { + return false; + } } - } - return true; - }() - && chromacbdl == other.chromacbdl - && threshold == other.threshold - && sensicb == other.sensicb - // Denoise - && expdenoi == other.expdenoi - && noiselumf == other.noiselumf - && noiselumc == other.noiselumc - && noiselumdetail == other.noiselumdetail - && noiselequal == other.noiselequal - && noisechrof == other.noisechrof - && noisechroc == other.noisechroc - && adjblur == other.adjblur - && bilateral == other.bilateral - && sensiden == other.sensiden - && avoid == other.avoid; + return true; + }() + && chromacbdl == other.chromacbdl + && threshold == other.threshold + && sensicb == other.sensicb + // Denoise + && expdenoi == other.expdenoi + && noiselumf == other.noiselumf + && noiselumc == other.noiselumc + && noiselumdetail == other.noiselumdetail + && noiselequal == other.noiselequal + && noisechrof == other.noisechrof + && noisechroc == other.noisechroc + && noisechrodetail == other.noisechrodetail + && adjblur == other.adjblur + && bilateral == other.bilateral + && sensiden == other.sensiden + // Others + && avoid == other.avoid; } bool LocallabParams::operator !=(const LocallabParams& other) const @@ -2494,23 +2502,6 @@ bool LocallabParams::operator !=(const LocallabParams& other) const return !(*this == other); } -/* -void LocallabParams::getCurves( - LocretigainCurve &cTgainCurve, - LocretigainCurverab &cTgainCurverab, - LocLHCurve &lhCurve, - LocHHCurve &hhCurve, - bool &LHutili, - bool &HHutili) const -{ - cTgainCurve.Set(this->localTgaincurve); - cTgainCurverab.Set(this->localTgaincurverab); - lhCurve.Set(this->LHcurve, LHutili); - hhCurve.Set(this->HHcurve, HHutili); - -} -*/ - DirPyrEqualizerParams::DirPyrEqualizerParams() : enabled(false), @@ -2523,10 +2514,10 @@ DirPyrEqualizerParams::DirPyrEqualizerParams() : 1.0, 1.0 }, -threshold(0.2), -skinprotect(0.0), -hueskin(-5, 25, 170, 120, false), -cbdlMethod("bef") + threshold(0.2), + skinprotect(0.0), + hueskin(-5, 25, 170, 120, false), + cbdlMethod("bef") { } @@ -2535,20 +2526,20 @@ bool DirPyrEqualizerParams::operator ==(const DirPyrEqualizerParams& other) cons return enabled == other.enabled && gamutlab == other.gamutlab - && [this, &other]() -> bool { - for (unsigned int i = 0; i < 6; ++i) - { - if (mult[i] != other.mult[i]) { - return false; + && [this, &other]() -> bool { + for (unsigned int i = 0; i < 6; ++i) + { + if (mult[i] != other.mult[i]) { + return false; + } } - } - return true; - }() - && threshold == other.threshold - && skinprotect == other.skinprotect - && hueskin == other.hueskin - && cbdlMethod == other.cbdlMethod; + return true; + }() + && threshold == other.threshold + && skinprotect == other.skinprotect + && hueskin == other.hueskin + && cbdlMethod == other.cbdlMethod; } bool DirPyrEqualizerParams::operator !=(const DirPyrEqualizerParams& other) const @@ -2561,10 +2552,10 @@ HSVEqualizerParams::HSVEqualizerParams() : hcurve{ FCT_Linear }, -scurve{ + scurve{ FCT_Linear }, -vcurve{ + vcurve{ FCT_Linear } { @@ -3234,14 +3225,14 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile( !pedited || pedited->colorappearance.curveMode3, "Color appearance", - "CurveMode3", { - {ColorAppearanceParams::CtcMode::CHROMA, "Chroma"}, - {ColorAppearanceParams::CtcMode::SATUR, "Saturation"}, - {ColorAppearanceParams::CtcMode::COLORF, "Colorfullness"} + "CurveMode3", { + {ColorAppearanceParams::CtcMode::CHROMA, "Chroma"}, + {ColorAppearanceParams::CtcMode::SATUR, "Saturation"}, + {ColorAppearanceParams::CtcMode::COLORF, "Colorfullness"} - }, - colorappearance.curveMode3, - keyFile + }, + colorappearance.curveMode3, + keyFile ); saveToKeyfile(!pedited || pedited->colorappearance.curve, "Color appearance", "Curve", colorappearance.curve, keyFile); saveToKeyfile(!pedited || pedited->colorappearance.curve2, "Color appearance", "Curve2", colorappearance.curve2, keyFile); @@ -3370,6 +3361,8 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.isvisible, "Locallab", "Isvisible_" + std::to_string(i), locallab.isvisible.at(i), keyFile); saveToKeyfile(!pedited || pedited->locallab.shape, "Locallab", "Shape_" + std::to_string(i), locallab.shape.at(i), keyFile); saveToKeyfile(!pedited || pedited->locallab.spotMethod, "Locallab", "SpotMethod_" + std::to_string(i), locallab.spotMethod.at(i), keyFile); + saveToKeyfile(!pedited || pedited->locallab.sensiexclu, "Locallab", "SensiExclu_" + std::to_string(i), locallab.sensiexclu.at(i), keyFile); + saveToKeyfile(!pedited || pedited->locallab.struc, "Locallab", "Struc_" + std::to_string(i), locallab.struc.at(i), keyFile); saveToKeyfile(!pedited || pedited->locallab.shapeMethod, "Locallab", "ShapeMethod_" + std::to_string(i), locallab.shapeMethod.at(i), keyFile); saveToKeyfile(!pedited || pedited->locallab.locX, "Locallab", "LocX_" + std::to_string(i), locallab.locX.at(i), keyFile); saveToKeyfile(!pedited || pedited->locallab.locXL, "Locallab", "LocXL_" + std::to_string(i), locallab.locXL.at(i), keyFile); @@ -3466,9 +3459,11 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.noiselequal, "Locallab", "noiselequal_" + std::to_string(i), locallab.noiselequal.at(i), keyFile); saveToKeyfile(!pedited || pedited->locallab.noisechrof, "Locallab", "noisechrof_" + std::to_string(i), locallab.noisechrof.at(i), keyFile); saveToKeyfile(!pedited || pedited->locallab.noisechroc, "Locallab", "noisechroc_" + std::to_string(i), locallab.noisechroc.at(i), keyFile); + saveToKeyfile(!pedited || pedited->locallab.noisechrodetail, "Locallab", "noisechrodetail_" + std::to_string(i), locallab.noisechrodetail.at(i), keyFile); saveToKeyfile(!pedited || pedited->locallab.adjblur, "Locallab", "Adjblur_" + std::to_string(i), locallab.adjblur.at(i), keyFile); saveToKeyfile(!pedited || pedited->locallab.bilateral, "Locallab", "Bilateral_" + std::to_string(i), locallab.bilateral.at(i), keyFile); saveToKeyfile(!pedited || pedited->locallab.sensiden, "Locallab", "Sensiden_" + std::to_string(i), locallab.sensiden.at(i), keyFile); + // Others saveToKeyfile(!pedited || pedited->locallab.avoid, "Locallab", "Avoid_" + std::to_string(i), locallab.avoid.at(i), keyFile); } @@ -3527,15 +3522,15 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile( !pedited || pedited->icm.outputIntent, "Color Management", - "OutputProfileIntent", { - {RI_PERCEPTUAL, "Perceptual"}, - {RI_RELATIVE, "Relative"}, - {RI_SATURATION, "Saturation"}, - {RI_ABSOLUTE, "Absolute"} + "OutputProfileIntent", { + {RI_PERCEPTUAL, "Perceptual"}, + {RI_RELATIVE, "Relative"}, + {RI_SATURATION, "Saturation"}, + {RI_ABSOLUTE, "Absolute"} - }, - icm.outputIntent, - keyFile + }, + icm.outputIntent, + keyFile ); saveToKeyfile(!pedited || pedited->icm.outputBPC, "Color Management", "OutputBPC", icm.outputBPC, keyFile); saveToKeyfile(!pedited || pedited->icm.gamma, "Color Management", "Gammafree", icm.gamma, keyFile); @@ -3944,14 +3939,14 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) keyFile, "Black & White", "BeforeCurveMode", - pedited, { - {"Standard", BlackWhiteParams::TcMode::STD_BW}, - {"FilmLike", BlackWhiteParams::TcMode::FILMLIKE_BW}, - {"SatAndValueBlending", BlackWhiteParams::TcMode::SATANDVALBLENDING_BW}, - {"WeightedStd", BlackWhiteParams::TcMode::WEIGHTEDSTD_BW} - }, - blackwhite.beforeCurveMode, - pedited->blackwhite.beforeCurveMode + pedited, { + {"Standard", BlackWhiteParams::TcMode::STD_BW}, + {"FilmLike", BlackWhiteParams::TcMode::FILMLIKE_BW}, + {"SatAndValueBlending", BlackWhiteParams::TcMode::SATANDVALBLENDING_BW}, + {"WeightedStd", BlackWhiteParams::TcMode::WEIGHTEDSTD_BW} + }, + blackwhite.beforeCurveMode, + pedited->blackwhite.beforeCurveMode ); assignFromKeyfile(keyFile, "Black & White", "AfterCurve", pedited, blackwhite.afterCurve, pedited->blackwhite.afterCurve); @@ -3959,12 +3954,12 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) keyFile, "Black & White", "AfterCurveMode", - pedited, { - {"Standard", BlackWhiteParams::TcMode::STD_BW}, - {"WeightedStd", BlackWhiteParams::TcMode::WEIGHTEDSTD_BW} - }, - blackwhite.afterCurveMode, - pedited->blackwhite.afterCurveMode + pedited, { + {"Standard", BlackWhiteParams::TcMode::STD_BW}, + {"WeightedStd", BlackWhiteParams::TcMode::WEIGHTEDSTD_BW} + }, + blackwhite.afterCurveMode, + pedited->blackwhite.afterCurveMode ); } @@ -4256,13 +4251,13 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) keyFile, "Color appearance", "CurveMode3", - pedited, { - {"Chroma", ColorAppearanceParams::CtcMode::CHROMA}, - {"Saturation", ColorAppearanceParams::CtcMode::SATUR}, - {"Colorfullness", ColorAppearanceParams::CtcMode::COLORF} - }, - colorappearance.curveMode3, - pedited->colorappearance.curveMode3 + pedited, { + {"Chroma", ColorAppearanceParams::CtcMode::CHROMA}, + {"Saturation", ColorAppearanceParams::CtcMode::SATUR}, + {"Colorfullness", ColorAppearanceParams::CtcMode::COLORF} + }, + colorappearance.curveMode3, + pedited->colorappearance.curveMode3 ); if (ppVersion > 200) { @@ -4496,6 +4491,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) locallab.isvisible.resize(locallab.nbspot); locallab.shape.resize(locallab.nbspot); locallab.spotMethod.resize(locallab.nbspot); + locallab.sensiexclu.resize(locallab.nbspot); + locallab.struc.resize(locallab.nbspot); locallab.shapeMethod.resize(locallab.nbspot); locallab.locX.resize(locallab.nbspot); locallab.locXL.resize(locallab.nbspot); @@ -4593,9 +4590,11 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) locallab.noiselequal.resize(locallab.nbspot); locallab.noisechrof.resize(locallab.nbspot); locallab.noisechroc.resize(locallab.nbspot); + locallab.noisechrodetail.resize(locallab.nbspot); locallab.adjblur.resize(locallab.nbspot); locallab.bilateral.resize(locallab.nbspot); locallab.sensiden.resize(locallab.nbspot); + // Others locallab.avoid.resize(locallab.nbspot); } @@ -4607,6 +4606,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Shape_" + std::to_string(i), pedited, locallab.shape.at(i), pedited->locallab.shape); assignFromKeyfile(keyFile, "Locallab", "SpotMethod_" + std::to_string(i), pedited, locallab.spotMethod.at(i), pedited->locallab.spotMethod); assignFromKeyfile(keyFile, "Locallab", "ShapeMethod_" + std::to_string(i), pedited, locallab.shapeMethod.at(i), pedited->locallab.shapeMethod); + assignFromKeyfile(keyFile, "Locallab", "SensiExclu_" + std::to_string(i), pedited, locallab.sensiexclu.at(i), pedited->locallab.sensiexclu); + assignFromKeyfile(keyFile, "Locallab", "Struc_" + std::to_string(i), pedited, locallab.struc.at(i), pedited->locallab.struc); assignFromKeyfile(keyFile, "Locallab", "LocX_" + std::to_string(i), pedited, locallab.locX.at(i), pedited->locallab.locX); assignFromKeyfile(keyFile, "Locallab", "LocXL_" + std::to_string(i), pedited, locallab.locXL.at(i), pedited->locallab.locXL); assignFromKeyfile(keyFile, "Locallab", "LocY_" + std::to_string(i), pedited, locallab.locY.at(i), pedited->locallab.locY); @@ -4714,9 +4715,11 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "noiselequal_" + std::to_string(i), pedited, locallab.noiselequal.at(i), pedited->locallab.noiselequal); assignFromKeyfile(keyFile, "Locallab", "noisechrof_" + std::to_string(i), pedited, locallab.noisechrof.at(i), pedited->locallab.noisechrof); assignFromKeyfile(keyFile, "Locallab", "noisechroc_" + std::to_string(i), pedited, locallab.noisechroc.at(i), pedited->locallab.noisechroc); + assignFromKeyfile(keyFile, "Locallab", "noisechrodetail_" + std::to_string(i), pedited, locallab.noisechrodetail.at(i), pedited->locallab.noisechrodetail); assignFromKeyfile(keyFile, "Locallab", "Adjblur_" + std::to_string(i), pedited, locallab.adjblur.at(i), pedited->locallab.adjblur); assignFromKeyfile(keyFile, "Locallab", "Bilateral_" + std::to_string(i), pedited, locallab.bilateral.at(i), pedited->locallab.bilateral); assignFromKeyfile(keyFile, "Locallab", "Sensiden_" + std::to_string(i), pedited, locallab.sensiden.at(i), pedited->locallab.sensiden); + // Others assignFromKeyfile(keyFile, "Locallab", "Avoid_" + std::to_string(i), pedited, locallab.avoid.at(i), pedited->locallab.avoid); } } diff --git a/rtengine/procparams.h b/rtengine/procparams.h index beebca62d..861ec9ee7 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -908,6 +908,8 @@ struct LocallabParams { std::vector isvisible; std::vector shape; // ELI, RECT std::vector spotMethod; // norm, exc + std::vector sensiexclu; + std::vector struc; std::vector shapeMethod; // IND, SYM, INDSL, SYMSL std::vector locX; std::vector locXL; @@ -1000,26 +1002,17 @@ struct LocallabParams { std::vector noiselequal; std::vector noisechrof; std::vector noisechroc; + std::vector noisechrodetail; std::vector adjblur; std::vector bilateral; std::vector sensiden; + // Others std::vector avoid; LocallabParams(); bool operator ==(const LocallabParams& other) const; bool operator !=(const LocallabParams& other) const; - - /* - void getCurves( - LocretigainCurve &cTgainCurve, - LocretigainCurverab &cTgainCurverab, - LocLHCurve & lhCurve, - LocHHCurve & hhCurve, - bool &LHutili, - bool &HHutili - ) const; - */ }; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 8e76ff975..9272ecce8 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -538,7 +538,86 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, // EvLocallabSpotQualityMethod LUMINANCECURVE, // EvLocallabSpotTransit LUMINANCECURVE, // EvLocallabSpotThresh - LUMINANCECURVE // EvLocallabSpotIter + LUMINANCECURVE, // EvLocallabSpotIter + LUMINANCECURVE, // EvLocallabSpotSensiexclu + LUMINANCECURVE, // EvLocallabSpotStruc + LUMINANCECURVE, // EvlocallabEnabled + LUMINANCECURVE, // EvLocenacolor + LUMINANCECURVE, // Evlocallabcurvactiv + LUMINANCECURVE, // Evlocallablightness + LUMINANCECURVE, // Evlocallabcontrast + LUMINANCECURVE, // Evlocallabchroma + LUMINANCECURVE, // Evlocallabsensi + LUMINANCECURVE, // EvlocallabqualitycurveMethod + LUMINANCECURVE, // Evlocallabllshape + LUMINANCECURVE, // Evlocallabccshape + LUMINANCECURVE, // EvlocallabLHshape + LUMINANCECURVE, // EvlocallabHHshape + LUMINANCECURVE, // Evlocallabinvers + LUMINANCECURVE, // EvLocenaexpose + LUMINANCECURVE, // Evlocallabexpcomp + LUMINANCECURVE, // Evlocallabhlcompr + LUMINANCECURVE, // Evlocallabhlcomprthresh + LUMINANCECURVE, // Evlocallabblack + LUMINANCECURVE, // Evlocallabshcompr + LUMINANCECURVE, // Evlocallabwarm + LUMINANCECURVE, // Evlocallabsensiex + LUMINANCECURVE, // Evlocallabshapeexpos + LUMINANCECURVE, // EvLocenavibrance + LUMINANCECURVE, // EvlocallabSaturated + LUMINANCECURVE, // EvlocallabPastels + LUMINANCECURVE, // EvlocallabPastSatThreshold + LUMINANCECURVE, // EvlocallabProtectSkins + LUMINANCECURVE, // EvlocallabAvoidColorShift + LUMINANCECURVE, // EvlocallabPastSatTog + LUMINANCECURVE, // Evlocallabsensiv + LUMINANCECURVE, // EvlocallabSkinTonesCurve + LUMINANCECURVE, // EvLocenablur + LUMINANCECURVE, // Evlocallabradius + LUMINANCECURVE, // Evlocallabstrength + LUMINANCECURVE, // Evlocallabsensibn + LUMINANCECURVE, // EvlocallabblurMethod + LUMINANCECURVE, // Evlocallabactivlum + LUMINANCECURVE, // EvLocenatonemap + LUMINANCECURVE, // Evlocallabstren + LUMINANCECURVE, // Evlocallabgamma + LUMINANCECURVE, // Evlocallabestop + LUMINANCECURVE, // Evlocallabscaltm + LUMINANCECURVE, // Evlocallabrewei + LUMINANCECURVE, // Evlocallabsensitm + LUMINANCECURVE, // EvLocenareti + LUMINANCECURVE, // EvlocallabretinexMethod + LUMINANCECURVE, // Evlocallabstr + LUMINANCECURVE, // Evlocallabchrrt + LUMINANCECURVE, // Evlocallabneigh + LUMINANCECURVE, // Evlocallabvart + LUMINANCECURVE, // Evlocallabsensih + LUMINANCECURVE, // EvlocallabCTgainCurve + LUMINANCECURVE, // Evlocallabinversret + LUMINANCECURVE, // EvLocenasharp + LUMINANCECURVE, // Evlocallabsharradius + LUMINANCECURVE, // Evlocallabsharamount + LUMINANCECURVE, // Evlocallabshardamping + LUMINANCECURVE, // Evlocallabshariter + LUMINANCECURVE, // Evlocallabsensis + LUMINANCECURVE, // Evlocallabinverssha + LUMINANCECURVE, // EvLocenacbdl + LUMINANCECURVE, // EvlocallabEqualizer + LUMINANCECURVE, // Evlocallabchromacbdl + LUMINANCECURVE, // EvlocallabThresho + LUMINANCECURVE, // Evlocallabsensicb + LUMINANCECURVE, // EvLocenadenoi + LUMINANCECURVE, // Evlocallabnoiselumf + LUMINANCECURVE, // Evlocallabnoiselumc + LUMINANCECURVE, // Evlocallabnoiselumdetail + LUMINANCECURVE, // Evlocallabnoiselequal + LUMINANCECURVE, // Evlocallabnoisechrof + LUMINANCECURVE, // Evlocallabnoisechroc + LUMINANCECURVE, // Evlocallabnoisechrodetail + LUMINANCECURVE, // Evlocallabadjblur + LUMINANCECURVE, // Evlocallabbilateral + LUMINANCECURVE, // Evlocallabsensiden + LUMINANCECURVE // Evlocallabavoid }; diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index 7279feaf2..031191bd2 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -345,16 +345,6 @@ public : }; -class localListener -{ -public : - virtual ~localListener() {} - virtual void localChanged (int **datasp, std::string datastr, std::string ll_str, std::string lh_str, std::string cc_str, std::string hh_str, std::string sk_str, std::string ps_str, std::string ex_str, int sp, int maxdat) {} - virtual void localretChanged (int **datasp, std::string datastr, std::string ll_str, std::string lh_str, std::string cc_str, std::string hh_str, std::string sk_str, std::string ps_str, std::string ex_str, int sp, int maxdat) {} - virtual void spotdupChanged(bool spotchan) {}; -}; - - class AutoWBListener { public : @@ -482,7 +472,6 @@ public: virtual void setAutoCamListener (AutoCamListener* l) = 0; virtual void setFrameCountListener (FrameCountListener* l) = 0; virtual void setAutoBWListener (AutoBWListener* l) = 0; - virtual void setlocalListener (localListener* l) = 0; virtual void setAutoWBListener (AutoWBListener* l) = 0; virtual void setAutoColorTonListener (AutoColorTonListener* l) = 0; virtual void setAutoChromaListener (AutoChromaListener* l) = 0; diff --git a/rtengine/settings.h b/rtengine/settings.h index b338335d4..22d32d598 100644 --- a/rtengine/settings.h +++ b/rtengine/settings.h @@ -81,8 +81,6 @@ public: // bool bw_complementary; double level0_cbdl; double level123_cbdl; - int nspot; - bool locdelay; int cropsleep; double reduchigh; double reduclow; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index d04faa701..0149e6095 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1060,7 +1060,7 @@ private: LUTf lightCurveloc(32770, 0); LUTf exlocalcurve(65536, 0); - int maxspot = settings->nspot + 1; + int maxspot = 1; float** shbuffer = nullptr; for (int sp = 0; sp < params.locallab.nbspot; sp++) { diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index 54882c15c..120ec852e 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -144,7 +144,7 @@ void BatchToolPanelCoordinator::initSession () distortion->setAdjusterBehavior (false); perspective->setAdjusterBehavior (false); gradient->setAdjusterBehavior (false, false, false, false); - locallab->setAdjusterBehavior (false, false, false, false, false, false, false, false, false, false, false, false, false); + // locallab->setAdjusterBehavior (false, false, false, false, false, false, false, false, false, false, false, false, false); pcvignette->setAdjusterBehavior (false, false, false); cacorrection->setAdjusterBehavior (false); sharpening->setAdjusterBehavior (false, false, false, false, false, false, false); diff --git a/rtgui/controlspotpanel.cc b/rtgui/controlspotpanel.cc index 09d5f75d3..b8927dba7 100644 --- a/rtgui/controlspotpanel.cc +++ b/rtgui/controlspotpanel.cc @@ -1,5 +1,21 @@ /* * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + * 2018 Pierre Cabrera */ #include "../rtengine/rt_math.h" @@ -18,7 +34,6 @@ ControlSpotPanel::ControlSpotPanel(): EditSubscriber(ET_OBJECTS), FoldableToolPanel(this, "controlspotpanel", M("TP_LOCALLAB_SETTINGS")), - button_add_("Add"), button_delete_("Delete"), button_rename_("Rename"), @@ -28,6 +43,8 @@ ControlSpotPanel::ControlSpotPanel(): shapeMethod_(Gtk::manage(new MyComboBoxText())), qualityMethod_(Gtk::manage(new MyComboBoxText())), + sensiexclu_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIEXCLU"), 0, 100, 1, 19))), + struc_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUC"), 0, 5, 1, 0))), locX_(Gtk::manage(new Adjuster(M("TP_LOCAL_WIDTH"), 0, 2250, 1, 250))), locXL_(Gtk::manage(new Adjuster(M("TP_LOCAL_WIDTH_L"), 0, 2250, 1, 250))), locY_(Gtk::manage(new Adjuster(M("TP_LOCAL_HEIGHT"), 0, 2250, 1, 250))), @@ -102,10 +119,6 @@ ControlSpotPanel::ControlSpotPanel(): *this, &ControlSpotPanel::render_isvisible)); } - // TODO Reload saved control spots (don't forget autosize) - - // TODO Rectangle - Gtk::HBox* const ctboxshape = Gtk::manage(new Gtk::HBox()); Gtk::Label* const labelshape = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_SHAPETYPE") + ":")); ctboxshape->pack_start(*labelshape, Gtk::PACK_SHRINK, 4); @@ -131,6 +144,19 @@ ControlSpotPanel::ControlSpotPanel(): ctboxspotmethod->pack_start(*spotMethod_); pack_start(*ctboxspotmethod); + Gtk::Frame* const excluFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_EXCLUF"))); + excluFrame->set_label_align(0.025, 0.5); + excluFrame->set_tooltip_text(M("TP_LOCALLAB_EXCLUF_TOOLTIP")); + ToolParamBlock* const excluBox = Gtk::manage(new ToolParamBlock()); + sensiexclu_->set_tooltip_text(M("TP_LOCALLAB_SENSIEXCLU_TOOLTIP")); + sensiexclu_->setAdjusterListener(this); + excluBox->pack_start(*sensiexclu_); + struc_->set_tooltip_text(M("TP_LOCALLAB_STRUC_TOOLTIP")); + struc_->setAdjusterListener(this); + // excluBox->pack_start(*struc_); // Uncomment this line to use the struc_ adjuster + excluFrame->add(*excluBox); + pack_start(*excluFrame); + Gtk::HBox* const ctboxshapemethod = Gtk::manage(new Gtk::HBox()); Gtk::Label* const labelshapemethod = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_STYPE") + ":")); ctboxshapemethod->pack_start(*labelshapemethod, Gtk::PACK_SHRINK, 4); @@ -306,37 +332,6 @@ void ControlSpotPanel::on_button_rename() } } -// TODO Locallab To be deleted (not used) -void ControlSpotPanel::save_ControlSpot_param() -{ - printf("save_ControlSpot_param\n"); - // Get selected control spot - const auto s = treeview_.get_selection(); - - if (!s->count_selected_rows()) { - return; - } - - const auto iter = s->get_selected(); - const Gtk::TreeModel::Row row = *iter; - - // Save param in selected control spot - row[spots_.shape] = shape_->get_active_row_number(); - row[spots_.spotMethod] = spotMethod_->get_active_row_number(); - row[spots_.shapeMethod] = shapeMethod_->get_active_row_number(); - row[spots_.locX] = static_cast(locX_->getValue()); - row[spots_.locXL] = static_cast(locXL_->getValue()); - row[spots_.locY] = static_cast(locY_->getValue()); - row[spots_.locYT] = static_cast(locYT_->getValue()); - row[spots_.centerX] = static_cast(centerX_->getValue()); - row[spots_.centerY] = static_cast(centerY_->getValue()); - row[spots_.circrad] = static_cast(circrad_->getValue()); - row[spots_.qualityMethod] = qualityMethod_->get_active_row_number(); - row[spots_.transit] = static_cast(transit_->getValue()); - row[spots_.thresh] = static_cast(thresh_->getValue()); - row[spots_.iter] = static_cast(iter_->getValue()); -} - void ControlSpotPanel::load_ControlSpot_param() { printf("load_ControlSpot_param\n"); @@ -353,6 +348,8 @@ void ControlSpotPanel::load_ControlSpot_param() // Load param in selected control spot shape_->set_active(row[spots_.shape]); spotMethod_->set_active(row[spots_.spotMethod]); + sensiexclu_->setValue(static_cast(row[spots_.sensiexclu])); + struc_->setValue(static_cast(row[spots_.struc])); shapeMethod_->set_active(row[spots_.shapeMethod]); locX_->setValue(static_cast(row[spots_.locX])); locXL_->setValue(static_cast(row[spots_.locXL])); @@ -540,6 +537,22 @@ void ControlSpotPanel::adjusterChanged(Adjuster* a, double newval) const auto iter = s->get_selected(); Gtk::TreeModel::Row row = *iter; + if (a == sensiexclu_) { + row[spots_.sensiexclu] = (int) sensiexclu_->getValue(); + + if (listener) { + listener->panelChanged(EvLocallabSpotSensiexclu, sensiexclu_->getTextValue()); + } + } + + if (a == struc_) { + row[spots_.struc] = (int) struc_->getValue(); + + if (listener) { + listener->panelChanged(EvLocallabSpotStruc, struc_->getTextValue()); + } + } + if (a == locX_) { row[spots_.locX] = (int) locX_->getValue(); @@ -663,6 +676,8 @@ void ControlSpotPanel::disableParamlistener(bool cond) buttonrenameconn_.block(cond); shapeconn_.block(cond); spotMethodconn_.block(cond); + sensiexclu_->block(cond); + struc_->block(cond); shapeMethodconn_.block(cond); locX_->block(cond); locXL_->block(cond); @@ -682,6 +697,8 @@ void ControlSpotPanel::setParamEditable(bool cond) printf("setParamEditable: %d\n", cond); shape_->set_sensitive(cond); spotMethod_->set_sensitive(cond); + sensiexclu_->set_sensitive(cond); + struc_->set_sensitive(cond); shapeMethod_->set_sensitive(cond); locX_->set_sensitive(cond); locXL_->set_sensitive(cond); @@ -1311,6 +1328,8 @@ ControlSpotPanel::SpotRow* ControlSpotPanel::getSpot(int id) r->isvisible = row[spots_.isvisible]; r->shape = row[spots_.shape]; r->spotMethod = row[spots_.spotMethod]; + r->sensiexclu = row[spots_.sensiexclu]; + r->struc = row[spots_.struc]; r->shapeMethod = row[spots_.shapeMethod]; r->locX = row[spots_.locX]; r->locXL = row[spots_.locXL]; @@ -1417,6 +1436,8 @@ void ControlSpotPanel::addControlSpot(SpotRow* newSpot) row[spots_.curveid] = 0; // No associated curve row[spots_.shape] = newSpot->shape; row[spots_.spotMethod] = newSpot->spotMethod; + row[spots_.sensiexclu] = newSpot->sensiexclu; + row[spots_.struc] = newSpot->struc; row[spots_.shapeMethod] = newSpot->shapeMethod; row[spots_.locX] = newSpot->locX; row[spots_.locXL] = newSpot->locXL; @@ -1455,6 +1476,8 @@ int ControlSpotPanel::updateControlSpot(SpotRow* spot) row[spots_.isvisible] = spot->isvisible; row[spots_.shape] = spot->shape; row[spots_.spotMethod] = spot->spotMethod; + row[spots_.sensiexclu] = spot->sensiexclu; + row[spots_.struc] = spot->struc; row[spots_.shapeMethod] = spot->shapeMethod; row[spots_.locX] = spot->locX; row[spots_.locXL] = spot->locXL; @@ -1521,6 +1544,8 @@ ControlSpotPanel::SpotEdited* ControlSpotPanel::getEditedStates() se->isvisible = false; // TODO isvisible se->shape = shape_->get_active_row_number() != 2; se->spotMethod = spotMethod_->get_active_row_number() != 2; + se->sensiexclu = sensiexclu_->getEditedState(); + se->struc = struc_->getEditedState(); se->shapeMethod = shapeMethod_->get_active_row_number() != 4; se->locX = locX_->getEditedState(); se->locXL = locXL_->getEditedState(); @@ -1559,6 +1584,9 @@ void ControlSpotPanel::setEditedStates(SpotEdited* se) spotMethod_->set_active(2); } + sensiexclu_->setEditedState(se->sensiexclu ? Edited : UnEdited); + struc_->setEditedState(se->struc ? Edited : UnEdited); + if (!se->shapeMethod) { shapeMethod_->set_active(4); } @@ -1595,6 +1623,8 @@ ControlSpotPanel::ControlSpots::ControlSpots() add(curveid); add(shape); add(spotMethod); + add(sensiexclu); + add(struc); add(shapeMethod); add(locX); add(locXL); diff --git a/rtgui/controlspotpanel.h b/rtgui/controlspotpanel.h index 831b69e94..4e6dc159d 100644 --- a/rtgui/controlspotpanel.h +++ b/rtgui/controlspotpanel.h @@ -1,5 +1,21 @@ /* * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + * 2018 Pierre Cabrera */ #ifndef _CONTROLSPOTPANEL_H_ @@ -20,13 +36,17 @@ class ControlSpotPanel: public FoldableToolPanel { public: - /** A SpotRow structure allows exchanges from and to ControlSpotClass */ + /** + * A SpotRow structure allows exchanges from and to ControlSpotClass + */ struct SpotRow { int id; // Control spot id Glib::ustring name; bool isvisible; int shape; // 0 = Ellipse, 1 = Rectangle int spotMethod; // 0 = Normal, 1 = Excluding + int sensiexclu; + int struc; int shapeMethod; // 0 = Independent (mouse), 1 = Symmetrical (mouse), 2 = Independent (mouse + sliders), 3 = Symmetrical (mouse + sliders) int locX; int locXL; @@ -41,7 +61,9 @@ public: int iter; }; - /** A SpotEdited structure allows exchanges of spot panel widgets edited states from and to ControlSpotClass */ + /** + * A SpotEdited structure allows exchanges of spot panel widgets edited states from and to ControlSpotClass + */ struct SpotEdited { bool addbutton; bool deletebutton; @@ -50,6 +72,8 @@ public: bool isvisible; bool shape; bool spotMethod; + bool sensiexclu; + bool struc; bool shapeMethod; bool locX; bool locXL; @@ -65,30 +89,94 @@ public: }; // Constructor and management functions + /** + * Default constructor of ControlSpotPanel class + */ ControlSpotPanel(); + /** + * Implementation of setEditProvider function of toolpanel.h + * + * @param provider The EditDataProvider to be linked to the panel to manage curves + */ void setEditProvider(EditDataProvider* provider); + /** + * Getter of the event type raised by this panel + * + * @return The raised event type (0 = No event, 1 = Spot creation event, 2 = Spot deletion event, 3 = Spot selection event) + */ int getEventType(); + /** + * Getter of params of associated spot + * + * @param id The spot id to get params + * @return A SpotRow structure containing params of associated spot + */ SpotRow* getSpot(int id); + /** + * Get of spot id list + * + * @return A vector contening the list of spot id + */ std::vector* getSpotIdList(); + /** + * Getter of selected spot id + * + * @return The id of selected spot in treeview (return 0 if no selected spot) + */ int getSelectedSpot(); + /** + * Setter of selected spot + * + * @param id The id of spot to be selected + */ void setSelectedSpot(int id); // Control spot creation functions + /** + * Getter of available id for new spot creation + * + * @return An available id (i.e. max existing ones + 1) + */ int getNewId(); + /** + * Add a new spot (and its associated curve) + * + * @param newSpot A SpotRow structure containing new spot params + */ void addControlSpot(SpotRow* newSpot); // Control spot update function + /** + * Update a spot (and its associated curve) + * + * @param spot A SpotRow structure containing spot params to update + */ int updateControlSpot(SpotRow* spot); // Control spot delete function + /** + * Delete a spot (and its associated curve) + * + * @param id The id of the spot to be deleted + */ void deleteControlSpot(int id); // Panel widgets edited states management functions + /** + * Getter of panel widgets edited states + * + * @return A SpotEdited structure containing the widgets edited states + */ SpotEdited* getEditedStates(); + /** + * Setter of panel widgets edited states + * + * @param se A SpotEdited structure containing the widgets edidted states to update + */ void setEditedStates(SpotEdited* se); private: - // cell renderer + // Cell renderer void render_id(Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter); void render_name(Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter); void render_isvisible(Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter); @@ -99,7 +187,6 @@ private: // TODO Add visibility button // TODO Add duplication button - void save_ControlSpot_param(); void load_ControlSpot_param(); void controlspotChanged(); @@ -134,6 +221,8 @@ private: Gtk::TreeModelColumn curveid; // Associated curve id Gtk::TreeModelColumn shape; // 0 = Ellipse, 1 = Rectangle Gtk::TreeModelColumn spotMethod; // 0 = Normal, 1 = Excluding + Gtk::TreeModelColumn sensiexclu; + Gtk::TreeModelColumn struc; Gtk::TreeModelColumn shapeMethod; // 0 = Independent (mouse), 1 = Symmetrical (mouse), 2 = Independent (mouse + sliders), 3 = Symmetrical (mouse + sliders) Gtk::TreeModelColumn locX; Gtk::TreeModelColumn locXL; @@ -184,6 +273,8 @@ private: MyComboBoxText* const qualityMethod_; sigc::connection qualityMethodconn_; + Adjuster* const sensiexclu_; + Adjuster* const struc_; Adjuster* const locX_; Adjuster* const locXL_; Adjuster* const locY_; @@ -195,6 +286,7 @@ private: Adjuster* const thresh_; Adjuster* const iter_; + // Internal variables int lastObject_; rtengine::Coord* lastCoord_; diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index c5688a36b..6c6df1868 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -17,9 +17,9 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . * 2017 Jacques Desmis + * 2018 Pierre Cabrera */ - #include "locallab.h" #include "rtimage.h" #include @@ -31,22 +31,20 @@ #include #include #include "../rtengine/improcfun.h" -#include "eventmapper.h" #define MINCHRO 0. #define MAXCHRO 150 -#define CENTERCHRO 10 #define MAXCHROCC 100 - using namespace rtengine; extern Options options; - Locallab::Locallab(): FoldableToolPanel(this, "locallab", M("TP_LOCALLAB_LABEL"), false, true), - lastObject(-1), + + // Expander widgets + expsettings(new ControlSpotPanel()), expcolor(new MyExpander(true, M("TP_LOCALLAB_COFR"))), expexpose(new MyExpander(true, M("TP_LOCALLAB_EXPOSE"))), expvibrance(new MyExpander(true, M("TP_LOCALLAB_VIBRANCE"))), @@ -56,311 +54,149 @@ Locallab::Locallab(): expsharp(new MyExpander(true, M("TP_LOCALLAB_SHARP"))), expcbdl(new MyExpander(true, M("TP_LOCALLAB_CBDL"))), expdenoi(new MyExpander(true, M("TP_LOCALLAB_DENOIS"))), - expsettings(new ControlSpotPanel()), - LocalcurveEditorgainT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONGAIN"))), - LocalcurveEditorgainTrab(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONGAINRAB"))), + // CurveEditorGroup widgets + // Color & Light llCurveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_LUM"))), + // Exposure + curveEditorG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_CURVEEDITOR_TONES_LABEL"))), + // Vibrance + curveEditorGG(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL"))), + // Retinex + LocalcurveEditorgainT(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_TRANSMISSIONGAIN"))), - - anbspot(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ANBSPOT"), 0, 1, 1, 0))), - locX(Gtk::manage(new Adjuster(M("TP_LOCAL_WIDTH"), 0, 2250, 1, 250))), - locXL(Gtk::manage(new Adjuster(M("TP_LOCAL_WIDTH_L"), 0, 2250, 1, 250))), - degree(Gtk::manage(new Adjuster(M("TP_LOCAL_DEGREE"), -180, 180, 1, 0))), - locY(Gtk::manage(new Adjuster(M("TP_LOCAL_HEIGHT"), 0, 2250, 1, 250))), - locYT(Gtk::manage(new Adjuster(M("TP_LOCAL_HEIGHT_T"), 0, 2250, 1, 250))), - centerX(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CENTER_X"), -1000, 1000, 1, 0))), - centerY(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CENTER_Y"), -1000, 1000, 1, 0))), - circrad(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CIRCRADIUS"), 2, 150, 1, 18))), - sensiexclu(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIEXCLU"), 0, 100, 1, 19))), - struc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUC"), 0, 5, 1, 0))), - thres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_THRES"), 1, 35, 1, 18))), - proxi(Gtk::manage(new Adjuster(M("TP_LOCALLAB_PROXI"), 0, 60, 1, 0))), + // Adjuster widgets + // Color & Light lightness(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LIGHTNESS"), -100, 100, 1, 0))), contrast(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTRAST"), -100, 100, 1, 0))), chroma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMA"), -100, 150, 1, 0))), sensi(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), + // Exposure expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), -200, 200, 5, 0))), hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 20))), hlcomprthresh(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD"), 0, 100, 1, 33))), black(Gtk::manage(new Adjuster(M("TP_EXPOSURE_BLACKLEVEL"), -16384, 32768, 50, 0))), shcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRSHADOWS"), 0, 100, 1, 50))), + warm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WARM"), -100., 100., 1., 0., Gtk::manage(new RTImage("ajd-wb-bluered1.png")), Gtk::manage(new RTImage("ajd-wb-bluered2.png"))))), sensiex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), + // Vibrance + saturated(Gtk::manage(new Adjuster(M("TP_VIBRANCE_SATURATED"), -100., 100., 1., 0.))), + pastels(Gtk::manage(new Adjuster(M("TP_VIBRANCE_PASTELS"), -100., 100., 1., 0.))), + sensiv(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), + // Blur & Noise radius(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADIUS"), 1, 100, 1, 1))), strength(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRENGTH"), 0, 100, 1, 0))), sensibn(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIBN"), 0, 100, 1, 40))), - transit(Gtk::manage(new Adjuster(M("TP_LOCALLAB_TRANSIT"), 5, 95, 1, 60))), + // Tone Mapping stren(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STREN"), -50, 100, 1, 0))), gamma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAM"), 80, 150, 1, 100))), estop(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ESTOP"), 10, 400, 1, 140))), scaltm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SCALTM"), 1, 100, 1, 10))), rewei(Gtk::manage(new Adjuster(M("TP_LOCALLAB_REWEI"), 0, 9, 1, 0))), sensitm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), + // Retinex str(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STR"), 0, 100, 1, 0))), + chrrt(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHRRT"), 0, 100, 1, 0))), neigh(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NEIGH"), 14, 150, 1, 50))), vart(Gtk::manage(new Adjuster(M("TP_LOCALLAB_VART"), 50, 500, 1, 200))), - chrrt(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHRRT"), 0, 100, 1, 0))), sensih(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIH"), 0, 100, 1, 19))), - retrab(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RETRAB"), 0, 10000, 1, 500))), - chromacbdl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMACBDL"), 0, 300, 1, 0))), - threshold(Gtk::manage(new Adjuster(M("TP_DIRPYREQUALIZER_THRESHOLD"), 0, 100, 1, 20))), - sensicb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSICB"), 0, 100, 1, 19))), + // Sharpening sharradius(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARRADIUS"), 42, 500, 1, 4))), sharamount(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARAMOUNT"), 0, 100, 1, 75))), shardamping(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARDAMPING"), 0, 100, 1, 75))), shariter(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SHARITER"), 5, 100, 1, 30))), sensisha(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIS"), 0, 100, 1, 19))), + // Contrast by detail levels + chromacbdl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMACBDL"), 0, 300, 1, 0))), + threshold(Gtk::manage(new Adjuster(M("TP_DIRPYREQUALIZER_THRESHOLD"), 0, 100, 1, 20))), + sensicb(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSICB"), 0, 100, 1, 19))), + // Denoise + noiselumf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINE"), MINCHRO, MAXCHRO, 1, 0))), + noiselumc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMCOARSE"), MINCHRO, MAXCHROCC, 1, 0))), noiselumdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMDETAIL"), 0, 100, 1, 0))), + noiselequal(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELEQUAL"), -2, 10, 1, 7, Gtk::manage(new RTImage("adj-white.png")), Gtk::manage(new RTImage("adj-black.png"))))), + noisechrof(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROFINE"), MINCHRO, MAXCHRO, 1, 0))), + noisechroc(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROCOARSE"), MINCHRO, MAXCHROCC, 1, 0))), noisechrodetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHRODETAIL"), 0, 100, 1, 0))), + adjblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJ"), -100., 100., 1., 0., Gtk::manage(new RTImage("ajd-wb-bluered1.png")), Gtk::manage(new RTImage("ajd-wb-bluered2.png"))))), bilateral(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BILATERAL"), 0, 100, 1, 0))), sensiden(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIDEN"), 0, 100, 1, 30))), - hueref(Gtk::manage(new Adjuster(M("TP_LOCALLAB_HUEREF"), -3.15, 3.15, 0.01, 0))), - huerefblur(Gtk::manage(new Adjuster(M("TP_LOCALLAB_HUEREFBLUR"), -3.15, 3.15, 0.01, 0))), - chromaref(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMAREF"), 0, 200, 0.01, 0))), - lumaref(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LUMAMAREF"), 0, 100, 0.01, 0))), - sobelref(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOBELREF"), 0, 100, 0.01, 0))), - centerXbuf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CENTERBUF_X"), -1000, 1000, 1, 0))), - centerYbuf(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CENTERBUF_Y"), -1000, 1000, 1, 0))), - shapemethod(Gtk::manage(new MyComboBoxText())), - Smethod(Gtk::manage(new MyComboBoxText())), - Exclumethod(Gtk::manage(new MyComboBoxText())), - - retinexMethod(Gtk::manage(new MyComboBoxText())), - qualityMethod(Gtk::manage(new MyComboBoxText())), - qualitycurveMethod(Gtk::manage(new MyComboBoxText())), - blurMethod(Gtk::manage(new MyComboBoxText())), - dustMethod(Gtk::manage(new MyComboBoxText())), - - shapeFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHFR")))), - superFrame(Gtk::manage(new Gtk::Frame())), - dustFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DUST")))), - wavFrame(Gtk::manage(new Gtk::Frame())), - - - labmdh(Gtk::manage(new Gtk::Label(M("TP_LOCRETI_METHOD") + ":"))), - labqualcurv(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_QUALCURV_METHOD") + ":"))), - labmS(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_STYPE") + ":"))), - labmEx(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_EXCLUTYPE") + ":"))), - labmshape(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_SHAPETYPE") + ":"))), - - dhbox(Gtk::manage(new Gtk::HBox())), - qualcurvbox(Gtk::manage(new Gtk::HBox())), - - avoid(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_AVOID")))), - activlum(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ACTIV")))), - invers(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), + // ButtonCheck widgets + // Color & Light curvactiv(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_CURV")))), - inversrad(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), + invers(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), + // Vibrance + protectSkins(Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_PROTECTSKINS")))), + avoidColorShift(Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_AVOIDCOLORSHIFT")))), + pastSatTog(Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_PASTSATTOG")))), + // Blur & Noise + activlum(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_ACTIV")))), + // Retinex inversret(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), + // Sharpening inverssha(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_INVERS")))), - cutpast(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_CUTPAST")))), - lastdust(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LASTDUST")))) + // Others + avoid(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_AVOID")))), + // ComboBox widgets + // Color & Light + qualitycurveMethod(Gtk::manage(new MyComboBoxText())), + // Blur & Noise + blurMethod(Gtk::manage(new MyComboBoxText())), + // Retinex + retinexMethod(Gtk::manage(new MyComboBoxText())), + + // ThresholdAdjuster widgets + // Vibrance + psThreshold(Gtk::manage(new ThresholdAdjuster(M("TP_VIBRANCE_PSTHRESHOLD"), -100., 100., 0., M("TP_VIBRANCE_PSTHRESHOLD_WEIGTHING"), 0, 0., 100., 75., M("TP_VIBRANCE_PSTHRESHOLD_SATTHRESH"), 0, this, false))), + + // Other widgets + labqualcurv(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_QUALCURV_METHOD") + ":"))), + lumacontrastMinusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS")))), + lumaneutralButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMANEUTRAL")))), + lumacontrastPlusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS")))) { + ToolVBox* const panel = Gtk::manage(new ToolVBox()); + CurveListener::setMulti(true); - ProcParams params; - - auto m = ProcEventMapper::getInstance(); - EvLocenacolor = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCENACOLOR");//548 - EvLocenaexpose = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCENAEXPOSE");//572 - EvLocenavibrance = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCENAVIBR");//563 - EvLocenablur = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCENABLUR");//549 - EvLocenatonemap = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCENATM");//550 - EvLocenareti = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCENARETI");//551 - EvLocenasharp = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCENASHARP");//552 - EvLocenacbdl = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCENACBDL");//553 - EvLocenadenoi = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCENADENOI");//554 - - EvlocallablocX = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCLOCX"); //= 494, - EvlocallabCenter = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCENTER"); //= 495, - EvlocallabDegree = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCDEGRE"); //= 496, - Evlocallablightness = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCLIGHT"); //= 497, - Evlocallabcontrast = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCONTRA"); //= 498, - Evlocallabchroma = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCHROMA"); //= 499, - Evlocallabtransit = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCTRANSIT"); //= 500, - Evlocallabavoid = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCAVOID"); //= 501, - EvlocallablocYT = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCLOCYT"); // = 502, - EvlocallablocXL = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCXL"); //= 503, - EvlocallabSmet = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSMET"); //= 504, - Evlocallabinvers = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCINVERS"); //= 505, - Evlocallabradius = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCRADIUS"); //= 506, - Evlocallabinversrad = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCINVRAD"); //= 507, - Evlocallabstrength = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSTRENGTH"); //= 508, - Evlocallabsensi = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSENSI"); //= 509, - EvlocallabretinexMethod = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCRETIMETH");//510 - Evlocallabstr = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCRETISTR");//= 511, - Evlocallabneigh = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCRETINEIGH");//= 512, - Evlocallabvart = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCRETIVART");//= 513, - EvlocallabCTgainCurve = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCRETIGAINCURV");//= 514, - Evlocallabchrrt = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCHRRT");//= 515, - Evlocallabinversret = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCINVRET");//= 516, - Evlocallabsensih = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSENSIH");//= 517, - Evlocallabnbspot = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCNBSPOT");//= 518, - Evlocallabactivlum = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCACTIVLUM");//= 519, - Evlocallabanbspot = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCANBSPOT");//= 520, - Evlocallabsharradius = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSHARADIUS");//= 521, - Evlocallabsharamount = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSHAAMOUNT");//= 522, - Evlocallabshardamping = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSHADAMPING");//= 523, - Evlocallabshariter = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSHAITER");//= 524, - Evlocallabsensis = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSENSIS");//= 525, - Evlocallabinverssha = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCINVSHA");//= 526, - Evlocallabcircrad = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCIRCRAD");//= 527, - Evlocallabthres = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCTHRES");//= 528, - Evlocallabproxi = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCPROXI");//= 529, - EvlocallabqualityMethod = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCQUALMETH");//= 530, - Evlocallabnoiselumf = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCNOISLUMF");//= 531, - Evlocallabnoiselumc = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCNOISLUMC");//= 532, - Evlocallabnoisechrof = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCNOISCHROF");//= 533, - Evlocallabnoisechroc = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCNOISCHROC");//= 534, - EvlocallabThresho = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCBDLTHRESHO");//= 535, - EvlocallabEqualizer = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCBDLEQUALIZ");//= 536, - Evlocallabsensicb = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSENSICB");//= 537, - Evlocallabsensibn = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSENSIBN");//= 538, - Evlocallabstren = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSTREN");//= 539, - Evlocallabgamma = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCGAMM");//= 540, - Evlocallabestop = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCESTOP");//= 541, - Evlocallabscaltm = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSCALTM");//= 542, - Evlocallabrewei = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCREWEI");//= 543, - Evlocallabsensitm = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSENSITM");//= 544, - EvlocallabCTgainCurverab = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCGAINCURRAB");//= 545, - Evlocallabretrab = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCRETRAB");//= 546, - Evlocallabllshape = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCLSHAPE");//= 547, - EvlocallabLHshape = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCLHSHAPE");// = 555, - Evlocallabcurvactiv = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCURVACTIV");// = 556, - Evlocallabccshape = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCCSHAPE");// = 557, - EvlocallabqualitycurveMethod = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCQUALCURVMETH");// = 558, - Evlocallabhueref = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCHUEREF");// = 559, - Evlocallabchromaref = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCHROMAREF");// = 560, - Evlocallablumaref = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCLUMAREF");// = 561, - EvlocallabHHshape = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCHHSHAPE");// = 562, - EvlocallabSkinTonesCurve = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSKINTONCURV");// = 564, - EvlocallabProtectSkins = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCPROTSKIN");// = 565, - EvlocallabAvoidColorShift = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCAVOIDCOLORSHIFT");// = 566, - EvlocallabPastSatTog = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCPASTSATTOG");// = 567, - EvlocallabPastels = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCPASTEL");// = 568, - EvlocallabSaturated = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSATUR");// = 569, - EvlocallabPastSatThreshold = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCPASTSATTHRES");// = 570, - Evlocallabsensiv = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSENSIV");// = 571, - Evlocallabexpcomp = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCEXPCOMP");// = 573, - Evlocallabhlcompr = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCHLCOMPR");// = 574, - Evlocallabhlcomprthresh = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCHLCOMPRTHRESH");// = 575, - Evlocallabblack = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCBLACK");// = 576, - Evlocallabshcompr = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSHCOMPR");// = 577, - Evlocallabsensiex = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSENSIEX");// = 578, - Evlocallabshapeexpos = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSHAPE");// = 579, - EvlocallabCenterbuf = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCENTERBUF");// = 580, - Evlocallabadjblur = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCNOISEEQUALBLURED");// = 581, - Evlocallabcutpast = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCUTPAST");// = 582, - Evlocallabchromacbdl = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCCHROCBDL");// = 583, - EvlocallabblurMethod = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCBLURMETH"); //584 - EvlocallabdustMethod = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCDUSTMETH");// = 585, - Evlocallablastdust = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCLASTDUST");// = 586, - Evlocallabsobelref = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSOBELREF");// = 587, - Evlocallabexclumethod = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCEXCLUMETH");// = 588, - Evlocallabsensiexclu = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSENSIEXCL");// = 589, - Evlocallabstruc = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSTRUC");// = 590, - Evlocallabwarm = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCWARM");// = 591, - Evlocallabnoiselumdetail = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCNOISELUMDETAIL");// = 592, - Evlocallabnoisechrodetail = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCNOISECHRODETAIL");// = 593, - Evlocallabsensiden = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSENSIDEN");// = 594, - Evlocallabhuerefblur = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCHUEREFBLUR");// = 595, - EvlocallabEnabled = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCENABLED");// = 596, - EvlocallablocY = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCLOCY");// = 597, - Evlocallabbilateral = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCBILATERAL");// = 598, - Evlocallabnoiselequal = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCNOISELEQUAL");// = 599, - Evlocallabshapemethod = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSHAPEMETH");// = 600, - Evlocallabspotduplicated = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_LOCSPOTDUP");// = 601 - Evlocallabspotcreated = m->newEvent(LUMINANCECURVE, "Spot creation");// = 602 - - int realnbspot; - - - realnbspot = options.rtSettings.nspot; - nbspot = Gtk::manage(new Adjuster(M("TP_LOCALLAB_NBSPOT"), 1, realnbspot, 1, 1)); - - if (options.rtSettings.locdelay) { - - if (nbspot->delay < 200) { - nbspot->delay = 200; - } - } - - const LocallabParams default_params; - - shapeFrame->set_label_align(0.025, 0.5); + std::vector milestones; + float R, G, B; + // Settings expsettings->getExpander()->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expsettings->getExpander())); + expsettings->setLevel(2); + panel->pack_start(*expsettings->getExpander(), false, false); + + // Color & Light expcolor->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expcolor)); enablecolorConn = expcolor->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expcolor)); - expexpose->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expexpose)); - enableexposeConn = expexpose->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expexpose)); + curvactivConn = curvactiv->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::curvactivChanged)); - expvibrance->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expvibrance)); - enablevibranceConn = expvibrance->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expvibrance)); + lightness->setAdjusterListener(this); - expblur->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expblur)); - enableblurConn = expblur->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expblur)); + contrast->setAdjusterListener(this); - exptonemap->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), exptonemap)); - enabletonemapConn = exptonemap->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), exptonemap)); + chroma->setAdjusterListener(this); - expreti->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expreti)); - enableretiConn = expreti->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expreti)); - - expsharp->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expsharp)); - enablesharpConn = expsharp->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expsharp)); - - expcbdl->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expcbdl)); - enablecbdlConn = expcbdl->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expcbdl)); - - expdenoi->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expdenoi)); - enabledenoiConn = expdenoi->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expdenoi)); - - shapemethod->append(M("TP_LOCALLAB_ELI")); - shapemethod->append(M("TP_LOCALLAB_RECT")); - shapemethod->set_active(0); - Exclumethod->append(M("TP_LOCALLAB_EXNORM")); - Exclumethod->append(M("TP_LOCALLAB_EXECLU")); - Exclumethod->set_active(0); - - struc->set_tooltip_text(M("TP_LOCALLAB_STRUC_TOOLTIP")); - struc->setAdjusterListener(this); - - Smethod->append(M("TP_LOCALLAB_IND")); - Smethod->append(M("TP_LOCALLAB_SYM")); - Smethod->append(M("TP_LOCALLAB_INDSL")); - Smethod->append(M("TP_LOCALLAB_SYMSL")); - Smethod->set_active(0); - qualityMethod->append(M("TP_LOCALLAB_STD")); - qualityMethod->append(M("TP_LOCALLAB_ENH")); - qualityMethod->append(M("TP_LOCALLAB_ENHDEN")); - qualityMethod->set_active(0); - - std::vector milestones; - std::vector defaultCurve; - std::vector defaultCurve2; - std::vector defaultCurve2rab; - std::vector defaultCurve3; - std::vector defaultCurve4; - std::vector defaultCurve5; - - irg = Gtk::manage(new RTImage("Chanmixer-RG.png")); + sensi->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); + sensi->setAdjusterListener(this); qualitycurveMethod->append(M("TP_LOCALLAB_CURVNONE")); qualitycurveMethod->append(M("TP_LOCALLAB_CURVCURR")); qualitycurveMethod->append(M("TP_LOCALLAB_CURVENH")); qualitycurveMethod->set_active(0); - qualitycurveMethodConn = qualitycurveMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::qualitycurveMethodChanged)); qualitycurveMethod->set_tooltip_markup(M("TP_LOCALLAB_CURVEMETHOD_TOOLTIP")); + qualitycurveMethodConn = qualitycurveMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::qualitycurveMethodChanged)); llCurveEditorG->setCurveListener(this); llshape = static_cast(llCurveEditorG->addCurve(CT_Diagonal, "L(L)")); llshape->setResetCurve(DCT_NURBS, {(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}); llshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); + milestones.clear(); milestones.push_back(GradientMilestone(0., 0., 0., 0.)); milestones.push_back(GradientMilestone(1., 1., 1., 1.)); llshape->setBottomBarBgGradient(milestones); @@ -369,14 +205,15 @@ Locallab::Locallab(): ccshape = static_cast(llCurveEditorG->addCurve(CT_Diagonal, "C(C)")); ccshape->setResetCurve(DCT_NURBS, {(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}); ccshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); + milestones.clear(); milestones.push_back(GradientMilestone(0., 0., 0., 0.)); milestones.push_back(GradientMilestone(1., 1., 1., 1.)); ccshape->setBottomBarBgGradient(milestones); ccshape->setLeftBarBgGradient(milestones); + llCurveEditorG->newLine(); LHshape = static_cast(llCurveEditorG->addCurve(CT_Flat, "L(H)", nullptr, false, true)); - LHshape->setIdentityValue(0.); LHshape->setResetCurve(FCT_MinMaxCPoints, {(double)FCT_MinMaxCPoints, 0.0, 0.50, 0.35, 0.35, 0.166, 0.50, 0.35, 0.35, 0.333, 0.50, 0.35, 0.35, 0.50, 0.50, 0.35, 0.35, 0.666, 0.50, 0.35, 0.35, 0.833, 0.50, 0.35, 0.35}); LHshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); @@ -384,7 +221,6 @@ Locallab::Locallab(): milestones.clear(); for (int i = 0; i < 7; i++) { - float R, G, B; float x = float (i) * (1.0f / 6.0); Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B); milestones.push_back(GradientMilestone(double (x), double (R), double (G), double (B))); @@ -392,9 +228,7 @@ Locallab::Locallab(): LHshape->setBottomBarBgGradient(milestones); - HHshape = static_cast(llCurveEditorG->addCurve(CT_Flat, "H(H)", nullptr, false, true)); - HHshape->setIdentityValue(0.); HHshape->setResetCurve(FCT_MinMaxCPoints, {(double)FCT_MinMaxCPoints, 0.0, 0.50, 0.35, 0.35, 0.166, 0.50, 0.35, 0.35, 0.333, 0.50, 0.35, 0.35, 0.50, 0.50, 0.35, 0.35, 0.666, 0.50, 0.35, 0.35, 0.833, 0.50, 0.35, 0.35}); HHshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); @@ -402,7 +236,6 @@ Locallab::Locallab(): milestones.clear(); for (int i = 0; i < 7; i++) { - float R, G, B; float x = float (i) * (1.0f / 6.0); Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B); @@ -411,73 +244,166 @@ Locallab::Locallab(): HHshape->setBottomBarBgGradient(milestones); - llCurveEditorG->curveListComplete(); - lightness->setAdjusterListener(this); - contrast->setAdjusterListener(this); - /* - Gtk::Image* iblueredL = Gtk::manage(new RTImage("ajd-wb-bluered1.png")); - Gtk::Image* iblueredR = Gtk::manage(new RTImage("ajd-wb-bluered2.png")); + inversConn = invers->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversChanged)); - warm = Gtk::manage(new Adjuster(M("TP_LOCALLAB_WARM"), -100., 100., 1., 0., iblueredL, iblueredR)); - warm->setAdjusterListener(this); - */ - chroma->setAdjusterListener(this); + ToolParamBlock* const colorBox = Gtk::manage(new ToolParamBlock()); + Gtk::Frame* const superFrame = Gtk::manage(new Gtk::Frame()); + superFrame->set_label_align(0.025, 0.5); + superFrame->set_label_widget(*curvactiv); + ToolParamBlock* const superBox = Gtk::manage(new ToolParamBlock()); + superBox->pack_start(*lightness); + superBox->pack_start(*contrast); + superBox->pack_start(*chroma); + superFrame->add(*superBox); + colorBox->pack_start(*superFrame); + colorBox->pack_start(*sensi); + Gtk::HBox* const qualcurvbox = Gtk::manage(new Gtk::HBox()); + qualcurvbox->pack_start(*labqualcurv, Gtk::PACK_SHRINK, 4); + qualcurvbox->pack_start(*qualitycurveMethod); + colorBox->pack_start(*qualcurvbox); + colorBox->pack_start(*llCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + colorBox->pack_start(*invers); + expcolor->add(*colorBox); + expcolor->setLevel(2); - sensi->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); - sensi->setAdjusterListener(this); + panel->pack_start(*expcolor, false, false); - centerXbuf->setAdjusterListener(this);; - centerYbuf->setAdjusterListener(this);; -// adjblur->setAdjusterListener(this);; - -//exposure + // Exposure + expexpose->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expexpose)); + enableexposeConn = expexpose->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expexpose)); expcomp->setAdjusterListener(this); - hlcomprthresh->setAdjusterListener(this); - black->setAdjusterListener(this); + hlcompr->setAdjusterListener(this); + + hlcomprthresh->setAdjusterListener(this); + + black->setAdjusterListener(this); + shcompr->setAdjusterListener(this); + + warm->set_tooltip_text(M("TP_LOCALLAB_WARM_TOOLTIP")); + warm->setAdjusterListener(this); + sensiex->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); sensiex->setAdjusterListener(this); - Gtk::Image* iblueredL = Gtk::manage(new RTImage("ajd-wb-bluered1.png")); - Gtk::Image* iblueredR = Gtk::manage(new RTImage("ajd-wb-bluered2.png")); - warm = Gtk::manage(new Adjuster(M("TP_LOCALLAB_WARM"), -100., 100., 1., 0., iblueredL, iblueredR)); - warm->setAdjusterListener(this); - warm->set_tooltip_text(M("TP_LOCALLAB_WARM_TOOLTIP")); + curveEditorG->setCurveListener(this); + + shapeexpos = static_cast(curveEditorG->addCurve(CT_Diagonal, "")); + shapeexpos->setResetCurve(DCT_NURBS, {(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}); + shapeexpos->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_TONES_TOOLTIP")); + milestones.clear(); + milestones.push_back(GradientMilestone(0., 0., 0., 0.)); + milestones.push_back(GradientMilestone(1., 1., 1., 1.)); + shapeexpos->setBottomBarBgGradient(milestones); + shapeexpos->setLeftBarBgGradient(milestones); + + curveEditorG->curveListComplete(); + + ToolParamBlock* const exposeBox = Gtk::manage(new ToolParamBlock()); + exposeBox->pack_start(*expcomp); + exposeBox->pack_start(*hlcompr); + exposeBox->pack_start(*hlcomprthresh); + exposeBox->pack_start(*black); + exposeBox->pack_start(*shcompr); + exposeBox->pack_start(*warm); + exposeBox->pack_start(*sensiex); + exposeBox->pack_start(*curveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + expexpose->add(*exposeBox); + expexpose->setLevel(2); + + panel->pack_start(*expexpose, false, false); + + // Vibrance + expvibrance->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expvibrance)); + enablevibranceConn = expvibrance->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expvibrance)); + + saturated->setAdjusterListener(this); + + pastels->setAdjusterListener(this); + + psThreshold->set_tooltip_markup(M("TP_VIBRANCE_PSTHRESHOLD_TOOLTIP")); + psThreshold->setAdjusterListener(this); + + pskinsconn = protectSkins->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::protectskins_toggled)); + + ashiftconn = avoidColorShift->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::avoidcolorshift_toggled)); + + pastsattogconn = pastSatTog->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::pastsattog_toggled)); + + sensiv->setAdjusterListener(this); + + curveEditorGG->setCurveListener(this); + + skinTonesCurve = static_cast(curveEditorGG->addCurve(CT_Diagonal, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES"))); + skinTonesCurve->setTooltip(M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_TOOLTIP")); + milestones.clear(); + // -0.1 rad < Hue < 1.6 rad + Color::hsv2rgb01(0.92f, 0.45f, 0.6f, R, G, B); + milestones.push_back(GradientMilestone(0.0, double (R), double (G), double (B))); + Color::hsv2rgb01(0.14056f, 0.45f, 0.6f, R, G, B); + milestones.push_back(GradientMilestone(1.0, double (R), double (G), double (B))); + skinTonesCurve->setBottomBarBgGradient(milestones); + skinTonesCurve->setLeftBarBgGradient(milestones); + skinTonesCurve->setRangeLabels( + M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE1"), M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE2"), + M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE3"), M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE4") + ); + skinTonesCurve->setRangeDefaultMilestones(0.1, 0.4, 0.85); + + curveEditorGG->curveListComplete(); + + ToolParamBlock* const vibranceBox = Gtk::manage(new ToolParamBlock()); + vibranceBox->pack_start(*saturated, Gtk::PACK_SHRINK, 0); + vibranceBox->pack_start(*pastels, Gtk::PACK_SHRINK, 0); + vibranceBox->pack_start(*psThreshold, Gtk::PACK_SHRINK, 0); + vibranceBox->pack_start(*protectSkins, Gtk::PACK_SHRINK, 0); + vibranceBox->pack_start(*avoidColorShift, Gtk::PACK_SHRINK, 0); + vibranceBox->pack_start(*pastSatTog, Gtk::PACK_SHRINK, 0); + vibranceBox->pack_start(*sensiv, Gtk::PACK_SHRINK, 0); + vibranceBox->pack_start(*curveEditorGG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + expvibrance->add(*vibranceBox); + expvibrance->setLevel(2); + + panel->pack_start(*expvibrance, false, false); + + // Blur & Noise + expblur->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expblur)); + enableblurConn = expblur->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expblur)); radius->setAdjusterListener(this); - strength->setAdjusterListener(this); + strength->setAdjusterListener(this); sensibn->set_tooltip_text(M("TP_LOCALLAB_SENSIH_TOOLTIP")); sensibn->setAdjusterListener(this); - activlum->set_active(false); + blurMethod->append(M("TP_LOCALLAB_BLNORM")); + blurMethod->append(M("TP_LOCALLAB_BLINV")); + blurMethod->append(M("TP_LOCALLAB_BLSYM")); + blurMethod->set_active(0); + blurMethod->set_tooltip_markup(M("TP_LOCALLAB_BLMETHOD_TOOLTIP")); + blurMethodConn = blurMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::blurMethodChanged)); + activlumConn = activlum->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::activlumChanged)); - invers->set_active(false); - inversConn = invers->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversChanged)); + ToolParamBlock* const blurrBox = Gtk::manage(new ToolParamBlock()); + blurrBox->pack_start(*radius); + blurrBox->pack_start(*strength); + blurrBox->pack_start(*sensibn); + blurrBox->pack_start(*blurMethod); + blurrBox->pack_start(*activlum); + expblur->add(*blurrBox); + expblur->setLevel(2); - curvactiv->set_active(false); - curvactivConn = curvactiv->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::curvactivChanged)); + panel->pack_start(*expblur, false, false); - inversrad->set_active(false); - inversradConn = inversrad->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversradChanged)); - - inversret->set_active(false); - inversretConn = inversret->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversretChanged)); - - cutpast->set_active(false); - cutpastConn = cutpast->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::cutpastChanged)); - cutpast->set_tooltip_text(M("TP_LOCALLAB_CUTPAST_TOOLTIP")); -//tone mapping local - - lastdust->set_active(false); - lastdustConn = lastdust->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::lastdustChanged)); - lastdust->set_tooltip_text(M("TP_LOCALLAB_LASTDUST_TOOLTIP")); + // Tone Mapping + exptonemap->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), exptonemap)); + enabletonemapConn = exptonemap->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), exptonemap)); stren->setAdjusterListener(this); @@ -492,101 +418,97 @@ Locallab::Locallab(): sensitm->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); sensitm->setAdjusterListener(this); -//end TM + ToolParamBlock* const tmBox = Gtk::manage(new ToolParamBlock()); + tmBox->pack_start(*stren); + tmBox->pack_start(*gamma); + tmBox->pack_start(*estop); + tmBox->pack_start(*scaltm); + tmBox->pack_start(*rewei); + tmBox->pack_start(*sensitm); + exptonemap->add(*tmBox); + exptonemap->setLevel(2); + panel->pack_start(*exptonemap, false, false); -//retinex local - - dhbox->pack_start(*labmdh, Gtk::PACK_SHRINK, 1); + // Retinex + expreti->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expreti)); + enableretiConn = expreti->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expreti)); retinexMethod->append(M("TP_RETINEX_LOW")); retinexMethod->append(M("TP_RETINEX_UNIFORM")); retinexMethod->append(M("TP_RETINEX_HIGH")); retinexMethod->set_active(0); - retinexMethodConn = retinexMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::retinexMethodChanged)); retinexMethod->set_tooltip_markup(M("TP_LOCRETI_METHOD_TOOLTIP")); + retinexMethodConn = retinexMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::retinexMethodChanged)); str->setAdjusterListener(this); + neigh->setAdjusterListener(this); + vart->setAdjusterListener(this); + chrrt->setAdjusterListener(this); + sensih->set_tooltip_text(M("TP_LOCALLAB_SENSIH_TOOLTIP")); sensih->setAdjusterListener(this); - retrab->setAdjusterListener(this); - LocalcurveEditorgainT->setCurveListener(this); - cTgainshape = static_cast(LocalcurveEditorgainT->addCurve(CT_Flat, "", nullptr, false, false)); - cTgainshape->setIdentityValue(0.); cTgainshape->setResetCurve(FCT_MinMaxCPoints, {(double)FCT_MinMaxCPoints, 0.0, 0.12, 0.35, 0.35, 0.70, 0.50, 0.35, 0.35, 1.00, 0.12, 0.35, 0.35}); cTgainshape->setTooltip(M("TP_RETINEX_GAINTRANSMISSION_TOOLTIP")); - LocalcurveEditorgainTrab->setCurveListener(this); - - - - cTgainshaperab = static_cast(LocalcurveEditorgainTrab->addCurve(CT_Flat, "", nullptr, false, false)); - - - cTgainshaperab->setIdentityValue(0.); - // cTgainshaperab->setResetCurve(FlatCurveType(default_params.localTgaincurverab.at(0)), default_params.localTgaincurverab); - cTgainshaperab->setTooltip(M("TP_RETINEX_GAINTRANSMISSIONRAB_TOOLTIP")); - LocalcurveEditorgainT->curveListComplete(); - LocalcurveEditorgainT->show(); - LocalcurveEditorgainTrab->curveListComplete(); - LocalcurveEditorgainTrab->show(); + inversretConn = inversret->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversretChanged)); -// end reti - avoid->set_active(false); - avoidConn = avoid->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::avoidChanged)); - pack_start(*anbspot); + ToolParamBlock* const retiBox = Gtk::manage(new ToolParamBlock()); + retiBox->pack_start(*retinexMethod); + retiBox->pack_start(*str); + retiBox->pack_start(*chrrt); + retiBox->pack_start(*neigh); + retiBox->pack_start(*vart); + retiBox->pack_start(*sensih); + retiBox->pack_start(*LocalcurveEditorgainT, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + retiBox->pack_start(*inversret); + expreti->add(*retiBox); + expreti->setLevel(2); - hueref->setAdjusterListener(this); - huerefblur->setAdjusterListener(this); - chromaref->setAdjusterListener(this); - lumaref->setAdjusterListener(this); - sobelref->setAdjusterListener(this); + panel->pack_start(*expreti, false, false); - pack_start(*hueref); - pack_start(*huerefblur); - pack_start(*chromaref); - pack_start(*lumaref); - pack_start(*sobelref); + // Sharpening + expsharp->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expsharp)); + enablesharpConn = expsharp->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expsharp)); - anbspot->hide();//keep anbspot - i used it to test diffrent algo... - hueref->hide(); - huerefblur->hide(); - chromaref->hide(); - lumaref->hide(); - sobelref->hide(); + sharradius->setAdjusterListener(this); - // expsettings->add(*spotPanel); - expsettings->setLevel(2); - pack_start(*expsettings->getExpander()); + sharamount->setAdjusterListener(this); + shardamping->setAdjusterListener(this); + shariter->setAdjusterListener(this); - Gtk::HBox * buttonBox1 = Gtk::manage(new Gtk::HBox(true, 10)); + sensisha->set_tooltip_text(M("TP_LOCALLAB_SENSIS_TOOLTIP")); + sensisha->setAdjusterListener(this); - Gtk::Button * lumacontrastMinusButton = Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS"))); - buttonBox1->pack_start(*lumacontrastMinusButton); - lumacontrastMinusPressedConn = lumacontrastMinusButton->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::lumacontrastMinusPressed)); + inversshaConn = inverssha->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversshaChanged)); - Gtk::Button * lumaneutralButton = Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMANEUTRAL"))); - buttonBox1->pack_start(*lumaneutralButton); - lumaneutralPressedConn = lumaneutralButton->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::lumaneutralPressed)); + ToolParamBlock* const sharpBox = Gtk::manage(new ToolParamBlock()); + sharpBox->pack_start(*sharradius); + sharpBox->pack_start(*sharamount); + sharpBox->pack_start(*shardamping); + sharpBox->pack_start(*shariter); + sharpBox->pack_start(*sensisha); + sharpBox->pack_start(*inverssha); + expsharp->add(*sharpBox); + expsharp->setLevel(2); - Gtk::Button * lumacontrastPlusButton = Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS"))); - buttonBox1->pack_start(*lumacontrastPlusButton); - lumacontrastPlusPressedConn = lumacontrastPlusButton->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::lumacontrastPlusPressed)); - ToolParamBlock* const cbdlBox = Gtk::manage(new ToolParamBlock()); + panel->pack_start(*expsharp, false, false); - cbdlBox->pack_start(*buttonBox1); + // Contrast by detail levels + expcbdl->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expcbdl)); + enablecbdlConn = expcbdl->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expcbdl)); for (int i = 0; i < 5; i++) { Glib::ustring ss; @@ -600,388 +522,100 @@ Locallab::Locallab(): multiplier[i] = Gtk::manage(new Adjuster(ss, 0, 400, 1, 100)); multiplier[i]->setAdjusterListener(this); - cbdlBox->pack_start(*multiplier[i]); } - Gtk::HSeparator *separator3 = Gtk::manage(new Gtk::HSeparator()); - cbdlBox->pack_start(*separator3, Gtk::PACK_SHRINK, 2); - chromacbdl->set_tooltip_text(M("TP_LOCALLAB_CHROMACB_TOOLTIP")); - chromacbdl->setAdjusterListener(this); - cbdlBox->pack_start(*chromacbdl); threshold->setAdjusterListener(this); - cbdlBox->pack_start(*threshold); sensicb->set_tooltip_text(M("TP_LOCALLAB_SENSIH_TOOLTIP")); sensicb->setAdjusterListener(this); - cbdlBox->pack_start(*sensicb); - sharradius->setAdjusterListener(this); + ToolParamBlock* const cbdlBox = Gtk::manage(new ToolParamBlock()); + Gtk::HBox* buttonBox = Gtk::manage(new Gtk::HBox(true, 10)); + buttonBox->pack_start(*lumacontrastMinusButton); + lumacontrastMinusPressedConn = lumacontrastMinusButton->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::lumacontrastMinusPressed)); + buttonBox->pack_start(*lumaneutralButton); + lumaneutralPressedConn = lumaneutralButton->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::lumaneutralPressed)); + buttonBox->pack_start(*lumacontrastPlusButton); + lumacontrastPlusPressedConn = lumacontrastPlusButton->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::lumacontrastPlusPressed)); + cbdlBox->pack_start(*buttonBox); - sharamount->setAdjusterListener(this); - - shardamping->setAdjusterListener(this); - - shariter->setAdjusterListener(this); - - - sensisha->set_tooltip_text(M("TP_LOCALLAB_SENSIS_TOOLTIP")); - sensisha->setAdjusterListener(this); - - inverssha->set_active(false); - inversshaConn = inverssha->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversshaChanged)); - ToolParamBlock* const sharpBox = Gtk::manage(new ToolParamBlock()); - - sharpBox->pack_start(*sharradius); - sharpBox->pack_start(*sharamount); - sharpBox->pack_start(*shardamping); - sharpBox->pack_start(*shariter); - sharpBox->pack_start(*sensisha); - sharpBox->pack_start(*inverssha); - - noiselumf = Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMFINE"), MINCHRO, MAXCHRO, 1, 0)); - noiselumc = Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELUMCOARSE"), MINCHRO, MAXCHROCC, 1, 0)); - - noisechrof = Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROFINE"), MINCHRO, MAXCHRO, 1, 0)); - noisechroc = Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISECHROCOARSE"), MINCHRO, MAXCHROCC, 1, 0)); - - Gtk::Image* iblueredL1 = Gtk::manage(new RTImage("ajd-wb-bluered1.png")); - Gtk::Image* iblueredR1 = Gtk::manage(new RTImage("ajd-wb-bluered2.png")); - - adjblur = Gtk::manage(new Adjuster(M("TP_LOCALLAB_ADJ"), -100., 100., 1., 0., iblueredL1, iblueredR1)); - adjblur->setAdjusterListener(this); - - Gtk::Image *ar = Gtk::manage(new RTImage("adj-black.png")); - Gtk::Image *al = Gtk::manage(new RTImage("adj-white.png")); - - noiselequal = Gtk::manage(new Adjuster(M("TP_LOCALLAB_NOISELEQUAL"), -2, 10, 1, 7, al, ar)); - noiselequal->setAdjusterListener(this); - - if (noiselequal->delay < 200) { - noiselequal->delay = 200; + for (int i = 0; i < 5; i++) { + cbdlBox->pack_start(*multiplier[i]); } + Gtk::HSeparator *separator = Gtk::manage(new Gtk::HSeparator()); + cbdlBox->pack_start(*separator, Gtk::PACK_SHRINK, 2); + cbdlBox->pack_start(*chromacbdl); + cbdlBox->pack_start(*threshold); + cbdlBox->pack_start(*sensicb); + expcbdl->add(*cbdlBox); + expcbdl->setLevel(2); + + panel->pack_start(*expcbdl, false, false); + + // Denoise + expdenoi->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expdenoi)); + enabledenoiConn = expdenoi->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expdenoi)); noiselumf->setAdjusterListener(this); - if (noiselumf->delay < 200) { - noiselumf->delay = 200; - } - - - noiselumc->setAdjusterListener(this); - - if (noiselumc->delay < 200) { - noiselumc->delay = 200; - } - noiselumc->set_tooltip_text(M("TP_LOCALLAB_NOISECHROC_TOOLTIP")); - + noiselumc->setAdjusterListener(this); noiselumdetail->setAdjusterListener(this); - if (noiselumdetail->delay < 200) { - noiselumdetail->delay = 200; - } - - - - noisechrodetail->setAdjusterListener(this); - - if (noisechrodetail->delay < 200) { - noisechrodetail->delay = 200; - } - - - bilateral->setAdjusterListener(this); - - if (bilateral->delay < 200) { - bilateral->delay = 200; - } - - - sensiden->setAdjusterListener(this); - - if (sensiden->delay < 200) { - sensiden->delay = 200; - } - + noiselequal->setAdjusterListener(this); noisechrof->setAdjusterListener(this); - if (noisechrof->delay < 200) { - noisechrof->delay = 200; - } - - + noisechroc->set_tooltip_text(M("TP_LOCALLAB_NOISECHROC_TOOLTIP")); noisechroc->setAdjusterListener(this); - if (noisechroc->delay < 200) { - noisechroc->delay = 200; - } + noisechrodetail->setAdjusterListener(this); + adjblur->setAdjusterListener(this); - noisechroc->set_tooltip_text(M("TP_LOCALLAB_NOISECHROC_TOOLTIP")); + bilateral->setAdjusterListener(this); + + sensiden->setAdjusterListener(this); + + avoidConn = avoid->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::avoidChanged)); ToolParamBlock* const denoisBox = Gtk::manage(new ToolParamBlock()); + Gtk::Frame* const wavFrame = Gtk::manage(new Gtk::Frame()); ToolParamBlock* const wavBox = Gtk::manage(new ToolParamBlock()); - wavBox->pack_start(*noiselumf); wavBox->pack_start(*noiselumc); wavBox->pack_start(*noiselumdetail); wavBox->pack_start(*noiselequal); wavBox->pack_start(*noisechrof); wavBox->pack_start(*noisechroc); - //wavBox->pack_start(*noisechrodetail); + // wavBox->pack_start(*noisechrodetail); // Uncomment this line to use the noisechrodetail adjuster wavBox->pack_start(*adjblur); - - wavFrame->add(*wavBox); denoisBox->pack_start(*wavFrame); - denoisBox->pack_start(*bilateral); denoisBox->pack_start(*sensiden); - - neutrHBox1 = Gtk::manage(new Gtk::HBox()); - - neutral1 = Gtk::manage(new Gtk::Button(M("TP_LOCALLAB_NEUTRAL"))); - RTImage *resetImg1 = Gtk::manage(new RTImage("gtk-undo-ltr-small.png", "gtk-undo-rtl-small.png")); - neutral1->set_image(*resetImg1); - neutral1->set_tooltip_text(M("TP_LOCALLAB_NEUTRAL_TIP")); - neutralconn1 = neutral1->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::neutral_pressed)); - neutral1->show(); - neutrHBox1->pack_start(*neutral1); - pack_start(*neutrHBox1); - - superFrame->set_label_align(0.025, 0.5); - // Gtk::VBox *superVBox = Gtk::manage ( new Gtk::VBox()); - ToolParamBlock* const superBox = Gtk::manage(new ToolParamBlock()); - - superFrame->set_label_widget(*curvactiv); - ToolParamBlock* const colorBox = Gtk::manage(new ToolParamBlock()); - -// ToolParamBlock* const dustBox = Gtk::manage (new ToolParamBlock()); - dustMethod->append(M("TP_LOCALLAB_DSCOP")); - dustMethod->append(M("TP_LOCALLAB_DSMOV")); - dustMethod->append(M("TP_LOCALLAB_DSPAS")); - dustMethod->set_active(0); - dustMethodConn = dustMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::dustMethodChanged)); - dustMethod->set_tooltip_markup(M("TP_LOCALLAB_BLMETHOD_TOOLTIP")); - - superBox->pack_start(*lightness); - superBox->pack_start(*contrast); - superBox->pack_start(*chroma); - - superFrame->add(*superBox); - colorBox->pack_start(*superFrame); - -// colorBox->pack_start(*warm); - colorBox->pack_start(*sensi); - /* - dustFrame->set_label_align(0.025, 0.5); - dustBox->pack_start (*dustMethod); - dustBox->pack_start (*lastdust); - dustBox->pack_start (*cutpast); - dustBox->pack_start (*centerXbuf); - dustBox->pack_start (*centerYbuf); - dustBox->pack_start (*adjblur); - dustFrame->add (*dustBox); - colorBox->pack_start (*dustFrame); - */ - centerXbuf->hide(); - centerYbuf->hide(); - - qualcurvbox->pack_start(*labqualcurv, Gtk::PACK_SHRINK, 4); - qualcurvbox->pack_start(*qualitycurveMethod); - - colorBox->pack_start(*qualcurvbox); - - - colorBox->pack_start(*llCurveEditorG, Gtk::PACK_SHRINK, 2); - colorBox->pack_start(*invers); - - expcolor->add(*colorBox); - expcolor->setLevel(2); - pack_start(*expcolor); - - ToolParamBlock* const exposeBox = Gtk::manage(new ToolParamBlock()); - - curveEditorG = new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_CURVEEDITOR_TONES_LABEL")); - curveEditorG->setCurveListener(this); - - shapeexpos = static_cast(curveEditorG->addCurve(CT_Diagonal, "")); - shapeexpos->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_TONES_TOOLTIP")); - curveEditorG->curveListComplete(); - - - exposeBox->pack_start(*expcomp); - exposeBox->pack_start(*hlcompr); - exposeBox->pack_start(*hlcomprthresh); - exposeBox->pack_start(*black); - exposeBox->pack_start(*shcompr); - exposeBox->pack_start(*warm); - exposeBox->pack_start(*sensiex); - exposeBox->pack_start(*curveEditorG); - - expexpose->add(*exposeBox); - expexpose->setLevel(2); - pack_start(*expexpose); - - ToolParamBlock* const vibranceBox = Gtk::manage(new ToolParamBlock()); - std::vector milestonesvib; - float R, G, B; - // -0.1 rad < Hue < 1.6 rad - Color::hsv2rgb01(0.92f, 0.45f, 0.6f, R, G, B); - milestonesvib.push_back(GradientMilestone(0.0, double (R), double (G), double (B))); - Color::hsv2rgb01(0.14056f, 0.45f, 0.6f, R, G, B); - milestonesvib.push_back(GradientMilestone(1.0, double (R), double (G), double (B))); - - saturated = Gtk::manage(new Adjuster(M("TP_VIBRANCE_SATURATED"), -100., 100., 1., 0.)); - saturated->setAdjusterListener(this); - saturated->set_sensitive(false); - vibranceBox->pack_start(*saturated, Gtk::PACK_SHRINK, 0); - - pastels = Gtk::manage(new Adjuster(M("TP_VIBRANCE_PASTELS"), -100., 100., 1., 0.)); - pastels->setAdjusterListener(this); - vibranceBox->pack_start(*pastels, Gtk::PACK_SHRINK, 0); - - psThreshold = Gtk::manage(new ThresholdAdjuster(M("TP_VIBRANCE_PSTHRESHOLD"), -100., 100., 0., M("TP_VIBRANCE_PSTHRESHOLD_WEIGTHING"), 0, 0., 100., 75., M("TP_VIBRANCE_PSTHRESHOLD_SATTHRESH"), 0, this, false)); - psThreshold->setAdjusterListener(this); - psThreshold->set_tooltip_markup(M("TP_VIBRANCE_PSTHRESHOLD_TOOLTIP")); - psThreshold->set_sensitive(false); - vibranceBox->pack_start(*psThreshold, Gtk::PACK_SHRINK, 0); - - protectSkins = Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_PROTECTSKINS"))); - protectSkins->set_active(true); - vibranceBox->pack_start(*protectSkins, Gtk::PACK_SHRINK, 0); - - avoidColorShift = Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_AVOIDCOLORSHIFT"))); - avoidColorShift->set_active(true); - vibranceBox->pack_start(*avoidColorShift, Gtk::PACK_SHRINK, 0); - - pastSatTog = Gtk::manage(new Gtk::CheckButton(M("TP_VIBRANCE_PASTSATTOG"))); - pastSatTog->set_active(true); - vibranceBox->pack_start(*pastSatTog, Gtk::PACK_SHRINK, 0); - - sensiv = Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19)); - sensiv->setAdjusterListener(this); - - vibranceBox->pack_start(*sensiv, Gtk::PACK_SHRINK, 0); - - curveEditorGG = new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL")); - curveEditorGG->setCurveListener(this); - - skinTonesCurve = static_cast(curveEditorGG->addCurve(CT_Diagonal, M("TP_VIBRANCE_CURVEEDITOR_SKINTONES"))); - skinTonesCurve->setTooltip(M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_TOOLTIP")); - skinTonesCurve->setBottomBarBgGradient(milestonesvib); - skinTonesCurve->setLeftBarBgGradient(milestonesvib); - skinTonesCurve->setRangeLabels( - M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE1"), M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE2"), - M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE3"), M("TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE4") - ); - skinTonesCurve->setRangeDefaultMilestones(0.1, 0.4, 0.85); - curveEditorGG->curveListComplete(); - - vibranceBox->pack_start(*curveEditorGG, Gtk::PACK_SHRINK, 4); - - pskinsconn = protectSkins->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::protectskins_toggled)); - ashiftconn = avoidColorShift->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::avoidcolorshift_toggled)); - pastsattogconn = pastSatTog->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::pastsattog_toggled)); - - expvibrance->add(*vibranceBox); - expvibrance->setLevel(2); - pack_start(*expvibrance); - - ToolParamBlock* const blurrBox = Gtk::manage(new ToolParamBlock()); - blurMethod->append(M("TP_LOCALLAB_BLNORM")); - blurMethod->append(M("TP_LOCALLAB_BLINV")); - blurMethod->append(M("TP_LOCALLAB_BLSYM")); - blurMethod->set_active(0); - blurMethodConn = blurMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::blurMethodChanged)); - blurMethod->set_tooltip_markup(M("TP_LOCALLAB_BLMETHOD_TOOLTIP")); - - blurrBox->pack_start(*radius); - blurrBox->pack_start(*strength); - blurrBox->pack_start(*sensibn); - blurrBox->pack_start(*blurMethod); - - - blurrBox->pack_start(*activlum); - - expblur->add(*blurrBox); - expblur->setLevel(2); - pack_start(*expblur); - ToolParamBlock* const tmBox = Gtk::manage(new ToolParamBlock()); - - tmBox->pack_start(*stren); - tmBox->pack_start(*gamma); - tmBox->pack_start(*estop); - tmBox->pack_start(*scaltm); - tmBox->pack_start(*rewei); - tmBox->pack_start(*sensitm); - - exptonemap->add(*tmBox); - exptonemap->setLevel(2); - pack_start(*exptonemap); - - ToolParamBlock* const retiBox = Gtk::manage(new ToolParamBlock()); - - retiBox->pack_start(*retinexMethod); - retiBox->pack_start(*str); - retiBox->pack_start(*chrrt); - retiBox->pack_start(*neigh); - retiBox->pack_start(*vart); - retiBox->pack_start(*sensih); - retiBox->pack_start(*retrab); - - retiBox->pack_start(*LocalcurveEditorgainTrab, Gtk::PACK_SHRINK, 4); - - retiBox->pack_start(*LocalcurveEditorgainT, Gtk::PACK_SHRINK, 4); - retiBox->pack_start(*inversret); - - expreti->add(*retiBox); - expreti->setLevel(2); - pack_start(*expreti); - - - expsharp->add(*sharpBox); - expsharp->setLevel(2); - pack_start(*expsharp); - - expcbdl->add(*cbdlBox); - expcbdl->setLevel(2); - pack_start(*expcbdl); - expdenoi->add(*denoisBox); expdenoi->setLevel(2); - pack_start(*expdenoi); + panel->pack_start(*expdenoi, false, false); -// pack_start (*transit); - pack_start(*avoid); //keep avoid clor shift in case of - - neutrHBox = Gtk::manage(new Gtk::HBox()); - - neutral = Gtk::manage(new Gtk::Button(M("TP_LOCALLAB_NEUTRAL"))); - RTImage *resetImg = Gtk::manage(new RTImage("gtk-undo-ltr-small.png", "gtk-undo-rtl-small.png")); - neutral->set_image(*resetImg); - neutral->set_tooltip_text(M("TP_LOCALLAB_NEUTRAL_TIP")); - neutralconn = neutral->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::neutral_pressed)); - neutral->show(); - neutrHBox->pack_start(*neutral); - pack_start(*neutrHBox); + panel->pack_start(*avoid); + pack_start(*panel); show_all(); } Locallab::~Locallab() { - delete LocalcurveEditorgainT; - delete LocalcurveEditorgainTrab; delete llCurveEditorG; - + delete curveEditorG; + delete curveEditorGG; + delete LocalcurveEditorgainT; } void Locallab::foldAllButMe(GdkEventButton* event, MyExpander *expander) { @@ -1072,117 +706,6 @@ void Locallab::updateToolState(std::vector &tpOpen) } } - - -void Locallab::neutral_pressed() -{ - // TODO Locallab printf - printf("neutral_pressed\n"); - - // TODO Locallab To be deleted - /* - Smethod->set_active(0); - shapemethod->set_active(0); - Exclumethod->set_active(0); - locX->resetValue(false); - locXL->resetValue(false); - locY->resetValue(false); - locYT->resetValue(false); - centerX->resetValue(false); - centerY->resetValue(false); - circrad->resetValue(false); - centerXbuf->resetValue(false); - centerYbuf->resetValue(false); - adjblur->resetValue(false); - blurMethod->set_active(0); - dustMethod->set_active(1); - sensiexclu->resetValue(false); - struc->resetValue(false); - qualityMethod->set_active(1); - qualitycurveMethod->set_active(0); - thres->resetValue(false); - proxi->resetValue(false); - lightness->resetValue(false); - chroma->resetValue(false); - warm->resetValue(false); - contrast->resetValue(false); - sensi->resetValue(false); - radius->resetValue(false); - strength->resetValue(false); - transit->resetValue(false); - sensibn->resetValue(false); - invers->set_active(false); - cutpast->set_active(false); - lastdust->set_active(false); - curvactiv->set_active(false); - inversrad->set_active(false); - inversret->set_active(false); - protectSkins->set_active(false); - avoidColorShift->set_active(true); - pastSatTog->set_active(true); - expcolor->setEnabled(false); - expexpose->setEnabled(false); - expvibrance->setEnabled(false); - expblur->setEnabled(false); - exptonemap->setEnabled(false); - expreti->setEnabled(false); - expsharp->setEnabled(false); - expcbdl->setEnabled(false); - expdenoi->setEnabled(false); - stren->resetValue(false); - gamma->resetValue(false); - estop->resetValue(false); - scaltm->resetValue(false); - rewei->resetValue(false); - sensitm->resetValue(false); - retinexMethod->set_active(2); - str->resetValue(false); - neigh->resetValue(false); - vart->resetValue(false); - chrrt->resetValue(false); - sensih->resetValue(false); - retrab->resetValue(false); - expcomp->resetValue(false); - hlcompr->resetValue(false); - hlcomprthresh->resetValue(false); - black->resetValue(false); - shcompr->resetValue(false); - sensiex->resetValue(false); - cTgainshape->reset(); - llshape->reset(); - ccshape->reset(); - LHshape->reset(); - HHshape->reset(); - shapeexpos->reset(); - skinTonesCurve->reset(); - avoid->set_active(false); - - for (int i = 0; i < 5; i++) { - multiplier[i]->resetValue(false); - } - - chromacbdl->resetValue(false); - threshold->resetValue(false); - sensicb->resetValue(false); - sharradius->resetValue(false); - sharamount->resetValue(false); - shardamping->resetValue(false); - shariter->resetValue(false); - sensisha->resetValue(false); - inverssha->set_active(false); - noiselumf->resetValue(false); - noiselumc->resetValue(false); - noiselumdetail->resetValue(false); - noiselequal->resetValue(false); - noisechrof->resetValue(false); - noisechroc->resetValue(false); - noisechrodetail->resetValue(false); - bilateral->resetValue(false); - sensiden->resetValue(false); - */ -} - - void Locallab::lumaneutralPressed() { // TODO Locallab printf @@ -1196,7 +719,6 @@ void Locallab::lumaneutralPressed() adjusterChanged(multiplier[0], multiplier[0]->getValue()); // Value isn't used } - void Locallab::lumacontrastPlusPressed() { // TODO Locallab printf @@ -1211,7 +733,6 @@ void Locallab::lumacontrastPlusPressed() adjusterChanged(multiplier[0], multiplier[0]->getValue()); // Value isn't used } - void Locallab::lumacontrastMinusPressed() { // TODO Locallab printf @@ -1226,924 +747,6 @@ void Locallab::lumacontrastMinusPressed() adjusterChanged(multiplier[0], multiplier[0]->getValue()); // Value isn't used } -int localChangedUI(void* data) -{ - // TODO Locallab printf - printf("localChangedUI\n"); - - /* - GThreadLock lock; - (static_cast(data))->localComputed_(); - */ - - return 0; -} - -int localretChangedUI(void* data) -{ - // TODO Locallab printf - printf("localretChangedUI\n"); - - /* - GThreadLock lock; - (static_cast(data))->localretComputed_(); - */ - - return 0; -} - -bool Locallab::localretComputed_() -{ - // TODO Locallab printf - printf("localretComputed_\n"); - - /* - disableListener(); - - //Reticurv - //update GUI and MIP specially for curve - - int *s_datc; - s_datc = new int[70]; - int siz; - //printf("nexts=%s\n", nextstr2.c_str()); - ImProcFunctions::strcurv_data(nextstr2, s_datc, siz); - std::vector creti; - - for (int j = 0; j < siz; j++) { - creti.push_back((double)(s_datc[j]) / 1000.); - } - - delete [] s_datc; - - cTgainshape->setCurve(creti); - - int *s_datcl; - s_datcl = new int[70]; - int sizl; - ImProcFunctions::strcurv_data(nextll_str2, s_datcl, sizl); - std::vector cll; - - for (int j = 0; j < sizl; j++) { - cll.push_back((double)(s_datcl[j]) / 1000.); - } - - delete [] s_datcl; - - llshape->setCurve(cll); - - - int *s_datcc; - s_datcc = new int[70]; - int sizc; - ImProcFunctions::strcurv_data(nextcc_str2, s_datcc, sizc); - std::vector ccc; - - for (int j = 0; j < sizc; j++) { - ccc.push_back((double)(s_datcc[j]) / 1000.); - } - - delete [] s_datcc; - - ccshape->setCurve(ccc); - - int *s_datch; - s_datch = new int[70]; - int sizh; - ImProcFunctions::strcurv_data(nextlh_str2, s_datch, sizh); - std::vector clh; - - for (int j = 0; j < sizh; j++) { - clh.push_back((double)(s_datch[j]) / 1000.); - } - - delete [] s_datch; - - LHshape->setCurve(clh); - - - int *s_datchh; - s_datchh = new int[70]; - int sizhh; - ImProcFunctions::strcurv_data(nexthh_str2, s_datchh, sizhh); - std::vector chh; - - for (int j = 0; j < sizhh; j++) { - chh.push_back((double)(s_datchh[j]) / 1000.); - } - - delete [] s_datchh; - - HHshape->setCurve(chh); - - //skinTonesCurve - int *s_datcsk; - s_datcsk = new int[70]; - int sizsk; - ImProcFunctions::strcurv_data(nextsk_str2, s_datcsk, sizsk); - std::vector csk; - - for (int j = 0; j < sizsk; j++) { - csk.push_back((double)(s_datcsk[j]) / 1000.); - } - - delete [] s_datcsk; - - skinTonesCurve->setCurve(csk); - - //PSthreshold - int sizps = 2; - int s_datcps[sizps + 1]; - ImProcFunctions::strcurv_data(nextps_str2, s_datcps, sizps); - psThreshold->setValue(s_datcps[0], s_datcps[1]); - - - //exCurve - int *s_datcex; - s_datcex = new int[70]; - int sizex; - ImProcFunctions::strcurv_data(nextex_str2, s_datcex, sizex); - std::vector cex; - - for (int j = 0; j < sizex; j++) { - cex.push_back((double)(s_datcex[j]) / 1000.); - } - - delete [] s_datcex; - - shapeexpos->setCurve(cex); - - enableListener(); - - //update all sliders by this strange process! - if (anbspot->getValue() == 0) { - anbspot->setValue(1); - - if (options.rtSettings.locdelay) { - if (anbspot->delay < 100) { - anbspot->delay = 100; - } - } - - adjusterChanged(anbspot, 1); - - } else if (anbspot->getValue() == 1) { - anbspot->setValue(0); - - if (options.rtSettings.locdelay) { - if (anbspot->delay < 100) { - anbspot->delay = 100; - } - } - - adjusterChanged(anbspot, 0); - - } - - //update all curves - std::vector cretirab; - cretirab = cTgainshaperab->getCurve(); - - if (cretirab.at(5) == 0.70) { - cretirab.at(5) = 0.9; - cTgainshaperab->setCurve(cretirab); - - curveChanged(cTgainshaperab); - } else if (cretirab.at(5) == 0.90) { - cretirab.at(5) = 0.7; - cTgainshaperab->setCurve(cretirab); - curveChanged(cTgainshaperab); - - } - - - // printf("G2 anbspot=%i\n", anbspot->getValue()); - - if (listener) { //for all sliders - listener->panelChanged(Evlocallabanbspot, ""); //anbspot->getTextValue()); - } - - if (listener) {//for curve - listener->panelChanged(EvlocallabCTgainCurverab, M("")); - } - - if (listener) {//for curve - listener->panelChanged(EvlocallabCTgainCurve, M("")); - } - - if (listener) {//for curve - listener->panelChanged(Evlocallabllshape, M("")); - } - - if (listener) {//for curve - listener->panelChanged(Evlocallabccshape, M("")); - } - - if (listener) {//for curve - listener->panelChanged(EvlocallabLHshape, M("")); - } - - if (listener) {//for curve - listener->panelChanged(EvlocallabHHshape, M("")); - } - - if (listener) {//for curve - listener->panelChanged(EvlocallabSkinTonesCurve, M("")); - } - - if (listener) {//for PSthreshold - listener->panelChanged(EvlocallabPastSatThreshold, M("")); - } - - if (listener) {//for excurve - listener->panelChanged(Evlocallabshapeexpos, M("")); - } - */ - - return false; - -} - -bool Locallab::localComputed_() -{ - // TODO Locallab printf - printf("localComputed_\n"); - - /* - //update GUI and MIP - disableListener(); - - //size spot - circrad->setValue(nextdatasp[2]); - //center and cursor - locX->setValue(nextdatasp[3]); - locY->setValue(nextdatasp[4]); - locYT->setValue(nextdatasp[5]); - locXL->setValue(nextdatasp[6]); - centerX->setValue(nextdatasp[7]); - centerY->setValue(nextdatasp[8]); - - //sliders - lightness->setValue(nextdatasp[9]); - contrast->setValue(nextdatasp[10]); - chroma->setValue(nextdatasp[11]); - sensi->setValue(nextdatasp[12]); - transit->setValue(nextdatasp[13]); - - //inverse - if (nextdatasp[14] == 0) { - invers->set_active(false); - } else { - invers->set_active(true); - } - - //method cursor - if (nextdatasp[15] == 0) { - Smethod->set_active(0); - } else if (nextdatasp[15] == 1) { - Smethod->set_active(1); - } else if (nextdatasp[15] == 2) { - Smethod->set_active(2); - } else if (nextdatasp[15] == 3) { - Smethod->set_active(3); - } - - //nbspot->setValue(nextdatasp[16]); - - //sliders blurr - radius->setValue(nextdatasp[17]); - strength->setValue(nextdatasp[18]); - sensibn->setValue(nextdatasp[19]); - - //inverse - if (nextdatasp[20] == 0) { - inversrad->set_active(false); - } else { - inversrad->set_active(true); - } - - //sliders retinex - str->setValue(nextdatasp[21]); - chrrt->setValue(nextdatasp[22]); - neigh->setValue(nextdatasp[23]); - vart->setValue(nextdatasp[24]); - sensih->setValue(nextdatasp[25]); - - //inverse - if (nextdatasp[26] == 0) { - inversret->set_active(false); - } else { - inversret->set_active(true); - } - - //method retinex - if (nextdatasp[27] == 0) { - retinexMethod->set_active(0); - } else if (nextdatasp[27] == 1) { - retinexMethod->set_active(1); - } else if (nextdatasp[27] == 2) { - retinexMethod->set_active(2); - } - - //sharpening - sharradius->setValue(nextdatasp[28]); - sharamount->setValue(nextdatasp[29]); - shardamping->setValue(nextdatasp[30]); - shariter->setValue(nextdatasp[31]); - sensisha->setValue(nextdatasp[32]); - - if (nextdatasp[33] == 0) { - inverssha->set_active(false); - } else { - inverssha->set_active(true); - } - - if (nextdatasp[34] == 0) { - qualityMethod->set_active(0); - } else if (nextdatasp[34] == 1) { - qualityMethod->set_active(1); - } else if (nextdatasp[34] == 2) { - qualityMethod->set_active(2); - } - - thres->setValue(nextdatasp[35]); - proxi->setValue(nextdatasp[36]); - - //denoise - noiselumf->setValue(nextdatasp[37]); - noiselumc->setValue(nextdatasp[38]); - noisechrof->setValue(nextdatasp[39]); - noisechroc->setValue(nextdatasp[40]); - - //cbdl - multiplier[0]->setValue(nextdatasp[41]); - multiplier[1]->setValue(nextdatasp[42]); - multiplier[2]->setValue(nextdatasp[43]); - multiplier[3]->setValue(nextdatasp[44]); - multiplier[4]->setValue(nextdatasp[45]); - threshold->setValue(nextdatasp[46]); - sensicb->setValue(nextdatasp[47]); - - //blur luma - if (nextdatasp[48] == 0) { - activlum->set_active(false); - } else { - activlum->set_active(true); - } - - //TM - stren->setValue(nextdatasp[49]); - gamma->setValue(nextdatasp[50]); - estop->setValue(nextdatasp[51]); - scaltm->setValue(nextdatasp[52]); - rewei->setValue(nextdatasp[53]); - sensitm->setValue(nextdatasp[54]); - // usleep(10000); - - //Reticurv - retrab->setValue(nextdatasp[55]); - - //curvactiv - if (nextdatasp[56] == 0) { - curvactiv->set_active(false); - } else { - curvactiv->set_active(true); - } - - if (nextdatasp[57] == 0) { - qualitycurveMethod->set_active(0); - } else if (nextdatasp[57] == 1) { - qualitycurveMethod->set_active(1); - } else if (nextdatasp[57] == 2) { - qualitycurveMethod->set_active(2); - } - - sensiv->setValue(nextdatasp[58]); - pastels->setValue(nextdatasp[59]); - saturated->setValue(nextdatasp[60]); - - //protectskin - if (nextdatasp[61] == 0) { - protectSkins->set_active(false); - } else { - protectSkins->set_active(true); - } - - //avoidColorShift - if (nextdatasp[62] == 0) { - avoidColorShift->set_active(false); - } else { - avoidColorShift->set_active(true); - } - - //pastSatTog - if (nextdatasp[63] == 0) { - pastSatTog->set_active(false); - adjusterChanged(pastels, pastels->getValue()); - adjusterChanged(saturated, saturated->getValue()); - - } else { - pastSatTog->set_active(true); - adjusterChanged(pastels, pastels->getValue()); - adjusterChanged(saturated, saturated->getValue()); - - } - - expcomp->setValue(nextdatasp[64]); - black->setValue(nextdatasp[65]); - hlcompr->setValue(nextdatasp[66]); - hlcomprthresh->setValue(nextdatasp[67]); - shcompr->setValue(nextdatasp[68]); - sensiex->setValue(nextdatasp[69]); - - centerXbuf->setValue(nextdatasp[70]); - centerYbuf->setValue(nextdatasp[71]); - adjblur->setValue(nextdatasp[72]); - - //protectskin - if (nextdatasp[73] == 0) { - cutpast->set_active(false); - } else { - cutpast->set_active(true); - } - - chromacbdl->setValue(nextdatasp[74]); - - if (nextdatasp[75] == 0) { - lastdust->set_active(false); - } else { - lastdust->set_active(true); - } - - if (nextdatasp[76] == 0) { - blurMethod->set_active(0); - } else if (nextdatasp[76] == 1) { - blurMethod->set_active(1); - } else if (nextdatasp[76] == 2) { - blurMethod->set_active(2); - } - - if (nextdatasp[77] == 0) { - dustMethod->set_active(0); - } else if (nextdatasp[77] == 1) { - dustMethod->set_active(1); - } else if (nextdatasp[77] == 2) { - dustMethod->set_active(2); - } - - if (nextdatasp[78] == 0) { - Exclumethod->set_active(0); - } else if (nextdatasp[78] == 1) { - Exclumethod->set_active(1); - } - - sensiexclu->setValue(nextdatasp[79]); - struc->setValue(nextdatasp[80]); - warm->setValue(nextdatasp[81]); - noiselumdetail->setValue(nextdatasp[82]); - noisechrodetail->setValue(nextdatasp[83]); - sensiden->setValue(nextdatasp[84]); - - //exp - if (nextdatasp[85] == 0) { - expdenoi->setEnabled(false); - } else { - expdenoi->setEnabled(true); - } - - if (nextdatasp[86] == 0) { - expcolor->setEnabled(false); - } else { - expcolor->setEnabled(true); - } - - if (nextdatasp[87] == 0) { - expvibrance->setEnabled(false); - } else { - expvibrance->setEnabled(true); - } - - if (nextdatasp[88] == 0) { - expblur->setEnabled(false); - } else { - expblur->setEnabled(true); - } - - if (nextdatasp[89] == 0) { - exptonemap->setEnabled(false); - } else { - exptonemap->setEnabled(true); - } - - if (nextdatasp[90] == 0) { - expreti->setEnabled(false); - } else { - expreti->setEnabled(true); - } - - if (nextdatasp[91] == 0) { - expsharp->setEnabled(false); - } else { - expsharp->setEnabled(true); - } - - if (nextdatasp[92] == 0) { - expcbdl->setEnabled(false); - } else { - expcbdl->setEnabled(true); - } - - if (nextdatasp[93] == 0) { - expexpose->setEnabled(false); - } else { - expexpose->setEnabled(true); - } - - bilateral->setValue(nextdatasp[94]); - noiselequal->setValue(nextdatasp[95]); - - if (nextdatasp[96] == 0) { - shapemethod->set_active(0); - } else if (nextdatasp[96] == 1) { - shapemethod->set_active(1); - } - - - - double intermedblur = 0.01 * (double) nextdatasp[nextlength - 5]; - huerefblur->setValue(intermedblur); - double intermed = 0.01 * (double) nextdatasp[nextlength - 4]; - hueref->setValue(intermed); - - chromaref->setValue(nextdatasp[nextlength - 3]); - lumaref->setValue(nextdatasp[nextlength - 2]); - sobelref->setValue(nextdatasp[nextlength - 1]); - - int *s_datc; - s_datc = new int[70]; - int siz; - ImProcFunctions::strcurv_data(nextstr, s_datc, siz); - - - std::vector creti; - - for (int j = 0; j < siz; j++) { - creti.push_back((double)(s_datc[j]) / 1000.); - } - - delete [] s_datc; - - cTgainshape->setCurve(creti); - - //LLcurv - int *s_datcl; - s_datcl = new int[70]; - int sizl; - ImProcFunctions::strcurv_data(nextll_str, s_datcl, sizl); - - - std::vector cll; - - for (int j = 0; j < sizl; j++) { - cll.push_back((double)(s_datcl[j]) / 1000.); - } - - delete [] s_datcl; - llshape->setCurve(cll); - - //CCcurv - int *s_datcc; - s_datcc = new int[70]; - int sizc; - ImProcFunctions::strcurv_data(nextcc_str, s_datcc, sizc); - - - std::vector ccc; - - for (int j = 0; j < sizc; j++) { - ccc.push_back((double)(s_datcc[j]) / 1000.); - } - - delete [] s_datcc; - ccshape->setCurve(ccc); - - - //LHcurv - int *s_datch; - s_datch = new int[70]; - int sizh; - ImProcFunctions::strcurv_data(nextlh_str, s_datch, sizh); - - - std::vector clh; - - for (int j = 0; j < sizh; j++) { - clh.push_back((double)(s_datch[j]) / 1000.); - } - - delete [] s_datch; - LHshape->setCurve(clh); - - //HHcurv - int *s_datchh; - s_datchh = new int[70]; - int sizhh; - ImProcFunctions::strcurv_data(nexthh_str, s_datchh, sizhh); - - - std::vector chh; - - for (int j = 0; j < sizhh; j++) { - chh.push_back((double)(s_datchh[j]) / 1000.); - } - - delete [] s_datchh; - HHshape->setCurve(chh); - - //skinTonesCurve - int *s_datcsk; - s_datcsk = new int[70]; - int sizsk; - ImProcFunctions::strcurv_data(nextsk_str, s_datcsk, sizsk); - std::vector csk; - - for (int j = 0; j < sizsk; j++) { - csk.push_back((double)(s_datcsk[j]) / 1000.); - } - - delete [] s_datcsk; - - skinTonesCurve->setCurve(csk); - - //PSthreshold - int sizps = 2; - int s_datcps[sizps + 1]; - ImProcFunctions::strcurv_data(nextps_str, s_datcps, sizps); - psThreshold->setValue(s_datcps[0], s_datcps[1]); - - - //exCurve - int *s_datcex; - s_datcex = new int[70]; - int sizex; - ImProcFunctions::strcurv_data(nextex_str, s_datcex, sizex); - std::vector cex; - - for (int j = 0; j < sizex; j++) { - cex.push_back((double)(s_datcex[j]) / 1000.); - } - - delete [] s_datcex; - shapeexpos->setCurve(cex); - - - enableListener(); - - //update all sliders by this strange process! - if (anbspot->getValue() == 0) { - anbspot->setValue(1); - - if (options.rtSettings.locdelay) { - if (anbspot->delay < 100) { - anbspot->delay = 100; - } - } - - adjusterChanged(anbspot, 1); - - } else if (anbspot->getValue() == 1) { - anbspot->setValue(0); - - if (options.rtSettings.locdelay) { - if (anbspot->delay < 100) { - anbspot->delay = 100; - } - } - - adjusterChanged(anbspot, 0); - - } - - - //update all curves - std::vector cretirab; - cretirab = cTgainshaperab->getCurve(); - - if (cretirab.at(5) == 0.70) { - cretirab.at(5) = 0.9; - cTgainshaperab->setCurve(cretirab); - - curveChanged(cTgainshaperab); - } else if (cretirab.at(5) == 0.90) { - cretirab.at(5) = 0.7; - cTgainshaperab->setCurve(cretirab); - curveChanged(cTgainshaperab); - - } - - // - - // printf("G1 maj anbspot=%i cretirab=%f\n", anbspot->getValue(), cretirab.at(5)); - - - //add events for each cases whitout that localalb does not work... - //there is probably an other solution ! - - if (listener) { //for all sliders - listener->panelChanged(Evlocallabanbspot, ""); //anbspot->getTextValue()); - } - - if (listener) {//for curve - listener->panelChanged(EvlocallabCTgainCurverab, M("")); - } - - if (listener) {//for inverse color - listener->panelChanged(Evlocallabinvers, M("GENERAL_ENABLED")); - } - - if (listener) {//for cutpast - // listener->panelChanged (Evlocallabcutpast, M ("GENERAL_ENABLED")); - } - - if (listener) {//for cutpast - // listener->panelChanged (Evlocallablastdust, M ("GENERAL_ENABLED")); - } - - if (listener) {//for blur method - listener->panelChanged(EvlocallabblurMethod, blurMethod->get_active_text()); - } - - if (listener) {//for dust method - // listener->panelChanged (EvlocallabdustMethod, dustMethod->get_active_text ()); - } - - if (listener) {//for Exclude method - listener->panelChanged(Evlocallabexclumethod, Exclumethod->get_active_text()); - } - - if (listener) {//for shape RT-spot method - listener->panelChanged(Evlocallabshapemethod, shapemethod->get_active_text()); - } - - if (listener) {//for curvactiv - listener->panelChanged(Evlocallabcurvactiv, M("GENERAL_ENABLED")); - } - - if (listener) {//for inverse blurr - listener->panelChanged(Evlocallabinversrad, M("GENERAL_ENABLED")); - } - - if (listener) {//for quality method - listener->panelChanged(EvlocallabqualityMethod, qualityMethod->get_active_text()); - } - - if (listener) {//for quality method - listener->panelChanged(EvlocallabqualitycurveMethod, qualitycurveMethod->get_active_text()); - } - - if (listener) {//for inverse retinex - listener->panelChanged(Evlocallabinversret, M("GENERAL_ENABLED")); - } - - if (listener) {//for inverse sharpen - listener->panelChanged(Evlocallabinverssha, M("GENERAL_ENABLED")); - } - - if (listener) {//for Smethod : position of mouse cursor - listener->panelChanged(EvlocallabSmet, Smethod->get_active_text()); - } - - if (listener) {//for retinex method - listener->panelChanged(EvlocallabretinexMethod, retinexMethod->get_active_text()); - } - - if (listener) {//for curve reti - listener->panelChanged(EvlocallabCTgainCurve, M("")); - } - - if (listener) {//for curve LL - listener->panelChanged(Evlocallabllshape, M("")); - } - - if (listener) {//for curve LH - listener->panelChanged(EvlocallabLHshape, M("")); - } - - if (listener) {//for curve LH - listener->panelChanged(Evlocallabccshape, M("")); - } - - if (listener) {//for curve LH - listener->panelChanged(EvlocallabHHshape, M("")); - } - - if (listener) {//for curve Skin - listener->panelChanged(EvlocallabSkinTonesCurve, M("")); - } - - if (listener) {//for PSthreshold - listener->panelChanged(EvlocallabPastSatThreshold, M("")); - } - - //for checkbox - if (listener) {//f - listener->panelChanged(EvlocallabProtectSkins, M("")); - } - - if (listener) {//fo - listener->panelChanged(EvlocallabAvoidColorShift, M("")); - } - - if (listener) {//for - listener->panelChanged(EvlocallabPastSatTog, M("")); - } - - if (listener) {//for expo curv - listener->panelChanged(Evlocallabshapeexpos, M("")); - } - - if (listener) {//for expander denoise - listener->panelChanged(EvLocenadenoi, M("")); - } - - if (listener) {//for expander color - listener->panelChanged(EvLocenacolor, M("")); - } - - if (listener) {//for expander vib - listener->panelChanged(EvLocenavibrance, M("")); - } - - if (listener) {//for expander tonem - listener->panelChanged(EvLocenatonemap, M("")); - } - - if (listener) {//for expander reti - listener->panelChanged(EvLocenareti, M("")); - } - - if (listener) {//for expander sharp - listener->panelChanged(EvLocenasharp, M("")); - } - - if (listener) {//for expander cbdl - listener->panelChanged(EvLocenacbdl, M("")); - } - - if (listener) {//for expander cbdl - listener->panelChanged(EvLocenaexpose, M("")); - } - */ - - - return false; -} - -void Locallab::localChanged(int **datasp, std::string datastr, std::string ll_str, std::string lh_str, std::string cc_str, std::string hh_str, std::string sk_str, std::string ps_str, std::string ex_str, int sp, int maxdat) -{ - // TODO Locallab printf - printf("localChanged\n"); - - /* - nextstr = datastr; - nextll_str = ll_str; - nextlh_str = lh_str; - nextcc_str = cc_str; - nexthh_str = hh_str; - nextsk_str = sk_str; - nextps_str = ps_str; - nextex_str = ex_str; - nextlength = maxdat; - - for (int i = 2; i < nextlength; i++) {//be carefull to this value 102 must be the same as above ==> sobelref->setValue(nextdatasp[101]); - nextdatasp[i] = datasp[i][sp]; - } - - g_idle_add(localChangedUI, this); - */ -} - -void Locallab::localretChanged(int **datasp, std::string datastr, std::string ll_str, std::string lh_str, std::string cc_str, std::string hh_str, std::string sk_str, std::string ps_str, std::string ex_str, int sp, int maxdat) -{ - // TODO Locallab printf - printf("localretChanged\n"); - - /* - nextlength = maxdat; - nextstr2 = datastr; - nextll_str2 = ll_str; - nextlh_str2 = lh_str; - nextcc_str2 = cc_str; - nexthh_str2 = hh_str; - nextsk_str2 = sk_str; - nextps_str2 = ps_str; - nextex_str2 = ex_str; - - g_idle_add(localretChangedUI, this); - */ -} - - void Locallab::read(const ProcParams* pp, const ParamsEdited* pedited) { printf("Locallab read\n"); @@ -2170,6 +773,8 @@ void Locallab::read(const ProcParams* pp, const ParamsEdited* pedited) se->isvisible = pedited->locallab.isvisible; se->shape = pedited->locallab.shape; se->spotMethod = pedited->locallab.spotMethod; + se->sensiexclu = pedited->locallab.sensiexclu; + se->struc = pedited->locallab.struc; se->shapeMethod = pedited->locallab.shapeMethod; se->locX = pedited->locallab.locX; se->locXL = pedited->locallab.locXL; @@ -2288,9 +893,12 @@ void Locallab::read(const ProcParams* pp, const ParamsEdited* pedited) noiselequal->setEditedState(pedited->locallab.noiselequal ? Edited : UnEdited); noisechrof->setEditedState(pedited->locallab.noisechrof ? Edited : UnEdited); noisechroc->setEditedState(pedited->locallab.noisechroc ? Edited : UnEdited); + noisechrodetail->setEditedState(pedited->locallab.noisechrodetail ? Edited : UnEdited); adjblur->setEditedState(pedited->locallab.adjblur ? Edited : UnEdited); bilateral->setEditedState(pedited->locallab.bilateral ? Edited : UnEdited); sensiden->setEditedState(pedited->locallab.sensiden ? Edited : UnEdited); + + // Others avoid->set_inconsistent(multiImage && !pedited->locallab.avoid); } @@ -2316,6 +924,9 @@ void Locallab::read(const ProcParams* pp, const ParamsEdited* pedited) r->spotMethod = 1; } + r->sensiexclu = pp->locallab.sensiexclu.at(i); + r->struc = pp->locallab.struc.at(i); + if (pp->locallab.shapeMethod.at(i) == "IND") { r->shapeMethod = 0; } else if (pp->locallab.shapeMethod.at(i) == "SYM") { @@ -2402,6 +1013,8 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) r->isvisible = true; r->shape = 0; r->spotMethod = 0; + r->sensiexclu = 19; + r->struc = 0; r->shapeMethod = 2; r->locX = 250; r->locXL = 250; @@ -2425,6 +1038,8 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.isvisible.push_back(r->isvisible); pp->locallab.shape.push_back("ELI"); pp->locallab.spotMethod.push_back("norm"); + pp->locallab.sensiexclu.push_back(r->sensiexclu); + pp->locallab.struc.push_back(r->struc); pp->locallab.shapeMethod.push_back("INDSL"); pp->locallab.locX.push_back(r->locX); pp->locallab.locXL.push_back(r->locXL); @@ -2521,9 +1136,11 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.noiselequal.push_back(7); pp->locallab.noisechrof.push_back(0); pp->locallab.noisechroc.push_back(0); + pp->locallab.noisechrodetail.push_back(0); pp->locallab.adjblur.push_back(0); pp->locallab.bilateral.push_back(0); pp->locallab.sensiden.push_back(30); + // Others pp->locallab.avoid.push_back(0); // New created spot selection @@ -2551,6 +1168,8 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.isvisible.erase(pp->locallab.isvisible.begin() + i); pp->locallab.shape.erase(pp->locallab.shape.begin() + i); pp->locallab.spotMethod.erase(pp->locallab.spotMethod.begin() + i); + pp->locallab.sensiexclu.erase(pp->locallab.sensiexclu.begin() + i); + pp->locallab.struc.erase(pp->locallab.struc.begin() + i); pp->locallab.shapeMethod.erase(pp->locallab.shapeMethod.begin() + i); pp->locallab.locX.erase(pp->locallab.locX.begin() + i); pp->locallab.locXL.erase(pp->locallab.locXL.begin() + i); @@ -2648,9 +1267,11 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.noiselequal.erase(pp->locallab.noiselequal.begin() + i); pp->locallab.noisechrof.erase(pp->locallab.noisechrof.begin() + i); pp->locallab.noisechroc.erase(pp->locallab.noisechroc.begin() + i); + pp->locallab.noisechrodetail.erase(pp->locallab.noisechrodetail.begin() + i); pp->locallab.adjblur.erase(pp->locallab.adjblur.begin() + i); pp->locallab.bilateral.erase(pp->locallab.bilateral.begin() + i); pp->locallab.sensiden.erase(pp->locallab.sensiden.begin() + i); + // Others pp->locallab.avoid.erase(pp->locallab.avoid.begin() + i); // Select one remaining spot @@ -2708,6 +1329,9 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spotMethod.at(pp->locallab.selspot) = "exc"; } + pp->locallab.sensiexclu.at(pp->locallab.selspot) = r->sensiexclu; + pp->locallab.struc.at(pp->locallab.selspot) = r->struc; + if (r->shapeMethod == 0) { pp->locallab.shapeMethod.at(pp->locallab.selspot) = "IND"; } else if (r->shapeMethod == 1) { @@ -2845,9 +1469,11 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.noiselequal.at(pp->locallab.selspot) = noiselequal->getIntValue(); pp->locallab.noisechrof.at(pp->locallab.selspot) = noisechrof->getIntValue(); pp->locallab.noisechroc.at(pp->locallab.selspot) = noisechroc->getIntValue(); + pp->locallab.noisechrodetail.at(pp->locallab.selspot) = noisechrodetail->getIntValue(); pp->locallab.adjblur.at(pp->locallab.selspot) = adjblur->getIntValue(); pp->locallab.bilateral.at(pp->locallab.selspot) = bilateral->getIntValue(); pp->locallab.sensiden.at(pp->locallab.selspot) = sensiden->getIntValue(); + // Others pp->locallab.avoid.at(pp->locallab.selspot) = (int)avoid->get_active(); } @@ -2868,6 +1494,8 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.isvisible = se->isvisible; pedited->locallab.shape = se->shape; pedited->locallab.spotMethod = se->spotMethod; + pedited->locallab.sensiexclu = se->sensiexclu; + pedited->locallab.struc = se->struc; pedited->locallab.shapeMethod = se->shapeMethod; pedited->locallab.locX = se->locX; pedited->locallab.locXL = se->locXL; @@ -2964,9 +1592,11 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.noiselequal = noiselequal->getEditedState(); pedited->locallab.noisechrof = noisechrof->getEditedState(); pedited->locallab.noisechroc = noisechroc->getEditedState(); + pedited->locallab.noisechrodetail = noisechrodetail->getEditedState(); pedited->locallab.adjblur = adjblur->getEditedState(); pedited->locallab.bilateral = bilateral->getEditedState(); pedited->locallab.sensiden = sensiden->getEditedState(); + // Others pedited->locallab.avoid = !avoid->get_inconsistent(); } } @@ -3031,74 +1661,6 @@ void Locallab::avoidcolorshift_toggled() } } - -void Locallab::spotdupChanged(bool spotchan) -{ - // TODO Locallab printf - printf("spotdupChanged\n"); - - /* - nextspotdup = spotchan; - - const auto func = [](gpointer data) -> gboolean { - static_cast(data)->spotdupComputed_(); - return FALSE; - }; - - idle_register.add(func, this); - */ -} - -bool Locallab::spotdupComputed_() -{ - // TODO Locallab printf - printf("spotdupComputed_\n"); - - /* - disableListener(); - // spotduplicated->set_active(nextspotdup); - - if (nextspotdup) { - //labspotdup->show(); - //usleep(4000000); - } else { - //labspotdup->hide(); - } - - enableListener(); - */ - - return false; -} - - -void Locallab::spotduplicatedChanged() -{ - printf("spotduplicatedChanged\n"); - - /* - if (batchMode) { - if (spotduplicated->get_inconsistent()) { - spotduplicated->set_inconsistent(false); - spotduplicated->set_active(false);; - } else if (lastspotduplicated) { - spotduplicated->set_inconsistent(true); - } - - lastspotduplicated = spotduplicated->get_active(); - } - - if (listener && getEnabled()) { - - if (spotduplicated->get_active()) { - listener->panelChanged(Evlocallabspotduplicated, M("GENERAL_ENABLED")); - } else { - listener->panelChanged(Evlocallabspotduplicated, M("GENERAL_DISABLED")); - } - } - */ -} - void Locallab::pastsattog_toggled() { printf("pastsattog_toggled\n"); @@ -3248,44 +1810,6 @@ void Locallab::blurMethodChanged() } } - -void Locallab::dustMethodChanged() -{ - printf("dustMethodChanged\n"); - - /* - if (!batchMode) { - - } - - - if (listener) { - // listener->panelChanged (EvlocallabdustMethod, dustMethod->get_active_text ()); - } - */ -} - -void Locallab::qualityMethodChanged() -{ - /* - if (!batchMode) { - /* - if (qualityMethod->get_active_row_number() == 0) { //STD - proxi->hide(); - thres->hide(); - } else {//enh - proxi->show(); - thres->show(); - } - *//* -} - -if (listener) { -listener->panelChanged(EvlocallabqualityMethod, qualityMethod->get_active_text()); -} -*/ -} - void Locallab::qualitycurveMethodChanged() { printf("qualitycurveMethodChanged\n"); @@ -3297,102 +1821,6 @@ void Locallab::qualitycurveMethodChanged() } } -void Locallab::ExclumethodChanged() -{ - /* - if (!batchMode) { - if (Exclumethod->get_active_row_number() == 0) { - } else if (Exclumethod->get_active_row_number() == 1) { - } - } - - - if (listener) { - listener->panelChanged(Evlocallabexclumethod, Exclumethod->get_active_text()); - } - */ -} - -void Locallab::shapemethodChanged() -{ - /* - if (!batchMode) { - // - } - - - if (listener) { - listener->panelChanged(Evlocallabshapemethod, shapemethod->get_active_text()); - } - */ -} - -void Locallab::SmethodChanged() -{ - /* - if (!batchMode) { - if (Smethod->get_active_row_number() == 0) { //IND 0 - locX->hide(); - locXL->hide(); - locY->hide(); - locYT->hide(); - centerX->hide(); - centerY->hide(); - } else if (Smethod->get_active_row_number() == 1) { // 1 SYM - locX->hide(); - locXL->hide(); - locY->hide(); - locYT->hide(); - centerX->hide(); - centerY->hide(); - - } else if (Smethod->get_active_row_number() == 2) { //2 SYM - locX->show(); - locXL->show(); - locY->show(); - locYT->show(); - centerX->show(); - centerY->show(); - - } else if (Smethod->get_active_row_number() == 3) { // 3 SYM - locX->show(); - locXL->hide(); - locY->show(); - locYT->hide(); - centerX->show(); - centerY->show(); - - } - - /* else if(Smethod->get_active_row_number()==2) { // LOC - locX->show(); - locXL->hide(); - locY->hide(); - locYT->hide(); - } *//* -} - -if (listener && getEnabled()) { -if (Smethod->get_active_row_number() == 1 || Smethod->get_active_row_number() == 3) { -listener->panelChanged(EvlocallabSmet, Smethod->get_active_text()); -locXL->setValue(locX->getValue()); -locYT->setValue(locY->getValue()); -} -// else if(Smethod->get_active_row_number()==2) { -// listener->panelChanged (EvlocallabSmet, Smethod->get_active_text ()); -// locXL->setValue (locX->getValue()); -// locYT->setValue (locX->getValue()); -// locY->setValue (locX->getValue()); -// } -else - -{ -listener->panelChanged(EvlocallabSmet, Smethod->get_active_text()); - -} -} -*/ -} void Locallab::inversChanged() { printf("inversChanged\n"); @@ -3423,61 +1851,6 @@ void Locallab::inversChanged() } } -void Locallab::cutpastChanged() -{ - /* - if (batchMode) { - if (cutpast->get_inconsistent()) { - cutpast->set_inconsistent(false); - cutpastConn.block(true); - cutpast->set_active(false); - cutpastConn.block(false); - } else if (lastcutpast) { - cutpast->set_inconsistent(true); - } - - lastcutpast = cutpast->get_active(); - } - - - if (listener) { - if (getEnabled()) { - // listener->panelChanged (Evlocallabcutpast, M ("GENERAL_ENABLED")); - } else { - // listener->panelChanged (Evlocallabcutpast, M ("GENERAL_DISABLED")); - } - } - */ -} - -void Locallab::lastdustChanged() -{ - /* - if (batchMode) { - if (lastdust->get_inconsistent()) { - lastdust->set_inconsistent(false); - lastdustConn.block(true); - lastdust->set_active(false); - lastdustConn.block(false); - } else if (lastlastdust) { - lastdust->set_inconsistent(true); - } - - lastlastdust = lastdust->get_active(); - } - - - if (listener) { - if (getEnabled()) { - // listener->panelChanged (Evlocallablastdust, M ("GENERAL_ENABLED")); - } else { - // listener->panelChanged (Evlocallablastdust, M ("GENERAL_DISABLED")); - } - } - */ -} - - void Locallab::curvactivChanged() { printf("curvactivChanged\n"); @@ -3539,39 +1912,6 @@ void Locallab::activlumChanged() } } -void Locallab::inversradChanged() -{ - /* - if (batchMode) { - if (inversrad->get_inconsistent()) { - inversrad->set_inconsistent(false); - inversradConn.block(true); - inversrad->set_active(false); - inversradConn.block(false); - } else if (lastinversrad) { - inversrad->set_inconsistent(true); - } - - lastinversrad = inversrad->get_active(); - } - - if (inversrad->get_active()) { - sensibn->hide(); - } else { - sensibn->show(); - } - - - if (listener) { - if (getEnabled()) { - listener->panelChanged(Evlocallabinversrad, M("GENERAL_ENABLED")); - } else { - listener->panelChanged(Evlocallabinversrad, M("GENERAL_DISABLED")); - } - } - */ -} - void Locallab::inversshaChanged() { printf("inversshaChanged\n"); @@ -3658,8 +1998,6 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe centerX->setDefault(defParams->locallab.centerX); centerY->setDefault(defParams->locallab.centerY); circrad->setDefault(defParams->locallab.circrad); - centerXbuf->setDefault(defParams->locallab.centerXbuf); - centerYbuf->setDefault(defParams->locallab.centerYbuf); adjblur->setDefault(defParams->locallab.adjblur); thres->setDefault(defParams->locallab.thres); proxi->setDefault(defParams->locallab.proxi); @@ -3706,14 +2044,6 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe scaltm->setDefault(defParams->locallab.scaltm); rewei->setDefault(defParams->locallab.rewei); neigh->setDefault(defParams->locallab.neigh); - nbspot->setDefault(defParams->locallab.nbspot); - anbspot->setDefault(defParams->locallab.anbspot); - hueref->setDefault(defParams->locallab.hueref); - huerefblur->setDefault(defParams->locallab.huerefblur); - chromaref->setDefault(defParams->locallab.chromaref); - lumaref->setDefault(defParams->locallab.lumaref); - sobelref->setDefault(defParams->locallab.sobelref); - vart->setDefault(defParams->locallab.vart); chrrt->setDefault(defParams->locallab.chrrt); @@ -3738,8 +2068,6 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe centerX->setDefaultEditedState(pedited->locallab.centerX ? Edited : UnEdited); centerY->setDefaultEditedState(pedited->locallab.centerY ? Edited : UnEdited); circrad->setDefaultEditedState(pedited->locallab.circrad ? Edited : UnEdited); - centerXbuf->setDefaultEditedState(pedited->locallab.centerXbuf ? Edited : UnEdited); - centerYbuf->setDefaultEditedState(pedited->locallab.centerYbuf ? Edited : UnEdited); adjblur->setDefaultEditedState(pedited->locallab.adjblur ? Edited : UnEdited); thres->setDefaultEditedState(pedited->locallab.thres ? Edited : UnEdited); proxi->setDefaultEditedState(pedited->locallab.proxi ? Edited : UnEdited); @@ -3786,13 +2114,6 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe transit->setDefaultEditedState(pedited->locallab.transit ? Edited : UnEdited); str->setDefaultEditedState(pedited->locallab.str ? Edited : UnEdited); neigh->setDefaultEditedState(pedited->locallab.neigh ? Edited : UnEdited); - nbspot->setDefaultEditedState(pedited->locallab.nbspot ? Edited : UnEdited); - anbspot->setDefaultEditedState(pedited->locallab.anbspot ? Edited : UnEdited); - hueref->setDefaultEditedState(pedited->locallab.hueref ? Edited : UnEdited); - huerefblur->setDefaultEditedState(pedited->locallab.huerefblur ? Edited : UnEdited); - chromaref->setDefaultEditedState(pedited->locallab.chromaref ? Edited : UnEdited); - lumaref->setDefaultEditedState(pedited->locallab.lumaref ? Edited : UnEdited); - sobelref->setDefaultEditedState(pedited->locallab.sobelref ? Edited : UnEdited); vart->setDefaultEditedState(pedited->locallab.vart ? Edited : UnEdited); chrrt->setDefaultEditedState(pedited->locallab.chrrt ? Edited : UnEdited); @@ -3817,8 +2138,6 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe centerX->setDefaultEditedState(Irrelevant); centerY->setDefaultEditedState(Irrelevant); circrad->setDefaultEditedState(Irrelevant); - centerXbuf->setDefaultEditedState(Irrelevant); - centerYbuf->setDefaultEditedState(Irrelevant); adjblur->setDefaultEditedState(Irrelevant); thres->setDefaultEditedState(Irrelevant); proxi->setDefaultEditedState(Irrelevant); @@ -3865,13 +2184,6 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe transit->setDefaultEditedState(Irrelevant); str->setDefaultEditedState(Irrelevant); neigh->setDefaultEditedState(Irrelevant); - nbspot->setDefaultEditedState(Irrelevant); - anbspot->setDefaultEditedState(Irrelevant); - hueref->setDefaultEditedState(Irrelevant); - huerefblur->setDefaultEditedState(Irrelevant); - chromaref->setDefaultEditedState(Irrelevant); - lumaref->setDefaultEditedState(Irrelevant); - sobelref->setDefaultEditedState(Irrelevant); vart->setDefaultEditedState(Irrelevant); chrrt->setDefaultEditedState(Irrelevant); @@ -4205,6 +2517,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) } } + if (a == noisechrodetail) { + if (listener) { + listener->panelChanged(Evlocallabnoisechrodetail, noisechrodetail->getTextValue()); + } + } + if (a == adjblur) { if (listener) { listener->panelChanged(Evlocallabadjblur, adjblur->getTextValue()); @@ -4257,7 +2575,7 @@ void Locallab::avoidChanged() */ } - if (getEnabled() && expdenoi->getEnabled()) { + if (getEnabled()) { if (listener) { if (avoid->get_active()) { listener->panelChanged(Evlocallabavoid, M("GENERAL_ENABLED")); @@ -4268,26 +2586,6 @@ void Locallab::avoidChanged() } } -void Locallab::setAdjusterBehavior(bool degreeadd, bool locYadd, bool locXadd, bool locYTadd, bool locXLadd, bool centeradd, bool lightnessadd, bool contrastadd, bool chromaadd, bool sensiadd, bool transitadd, bool radiusadd, bool strengthadd) -{ - // can I suppress ...no used - degree->setAddMode(degreeadd); - locY->setAddMode(locYadd); - locX->setAddMode(locXadd); - locYT->setAddMode(locYTadd); - locXL->setAddMode(locXLadd); - centerX->setAddMode(centeradd); - centerY->setAddMode(centeradd); - lightness->setAddMode(lightnessadd); - contrast->setAddMode(contrastadd); - chroma->setAddMode(chromaadd); - sensi->setAddMode(sensiadd); - transit->setAddMode(transitadd); - radius->setAddMode(radiusadd); - strength->setAddMode(strengthadd); - -} - // TODO void Locallab::trimValues(rtengine::procparams::ProcParams * pp) { @@ -4300,8 +2598,6 @@ void Locallab::trimValues(rtengine::procparams::ProcParams * pp) centerX->trimValue(pp->locallab.centerX); centerY->trimValue(pp->locallab.centerY); circrad->trimValue(pp->locallab.circrad); - centerXbuf->trimValue(pp->locallab.centerXbuf); - centerYbuf->trimValue(pp->locallab.centerYbuf); adjblur->trimValue(pp->locallab.adjblur); thres->trimValue(pp->locallab.thres); proxi->trimValue(pp->locallab.proxi); @@ -4331,7 +2627,6 @@ void Locallab::trimValues(rtengine::procparams::ProcParams * pp) sensi->trimValue(pp->locallab.sensi); sensiex->trimValue(pp->locallab.sensiex); sensih->trimValue(pp->locallab.sensih); - retrab->trimValue(pp->locallab.retrab); sensiexclu->trimValue(pp->locallab.sensiexclu); struc->trimValue(pp->locallab.struc); sensicb->trimValue(pp->locallab.sensicb); @@ -4347,14 +2642,6 @@ void Locallab::trimValues(rtengine::procparams::ProcParams * pp) transit->trimValue(pp->locallab.transit); str->trimValue(pp->locallab.str); neigh->trimValue(pp->locallab.neigh); - nbspot->trimValue(pp->locallab.nbspot); - anbspot->trimValue(pp->locallab.anbspot); - hueref->trimValue(pp->locallab.hueref); - huerefblur->trimValue(pp->locallab.huerefblur); - chromaref->trimValue(pp->locallab.chromaref); - lumaref->trimValue(pp->locallab.lumaref); - sobelref->trimValue(pp->locallab.sobelref); - vart->trimValue(pp->locallab.vart); chrrt->trimValue(pp->locallab.chrrt); @@ -4376,24 +2663,7 @@ void Locallab::setBatchMode(bool batchMode) ToolPanel::setBatchMode(batchMode); printf("BatchMode : %d\n", batchMode); - hueref->hide(); - huerefblur->hide(); - chromaref->hide(); - lumaref->hide(); - sobelref->hide(); - degree->showEditedCB(); - locY->showEditedCB(); - locX->showEditedCB(); - locYT->showEditedCB(); - locXL->showEditedCB(); - centerX->showEditedCB(); - centerY->showEditedCB(); - circrad->showEditedCB(); - centerXbuf->showEditedCB(); - centerYbuf->showEditedCB(); adjblur->showEditedCB(); - thres->showEditedCB(); - proxi->showEditedCB(); lightness->showEditedCB(); contrast->showEditedCB(); chroma->showEditedCB(); @@ -4420,9 +2690,6 @@ void Locallab::setBatchMode(bool batchMode) sensi->showEditedCB(); sensiex->showEditedCB(); sensih->showEditedCB(); - retrab->showEditedCB(); - sensiexclu->showEditedCB(); - struc->showEditedCB(); sensicb->showEditedCB(); sensibn->showEditedCB(); sensitm->showEditedCB(); @@ -4433,22 +2700,11 @@ void Locallab::setBatchMode(bool batchMode) estop->showEditedCB(); scaltm->showEditedCB(); rewei->showEditedCB(); - transit->showEditedCB(); - Smethod->append(M("GENERAL_UNCHANGED")); str->showEditedCB(); neigh->showEditedCB(); - nbspot->showEditedCB(); - anbspot->showEditedCB(); - hueref->showEditedCB(); - huerefblur->showEditedCB(); - chromaref->showEditedCB(); - lumaref->showEditedCB(); - sobelref->showEditedCB(); vart->showEditedCB(); LocalcurveEditorgainT->setBatchMode(batchMode); - LocalcurveEditorgainTrab->setBatchMode(batchMode); llCurveEditorG->setBatchMode(batchMode); -// llCurveEditorG2->setBatchMode (batchMode); chrrt->showEditedCB(); for (int i = 0; i < 5; i++) { @@ -4520,8 +2776,7 @@ std::vector Locallab::getCurvePoints(ThresholdSelector* tAdjuster) const void Locallab::setEditProvider(EditDataProvider * provider) { - cTgainshape->setEditProvider(provider); - cTgainshaperab->setEditProvider(provider); + // cTgainshape->setEditProvider(provider); expsettings->setEditProvider(provider); } @@ -4779,9 +3034,12 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, int noiselequal->setValue(pp->locallab.noiselequal.at(index)); noisechrof->setValue(pp->locallab.noisechrof.at(index)); noisechroc->setValue(pp->locallab.noisechroc.at(index)); + noisechrodetail->setValue(pp->locallab.noisechrodetail.at(index)); adjblur->setValue(pp->locallab.adjblur.at(index)); bilateral->setValue(pp->locallab.bilateral.at(index)); sensiden->setValue(pp->locallab.sensiden.at(index)); + + // Others avoid->set_active((bool)pp->locallab.avoid.at(index)); } @@ -4837,21 +3095,6 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, int } else { sensisha->show(); } - - /* - lastactivlum = pp->locallab.activlum; - lastProtectSkins = pp->locallab.protectskins; - lastAvoidColorShift = pp->locallab.avoidcolorshift; - lastPastSatTog = pp->locallab.pastsattog; - lastavoid = pp->locallab.avoid; - lastinvers = pp->locallab.invers; - lastcutpast = pp->locallab.cutpast; - lastlastdust = pp->locallab.lastdust; - lastcurvactiv = pp->locallab.curvactiv; - lastinversrad = pp->locallab.inversrad; - lastinversret = pp->locallab.inversret; - lastinverssha = pp->locallab.inverssha; - */ } void Locallab::autoOpenCurve() diff --git a/rtgui/locallab.h b/rtgui/locallab.h index ddafd1ced..e77924a3b 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -1,20 +1,33 @@ /* * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + * 2017 Jacques Desmis + * 2018 Pierre Cabrera */ #include #include "adjuster.h" #include "toolpanel.h" #include "edit.h" -#include "guiutils.h" #include "curveeditor.h" #include "curveeditorgroup.h" #include "toolpanel.h" -#include "../rtengine/imagedata.h" -#include #include "options.h" -#include -#include "../rtengine/improcfun.h" #include "thresholdadjuster.h" #include "controlspotpanel.h" @@ -22,7 +35,6 @@ class Locallab : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, - public rtengine::localListener, public CurveListener, public ColorProvider, public ThresholdCurveProvider, @@ -30,125 +42,8 @@ class Locallab : { private: - rtengine::ProcEvent EvLocenacolor;//548 - rtengine::ProcEvent EvLocenaexpose;//572 - rtengine::ProcEvent EvLocenavibrance;//563 - rtengine::ProcEvent EvLocenablur;//549 - rtengine::ProcEvent EvLocenatonemap;//550 - rtengine::ProcEvent EvLocenareti;//551 - rtengine::ProcEvent EvLocenasharp;//552 - rtengine::ProcEvent EvLocenacbdl;//553 - rtengine::ProcEvent EvLocenadenoi;//554 - - rtengine::ProcEvent EvlocallablocX ;//= 494, - rtengine::ProcEvent EvlocallabCenter;// = 495, - rtengine::ProcEvent EvlocallabDegree;// = 496, - rtengine::ProcEvent Evlocallablightness;// = 497, - rtengine::ProcEvent Evlocallabcontrast;// = 498, - rtengine::ProcEvent Evlocallabchroma;// = 499, - rtengine::ProcEvent Evlocallabtransit;// = 500, - rtengine::ProcEvent Evlocallabavoid;// = 501, - rtengine::ProcEvent EvlocallablocYT;// = 502, - rtengine::ProcEvent EvlocallablocXL;// = 503, - rtengine::ProcEvent EvlocallabSmet;// = 504, - rtengine::ProcEvent Evlocallabinvers;// = 505, - rtengine::ProcEvent Evlocallabradius;// = 506, - rtengine::ProcEvent Evlocallabinversrad;// = 507, - rtengine::ProcEvent Evlocallabstrength;// = 508, - rtengine::ProcEvent Evlocallabsensi;// = 509, - rtengine::ProcEvent EvlocallabretinexMethod;//510 - rtengine::ProcEvent Evlocallabstr;// = 511, - rtengine::ProcEvent Evlocallabneigh;// = 512, - rtengine::ProcEvent Evlocallabvart;// = 513, - rtengine::ProcEvent EvlocallabCTgainCurve;// = 514, - rtengine::ProcEvent Evlocallabchrrt;// = 515, - rtengine::ProcEvent Evlocallabinversret;// = 516, - rtengine::ProcEvent Evlocallabsensih;// = 517, - rtengine::ProcEvent Evlocallabnbspot;// = 518, - rtengine::ProcEvent Evlocallabactivlum;// = 519, - rtengine::ProcEvent Evlocallabanbspot;// = 520, - rtengine::ProcEvent Evlocallabsharradius;// = 521, - rtengine::ProcEvent Evlocallabsharamount;// = 522, - rtengine::ProcEvent Evlocallabshardamping;// = 523, - rtengine::ProcEvent Evlocallabshariter;// = 524, - rtengine::ProcEvent Evlocallabsensis;// = 525, - rtengine::ProcEvent Evlocallabinverssha;// = 526, - rtengine::ProcEvent Evlocallabcircrad;// = 527, - rtengine::ProcEvent Evlocallabthres;// = 528, - rtengine::ProcEvent Evlocallabproxi;// = 529, - rtengine::ProcEvent EvlocallabqualityMethod;// = 530, - rtengine::ProcEvent Evlocallabnoiselumf;// = 531, - rtengine::ProcEvent Evlocallabnoiselumc;// = 532, - rtengine::ProcEvent Evlocallabnoisechrof;// = 533, - rtengine::ProcEvent Evlocallabnoisechroc;// = 534, - rtengine::ProcEvent EvlocallabThresho;// = 535, - rtengine::ProcEvent EvlocallabEqualizer;// = 536, - rtengine::ProcEvent Evlocallabsensicb;// = 537, - rtengine::ProcEvent Evlocallabsensibn;// = 538, - rtengine::ProcEvent Evlocallabstren;// = 539, - rtengine::ProcEvent Evlocallabgamma;// = 540, - rtengine::ProcEvent Evlocallabestop;// = 541, - rtengine::ProcEvent Evlocallabscaltm;// = 542, - rtengine::ProcEvent Evlocallabrewei;// = 543, - rtengine::ProcEvent Evlocallabsensitm;// = 544, - rtengine::ProcEvent EvlocallabCTgainCurverab;// = 545, - rtengine::ProcEvent Evlocallabretrab;// = 546, - rtengine::ProcEvent Evlocallabllshape;// = 547, - rtengine::ProcEvent EvlocallabLHshape;// = 555, - rtengine::ProcEvent Evlocallabcurvactiv;// = 556, - rtengine::ProcEvent Evlocallabccshape;// = 557, - rtengine::ProcEvent EvlocallabqualitycurveMethod;// = 558, - rtengine::ProcEvent Evlocallabhueref;// = 559, - rtengine::ProcEvent Evlocallabchromaref;// = 560, - rtengine::ProcEvent Evlocallablumaref;// = 561, - rtengine::ProcEvent EvlocallabHHshape;// = 562, - rtengine::ProcEvent EvlocallabSkinTonesCurve;// = 564, - rtengine::ProcEvent EvlocallabProtectSkins;// = 565, - rtengine::ProcEvent EvlocallabAvoidColorShift;// = 566, - rtengine::ProcEvent EvlocallabPastSatTog;// = 567, - rtengine::ProcEvent EvlocallabPastels;// = 568, - rtengine::ProcEvent EvlocallabSaturated;// = 569, - rtengine::ProcEvent EvlocallabPastSatThreshold;// = 570, - rtengine::ProcEvent Evlocallabsensiv;// = 571, - rtengine::ProcEvent Evlocallabexpcomp;// = 573, - rtengine::ProcEvent Evlocallabhlcompr;// = 574, - rtengine::ProcEvent Evlocallabhlcomprthresh;// = 575, - rtengine::ProcEvent Evlocallabblack;// = 576, - rtengine::ProcEvent Evlocallabshcompr;// = 577, - rtengine::ProcEvent Evlocallabsensiex;// = 578, - rtengine::ProcEvent Evlocallabshapeexpos;// = 579, - rtengine::ProcEvent EvlocallabCenterbuf;// = 580, - rtengine::ProcEvent Evlocallabadjblur;// = 581, - rtengine::ProcEvent Evlocallabcutpast;// = 582, - rtengine::ProcEvent Evlocallabchromacbdl;// = 583, - rtengine::ProcEvent EvlocallabblurMethod;//584 - rtengine::ProcEvent EvlocallabdustMethod;// = 585, - rtengine::ProcEvent Evlocallablastdust;// = 586, - rtengine::ProcEvent Evlocallabsobelref;// = 587, - rtengine::ProcEvent Evlocallabexclumethod;// = 588, - rtengine::ProcEvent Evlocallabsensiexclu;// = 589, - rtengine::ProcEvent Evlocallabstruc;// = 590, - rtengine::ProcEvent Evlocallabwarm;// = 591, - rtengine::ProcEvent Evlocallabnoiselumdetail;// = 592, - rtengine::ProcEvent Evlocallabnoisechrodetail;// = 593, - rtengine::ProcEvent Evlocallabsensiden;// = 594, - rtengine::ProcEvent Evlocallabhuerefblur;// = 595, - rtengine::ProcEvent EvlocallabEnabled;// = 596, - rtengine::ProcEvent EvlocallablocY;// = 597, - rtengine::ProcEvent Evlocallabbilateral;// = 598, - rtengine::ProcEvent Evlocallabnoiselequal;// = 599, - rtengine::ProcEvent Evlocallabshapemethod;// = 600, - rtengine::ProcEvent Evlocallabspotduplicated;// = 601 - rtengine::ProcEvent Evlocallabspotcreated;// = 602 - - IdleRegister idle_register; - - int lastObject; - void foldAllButMe(GdkEventButton* event, MyExpander *expander); - void enableToggled(MyExpander *expander); - -//protected: - + // Expander widgets + ControlSpotPanel* const expsettings; MyExpander* const expcolor; MyExpander* const expexpose; MyExpander* const expvibrance; @@ -158,259 +53,200 @@ private: MyExpander* const expsharp; MyExpander* const expcbdl; MyExpander* const expdenoi; - ControlSpotPanel* const expsettings; + sigc::connection enablecolorConn, enableexposeConn, enablevibranceConn, enableblurConn, enabletonemapConn, enableretiConn, enablesharpConn, enablecbdlConn, enabledenoiConn; - CurveEditorGroup* const LocalcurveEditorgainT; - CurveEditorGroup* const LocalcurveEditorgainTrab; + // Curve widgets + // Color & Light CurveEditorGroup* const llCurveEditorG; + DiagonalCurveEditor* llshape; + DiagonalCurveEditor* ccshape; + FlatCurveEditor* LHshape; + FlatCurveEditor* HHshape; + // Exposure + CurveEditorGroup* const curveEditorG; + DiagonalCurveEditor* shapeexpos; + // Vibrance + CurveEditorGroup* const curveEditorGG; + DiagonalCurveEditor* skinTonesCurve; + // Retinex + CurveEditorGroup* const LocalcurveEditorgainT; + FlatCurveEditor* cTgainshape; - Adjuster* multiplier[5]; - + // Adjuster widgets + // Color & Light Adjuster* const lightness; Adjuster* const contrast; Adjuster* const chroma; Adjuster* const sensi; - + // Exposure Adjuster* const expcomp; Adjuster* const hlcompr; Adjuster* const hlcomprthresh; Adjuster* const black; Adjuster* const shcompr; + Adjuster* const warm; Adjuster* const sensiex; + // Vibrance + Adjuster* const saturated; + Adjuster* const pastels; + Adjuster* const sensiv; + // Blur & Noise Adjuster* const radius; Adjuster* const strength; Adjuster* const sensibn; + // Tone Mapping Adjuster* const stren; Adjuster* const gamma; Adjuster* const estop; Adjuster* const scaltm; Adjuster* const rewei; Adjuster* const sensitm; + // Retinex Adjuster* const str; + Adjuster* const chrrt; Adjuster* const neigh; Adjuster* const vart; - Adjuster* const chrrt; Adjuster* const sensih; - Adjuster* const retrab; - Adjuster* const chromacbdl; - Adjuster* const threshold; - Adjuster* const sensicb; + // Sharpening Adjuster* const sharradius; Adjuster* const sharamount; Adjuster* const shardamping; Adjuster* const shariter; Adjuster* const sensisha; + // Contrast by detail levels + Adjuster* multiplier[5]; + Adjuster* const chromacbdl; + Adjuster* const threshold; + Adjuster* const sensicb; + // Denoise + Adjuster* const noiselumf; + Adjuster* const noiselumc; Adjuster* const noiselumdetail; + Adjuster* const noiselequal; + Adjuster* const noisechrof; + Adjuster* const noisechroc; Adjuster* const noisechrodetail; + Adjuster* const adjblur; Adjuster* const bilateral; Adjuster* const sensiden; - Adjuster* const hueref; - Adjuster* const huerefblur; - Adjuster* const chromaref; - Adjuster* const lumaref; - Adjuster* const sobelref; - Adjuster* const centerXbuf; - Adjuster* const centerYbuf; - MyComboBoxText* const retinexMethod; - MyComboBoxText* const qualitycurveMethod; - MyComboBoxText* const blurMethod; - MyComboBoxText* const dustMethod; - - Gtk::Frame* const shapeFrame; - Gtk::Frame* const superFrame; - Gtk::Frame* const dustFrame; - Gtk::Frame* const wavFrame; - - Gtk::Label* const labmdh; - Gtk::Label* const labqualcurv; - Gtk::Label* const labmS; - Gtk::Label* const labmEx; - Gtk::Label* const labmshape; - - Gtk::HBox* const dhbox; - Gtk::HBox* const qualcurvbox; - - Gtk::CheckButton* const avoid; - Gtk::CheckButton* const activlum; - Gtk::CheckButton* const invers; + // ButtonCheck widgets + // Color & Light Gtk::CheckButton* const curvactiv; - Gtk::CheckButton* const inversrad; + Gtk::CheckButton* const invers; + sigc::connection curvactivConn, inversConn; + // Vibrance + Gtk::CheckButton* const protectSkins; + Gtk::CheckButton* const avoidColorShift; + Gtk::CheckButton* const pastSatTog; + sigc::connection pskinsconn, ashiftconn, pastsattogconn; + // Blur & Noise + Gtk::CheckButton* const activlum; + sigc::connection activlumConn; + // Retinex Gtk::CheckButton* const inversret; + sigc::connection inversretConn; + // Sharpening Gtk::CheckButton* const inverssha; - Gtk::CheckButton* const cutpast; - Gtk::CheckButton* const lastdust; + sigc::connection inversshaConn; + // Others + Gtk::CheckButton* const avoid; + sigc::connection avoidConn; - Gtk::Label* labspotdup; - - Gtk::Button* neutral; - Gtk::HBox* neutrHBox; - Gtk::Button* neutral1; - Gtk::HBox* neutrHBox1; - - CurveEditorGroup* curveEditorG; - CurveEditorGroup* curveEditorG2; - DiagonalCurveEditor* shapeexpos; - DiagonalCurveEditor* shape2; - - FlatCurveEditor* cTgainshape; - FlatCurveEditor* cTgainshaperab; - DiagonalCurveEditor* llshape; - DiagonalCurveEditor* ccshape; - Gtk::Image* irg; - FlatCurveEditor* LHshape; - FlatCurveEditor* HHshape; - - CurveEditorGroup* curveEditorGG; - Adjuster* pastels; - Adjuster* saturated; - Adjuster* warm; - Adjuster* adjblur; - Adjuster* noiselequal; - Adjuster* noiselumf; - Adjuster* noiselumc; - Adjuster* noisechrof; - Adjuster* noisechroc; - - ThresholdAdjuster* psThreshold; - Gtk::CheckButton* protectSkins; - Gtk::CheckButton* avoidColorShift; - Gtk::CheckButton* pastSatTog; - DiagonalCurveEditor* skinTonesCurve; - Adjuster* sensiv; - - bool lastProtectSkins; - bool lastAvoidColorShift; - bool lastPastSatTog; - - sigc::connection pskinsconn; - sigc::connection ashiftconn; - sigc::connection pastsattogconn; - - sigc::connection lumaneutralPressedConn; - sigc::connection lumacontrastPlusPressedConn; - sigc::connection lumacontrastMinusPressedConn; - sigc::connection enablecolorConn, enableexposeConn, enablevibranceConn, enableblurConn, enabletonemapConn; - sigc::connection enableretiConn, enablesharpConn, enablecbdlConn; - sigc::connection enabledenoiConn; - sigc::connection avoidConn, inversConn, cutpastConn, lastdustConn, curvactivConn, activlumConn, inversradConn, inversretConn, inversshaConn, neutralconn, neutralconn1; - sigc::connection retinexMethodConn; + // ComboBox widgets + // Color & Light + MyComboBoxText* const qualitycurveMethod; sigc::connection qualitycurveMethodConn; + // Blur & Noise + MyComboBoxText* const blurMethod; sigc::connection blurMethodConn; - sigc::connection dustMethodConn; + // Retinex + MyComboBoxText* const retinexMethod; + sigc::connection retinexMethodConn; - bool lastspotduplicated; + // ThresholdAdjuster widgets + // Vibrance + ThresholdAdjuster* const psThreshold; - int nextdatasp[102]; - int nextlength; - bool nextspotdup; - std::string nextstr; - std::string nextstr2; - std::string nextll_str; - std::string nextll_str2; - std::string nextlh_str; - std::string nextlh_str2; - std::string nextcc_str; - std::string nextcc_str2; - std::string nexthh_str; - std::string nexthh_str2; - std::string nextsk_str; - std::string nextsk_str2; - std::string nextps_str; - std::string nextps_str2; - std::string nextex_str; - std::string nextex_str2; + // Other widgets + Gtk::Label* const labqualcurv; + Gtk::Button* const lumacontrastMinusButton; + Gtk::Button* const lumaneutralButton; + Gtk::Button* const lumacontrastPlusButton; + sigc::connection lumacontrastMinusPressedConn, lumaneutralPressedConn, lumacontrastPlusPressedConn; - bool lastavoid, lastinvers, lastcutpast, lastlastdust, lastinversrad, lastinversret, lastactivlum, lastinverssha, lastcurvactiv; - int lastanbspot; + // Expander management functions + void foldAllButMe(GdkEventButton* event, MyExpander *expander); + void enableToggled(MyExpander *expander); - // To be deleted - Adjuster* const locX; - Adjuster* const locXL; - Adjuster* const degree; - Adjuster* const locY; - Adjuster* const locYT; - Adjuster* const centerX; - Adjuster* const centerY; - Adjuster* const circrad; - Adjuster* const sensiexclu; - Adjuster* const struc; - Adjuster* nbspot; - MyComboBoxText* const shapemethod; - MyComboBoxText* const Smethod; - MyComboBoxText* const Exclumethod; - Gtk::CheckButton* spotduplicated; - Adjuster* const thres; - Adjuster* const proxi; - Adjuster* const transit; - MyComboBoxText* const qualityMethod; - - // To be deleted ?? - Adjuster* const anbspot; - -public: - - Locallab(); - ~Locallab(); - - void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); - void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); - void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); - void updateLocallabGUI(const rtengine::procparams::ProcParams* pp, int index); - - void setBatchMode(bool batchMode); - - void SmethodChanged(); // TODO To be deleted - void shapemethodChanged(); // TODO To be deleted - void ExclumethodChanged(); // TODO To be deleted - void writeOptions(std::vector &tpOpen); - void updateToolState(std::vector &tpOpen); - - void adjusterChanged(Adjuster* a, double newval); - void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop); - - void enabledChanged(); - void setAdjusterBehavior(bool degreeadd, bool locYadd, bool locXadd, bool locYTadd, bool locXLadd, bool centeradd, bool lightnessadd, bool contrastadd, bool chromaadd, bool sensiadd, bool transitadd, bool radiusadd, bool strengthadd); - void trimValues(rtengine::procparams::ProcParams* pp); - void avoidChanged(); - void activlumChanged(); - void inversChanged(); + // ButtonCheck event functions + // Color & Light void curvactivChanged(); - void inversradChanged(); - void inversretChanged(); - void inversshaChanged(); - void cutpastChanged(); - void lastdustChanged(); - void spotduplicatedChanged(); - bool spotdupComputed_(); - - void spotdupChanged(bool spotchan); - void curveChanged(CurveEditor* ce); - void autoOpenCurve(); - void localChanged(int **datasp, std::string datastr, std::string ll_str, std::string lh_str, std::string cc_str, std::string hh_str, std::string sk_str, std::string ps_str, std::string ex_str, int sp, int maxdat); - void localretChanged(int **datasp, std::string datastr, std::string ll_str, std::string lh_str, std::string cc_str, std::string hh_str, std::string sk_str, std::string ps_str, std::string ex_str, int sp, int maxdat); - bool localComputed_(); - bool localretComputed_(); - void setEditProvider(EditDataProvider* provider); - void subscribe(); - void unsubscribe(); - void retinexMethodChanged(); - void blurMethodChanged(); - void dustMethodChanged(); - void qualityMethodChanged(); // TODO To be deleted - void qualitycurveMethodChanged(); - void lumaneutralPressed(); - void lumacontrastPlusPressed(); - void lumacontrastMinusPressed(); - void neutral_pressed(); - virtual void colorForValue(double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller); + void inversChanged(); + // Vibrance void protectskins_toggled(); void avoidcolorshift_toggled(); void pastsattog_toggled(); - std::vector getCurvePoints(ThresholdSelector* tAdjuster) const; + // Blur & Noise + void activlumChanged(); + // Retinex + void inversretChanged(); + // Sharpening + void inversshaChanged(); + // Others + void avoidChanged(); + // ComboBox event functions + // Color & Light + void qualitycurveMethodChanged(); + // Blur & Noise + void blurMethodChanged(); + // Retinex + void retinexMethodChanged(); + + // Other widgets event functions + void lumacontrastMinusPressed(); + void lumaneutralPressed(); + void lumacontrastPlusPressed(); + + // Locallab GUI management function + void updateLocallabGUI(const rtengine::procparams::ProcParams* pp, int index); + +public: + Locallab(); + ~Locallab(); + + // FoldableToolPanel management functions + void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); + void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); + void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); + void setBatchMode(bool batchMode); + void trimValues(rtengine::procparams::ProcParams* pp); void setListener(ToolPanelListener* tpl); void enableListener(); void disableListener(); -}; + void writeOptions(std::vector &tpOpen); + void updateToolState(std::vector &tpOpen); + // EditProvider management function + void setEditProvider(EditDataProvider* provider); + void subscribe(); + void unsubscribe(); + + // FoldableToolPanel event function + void enabledChanged(); + + // Curve management function + void autoOpenCurve(); + + // Curve event function + void curveChanged(CurveEditor* ce); + + // Adjuster event function + void adjusterChanged(Adjuster* a, double newval); + + // ThresholdAdjuster event functions + virtual void colorForValue(double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller); + std::vector getCurvePoints(ThresholdSelector* tAdjuster) const; + void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop); +}; diff --git a/rtgui/options.cc b/rtgui/options.cc index e60bc8477..4a42c9a0c 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -555,8 +555,6 @@ void Options::setDefaults () rtSettings.level0_cbdl = 0; rtSettings.level123_cbdl = 30; //locallab - rtSettings.nspot = 8;//between 1 and ?? - rtSettings.locdelay = false;//true enabled delay 200 for selection spot rtSettings.cropsleep = 50;//generate a pause of 50 µs for dcrop (100%)to avoid crash when moving window, between 0 to ?? rtSettings.reduchigh = 0.85;//transition for luminance in scope rtSettings.reduclow = 0.85;//transition for luminance out scope @@ -712,9 +710,6 @@ void Options::readFromFile (Glib::ustring fname) if ( keyFile.has_key ("General", "Verbose")) { rtSettings.verbose = keyFile.get_boolean ( "General", "Verbose"); } - if (keyFile.has_key ("General", "Nspot")) { - rtSettings.nspot = keyFile.get_integer ("General", "Nspot"); - } if (keyFile.has_key ("General", "Cropsleep")) { rtSettings.cropsleep = keyFile.get_integer ("General", "Cropsleep"); @@ -727,12 +722,6 @@ void Options::readFromFile (Glib::ustring fname) if (keyFile.has_key ("General", "Reduclow")) { rtSettings.reduclow = keyFile.get_double ("General", "Reduclow"); } - - - if (keyFile.has_key ("General", "Locdelay")) { - rtSettings.locdelay = keyFile.get_boolean ("General", "Locdelay"); - } - } if (keyFile.has_group ("External Editor")) { @@ -1827,8 +1816,6 @@ void Options::saveToFile (Glib::ustring fname) keyFile.set_string ("General", "DarkFramesPath", rtSettings.darkFramesPath); keyFile.set_string ("General", "FlatFieldsPath", rtSettings.flatFieldsPath); keyFile.set_boolean ("General", "Verbose", rtSettings.verbose); - keyFile.set_integer ("General", "Nspot", rtSettings.nspot); - keyFile.set_boolean ("General", "Locdelay", rtSettings.locdelay); keyFile.set_integer ("General", "Cropsleep", rtSettings.cropsleep); keyFile.set_double ("General", "Reduchigh", rtSettings.reduchigh); keyFile.set_double ("General", "Reduclow", rtSettings.reduclow); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 31b7fa125..d6ed3f6da 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -334,6 +334,8 @@ void ParamsEdited::set(bool v) locallab.isvisible = v; locallab.shape = v; locallab.spotMethod = v; + locallab.sensiexclu = v; + locallab.struc = v; locallab.shapeMethod = v; locallab.locX = v; locallab.locXL = v; @@ -430,9 +432,11 @@ void ParamsEdited::set(bool v) locallab.noiselequal = v; locallab.noisechrof = v; locallab.noisechroc = v; + locallab.noisechrodetail = v; locallab.adjblur = v; locallab.bilateral = v; locallab.sensiden = v; + // Others locallab.avoid = v; pcvignette.enabled = v; @@ -998,6 +1002,8 @@ void ParamsEdited::initFrom(const std::vector& locallab.isvisible = locallab.isvisible && p.locallab.isvisible == other.locallab.isvisible; locallab.shape = locallab.shape && p.locallab.shape == other.locallab.shape; locallab.spotMethod = locallab.spotMethod && p.locallab.spotMethod == other.locallab.spotMethod; + locallab.sensiexclu = locallab.sensiexclu && p.locallab.sensiexclu == other.locallab.sensiexclu; + locallab.struc = locallab.struc && p.locallab.struc == other.locallab.struc; locallab.shapeMethod = locallab.shapeMethod && p.locallab.shapeMethod == other.locallab.shapeMethod; locallab.locX = locallab.locX && p.locallab.locX == other.locallab.locX; locallab.locXL = locallab.locXL && p.locallab.locXL == other.locallab.locXL; @@ -1094,9 +1100,11 @@ void ParamsEdited::initFrom(const std::vector& locallab.noiselequal = locallab.noiselequal && p.locallab.noiselequal == other.locallab.noiselequal; locallab.noisechrof = locallab.noisechrof && p.locallab.noisechrof == other.locallab.noisechrof; locallab.noisechroc = locallab.noisechroc && p.locallab.noisechroc == other.locallab.noisechroc; + locallab.noisechrodetail = locallab.noisechrodetail && p.locallab.noisechrodetail == other.locallab.noisechrodetail; locallab.adjblur = locallab.adjblur && p.locallab.adjblur == other.locallab.adjblur; locallab.bilateral = locallab.bilateral && p.locallab.bilateral == other.locallab.bilateral; locallab.sensiden = locallab.sensiden && p.locallab.sensiden == other.locallab.sensiden; + // Others locallab.avoid = locallab.avoid && p.locallab.avoid == other.locallab.avoid; pcvignette.enabled = pcvignette.enabled && p.pcvignette.enabled == other.pcvignette.enabled; @@ -2480,6 +2488,14 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spotMethod = mods.locallab.spotMethod; } + if (locallab.sensiexclu) { + toEdit.locallab.sensiexclu = mods.locallab.sensiexclu; + } + + if (locallab.struc) { + toEdit.locallab.struc = mods.locallab.struc; + } + if (locallab.shapeMethod) { toEdit.locallab.shapeMethod = mods.locallab.shapeMethod; } @@ -2823,6 +2839,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.noisechroc = mods.locallab.noisechroc; } + if (locallab.noisechrodetail) { + toEdit.locallab.noisechrodetail = mods.locallab.noisechrodetail; + } + if (locallab.adjblur) { toEdit.locallab.adjblur = mods.locallab.adjblur; } @@ -2835,6 +2855,7 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.sensiden = mods.locallab.sensiden; } + // Others if (locallab.avoid) { toEdit.locallab.avoid = mods.locallab.avoid; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 2c50f6586..d9329eb97 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -465,6 +465,8 @@ public: bool isvisible; bool shape; bool spotMethod; + bool sensiexclu; + bool struc; bool shapeMethod; bool locX; bool locXL; @@ -557,9 +559,11 @@ public: bool noiselequal; bool noisechrof; bool noisechroc; + bool noisechrodetail; bool adjblur; bool bilateral; bool sensiden; + // Others bool avoid; }; diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index 9e5ac3d19..da2e2e846 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -595,7 +595,6 @@ void ToolPanelCoordinator::initImage(rtengine::StagedImageProcessor* ipc_, bool ipc->setAutoChromaListener(dirpyrdenoise); ipc->setWaveletListener(wavelet); ipc->setRetinexListener(retinex); - ipc->setlocalListener(locallab); ipc->setSizeListener(crop); ipc->setSizeListener(resize); ipc->setImageTypeListener(this);