diff --git a/rtdata/languages/default b/rtdata/languages/default index 656345a87..a3e99cfc2 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1331,7 +1331,7 @@ HISTORY_MSG_1078;Local - Red and skin protection HISTORY_MSG_1079;Local - CIECAM Sigmoid strength J HISTORY_MSG_1080;Local - CIECAM Sigmoid threshold HISTORY_MSG_1081;Local - CIECAM Sigmoid blend -HISTORY_MSG_1082;Local - CIECAM Sigmoid Q J +HISTORY_MSG_1082;Local - CIECAM Sigmoid Q BlackEv WhiteEv HISTORY_MSG_1083;Local - CIECAM Hue HISTORY_MSG_1084;Local - Uses Black Ev - White Ev HISTORY_MSG_1085;Local - Jz lightness @@ -1409,6 +1409,8 @@ HISTORY_MSG_1145;Local - Jz Log encoding HISTORY_MSG_1146;Local - Jz Log encoding target gray HISTORY_MSG_1147;Local - Jz BlackEv WhiteEv HISTORY_MSG_1148;Local - Jz Sigmoid +HISTORY_MSG_1149;Local - Q Sigmoid +HISTORY_MSG_1150;Local - Log encoding Q instead Sigmoid Q HISTORY_MSG_BLSHAPE;Blur by level HISTORY_MSG_BLURCWAV;Blur chroma HISTORY_MSG_BLURWAV;Blur luminance @@ -1575,6 +1577,7 @@ ICCPROFCREATOR_ILL_41;D41 ICCPROFCREATOR_ILL_50;D50 ICCPROFCREATOR_ILL_55;D55 ICCPROFCREATOR_ILL_60;D60 +ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater ICCPROFCREATOR_ILL_65;D65 ICCPROFCREATOR_ILL_80;D80 ICCPROFCREATOR_ILL_DEF;Default @@ -1589,6 +1592,7 @@ ICCPROFCREATOR_PRIM_BETA;BetaRGB ICCPROFCREATOR_PRIM_BLUX;Blue X ICCPROFCREATOR_PRIM_BLUY;Blue Y ICCPROFCREATOR_PRIM_BRUCE;BruceRGB +ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 ICCPROFCREATOR_PRIM_GREX;Green X ICCPROFCREATOR_PRIM_GREY;Green Y ICCPROFCREATOR_PRIM_PROPH;Prophoto @@ -3010,6 +3014,7 @@ TP_LOCALLAB_JZHFRA;Curves Hz TP_LOCALLAB_JZHJZFRA;Curve Jz(Hz) TP_LOCALLAB_JZHUECIE;Hue Rotation TP_LOCALLAB_JZLOGWB_TOOLTIP;If Auto is enabled, it will calculate and adjust the Ev levels and the 'Mean luminance Yb%' for the spot area. The resulting values will be used by all Jz operations including "Log Encoding Jz".\nAlso calculates the absolute luminance at the time of shooting. +TP_LOCALLAB_JZLOGWBS_TOOLTIP;Black Ev and White Ev adjustments can be different depending on whether Log encoding or Sigmoid is used.\nFor Sigmoid, a change (increase in most cases) of White Ev may be necessary to obtain a better rendering of highlights, contrast and saturation. TP_LOCALLAB_JZSAT;Saturation TP_LOCALLAB_JZSHFRA;Shadows/Highlights Jz TP_LOCALLAB_JZSOFTCIE;Soft radius (GuidedFilter) @@ -3065,6 +3070,8 @@ TP_LOCALLAB_LOGBASE_TOOLTIP;Default = 2.\nValues less than 2 reduce the action o TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP;Estimated values of dynamic range i.e. Black Ev and White Ev TP_LOCALLAB_LOGCATAD_TOOLTIP;Chromatic adaptation allows us to interpret a color according to its spatio-temporal environment.\nUseful when the white balance deviates significantly from the D50 reference.\nAdapts colors to the illuminant of the output device. TP_LOCALLAB_LOGCOLORFL;Colorfulness (M) +TP_LOCALLAB_LOGCIE;Log encoding instead of Sigmoid +TP_LOCALLAB_LOGCIE_TOOLTIP;Allows you tu use Black Ev, White Ev, Scene Mean luminance(Yb%) and Viewing Mean luminance(Yb%) for tone-mapping using Log encoding Q. TP_LOCALLAB_LOGCOLORF_TOOLTIP;Perceived amount of hue in relation to gray.\nIndicator that a stimulus appears more or less colored. TP_LOCALLAB_LOGCONQL;Contrast (Q) TP_LOCALLAB_LOGCONTL;Contrast (J) @@ -3373,13 +3380,13 @@ TP_LOCALLAB_SHRESFRA;Shadows/Highlights & TRC TP_LOCALLAB_SHTRC_TOOLTIP;Based on 'working profile' (only those provided), modifies the tones of the image by acting on a TRC (Tone Response Curve).\nGamma acts mainly on light tones.\nSlope acts mainly on dark tones.\nIt is recommended that the TRC of both devices (monitor and output profile) be sRGB (default). TP_LOCALLAB_SH_TOOLNAME;Shadows/Highlights & Tone Equalizer TP_LOCALLAB_SIGMAWAV;Attenuation response -TP_LOCALLAB_SIGFRA;Sigmoid J & Q +TP_LOCALLAB_SIGFRA;Sigmoid Q & Log encoding Q TP_LOCALLAB_SIGJZFRA;Sigmoid Jz TP_LOCALLAB_SIGMOIDLAMBDA;Contrast TP_LOCALLAB_SIGMOIDTH;Threshold (Gray point) TP_LOCALLAB_SIGMOIDBL;Blend -TP_LOCALLAB_SIGMOIDQJ;Use Q instead of J -TP_LOCALLAB_SIGMOID_TOOLTIP;Allows you to simulate a Tone-mapping appearance using both the'Ciecam' and 'Sigmoid' function.\nThree sliders: a) Strength acts on the shape of the sigmoid curve and consequently on the strength; b) Threshold distributes the action according to the luminance; c)Blend acts on the final aspect of the image, contrast and luminance. +TP_LOCALLAB_SIGMOIDQJ;Uses Black Ev & White Ev +TP_LOCALLAB_SIGMOID_TOOLTIP;Allows you to simulate a Tone-mapping appearance using both the'Ciecam' (or 'Jz') and 'Sigmoid' function.\nThree sliders: a) Contrast acts on the shape of the sigmoid curve and consequently on the strength; b) Threshold (Gray point) distributes the action according to the luminance; c)Blend acts on the final aspect of the image, contrast and luminance. TP_LOCALLAB_SIM;Simple TP_LOCALLAB_SLOMASKCOL;Slope TP_LOCALLAB_SLOMASK_TOOLTIP;Adjusting Gamma and Slope can provide a soft and artifact-free transformation of the mask by progressively modifying ā€˜L’ to avoid any discontinuities. diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index eee9b57e1..b3618bfb3 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -2582,6 +2582,8 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L bool jabcie = false;//always disabled bool islogjz = params->locallab.spots.at(sp).forcebw; bool issigjz = params->locallab.spots.at(sp).sigjz; + bool issigq = params->locallab.spots.at(sp).sigq; + bool islogq = params->locallab.spots.at(sp).logcie; //sigmoid J Q variables const float sigmoidlambda = params->locallab.spots.at(sp).sigmoidldacie; @@ -2630,8 +2632,8 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L const float ath = sigmoidth - 1.f; const float bth = 1; - float sila = pow_F(sigmoidlambda, 0.25f); - const float sigm = 1.4f + 25.f *(1.f - sila);//with sigmoidlambda = 0 e^16 = 9000000 e^20=485000000 e^23.5 = 16000000000 e^26.4 = 291000000000 + float sila = pow_F(sigmoidlambda, 0.5f); + const float sigm = 3.3f + 7.1f *(1.f - sila);//e^10.4 = 32860 => sigm vary from 3.3 to 10.4 const float bl = sigmoidbl; //end sigmoid @@ -3049,6 +3051,13 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L const float pow1n = pow_F(1.64f - pow_F(0.29f, nj), 0.73f); const float coe = pow_F(fl, 0.25f); const float QproFactor = (0.4f / c) * (aw + 4.0f) ; + const double shadows_range = params->locallab.spots.at(sp).blackEvjz; + const double targetgray = params->locallab.spots.at(sp).targetjz; + double targetgraycor = 0.15; + double dynamic_range = std::max(params->locallab.spots.at(sp).whiteEvjz - shadows_range, 0.5); + const double noise = pow(2., -16.6);//16.6 instead of 16 a little less than others, but we work in double + const double log2 = xlog(2.); + const float log2f = xlogf(2.f); if((mocam == 0 || mocam ==2) && call == 0) {//Jz az bz ==> Jz Cz Hz before Ciecam16 double mini = 1000.; @@ -3169,9 +3178,9 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L const float btjz = sigmoidthjz; const float athjz = sigmoidthjz - 1.f; - const float bthjz = 1; - float powsig = pow_F(sigmoidlambdajz, 0.25f); - const float sigmjz = 1.4f + 25.f *(1.f - powsig);// e^26.4 = 291000000000 + const float bthjz = 1.f; + float powsig = pow_F(sigmoidlambdajz, 0.5f); + const float sigmjz = 3.3f + 7.1f *(1.f - powsig);// e^10.4 = 32860 const float bljz = sigmoidbljz; double contreal = 0.2 * params->locallab.spots.at(sp).contjzcie; @@ -3217,12 +3226,14 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L //log encoding Jz double gray = 0.15; + /* const double shadows_range = params->locallab.spots.at(sp).blackEvjz; const double targetgray = params->locallab.spots.at(sp).targetjz; double targetgraycor = 0.15; double dynamic_range = std::max(params->locallab.spots.at(sp).whiteEvjz - shadows_range, 0.5); const double noise = pow(2., -16.6);//16.6 instead of 16 a little less than others, but we work in double const double log2 = xlog(2.); + */ double base = 10.; double linbase = 10.; if(logjz) {//with brightness Jz @@ -3539,7 +3550,7 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L if(issigjz && iscie) {//sigmoid Jz float val = Jz; if(islogjz) { - val = std::max((xlog(Jz) / log2 - shadows_range) / dynamic_range, noise);//in range EV + val = std::max((xlog(Jz) / log2 - shadows_range) / (dynamic_range + 1.5), noise);//in range EV } if(sigmoidthjz >= 1.f) { thjz = athjz * val + bthjz;//threshold @@ -3685,6 +3696,8 @@ if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2 if(lp.logena && !(params->locallab.spots.at(sp).expcie && mocam == 1)) {//Log encoding only, but enable for log encoding if we use Cam16 module both with log encoding plum = 100.f; } + + #ifdef _OPENMP #pragma omp parallel for reduction(min:minicam) reduction(max:maxicam) reduction(min:minicamq) reduction(max:maxicamq) reduction(min:minisat) reduction(max:maxisat) reduction(min:miniM) reduction(max:maxiM) reduction(+:sumcam) reduction(+:sumcamq) reduction(+:sumsat) reduction(+:sumM)if(multiThread) @@ -3750,6 +3763,36 @@ if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2 printf("Cam16 Scene Saturati-s Colorfulln_M- minSat=%3.1f maxSat=%3.1f meanSat=%3.1f minM=%3.1f maxM=%3.1f meanM=%3.1f\n", (double) minisat, (double) maxisat, (double) sumsat, (double) miniM, (double) maxiM, (double) sumM); } + float base = 10.; + float linbase = 10.; + float gray = 15.; + if(islogq) {//with brightness Jz + gray = 0.01f * (float) params->locallab.spots.at(sp).sourceGraycie; + gray = pow_F(gray, 1.2f);//or 1.15 => modification to increase sensitivity gain, only on defaults, of course we can change this value manually...take into account suuround and Yb Cam16 + const float targetgraycie = params->locallab.spots.at(sp).targetGraycie; + float targetgraycor = pow_F(0.01f * targetgraycie, 1.15f); + base = targetgraycie > 1.f && targetgraycie < 100.f && (float) dynamic_range > 0.f ? find_gray(std::abs((float) shadows_range) / (float) dynamic_range,(targetgraycor)) : 0.f; + linbase = std::max(base, 2.f);//2. minimal base log to avoid very bad results + if (settings->verbose) { + printf("Base logarithm encoding Q=%5.1f\n", (double) linbase); + } + } + + const auto applytoq = + [ = ](float x) -> float { + + x = rtengine::max(x, (float) noise); + x = rtengine::max(x / gray, (float) noise);//gray = gain - before log conversion + x = rtengine::max((xlogf(x) / log2f - (float) shadows_range) / (float) dynamic_range, (float) noise);//x in range EV + assert(x == x); + + if (linbase > 0.f)//apply log base in function of targetgray blackEvjz and Dynamic Range + { + x = xlog2lin(x, linbase); + } + return x; + }; + //Ciecam "old" code not change except sigmoid added @@ -3878,8 +3921,21 @@ if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2 Qpro = CAMBrightCurveQ[(float)(Qpro * coefQ)] / coefQ; //brightness and contrast - if(sigmoidlambda > 0.f && iscie && sigmoidqj == true) {//sigmoid Q only with ciecam module + if(islogq && issigq) { + float val = Qpro * coefq;; + if (val > (float) noise) { + float mm = applytoq(val); + float f = mm / val; + Qpro *= f; + } + } + + + if(issigq && iscie && !islogq) {//sigmoid Q only with ciecam module float val = Qpro * coefq; + if(sigmoidqj == true) { + val = std::max((xlog(val) / log2 - shadows_range) / (dynamic_range + 1.5), noise);//in range EV + } if(sigmoidth >= 1.f) { th = ath * val + bth; } else { @@ -3890,6 +3946,7 @@ if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2 Qpro = std::max(bl * Qpro + bl2 * val / coefq, 0.f); } + float Mp, sres; Mp = Mpro / 100.0f; Ciecam02::curvecolorfloat(mchr, Mp, sres, 2.5f); @@ -3907,21 +3964,6 @@ if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2 } Jpro = CAMBrightCurveJ[(float)(Jpro * 327.68f)]; //lightness CIECAM02 + contrast - - if(sigmoidlambda > 0.f && iscie && sigmoidqj == false) {//sigmoid J only with ciecam module - float val = Jpro / 100.f; - if(sigmoidth >= 1.f) { - th = ath * val + bth; - } else { - th = at * val + bt; - } - sigmoidla (val, th, sigm); - Jpro = 100.f * LIM01(bl * 0.01f * Jpro + val); - if (Jpro > 99.9f) { - Jpro = 99.9f; - } - } - float Sp = spro / 100.0f; Ciecam02::curvecolorfloat(schr, Sp, sres, 1.5f); dred = 100.f; // in C mode diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 3ff061df8..8ebf26bcf 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -1180,6 +1180,8 @@ enum ProcEventCode { Evlocallabtargetjz = 1145, Evlocallabforcebw = 1146, Evlocallabsigjz = 1147, + Evlocallabsigq = 1148, + Evlocallablogcie = 1149, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index e80e293ce..9a9e4fef1 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -4283,8 +4283,10 @@ LocallabParams::LocallabSpot::LocallabSpot() : qtoj(false), jabcie(true), sigmoidqjcie(false), + logcie(false), logjz(false), sigjz(false), + sigq(false), chjzcie(true), sourceGraycie(18.), sourceabscie(2000.), @@ -4453,7 +4455,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : blackEvjz(-5.0), whiteEvjz(10.0), targetjz(18.0), - sigmoidldacie(0.), + sigmoidldacie(0.5), sigmoidthcie(1.), sigmoidblcie(1.), sigmoidldajzcie(0.5), @@ -5159,8 +5161,10 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && qtoj == other.qtoj && jabcie == other.jabcie && sigmoidqjcie == other.sigmoidqjcie + && logcie == other.logcie && logjz == other.logjz && sigjz == other.sigjz + && sigq == other.sigq && chjzcie == other.chjzcie && sourceGraycie == other.sourceGraycie && sourceabscie == other.sourceabscie @@ -6947,8 +6951,10 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || spot_edited->qtoj, "Locallab", "Qtoj_" + index_str, spot.qtoj, keyFile); saveToKeyfile(!pedited || spot_edited->jabcie, "Locallab", "jabcie_" + index_str, spot.jabcie, keyFile); saveToKeyfile(!pedited || spot_edited->sigmoidqjcie, "Locallab", "sigmoidqjcie_" + index_str, spot.sigmoidqjcie, keyFile); + saveToKeyfile(!pedited || spot_edited->logcie, "Locallab", "logcie_" + index_str, spot.logcie, keyFile); saveToKeyfile(!pedited || spot_edited->logjz, "Locallab", "Logjz_" + index_str, spot.logjz, keyFile); saveToKeyfile(!pedited || spot_edited->sigjz, "Locallab", "Sigjz_" + index_str, spot.sigjz, keyFile); + saveToKeyfile(!pedited || spot_edited->sigq, "Locallab", "Sigq_" + index_str, spot.sigq, keyFile); saveToKeyfile(!pedited || spot_edited->chjzcie, "Locallab", "chjzcie_" + index_str, spot.chjzcie, keyFile); saveToKeyfile(!pedited || spot_edited->sourceGraycie, "Locallab", "SourceGraycie_" + index_str, spot.sourceGraycie, keyFile); saveToKeyfile(!pedited || spot_edited->sourceabscie, "Locallab", "Sourceabscie_" + index_str, spot.sourceabscie, keyFile); @@ -9113,8 +9119,10 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Qtoj_" + index_str, pedited, spot.qtoj, spotEdited.qtoj); assignFromKeyfile(keyFile, "Locallab", "jabcie_" + index_str, pedited, spot.jabcie, spotEdited.jabcie); assignFromKeyfile(keyFile, "Locallab", "sigmoidqjcie_" + index_str, pedited, spot.sigmoidqjcie, spotEdited.sigmoidqjcie); + assignFromKeyfile(keyFile, "Locallab", "logcie_" + index_str, pedited, spot.logcie, spotEdited.logcie); assignFromKeyfile(keyFile, "Locallab", "Logjz_" + index_str, pedited, spot.logjz, spotEdited.logjz); assignFromKeyfile(keyFile, "Locallab", "Sigjz_" + index_str, pedited, spot.sigjz, spotEdited.sigjz); + assignFromKeyfile(keyFile, "Locallab", "Sigq_" + index_str, pedited, spot.sigq, spotEdited.sigq); assignFromKeyfile(keyFile, "Locallab", "chjzcie_" + index_str, pedited, spot.chjzcie, spotEdited.chjzcie); assignFromKeyfile(keyFile, "Locallab", "SourceGraycie_" + index_str, pedited, spot.sourceGraycie, spotEdited.sourceGraycie); assignFromKeyfile(keyFile, "Locallab", "Sourceabscie_" + index_str, pedited, spot.sourceabscie, spotEdited.sourceabscie); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index c517adf9f..04229867b 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1605,8 +1605,10 @@ struct LocallabParams { bool qtoj; bool jabcie; bool sigmoidqjcie; + bool logcie; bool logjz; bool sigjz; + bool sigq; bool chjzcie; double sourceGraycie; double sourceabscie; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index a1fc5b418..fe730c203 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -1184,7 +1184,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = { AUTOEXP, //Evlocallablogjz AUTOEXP, //Evlocallabtargetjz AUTOEXP, //Evlocallabforcebw - AUTOEXP //Evlocallabsigjz + AUTOEXP, //Evlocallabsigjz + AUTOEXP, //Evlocallabsigq + AUTOEXP //Evlocallablogcie }; diff --git a/rtengine/settings.h b/rtengine/settings.h index fc512e9ff..bc49a2281 100644 --- a/rtengine/settings.h +++ b/rtengine/settings.h @@ -59,6 +59,7 @@ public: Glib::ustring rec2020; // filename of Rec2020 profile (default to the bundled one) Glib::ustring ACESp0; // filename of ACES P0 profile (default to the bundled one) Glib::ustring ACESp1; // filename of ACES P1 profile (default to the bundled one) + Glib::ustring DCIP3; // filename of DCIP3 profile (default to the bundled one) bool gamutICC; // no longer used bool gamutLch; diff --git a/rtgui/iccprofilecreator.cc b/rtgui/iccprofilecreator.cc index b7e6bc20e..446dda3fb 100644 --- a/rtgui/iccprofilecreator.cc +++ b/rtgui/iccprofilecreator.cc @@ -79,6 +79,7 @@ ICCProfileCreator::ICCProfileCreator(RTWindow *rtwindow) primaries->append(M("ICCPROFCREATOR_PRIM_BEST")); primaries->append(M("ICCPROFCREATOR_PRIM_BETA")); primaries->append(M("ICCPROFCREATOR_PRIM_BRUCE")); + primaries->append(M("ICCPROFCREATOR_PRIM_DCIP3")); primaries->set_tooltip_text(M("ICCPROFCREATOR_PRIM_TOOLTIP")); mainGrid->attach(*primaries, 1, 0, 1, 1); @@ -176,6 +177,7 @@ ICCProfileCreator::ICCProfileCreator(RTWindow *rtwindow) cIlluminant->append(M("ICCPROFCREATOR_ILL_50")); cIlluminant->append(M("ICCPROFCREATOR_ILL_55")); cIlluminant->append(M("ICCPROFCREATOR_ILL_60")); + cIlluminant->append(M("ICCPROFCREATOR_ILL_63")); cIlluminant->append(M("ICCPROFCREATOR_ILL_65")); cIlluminant->append(M("ICCPROFCREATOR_ILL_80")); cIlluminant->append(M("ICCPROFCREATOR_ILL_INC")); @@ -265,6 +267,8 @@ ICCProfileCreator::ICCProfileCreator(RTWindow *rtwindow) primaries->set_active_text(M("ICCPROFCREATOR_PRIM_BETA")); } else if (primariesPreset == "BruceRGB") { primaries->set_active_text(M("ICCPROFCREATOR_PRIM_BRUCE")); + } else if (primariesPreset == "DCIP3") { + primaries->set_active_text(M("ICCPROFCREATOR_PRIM_DCIP3")); } trcPresets->set_active(0); @@ -296,6 +300,8 @@ ICCProfileCreator::ICCProfileCreator(RTWindow *rtwindow) cIlluminant->set_active_text(M("ICCPROFCREATOR_ILL_55")); } else if (illuminant == "D60") { cIlluminant->set_active_text(M("ICCPROFCREATOR_ILL_60")); + } else if (illuminant == "D63") { + cIlluminant->set_active_text(M("ICCPROFCREATOR_ILL_63")); } else if (illuminant == "D65") { cIlluminant->set_active_text(M("ICCPROFCREATOR_ILL_65")); } else if (illuminant == "D80") { @@ -437,6 +443,8 @@ void ICCProfileCreator::storeValues() options.ICCPC_illuminant = illuminant = "D55"; } else if (cIlluminant->get_active_text() == M("ICCPROFCREATOR_ILL_60")) { options.ICCPC_illuminant = illuminant = "D60"; + } else if (cIlluminant->get_active_text() == M("ICCPROFCREATOR_ILL_63")) { + options.ICCPC_illuminant = illuminant = "D63"; } else if (cIlluminant->get_active_text() == M("ICCPROFCREATOR_ILL_65")) { options.ICCPC_illuminant = illuminant = "D65"; } else if (cIlluminant->get_active_text() == M("ICCPROFCREATOR_ILL_80")) { @@ -482,6 +490,8 @@ Glib::ustring ICCProfileCreator::getPrimariesPresetName(const Glib::ustring &pre return Glib::ustring("BetaRGB"); } else if (primaries->get_active_text() == M("ICCPROFCREATOR_PRIM_BRUCE")) { return Glib::ustring("BruceRGB"); + } else if (primaries->get_active_text() == M("ICCPROFCREATOR_PRIM_DCIP3")) { + return Glib::ustring("DCIP3"); } else if (primaries->get_active_text() == M("ICCPROFCREATOR_CUSTOM")) { return Glib::ustring("custom"); } else { @@ -570,6 +580,13 @@ void ICCProfileCreator::getPrimaries(const Glib::ustring &preset, double *p, Col p[3] = 0.8404; p[4] = 0.0366; p[5] = 0.0001; + } else if (preset == "DCIP3") { + p[0] = 0.68; // DCIP3 primaries + p[1] = 0.32; + p[2] = 0.265; + p[3] = 0.69; + p[4] = 0.15; + p[5] = 0.06; } else if (preset == "custom") { p[0] = redPrimaryX; p[1] = redPrimaryY; @@ -655,7 +672,7 @@ void ICCProfileCreator::savePressed() // -------------------------------------------- Compute the default file name // -----------------setmedia white point for monitor profile sRGB or AdobeRGB in case of profile used for monitor--------------------- //instead of calculations made by LCMS..small differences - bool isD65 = (primariesPreset == "sRGB" || primariesPreset == "Adobe" || primariesPreset == "Rec2020" || primariesPreset == "BruceRGB"); + bool isD65 = (primariesPreset == "sRGB" || primariesPreset == "Adobe" || primariesPreset == "Rec2020" || primariesPreset == "BruceRGB" || primariesPreset == "DCIP3"); bool isD60 = (primariesPreset == "ACES-AP1" || primariesPreset == "ACES-AP0"); bool isD50 = (primariesPreset == "ProPhoto" || primariesPreset == "Widegamut" || primariesPreset == "BestRGB" || primariesPreset == "BetaRGB"); // v2except = (profileVersion == "v2" && (primariesPreset == "sRGB" || primariesPreset == "Adobe" || primariesPreset == "Rec2020" || primariesPreset == "BruceRGB" || primariesPreset == "ACES-AP1" || primariesPreset == "ACES-AP0") && illuminant == "DEF"); @@ -693,23 +710,23 @@ void ICCProfileCreator::savePressed() if (options.rtSettings.widegamut.substr(0, 4) == "RTv4") { options.rtSettings.widegamut = "RTv2_Wide"; } - sNewProfile = options.rtSettings.widegamut; - sPrimariesPreset = "Wide"; + } else if (primariesPreset == "DCIP3") {//only at the request of the user + sNewProfile = options.rtSettings.DCIP3; + sPrimariesPreset = "DCIP3"; } else if (primariesPreset == "BestRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.best)) { if (options.rtSettings.best.substr(0, 4) == "RTv4") { options.rtSettings.best = "RTv2_Best"; } - sNewProfile = options.rtSettings.best; sPrimariesPreset = "Best"; } else if (primariesPreset == "BetaRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.beta)) { - sNewProfile = options.rtSettings.beta; if (options.rtSettings.beta.substr(0, 4) == "RTv4") { options.rtSettings.widegamut = "RTv2_Beta"; } + sNewProfile = options.rtSettings.beta; sPrimariesPreset = "Beta"; } else if (primariesPreset == "BruceRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.bruce)) { @@ -750,6 +767,8 @@ void ICCProfileCreator::savePressed() sPrimariesPreset = "Best"; } else if (primariesPreset == "BetaRGB") { sPrimariesPreset = "Beta"; + } else if (primariesPreset == "DCIP3") { + sPrimariesPreset = "DCIP3"; } else if (primariesPreset == "custom") { sPrimariesPreset = "Custom"; } @@ -1012,6 +1031,8 @@ void ICCProfileCreator::savePressed() tempv4 = 5500.; } else if (illuminant == "D60") { tempv4 = 6004.; + } else if (illuminant == "D63") { + tempv4 = 6300.; } else if (illuminant == "D65") { tempv4 = 6504.; } else if (illuminant == "D80") { @@ -1030,6 +1051,10 @@ void ICCProfileCreator::savePressed() xyD = {0.32168, 0.33767, 1.0}; } + if (illuminant == "D63") { + xyD = {0.314, 0.351, 1.0}; + } + if (illuminant == "D50") { xyD = {0.3457, 0.3585, 1.0};//white D50 near LCMS values but not perfect...it's a compromise!! } @@ -1077,6 +1102,9 @@ void ICCProfileCreator::savePressed() } else if (illuminant == "D60") { Wx = 0.952646075; Wz = 1.008825184; + } else if (illuminant == "D63") { + Wx = 0.894587; + Wz = 0.954416; } else if (illuminant == "D41") { Wx = 0.991488263; Wz = 0.631604625; diff --git a/rtgui/locallabtools.h b/rtgui/locallabtools.h index 041fac431..e7fcfc1d0 100644 --- a/rtgui/locallabtools.h +++ b/rtgui/locallabtools.h @@ -1580,10 +1580,12 @@ private: Gtk::CheckButton* const forcebw; Gtk::Frame* const sigmoidFrame; + Gtk::CheckButton* const sigq; Adjuster* const sigmoidldacie; Adjuster* const sigmoidthcie; Adjuster* const sigmoidblcie; Gtk::CheckButton* const sigmoidqjcie; + Gtk::CheckButton* const logcie; Gtk::Frame* const sigmoidjzFrame; Gtk::CheckButton* const sigjz; Adjuster* const sigmoidldajzcie; @@ -1668,7 +1670,7 @@ private: CurveEditorGroup* const mask2cieCurveEditorG; DiagonalCurveEditor* const Lmaskcieshape; - sigc::connection AutograycieConn, forcejzConn, forcebwConn, qtojConn, showmaskcieMethodConn, enacieMaskConn, jabcieConn, sursourcieconn, surroundcieconn, modecieconn, modecamconn, sigmoidqjcieconn, logjzconn, sigjzconn, chjzcieconn, toneMethodcieConn, toneMethodcieConn2; + sigc::connection AutograycieConn, forcejzConn, forcebwConn, qtojConn, showmaskcieMethodConn, enacieMaskConn, jabcieConn, sursourcieconn, surroundcieconn, modecieconn, modecamconn, sigmoidqjcieconn, logcieconn, logjzconn, sigjzconn, sigqconn, chjzcieconn, toneMethodcieConn, toneMethodcieConn2; public: Locallabcie(); ~Locallabcie(); @@ -1713,8 +1715,10 @@ private: void qtojChanged(); void jabcieChanged(); void sigmoidqjcieChanged(); + void logcieChanged(); void logjzChanged(); void sigjzChanged(); + void sigqChanged(); void chjzcieChanged(); void updatecieGUI(); void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override; diff --git a/rtgui/locallabtools2.cc b/rtgui/locallabtools2.cc index 4dc5deb43..3358a61ef 100644 --- a/rtgui/locallabtools2.cc +++ b/rtgui/locallabtools2.cc @@ -7444,10 +7444,12 @@ Locallabcie::Locallabcie(): forcebw(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_BWFORCE")))), sigmoidFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGFRA")))), - sigmoidldacie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0., 1.0, 0.01, 0.))), + sigq(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGFRA")))), + sigmoidldacie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0.0, 1., 0.01, 0.5))), sigmoidthcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), 0.1, 4., 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), sigmoidblcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL"), 0.5, 1.5, 0.01, 1.))), sigmoidqjcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGMOIDQJ")))), + logcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LOGCIE")))), sigmoidjzFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGJZFRA")))), sigjz(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGJZFRA")))), sigmoidldajzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0., 1.0, 0.01, 0.5))), @@ -7562,7 +7564,7 @@ Locallabcie::Locallabcie(): modecie->append (M ("TP_LOCALLAB_CIEMODE_TM")); modecie->append (M ("TP_LOCALLAB_CIEMODE_WAV")); modecie->append (M ("TP_LOCALLAB_CIEMODE_DR")); - modecie->append (M ("TP_LOCALLAB_CIEMODE_LOG")); +// modecie->append (M ("TP_LOCALLAB_CIEMODE_LOG")); modecie->set_active (0); modeHBoxcie->pack_start (*modecie); modecieconn = modecie->signal_changed().connect ( sigc::mem_fun (*this, &Locallabcie::modecieChanged) ); @@ -7611,6 +7613,21 @@ Locallabcie::Locallabcie(): bevwevFrame->add(*bevwevBox); cieFBox->pack_start (*bevwevFrame); + sigmoidFrame->set_label_align(0.025, 0.5); + sigmoidFrame->set_label_widget(*sigq); + ToolParamBlock* const sigBox = Gtk::manage(new ToolParamBlock()); + Gtk::Separator* const separatorsig = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); + + sigBox->pack_start(*sigmoidldacie); + sigBox->pack_start(*sigmoidthcie); + sigBox->pack_start(*sigmoidblcie); + sigBox->pack_start(*sigmoidqjcie); + sigBox->pack_start(*separatorsig); + sigBox->pack_start(*logcie); + sigmoidFrame->add(*sigBox); + cieFBox->pack_start(*sigmoidFrame); + + sigmoidjzFrame->set_label_align(0.025, 0.5); sigmoidjzFrame->set_label_widget(*sigjz); ToolParamBlock* const sigjzBox = Gtk::manage(new ToolParamBlock()); @@ -7814,8 +7831,10 @@ Locallabcie::Locallabcie(): jabcieConn = jabcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::jabcieChanged)); AutograycieConn = Autograycie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::AutograycieChanged)); sigmoidqjcieconn = sigmoidqjcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigmoidqjcieChanged)); + logcieconn = logcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::logcieChanged)); logjzconn = logjz->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::logjzChanged)); sigjzconn = sigjz->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigjzChanged)); + sigqconn = sigq->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigqChanged)); forcejzConn = forcejz->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::forcejzChanged)); qtojConn = qtoj->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::qtojChanged)); chjzcieconn = chjzcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::chjzcieChanged)); @@ -7984,7 +8003,7 @@ Locallabcie::Locallabcie(): cieP1Box->pack_start(*cie1colorFrame); // pack_start(*blackEvjz); // pack_start(*whiteEvjz); - +/* sigmoidFrame->set_label_align(0.025, 0.5); ToolParamBlock* const sigBox = Gtk::manage(new ToolParamBlock()); @@ -7994,6 +8013,7 @@ Locallabcie::Locallabcie(): sigBox->pack_start(*sigmoidqjcie); sigmoidFrame->add(*sigBox); cieP1Box->pack_start(*sigmoidFrame); + */ ToolParamBlock* const cieP11Box = Gtk::manage(new ToolParamBlock()); cieP11Box->pack_start(*cieCurveEditorG); cieP11Box->pack_start(*cieCurveEditorG2); @@ -8160,6 +8180,7 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) cieFrame->set_tooltip_text(M("TP_LOCALLAB_LOGSCENE_TOOLTIP")); PQFrame->set_tooltip_text(M("TP_LOCALLAB_JZPQFRA_TOOLTIP")); qtoj->set_tooltip_text(M("TP_LOCALLAB_JZQTOJ_TOOLTIP")); + logcie->set_tooltip_text(M("TP_LOCALLAB_LOGCIE_TOOLTIP")); modecam->set_tooltip_text(M("TP_LOCALLAB_JZMODECAM_TOOLTIP")); adapjzcie->set_tooltip_text(M("TP_LOCALLAB_JABADAP_TOOLTIP")); jz100->set_tooltip_text(M("TP_LOCALLAB_JZ100_TOOLTIP")); @@ -8168,8 +8189,8 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) Autograycie->set_tooltip_text(M("TP_LOCALLAB_AUTOGRAYCIE_TOOLTIP")); sigmalcjz->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP")); logjzFrame->set_tooltip_text(M("TP_LOCALLAB_JZLOGWB_TOOLTIP")); - blackEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWB_TOOLTIP")); - whiteEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWB_TOOLTIP")); + blackEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWBS_TOOLTIP")); + whiteEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWBS_TOOLTIP")); clariFramejz->set_tooltip_markup(M("TP_LOCALLAB_CLARIJZ_TOOLTIP")); clarilresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARILJZ_TOOLTIP")); claricresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARICJZ_TOOLTIP")); @@ -8182,6 +8203,7 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) sourceabscie->set_tooltip_text(M("TP_COLORAPP_ADAPSCEN_TOOLTIP")); cie1Frame->set_tooltip_text(M("TP_LOCALLAB_LOGIMAGE_TOOLTIP")); sigmoidFrame->set_tooltip_text(M("TP_LOCALLAB_SIGMOID_TOOLTIP")); + sigmoidjzFrame->set_tooltip_text(M("TP_LOCALLAB_SIGMOID_TOOLTIP")); contlcie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTL_TOOLTIP")); contqcie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTQ_TOOLTIP")); contthrescie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTTHRES_TOOLTIP")); @@ -8215,6 +8237,7 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) PQFrame->set_tooltip_text(""); modecam->set_tooltip_text(""); qtoj->set_tooltip_text(""); + logcie->set_tooltip_text(""); jabcie->set_tooltip_text(""); adapjzcie->set_tooltip_text(""); jz100->set_tooltip_text(""); @@ -8229,6 +8252,7 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips) sourceabscie->set_tooltip_text(""); cie1Frame->set_tooltip_text(""); sigmoidFrame->set_tooltip_text(""); + sigmoidjzFrame->set_tooltip_text(""); contlcie->set_tooltip_text(""); contqcie->set_tooltip_text(""); contthrescie->set_tooltip_text(""); @@ -8273,8 +8297,10 @@ void Locallabcie::disableListener() qtojConn.block(true); jabcieConn.block(true); sigmoidqjcieconn.block(true); + logcieconn.block(true); logjzconn.block(true); sigjzconn.block(true); + sigqconn.block(true); chjzcieconn.block(true); sursourcieconn.block (true); surroundcieconn.block (true); @@ -8295,8 +8321,10 @@ void Locallabcie::enableListener() qtojConn.block(false); jabcieConn.block(false); sigmoidqjcieconn.block(false); + logcieconn.block(false); logjzconn.block(false); sigjzconn.block(false); + sigqconn.block(false); chjzcieconn.block(false); sursourcieconn.block (false); surroundcieconn.block (false); @@ -8385,8 +8413,8 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE modecie->set_active (2); } else if (spot.modecie == "dr") { modecie->set_active (3); - } else if (spot.modecie == "log") { - modecie->set_active (4); +// } else if (spot.modecie == "log") { +// modecie->set_active (4); } if (spot.toneMethodcie == "one") { @@ -8409,14 +8437,29 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE qtoj->set_active(spot.qtoj); sourceGraycie->setValue(spot.sourceGraycie); sigmoidqjcie->set_active(spot.sigmoidqjcie); + logcie->set_active(spot.logcie); logjz->set_active(spot.logjz); sigjz->set_active(spot.sigjz); + sigq->set_active(spot.sigq); // chjzcie->set_active(spot.chjzcie); chjzcie->set_active(true);//force to true to avoid other mode sourceabscie->setValue(spot.sourceabscie); jabcie->set_active(spot.jabcie); jabcieChanged(); modecamChanged(); + + if(logcie->get_active()) { + sigmoidldacie->set_sensitive(false); + sigmoidthcie->set_sensitive(false); + sigmoidblcie->set_sensitive(false); + sigmoidqjcie->set_sensitive(false); + } else { + sigmoidldacie->set_sensitive(true); + sigmoidthcie->set_sensitive(true); + sigmoidblcie->set_sensitive(true); + sigmoidqjcie->set_sensitive(true); + } + if (spot.sursourcie == "Average") { sursourcie->set_active (0); } else if (spot.sursourcie == "Dim") { @@ -8556,8 +8599,8 @@ void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi spot.modecie = "wav"; } else if (modecie->get_active_row_number() == 3) { spot.modecie = "dr"; - } else if (modecie->get_active_row_number() == 4) { - spot.modecie = "log"; +// } else if (modecie->get_active_row_number() == 4) { +// spot.modecie = "log"; } if (toneMethodcie->get_active_row_number() == 0) { @@ -8582,9 +8625,11 @@ void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi spot.sourceGraycie = sourceGraycie->getValue(); spot.sourceabscie = sourceabscie->getValue(); spot.sigmoidqjcie = sigmoidqjcie->get_active(); + spot.logcie = logcie->get_active(); spot.logjz = logjz->get_active(); spot.sigjz = sigjz->get_active(); spot.chjzcie = chjzcie->get_active(); + spot.sigq = sigq->get_active(); if(sursourcie->get_active_row_number() == 0) { spot.sursourcie = "Average"; @@ -8873,6 +8918,34 @@ void Locallabcie::sigmoidqjcieChanged() } } +void Locallabcie::logcieChanged() +{ + + if(logcie->get_active()) { + sigmoidldacie->set_sensitive(false); + sigmoidthcie->set_sensitive(false); + sigmoidblcie->set_sensitive(false); + sigmoidqjcie->set_sensitive(false); + } else { + sigmoidldacie->set_sensitive(true); + sigmoidthcie->set_sensitive(true); + sigmoidblcie->set_sensitive(true); + sigmoidqjcie->set_sensitive(true); + } + + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (logcie->get_active()) { + listener->panelChanged(Evlocallablogcie, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallablogcie, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + } +} + void Locallabcie::logjzChanged() { if (isLocActivated && exp->getEnabled()) { @@ -8903,6 +8976,21 @@ void Locallabcie::sigjzChanged() } } +void Locallabcie::sigqChanged() +{ + if (isLocActivated && exp->getEnabled()) { + if (listener) { + if (sigq->get_active()) { + listener->panelChanged(Evlocallabsigq, + M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } else { + listener->panelChanged(Evlocallabsigq, + M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")"); + } + } + } +} + void Locallabcie::chjzcieChanged() { if (chjzcie->get_active()) { @@ -8938,6 +9026,7 @@ void Locallabcie::modecamChanged() logjzFrame->show(); bevwevFrame->show(); sigmoidjzFrame->show(); + sigmoidFrame->hide(); forcejz->hide(); } else { @@ -8950,7 +9039,10 @@ void Locallabcie::modecamChanged() jabcie->hide(); PQFrame->hide(); logjzFrame->hide(); - bevwevFrame->hide(); + if (modecam->get_active_row_number() == 0){ + bevwevFrame->show(); + sigmoidFrame->show(); + } sigmoidjzFrame->hide(); forcejz->hide(); catadcie->show(); @@ -9021,7 +9113,13 @@ void Locallabcie::modecamChanged() PQFrame->hide(); logjzFrame->hide(); sigmoidjzFrame->hide(); + sigmoidFrame->hide(); bevwevFrame->hide(); + if (modecam->get_active_row_number() == 0){ + bevwevFrame->show(); + sigmoidFrame->show(); + } + forcejz->hide(); pqremapcam16->show(); catadcie->show(); @@ -9039,6 +9137,11 @@ void Locallabcie::modecamChanged() } else { cieFrame->show(); cie2Frame->show(); + if (modecam->get_active_row_number() == 0){ + bevwevFrame->show(); + sigmoidjzFrame->hide(); + + } if (modecam->get_active_row_number() == 1) { targetGraycie->hide(); targabscie->hide(); @@ -9048,6 +9151,7 @@ void Locallabcie::modecamChanged() PQFrame->show(); logjzFrame->show(); sigmoidjzFrame->show(); + sigmoidFrame->hide(); bevwevFrame->show(); catadcie->hide(); cie2Frame->hide(); @@ -9208,6 +9312,11 @@ void Locallabcie::updateGUIToMode(const modeType new_type) logjzFrame->hide(); sigmoidjzFrame->hide(); bevwevFrame->hide(); + sigmoidFrame->hide(); + } + if (modecam->get_active_row_number() == 0){ + bevwevFrame->show(); + sigmoidFrame->show(); } if (modecam->get_active_row_number() == 1) { @@ -9220,6 +9329,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) logjzFrame->hide(); bevwevFrame->hide(); sigmoidjzFrame->hide(); + sigmoidFrame->hide(); catadcie->hide(); cie2Frame->hide(); maskusablecie->hide(); @@ -9292,6 +9402,10 @@ void Locallabcie::updateGUIToMode(const modeType new_type) maskusablecie->hide(); maskunusablecie->show(); } + if (modecam->get_active_row_number() == 0){ + bevwevFrame->show(); + sigmoidFrame->show(); + } if (modecam->get_active_row_number() == 2) { PQFrame->hide(); @@ -9310,6 +9424,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) logjzFrame->hide(); sigmoidjzFrame->hide(); bevwevFrame->hide(); + sigmoidFrame->hide(); catadcie->hide(); cie2Frame->hide(); exprecovcie->hide(); @@ -9379,6 +9494,9 @@ void Locallabcie::updateGUIToMode(const modeType new_type) maskusablecie->hide(); maskunusablecie->show(); } + if (modecam->get_active_row_number() == 0){ + bevwevFrame->show(); + } if (modecam->get_active_row_number() == 1 || modecam->get_active_row_number() == 2) { jabcie->show(); @@ -9391,6 +9509,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) logjzFrame->show(); bevwevFrame->show(); sigmoidjzFrame->show(); + sigmoidFrame->hide(); forcejz->hide(); } @@ -9406,6 +9525,11 @@ void Locallabcie::updateGUIToMode(const modeType new_type) logjzFrame->hide(); sigmoidjzFrame->hide(); bevwevFrame->hide(); + if (modecam->get_active_row_number() == 0){ + bevwevFrame->show(); + sigmoidFrame->show(); + } + } if (modecam->get_active_row_number() == 2) { PQFrame->show(); @@ -9423,6 +9547,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type) PQFrame->show(); logjzFrame->show(); sigmoidjzFrame->show(); + sigmoidFrame->hide(); bevwevFrame->show(); catadcie->hide(); cie2Frame->hide(); @@ -9483,6 +9608,9 @@ void Locallabcie::updatecieGUI() cie1Frame->show(); cie2Frame->show(); expcam16->show(); + if (modecam->get_active_row_number() == 0){ + bevwevFrame->show(); + } if (modecam->get_active_row_number() == 2 && mode == Expert) { PQFrame->show(); @@ -9514,6 +9642,7 @@ void Locallabcie::updatecieGUI() logjzFrame->show(); sigmoidjzFrame->show(); bevwevFrame->show(); + sigmoidFrame->hide(); catadcie->hide(); cie2Frame->hide(); if(mode != Expert) { @@ -9524,7 +9653,12 @@ void Locallabcie::updatecieGUI() PQFrame->hide(); logjzFrame->hide(); sigmoidjzFrame->hide(); + sigmoidFrame->hide(); bevwevFrame->hide(); + if (modecam->get_active_row_number() == 0){ + bevwevFrame->show(); + sigmoidFrame->show(); + } exprecovcie->hide(); expmaskcie->hide(); maskusablecie->hide(); diff --git a/rtgui/options.cc b/rtgui/options.cc index 026d76e4e..fc543709f 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -595,6 +595,7 @@ void Options::setDefaults() rtSettings.adobe = "RTv2_Medium"; // put the name of yours profiles (here windows) rtSettings.prophoto = "RTv2_Large"; // these names appear in the menu "output profile" rtSettings.widegamut = "RTv2_Wide"; + rtSettings.DCIP3 = "RTv2_DCIP3"; rtSettings.srgb = "RTv4_sRGB"; rtSettings.bruce = "RTv2_Bruce"; rtSettings.beta = "RTv2_Beta"; @@ -1682,6 +1683,13 @@ void Options::readFromFile(Glib::ustring fname) } } + if (keyFile.has_key("Color Management", "DCIP3")) { + rtSettings.DCIP3 = keyFile.get_string("Color Management", "DCIP3"); + if (rtSettings.DCIP3 == "RTv4_DCIP3") { + rtSettings.DCIP3 = "RTv2_DCIP3"; + } + } + if (keyFile.has_key("Color Management", "sRGB")) { rtSettings.srgb = keyFile.get_string("Color Management", "sRGB"); if (rtSettings.srgb == "RT_sRGB" || rtSettings.srgb == "RTv2_sRGB") { @@ -2369,6 +2377,7 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_string("Color Management", "AdobeRGB", rtSettings.adobe); keyFile.set_string("Color Management", "ProPhoto", rtSettings.prophoto); keyFile.set_string("Color Management", "WideGamut", rtSettings.widegamut); + keyFile.set_string("Color Management", "DCIP3", rtSettings.DCIP3); keyFile.set_string("Color Management", "sRGB", rtSettings.srgb); keyFile.set_string("Color Management", "Beta", rtSettings.beta); keyFile.set_string("Color Management", "Best", rtSettings.best); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 7bdedb723..529d57da6 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -1685,8 +1685,10 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).qtoj = locallab.spots.at(j).qtoj && pSpot.qtoj == otherSpot.qtoj; locallab.spots.at(j).jabcie = locallab.spots.at(j).jabcie && pSpot.jabcie == otherSpot.jabcie; locallab.spots.at(j).sigmoidqjcie = locallab.spots.at(j).sigmoidqjcie && pSpot.sigmoidqjcie == otherSpot.sigmoidqjcie; + locallab.spots.at(j).logcie = locallab.spots.at(j).logcie && pSpot.logcie == otherSpot.logcie; locallab.spots.at(j).logjz = locallab.spots.at(j).logjz && pSpot.logjz == otherSpot.logjz; locallab.spots.at(j).sigjz = locallab.spots.at(j).sigjz && pSpot.sigjz == otherSpot.sigjz; + locallab.spots.at(j).sigq = locallab.spots.at(j).sigq && pSpot.sigq == otherSpot.sigq; locallab.spots.at(j).chjzcie = locallab.spots.at(j).chjzcie && pSpot.chjzcie == otherSpot.chjzcie; locallab.spots.at(j).sourceGraycie = locallab.spots.at(j).sourceGraycie && pSpot.sourceGraycie == otherSpot.sourceGraycie; locallab.spots.at(j).sourceabscie = locallab.spots.at(j).sourceabscie && pSpot.sourceabscie == otherSpot.sourceabscie; @@ -5736,6 +5738,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).sigmoidqjcie = mods.locallab.spots.at(i).sigmoidqjcie; } + if (locallab.spots.at(i).logcie) { + toEdit.locallab.spots.at(i).logcie = mods.locallab.spots.at(i).logcie; + } + if (locallab.spots.at(i).logjz) { toEdit.locallab.spots.at(i).logjz = mods.locallab.spots.at(i).logjz; } @@ -5744,6 +5750,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).sigjz = mods.locallab.spots.at(i).sigjz; } + if (locallab.spots.at(i).sigq) { + toEdit.locallab.spots.at(i).sigq = mods.locallab.spots.at(i).sigq; + } + if (locallab.spots.at(i).chjzcie) { toEdit.locallab.spots.at(i).chjzcie = mods.locallab.spots.at(i).chjzcie; } @@ -7978,8 +7988,10 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : qtoj(v), jabcie(v), sigmoidqjcie(v), + logcie(v), logjz(v), sigjz(v), + sigq(v), chjzcie(v), sourceGraycie(v), sourceabscie(v), @@ -8675,8 +8687,10 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) qtoj = v; jabcie = v; sigmoidqjcie = v; + logcie = v; logjz = v; sigjz = v; + sigq = v; chjzcie = v; sourceGraycie = v; sourceabscie = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 2950d1b6c..94abed470 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -987,8 +987,10 @@ public: bool qtoj; bool jabcie; bool sigmoidqjcie; + bool logcie; bool logjz; bool sigjz; + bool sigq; bool chjzcie; bool sourceGraycie; bool sourceabscie;