display hue chroma lumaref on mask curves - dispaly 1:1 in some expanders - thanks to Pandagrapher
This commit is contained in:
parent
65a418ae27
commit
5156edeb8a
@ -835,12 +835,12 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
|
|||||||
CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lumar,
|
CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lumar,
|
||||||
hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, avg,
|
hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, avg,
|
||||||
sca);
|
sca);
|
||||||
|
if (sp == params.locallab.selspot) {
|
||||||
if (locallListener) {
|
if (locallListener) {
|
||||||
locallListener->refChanged(huer, lumar, chromar);
|
locallListener->refChanged(huer, lumar, chromar);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Locallab tools computation
|
// Locallab tools computation
|
||||||
/* Notes:
|
/* Notes:
|
||||||
* - shbuffer is used as nullptr
|
* - shbuffer is used as nullptr
|
||||||
|
@ -247,6 +247,7 @@ CurveEditor::CurveEditor (Glib::ustring text, CurveEditorGroup* ceGroup, CurveEd
|
|||||||
{
|
{
|
||||||
|
|
||||||
bgHistValid = false;
|
bgHistValid = false;
|
||||||
|
locallabRef = 0.0;
|
||||||
remoteDrag = false;
|
remoteDrag = false;
|
||||||
selected = DCT_Linear;
|
selected = DCT_Linear;
|
||||||
bottomBarCP = nullptr;
|
bottomBarCP = nullptr;
|
||||||
@ -321,6 +322,19 @@ void CurveEditor::updateBackgroundHistogram(const LUTu& hist)
|
|||||||
subGroup->updateBackgroundHistogram(this);
|
subGroup->updateBackgroundHistogram(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update Locallab reference value displayed in the background
|
||||||
|
*/
|
||||||
|
void CurveEditor::updateLocallabBackground(double ref)
|
||||||
|
{
|
||||||
|
// Copy Locallab reference value in the curve editor cache
|
||||||
|
locallabRef = ref;
|
||||||
|
|
||||||
|
// Then call the curve editor group to eventually update the histogram
|
||||||
|
subGroup->updateLocallabBackground(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Open up the curve if it has modifications and it's not already opened
|
// Open up the curve if it has modifications and it's not already opened
|
||||||
// Returns: true if curve was non linear and opened
|
// Returns: true if curve was non linear and opened
|
||||||
bool CurveEditor::openIfNonlinear()
|
bool CurveEditor::openIfNonlinear()
|
||||||
|
@ -58,7 +58,7 @@ protected:
|
|||||||
PopUpToggleButton* curveType;
|
PopUpToggleButton* curveType;
|
||||||
LUTu histogram; // histogram values
|
LUTu histogram; // histogram values
|
||||||
bool bgHistValid;
|
bool bgHistValid;
|
||||||
|
double locallabRef; // Locallab reference value
|
||||||
bool remoteDrag;
|
bool remoteDrag;
|
||||||
|
|
||||||
int selected;
|
int selected;
|
||||||
@ -94,7 +94,7 @@ public:
|
|||||||
bool isUnChanged ();
|
bool isUnChanged ();
|
||||||
void setUnChanged (bool uc);
|
void setUnChanged (bool uc);
|
||||||
void updateBackgroundHistogram(const LUTu& hist);
|
void updateBackgroundHistogram(const LUTu& hist);
|
||||||
|
void updateLocallabBackground(double ref);
|
||||||
void setLeftBarColorProvider(ColorProvider* cp, int callerId);
|
void setLeftBarColorProvider(ColorProvider* cp, int callerId);
|
||||||
void setBottomBarColorProvider(ColorProvider* cp, int callerId);
|
void setBottomBarColorProvider(ColorProvider* cp, int callerId);
|
||||||
void setCurveColorProvider(ColorProvider* cp, int callerId);
|
void setCurveColorProvider(ColorProvider* cp, int callerId);
|
||||||
|
@ -269,6 +269,7 @@ void CurveEditorGroup::curveTypeToggled(CurveEditor* ce)
|
|||||||
|
|
||||||
if (ct < ce->subGroup->valUnchanged) {
|
if (ct < ce->subGroup->valUnchanged) {
|
||||||
ce->subGroup->restoreDisplayedHistogram();
|
ce->subGroup->restoreDisplayedHistogram();
|
||||||
|
ce->subGroup->restoreLocallabBackground();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// The button is now released, so we have to hide this CurveEditor
|
// The button is now released, so we have to hide this CurveEditor
|
||||||
|
@ -136,6 +136,7 @@ public:
|
|||||||
}
|
}
|
||||||
void updateEditButton(CurveEditor* curve, Gtk::ToggleButton *button, sigc::connection &connection);
|
void updateEditButton(CurveEditor* curve, Gtk::ToggleButton *button, sigc::connection &connection);
|
||||||
virtual void updateBackgroundHistogram (CurveEditor* ce) {}
|
virtual void updateBackgroundHistogram (CurveEditor* ce) {}
|
||||||
|
virtual void updateLocallabBackground(CurveEditor* ce) {};
|
||||||
virtual void switchGUI() = 0;
|
virtual void switchGUI() = 0;
|
||||||
virtual void refresh(CurveEditor *curveToRefresh) = 0;
|
virtual void refresh(CurveEditor *curveToRefresh) = 0;
|
||||||
virtual void editModeSwitchedOff() = 0;
|
virtual void editModeSwitchedOff() = 0;
|
||||||
@ -165,6 +166,7 @@ protected:
|
|||||||
virtual void storeCurveValues (CurveEditor* ce, const std::vector<double>& p) = 0;
|
virtual void storeCurveValues (CurveEditor* ce, const std::vector<double>& p) = 0;
|
||||||
virtual void storeDisplayedCurve () = 0;
|
virtual void storeDisplayedCurve () = 0;
|
||||||
virtual void restoreDisplayedHistogram() {};
|
virtual void restoreDisplayedHistogram() {};
|
||||||
|
virtual void restoreLocallabBackground() {};
|
||||||
virtual void removeEditor () = 0;
|
virtual void removeEditor () = 0;
|
||||||
virtual const std::vector<double> getCurveFromGUI (int type) = 0;
|
virtual const std::vector<double> getCurveFromGUI (int type) = 0;
|
||||||
|
|
||||||
|
@ -554,6 +554,13 @@ void FlatCurveEditorSubGroup::restoreDisplayedHistogram()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FlatCurveEditorSubGroup::restoreLocallabBackground()
|
||||||
|
{
|
||||||
|
if (parent->displayedCurve) {
|
||||||
|
CPointsCurve->updateLocallabBackground(parent->displayedCurve->locallabRef);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FlatCurveEditorSubGroup::storeCurveValues (CurveEditor* ce, const std::vector<double>& p)
|
void FlatCurveEditorSubGroup::storeCurveValues (CurveEditor* ce, const std::vector<double>& p)
|
||||||
{
|
{
|
||||||
if (!p.empty()) {
|
if (!p.empty()) {
|
||||||
@ -627,6 +634,13 @@ bool FlatCurveEditorSubGroup::curveReset(CurveEditor *ce)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FlatCurveEditorSubGroup::updateLocallabBackground(CurveEditor* ce)
|
||||||
|
{
|
||||||
|
if (ce == parent->displayedCurve) {
|
||||||
|
CPointsCurve->updateLocallabBackground(ce->locallabRef);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*void FlatCurveEditorSubGroup::updateBackgroundHistogram (CurveEditor* ce) {
|
/*void FlatCurveEditorSubGroup::updateBackgroundHistogram (CurveEditor* ce) {
|
||||||
CurveEditor* fce = (CurveEditor*)ce;
|
CurveEditor* fce = (CurveEditor*)ce;
|
||||||
if (fce==displayedCurve) {
|
if (fce==displayedCurve) {
|
||||||
|
@ -50,6 +50,7 @@ public:
|
|||||||
|
|
||||||
FlatCurveEditor* addCurve(Glib::ustring curveLabel = "", bool periodic = true);
|
FlatCurveEditor* addCurve(Glib::ustring curveLabel = "", bool periodic = true);
|
||||||
//virtual void updateBackgroundHistogram (CurveEditor* ce);
|
//virtual void updateBackgroundHistogram (CurveEditor* ce);
|
||||||
|
void updateLocallabBackground(CurveEditor* ce) override;
|
||||||
void switchGUI() override;
|
void switchGUI() override;
|
||||||
void refresh(CurveEditor *curveToRefresh) override;
|
void refresh(CurveEditor *curveToRefresh) override;
|
||||||
void editModeSwitchedOff() override;
|
void editModeSwitchedOff() override;
|
||||||
@ -66,6 +67,7 @@ protected:
|
|||||||
void storeCurveValues (CurveEditor* ce, const std::vector<double>& p) override;
|
void storeCurveValues (CurveEditor* ce, const std::vector<double>& p) override;
|
||||||
void storeDisplayedCurve () override;
|
void storeDisplayedCurve () override;
|
||||||
void restoreDisplayedHistogram () override;
|
void restoreDisplayedHistogram () override;
|
||||||
|
void restoreLocallabBackground() override;
|
||||||
void savePressed ();
|
void savePressed ();
|
||||||
void loadPressed ();
|
void loadPressed ();
|
||||||
void copyPressed ();
|
void copyPressed ();
|
||||||
|
@ -53,11 +53,11 @@ Locallab::Locallab():
|
|||||||
expsoft(new MyExpander(true, M("TP_LOCALLAB_SOFT"))),
|
expsoft(new MyExpander(true, M("TP_LOCALLAB_SOFT"))),
|
||||||
expblur(new MyExpander(true, M("TP_LOCALLAB_BLUFR"))),
|
expblur(new MyExpander(true, M("TP_LOCALLAB_BLUFR"))),
|
||||||
exptonemap(new MyExpander(true, M("TP_LOCALLAB_TM"))),
|
exptonemap(new MyExpander(true, M("TP_LOCALLAB_TM"))),
|
||||||
expreti(new MyExpander(true, M("TP_LOCALLAB_RETI"))),
|
expreti(new MyExpander(true, new Gtk::HBox())),
|
||||||
expsharp(new MyExpander(true, M("TP_LOCALLAB_SHARP"))),
|
expsharp(new MyExpander(true, new Gtk::HBox())),
|
||||||
expcontrast(new MyExpander(true, M("TP_LOCALLAB_LOC_CONTRAST"))),
|
expcontrast(new MyExpander(true, M("TP_LOCALLAB_LOC_CONTRAST"))),
|
||||||
expcbdl(new MyExpander(true, M("TP_LOCALLAB_CBDL"))),
|
expcbdl(new MyExpander(true, new Gtk::HBox())),
|
||||||
expdenoi(new MyExpander(true, M("TP_LOCALLAB_DENOIS"))),
|
expdenoi(new MyExpander(true, new Gtk::HBox())),
|
||||||
|
|
||||||
|
|
||||||
// CurveEditorGroup widgets
|
// CurveEditorGroup widgets
|
||||||
@ -201,8 +201,6 @@ Locallab::Locallab():
|
|||||||
lumacontrastMinusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS")))),
|
lumacontrastMinusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS")))),
|
||||||
lumaneutralButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMANEUTRAL")))),
|
lumaneutralButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMANEUTRAL")))),
|
||||||
lumacontrastPlusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS")))),
|
lumacontrastPlusButton(Gtk::manage(new Gtk::Button(M("TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS")))),
|
||||||
transLabels(Gtk::manage(new Gtk::Label("---"))),
|
|
||||||
transLabels2(Gtk::manage(new Gtk::Label("---"))),
|
|
||||||
maskcolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHOW")))),
|
maskcolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHOW")))),
|
||||||
maskexpFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHOW")))),
|
maskexpFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHOW")))),
|
||||||
gridFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABGRID")))),
|
gridFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LABGRID")))),
|
||||||
@ -210,10 +208,7 @@ Locallab::Locallab():
|
|||||||
// Others
|
// Others
|
||||||
defparams(nullptr),
|
defparams(nullptr),
|
||||||
defpedited(nullptr),
|
defpedited(nullptr),
|
||||||
pe(nullptr),
|
pe(nullptr)
|
||||||
nexthuer(0.),
|
|
||||||
nextlumar(0.),
|
|
||||||
nextchromar(0.)
|
|
||||||
|
|
||||||
{
|
{
|
||||||
ToolVBox* const panel = Gtk::manage(new ToolVBox());
|
ToolVBox* const panel = Gtk::manage(new ToolVBox());
|
||||||
@ -389,8 +384,9 @@ Locallab::Locallab():
|
|||||||
colorBox->pack_start(*invers);
|
colorBox->pack_start(*invers);
|
||||||
maskcolFrame->set_label_align(0.025, 0.5);
|
maskcolFrame->set_label_align(0.025, 0.5);
|
||||||
ToolParamBlock* const maskcolBox = Gtk::manage(new ToolParamBlock());
|
ToolParamBlock* const maskcolBox = Gtk::manage(new ToolParamBlock());
|
||||||
maskcolBox->pack_start(*transLabels, Gtk::PACK_SHRINK, 4);
|
// maskcolBox->pack_start(*transLabels, Gtk::PACK_SHRINK, 4);
|
||||||
maskcolBox->pack_start(*showmaskcolMethod, Gtk::PACK_SHRINK, 0);
|
// maskcolBox->pack_start(*showmaskcolMethod, Gtk::PACK_SHRINK, 0);
|
||||||
|
maskcolBox->pack_start(*showmaskcolMethod, Gtk::PACK_SHRINK, 4);
|
||||||
maskcolBox->pack_start(*enaColorMask, Gtk::PACK_SHRINK, 0);
|
maskcolBox->pack_start(*enaColorMask, Gtk::PACK_SHRINK, 0);
|
||||||
maskcolBox->pack_start(*maskCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
maskcolBox->pack_start(*maskCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
||||||
maskcolBox->pack_start(*blendmaskcol, Gtk::PACK_SHRINK, 0);
|
maskcolBox->pack_start(*blendmaskcol, Gtk::PACK_SHRINK, 0);
|
||||||
@ -495,8 +491,9 @@ Locallab::Locallab():
|
|||||||
exposeBox->pack_start(*inversex);
|
exposeBox->pack_start(*inversex);
|
||||||
maskexpFrame->set_label_align(0.025, 0.5);
|
maskexpFrame->set_label_align(0.025, 0.5);
|
||||||
ToolParamBlock* const maskexpBox = Gtk::manage(new ToolParamBlock());
|
ToolParamBlock* const maskexpBox = Gtk::manage(new ToolParamBlock());
|
||||||
maskexpBox->pack_start(*transLabels2, Gtk::PACK_SHRINK, 4);
|
maskexpBox->pack_start(*showmaskexpMethod, Gtk::PACK_SHRINK, 4);
|
||||||
maskexpBox->pack_start(*showmaskexpMethod, Gtk::PACK_SHRINK, 0);
|
// maskexpBox->pack_start(*transLabels2, Gtk::PACK_SHRINK, 4);
|
||||||
|
// maskexpBox->pack_start(*showmaskexpMethod, Gtk::PACK_SHRINK, 0);
|
||||||
maskexpBox->pack_start(*enaExpMask, Gtk::PACK_SHRINK, 0);
|
maskexpBox->pack_start(*enaExpMask, Gtk::PACK_SHRINK, 0);
|
||||||
maskexpBox->pack_start(*maskexpCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
maskexpBox->pack_start(*maskexpCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor
|
||||||
maskexpBox->pack_start(*blendmaskexp, Gtk::PACK_SHRINK, 0);
|
maskexpBox->pack_start(*blendmaskexp, Gtk::PACK_SHRINK, 0);
|
||||||
@ -663,9 +660,18 @@ Locallab::Locallab():
|
|||||||
exptonemap->add(*tmBox);
|
exptonemap->add(*tmBox);
|
||||||
exptonemap->setLevel(2);
|
exptonemap->setLevel(2);
|
||||||
|
|
||||||
// panel->pack_start(*exptonemap, false, false);
|
// panel->pack_start(*exptonemap, false, false);
|
||||||
|
|
||||||
// Retinex
|
// Retinex
|
||||||
|
Gtk::HBox* const retiTitleHBox = Gtk::manage(new Gtk::HBox());
|
||||||
|
Gtk::Label* const retiLabel = Gtk::manage(new Gtk::Label());
|
||||||
|
retiLabel->set_markup(Glib::ustring("<b>") + escapeHtmlChars(M("TP_LOCALLAB_RETI")) + Glib::ustring("</b>"));
|
||||||
|
retiLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
|
||||||
|
retiTitleHBox->pack_start(*retiLabel, Gtk::PACK_EXPAND_WIDGET, 0);
|
||||||
|
RTImage *retiImage = Gtk::manage (new RTImage("one-to-one-small.png"));
|
||||||
|
retiImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP"));
|
||||||
|
retiTitleHBox->pack_end(*retiImage, Gtk::PACK_SHRINK, 0);
|
||||||
|
expreti->setLabel(retiTitleHBox);
|
||||||
expreti->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expreti));
|
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));
|
enableretiConn = expreti->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expreti));
|
||||||
|
|
||||||
@ -716,6 +722,16 @@ Locallab::Locallab():
|
|||||||
panel->pack_start(*expreti, false, false);
|
panel->pack_start(*expreti, false, false);
|
||||||
|
|
||||||
// Sharpening
|
// Sharpening
|
||||||
|
Gtk::HBox* const sharpTitleHBox = Gtk::manage(new Gtk::HBox());
|
||||||
|
Gtk::Label* const sharpLabel = Gtk::manage(new Gtk::Label());
|
||||||
|
sharpLabel->set_markup(Glib::ustring("<b>") + escapeHtmlChars(M("TP_LOCALLAB_SHARP")) + Glib::ustring("</b>"));
|
||||||
|
sharpLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
|
||||||
|
sharpTitleHBox->pack_start(*sharpLabel, Gtk::PACK_EXPAND_WIDGET, 0);
|
||||||
|
RTImage *sharpImage = Gtk::manage (new RTImage("one-to-one-small.png"));
|
||||||
|
sharpImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP"));
|
||||||
|
sharpTitleHBox->pack_end(*sharpImage, Gtk::PACK_SHRINK, 0);
|
||||||
|
expsharp->setLabel(sharpTitleHBox);
|
||||||
|
|
||||||
expsharp->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expsharp));
|
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));
|
enablesharpConn = expsharp->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expsharp));
|
||||||
|
|
||||||
@ -776,6 +792,15 @@ Locallab::Locallab():
|
|||||||
panel->pack_start(*expcontrast, false, false);
|
panel->pack_start(*expcontrast, false, false);
|
||||||
|
|
||||||
// Contrast by detail levels
|
// Contrast by detail levels
|
||||||
|
Gtk::HBox* const cbdlTitleHBox = Gtk::manage(new Gtk::HBox());
|
||||||
|
Gtk::Label* const cbdlLabel = Gtk::manage(new Gtk::Label());
|
||||||
|
cbdlLabel->set_markup(Glib::ustring("<b>") + escapeHtmlChars(M("TP_LOCALLAB_CBDL")) + Glib::ustring("</b>"));
|
||||||
|
cbdlLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
|
||||||
|
cbdlTitleHBox->pack_start(*cbdlLabel, Gtk::PACK_EXPAND_WIDGET, 0);
|
||||||
|
RTImage *cbdlImage = Gtk::manage (new RTImage("one-to-one-small.png"));
|
||||||
|
cbdlImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP"));
|
||||||
|
cbdlTitleHBox->pack_end(*cbdlImage, Gtk::PACK_SHRINK, 0);
|
||||||
|
expcbdl->setLabel(cbdlTitleHBox);
|
||||||
expcbdl->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expcbdl));
|
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));
|
enablecbdlConn = expcbdl->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expcbdl));
|
||||||
expcbdl->set_tooltip_text(M("TP_LOCALLAB_EXPCBDL_TOOLTIP"));
|
expcbdl->set_tooltip_text(M("TP_LOCALLAB_EXPCBDL_TOOLTIP"));
|
||||||
@ -827,6 +852,15 @@ Locallab::Locallab():
|
|||||||
panel->pack_start(*expcbdl, false, false);
|
panel->pack_start(*expcbdl, false, false);
|
||||||
|
|
||||||
// Denoise
|
// Denoise
|
||||||
|
Gtk::HBox* const denoiTitleHBox = Gtk::manage(new Gtk::HBox());
|
||||||
|
Gtk::Label* const denoiLabel = Gtk::manage(new Gtk::Label());
|
||||||
|
denoiLabel->set_markup(Glib::ustring("<b>") + escapeHtmlChars(M("TP_LOCALLAB_DENOIS")) + Glib::ustring("</b>"));
|
||||||
|
denoiLabel->set_alignment(Gtk::ALIGN_START, Gtk::ALIGN_CENTER);
|
||||||
|
denoiTitleHBox->pack_start(*denoiLabel, Gtk::PACK_EXPAND_WIDGET, 0);
|
||||||
|
RTImage *denoiImage = Gtk::manage (new RTImage("one-to-one-small.png"));
|
||||||
|
denoiImage->set_tooltip_text(M("TP_GENERAL_11SCALE_TOOLTIP"));
|
||||||
|
denoiTitleHBox->pack_end(*denoiImage, Gtk::PACK_SHRINK, 0);
|
||||||
|
expdenoi->setLabel(denoiTitleHBox);
|
||||||
expdenoi->signal_button_release_event().connect_notify(sigc::bind(sigc::mem_fun(this, &Locallab::foldAllButMe), expdenoi));
|
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));
|
enabledenoiConn = expdenoi->signal_enabled_toggled().connect(sigc::bind(sigc::mem_fun(this, &Locallab::enableToggled), expdenoi));
|
||||||
|
|
||||||
@ -998,59 +1032,44 @@ void Locallab::writeOptions(std::vector<int> &tpOpen)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Locallab::refChanged(double huer, double lumar, double chromar)
|
void Locallab::refChanged (double huer, double lumar, double chromar)
|
||||||
{
|
|
||||||
nexthuer = huer;
|
|
||||||
nextlumar = lumar / 100.f;
|
|
||||||
nextchromar = chromar / 137.4f;
|
|
||||||
float h = Color::huelab_to_huehsv2(nexthuer);
|
|
||||||
h += 1.f / 6.f;
|
|
||||||
|
|
||||||
if (h > 1.f) {
|
|
||||||
h -= 1.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
nexthuer = h;
|
|
||||||
//printf("nh=%f nl=%f nc=%f\n", nexthuer, nextlumar, nextchromar);
|
|
||||||
|
|
||||||
|
|
||||||
idle_register.add(
|
|
||||||
[this]() -> bool {
|
|
||||||
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
|
|
||||||
// FIXME: The above can't be true?!
|
|
||||||
disableListener();
|
|
||||||
enableListener();
|
|
||||||
updateLabel();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Locallab::updateLabel()
|
|
||||||
{
|
{
|
||||||
if (!batchMode) {
|
if (!batchMode) {
|
||||||
float nX, nY, nZ;
|
// Hue reference normalization (between 0 and 1)
|
||||||
|
double normHuer = huer;
|
||||||
nY = nextlumar;
|
float h = Color::huelab_to_huehsv2(normHuer);
|
||||||
nX = nextchromar;
|
h += 1.f/6.f;
|
||||||
nZ = nexthuer;
|
if (h > 1.f) {
|
||||||
{
|
h -= 1.f;
|
||||||
transLabels->set_text(
|
|
||||||
Glib::ustring::compose(M("TP_LOCALLAB_REFLABEL"),
|
|
||||||
Glib::ustring::format(std::fixed, std::setprecision(3), nX),
|
|
||||||
Glib::ustring::format(std::fixed, std::setprecision(3), nY),
|
|
||||||
Glib::ustring::format(std::fixed, std::setprecision(3), nZ))
|
|
||||||
);
|
|
||||||
transLabels2->set_text(
|
|
||||||
Glib::ustring::compose(M("TP_LOCALLAB_REFLABEL"),
|
|
||||||
Glib::ustring::format(std::fixed, std::setprecision(3), nX),
|
|
||||||
Glib::ustring::format(std::fixed, std::setprecision(3), nY),
|
|
||||||
Glib::ustring::format(std::fixed, std::setprecision(3), nZ))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
normHuer = h;
|
||||||
|
|
||||||
|
// Luma reference normalization (between 0 and 1)
|
||||||
|
double normLumar = lumar / 100.f;
|
||||||
|
|
||||||
|
// Chroma reference normalization (between 0 and 1)
|
||||||
|
double normChromar = chromar / 137.4f;
|
||||||
|
|
||||||
|
// printf("nh=%f nl=%f nc=%f\n", normHuer, normLumar, normChromar);
|
||||||
|
|
||||||
|
idle_register.add(
|
||||||
|
[this, normHuer, normLumar, normChromar]() -> bool
|
||||||
|
{
|
||||||
|
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
|
||||||
|
|
||||||
|
// Update Color & Light mask background
|
||||||
|
CCmaskshape->updateLocallabBackground(normChromar);
|
||||||
|
LLmaskshape->updateLocallabBackground(normLumar);
|
||||||
|
HHmaskshape->updateLocallabBackground(normHuer);
|
||||||
|
|
||||||
|
// Update Exposure mask background
|
||||||
|
CCmaskexpshape->updateLocallabBackground(normChromar);
|
||||||
|
LLmaskexpshape->updateLocallabBackground(normLumar);
|
||||||
|
HHmaskexpshape->updateLocallabBackground(normHuer);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1091,7 +1110,7 @@ void Locallab::lumacontrastPlusPressed()
|
|||||||
|
|
||||||
for (int i = 0; i < 5; i++) {
|
for (int i = 0; i < 5; i++) {
|
||||||
float inc = (5 - i);
|
float inc = (5 - i);
|
||||||
multiplier[i]->setValue(multiplier[i]->getValue() + 0.01f * inc );
|
multiplier[i]->setValue(multiplier[i]->getValue() + 0.01f * inc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Raise event (only for first multiplier because associated event concerns all multipliers)
|
// Raise event (only for first multiplier because associated event concerns all multipliers)
|
||||||
@ -3198,6 +3217,7 @@ void Locallab::adjusterChanged(Adjuster * a, double newval)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vibrance
|
// Vibrance
|
||||||
if (a == pastels && pastSatTog->get_active() && !(multiImage && pastSatTog->get_inconsistent())) {
|
if (a == pastels && pastSatTog->get_active() && !(multiImage && pastSatTog->get_inconsistent())) {
|
||||||
saturated->setValue(newval);
|
saturated->setValue(newval);
|
||||||
|
@ -232,8 +232,8 @@ private:
|
|||||||
Gtk::Button* const lumaneutralButton;
|
Gtk::Button* const lumaneutralButton;
|
||||||
Gtk::Button* const lumacontrastPlusButton;
|
Gtk::Button* const lumacontrastPlusButton;
|
||||||
sigc::connection lumacontrastMinusPressedConn, lumaneutralPressedConn, lumacontrastPlusPressedConn;
|
sigc::connection lumacontrastMinusPressedConn, lumaneutralPressedConn, lumacontrastPlusPressedConn;
|
||||||
Gtk::Label* transLabels;
|
// Gtk::Label* transLabels;
|
||||||
Gtk::Label* transLabels2;
|
// Gtk::Label* transLabels2;
|
||||||
Gtk::Frame* maskcolFrame;
|
Gtk::Frame* maskcolFrame;
|
||||||
Gtk::Frame* maskexpFrame;
|
Gtk::Frame* maskexpFrame;
|
||||||
Gtk::Frame* gridFrame;
|
Gtk::Frame* gridFrame;
|
||||||
@ -301,9 +301,6 @@ private:
|
|||||||
void updateLocallabGUI(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited, int index);
|
void updateLocallabGUI(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited, int index);
|
||||||
void updateSpecificGUIState();
|
void updateSpecificGUIState();
|
||||||
void setParamEditable(bool cond);
|
void setParamEditable(bool cond);
|
||||||
double nexthuer;
|
|
||||||
double nextlumar;
|
|
||||||
double nextchromar;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -323,7 +320,6 @@ public:
|
|||||||
void writeOptions(std::vector<int> &tpOpen);
|
void writeOptions(std::vector<int> &tpOpen);
|
||||||
void updateToolState(std::vector<int> &tpOpen);
|
void updateToolState(std::vector<int> &tpOpen);
|
||||||
void refChanged(double huer, double lumar, double chromar);
|
void refChanged(double huer, double lumar, double chromar);
|
||||||
void updateLabel();
|
|
||||||
|
|
||||||
// Mask visibility management functions
|
// Mask visibility management functions
|
||||||
struct llMaskVisibility {
|
struct llMaskVisibility {
|
||||||
|
@ -39,7 +39,8 @@ MyFlatCurve::MyFlatCurve () :
|
|||||||
deletedPointX(0.0),
|
deletedPointX(0.0),
|
||||||
leftTanHandle({0.0, 0.0}),
|
leftTanHandle({0.0, 0.0}),
|
||||||
rightTanHandle({0.0, 0.0}),
|
rightTanHandle({0.0, 0.0}),
|
||||||
draggingElement(false)
|
draggingElement(false),
|
||||||
|
locallabRef(0.0)
|
||||||
{
|
{
|
||||||
|
|
||||||
graphW = get_allocation().get_width() - RADIUS * 2;
|
graphW = get_allocation().get_width() - RADIUS * 2;
|
||||||
@ -164,6 +165,19 @@ void MyFlatCurve::draw ()
|
|||||||
|
|
||||||
Gdk::RGBA c;
|
Gdk::RGBA c;
|
||||||
|
|
||||||
|
// Draw Locallab reference value in the background
|
||||||
|
if (locallabRef > 0.0) {
|
||||||
|
cr->set_line_width(1.0);
|
||||||
|
cr->move_to(double(graphX + 1), double(graphY - 1));
|
||||||
|
c = style->get_color(state);
|
||||||
|
cr->set_source_rgba(c.get_red(), c.get_green(), c.get_blue(), 0.2);
|
||||||
|
cr->line_to(double(graphX + 1), double(graphY - 1) - double(graphH - 2));
|
||||||
|
cr->line_to(double(graphX) + 1.5 + locallabRef*double(graphW -2), double(graphY - 1) - double(graphH - 2));
|
||||||
|
cr->line_to(double(graphX) + 1.5 + locallabRef*double(graphW -2), double(graphY - 1));
|
||||||
|
cr->close_path();
|
||||||
|
cr->fill();
|
||||||
|
cr->stroke();
|
||||||
|
}
|
||||||
cr->set_line_width (1.0);
|
cr->set_line_width (1.0);
|
||||||
|
|
||||||
// draw f(x)=0.5 line
|
// draw f(x)=0.5 line
|
||||||
@ -1872,6 +1886,35 @@ void MyFlatCurve::stopNumericalAdjustment()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyFlatCurve::updateLocallabBackground(double ref)
|
||||||
|
{
|
||||||
|
locallabRef = ref;
|
||||||
|
|
||||||
|
mcih->pending++;
|
||||||
|
|
||||||
|
idle_register.add(
|
||||||
|
[this]() -> bool
|
||||||
|
{
|
||||||
|
if (mcih->destroyed) {
|
||||||
|
if (mcih->pending == 1) {
|
||||||
|
delete mcih;
|
||||||
|
} else {
|
||||||
|
--mcih->pending;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
mcih->clearPixmap();
|
||||||
|
mcih->myCurve->queue_draw();
|
||||||
|
|
||||||
|
--mcih->pending;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
void MyFlatCurve::setType (FlatCurveType t)
|
void MyFlatCurve::setType (FlatCurveType t)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -76,6 +76,8 @@ public:
|
|||||||
|
|
||||||
class MyFlatCurve : public MyCurve
|
class MyFlatCurve : public MyCurve
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
IdleRegister idle_register;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
FlatCurveDescr curve;
|
FlatCurveDescr curve;
|
||||||
@ -103,6 +105,7 @@ protected:
|
|||||||
enum EditedHandle editedHandle;
|
enum EditedHandle editedHandle;
|
||||||
bool draggingElement;
|
bool draggingElement;
|
||||||
enum MouseOverAreas area;
|
enum MouseOverAreas area;
|
||||||
|
double locallabRef; // Locallab reference value to display in the background
|
||||||
|
|
||||||
void draw ();
|
void draw ();
|
||||||
void movePoint(bool moveX, bool moveY, bool pipetteDrag = false);
|
void movePoint(bool moveX, bool moveY, bool pipetteDrag = false);
|
||||||
@ -137,6 +140,7 @@ public:
|
|||||||
|
|
||||||
void setPos(double pos, int chanIdx) override;
|
void setPos(double pos, int chanIdx) override;
|
||||||
void stopNumericalAdjustment() override;
|
void stopNumericalAdjustment() override;
|
||||||
|
void updateLocallabBackground(double ref);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user