1 /** -*- C++ -*- 2 * 3 * This file is part of RawTherapee. 4 * 5 * Copyright (c) 2018 Alberto Griggio <alberto.griggio@gmail.com> 6 * 7 * RawTherapee is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * RawTherapee is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with RawTherapee. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #pragma once 21 22 #include <gtkmm.h> 23 #include "adjuster.h" 24 #include "toolpanel.h" 25 #include "labmaskspanel.h" 26 #include "colorwheel.h" 27 #include "colorprovider.h" 28 #include "thresholdadjuster.h" 29 30 class ColorCorrection: 31 public ToolParamBlock, 32 public AdjusterListener, 33 public FoldableToolPanel, 34 public PParamsChangeListener, 35 public ThresholdAdjusterListener, 36 public ColorProvider 37 { 38 public: 39 40 ColorCorrection(); 41 42 void read(const rtengine::procparams::ProcParams *pp) override; 43 void write(rtengine::procparams::ProcParams *pp) override; 44 void setDefaults(const rtengine::procparams::ProcParams *defParams) override; 45 46 void adjusterChanged(Adjuster *a, double newval) override; 47 void enabledChanged() override; adjusterAutoToggled(Adjuster * a,bool newval)48 void adjusterAutoToggled(Adjuster *a, bool newval) override {} 49 50 void setEditProvider(EditDataProvider *provider) override; 51 void setListener(ToolPanelListener *tpl) override; 52 getPParamsChangeListener()53 PParamsChangeListener *getPParamsChangeListener() override { return this; } 54 void procParamsChanged( 55 const rtengine::procparams::ProcParams* params, 56 const rtengine::ProcEvent& ev, 57 const Glib::ustring& descr, 58 const ParamsEdited* paramsEdited = nullptr) override; clearParamChanges()59 void clearParamChanges() override {} 60 61 void updateGeometry(int fullWidth, int fullHeight); 62 void setAreaDrawListener(AreaDrawListener *l); 63 void setDeltaEColorProvider(DeltaEColorProvider *p); 64 65 void adjusterChanged(ThresholdAdjuster *a, double newBottom, double newTop) override; adjusterChanged(ThresholdAdjuster * a,double newBottomLeft,double newTopLeft,double newBottomRight,double newTopRight)66 void adjusterChanged(ThresholdAdjuster *a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) override {} adjusterChanged(ThresholdAdjuster * a,int newBottom,int newTop)67 void adjusterChanged(ThresholdAdjuster *a, int newBottom, int newTop) override {} adjusterChanged(ThresholdAdjuster * a,int newBottomLeft,int newTopLeft,int newBottomRight,int newTopRight)68 void adjusterChanged(ThresholdAdjuster *a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) override {} adjusterChanged2(ThresholdAdjuster * a,int newBottomL,int newTopL,int newBottomR,int newTopR)69 void adjusterChanged2(ThresholdAdjuster *a, int newBottomL, int newTopL, int newBottomR, int newTopR) override {} 70 71 void colorForValue(double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller) override; 72 73 void toolReset(bool to_initial) override; 74 75 private: 76 void regionGet(int idx); 77 void regionShow(int idx); 78 void modeChanged(); 79 void syncSlidersToggled(); 80 void wheelChanged(); 81 void hslWheelChanged(int c); 82 83 rtengine::ProcEvent EvEnabled; 84 rtengine::ProcEvent EvColorWheel; 85 rtengine::ProcEvent EvInSaturation; 86 rtengine::ProcEvent EvOutSaturation; 87 rtengine::ProcEvent EvLightness; 88 rtengine::ProcEvent EvSlope; 89 rtengine::ProcEvent EvOffset; 90 rtengine::ProcEvent EvPower; 91 rtengine::ProcEvent EvPivot; 92 rtengine::ProcEvent EvMode; 93 rtengine::ProcEvent EvRgbLuminance; 94 95 rtengine::ProcEvent EvList; 96 rtengine::ProcEvent EvParametricMask; 97 rtengine::ProcEvent EvHueMask; 98 rtengine::ProcEvent EvChromaticityMask; 99 rtengine::ProcEvent EvLightnessMask; 100 rtengine::ProcEvent EvMaskBlur; 101 rtengine::ProcEvent EvShowMask; 102 rtengine::ProcEvent EvAreaMask; 103 rtengine::ProcEvent EvDeltaEMask; 104 rtengine::ProcEvent EvContrastThresholdMask; 105 rtengine::ProcEvent EvDrawnMask; 106 107 std::vector<rtengine::procparams::ColorCorrectionParams::Region> data; 108 109 friend class ColorCorrectionMasksContentProvider; 110 std::unique_ptr<LabMasksContentProvider> labMasksContentProvider; 111 LabMasksPanel *labMasks; 112 113 Gtk::VBox *box; 114 MyComboBoxText *mode; 115 116 Gtk::VBox *box_combined; 117 Gtk::VBox *box_rgb; 118 Gtk::VBox *box_hsl; 119 120 ColorWheel *wheel; 121 Adjuster *inSaturation; 122 Adjuster *outSaturation; 123 Adjuster *slope; 124 Adjuster *offset; 125 Adjuster *power; 126 Adjuster *pivot; 127 128 Adjuster *slope_rgb[3]; 129 Adjuster *offset_rgb[3]; 130 Adjuster *power_rgb[3]; 131 Adjuster *pivot_rgb[3]; 132 Gtk::CheckButton *rgbluminance; 133 134 Gtk::CheckButton *sync_rgb_sliders; 135 136 Adjuster *lfactor[3]; 137 HueSatColorWheel *huesat[3]; 138 139 rtengine::procparams::ColorCorrectionParams initial_params; 140 }; 141 142