Graduated filter hue for color and light Merge file

This commit is contained in:
Desmis 2019-11-23 14:50:34 +01:00
parent ac6b241330
commit 4ff81092c4
10 changed files with 170 additions and 70 deletions

View File

@ -1070,6 +1070,7 @@ HISTORY_MSG_830;Local - Color gradient strength L
HISTORY_MSG_831;Local - Color gradient angle HISTORY_MSG_831;Local - Color gradient angle
HISTORY_MSG_832;Local - Color gradient strength C HISTORY_MSG_832;Local - Color gradient strength C
HISTORY_MSG_833;Local - Gradient feather HISTORY_MSG_833;Local - Gradient feather
HISTORY_MSG_834;Local - Color gradient strength H
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction
@ -2301,8 +2302,9 @@ TP_LOCALLAB_EXPOSE;Exposure
TP_LOCALLAB_GRADFRA;Graduated Filter TP_LOCALLAB_GRADFRA;Graduated Filter
TP_LOCALLAB_FEATH_TOOLTIP;Gradient width in percent of the Spot diagonal\n.Disabled for negatives chrominance. TP_LOCALLAB_FEATH_TOOLTIP;Gradient width in percent of the Spot diagonal\n.Disabled for negatives chrominance.
TP_LOCALLAB_GRADSTR_TOOLTIP;Filter strength in stops TP_LOCALLAB_GRADSTR_TOOLTIP;Filter strength in stops
TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees -90 0 +90 TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees : -180 0 +180
TP_LOCALLAB_GRADSTRAB_TOOLTIP;Filter chroma strength TP_LOCALLAB_GRADSTRAB_TOOLTIP;Filter chroma strength
TP_LOCALLAB_GRADSTRHUE_TOOLTIP;Filter Hue strength
TP_LOCALLAB_ENABLE_MASKAFT;Use all algorithms Exposure TP_LOCALLAB_ENABLE_MASKAFT;Use all algorithms Exposure
TP_LOCALLAB_EXPOSURE_TOOLTIP;In some cases (strong shadows ..) you can use the module "Shadows Highlights" TP_LOCALLAB_EXPOSURE_TOOLTIP;In some cases (strong shadows ..) you can use the module "Shadows Highlights"
TP_LOCALLAB_EXPCHROMA;Chroma compensation TP_LOCALLAB_EXPCHROMA;Chroma compensation
@ -2343,6 +2345,7 @@ TP_LOCALLAB_GRADANG;Gradient angle
TP_LOCALLAB_GRADSTR;Gradient strength TP_LOCALLAB_GRADSTR;Gradient strength
TP_LOCALLAB_GRADSTRLUM;Gradient strength Luminance TP_LOCALLAB_GRADSTRLUM;Gradient strength Luminance
TP_LOCALLAB_GRADSTRCHRO;Gradient strength Chrominance TP_LOCALLAB_GRADSTRCHRO;Gradient strength Chrominance
TP_LOCALLAB_GRADSTRHUE;Gradient strength Hue (merge file)
TP_LOCALLAB_GAMFRA;Tone response curve (TRC) TP_LOCALLAB_GAMFRA;Tone response curve (TRC)
TP_LOCALLAB_GAMSH;Gamma TP_LOCALLAB_GAMSH;Gamma
TP_LOCALLAB_SLOSH;Slope TP_LOCALLAB_SLOSH;Slope

View File

@ -218,6 +218,7 @@ struct local_params {
float angSH; float angSH;
float strcol; float strcol;
float strcolab; float strcolab;
float strcolh;
float angcol; float angcol;
float softradiusexp; float softradiusexp;
float softradiuscol; float softradiuscol;
@ -748,6 +749,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
float angSH = ((float) locallab.spots.at(sp).angSH); float angSH = ((float) locallab.spots.at(sp).angSH);
float strcol = ((float) locallab.spots.at(sp).strcol); float strcol = ((float) locallab.spots.at(sp).strcol);
float strcolab = ((float) locallab.spots.at(sp).strcolab); float strcolab = ((float) locallab.spots.at(sp).strcolab);
float strcolh = ((float) locallab.spots.at(sp).strcolh);
float angcol = ((float) locallab.spots.at(sp).angcol); float angcol = ((float) locallab.spots.at(sp).angcol);
float softradiusexpo = ((float) locallab.spots.at(sp).softradiusexp); float softradiusexpo = ((float) locallab.spots.at(sp).softradiusexp);
float softradiuscolor = ((float) locallab.spots.at(sp).softradiuscol); float softradiuscolor = ((float) locallab.spots.at(sp).softradiuscol);
@ -861,6 +863,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.angSH = angSH; lp.angSH = angSH;
lp.strcol = strcol; lp.strcol = strcol;
lp.strcolab = strcolab; lp.strcolab = strcolab;
lp.strcolh = strcolh;
lp.angcol = angcol; lp.angcol = angcol;
lp.softradiusexp = softradiusexpo; lp.softradiusexp = softradiusexpo;
lp.softradiuscol = softradiuscolor; lp.softradiuscol = softradiuscolor;
@ -2618,9 +2621,12 @@ void calclocalGradientParams(const struct local_params& lp, struct grad_params&
} else if (indic == 4) { } else if (indic == 4) {
stops = lp.strcolab; stops = lp.strcolab;
angs = lp.angcol; angs = lp.angcol;
} else if (indic == 5) {
stops = lp.strcolh;
angs = lp.angcol;
} }
//printf("Indic=%d strex=%f stop=%f\n", indic, lp.strexp, stops); printf("Indic=%d strcol=%f stop=%f\n", indic, lp.strcolh, stops);
double gradient_stops = stops; double gradient_stops = stops;
double gradient_center_x = LIM01((lp.xc - xstart) / bfw); double gradient_center_x = LIM01((lp.xc - xstart) / bfw);
@ -2632,7 +2638,7 @@ void calclocalGradientParams(const struct local_params& lp, struct grad_params&
varfeath = 1.f; varfeath = 1.f;
} }
// printf("xstart=%f ysta=%f lpxc=%f lpyc=%f stop=%f bb=%f cc=%f ang=%f ff=%d gg=%d\n", xstart, ystart, lp.xc, lp.yc, gradient_stops, gradient_center_x, gradient_center_y, gradient_angle, w, h); printf("xstart=%f ysta=%f lpxc=%f lpyc=%f stop=%f bb=%f cc=%f ang=%f ff=%d gg=%d\n", xstart, ystart, lp.xc, lp.yc, gradient_stops, gradient_center_x, gradient_center_y, gradient_angle, w, h);
// make 0.0 <= gradient_angle < 2 * rtengine::RT_PI // make 0.0 <= gradient_angle < 2 * rtengine::RT_PI
gradient_angle = fmod(gradient_angle, 2 * rtengine::RT_PI); gradient_angle = fmod(gradient_angle, 2 * rtengine::RT_PI);
@ -12735,45 +12741,130 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
} }
} }
} }
// test for write text with Cairo November 2019
//test for write text , now it compile... but does nothing
// why ?? is arial found (I tried others) or I missed something
/* /*
locImage = Cairo::ImageSurface::create(Cairo::FORMAT_RGB24, bfw, bfh); //test for write text , it compile... but does nothing
Cairo::RefPtr<Cairo::Context> cr = Cairo::Context::create(locImage); // why ?? is arial or Purisa found (I tried others) or I missed something or poke ?? or tmImageorig or ??
cr->set_source_rgb(0.1, 0.1, 0.1); locImage = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, bfw, bfh);
cr->select_font_face("Arial", Cairo::FontSlant::FONT_SLANT_NORMAL, Cairo::FontWeight::FONT_WEIGHT_BOLD); Cairo::RefPtr<Cairo::Context> cr = Cairo::Context::create(locImage);
cr->set_font_size(20); cr->set_source_rgb(0.9, 0.9, 0.9);//white
cr->move_to(20, 20); cr->paint();
cr->select_font_face("Purisa", Cairo::FontSlant::FONT_SLANT_NORMAL, Cairo::FontWeight::FONT_WEIGHT_BOLD);
cr->set_font_size(50);
cr->set_source_rgb(0.3, 0.3, 0.3);//grey
cr->move_to(0, 0);
cr->show_text("Coucou"); cr->show_text("Coucou");
Imagefloat *tmpImageorig = nullptr; Imagefloat *tmpImageorig = nullptr;
tmpImageorig = new Imagefloat(bfw, bfh); tmpImageorig = new Imagefloat(bfw, bfh);
lab2rgb(*bufcolfin, *tmpImageorig, params->icm.workingProfile); lab2rgb(*bufcolreserv, *tmpImageorig, params->icm.workingProfile);
tmpImageorig->normalizeFloatTo1(); // tmpImageorig->normalizeFloatTo1();
locImage->flush();
unsigned char *locData = locImage->get_data();
for (int y = 0; y < bfh ; y++) { for (int y = 0; y < bfh ; y++) {
unsigned char *dst = locImage->get_data() + (y * bfw + x) * 4;
for (int x = 0; x < bfw; x++) { for (int x = 0; x < bfw; x++) {
float r = tmpImageorig->r(y, x); unsigned char *dst = locData + (y * bfw + x) * 4;//why 4 ?
float g = tmpImageorig->g(y, x); // printf("dst=%d ", *dst);
float b = tmpImageorig->b(y, x); double r = tmpImageorig->r(y, x);
poke01_d(dst, r, g, b); double g = tmpImageorig->g(y, x);
tmpImageorig->r(y, x) = r; double b = tmpImageorig->b(y, x);
tmpImageorig->g(y, x) = g;
tmpImageorig->b(y, x) = b; //perhaps that or whithout 255 or ??
*(dst++) = (unsigned char)(r);
tmpImageorig->r(y, x) = 255.f * *dst;
*(dst++) = (unsigned char)(g);
tmpImageorig->g(y, x) = 255.f * *dst;
*(dst++) = (unsigned char)(b);
tmpImageorig->b(y, x) = 255.f * *dst;
//perhaps ??
// rtengine::poke01_d(dst, r, g, b);
// tmpImageorig->r(y, x) = *(dst++);
// tmpImageorig->g(y, x) = *(dst++);
// tmpImageorig->b(y, x) = *(dst++);
} }
} }
locImage->mark_dirty(); locImage->mark_dirty();
// tmpImageorig->normalizeFloatTo65535();
rgb2lab(*tmpImageorig, *bufcolreserv, params->icm.workingProfile);
tmpImageorig->normalizeFloatTo65535();
rgb2lab(*tmpImageorig, *bufcolfin, params->icm.workingProfile);
delete tmpImageorig; delete tmpImageorig;
*/ */
if (lp.strcol != 0.f) {
struct grad_params gp;
calclocalGradientParams(lp, gp, ystart, xstart, bfw, bfh, 3);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int ir = 0; ir < bfh; ir++)
for (int jr = 0; jr < bfw; jr++) {
double factor = 1.0;
factor = ImProcFunctions::calcGradientFactor(gp, jr, ir);
bufcolfin->L[ir][jr] *= factor;
}
}
if (lp.strcolab != 0.f) {
struct grad_params gpab;
calclocalGradientParams(lp, gpab, ystart, xstart, bfw, bfh, 4);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int ir = 0; ir < bfh; ir++)
for (int jr = 0; jr < bfw; jr++) {
double factor = 1.0;
factor = ImProcFunctions::calcGradientFactor(gpab, jr, ir);
bufcolfin->a[ir][jr] *= factor;
bufcolfin->b[ir][jr] *= factor;
}
}
if (lp.strcolh != 0.f) {
struct grad_params gph;
calclocalGradientParams(lp, gph, ystart, xstart, bfw, bfh, 5);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int ir = 0; ir < bfh; ir++)
for (int jr = 0; jr < bfw; jr++) {
double factor = 1.0;
factor = ImProcFunctions::calcGradientFactor(gph, jr, ir);
float aa = bufcolfin->a[ir][jr];
float bb = bufcolfin->b[ir][jr];
float chrm = sqrt(SQR(aa) + SQR(bb));
float HH = xatan2f(bb, aa);
float newhr = 0.f;
float cor = 0.f;
if(factor < 1.f) {
cor = - 2.5f * (1.f - factor);
} else if(factor > 1.f) {
cor = 0.03f * (factor - 1.f);
}
newhr = HH + cor;
if (newhr > rtengine::RT_PI_F) {
newhr -= 2 * rtengine::RT_PI_F;
} else if (newhr < -rtengine::RT_PI_F) {
newhr += 2 * rtengine::RT_PI_F;
}
float2 sincosval = xsincosf(newhr);
bufcolfin->a[ir][jr] = CLIPC(chrm * sincosval.y);
bufcolfin->b[ir][jr] = CLIPC(chrm * sincosval.x);
}
}
JaggedArray<float> blend(bfw, bfh); JaggedArray<float> blend(bfw, bfh);
buildBlendMask(lumreserv, blend, bfw, bfh, conthr, 1.f); buildBlendMask(lumreserv, blend, bfw, bfh, conthr, 1.f);
float rm = 20.f / sk; float rm = 20.f / sk;
@ -13361,36 +13452,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
softproc(bufcolreserv.get(), bufcolfin.get(), lp.softradiuscol, bfh, bfw, 0.0001, 0.00001, 0.1f, sk, multiThread, 0); softproc(bufcolreserv.get(), bufcolfin.get(), lp.softradiuscol, bfh, bfw, 0.0001, 0.00001, 0.1f, sk, multiThread, 0);
} }
if (lp.strcol != 0.f) {
struct grad_params gp;
calclocalGradientParams(lp, gp, ystart, xstart, bfw, bfh, 3);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int ir = 0; ir < bfh; ir++)
for (int jr = 0; jr < bfw; jr++) {
double factor = 1.0;
factor = ImProcFunctions::calcGradientFactor(gp, jr, ir);
bufcolfin->L[ir][jr] *= factor;
}
}
if (lp.strcolab != 0.f) {
struct grad_params gpab;
calclocalGradientParams(lp, gpab, ystart, xstart, bfw, bfh, 4);
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
#endif
for (int ir = 0; ir < bfh; ir++)
for (int jr = 0; jr < bfw; jr++) {
double factor = 1.0;
factor = ImProcFunctions::calcGradientFactor(gpab, jr, ir);
bufcolfin->a[ir][jr] *= factor;
bufcolfin->b[ir][jr] *= factor;
}
}
if (nottransit) { if (nottransit) {
//special only transition //special only transition

View File

@ -857,6 +857,7 @@ enum ProcEventCode {
Evlocallabangcol = 830, Evlocallabangcol = 830,
Evlocallabstrcolab = 831, Evlocallabstrcolab = 831,
EvLocallabSpotfeather = 832, EvLocallabSpotfeather = 832,
Evlocallabstrcolh = 833,
NUMOFEVENTS NUMOFEVENTS
}; };

View File

@ -2465,6 +2465,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
structcol(0), structcol(0),
strcol(0.), strcol(0.),
strcolab(0.), strcolab(0.),
strcolh(0.),
angcol(0.), angcol(0.),
blurcolde(5), blurcolde(5),
blendmaskcol(0), blendmaskcol(0),
@ -2815,6 +2816,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& structcol == other.structcol && structcol == other.structcol
&& strcol == other.strcol && strcol == other.strcol
&& strcolab == other.strcolab && strcolab == other.strcolab
&& strcolh == other.strcolh
&& angcol == other.angcol && angcol == other.angcol
&& blendmaskcol == other.blendmaskcol && blendmaskcol == other.blendmaskcol
&& radmaskcol == other.radmaskcol && radmaskcol == other.radmaskcol
@ -4159,6 +4161,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).structcol, "Locallab", "Structcol_" + std::to_string(i), spot.structcol, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).structcol, "Locallab", "Structcol_" + std::to_string(i), spot.structcol, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).strcol, "Locallab", "Strcol_" + std::to_string(i), spot.strcol, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).strcol, "Locallab", "Strcol_" + std::to_string(i), spot.strcol, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).strcolab, "Locallab", "Strcolab_" + std::to_string(i), spot.strcolab, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).strcolab, "Locallab", "Strcolab_" + std::to_string(i), spot.strcolab, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).strcolh, "Locallab", "Strcolh_" + std::to_string(i), spot.strcolh, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).angcol, "Locallab", "Angcol_" + std::to_string(i), spot.angcol, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).angcol, "Locallab", "Angcol_" + std::to_string(i), spot.angcol, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blurcolde, "Locallab", "Blurcolde_" + std::to_string(i), spot.blurcolde, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blurcolde, "Locallab", "Blurcolde_" + std::to_string(i), spot.blurcolde, keyFile);
saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blendmaskcol, "Locallab", "Blendmaskcol_" + std::to_string(i), spot.blendmaskcol, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blendmaskcol, "Locallab", "Blendmaskcol_" + std::to_string(i), spot.blendmaskcol, keyFile);
@ -5611,6 +5614,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Structcol_" + std::to_string(i), pedited, spot.structcol, spotEdited.structcol); assignFromKeyfile(keyFile, "Locallab", "Structcol_" + std::to_string(i), pedited, spot.structcol, spotEdited.structcol);
assignFromKeyfile(keyFile, "Locallab", "Strcol_" + std::to_string(i), pedited, spot.strcol, spotEdited.strcol); assignFromKeyfile(keyFile, "Locallab", "Strcol_" + std::to_string(i), pedited, spot.strcol, spotEdited.strcol);
assignFromKeyfile(keyFile, "Locallab", "Strcolab_" + std::to_string(i), pedited, spot.strcolab, spotEdited.strcolab); assignFromKeyfile(keyFile, "Locallab", "Strcolab_" + std::to_string(i), pedited, spot.strcolab, spotEdited.strcolab);
assignFromKeyfile(keyFile, "Locallab", "Strcolh_" + std::to_string(i), pedited, spot.strcolh, spotEdited.strcolh);
assignFromKeyfile(keyFile, "Locallab", "Angcol_" + std::to_string(i), pedited, spot.angcol, spotEdited.angcol); assignFromKeyfile(keyFile, "Locallab", "Angcol_" + std::to_string(i), pedited, spot.angcol, spotEdited.angcol);
assignFromKeyfile(keyFile, "Locallab", "Blurcolde_" + std::to_string(i), pedited, spot.blurcolde, spotEdited.blurcolde); assignFromKeyfile(keyFile, "Locallab", "Blurcolde_" + std::to_string(i), pedited, spot.blurcolde, spotEdited.blurcolde);
assignFromKeyfile(keyFile, "Locallab", "Blendmaskcol_" + std::to_string(i), pedited, spot.blendmaskcol, spotEdited.blendmaskcol); assignFromKeyfile(keyFile, "Locallab", "Blendmaskcol_" + std::to_string(i), pedited, spot.blendmaskcol, spotEdited.blendmaskcol);

View File

@ -1008,6 +1008,7 @@ struct LocallabParams {
int structcol; int structcol;
double strcol; double strcol;
double strcolab; double strcolab;
double strcolh;
double angcol; double angcol;
int blurcolde; int blurcolde;
int blendmaskcol; int blendmaskcol;

View File

@ -860,7 +860,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // Evlocallabstrcol LUMINANCECURVE, // Evlocallabstrcol
LUMINANCECURVE, // Evlocallabangcol LUMINANCECURVE, // Evlocallabangcol
LUMINANCECURVE, // Evlocallabstrcolab LUMINANCECURVE, // Evlocallabstrcolab
LUMINANCECURVE // EvLocallabSpotfeather LUMINANCECURVE, // EvLocallabSpotfeather
LUMINANCECURVE // Evlocallabstrcolh
}; };

View File

@ -268,7 +268,8 @@ Locallab::Locallab():
blurcolde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), blurcolde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))),
strcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTRLUM"), -4., 4., 0.05, 0.))), strcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTRLUM"), -4., 4., 0.05, 0.))),
strcolab(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTRCHRO"), -6., 6., 0.05, 0.))), strcolab(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTRCHRO"), -6., 6., 0.05, 0.))),
angcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -90, 90, 0.1, 0.))), strcolh(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTRHUE"), -6., 6., 0.05, 0.))),
angcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))),
blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
radmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), radmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), chromaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
@ -295,7 +296,7 @@ Locallab::Locallab():
structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))),
blurexpde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), blurexpde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))),
strexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4., 4., 0.05, 0.))), strexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4., 4., 0.05, 0.))),
angexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -90, 90, 0.1, 0.))), angexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))),
blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))),
radmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), radmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
chromaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), chromaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
@ -311,7 +312,7 @@ Locallab::Locallab():
fatdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATDETAIL"), -100., 300., 1., 0.))), fatdetail(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATDETAIL"), -100., 300., 1., 0.))),
fatanchor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 1., 100., 1., 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))), fatanchor(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATANCHOR"), 1., 100., 1., 50., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))),
strmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -2., 2., 0.05, 0.))), strmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -2., 2., 0.05, 0.))),
angmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -90., 90., 0.1, 0.))), angmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180., 180., 0.1, 0.))),
fatlevel(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATLEVEL"), 0, 3, 1, 2))), fatlevel(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATLEVEL"), 0, 3, 1, 2))),
multipliersh( multipliersh(
[this]() -> std::array<Adjuster *, 5> [this]() -> std::array<Adjuster *, 5>
@ -346,7 +347,7 @@ blendmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1
radmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))), radmaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_RADMASKCOL"), 0.0, 100.0, 0.1, 0.))),
blurSHde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), blurSHde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))),
strSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4., 4., 0.05, 0.))), strSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADSTR"), -4., 4., 0.05, 0.))),
angSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -90, 90, 0.1, 0.))), angSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GRADANG"), -180, 180, 0.1, 0.))),
chromaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))), chromaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMASKCOL"), -100.0, 100.0, 0.1, 0.))),
gammaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))), gammaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_GAMMASKCOL"), 0.25, 4.0, 0.01, 1.))),
slomaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))), slomaskSH(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SLOMASKCOL"), 0.0, 15.0, 0.1, 0.))),
@ -684,6 +685,7 @@ pe(nullptr)
strcol->setAdjusterListener(this); strcol->setAdjusterListener(this);
angcol->setAdjusterListener(this); angcol->setAdjusterListener(this);
strcolab->setAdjusterListener(this); strcolab->setAdjusterListener(this);
strcolh->setAdjusterListener(this);
blendmaskcol->setAdjusterListener(this); blendmaskcol->setAdjusterListener(this);
radmaskcol->setAdjusterListener(this); radmaskcol->setAdjusterListener(this);
@ -708,6 +710,7 @@ pe(nullptr)
if (showtooltip) { if (showtooltip) {
strcol->set_tooltip_text(M("TP_LOCALLAB_GRADSTR_TOOLTIP")); strcol->set_tooltip_text(M("TP_LOCALLAB_GRADSTR_TOOLTIP"));
strcolab->set_tooltip_text(M("TP_LOCALLAB_GRADSTRAB_TOOLTIP")); strcolab->set_tooltip_text(M("TP_LOCALLAB_GRADSTRAB_TOOLTIP"));
strcolh->set_tooltip_text(M("TP_LOCALLAB_GRADSTRHUE_TOOLTIP"));
angcol->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP")); angcol->set_tooltip_text(M("TP_LOCALLAB_GRADANG_TOOLTIP"));
} }
@ -977,6 +980,7 @@ pe(nullptr)
ToolParamBlock* const gradcolBox = Gtk::manage(new ToolParamBlock()); ToolParamBlock* const gradcolBox = Gtk::manage(new ToolParamBlock());
gradcolBox->pack_start(*strcol); gradcolBox->pack_start(*strcol);
gradcolBox->pack_start(*strcolab); gradcolBox->pack_start(*strcolab);
gradcolBox->pack_start(*strcolh);
gradcolBox->pack_start(*angcol); gradcolBox->pack_start(*angcol);
gradcolFrame->add(*gradcolBox); gradcolFrame->add(*gradcolBox);
@ -3889,6 +3893,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pp->locallab.spots.at(pp->locallab.selspot).strcol = strcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).strcol = strcol->getValue();
pp->locallab.spots.at(pp->locallab.selspot).angcol = angcol->getValue(); pp->locallab.spots.at(pp->locallab.selspot).angcol = angcol->getValue();
pp->locallab.spots.at(pp->locallab.selspot).strcolab = strcolab->getValue(); pp->locallab.spots.at(pp->locallab.selspot).strcolab = strcolab->getValue();
pp->locallab.spots.at(pp->locallab.selspot).strcolh = strcolh->getValue();
if (qualitycurveMethod->get_active_row_number() == 0) { if (qualitycurveMethod->get_active_row_number() == 0) {
pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "none"; pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "none";
@ -4385,6 +4390,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pe->locallab.spots.at(pp->locallab.selspot).structcol = pe->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).structcol = pe->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).strcol = pe->locallab.spots.at(pp->locallab.selspot).strcol || strcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strcol = pe->locallab.spots.at(pp->locallab.selspot).strcol || strcol->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).strcolab = pe->locallab.spots.at(pp->locallab.selspot).strcolab || strcolab->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).strcolab = pe->locallab.spots.at(pp->locallab.selspot).strcolab || strcolab->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).strcolh = pe->locallab.spots.at(pp->locallab.selspot).strcolh || strcolh->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).angcol = pe->locallab.spots.at(pp->locallab.selspot).angcol || angcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).angcol = pe->locallab.spots.at(pp->locallab.selspot).angcol || angcol->getEditedState();
pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED");
pe->locallab.spots.at(pp->locallab.selspot).gridMethod = pe->locallab.spots.at(pp->locallab.selspot).gridMethod || gridMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).gridMethod = pe->locallab.spots.at(pp->locallab.selspot).gridMethod || gridMethod->get_active_text() != M("GENERAL_UNCHANGED");
@ -4739,6 +4745,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pedited->locallab.spots.at(pp->locallab.selspot).structcol = pedited->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).structcol = pedited->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).strcol = pedited->locallab.spots.at(pp->locallab.selspot).strcol || strcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strcol = pedited->locallab.spots.at(pp->locallab.selspot).strcol || strcol->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).strcolab = pedited->locallab.spots.at(pp->locallab.selspot).strcolab || strcolab->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).strcolab = pedited->locallab.spots.at(pp->locallab.selspot).strcolab || strcolab->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).strcolh = pedited->locallab.spots.at(pp->locallab.selspot).strcolh || strcolh->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).angcol = pedited->locallab.spots.at(pp->locallab.selspot).angcol || angcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).angcol = pedited->locallab.spots.at(pp->locallab.selspot).angcol || angcol->getEditedState();
pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED");
pedited->locallab.spots.at(pp->locallab.selspot).gridMethod = pedited->locallab.spots.at(pp->locallab.selspot).gridMethod || gridMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).gridMethod = pedited->locallab.spots.at(pp->locallab.selspot).gridMethod || gridMethod->get_active_text() != M("GENERAL_UNCHANGED");
@ -5636,7 +5643,7 @@ void Locallab::merMethodChanged()
blurcolde->set_sensitive(true); blurcolde->set_sensitive(true);
H2CurveEditorG->set_sensitive(true); H2CurveEditorG->set_sensitive(true);
rgbCurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(true);
// strcolab->set_sensitive(false); strcolh->set_sensitive(false);
special->set_sensitive(true); special->set_sensitive(true);
invers->set_sensitive(true); invers->set_sensitive(true);
gridmerFrame->hide(); gridmerFrame->hide();
@ -5649,7 +5656,7 @@ void Locallab::merMethodChanged()
rgbCurveEditorG->set_sensitive(true); rgbCurveEditorG->set_sensitive(true);
special->set_sensitive(true); special->set_sensitive(true);
invers->set_sensitive(true); invers->set_sensitive(true);
// strcolab->set_sensitive(false); strcolh->set_sensitive(false);
conthrcol->hide(); conthrcol->hide();
gridmerFrame->hide(); gridmerFrame->hide();
} else if (merMethod->get_active_row_number() == 2) { } else if (merMethod->get_active_row_number() == 2) {
@ -5661,7 +5668,7 @@ void Locallab::merMethodChanged()
rgbCurveEditorG->set_sensitive(false); rgbCurveEditorG->set_sensitive(false);
special->set_sensitive(false); special->set_sensitive(false);
invers->set_sensitive(false); invers->set_sensitive(false);
strcolab->set_sensitive(true); strcolh->set_sensitive(true);
conthrcol->show(); conthrcol->show();
gridmerFrame->hide(); gridmerFrame->hide();
} else if (merMethod->get_active_row_number() == 3) { } else if (merMethod->get_active_row_number() == 3) {
@ -5672,7 +5679,7 @@ void Locallab::merMethodChanged()
rgbCurveEditorG->set_sensitive(false); rgbCurveEditorG->set_sensitive(false);
special->set_sensitive(false); special->set_sensitive(false);
invers->set_sensitive(false); invers->set_sensitive(false);
strcolab->set_sensitive(true); strcolh->set_sensitive(true);
mask7->show(); mask7->show();
conthrcol->show(); conthrcol->show();
gridmerFrame->hide(); gridmerFrame->hide();
@ -5686,7 +5693,7 @@ void Locallab::merMethodChanged()
rgbCurveEditorG->set_sensitive(false); rgbCurveEditorG->set_sensitive(false);
special->set_sensitive(false); special->set_sensitive(false);
invers->set_sensitive(false); invers->set_sensitive(false);
strcolab->set_sensitive(true); strcolh->set_sensitive(true);
gridmerFrame->show(); gridmerFrame->show();
} }
@ -7092,6 +7099,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
structcol->setDefault((double)defSpot->structcol); structcol->setDefault((double)defSpot->structcol);
strcol->setDefault((double)defSpot->strcol); strcol->setDefault((double)defSpot->strcol);
strcolab->setDefault((double)defSpot->strcolab); strcolab->setDefault((double)defSpot->strcolab);
strcolh->setDefault((double)defSpot->strcolh);
angcol->setDefault((double)defSpot->angcol); angcol->setDefault((double)defSpot->angcol);
blurcolde->setDefault((double)defSpot->blurcolde); blurcolde->setDefault((double)defSpot->blurcolde);
blendmaskcol->setDefault((double)defSpot->blendmaskcol); blendmaskcol->setDefault((double)defSpot->blendmaskcol);
@ -7305,6 +7313,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
structcol->setDefaultEditedState(Irrelevant); structcol->setDefaultEditedState(Irrelevant);
strcol->setDefaultEditedState(Irrelevant); strcol->setDefaultEditedState(Irrelevant);
strcolab->setDefaultEditedState(Irrelevant); strcolab->setDefaultEditedState(Irrelevant);
strcolh->setDefaultEditedState(Irrelevant);
angcol->setDefaultEditedState(Irrelevant); angcol->setDefaultEditedState(Irrelevant);
strengthgrid->setDefault((double)defSpot->strengthgrid); strengthgrid->setDefault((double)defSpot->strengthgrid);
blurcolde->setDefaultEditedState(Irrelevant); blurcolde->setDefaultEditedState(Irrelevant);
@ -7523,6 +7532,7 @@ void Locallab::setDefaults(const rtengine::procparams::ProcParams * defParams, c
structcol->setDefaultEditedState(defSpotState->structcol ? Edited : UnEdited); structcol->setDefaultEditedState(defSpotState->structcol ? Edited : UnEdited);
strcol->setDefaultEditedState(defSpotState->strcol ? Edited : UnEdited); strcol->setDefaultEditedState(defSpotState->strcol ? Edited : UnEdited);
strcolab->setDefaultEditedState(defSpotState->strcolab ? Edited : UnEdited); strcolab->setDefaultEditedState(defSpotState->strcolab ? Edited : UnEdited);
strcolh->setDefaultEditedState(defSpotState->strcolh ? Edited : UnEdited);
angcol->setDefaultEditedState(defSpotState->angcol ? Edited : UnEdited); angcol->setDefaultEditedState(defSpotState->angcol ? Edited : UnEdited);
strengthgrid->setDefaultEditedState(defSpotState->strengthgrid ? Edited : UnEdited); strengthgrid->setDefaultEditedState(defSpotState->strengthgrid ? Edited : UnEdited);
blurcolde->setDefaultEditedState(defSpotState->blurcolde ? Edited : UnEdited); blurcolde->setDefaultEditedState(defSpotState->blurcolde ? Edited : UnEdited);
@ -7840,6 +7850,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval)
} }
} }
if (a == strcolh) {
if (listener) {
listener->panelChanged(Evlocallabstrcolh, strcolh->getTextValue());
}
}
if (a == angcol) { if (a == angcol) {
if (listener) { if (listener) {
listener->panelChanged(Evlocallabangcol, angcol->getTextValue()); listener->panelChanged(Evlocallabangcol, angcol->getTextValue());
@ -9028,6 +9044,7 @@ void Locallab::setBatchMode(bool batchMode)
structcol->showEditedCB(); structcol->showEditedCB();
strcol->showEditedCB(); strcol->showEditedCB();
strcolab->showEditedCB(); strcolab->showEditedCB();
strcolh->showEditedCB();
angcol->showEditedCB(); angcol->showEditedCB();
strengthgrid->showEditedCB(); strengthgrid->showEditedCB();
blurcolde->showEditedCB(); blurcolde->showEditedCB();
@ -9591,6 +9608,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
strcol->setValue(pp->locallab.spots.at(index).strcol); strcol->setValue(pp->locallab.spots.at(index).strcol);
angcol->setValue(pp->locallab.spots.at(index).angcol); angcol->setValue(pp->locallab.spots.at(index).angcol);
strcolab->setValue(pp->locallab.spots.at(index).strcolab); strcolab->setValue(pp->locallab.spots.at(index).strcolab);
strcolh->setValue(pp->locallab.spots.at(index).strcolh);
if (pp->locallab.spots.at(index).qualitycurveMethod == "none") { if (pp->locallab.spots.at(index).qualitycurveMethod == "none") {
qualitycurveMethod->set_active(0); qualitycurveMethod->set_active(0);
@ -10116,6 +10134,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con
structcol->setEditedState(spotState->structcol ? Edited : UnEdited); structcol->setEditedState(spotState->structcol ? Edited : UnEdited);
strcol->setEditedState(spotState->strcol ? Edited : UnEdited); strcol->setEditedState(spotState->strcol ? Edited : UnEdited);
strcolab->setEditedState(spotState->strcolab ? Edited : UnEdited); strcolab->setEditedState(spotState->strcolab ? Edited : UnEdited);
strcolh->setEditedState(spotState->strcolh ? Edited : UnEdited);
angcol->setEditedState(spotState->angcol ? Edited : UnEdited); angcol->setEditedState(spotState->angcol ? Edited : UnEdited);
labgrid->setEdited(spotState->labgridALow || spotState->labgridBLow || spotState->labgridAHigh || spotState->labgridBHigh); labgrid->setEdited(spotState->labgridALow || spotState->labgridBLow || spotState->labgridAHigh || spotState->labgridBHigh);
labgridmerg->setEdited(spotState->labgridALowmerg || spotState->labgridBLowmerg || spotState->labgridAHighmerg || spotState->labgridBHighmerg); labgridmerg->setEdited(spotState->labgridALowmerg || spotState->labgridBLowmerg || spotState->labgridAHighmerg || spotState->labgridBHighmerg);
@ -10535,7 +10554,7 @@ void Locallab::updateSpecificGUIState()
mask7->hide(); mask7->hide();
conthrcol->hide(); conthrcol->hide();
structcol->set_sensitive(true); structcol->set_sensitive(true);
// strcolab->set_sensitive(false); strcolh->set_sensitive(false);
sensi->set_sensitive(true); sensi->set_sensitive(true);
blurcolde->set_sensitive(true); blurcolde->set_sensitive(true);
H2CurveEditorG->set_sensitive(true); H2CurveEditorG->set_sensitive(true);
@ -10546,7 +10565,7 @@ void Locallab::updateSpecificGUIState()
} else if (merMethod->get_active_row_number() == 1) { } else if (merMethod->get_active_row_number() == 1) {
mask7->hide(); mask7->hide();
structcol->set_sensitive(true); structcol->set_sensitive(true);
// strcolab->set_sensitive(false); strcolh->set_sensitive(false);
sensi->set_sensitive(true); sensi->set_sensitive(true);
blurcolde->set_sensitive(true); blurcolde->set_sensitive(true);
H2CurveEditorG->set_sensitive(true); H2CurveEditorG->set_sensitive(true);
@ -10558,7 +10577,7 @@ void Locallab::updateSpecificGUIState()
} else if (merMethod->get_active_row_number() == 2) { } else if (merMethod->get_active_row_number() == 2) {
mask7->show(); mask7->show();
structcol->set_sensitive(false); structcol->set_sensitive(false);
// strcolab->set_sensitive(true); strcolh->set_sensitive(true);
sensi->set_sensitive(false); sensi->set_sensitive(false);
blurcolde->set_sensitive(false); blurcolde->set_sensitive(false);
H2CurveEditorG->set_sensitive(false); H2CurveEditorG->set_sensitive(false);
@ -10572,7 +10591,7 @@ void Locallab::updateSpecificGUIState()
structcol->set_sensitive(false); structcol->set_sensitive(false);
sensi->set_sensitive(false); sensi->set_sensitive(false);
blurcolde->set_sensitive(false); blurcolde->set_sensitive(false);
strcolab->set_sensitive(true); strcolh->set_sensitive(true);
H2CurveEditorG->set_sensitive(false); H2CurveEditorG->set_sensitive(false);
rgbCurveEditorG->set_sensitive(false); rgbCurveEditorG->set_sensitive(false);
special->set_sensitive(false); special->set_sensitive(false);
@ -10582,7 +10601,7 @@ void Locallab::updateSpecificGUIState()
} else if (merMethod->get_active_row_number() == 3) { } else if (merMethod->get_active_row_number() == 3) {
mask7->show(); mask7->show();
structcol->set_sensitive(false); structcol->set_sensitive(false);
strcolab->set_sensitive(true); strcolh->set_sensitive(true);
sensi->set_sensitive(false); sensi->set_sensitive(false);
blurcolde->set_sensitive(false); blurcolde->set_sensitive(false);
H2CurveEditorG->set_sensitive(false); H2CurveEditorG->set_sensitive(false);

View File

@ -171,6 +171,7 @@ private:
Adjuster* const blurcolde; Adjuster* const blurcolde;
Adjuster* const strcol; Adjuster* const strcol;
Adjuster* const strcolab; Adjuster* const strcolab;
Adjuster* const strcolh;
Adjuster* const angcol; Adjuster* const angcol;
Adjuster* const blendmaskcol; Adjuster* const blendmaskcol;
Adjuster* const radmaskcol; Adjuster* const radmaskcol;

View File

@ -1001,6 +1001,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).structcol = locallab.spots.at(j).structcol && pSpot.structcol == otherSpot.structcol; locallab.spots.at(j).structcol = locallab.spots.at(j).structcol && pSpot.structcol == otherSpot.structcol;
locallab.spots.at(j).strcol = locallab.spots.at(j).strcol && pSpot.strcol == otherSpot.strcol; locallab.spots.at(j).strcol = locallab.spots.at(j).strcol && pSpot.strcol == otherSpot.strcol;
locallab.spots.at(j).strcolab = locallab.spots.at(j).strcolab && pSpot.strcolab == otherSpot.strcolab; locallab.spots.at(j).strcolab = locallab.spots.at(j).strcolab && pSpot.strcolab == otherSpot.strcolab;
locallab.spots.at(j).strcolh = locallab.spots.at(j).strcolh && pSpot.strcolh == otherSpot.strcolh;
locallab.spots.at(j).angcol = locallab.spots.at(j).angcol && pSpot.angcol == otherSpot.angcol; locallab.spots.at(j).angcol = locallab.spots.at(j).angcol && pSpot.angcol == otherSpot.angcol;
locallab.spots.at(j).blurcolde = locallab.spots.at(j).blurcolde && pSpot.blurcolde == otherSpot.blurcolde; locallab.spots.at(j).blurcolde = locallab.spots.at(j).blurcolde && pSpot.blurcolde == otherSpot.blurcolde;
locallab.spots.at(j).blendmaskcol = locallab.spots.at(j).blendmaskcol && pSpot.blendmaskcol == otherSpot.blendmaskcol; locallab.spots.at(j).blendmaskcol = locallab.spots.at(j).blendmaskcol && pSpot.blendmaskcol == otherSpot.blendmaskcol;
@ -2964,6 +2965,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).strcolab = mods.locallab.spots.at(i).strcolab; toEdit.locallab.spots.at(i).strcolab = mods.locallab.spots.at(i).strcolab;
} }
if (locallab.spots.at(i).strcolh) {
toEdit.locallab.spots.at(i).strcolh = mods.locallab.spots.at(i).strcolh;
}
if (locallab.spots.at(i).angcol) { if (locallab.spots.at(i).angcol) {
toEdit.locallab.spots.at(i).angcol = mods.locallab.spots.at(i).angcol; toEdit.locallab.spots.at(i).angcol = mods.locallab.spots.at(i).angcol;
} }
@ -5108,6 +5113,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
structcol(v), structcol(v),
strcol(v), strcol(v),
strcolab(v), strcolab(v),
strcolh(v),
angcol(v), angcol(v),
blurcolde(v), blurcolde(v),
blendmaskcol(v), blendmaskcol(v),
@ -5454,6 +5460,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
structcol = v; structcol = v;
strcol = v; strcol = v;
strcolab = v; strcolab = v;
strcolh = v;
angcol = v; angcol = v;
blurcolde = v; blurcolde = v;
blendmaskcol = v; blendmaskcol = v;

View File

@ -435,6 +435,7 @@ public:
bool structcol; bool structcol;
bool strcol; bool strcol;
bool strcolab; bool strcolab;
bool strcolh;
bool angcol; bool angcol;
bool blurcolde; bool blurcolde;
bool blendmaskcol; bool blendmaskcol;