diff --git a/rtdata/dcpprofiles/FUJIFILM X-T10.dcp b/rtdata/dcpprofiles/FUJIFILM X-T10.dcp new file mode 100644 index 000000000..9b360b244 Binary files /dev/null and b/rtdata/dcpprofiles/FUJIFILM X-T10.dcp differ diff --git a/rtdata/dcpprofiles/Fujifilm X-T10.dcp b/rtdata/dcpprofiles/Fujifilm X-T10.dcp deleted file mode 100644 index 9794624a5..000000000 Binary files a/rtdata/dcpprofiles/Fujifilm X-T10.dcp and /dev/null differ diff --git a/rtdata/dcpprofiles/Panasonic DC-G9.dcp b/rtdata/dcpprofiles/Panasonic DC-G9.dcp new file mode 100644 index 000000000..64f1203a9 Binary files /dev/null and b/rtdata/dcpprofiles/Panasonic DC-G9.dcp differ diff --git a/rtdata/dcpprofiles/Panasonic DMC-FZ1000.dcp b/rtdata/dcpprofiles/Panasonic DMC-FZ1000.dcp new file mode 100644 index 000000000..e99ebf0d9 Binary files /dev/null and b/rtdata/dcpprofiles/Panasonic DMC-FZ1000.dcp differ diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index ef518868d..dd0655242 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -70,6 +70,7 @@ #69 25.07.2018 Erweiterung (TooWaBoo) RT 5.4 #70 25.07.2018 Korrekturen (TooWaBoo) RT 5.4 #71 28.09.2018 Korrekturen (TooWaBoo) RT 5.5 +#72 05.10.2018 Korrekturen (TooWaBoo) RT 5.5 ABOUT_TAB_BUILD;Version ABOUT_TAB_CREDITS;Danksagungen @@ -181,7 +182,7 @@ FILEBROWSER_APPLYPROFILE;Profil anwenden FILEBROWSER_APPLYPROFILE_PARTIAL;Profil selektiv anwenden FILEBROWSER_AUTODARKFRAME;Automatisches Dunkelbild FILEBROWSER_AUTOFLATFIELD;Automatisches Weißbild -FILEBROWSER_BROWSEPATHBUTTONHINT;Ausgewählter Pfad öffnen +FILEBROWSER_BROWSEPATHBUTTONHINT;Ausgewählten Pfad öffnen. FILEBROWSER_BROWSEPATHHINT;Einen Pfad eingeben:\nTaste:\nStrg + o Setzt den Cursor in das Eingabefeld\nEnter Öffnet den Pfad\nEsc Änderungen verwerfen\nUmschalt + Esc Eingabefeld verlassen\n\nSchnellnavigation:\nTaste:\n~ “Home“-Verzeichnis des Benutzers\n! Bilder-Verzeichnis des Benutzers FILEBROWSER_CACHE;Festplatten-Cache FILEBROWSER_CACHECLEARFROMFULL;Aus dem Festplatten-Cache entfernen (vollständig) @@ -236,7 +237,7 @@ FILEBROWSER_POPUPSELECTALL;Alle auswählen FILEBROWSER_POPUPTRASH;In den Papierkorb verschieben FILEBROWSER_POPUPUNRANK;Bewertung entfernen FILEBROWSER_POPUPUNTRASH;Aus dem Papierkorb wiederherstellen -FILEBROWSER_QUERYBUTTONHINT;Suchfilter zurücksetzen +FILEBROWSER_QUERYBUTTONHINT;Suchfilter zurücksetzen. FILEBROWSER_QUERYHINT;Nur Dateien anzeigen, deren Namen die angegebene Zeichenkette beinhalten.\n\nTaste:\nStrg + f Setzt den Cursor in das Suchfeld\nEnter Suche starten\nEsc Suchfeld löschen\nUmschalt + Esc Suchfeldfeld verlassen FILEBROWSER_QUERYLABEL; Suche: FILEBROWSER_RANK1_TOOLTIP;Bewertung 1 *\nTaste: Umschalt + 1 @@ -248,31 +249,31 @@ FILEBROWSER_RENAMEDLGLABEL;Datei umbenennen FILEBROWSER_RESETDEFAULTPROFILE;Profil auf Vorgabe zurücksetzen FILEBROWSER_SELECTDARKFRAME;Dunkelbild wählen... FILEBROWSER_SELECTFLATFIELD;Weißbild wählen... -FILEBROWSER_SHOWCOLORLABEL1HINT;Nur rot markierte Bilder anzeigen\nTaste: Alt + 1 -FILEBROWSER_SHOWCOLORLABEL2HINT;Nur gelb markierte Bilder anzeigen\nTaste: Alt + 2 -FILEBROWSER_SHOWCOLORLABEL3HINT;Nur grün markierte Bilder anzeigen\nTaste: Alt + 3 -FILEBROWSER_SHOWCOLORLABEL4HINT;Nur blau markierte Bilder anzeigen\nTaste: Alt + 4 -FILEBROWSER_SHOWCOLORLABEL5HINT;Nur violett markierte Bilder anzeigen\nTaste: Alt + 5 -FILEBROWSER_SHOWDIRHINT;Alle Filter zurücksetzen\nTaste: d -FILEBROWSER_SHOWEDITEDHINT;Nur bearbeitete Bilder anzeigen\nTaste: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Nur unbearbeitete Bilder anzeigen\nTaste: 6 +FILEBROWSER_SHOWCOLORLABEL1HINT;Nur rot markierte Bilder anzeigen.\nTaste: Alt + 1 +FILEBROWSER_SHOWCOLORLABEL2HINT;Nur gelb markierte Bilder anzeigen.\nTaste: Alt + 2 +FILEBROWSER_SHOWCOLORLABEL3HINT;Nur grün markierte Bilder anzeigen.\nTaste: Alt + 3 +FILEBROWSER_SHOWCOLORLABEL4HINT;Nur blau markierte Bilder anzeigen.\nTaste: Alt + 4 +FILEBROWSER_SHOWCOLORLABEL5HINT;Nur violett markierte Bilder anzeigen.\nTaste: Alt + 5 +FILEBROWSER_SHOWDIRHINT;Alle Filter zurücksetzen.\nTaste: d +FILEBROWSER_SHOWEDITEDHINT;Nur bearbeitete Bilder anzeigen.\nTaste: 7 +FILEBROWSER_SHOWEDITEDNOTHINT;Nur unbearbeitete Bilder anzeigen.\nTaste: 6 FILEBROWSER_SHOWEXIFINFO;Bildinformationen ein-/ausblenden.\n\nIm Multi-Reitermodus:\nTaste: i\nIm Ein-Reitermodus:\nTaste: Alt + i -FILEBROWSER_SHOWNOTTRASHHINT;Nur nicht gelöschte Bilder anzeigen +FILEBROWSER_SHOWNOTTRASHHINT;Nur nicht gelöschte Bilder anzeigen. FILEBROWSER_SHOWORIGINALHINT;Zeige nur das Originalbild.\n\nWenn mehrere Bilder mit dem gleichen Dateinamen und unterschiedlichen Dateitypen existieren, ist das Originalbild das Bild, welches in der Liste "Dateitypen anzeigen" unter Einstellungen > Dateiverwaltung als erstes gefunden wird. -FILEBROWSER_SHOWRANK1HINT;Nur mit 1 Stern bewertete Bilder anzeigen\nTaste: 1 -FILEBROWSER_SHOWRANK2HINT;Nur mit 2 Sternen bewertete Bilder anzeigen\nTaste: 2 -FILEBROWSER_SHOWRANK3HINT;Nur mit 3 Sternen bewertete Bilder anzeigen\nTaste: 3 -FILEBROWSER_SHOWRANK4HINT;Nur mit 4 Sternen bewertete Bilder anzeigen\nTaste: 4 -FILEBROWSER_SHOWRANK5HINT;Nur mit 5 Sternen bewertete Bilder anzeigen\nTaste: 5 -FILEBROWSER_SHOWRECENTLYSAVEDHINT;Nur gespeicherte Bilder anzeigen\nTaste: Alt + 7 -FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Nur nicht gespeicherte Bilder anzeigen\nTaste: Alt + 6 -FILEBROWSER_SHOWTRASHHINT;Inhalt des Papierkorbs anzeigen\nTaste: Strg + t -FILEBROWSER_SHOWUNCOLORHINT;Nur unmarkierte Bilder anzeigen\nTaste: Alt + 0 -FILEBROWSER_SHOWUNRANKHINT;Nur unbewertete Bilder anzeigen\nTaste: 0 +FILEBROWSER_SHOWRANK1HINT;Nur mit 1 Stern bewertete Bilder anzeigen.\nTaste: 1 +FILEBROWSER_SHOWRANK2HINT;Nur mit 2 Sternen bewertete Bilder anzeigen.\nTaste: 2 +FILEBROWSER_SHOWRANK3HINT;Nur mit 3 Sternen bewertete Bilder anzeigen.\nTaste: 3 +FILEBROWSER_SHOWRANK4HINT;Nur mit 4 Sternen bewertete Bilder anzeigen.\nTaste: 4 +FILEBROWSER_SHOWRANK5HINT;Nur mit 5 Sternen bewertete Bilder anzeigen.\nTaste: 5 +FILEBROWSER_SHOWRECENTLYSAVEDHINT;Nur gespeicherte Bilder anzeigen.\nTaste: Alt + 7 +FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Nur nicht gespeicherte Bilder anzeigen.\nTaste: Alt + 6 +FILEBROWSER_SHOWTRASHHINT;Inhalt des Papierkorbs anzeigen.\nTaste: Strg + t +FILEBROWSER_SHOWUNCOLORHINT;Nur unmarkierte Bilder anzeigen.\nTaste: Alt + 0 +FILEBROWSER_SHOWUNRANKHINT;Nur unbewertete Bilder anzeigen.\nTaste: 0 FILEBROWSER_THUMBSIZE;Miniaturbildgröße -FILEBROWSER_UNRANK_TOOLTIP;Bewertung entfernen\nTaste: Umschalt + 0 -FILEBROWSER_ZOOMINHINT;Miniaturbilder vergrößern\n\nIm Multi-Reitermodus:\nTaste: +\nIm Ein-Reitermodus:\nTaste: Alt + -FILEBROWSER_ZOOMOUTHINT;Miniaturbilder verkleinern\n\nIm Multi-Reitermodus:\nTaste: -\nIm Ein-Reitermodus:\nTaste: Alt - +FILEBROWSER_UNRANK_TOOLTIP;Bewertung entfernen.\nTaste: Umschalt + 0 +FILEBROWSER_ZOOMINHINT;Miniaturbilder vergrößern.\n\nIm Multi-Reitermodus:\nTaste: +\nIm Ein-Reitermodus:\nTaste: Alt + +FILEBROWSER_ZOOMOUTHINT;Miniaturbilder verkleinern.\n\nIm Multi-Reitermodus:\nTaste: -\nIm Ein-Reitermodus:\nTaste: Alt - FILECHOOSER_FILTER_ANY;Alle Dateien FILECHOOSER_FILTER_COLPROF;Farbprofile FILECHOOSER_FILTER_CURVE;Kurvendateien @@ -917,14 +918,14 @@ LENSPROFILE_CORRECTION_LCPFILE;LCP-Datei LENSPROFILE_CORRECTION_MANUAL;Benutzerdefiniert (Lensfun) LENSPROFILE_LENS_WARNING;Warnung: Der Cropfaktor des Profils entspricht nicht dem des Objektivs.\nDies kann zu einem fehlerhaften Ergebnis führen. MAIN_BUTTON_FULLSCREEN;Vollbild\nTaste: F11 -MAIN_BUTTON_ICCPROFCREATOR;ICC-Profil erstellen +MAIN_BUTTON_ICCPROFCREATOR;ICC-Profil erstellen. MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigiert zum nächsten Miniaturbild in der\nDateiverwaltung oder Filmstreifen bezogen\nauf das ausgewählte Miniaturbild.\nTaste: F4\n\nNavigiert zum nächsten Miniaturbild in der\nDateiverwaltung oder Filmstreifen bezogen\nauf auf das im Editor geöffnete Bild.\nTaste: Umschalt + F4 MAIN_BUTTON_NAVPREV_TOOLTIP;Navigiert zum vorherigen Miniaturbild in der\nDateiverwaltung oder Filmstreifen bezogen\nauf das ausgewählte Miniaturbild.\nTaste: F3\n\nNavigiert zum vorherigen Miniaturbild in der\nDateiverwaltung oder Filmstreifen bezogen\nauf auf das im Editor geöffnete Bild.\nTaste: Umschalt + F3 MAIN_BUTTON_NAVSYNC_TOOLTIP;Selektiert das Miniaturbild des aktuell geöffneten\nBildes in der Dateiverwaltung und des Filmstreifens.\nEs werden alle aktiven Filter gelöscht.\nTaste: x\n\nWie oben, jedoch ohne Löschung aktiver Filter. Das\nMiniaturbild des geöffneten Bildes wird nicht angezeigt,\nwenn es herausgefiltert wurde.\nTaste: y MAIN_BUTTON_PREFERENCES;Einstellungen MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Bild zur Warteschlange hinzufügen.\nTaste: Strg + b MAIN_BUTTON_SAVE_TOOLTIP;Bild speichern.\nTaste: Strg + s\nProfil (.pp3) speichern.\nTaste: Strg + Umschalt + s -MAIN_BUTTON_SENDTOEDITOR;Bild im externen Editor öffnen +MAIN_BUTTON_SENDTOEDITOR;Bild im externen Editor öffnen. MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Bild im externen Editor öffnen.\nTaste: Strg + e MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Alle seitlichen Bedienfelder ein-/ausblenden.\nTaste: m MAIN_BUTTON_UNFULLSCREEN;Vollbild beenden.\nTaste: F11 @@ -939,8 +940,8 @@ MAIN_FRAME_PLACES_ADD;Hinzufügen MAIN_FRAME_PLACES_DEL;Entfernen MAIN_FRAME_RECENT;Verzeichnishistorie MAIN_MSG_ALREADYEXISTS;Diese Datei existiert bereits. -MAIN_MSG_CANNOTLOAD;Bild kann nicht geladen werden -MAIN_MSG_CANNOTSAVE;Fehler beim Speichern +MAIN_MSG_CANNOTLOAD;Bild kann nicht geladen werden. +MAIN_MSG_CANNOTSAVE;Fehler beim Speichern. MAIN_MSG_CANNOTSTARTEDITOR;Der externe Editor kann nicht gestartet werden. MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;Setzen Sie bitte den richtigen Pfad in den Einstellungen. MAIN_MSG_EMPTYFILENAME;Dateiname fehlt! @@ -1182,7 +1183,7 @@ PREFERENCES_GREYSC18;Yb = 18 CIE L#49 PREFERENCES_GREYSCA;Automatisch PREFERENCES_HISTOGRAMPOSITIONLEFT;Histogramm linksseitig PREFERENCES_HISTOGRAMWORKING;Das Arbeitsprofil zur Darstellung des Haupthistogramms verwenden -PREFERENCES_HISTOGRAM_TOOLTIP;Wenn aktiviert wird das Arbeitsprofil für die Darstellung\ndes Haupthistogramms verwendet, andernfalls das des\ngammakorrigierten Ausgangsprofil. +PREFERENCES_HISTOGRAM_TOOLTIP;Wenn aktiviert, wird das Arbeitsprofil für die Darstellung\ndes Haupthistogramms verwendet, andernfalls das des\ngammakorrigierten Ausgangsprofils. PREFERENCES_HLTHRESHOLD;Lichter - Schwelle PREFERENCES_ICCDIR;ICC-Profile-Verzeichnis PREFERENCES_IMG_RELOAD_NEEDED;Änderungen werden nur auf neu geöffnete Bilder angewendet @@ -1214,7 +1215,7 @@ PREFERENCES_MULTITABDUALMON;Multi-Reitermodus (auf zweitem Monitor, wenn verfüg PREFERENCES_NAVGUIDEBRUSH;Farbe der Navigationshilfe PREFERENCES_NAVIGATIONFRAME;Navigation PREFERENCES_OUTDIR;Ausgabeverzeichnis -PREFERENCES_OUTDIRFOLDER;In dieses Verzeichnis speichern. +PREFERENCES_OUTDIRFOLDER;In dieses Verzeichnis speichern PREFERENCES_OUTDIRFOLDERHINT;Alle Dateien im ausgewählten Verzeichnis speichern. PREFERENCES_OUTDIRTEMPLATE;Dynamisches Verzeichnis verwenden PREFERENCES_OUTDIRTEMPLATEHINT;Die folgenden Variablen können verwendet werden:\n%f, %d1, %d2, ..., %p1, %p2, ..., %r, %s1, %s2, ...\n\nDiese Variablen beinhalten bestimmte Teile des Verzeichnispfades, in welchem sich das Bild befindet, oder Attribute des Bildes.\n\nWenn zum Beispiel /home/tom/photos/2010-10-31/dsc0042.nef geöffnet wurde, dann haben die Variablen den folgenden Inhalt:\n%d4 = home\n%d3 = tom\n%d2 = photos\n%d1 = 2010-10-31\n%f = dsc0042\n%p1 = /home/tom/photos/2010-10-31\n%p2 = /home/tom/photos\n%p3 = /home/tom\n%p4 = /home\n\nWenn Sie die Ausgabedatei in dasselbe Verzeichnis wie das Originalbild speichern wollen, dann wählen Sie:\n%p1/%f\n\nWenn Sie die Ausgabedatei in ein Unterverzeichnis mit dem Namen "converted" schreiben wollen, dann wählen Sie:\n%p1/converted/%f\n\nWenn Sie die Ausgabedatei im Verzeichnispfad "/home/tom/photos/converted" speichern wollen, dort jedoch in einem mit dem Namen des Ursprungsverzeichnisses betitelten Unterverzeichnis, dann wählen Sie:\n%p2/converted/%d1/%f\n\nDie Variable %r enthält die Bewertung des Bildes. @@ -1251,10 +1252,10 @@ PREFERENCES_PSPATH;Adobe Photoshop Installationsverzeichnis PREFERENCES_REMEMBERZOOMPAN;Zoom und Bildposition merken PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Öffnen eines neuen Bildes mit den Zoom- und Positionswerten\ndes vorangegangenen Bildes.\n\nFunktioniert nur unter folgenden Bedingungen:\nEin-Reitermodus aktiv\n“Demosaikmethode für 100%-Ansicht“ muss auf “Wie im Bild-\nverarbeitungsprofil vorgegeben“ eingestellt sein. PREFERENCES_SAVE_TP_OPEN_NOW;Werkzeugstatus jetzt speichern -PREFERENCES_SELECTFONT;Schriftart -PREFERENCES_SELECTFONT_COLPICKER;Schriftart für die Farbwähler +PREFERENCES_SELECTFONT;Schriftart: +PREFERENCES_SELECTFONT_COLPICKER;Schriftart Farbwähler PREFERENCES_SELECTLANG;Sprache -PREFERENCES_SELECTTHEME;Oberflächendesign (erfordert Neustart) +PREFERENCES_SELECTTHEME;Oberflächendesign PREFERENCES_SERIALIZE_TIFF_READ;TIFF-Bilder PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialisiertes Lesen von TIFF-Bildern verwenden PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;Beim Arbeiten mit Ordnern voll unkomprimierter TIFF-Bilder, kann diese Einstellung das Generieren von Miniaturbildern deutlich beschleunigen. @@ -1278,7 +1279,7 @@ PREFERENCES_TAB_GENERAL;Allgemein PREFERENCES_TAB_IMPROC;Bildbearbeitung PREFERENCES_TAB_PERFORMANCE;Performance PREFERENCES_TAB_SOUND;Klänge -PREFERENCES_THEME;Oberflächendesign +PREFERENCES_THEME;Oberflächendesign (erfordert Neustart) PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Eingebundenes JPEG PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Bildanzeige PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutrales RAW-Bild @@ -1541,7 +1542,7 @@ TP_COLORTONING_METHOD;Methode TP_COLORTONING_METHOD_TOOLTIP;L*a*b*-Überlagerung, RGB-Regler und RGB-Kurven\nverwenden eine interpolierte Farbüberlagerung.\n\nFarbausgleich (Schatten/Mitten/Lichter) und Sättigung\n(2-Farben) verwenden direkte Farben. TP_COLORTONING_MIDTONES;Mitten TP_COLORTONING_NEUTRAL;Regler zurücksetzen -TP_COLORTONING_NEUTRAL_TIP;Alle Werte auf Standard zurücksetzen\n(Schatten, Mitten, Lichter) +TP_COLORTONING_NEUTRAL_TIP;Alle Werte auf Standard zurücksetzen.\n(Schatten, Mitten, Lichter) TP_COLORTONING_OPACITY;Deckkraft TP_COLORTONING_RGBCURVES;RGB-Kurven TP_COLORTONING_RGBSLIDERS;RGB-Regler @@ -1573,7 +1574,7 @@ TP_CROP_GUIDETYPE;Hilfslinien: TP_CROP_H;Höhe TP_CROP_LABEL;Ausschnitt TP_CROP_PPI;PPI= -TP_CROP_SELECTCROP;Ausschnitt wählen. +TP_CROP_SELECTCROP;Ausschnitt wählen TP_CROP_W;Breite TP_CROP_X;x TP_CROP_Y;y @@ -2073,7 +2074,7 @@ TP_RGBCURVES_LUMAMODE_TOOLTIP;Der Helligkeitsmodus ändert die Helligkeit TP_RGBCURVES_RED;R TP_ROTATE_DEGREE;Winkel TP_ROTATE_LABEL;Drehen -TP_ROTATE_SELECTLINE;Leitlinie wählen. +TP_ROTATE_SELECTLINE;Leitlinie wählen TP_SAVEDIALOG_OK_TIP;Taste: Strg + Enter TP_SHADOWSHLIGHTS_HIGHLIGHTS;Lichter TP_SHADOWSHLIGHTS_HLTONALW;Tonwertbreite Lichter @@ -2350,10 +2351,9 @@ TP_WBALANCE_WATER1;Unterwasser 1 TP_WBALANCE_WATER2;Unterwasser 2 TP_WBALANCE_WATER_HEADER;Unterwasser ZOOMPANEL_100;(100%) -ZOOMPANEL_NEWCROPWINDOW;Neues Detailfenster öffnen +ZOOMPANEL_NEWCROPWINDOW;Neues Detailfenster öffnen. ZOOMPANEL_ZOOM100;Zoom 100%\nTaste: z -ZOOMPANEL_ZOOMFITCROPSCREEN;Ausschnitt an Bildschirm anpassen\nTaste: f -ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen\nTaste: Alt + f +ZOOMPANEL_ZOOMFITCROPSCREEN;Ausschnitt an Bildschirm anpassen.\nTaste: f +ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen.\nTaste: Alt + f ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: + ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - - diff --git a/rtdata/languages/default b/rtdata/languages/default index 7d7e7de30..0b5256e35 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -865,6 +865,7 @@ HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift HISTORY_MSG_RAW_BORDER;Raw border HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength diff --git a/rtdata/themes/RawTherapee-GTK3-20_.css b/rtdata/themes/RawTherapee-GTK3-20_.css index 1224e3ce9..84ea1c3a3 100644 --- a/rtdata/themes/RawTherapee-GTK3-20_.css +++ b/rtdata/themes/RawTherapee-GTK3-20_.css @@ -36,6 +36,18 @@ scrollbar:not(.overlay-indicator):hover { min-width: 1px; } +/* Toolbar stuck workaround */ +.scrollableToolbar > scrollbar:not(.dummy), +.scrollableToolbar > scrollbar:not(.dummy) > contents:not(.dummy), +.scrollableToolbar > scrollbar:not(.dummy) > contents:not(.dummy) > trough:not(.dummy), +.scrollableToolbar > scrollbar:not(.dummy) > contents:not(.dummy) > trough:not(.dummy) > slider:not(.dummy) { + padding: 0; + margin: 0; + min-height: 0; + min-width: 0; + border: none; +} + .view:selected:not(check):not(radio) { color: #262626; background-color: #AAAAAA diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css index 3f2165592..aa753727d 100644 --- a/rtdata/themes/TooWaBlue-GTK3-20_.css +++ b/rtdata/themes/TooWaBlue-GTK3-20_.css @@ -2,7 +2,7 @@ This file is part of RawTherapee. Copyright (c) 2016-2018 TooWaBoo - Version 2.80 + Version 2.82 RawTherapee is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -80,7 +80,6 @@ min-height: 0; padding: 0; margin: 0; - opacity: 1; border: none; box-shadow: none; } @@ -145,6 +144,10 @@ arrow { min-width: 1.333333333333333333em; min-height: 1.333333333333333333em; } +/* combobox cellview to high for font size 8@96dpi*/ +cellview { + margin: -1px 0; +} text { background-color: @bg-dark-grey; @@ -290,7 +293,7 @@ textview:selected, treeview:selected { } #Snapshots > border { - min-height: calc(6.5em + 36px); + min-height: calc(6em + 36px); } #Snapshots > label { margin-bottom: -4px; @@ -315,6 +318,7 @@ textview:selected, treeview:selected { border: 0.083333333333333333em solid @bg-dark-grey; border-radius: 0; box-shadow: none; + min-height: 2em; } #Snapshots button:hover, @@ -326,8 +330,9 @@ background-color: @bg-list-hover; background-color: shade(@bg-list-hover, 1.15); } +fontchooser scrolledwindow, #PlacesPaned scrolledwindow, -#HistoryPanel > border, +#HistoryPanel scrolledwindow, #Snapshots scrolledwindow { background-color: @bg-dark-grey; border: 0.083333333333333333em solid @bg-dark-grey; @@ -686,7 +691,18 @@ scrollbar.hovering slider:hover { scrollbar:not(.overlay-indicator):hover { min-width: 1px; } -/**/ + +/* Toolbar stuck workaround */ +.scrollableToolbar > scrollbar:not(.dummy), +.scrollableToolbar > scrollbar:not(.dummy) > contents:not(.dummy), +.scrollableToolbar > scrollbar:not(.dummy) > contents:not(.dummy) > trough:not(.dummy), +.scrollableToolbar > scrollbar:not(.dummy) > contents:not(.dummy) > trough:not(.dummy) > slider:not(.dummy) { + padding: 0; + margin: 0; + min-height: 0; + min-width: 0; + border: none; +} /*** end ***************************************************************************************/ @@ -1477,6 +1493,10 @@ button.text-button label { margin: 0 0.5em;/* x */ } +button image + label { + margin-left: 0.25em; +} + #PrefNotebook > stack > :nth-child(5) combobox { /* margin: 0.166666666666666666em 0; */ margin: 2px 0; @@ -1583,12 +1603,9 @@ button.MiddleH { margin-left: -2px; } -#PlacesPaned button.Left, -#PlacesPaned button.Right { - margin-top: 3px; -} #PlacesPaned combobox { - margin-bottom: -3px; + margin-bottom: -8px; + padding-bottom: 0.416666666666666666em; } /**/ @@ -1699,8 +1716,16 @@ buttonbox:not(.dialog-action-area) button{ button.color { min-height: 1.166666666666666666em; + min-width: 2.75em; padding: 0.25em; } +button.color colorswatch, +colorchooser colorswatch { + border: 1px solid @bg-button-border; +} +colorchooser colorswatch#add-color-button:first-child { + border-radius: 5.5px 0 0 5.5px; +} /* Save, Cancel, OK ... buttons */ .dialog-action-area button { @@ -2132,21 +2157,10 @@ headerbar .title:backdrop { color: alpha(@winTitle,.60); } /*** end ***************************************************************************************/ -/* Toolbar stuck workaround */ - -/* .scrollableToolbar scrollbar:not(.overlay-indicator) slider:not(.dummy) { - padding: 0; - margin: 0; - min-height: 0; - min-width: 0; - border: none; -} */ - /* .view:not(check):not(radio), image:not(check):not(radio), spinbutton button, cellview { - -gtk-icon-transform: scale(1.5); -} -* {-gtk-dpi: 144;} */ - + -gtk-icon-transform: scale(calc(( 96 / 96 ) * ( 8 / 9 ))); +} */ +/* * {-gtk-dpi: 144;} */ diff --git a/rtdata/themes/TooWaGrey - Average Surround-GTK3-20_.css b/rtdata/themes/TooWaGrey - Average Surround-GTK3-20_.css index 98ec912b1..29ebd6c96 100644 --- a/rtdata/themes/TooWaGrey - Average Surround-GTK3-20_.css +++ b/rtdata/themes/TooWaGrey - Average Surround-GTK3-20_.css @@ -33,7 +33,7 @@ @define-color bg-image rgb(120,120,120); /*** Image area & File Browser background * Default: rgb(70,70,70) ***/ -@define-color accent-color2 rgb(49,132,220); /*** Scale, Progressbar, Scrollbar, Tabs * Default: rgb(35,99,166) ***/ +@define-color accent-color2 rgb(175,175,175); /*** Scale, Progressbar, Scrollbar, Tabs * Default: rgb(35,99,166) ***/ @define-color accent-color4 rgb(155,155,155); /*** Slider knob * Default: rgb(115,115,115) ***/ @define-color accent-color3 rgb(85,85,85); /*** Selected thumbnail background color * Default: rgb(35,99,166) ***/ @@ -43,10 +43,10 @@ @define-color bg-light-grey rgb(135,135,135); @define-color bg-grey rgb(120,120,120); -@define-color bg-dark-grey rgb(85,85,85); +@define-color bg-dark-grey rgb(90,90,90); -@define-color bg-button-hover rgba(0,0,0,.15); -@define-color bg-button-active rgba(0,0,0,.5); +@define-color bg-button-hover rgba(40,40,40,.16); +@define-color bg-button-active rgba(40,40,40,.4); @define-color winHeaderbar rgb(75,75,75); @define-color winTitle rgb(210,210,210); @@ -55,7 +55,7 @@ @define-color border-tooltip rgb(50,50,50); @define-color text-tooltip rgb(50,50,50); /***********************************************/ -@define-color text-color rgb(230,230,230); +@define-color text-color rgb(220,220,220); @define-color text-tbEntry rgb(245,245,245); @define-color border-color rgba(255,255,255,.35); @define-color bg-list-hover rgb(95,95,95); diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 91c66f751..f7318a267 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -128,6 +128,7 @@ set(RTENGINESOURCEFILES xtrans_demosaic.cc vng4_demosaic_RT.cc ipsoftlight.cc + guidedfilter.cc ) if(LENSFUN_HAS_LOAD_DIRECTORY) diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc index b25eb7229..7c6b8159d 100644 --- a/rtengine/FTblockDN.cc +++ b/rtengine/FTblockDN.cc @@ -805,8 +805,15 @@ BENCHFUN } #endif - float *LbloxArray[denoiseNestedLevels * numthreads] = {}; - float *fLbloxArray[denoiseNestedLevels * numthreads] = {}; + const std::size_t blox_array_size = denoiseNestedLevels * numthreads; + + float *LbloxArray[blox_array_size]; + float *fLbloxArray[blox_array_size]; + + for (std::size_t i = 0; i < blox_array_size; ++i) { + LbloxArray[i] = nullptr; + fLbloxArray[i] = nullptr; + } if (numtiles > 1 && denoiseLuminance) { for (int i = 0; i < denoiseNestedLevels * numthreads; ++i) { diff --git a/rtengine/LUT.h b/rtengine/LUT.h index 15ae988e3..d2f758689 100644 --- a/rtengine/LUT.h +++ b/rtengine/LUT.h @@ -89,8 +89,7 @@ using LUTd = LUT; using LUTuc = LUT; template -class LUT : - public rtengine::NonCopyable +class LUT { protected: // list of variables ordered to improve cache speed @@ -198,6 +197,8 @@ public: } } + explicit LUT(const LUT&) = delete; + void setClip(int flags) { clip = flags; @@ -225,7 +226,7 @@ public: return size > 0 ? upperBound : 0; } - LUT & operator=(LUT &rhs) + LUT & operator=(const LUT& rhs) { if (this != &rhs) { if (rhs.size > this->size) { @@ -257,7 +258,7 @@ public: // handy to sum up per thread histograms. #pragma omp simd speeds up the loop by about factor 3 for LUTu (uint32_t). template::value>::type> - LUT & operator+=(LUT &rhs) + LUT & operator+=(const LUT& rhs) { if (rhs.size == this->size) { #ifdef _OPENMP diff --git a/rtengine/array2D.h b/rtengine/array2D.h index 25d644c85..48a789bf8 100644 --- a/rtengine/array2D.h +++ b/rtengine/array2D.h @@ -267,11 +267,11 @@ public: ar_realloc(w, h); memcpy(data, copy, w * h * sizeof(T)); } - int width() + int width() const { return x; } - int height() + int height() const { return y; } diff --git a/rtengine/boxblur.h b/rtengine/boxblur.h index 805575b77..71452ceae 100644 --- a/rtengine/boxblur.h +++ b/rtengine/boxblur.h @@ -35,6 +35,8 @@ namespace rtengine template void boxblur (T** src, A** dst, int radx, int rady, int W, int H) { //box blur image; box range = (radx,rady) + assert(2*radx+1 < W); + assert(2*rady+1 < H); AlignedBuffer* buffer = new AlignedBuffer (W * H); float* temp = buffer->data; diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index a22603921..856002233 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -148,10 +148,10 @@ void Crop::update(int todo) // give possibility to the listener to modify crop window (as the full image dimensions are already known at this point) int wx, wy, ww, wh, ws; - bool overrideWindow = false; + const bool overrideWindow = cropImageListener; - if (cropImageListener) { - overrideWindow = cropImageListener->getWindow(wx, wy, ww, wh, ws); + if (overrideWindow) { + cropImageListener->getWindow(wx, wy, ww, wh, ws); } // re-allocate sub-images and arrays if their dimensions changed diff --git a/rtengine/ex1simple.cc b/rtengine/ex1simple.cc index 921ee6e44..ddaa89177 100644 --- a/rtengine/ex1simple.cc +++ b/rtengine/ex1simple.cc @@ -21,11 +21,11 @@ //#include #include -class PListener : public rtengine::ProgressListener +class PListener : + public rtengine::ProgressListener { - public: - void setProgressStr (Glib::ustring str) + void setProgressStr(const Glib::ustring& str) { std::cout << str << std::endl; } @@ -33,11 +33,16 @@ public: { std::cout << p << std::endl; } + void setProgressState(bool inProcessing) + { + } + void error(const Glib::ustring& descr) + { + } }; int main (int argc, char* argv[]) { - if (argc < 4) { std::cout << "Usage: rtcmd " << std::endl; exit(1); diff --git a/rtengine/guidedfilter.cc b/rtengine/guidedfilter.cc new file mode 100644 index 000000000..f6b702a73 --- /dev/null +++ b/rtengine/guidedfilter.cc @@ -0,0 +1,195 @@ +/* -*- C++ -*- + * + * This file is part of RawTherapee. + * + * Copyright (c) 2018 Alberto Griggio + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + */ + +/** + * This is a Fast Guided Filter implementation, derived directly from the + * pseudo-code of the paper: + * + * Fast Guided Filter + * by Kaiming He, Jian Sun + * + * available at https://arxiv.org/abs/1505.00996 + */ + +#include "guidedfilter.h" +#include "boxblur.h" +#include "rescale.h" +#include "imagefloat.h" + +namespace rtengine { + +#if 0 +# define DEBUG_DUMP(arr) \ + do { \ + Imagefloat im(arr.width(), arr.height()); \ + const char *out = "/tmp/" #arr ".tif"; \ + for (int y = 0; y < im.getHeight(); ++y) { \ + for (int x = 0; x < im.getWidth(); ++x) { \ + im.r(y, x) = im.g(y, x) = im.b(y, x) = arr[y][x] * 65535.f; \ + } \ + } \ + im.saveTIFF(out, 16); \ + } while (false) +#else +# define DEBUG_DUMP(arr) +#endif + + +void guidedFilter(const array2D &guide, const array2D &src, array2D &dst, int r, float epsilon, bool multithread, int subsampling) +{ + const int W = src.width(); + const int H = src.height(); + + enum Op { MUL, DIVEPSILON, ADD, SUB, ADDMUL, SUBMUL }; + + const auto apply = + [=](Op op, array2D &res, const array2D &a, const array2D &b, const array2D &c=array2D()) -> void + { + const int w = res.width(); + const int h = res.height(); + +#ifdef _OPENMP + #pragma omp parallel for if (multithread) +#endif + for (int y = 0; y < h; ++y) { + for (int x = 0; x < w; ++x) { + float r; + float aa = a[y][x]; + float bb = b[y][x]; + switch (op) { + case MUL: + r = aa * bb; + break; + case DIVEPSILON: + r = aa / (bb + epsilon); + break; + case ADD: + r = aa + bb; + break; + case SUB: + r = aa - bb; + break; + case ADDMUL: + r = aa * bb + c[y][x]; + break; + case SUBMUL: + r = c[y][x] - (aa * bb); + break; + default: + assert(false); + r = 0; + break; + } + res[y][x] = r; + } + } + }; + + // use the terminology of the paper (Algorithm 2) + const array2D &I = guide; + const array2D &p = src; + array2D &q = dst; + + const auto f_mean = + [](array2D &d, array2D &s, int rad) -> void + { + rad = LIM(rad, 0, (min(s.width(), s.height()) - 1) / 2 - 1); + boxblur(s, d, rad, rad, s.width(), s.height()); + }; + + const auto f_subsample = + [=](array2D &d, const array2D &s) -> void + { + rescaleBilinear(s, d, multithread); + }; + + const auto f_upsample = f_subsample; + + const int w = W / subsampling; + const int h = H / subsampling; + + array2D I1(w, h); + array2D p1(w, h); + + f_subsample(I1, I); + f_subsample(p1, p); + + DEBUG_DUMP(I); + DEBUG_DUMP(p); + DEBUG_DUMP(I1); + DEBUG_DUMP(p1); + + float r1 = float(r) / subsampling; + + array2D meanI(w, h); + f_mean(meanI, I1, r1); + DEBUG_DUMP(meanI); + + array2D meanp(w, h); + f_mean(meanp, p1, r1); + DEBUG_DUMP(meanp); + + array2D &corrIp = p1; + apply(MUL, corrIp, I1, p1); + f_mean(corrIp, corrIp, r1); + DEBUG_DUMP(corrIp); + + array2D &corrI = I1; + apply(MUL, corrI, I1, I1); + f_mean(corrI, corrI, r1); + DEBUG_DUMP(corrI); + + array2D &varI = corrI; + apply(SUBMUL, varI, meanI, meanI, corrI); + DEBUG_DUMP(varI); + + array2D &covIp = corrIp; + apply(SUBMUL, covIp, meanI, meanp, corrIp); + DEBUG_DUMP(covIp); + + array2D &a = varI; + apply(DIVEPSILON, a, covIp, varI); + DEBUG_DUMP(a); + + array2D &b = covIp; + apply(SUBMUL, b, a, meanI, meanp); + DEBUG_DUMP(b); + + array2D &meana = a; + f_mean(meana, a, r1); + DEBUG_DUMP(meana); + + array2D &meanb = b; + f_mean(meanb, b, r1); + DEBUG_DUMP(meanb); + + array2D meanA(W, H); + f_upsample(meanA, meana); + DEBUG_DUMP(meanA); + + array2D &meanB = q; + f_upsample(meanB, meanb); + DEBUG_DUMP(meanB); + + apply(ADDMUL, q, meanA, I, meanB); + DEBUG_DUMP(q); +} + +} // namespace rtengine diff --git a/rtgui/mountselectionlistener.h b/rtengine/guidedfilter.h similarity index 69% rename from rtgui/mountselectionlistener.h rename to rtengine/guidedfilter.h index 73728dfd9..3f987f80e 100644 --- a/rtgui/mountselectionlistener.h +++ b/rtengine/guidedfilter.h @@ -1,7 +1,8 @@ -/* +/* -*- C++ -*- + * * This file is part of RawTherapee. * - * Copyright (c) 2004-2010 Gabor Horvath + * Copyright (c) 2018 Alberto Griggio * * RawTherapee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,16 +17,13 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ -#ifndef _MOUNTSELECTIONLISTENER_ -#define _MOUNTSELECTIONLISTENER_ -#include +#pragma once -class MountSelectionListener -{ +#include "array2D.h" -public: - virtual void mountSelectionChanged (Glib::ustring mountRoot) {} -}; +namespace rtengine { -#endif +void guidedFilter(const array2D &guide, const array2D &src, array2D &dst, int r, float epsilon, bool multithread, int subsampling=4); + +} // namespace rtengine diff --git a/rtengine/imageformat.h b/rtengine/imageformat.h index cd86d536d..22708daef 100644 --- a/rtengine/imageformat.h +++ b/rtengine/imageformat.h @@ -29,7 +29,6 @@ typedef enum IIO_Sample_Format { //IIOSF_SIGNED_INT , // Not yet supported IIOSF_UNSIGNED_CHAR = 1 << 0, IIOSF_UNSIGNED_SHORT = 1 << 1, - //IIOSF_HALF , // OpenEXR & NVidia's Half Float, not yet supported IIOSF_LOGLUV24 = 1 << 2, IIOSF_LOGLUV32 = 1 << 3, IIOSF_FLOAT16 = 1 << 4, diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index 08922e436..802365d74 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -704,7 +704,7 @@ int ImageIO::getTIFFSampleFormat (Glib::ustring fname, IIOSampleFormat &sFormat, sFormat = IIOSF_UNSIGNED_SHORT; return IMIO_SUCCESS; } - } else if (samplesperpixel == 3 && sampleformat == SAMPLEFORMAT_IEEEFP) { + } else if ((samplesperpixel == 3 || samplesperpixel == 4) && sampleformat == SAMPLEFORMAT_IEEEFP) { if (bitspersample==16) { sFormat = IIOSF_FLOAT16; return IMIO_SUCCESS; @@ -718,7 +718,7 @@ int ImageIO::getTIFFSampleFormat (Glib::ustring fname, IIOSampleFormat &sFormat, return IMIO_SUCCESS; } } - } else if (samplesperpixel == 3 && photometric == PHOTOMETRIC_LOGLUV) { + } else if ((samplesperpixel == 3 || samplesperpixel == 4) && photometric == PHOTOMETRIC_LOGLUV) { if (compression == COMPRESSION_SGILOG24) { sFormat = IIOSF_LOGLUV24; return IMIO_SUCCESS; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 8f40c6979..8e5d42a3c 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1022,7 +1022,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) // process crop, if needed for (size_t i = 0; i < crops.size(); i++) - if (crops[i]->hasListener() && (panningRelatedChange || (todo & M_MONITOR) || crops[i]->get_skip() == 1)) { + if (crops[i]->hasListener() && (panningRelatedChange || (todo & (M_MONITOR | M_RGBCURVE | M_LUMACURVE)) || crops[i]->get_skip() == 1)) { crops[i]->update(todo); // may call ourselves } diff --git a/rtengine/ipshadowshighlights.cc b/rtengine/ipshadowshighlights.cc index 4d5cc465a..ff56c84ac 100644 --- a/rtengine/ipshadowshighlights.cc +++ b/rtengine/ipshadowshighlights.cc @@ -22,6 +22,7 @@ #include "gauss.h" #include "sleef.c" #include "opthelper.h" +#include "guidedfilter.h" namespace rtengine { @@ -33,11 +34,32 @@ void ImProcFunctions::shadowsHighlights(LabImage *lab) const int width = lab->W; const int height = lab->H; + const bool lab_mode = params->sh.lab; array2D mask(width, height); - const float sigma = params->sh.radius * 5.f / scale; - LUTf f(32768); + array2D L(width, height); + const float radius = float(params->sh.radius) * 10 / scale; + LUTf f(lab_mode ? 32768 : 65536); + TMatrix ws = ICCStore::getInstance()->workingSpaceMatrix(params->icm.workingProfile); + TMatrix iws = ICCStore::getInstance()->workingSpaceInverseMatrix(params->icm.workingProfile); + + const auto rgb2lab = + [&](float R, float G, float B, float &l, float &a, float &b) -> void + { + float x, y, z; + Color::rgbxyz(R, G, B, x, y, z, ws); + Color::XYZ2Lab(x, y, z, l, a, b); + }; + + const auto lab2rgb = + [&](float l, float a, float b, float &R, float &G, float &B) -> void + { + float x, y, z; + Color::Lab2XYZ(l, a, b, x, y, z); + Color::xyz2rgb(x, y, z, R, G, B, iws); + }; + const auto apply = [&](int amount, int tonalwidth, bool hl) -> void { @@ -45,27 +67,24 @@ void ImProcFunctions::shadowsHighlights(LabImage *lab) const float scale = hl ? (thresh > 0.f ? 0.9f / thresh : 1.f) : thresh * 0.9f; #ifdef _OPENMP - #pragma omp parallel if (multiThread) + #pragma omp parallel for if (multiThread) #endif - { - -#ifdef _OPENMP - #pragma omp for -#endif - for (int y = 0; y < height; ++y) { - for (int x = 0; x < width; ++x) { - float l = lab->L[y][x]; - if (hl) { - mask[y][x] = (l > thresh) ? 1.f : pow4(l * scale); - } else { - mask[y][x] = l <= thresh ? 1.f : pow4(scale / l); - } + for (int y = 0; y < height; ++y) { + for (int x = 0; x < width; ++x) { + float l = lab->L[y][x]; + float l1 = l / 32768.f; + if (hl) { + mask[y][x] = (l > thresh) ? 1.f : pow4(l * scale); + L[y][x] = 1.f - l1; + } else { + mask[y][x] = l <= thresh ? 1.f : pow4(scale / l); + L[y][x] = l1; } } - - gaussianBlur(mask, mask, width, height, sigma); } + guidedFilter(L, mask, mask, radius, 0.075, multiThread, 4); + const float base = std::pow(4.f, float(amount)/100.f); const float gamma = hl ? base : 1.f / base; @@ -80,35 +99,55 @@ void ImProcFunctions::shadowsHighlights(LabImage *lab) }); if(!hl) { + if (lab_mode) { #ifdef _OPENMP - #pragma omp parallel for if (multiThread) + #pragma omp parallel for if (multiThread) #endif - for (int l = 0; l < 32768; ++l) { - auto base = pow_F(l / 32768.f, gamma); - // get a bit more contrast in the shadows - base = sh_contrast.getVal(base); - f[l] = base * 32768.f; + for (int l = 0; l < 32768; ++l) { + auto base = pow_F(l / 32768.f, gamma); + // get a bit more contrast in the shadows + base = sh_contrast.getVal(base); + f[l] = base * 32768.f; + } + } else { +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int c = 0; c < 65536; ++c) { + float l, a, b; + float R = c, G = c, B = c; + rgb2lab(R, G, B, l, a, b); + auto base = pow_F(l / 32768.f, gamma); + // get a bit more contrast in the shadows + base = sh_contrast.getVal(base); + l = base * 32768.f; + lab2rgb(l, a, b, R, G, B); + f[c] = G; + } } } else { -#ifdef __SSE2__ - vfloat c32768v = F2V(32768.f); - vfloat lv = _mm_setr_ps(0,1,2,3); - vfloat fourv = F2V(4.f); - vfloat gammav = F2V(gamma); - for (int l = 0; l < 32768; l += 4) { - vfloat basev = pow_F(lv / c32768v, gammav); - STVFU(f[l], basev * c32768v); - lv += fourv; - } -#else + if (lab_mode) { #ifdef _OPENMP - #pragma omp parallel for if (multiThread) + #pragma omp parallel for if (multiThread) #endif - for (int l = 0; l < 32768; ++l) { - auto base = pow_F(l / 32768.f, gamma); - f[l] = base * 32768.f; + for (int l = 0; l < 32768; ++l) { + auto base = pow_F(l / 32768.f, gamma); + f[l] = base * 32768.f; + } + } else { +#ifdef _OPENMP + #pragma omp parallel for if (multiThread) +#endif + for (int c = 0; c < 65536; ++c) { + float l, a, b; + float R = c, G = c, B = c; + rgb2lab(R, G, B, l, a, b); + auto base = pow_F(l / 32768.f, gamma); + l = base * 32768.f; + lab2rgb(l, a, b, R, G, B); + f[c] = G; + } } -#endif } #ifdef _OPENMP @@ -117,17 +156,26 @@ void ImProcFunctions::shadowsHighlights(LabImage *lab) for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { float l = lab->L[y][x]; - float blend = mask[y][x]; + float blend = LIM01(mask[y][x]); float orig = 1.f - blend; if (l >= 0.f && l < 32768.f) { - lab->L[y][x] = f[l] * blend + l * orig; - if (!hl && l > 1.f) { - // when pushing shadows, scale also the chromaticity - float s = max(lab->L[y][x] / l * 0.5f, 1.f) * blend; - float a = lab->a[y][x]; - float b = lab->b[y][x]; - lab->a[y][x] = a * s + a * orig; - lab->b[y][x] = b * s + b * orig; + if (lab_mode) { + lab->L[y][x] = f[l] * blend + l * orig; + if (!hl && l > 1.f) { + // when pushing shadows, scale also the chromaticity + float s = max(lab->L[y][x] / l * 0.5f, 1.f) * blend; + float a = lab->a[y][x]; + float b = lab->b[y][x]; + lab->a[y][x] = a * s + a * orig; + lab->b[y][x] = b * s + b * orig; + } + } else { + float rgb[3]; + lab2rgb(l, lab->a[y][x], lab->b[y][x], rgb[0], rgb[1], rgb[2]); + for (int i = 0; i < 3; ++i) { + rgb[i] = f[rgb[i]] * blend + rgb[i] * orig; + } + rgb2lab(rgb[0], rgb[1], rgb[2], lab->L[y][x], lab->a[y][x], lab->b[y][x]); } } } @@ -135,11 +183,11 @@ void ImProcFunctions::shadowsHighlights(LabImage *lab) }; if (params->sh.highlights > 0) { - apply(params->sh.highlights, params->sh.htonalwidth, true); + apply(params->sh.highlights * 0.7, params->sh.htonalwidth, true); } if (params->sh.shadows > 0) { - apply(params->sh.shadows, params->sh.stonalwidth, false); + apply(params->sh.shadows * 0.6, params->sh.stonalwidth, false); } } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 54c608ad9..ed24e87f0 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -1501,7 +1501,8 @@ SHParams::SHParams() : htonalwidth(70), shadows(0), stonalwidth(30), - radius(40) + radius(40), + lab(false) { } @@ -1513,7 +1514,8 @@ bool SHParams::operator ==(const SHParams& other) const && htonalwidth == other.htonalwidth && shadows == other.shadows && stonalwidth == other.stonalwidth - && radius == other.radius; + && radius == other.radius + && lab == other.lab; } bool SHParams::operator !=(const SHParams& other) const @@ -3337,6 +3339,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->sh.shadows, "Shadows & Highlights", "Shadows", sh.shadows, keyFile); saveToKeyfile(!pedited || pedited->sh.stonalwidth, "Shadows & Highlights", "ShadowTonalWidth", sh.stonalwidth, keyFile); saveToKeyfile(!pedited || pedited->sh.radius, "Shadows & Highlights", "Radius", sh.radius, keyFile); + saveToKeyfile(!pedited || pedited->sh.lab, "Shadows & Highlights", "Lab", sh.lab, keyFile); // Crop saveToKeyfile(!pedited || pedited->crop.enabled, "Crop", "Enabled", crop.enabled, keyFile); @@ -4389,6 +4392,11 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Shadows & Highlights", "Shadows", pedited, sh.shadows, pedited->sh.shadows); assignFromKeyfile(keyFile, "Shadows & Highlights", "ShadowTonalWidth", pedited, sh.stonalwidth, pedited->sh.stonalwidth); assignFromKeyfile(keyFile, "Shadows & Highlights", "Radius", pedited, sh.radius, pedited->sh.radius); + if (ppVersion >= 344) { + assignFromKeyfile(keyFile, "Shadows & Highlights", "Lab", pedited, sh.lab, pedited->sh.lab); + } else { + sh.lab = true; + } if (keyFile.has_key("Shadows & Highlights", "LocalContrast") && ppVersion < 329) { int lc = keyFile.get_integer("Shadows & Highlights", "LocalContrast"); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 987e37e56..a180ad654 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -756,6 +756,7 @@ struct SHParams { int shadows; int stonalwidth; int radius; + bool lab; SHParams(); diff --git a/rtengine/profilestore.h b/rtengine/profilestore.h index 4949517da..d79e5691f 100644 --- a/rtengine/profilestore.h +++ b/rtengine/profilestore.h @@ -39,14 +39,14 @@ class ProfileStoreListener { public: - virtual ~ProfileStoreListener() {} + virtual ~ProfileStoreListener() = default; /** @brief Called whenever the current value has to be stored before update. */ - virtual void storeCurrentValue() {} + virtual void storeCurrentValue() = 0; /** @brief Called whenever the file list has been updated and the content of the listener has to be updated. */ virtual void updateProfileList() = 0; /** @brief Called whenever the profile list has changed and the old value have to be restored (if possible). */ - virtual void restoreValue() {} + virtual void restoreValue() = 0; }; /// @brief ProfileStoreEntry type (folder or file) diff --git a/rtengine/rescale.h b/rtengine/rescale.h new file mode 100644 index 000000000..ba9a01c99 --- /dev/null +++ b/rtengine/rescale.h @@ -0,0 +1,99 @@ +/* -*- C++ -*- + * + * This file is part of RawTherapee. + * + * Copyright (c) 2018 Alberto Griggio + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + */ + +#pragma once + +#include "array2D.h" + +namespace rtengine { + +inline float getBilinearValue(const array2D &src, float x, float y) +{ + const int W = src.width(); + const int H = src.height(); + + // Get integer and fractional parts of numbers + int xi = x; + int yi = y; + float xf = x - xi; + float yf = y - yi; + int xi1 = std::min(xi + 1, W - 1); + int yi1 = std::min(yi + 1, H - 1); + + float bl = src[yi][xi]; + float br = src[yi][xi1]; + float tl = src[yi1][xi]; + float tr = src[yi1][xi1]; + + // interpolate + float b = xf * br + (1.f - xf) * bl; + float t = xf * tr + (1.f - xf) * tl; + float pxf = yf * t + (1.f - yf) * b; + return pxf; +} + + +inline void rescaleBilinear(const array2D &src, array2D &dst, bool multithread) +{ + const int Ws = src.width(); + const int Hs = src.height(); + const int Wd = dst.width(); + const int Hd = dst.height(); + + float col_scale = float (Ws) / float (Wd); + float row_scale = float (Hs) / float (Hd); + +#ifdef _OPENMP + #pragma omp parallel for if (multithread) +#endif + + for (int y = 0; y < Hd; ++y) { + float ymrs = y * row_scale; + + for (int x = 0; x < Wd; ++x) { + dst[y][x] = getBilinearValue(src, x * col_scale, ymrs); + } + } +} + + +inline void rescaleNearest(const array2D &src, array2D &dst, bool multithread) +{ + const int width = src.width(); + const int height = src.height(); + const int nw = dst.width(); + const int nh = dst.height(); + +#ifdef _OPENMP + #pragma omp parallel for if (multithread) +#endif + + for (int y = 0; y < nh; ++y) { + int sy = y * height / nh; + + for (int x = 0; x < nw; ++x) { + int sx = x * width / nw; + dst[y][x] = src[sy][sx]; + } + } +} + + +} // namespace rtengine diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index 576f80e54..986a88b48 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -155,21 +155,20 @@ public: /** This listener interface is used to indicate the progress of time consuming operations */ class ProgressListener { - public: - virtual ~ProgressListener() {} + virtual ~ProgressListener() = default; /** This member function is called when the percentage of the progress has been changed. * @param p is a number between 0 and 1 */ - virtual void setProgress (double p) {} + virtual void setProgress(double p) = 0; /** This member function is called when a textual information corresponding to the progress has been changed. * @param str is the textual information corresponding to the progress */ - virtual void setProgressStr (Glib::ustring str) {} + virtual void setProgressStr(const Glib::ustring& str) = 0; /** This member function is called when the state of the processing has been changed. * @param inProcessing =true if the processing has been started, =false if it has been stopped */ - virtual void setProgressState (bool inProcessing) {} + virtual void setProgressState(bool inProcessing) = 0; /** This member function is called when an error occurs during the operation. * @param descr is the error message */ - virtual void error (Glib::ustring descr) {} + virtual void error(const Glib::ustring& descr) = 0; }; class ImageSource; @@ -220,20 +219,20 @@ public: class PreviewImageListener { public: - virtual ~PreviewImageListener() {} + virtual ~PreviewImageListener() = default; /** With this member function the staged processor notifies the listener that it allocated a new * image to store the end result of the processing. It can be used in a shared manner. * @param img is a pointer to the image * @param scale describes the current scaling applied compared to the 100% size (preview scale) * @param cp holds the coordinates of the current crop rectangle */ - virtual void setImage (IImage8* img, double scale, procparams::CropParams cp) {} + virtual void setImage(IImage8* img, double scale, const procparams::CropParams& cp) = 0; /** With this member function the staged processor notifies the listener that the image passed as parameter * will be deleted, and no longer used to store the preview image. * @param img the pointer to the image to be destroyed. The listener has to free the image! */ - virtual void delImage (IImage8* img) {} + virtual void delImage(IImage8* img) = 0; /** With this member function the staged processor notifies the listener that the preview image has been updated. * @param cp holds the coordinates of the current crop rectangle */ - virtual void imageReady (procparams::CropParams cp) {} + virtual void imageReady(const procparams::CropParams& cp) = 0; }; /** When the detailed crop image is ready for display during staged processing (thus the changes have been updated), @@ -243,52 +242,70 @@ public: class DetailedCropListener { public: - virtual ~DetailedCropListener() {} + virtual ~DetailedCropListener() = default; /** With this member function the staged processor notifies the listener that the detailed crop image has been updated. * @param img is a pointer to the detailed crop image */ - virtual void setDetailedCrop (IImage8* img, IImage8* imgtrue, procparams::ColorManagementParams cmp, - procparams::CropParams cp, int cx, int cy, int cw, int ch, int skip) {} - virtual bool getWindow (int& cx, int& cy, int& cw, int& ch, int& skip) - { - return false; - } - // virtual void setPosition (int x, int y, bool update=true) {} - + virtual void setDetailedCrop( + IImage8* img, + IImage8* imgtrue, + const procparams::ColorManagementParams& cmp, + const procparams::CropParams& cp, + int cx, + int cy, + int cw, + int ch, + int skip + ) = 0; + virtual void getWindow(int& cx, int& cy, int& cw, int& ch, int& skip) = 0; }; /** This listener is used when the full size of the final image has been changed (e.g. rotated by 90 deg.) */ class SizeListener { public: - virtual ~SizeListener() {} + virtual ~SizeListener() = default; /** This member function is called when the size of the final image has been changed * @param w is the width of the final image (without cropping) * @param h is the height of the final image (without cropping) * @param ow is the width of the final image (without resizing and cropping) * @param oh is the height of the final image (without resizing and cropping) */ - virtual void sizeChanged (int w, int h, int ow, int oh) {} + virtual void sizeChanged(int w, int h, int ow, int oh) = 0; }; /** This listener is used when the histogram of the final image has changed. */ class HistogramListener { public: - virtual ~HistogramListener() {} + virtual ~HistogramListener() = default; /** This member function is called when the histogram of the final image has changed. * @param histRed is the array of size 256 containing the histogram of the red channel * @param histGreen is the array of size 256 containing the histogram of the green channel * @param histBlue is the array of size 256 containing the histogram of the blue channel * @param histLuma is the array of size 256 containing the histogram of the luminance channel * other for curves backgrounds, histRAW is RAW without colors */ - virtual void histogramChanged (LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve,LUTu & histLLCurve, */LUTu & histLCAM, LUTu & histCCAM, - LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw, LUTu & histChroma, LUTu & histLRETI) {} + virtual void histogramChanged( + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRedRaw, + const LUTu& histGreenRaw, + const LUTu& histBlueRaw, + const LUTu& histChroma, + const LUTu& histLRETI + ) = 0; }; /** This listener is used when the auto exposure has been recomputed (e.g. when the clipping ratio changed). */ class AutoExpListener { public: - virtual ~AutoExpListener() {} + virtual ~AutoExpListener() = default; /** This member function is called when the auto exposure has been recomputed. * @param brightness is the new brightness value (in logarithmic scale) * @param bright is the new ... @@ -297,84 +314,79 @@ public: * @param hlcompr is the new highlight recovery amount * @param hlcomprthresh is the new threshold for hlcompr * @param hlrecons set to true if HighLight Reconstruction is enabled */ - virtual void autoExpChanged (double brightness, int bright, int contrast, int black, int hlcompr, int hlcomprthresh, bool hlrecons) {} + virtual void autoExpChanged(double brightness, int bright, int contrast, int black, int hlcompr, int hlcomprthresh, bool hlrecons) = 0; - virtual void autoMatchedToneCurveChanged(procparams::ToneCurveParams::TcMode curveMode, const std::vector &curve) {} + virtual void autoMatchedToneCurveChanged(procparams::ToneCurveParams::TcMode curveMode, const std::vector& curve) = 0; }; class AutoCamListener { public : - virtual ~AutoCamListener() {} - virtual void autoCamChanged (double ccam, double ccamout) {} - virtual void adapCamChanged (double cadap) {} - virtual void ybCamChanged (int yb) {} - + virtual ~AutoCamListener() = default; + virtual void autoCamChanged(double ccam, double ccamout) = 0; + virtual void adapCamChanged(double cadap) = 0; + virtual void ybCamChanged(int yb) = 0; }; class AutoChromaListener { public : - virtual ~AutoChromaListener() {} - virtual void chromaChanged (double autchroma, double autred, double autblue) {} - virtual void noiseChanged (double nresid, double highresid) {} - virtual void noiseTilePrev (int tileX, int tileY, int prevX, int prevY, int sizeT, int sizeP) {} - + virtual ~AutoChromaListener() = default; + virtual void chromaChanged(double autchroma, double autred, double autblue) = 0; + virtual void noiseChanged(double nresid, double highresid) = 0; + virtual void noiseTilePrev(int tileX, int tileY, int prevX, int prevY, int sizeT, int sizeP) = 0; }; class RetinexListener { -public : - virtual ~RetinexListener() {} - virtual void minmaxChanged (double cdma, double cdmin, double mini, double maxi, double Tmean, double Tsigma, double Tmin, double Tmax) {} - +public: + virtual ~RetinexListener() = default; + virtual void minmaxChanged(double cdma, double cdmin, double mini, double maxi, double Tmean, double Tsigma, double Tmin, double Tmax) = 0; }; class AutoColorTonListener { -public : - virtual ~AutoColorTonListener() {} - virtual void autoColorTonChanged (int bwct, int satthres, int satprot) {} +public: + virtual ~AutoColorTonListener() = default; + virtual void autoColorTonChanged(int bwct, int satthres, int satprot) = 0; }; class AutoBWListener { -public : - virtual ~AutoBWListener() {} - virtual void BWChanged (double redbw, double greenbw, double bluebw) {} - +public: + virtual ~AutoBWListener() = default; + virtual void BWChanged(double redbw, double greenbw, double bluebw) = 0; }; class AutoWBListener { -public : +public: virtual ~AutoWBListener() = default; - virtual void WBChanged (double temp, double green) = 0; + virtual void WBChanged(double temp, double green) = 0; }; class FrameCountListener { -public : +public: virtual ~FrameCountListener() = default; - virtual void FrameCountChanged (int n, int frameNum) = 0; + virtual void FrameCountChanged(int n, int frameNum) = 0; }; class ImageTypeListener { -public : +public: virtual ~ImageTypeListener() = default; - virtual void imageTypeChanged (bool isRaw, bool isBayer, bool isXtrans, bool is_Mono = false) = 0; + virtual void imageTypeChanged(bool isRaw, bool isBayer, bool isXtrans, bool is_Mono = false) = 0; }; class WaveletListener { -public : - virtual ~WaveletListener() {} - virtual void wavChanged (double nlevel) {} +public: + virtual ~WaveletListener() = default; + virtual void wavChanged(double nlevel) = 0; }; - /** This class represents a detailed part of the image (looking through a kind of window). * It can be created and destroyed with the appropriate members of StagedImageProcessor. * Several crops can be assigned to the same image. */ @@ -555,8 +567,7 @@ public: * there is no jobs left. * @param img is the result of the last ProcessingJob * @return the next ProcessingJob to process */ - virtual ProcessingJob* imageReady (IImagefloat* img) = 0; - virtual void error (Glib::ustring message) = 0; + virtual ProcessingJob* imageReady(IImagefloat* img) = 0; }; /** This function performs all the image processing steps corresponding to the given ProcessingJob. It runs in the background, thus it returns immediately, * When it finishes, it calls the BatchProcessingListener with the resulting image and asks for the next job. It the listener gives a new job, it goes on diff --git a/rtengine/rtetest.cc b/rtengine/rtetest.cc index 5d2dbfddc..bd81dbb0d 100644 --- a/rtengine/rtetest.cc +++ b/rtengine/rtetest.cc @@ -21,23 +21,28 @@ //#include #include -class PListener : public rtengine::ProgressListener +class PListener : + public rtengine::ProgressListener { - public: - void setProgressStr (Glib::ustring str) + void setProgressStr(const Glib::ustring& str) { std::cout << str << std::endl; } - void setProgress (double p) + void setProgress(double p) { std::cout << p << std::endl; } + void setProgressState(bool inProcessing) + { + } + void error(const Glib::ustring& descr) + { + } }; int main (int argc, char* argv[]) { - if (argc < 4) { std::cout << "Usage: rtcmd " << std::endl; exit(1); diff --git a/rtengine/tmo_fattal02.cc b/rtengine/tmo_fattal02.cc index 359b33575..dc7826501 100644 --- a/rtengine/tmo_fattal02.cc +++ b/rtengine/tmo_fattal02.cc @@ -73,6 +73,7 @@ #include "sleef.c" #include "opthelper.h" #include "rt_algo.h" +#include "rescale.h" namespace rtengine { @@ -938,66 +939,14 @@ void solve_pde_fft (Array2Df *F, Array2Df *U, Array2Df *buf, bool multithread)/* * RT code from here on *****************************************************************************/ -inline float get_bilinear_value (const Array2Df &src, float x, float y) +inline void rescale_bilinear (const Array2Df &src, Array2Df &dst, bool multithread) { - // Get integer and fractional parts of numbers - int xi = x; - int yi = y; - float xf = x - xi; - float yf = y - yi; - int xi1 = std::min (xi + 1, src.getCols() - 1); - int yi1 = std::min (yi + 1, src.getRows() - 1); - - float bl = src (xi, yi); - float br = src (xi1, yi); - float tl = src (xi, yi1); - float tr = src (xi1, yi1); - - // interpolate - float b = xf * br + (1.f - xf) * bl; - float t = xf * tr + (1.f - xf) * tl; - float pxf = yf * t + (1.f - yf) * b; - return pxf; + rescaleBilinear(src, dst, multithread); } - -void rescale_bilinear (const Array2Df &src, Array2Df &dst, bool multithread) +inline void rescale_nearest (const Array2Df &src, Array2Df &dst, bool multithread) { - float col_scale = float (src.getCols()) / float (dst.getCols()); - float row_scale = float (src.getRows()) / float (dst.getRows()); - -#ifdef _OPENMP - #pragma omp parallel for if (multithread) -#endif - - for (int y = 0; y < dst.getRows(); ++y) { - float ymrs = y * row_scale; - - for (int x = 0; x < dst.getCols(); ++x) { - dst (x, y) = get_bilinear_value (src, x * col_scale, ymrs); - } - } -} - -void rescale_nearest (const Array2Df &src, Array2Df &dst, bool multithread) -{ - const int width = src.getCols(); - const int height = src.getRows(); - const int nw = dst.getCols(); - const int nh = dst.getRows(); - -#ifdef _OPENMP - #pragma omp parallel for if (multithread) -#endif - - for (int y = 0; y < nh; ++y) { - int sy = y * height / nh; - - for (int x = 0; x < nw; ++x) { - int sx = x * width / nw; - dst (x, y) = src (sx, sy); - } - } + rescaleNearest(src, dst, multithread); } diff --git a/rtexif/rtexif.cc b/rtexif/rtexif.cc index 0715ccfd6..c35ba7e0b 100644 --- a/rtexif/rtexif.cc +++ b/rtexif/rtexif.cc @@ -3043,7 +3043,7 @@ void ExifManager::parse (bool isRaw, bool skipIgnored) if (!sftTagList.empty()) { for (auto sft : sftTagList) { int sftVal = sft->toInt(); - if (sftVal == (isRaw ? 0 : 2)) { + if (sftVal == 0 || (!isRaw && sftVal == 2)) { frames.push_back(sft->getParent()); frameRootDetected = true; diff --git a/rtgui/adjuster.h b/rtgui/adjuster.h index 5b4d6f46d..bd7f426ef 100644 --- a/rtgui/adjuster.h +++ b/rtgui/adjuster.h @@ -24,13 +24,13 @@ #include "guiutils.h" class Adjuster; + class AdjusterListener { - public: - virtual ~AdjusterListener() {}; - virtual void adjusterChanged (Adjuster* a, double newval) {} - virtual void adjusterAutoToggled (Adjuster* a, bool newval) {} + virtual ~AdjusterListener() = default; + virtual void adjusterChanged (Adjuster* a, double newval) = 0; + virtual void adjusterAutoToggled (Adjuster* a, bool newval) = 0; }; typedef double(*double2double_fun)(double val); diff --git a/rtgui/batchqueue.cc b/rtgui/batchqueue.cc index d3e3ef9f0..1d52c96e6 100644 --- a/rtgui/batchqueue.cc +++ b/rtgui/batchqueue.cc @@ -39,6 +39,27 @@ using namespace std; using namespace rtengine; +namespace +{ + +struct NLParams { + BatchQueueListener* listener; + int qsize; + bool queueEmptied; + bool queueError; + Glib::ustring queueErrorMessage; +}; + +int bqnotifylistenerUI (void* data) +{ + NLParams* params = static_cast(data); + params->listener->queueSizeChanged (params->qsize, params->queueEmptied, params->queueError, params->queueErrorMessage); + delete params; + return 0; +} + +} + BatchQueue::BatchQueue (FileCatalog* aFileCatalog) : processing(nullptr), fileCatalog(aFileCatalog), sequence(0), listener(nullptr) { @@ -580,9 +601,54 @@ void BatchQueue::startProcessing () } } -rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImagefloat* img) +void BatchQueue::setProgress(double p) { + if (processing) { + processing->progress = p; + } + // No need to acquire the GUI, setProgressUI will do it + const auto func = [](gpointer data) -> gboolean { + static_cast(data)->redraw(); + return FALSE; + }; + + idle_register.add(func, this); +} + +void BatchQueue::setProgressStr(const Glib::ustring& str) +{ +} + +void BatchQueue::setProgressState(bool inProcessing) +{ +} + +void BatchQueue::error(const Glib::ustring& descr) +{ + if (processing && processing->processing) { + // restore failed thumb + BatchQueueButtonSet* bqbs = new BatchQueueButtonSet (processing); + bqbs->setButtonListener (this); + processing->addButtonSet (bqbs); + processing->processing = false; + processing->job = rtengine::ProcessingJob::create(processing->filename, processing->thumbnail->getType() == FT_Raw, processing->params); + processing = nullptr; + redraw (); + } + + if (listener) { + NLParams* params = new NLParams; + params->listener = listener; + params->queueEmptied = false; + params->queueError = true; + params->queueErrorMessage = descr; + idle_register.add(bqnotifylistenerUI, params); + } +} + +rtengine::ProcessingJob* BatchQueue::imageReady(rtengine::IImagefloat* img) +{ // save image img Glib::ustring fname; SaveFormat saveFormat; @@ -892,22 +958,6 @@ Glib::ustring BatchQueue::autoCompleteFileName (const Glib::ustring& fileName, c return ""; } -void BatchQueue::setProgress (double p) -{ - - if (processing) { - processing->progress = p; - } - - // No need to acquire the GUI, setProgressUI will do it - const auto func = [](gpointer data) -> gboolean { - static_cast(data)->redraw(); - return FALSE; - }; - - idle_register.add(func, this); -} - void BatchQueue::buttonPressed (LWButton* button, int actionCode, void* actionData) { @@ -923,22 +973,6 @@ void BatchQueue::buttonPressed (LWButton* button, int actionCode, void* actionDa } } -struct NLParams { - BatchQueueListener* listener; - int qsize; - bool queueEmptied; - bool queueError; - Glib::ustring queueErrorMessage; -}; - -int bqnotifylistenerUI (void* data) -{ - NLParams* params = static_cast(data); - params->listener->queueSizeChanged (params->qsize, params->queueEmptied, params->queueError, params->queueErrorMessage); - delete params; - return 0; -} - void BatchQueue::notifyListener (bool queueEmptied) { @@ -960,27 +994,3 @@ void BatchQueue::redrawNeeded (LWButton* button) GThreadLock lock; queue_draw (); } - -void BatchQueue::error (Glib::ustring msg) -{ - - if (processing && processing->processing) { - // restore failed thumb - BatchQueueButtonSet* bqbs = new BatchQueueButtonSet (processing); - bqbs->setButtonListener (this); - processing->addButtonSet (bqbs); - processing->processing = false; - processing->job = rtengine::ProcessingJob::create(processing->filename, processing->thumbnail->getType() == FT_Raw, processing->params); - processing = nullptr; - redraw (); - } - - if (listener) { - NLParams* params = new NLParams; - params->listener = listener; - params->queueEmptied = false; - params->queueError = true; - params->queueErrorMessage = msg; - idle_register.add(bqnotifylistenerUI, params); - } -} diff --git a/rtgui/batchqueue.h b/rtgui/batchqueue.h index 0d91542b6..41c30da3f 100644 --- a/rtgui/batchqueue.h +++ b/rtgui/batchqueue.h @@ -30,9 +30,9 @@ class BatchQueueListener { public: - virtual ~BatchQueueListener () {} - virtual void queueSizeChanged (int qsize, bool queueEmptied, bool queueError, Glib::ustring queueErrorMessage) = 0; - virtual bool canStartNext () = 0; + virtual ~BatchQueueListener() = default; + virtual void queueSizeChanged(int qsize, bool queueEmptied, bool queueError, const Glib::ustring& queueErrorMessage) = 0; + virtual bool canStartNext() = 0; }; class FileCatalog; @@ -62,9 +62,12 @@ public: return (!fd.empty()); } - rtengine::ProcessingJob* imageReady (rtengine::IImagefloat* img); - void error (Glib::ustring msg); - void setProgress (double p); + void setProgress(double p); + void setProgressStr(const Glib::ustring& str); + void setProgressState(bool inProcessing); + void error(const Glib::ustring& descr); + rtengine::ProcessingJob* imageReady(rtengine::IImagefloat* img); + void rightClicked (ThumbBrowserEntryBase* entry); void doubleClicked (ThumbBrowserEntryBase* entry); bool keyPressed (GdkEventKey* event); diff --git a/rtgui/batchqueuepanel.cc b/rtgui/batchqueuepanel.cc index b73fb2f6f..b698ee9d6 100644 --- a/rtgui/batchqueuepanel.cc +++ b/rtgui/batchqueuepanel.cc @@ -245,9 +245,9 @@ void BatchQueuePanel::updateTab (int qsize, int forceOrientation) } } -void BatchQueuePanel::queueSizeChanged (int qsize, bool queueEmptied, bool queueError, Glib::ustring queueErrorMessage) +void BatchQueuePanel::queueSizeChanged(int qsize, bool queueEmptied, bool queueError, const Glib::ustring& queueErrorMessage) { - updateTab ( qsize); + updateTab (qsize); if (qsize == 0 || (qsize == 1 && !fdir->get_sensitive())) { qStartStop->set_sensitive(false); @@ -311,10 +311,9 @@ void BatchQueuePanel::stopBatchProc () updateTab (batchQueue->getEntries().size()); } -void BatchQueuePanel::addBatchQueueJobs ( std::vector &entries, bool head) +void BatchQueuePanel::addBatchQueueJobs(const std::vector& entries, bool head) { - - batchQueue->addEntries (entries, head); + batchQueue->addEntries(entries, head); if (!qStartStop->get_active() && qAutoStart->get_active()) { startBatchProc (); diff --git a/rtgui/batchqueuepanel.h b/rtgui/batchqueuepanel.h index d765e23dc..3f1da85ce 100644 --- a/rtgui/batchqueuepanel.h +++ b/rtgui/batchqueuepanel.h @@ -59,11 +59,11 @@ public: void init (RTWindow* parent); - void addBatchQueueJobs (std::vector &entries , bool head = false); + void addBatchQueueJobs(const std::vector& entries , bool head = false); // batchqueuelistener interface - void queueSizeChanged (int qsize, bool queueEmptied, bool queueError, Glib::ustring queueErrorMessage); - bool canStartNext (); + void queueSizeChanged(int qsize, bool queueEmptied, bool queueError, const Glib::ustring& queueErrorMessage); + bool canStartNext(); void startBatchProc (); void stopBatchProc (); diff --git a/rtgui/bayerpreprocess.cc b/rtgui/bayerpreprocess.cc index c43bdb4d8..7c9545b89 100644 --- a/rtgui/bayerpreprocess.cc +++ b/rtgui/bayerpreprocess.cc @@ -134,6 +134,10 @@ void BayerPreProcess::adjusterChanged (Adjuster* a, double newval) } } +void BayerPreProcess::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void BayerPreProcess::setBatchMode(bool batchMode) { ToolPanel::setBatchMode (batchMode); diff --git a/rtgui/bayerpreprocess.h b/rtgui/bayerpreprocess.h index c27e76e00..18bf35026 100644 --- a/rtgui/bayerpreprocess.h +++ b/rtgui/bayerpreprocess.h @@ -46,7 +46,9 @@ public: void setBatchMode (bool batchMode); void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); - void adjusterChanged (Adjuster* a, double newval); + void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); + void hotDeadPixelChanged(); void setAdjusterBehavior (bool linedenoiseadd, bool greenequiladd); void trimValues (rtengine::procparams::ProcParams* pp); diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc index d68f5c2d3..758b1b795 100644 --- a/rtgui/bayerprocess.cc +++ b/rtgui/bayerprocess.cc @@ -539,6 +539,10 @@ void BayerProcess::adjusterChanged (Adjuster* a, double newval) } } +void BayerProcess::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void BayerProcess::methodChanged () { const int currentSelection = method->get_active_row_number(); diff --git a/rtgui/bayerprocess.h b/rtgui/bayerprocess.h index cfd063ca9..88b38cc16 100644 --- a/rtgui/bayerprocess.h +++ b/rtgui/bayerprocess.h @@ -80,6 +80,7 @@ public: void methodChanged(); void imageNumberChanged(); void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled (Adjuster* a, bool newval); void checkBoxToggled(CheckBox* c, CheckValue newval); void pixelShiftMotionMethodChanged(); void pixelShiftDemosaicMethodChanged(); diff --git a/rtgui/bayerrawexposure.cc b/rtgui/bayerrawexposure.cc index 7a8f32389..f284d7975 100644 --- a/rtgui/bayerrawexposure.cc +++ b/rtgui/bayerrawexposure.cc @@ -121,7 +121,7 @@ void BayerRAWExposure::write( rtengine::procparams::ProcParams* pp, ParamsEdited } -void BayerRAWExposure::adjusterChanged (Adjuster* a, double newval) +void BayerRAWExposure::adjusterChanged(Adjuster* a, double newval) { if (listener) { Glib::ustring value = a->getTextValue(); @@ -148,6 +148,10 @@ void BayerRAWExposure::adjusterChanged (Adjuster* a, double newval) } } +void BayerRAWExposure::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void BayerRAWExposure::checkBoxToggled (CheckBox* c, CheckValue newval) { if (c == PextwoGreen) { diff --git a/rtgui/bayerrawexposure.h b/rtgui/bayerrawexposure.h index 5d51babbb..a368eea3f 100644 --- a/rtgui/bayerrawexposure.h +++ b/rtgui/bayerrawexposure.h @@ -43,6 +43,7 @@ public: void setBatchMode (bool batchMode); void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled (Adjuster* a, bool newval); void checkBoxToggled (CheckBox* c, CheckValue newval); void setAdjusterBehavior (bool pexblackadd); void trimValues (rtengine::procparams::ProcParams* pp); diff --git a/rtgui/blackwhite.cc b/rtgui/blackwhite.cc index 469094fb8..47ab24f5e 100644 --- a/rtgui/blackwhite.cc +++ b/rtgui/blackwhite.cc @@ -1094,9 +1094,8 @@ void BlackWhite::autoch_toggled () } -void BlackWhite::adjusterChanged (Adjuster* a, double newval) +void BlackWhite::adjusterChanged(Adjuster* a, double newval) { - // Checking "listener" to avoid "autoch" getting toggled off because it has to change the sliders when toggling on if (listener && (a == mixerRed || a == mixerGreen || a == mixerBlue || a == mixerOrange || a == mixerYellow || a == mixerMagenta || a == mixerPurple || a == mixerCyan) ) { if (multiImage && autoch->get_inconsistent()) { @@ -1147,6 +1146,10 @@ void BlackWhite::adjusterChanged (Adjuster* a, double newval) } } +void BlackWhite::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void BlackWhite::updateRGBLabel () { if (!batchMode) { diff --git a/rtgui/blackwhite.h b/rtgui/blackwhite.h index 07ad6a160..43e4b5384 100644 --- a/rtgui/blackwhite.h +++ b/rtgui/blackwhite.h @@ -53,6 +53,7 @@ public: void updateRGBLabel (); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled (Adjuster* a, bool newval); void setAdjusterBehavior (bool bwadd, bool bwgadd); void trimValues (rtengine::procparams::ProcParams* pp); void enabledcc_toggled (); diff --git a/rtgui/bqentryupdater.h b/rtgui/bqentryupdater.h index 75040b109..e25f5aed4 100644 --- a/rtgui/bqentryupdater.h +++ b/rtgui/bqentryupdater.h @@ -28,8 +28,8 @@ class BQEntryUpdateListener { public: - virtual ~BQEntryUpdateListener () {} - virtual void updateImage (guint8* img, int w, int h, int origw, int origh, guint8* newOPreview) {} + virtual ~BQEntryUpdateListener() = default; + virtual void updateImage(guint8* img, int w, int h, int origw, int origh, guint8* newOPreview) = 0; }; class BatchQueueEntryUpdater diff --git a/rtgui/cacorrection.cc b/rtgui/cacorrection.cc index 485a5e1cf..4405e4ad1 100644 --- a/rtgui/cacorrection.cc +++ b/rtgui/cacorrection.cc @@ -97,6 +97,10 @@ void CACorrection::adjusterChanged (Adjuster* a, double newval) } } +void CACorrection::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void CACorrection::setAdjusterBehavior (bool badd) { diff --git a/rtgui/cacorrection.h b/rtgui/cacorrection.h index fd34bc942..2de510968 100644 --- a/rtgui/cacorrection.h +++ b/rtgui/cacorrection.h @@ -40,6 +40,7 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void setAdjusterBehavior (bool badd); void trimValues (rtengine::procparams::ProcParams* pp); }; diff --git a/rtgui/checkbox.h b/rtgui/checkbox.h index 5b3088704..b5ab4945f 100644 --- a/rtgui/checkbox.h +++ b/rtgui/checkbox.h @@ -33,10 +33,9 @@ enum class CheckValue { class CheckBoxListener { - public: - virtual ~CheckBoxListener() {}; - virtual void checkBoxToggled (CheckBox* c, CheckValue newval) {} + virtual ~CheckBoxListener() = default; + virtual void checkBoxToggled(CheckBox* c, CheckValue newval) = 0; }; diff --git a/rtgui/chmixer.cc b/rtgui/chmixer.cc index 1a122ef6f..e15ed89f5 100644 --- a/rtgui/chmixer.cc +++ b/rtgui/chmixer.cc @@ -167,7 +167,7 @@ void ChMixer::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi } } -void ChMixer::adjusterChanged (Adjuster* a, double newval) +void ChMixer::adjusterChanged(Adjuster* a, double newval) { if (listener && getEnabled()) { @@ -179,6 +179,9 @@ void ChMixer::adjusterChanged (Adjuster* a, double newval) } } +void ChMixer::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} void ChMixer::enabledChanged() { diff --git a/rtgui/chmixer.h b/rtgui/chmixer.h index 410ac0d16..0ec28da3d 100644 --- a/rtgui/chmixer.h +++ b/rtgui/chmixer.h @@ -42,6 +42,7 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void setAdjusterBehavior (bool rgbadd); void trimValues (rtengine::procparams::ProcParams* pp); void enabledChanged(); diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index 2e83d63d9..094c6fc5d 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -1544,9 +1544,8 @@ void ColorAppearance::colorForValue (double valX, double valY, enum ColorCaller: caller->ccBlue = double (B); } -void ColorAppearance::adjusterChanged (Adjuster* a, double newval) +void ColorAppearance::adjusterChanged(Adjuster* a, double newval) { - if (listener && (multiImage || getEnabled()) ) { if (a == degree) { listener->panelChanged (EvCATDegree, a->getTextValue()); @@ -1594,9 +1593,8 @@ void ColorAppearance::adjusterChanged (Adjuster* a, double newval) } } -void ColorAppearance::adjusterAutoToggled (Adjuster* a, bool newval) +void ColorAppearance::adjusterAutoToggled(Adjuster* a, bool newval) { - if (multiImage) { if (degree->getAutoInconsistent()) { degree->setAutoInconsistent (false); @@ -1844,11 +1842,21 @@ void ColorAppearance::setBatchMode (bool batchMode) curveEditorG3->setBatchMode (batchMode); } -void ColorAppearance::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) +void ColorAppearance::updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI +) { - - shape->updateBackgroundHistogram (histLCAM); - shape3->updateBackgroundHistogram (histCCAM); + shape->updateBackgroundHistogram(histLCAM); + shape3->updateBackgroundHistogram(histCCAM); } diff --git a/rtgui/colorappearance.h b/rtgui/colorappearance.h index 3829475ae..5dd8a2e82 100644 --- a/rtgui/colorappearance.h +++ b/rtgui/colorappearance.h @@ -80,7 +80,18 @@ public: void setAdjusterBehavior (bool degreeadd, bool adapscenadd, bool adaplumadd, bool badpixsladd, bool jlightadd, bool chromaadd, bool contrastadd, bool rstprotectionadd, bool qbrightadd, bool qcontrastadd, bool schromaadd, bool mchromaadd, bool colorhadd); void trimValues (rtengine::procparams::ProcParams* pp); - void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); + void updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI + ); virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller); void updateToolState (std::vector &tpOpen); void writeOptions (std::vector &tpOpen); diff --git a/rtgui/colortoning.cc b/rtgui/colortoning.cc index 7b3fb97df..8b357c3f9 100644 --- a/rtgui/colortoning.cc +++ b/rtgui/colortoning.cc @@ -318,7 +318,7 @@ ColorToning::ColorToning () : FoldableToolPanel(this, "colortoning", M("TP_COLOR //------------------------------------------------------------------------ // LAB grid - auto m = ProcEventMapper::getInstance(); + auto m = ProcEventMapper::getInstance(); EvColorToningLabGridValue = m->newEvent(RGBCURVE, "HISTORY_MSG_COLORTONING_LABGRID_VALUE"); labgridBox = Gtk::manage(new Gtk::HBox()); labgrid = Gtk::manage(new LabGrid(EvColorToningLabGridValue)); @@ -688,13 +688,6 @@ void ColorToning::setAdjusterBehavior (bool splitAdd, bool satThresholdAdd, bool } -void ColorToning::adjusterChanged (ThresholdAdjuster* a, double newBottom, double newTop) -{ - if (listener && getEnabled()) - listener->panelChanged (a == hlColSat ? EvColorToningHighights : EvColorToningShadows, - Glib::ustring::compose(Glib::ustring(M("TP_COLORTONING_HUE") + ": %1" + "\n" + M("TP_COLORTONING_STRENGTH") + ": %2"), int(newTop), int(newBottom))); -} - void ColorToning::autoColorTonChanged(int bwct, int satthres, int satprot) { nextbw = bwct; @@ -731,40 +724,32 @@ bool ColorToning::CTComp_ () return false; } -void ColorToning::adjusterChanged (Adjuster* a, double newval) +void ColorToning::adjusterChanged (ThresholdAdjuster* a, double newBottom, double newTop) { - - if (!listener || !getEnabled()) { - return; + if (listener && getEnabled()) { + listener->panelChanged( + a == hlColSat + ? EvColorToningHighights + : EvColorToningShadows, + Glib::ustring::compose(Glib::ustring(M("TP_COLORTONING_HUE") + ": %1" + "\n" + M("TP_COLORTONING_STRENGTH") + ": %2"), int(newTop), int(newBottom)) + ); } +} - if (a == redlow) { - listener->panelChanged (EvColorToningredlow, redlow->getTextValue()); - } else if (a == greenlow) { - listener->panelChanged (EvColorToninggreenlow, greenlow->getTextValue()); - } else if (a == bluelow) { - listener->panelChanged (EvColorToningbluelow, bluelow->getTextValue()); - } else if (a == redmed) { - listener->panelChanged (EvColorToningredmed, redmed->getTextValue()); - } else if (a == greenmed) { - listener->panelChanged (EvColorToninggreenmed, greenmed->getTextValue()); - } else if (a == bluemed) { - listener->panelChanged (EvColorToningbluemed, bluemed->getTextValue()); - } else if (a == redhigh) { - listener->panelChanged (EvColorToningredhigh, redhigh->getTextValue()); - } else if (a == greenhigh) { - listener->panelChanged (EvColorToninggreenhigh, greenhigh->getTextValue()); - } else if (a == bluehigh) { - listener->panelChanged (EvColorToningbluehigh, bluehigh->getTextValue()); - } else if (a == balance) { - listener->panelChanged (EvColorToningbalance, balance->getTextValue()); - } else if (a == satProtectionThreshold) { - listener->panelChanged (EvColorToningSatThreshold, a->getTextValue()); - } else if (a == saturatedOpacity) { - listener->panelChanged (EvColorToningSatProtection, a->getTextValue()); - } else if (a == strength) { - listener->panelChanged (EvColorToningStrength, a->getTextValue()); - } +void ColorToning::adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) +{ +} + +void ColorToning::adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) +{ +} + +void ColorToning::adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) +{ +} + +void ColorToning::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) +{ } //Two Color changed @@ -829,7 +814,7 @@ void ColorToning::methodChanged () if (!batchMode) { labgridBox->hide(); - + if (method->get_active_row_number() == 0) { // Lab colorSep->show(); colorCurveEditorG->show(); @@ -1141,6 +1126,45 @@ void ColorToning::trimValues (rtengine::procparams::ProcParams* pp) bluehigh->trimValue(pp->colorToning.bluehigh); } +void ColorToning::adjusterChanged(Adjuster* a, double newval) +{ + if (!listener || !getEnabled()) { + return; + } + + if (a == redlow) { + listener->panelChanged (EvColorToningredlow, redlow->getTextValue()); + } else if (a == greenlow) { + listener->panelChanged (EvColorToninggreenlow, greenlow->getTextValue()); + } else if (a == bluelow) { + listener->panelChanged (EvColorToningbluelow, bluelow->getTextValue()); + } else if (a == redmed) { + listener->panelChanged (EvColorToningredmed, redmed->getTextValue()); + } else if (a == greenmed) { + listener->panelChanged (EvColorToninggreenmed, greenmed->getTextValue()); + } else if (a == bluemed) { + listener->panelChanged (EvColorToningbluemed, bluemed->getTextValue()); + } else if (a == redhigh) { + listener->panelChanged (EvColorToningredhigh, redhigh->getTextValue()); + } else if (a == greenhigh) { + listener->panelChanged (EvColorToninggreenhigh, greenhigh->getTextValue()); + } else if (a == bluehigh) { + listener->panelChanged (EvColorToningbluehigh, bluehigh->getTextValue()); + } else if (a == balance) { + listener->panelChanged (EvColorToningbalance, balance->getTextValue()); + } else if (a == satProtectionThreshold) { + listener->panelChanged (EvColorToningSatThreshold, a->getTextValue()); + } else if (a == saturatedOpacity) { + listener->panelChanged (EvColorToningSatProtection, a->getTextValue()); + } else if (a == strength) { + listener->panelChanged (EvColorToningStrength, a->getTextValue()); + } +} + +void ColorToning::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void ColorToning::setBatchMode (bool batchMode) { ToolPanel::setBatchMode (batchMode); diff --git a/rtgui/colortoning.h b/rtgui/colortoning.h index 73ac1dff2..cb021e242 100644 --- a/rtgui/colortoning.h +++ b/rtgui/colortoning.h @@ -32,13 +32,19 @@ public: void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); void trimValues (rtengine::procparams::ProcParams* pp); void adjusterChanged (Adjuster* a, double newval); - void adjusterChanged (ThresholdAdjuster* a, double newBottom, double newTop); + void adjusterAutoToggled (Adjuster* a, bool newval); void setAdjusterBehavior (bool splitAdd, bool satThresholdAdd, bool satOpacityAdd, bool strprotectAdd, bool balanceAdd); void neutral_pressed (); //void neutralCurves_pressed (); void autoColorTonChanged (int bwct, int satthres, int satprot); bool CTComp_ (); + void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop); + void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight); + void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop); + void adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight); + void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR); + void enabledChanged (); void curveChanged (CurveEditor* ce); void autosatChanged (); @@ -51,7 +57,7 @@ public: void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller); void setListener(ToolPanelListener *tpl); - + private: bool resetPressed(GdkEventButton* event); diff --git a/rtgui/controlspotpanel.cc b/rtgui/controlspotpanel.cc index cf365b3e2..8551e00da 100644 --- a/rtgui/controlspotpanel.cc +++ b/rtgui/controlspotpanel.cc @@ -522,6 +522,26 @@ void ControlSpotPanel::updateParamVisibility() } } +void ControlSpotPanel::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} +void ControlSpotPanel::adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) +{ +} +void ControlSpotPanel::adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) +{ +} +void ControlSpotPanel::adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) +{ +} +void ControlSpotPanel::adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) +{ +} +void ControlSpotPanel::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) +{ +} + + void ControlSpotPanel::adjusterChanged(Adjuster* a, double newval) { printf("adjusterChanged\n"); diff --git a/rtgui/controlspotpanel.h b/rtgui/controlspotpanel.h index 4e6dc159d..42cfabb43 100644 --- a/rtgui/controlspotpanel.h +++ b/rtgui/controlspotpanel.h @@ -28,6 +28,7 @@ #include "toolpanel.h" #include #include +#include "thresholdadjuster.h" class ControlSpotPanel: public ToolParamBlock, @@ -197,6 +198,13 @@ private: void qualityMethodChanged(); void updateParamVisibility(); void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); + void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop); + void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight); + void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop); + void adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight); + void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR); + void disableParamlistener(bool cond); void setParamEditable(bool cond); diff --git a/rtgui/crop.cc b/rtgui/crop.cc index 7205fc3ad..d5b246107 100644 --- a/rtgui/crop.cc +++ b/rtgui/crop.cc @@ -728,7 +728,7 @@ void Crop::setDimensions (int mw, int mh) refreshSize (); } -void Crop::sizeChanged (int x, int y, int ow, int oh) +void Crop::sizeChanged(int x, int y, int ow, int oh) { struct Params { Crop* crop; @@ -1261,9 +1261,8 @@ void Crop::cropManipReady () idle_register.add(notifyListenerUI, this); } -double Crop::getRatio () +double Crop::getRatio () const { - double r = -1.0; if (!fixr->get_active()) { diff --git a/rtgui/crop.h b/rtgui/crop.h index e786d8364..d3b5c7b6b 100644 --- a/rtgui/crop.h +++ b/rtgui/crop.h @@ -76,7 +76,7 @@ public: void cropResized (int &x, int &y, int& x2, int& y2); void cropManipReady (); bool inImageArea (int x, int y); - double getRatio (); + double getRatio () const; void setCropPanelListener (CropPanelListener* cl) { diff --git a/rtgui/cropguilistener.h b/rtgui/cropguilistener.h index 239e9d002..7a791ef93 100644 --- a/rtgui/cropguilistener.h +++ b/rtgui/cropguilistener.h @@ -23,21 +23,21 @@ class CropGUIListener { public: - virtual ~CropGUIListener() {} - virtual void cropMoved (int &x, int &y, int &w, int &h) = 0; - virtual void cropWidth1Resized (int &x, int &y, int &w, int &h, float custom_ratio=0.f) = 0; - virtual void cropWidth2Resized (int &x, int &y, int &w, int &h, float custom_ratio=0.f) = 0; - virtual void cropHeight1Resized (int &x, int &y, int &w, int &h, float custom_ratio=0.f) = 0; - virtual void cropHeight2Resized (int &x, int &y, int &w, int &h, float custom_ratio=0.f) = 0; - virtual void cropTopLeftResized (int &x, int &y, int &w, int &h, float custom_ratio=0.f) = 0; - virtual void cropTopRightResized (int &x, int &y, int &w, int &h, float custom_ratio=0.f) = 0; - virtual void cropBottomLeftResized (int &x, int &y, int &w, int &h, float custom_ratio=0.f) = 0; - virtual void cropBottomRightResized (int &x, int &y, int &w, int &h, float custom_ratio=0.f) = 0; - virtual void cropInit (int &x, int &y, int &w, int &h) = 0; - virtual void cropResized (int &x, int &y, int& x2, int& y2) = 0; - virtual void cropManipReady () = 0; - virtual bool inImageArea (int x, int y) = 0; - virtual double getRatio () = 0; + virtual ~CropGUIListener() = default; + virtual void cropMoved(int &x, int &y, int &w, int &h) = 0; + virtual void cropWidth1Resized(int &x, int &y, int &w, int &h, float custom_ratio = 0.f) = 0; + virtual void cropWidth2Resized(int &x, int &y, int &w, int &h, float custom_ratio = 0.f) = 0; + virtual void cropHeight1Resized(int &x, int &y, int &w, int &h, float custom_ratio = 0.f) = 0; + virtual void cropHeight2Resized(int &x, int &y, int &w, int &h, float custom_ratio = 0.f) = 0; + virtual void cropTopLeftResized(int &x, int &y, int &w, int &h, float custom_ratio = 0.f) = 0; + virtual void cropTopRightResized(int &x, int &y, int &w, int &h, float custom_ratio = 0.f) = 0; + virtual void cropBottomLeftResized(int &x, int &y, int &w, int &h, float custom_ratio = 0.f) = 0; + virtual void cropBottomRightResized(int &x, int &y, int &w, int &h, float custom_ratio = 0.f) = 0; + virtual void cropInit(int &x, int &y, int &w, int &h) = 0; + virtual void cropResized(int &x, int &y, int& x2, int& y2) = 0; + virtual void cropManipReady() = 0; + virtual bool inImageArea(int x, int y) = 0; + virtual double getRatio() const = 0; }; #endif diff --git a/rtgui/crophandler.cc b/rtgui/crophandler.cc index ecef3fa3b..c00cccf6c 100644 --- a/rtgui/crophandler.cc +++ b/rtgui/crophandler.cc @@ -106,15 +106,9 @@ void CropHandler::newImage (StagedImageProcessor* ipc_, bool isDetailWindow) initial = true; } -void CropHandler::sizeChanged (int x, int y, int ow, int oh) // the ipc notifies it to keep track size changes like rotation +void CropHandler::sizeChanged(int x, int y, int ow, int oh) // the ipc notifies it to keep track size changes like rotation { - compDim (); - -// this should be put into an idle source!!! - /* if (listener) - listener->cropWindowChanged (); - */ } bool CropHandler::isFullDisplay () @@ -300,10 +294,18 @@ void CropHandler::getPosition (int& x, int& y) } -void CropHandler::setDetailedCrop (IImage8* im, IImage8* imtrue, rtengine::procparams::ColorManagementParams cmp, - rtengine::procparams::CropParams cp, int ax, int ay, int aw, int ah, int askip) +void CropHandler::setDetailedCrop( + IImage8* im, + IImage8* imtrue, + const rtengine::procparams::ColorManagementParams& cmp, + const rtengine::procparams::CropParams& cp, + int ax, + int ay, + int aw, + int ah, + int askip +) { - if (!enabled) { return; } @@ -406,9 +408,8 @@ void CropHandler::setDetailedCrop (IImage8* im, IImage8* imtrue, rtengine::procp cimg.unlock (); } -bool CropHandler::getWindow (int& cwx, int& cwy, int& cww, int& cwh, int& cskip) +void CropHandler::getWindow(int& cwx, int& cwy, int& cww, int& cwh, int& cskip) { - cwx = cropX; cwy = cropY; cww = cropW; @@ -424,8 +425,6 @@ bool CropHandler::getWindow (int& cwx, int& cwy, int& cww, int& cwh, int& cskip) } cskip = zoom >= 1000 ? 1 : zoom/10; - - return true; } void CropHandler::update () diff --git a/rtgui/crophandler.h b/rtgui/crophandler.h index 305d15e2c..14dd5062d 100644 --- a/rtgui/crophandler.h +++ b/rtgui/crophandler.h @@ -86,9 +86,19 @@ public: } // DetailedCropListener interface - void setDetailedCrop (rtengine::IImage8* im, rtengine::IImage8* imworking, rtengine::procparams::ColorManagementParams cmp, - rtengine::procparams::CropParams cp, int cx, int cy, int cw, int ch, int skip); - bool getWindow (int& cwx, int& cwy, int& cww, int& cwh, int& cskip); + void setDetailedCrop( + rtengine::IImage8* im, + rtengine::IImage8* imworking, + const rtengine::procparams::ColorManagementParams& cmp, + const rtengine::procparams::CropParams& cp, + int cx, + int cy, + int cw, + int ch, + int skip + ); + void getWindow(int& cwx, int& cwy, int& cww, int& cwh, int& cskip); + // SizeListener interface void sizeChanged (int w, int h, int ow, int oh); diff --git a/rtgui/cropwindow.h b/rtgui/cropwindow.h index 66f9b9097..71729e66e 100644 --- a/rtgui/cropwindow.h +++ b/rtgui/cropwindow.h @@ -32,15 +32,15 @@ #include "edit.h" class CropWindow; + class CropWindowListener { - public: - virtual ~CropWindowListener() {} - virtual void cropPositionChanged (CropWindow*) {} - virtual void cropWindowSizeChanged (CropWindow*) {} - virtual void cropZoomChanged (CropWindow*) {} - virtual void initialImageArrived () {} + virtual ~CropWindowListener() = default; + virtual void cropPositionChanged(CropWindow*) = 0; + virtual void cropWindowSizeChanged(CropWindow*) = 0; + virtual void cropZoomChanged(CropWindow*) = 0; + virtual void initialImageArrived() = 0; }; class ImageArea; diff --git a/rtgui/curveeditor.cc b/rtgui/curveeditor.cc index a65f8b451..995dafa4e 100644 --- a/rtgui/curveeditor.cc +++ b/rtgui/curveeditor.cc @@ -254,7 +254,7 @@ void CurveEditor::setUnChanged (bool uc) /* * Update the backgrounds histograms */ -void CurveEditor::updateBackgroundHistogram (LUTu & hist) +void CurveEditor::updateBackgroundHistogram(const LUTu& hist) { // Copy the histogram in the curve editor cache if (hist) { @@ -265,7 +265,7 @@ void CurveEditor::updateBackgroundHistogram (LUTu & hist) } // Then call the curve editor group to eventually update the histogram - subGroup->updateBackgroundHistogram (this); + subGroup->updateBackgroundHistogram(this); } // Open up the curve if it has modifications and it's not already opened diff --git a/rtgui/curveeditor.h b/rtgui/curveeditor.h index 3f279ff05..afd4a1211 100644 --- a/rtgui/curveeditor.h +++ b/rtgui/curveeditor.h @@ -93,7 +93,7 @@ public: void curveTypeToggled(); bool isUnChanged (); void setUnChanged (bool uc); - void updateBackgroundHistogram (LUTu & hist); + void updateBackgroundHistogram(const LUTu& hist); void setLeftBarColorProvider(ColorProvider* cp, int callerId); void setBottomBarColorProvider(ColorProvider* cp, int callerId); diff --git a/rtgui/defringe.cc b/rtgui/defringe.cc index 5f70925e7..6a3d11d76 100644 --- a/rtgui/defringe.cc +++ b/rtgui/defringe.cc @@ -149,9 +149,8 @@ void Defringe::curveChanged () } } -void Defringe::adjusterChanged (Adjuster* a, double newval) +void Defringe::adjusterChanged(Adjuster* a, double newval) { - if (listener && getEnabled()) { if (a == radius) { @@ -162,6 +161,10 @@ void Defringe::adjusterChanged (Adjuster* a, double newval) } } +void Defringe::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void Defringe::enabledChanged () { diff --git a/rtgui/defringe.h b/rtgui/defringe.h index ef0bfd2aa..81b870675 100644 --- a/rtgui/defringe.h +++ b/rtgui/defringe.h @@ -50,6 +50,7 @@ public: void curveChanged (); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged (); virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller); diff --git a/rtgui/diagonalcurveeditorsubgroup.cc b/rtgui/diagonalcurveeditorsubgroup.cc index 6455f6cb9..a022c8650 100644 --- a/rtgui/diagonalcurveeditorsubgroup.cc +++ b/rtgui/diagonalcurveeditorsubgroup.cc @@ -1154,14 +1154,17 @@ void DiagonalCurveEditorSubGroup::shcChanged () /* * Listener */ -void DiagonalCurveEditorSubGroup::adjusterChanged (Adjuster* a, double newval) +void DiagonalCurveEditorSubGroup::adjusterChanged(Adjuster* a, double newval) { - paramCurve->setPoints (getCurveFromGUI(DCT_Parametric)); storeDisplayedCurve(); parent->curveChanged (); } +void DiagonalCurveEditorSubGroup::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + /* * Listener called when the mouse is over a parametric curve's slider */ diff --git a/rtgui/diagonalcurveeditorsubgroup.h b/rtgui/diagonalcurveeditorsubgroup.h index 1e3c3bf13..c9dafeadd 100644 --- a/rtgui/diagonalcurveeditorsubgroup.h +++ b/rtgui/diagonalcurveeditorsubgroup.h @@ -105,6 +105,7 @@ protected: const std::vector getCurveFromGUI (int type); void shcChanged (); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); bool adjusterEntered (GdkEventCrossing* ev, int ac); bool adjusterLeft (GdkEventCrossing* ev, int ac); void setSubGroupRangeLabels(Glib::ustring r1, Glib::ustring r2, Glib::ustring r3, Glib::ustring r4); diff --git a/rtgui/dirpyrdenoise.cc b/rtgui/dirpyrdenoise.cc index f79770a62..c2fb31902 100644 --- a/rtgui/dirpyrdenoise.cc +++ b/rtgui/dirpyrdenoise.cc @@ -1009,11 +1009,9 @@ void DirPyrDenoise::setDefaults (const ProcParams* defParams, const ParamsEdited } } -void DirPyrDenoise::adjusterChanged (Adjuster* a, double newval) +void DirPyrDenoise::adjusterChanged(Adjuster* a, double newval) { - - Glib::ustring costr; - costr = Glib::ustring::format (std::setw(3), std::fixed, std::setprecision(2), a->getValue()); + const Glib::ustring costr = Glib::ustring::format (std::setw(3), std::fixed, std::setprecision(2), a->getValue()); if (listener && getEnabled()) { if (a == Ldetail) { @@ -1034,6 +1032,10 @@ void DirPyrDenoise::adjusterChanged (Adjuster* a, double newval) } } +void DirPyrDenoise::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void DirPyrDenoise::enabledChanged () { diff --git a/rtgui/dirpyrdenoise.h b/rtgui/dirpyrdenoise.h index cc9a2b5bd..26a55ba20 100644 --- a/rtgui/dirpyrdenoise.h +++ b/rtgui/dirpyrdenoise.h @@ -49,6 +49,7 @@ public: void autoOpenCurve (); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged (); void medianChanged (); void chromaChanged (double autchroma, double autred, double autblue); diff --git a/rtgui/dirpyrequalizer.cc b/rtgui/dirpyrequalizer.cc index 8ceeed96a..b63243465 100644 --- a/rtgui/dirpyrequalizer.cc +++ b/rtgui/dirpyrequalizer.cc @@ -297,13 +297,28 @@ void DirPyrEqualizer::setDefaults (const ProcParams* defParams, const ParamsEdit } } -void DirPyrEqualizer::adjusterChanged (ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) +void DirPyrEqualizer::adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) +{ +} + +void DirPyrEqualizer::adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) +{ +} + +void DirPyrEqualizer::adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) +{ +} + +void DirPyrEqualizer::adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) { if (listener && (multiImage || getEnabled()) ) { listener->panelChanged (EvDirPyrEqualizerHueskin, hueskin->getHistoryString()); } } +void DirPyrEqualizer::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) +{ +} void DirPyrEqualizer::setBatchMode (bool batchMode) { @@ -330,9 +345,8 @@ void DirPyrEqualizer::cbdlMethodChanged() -void DirPyrEqualizer::adjusterChanged (Adjuster* a, double newval) +void DirPyrEqualizer::adjusterChanged(Adjuster* a, double newval) { - if (listener && getEnabled()) { if (a == threshold) { listener->panelChanged (EvDirPyrEqualizerThreshold, @@ -359,6 +373,10 @@ void DirPyrEqualizer::adjusterChanged (Adjuster* a, double newval) } } +void DirPyrEqualizer::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void DirPyrEqualizer::enabledChanged () { diff --git a/rtgui/dirpyrequalizer.h b/rtgui/dirpyrequalizer.h index 9a3517166..3b5549e55 100644 --- a/rtgui/dirpyrequalizer.h +++ b/rtgui/dirpyrequalizer.h @@ -63,15 +63,20 @@ public: void setBatchMode (bool batchMode); void setAdjusterBehavior (bool multiplieradd, bool thresholdadd, bool skinadd); void trimValues (rtengine::procparams::ProcParams* pp); - void adjusterChanged (ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight); -// void algoChanged (); void cbdlMethodChanged(); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged(); void gamutlabToggled (); void lumaneutralPressed (); void lumacontrastPlusPressed (); void lumacontrastMinusPressed (); + + void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop); + void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight); + void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop); + void adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight); + void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR); }; #endif diff --git a/rtgui/distortion.cc b/rtgui/distortion.cc index b6ad7cc03..d1d097269 100644 --- a/rtgui/distortion.cc +++ b/rtgui/distortion.cc @@ -84,14 +84,17 @@ void Distortion::setDefaults (const ProcParams* defParams, const ParamsEdited* p } } -void Distortion::adjusterChanged (Adjuster* a, double newval) +void Distortion::adjusterChanged(Adjuster* a, double newval) { - if (listener) { listener->panelChanged (EvDISTAmount, Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), a->getValue())); } } +void Distortion::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void Distortion::setBatchMode (bool batchMode) { diff --git a/rtgui/distortion.h b/rtgui/distortion.h index c2856323d..b1134e426 100644 --- a/rtgui/distortion.h +++ b/rtgui/distortion.h @@ -43,6 +43,7 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled (Adjuster* a, bool newval); void setAdjusterBehavior (bool vadd); void trimValues (rtengine::procparams::ProcParams* pp); void idPressed (); diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 392d12a2c..1f46d60e7 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -1159,7 +1159,12 @@ Glib::ustring EditorPanel::getFileName () } // TODO!!! -void EditorPanel::procParamsChanged (rtengine::procparams::ProcParams* params, rtengine::ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited) +void EditorPanel::procParamsChanged( + const rtengine::procparams::ProcParams* params, + const rtengine::ProcEvent& ev, + const Glib::ustring& descr, + const ParamsEdited* paramsEdited +) { // if (ev!=EvPhotoLoaded) @@ -1178,7 +1183,28 @@ void EditorPanel::procParamsChanged (rtengine::procparams::ProcParams* params, r info_toggled(); } -void EditorPanel::setProgressState (bool inProcessing) +void EditorPanel::clearParamChanges() +{ +} + +void EditorPanel::setProgress(double p) +{ + spparams *s = new spparams; + s->val = p; + s->pProgress = progressLabel; + idle_register.add(setprogressStrUI, s); +} + +void EditorPanel::setProgressStr(const Glib::ustring& str) +{ + spparams *s = new spparams; + s->str = str; + s->val = -1; + s->pProgress = progressLabel; + idle_register.add(setprogressStrUI, s); +} + +void EditorPanel::setProgressState(bool inProcessing) { struct spsparams { bool inProcessing; @@ -1217,21 +1243,63 @@ void EditorPanel::setProgressState (bool inProcessing) idle_register.add (func, p); } -void EditorPanel::setProgress (double p) +void EditorPanel::error(const Glib::ustring& descr) { - spparams *s = new spparams; - s->val = p; - s->pProgress = progressLabel; - idle_register.add (setprogressStrUI, s); } -void EditorPanel::setProgressStr (Glib::ustring str) +void EditorPanel::error(const Glib::ustring& title, const Glib::ustring& descr) { - spparams *s = new spparams; - s->str = str; - s->val = -1; - s->pProgress = progressLabel; - idle_register.add (setprogressStrUI, s); + struct errparams { + Glib::ustring descr; + Glib::ustring title; + EditorPanelIdleHelper* epih; + }; + + epih->pending++; + errparams* const p = new errparams; + p->descr = descr; + p->title = title; + p->epih = epih; + + const auto func = [] (gpointer data) -> gboolean { + errparams* const p = static_cast (data); + + if (p->epih->destroyed) + { + if (p->epih->pending == 1) { + delete p->epih; + } else { + p->epih->pending--; + } + + delete p; + + return 0; + } + + p->epih->epanel->displayError (p->title, p->descr); + p->epih->pending--; + delete p; + + return FALSE; + }; + + idle_register.add (func, p); +} + +void EditorPanel::displayError(const Glib::ustring& title, const Glib::ustring& descr) +{ + GtkWidget* msgd = gtk_message_dialog_new_with_markup (nullptr, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + "%s", + descr.data()); + gtk_window_set_title ((GtkWindow*)msgd, title.data()); + g_signal_connect_swapped (msgd, "response", + G_CALLBACK (gtk_widget_destroy), + msgd); + gtk_widget_show_all (msgd); } // This is only called from the ThreadUI, so within the gtk thread @@ -1286,61 +1354,6 @@ void EditorPanel::refreshProcessingState (bool inProcessingP) setprogressStrUI (s); } -void EditorPanel::displayError (Glib::ustring title, Glib::ustring descr) -{ - GtkWidget* msgd = gtk_message_dialog_new_with_markup (nullptr, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_OK, - "%s", - descr.data()); - gtk_window_set_title ((GtkWindow*)msgd, title.data()); - g_signal_connect_swapped (msgd, "response", - G_CALLBACK (gtk_widget_destroy), - msgd); - gtk_widget_show_all (msgd); -} - -void EditorPanel::error (Glib::ustring title, Glib::ustring descr) -{ - struct errparams { - Glib::ustring descr; - Glib::ustring title; - EditorPanelIdleHelper* epih; - }; - - epih->pending++; - errparams* const p = new errparams; - p->descr = descr; - p->title = title; - p->epih = epih; - - const auto func = [] (gpointer data) -> gboolean { - errparams* const p = static_cast (data); - - if (p->epih->destroyed) - { - if (p->epih->pending == 1) { - delete p->epih; - } else { - p->epih->pending--; - } - - delete p; - - return 0; - } - - p->epih->epanel->displayError (p->title, p->descr); - p->epih->pending--; - delete p; - - return FALSE; - }; - - idle_register.add (func, p); -} - void EditorPanel::info_toggled () { @@ -2249,15 +2262,28 @@ void EditorPanel::tbBeforeLock_toggled () tbBeforeLock->get_active() ? tbBeforeLock->set_image (*iBeforeLockON) : tbBeforeLock->set_image (*iBeforeLockOFF); } -void EditorPanel::histogramChanged (LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, - LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw, LUTu & histChroma, LUTu & histLRETI) +void EditorPanel::histogramChanged( + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRedRaw, + const LUTu& histGreenRaw, + const LUTu& histBlueRaw, + const LUTu& histChroma, + const LUTu& histLRETI +) { - if (histogramPanel) { - histogramPanel->histogramChanged (histRed, histGreen, histBlue, histLuma, histChroma, histRedRaw, histGreenRaw, histBlueRaw); + histogramPanel->histogramChanged(histRed, histGreen, histBlue, histLuma, histChroma, histRedRaw, histGreenRaw, histBlueRaw); } - tpc->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve,/*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); + tpc->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve, histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); } bool EditorPanel::CheckSidePanelsVisibility() diff --git a/rtgui/editorpanel.h b/rtgui/editorpanel.h index 3ac0d92b6..29ca70554 100644 --- a/rtgui/editorpanel.h +++ b/rtgui/editorpanel.h @@ -45,13 +45,14 @@ struct EditorPanelIdleHelper { }; class RTWindow; + class EditorPanel final : - public Gtk::VBox, - public PParamsChangeListener, - public rtengine::ProgressListener, - public ThumbnailListener, - public HistoryBeforeLineListener, - public rtengine::HistogramListener + public Gtk::VBox, + public PParamsChangeListener, + public rtengine::ProgressListener, + public ThumbnailListener, + public HistoryBeforeLineListener, + public rtengine::HistogramListener { public: explicit EditorPanel (FilePanel* filePanel = nullptr); @@ -81,16 +82,24 @@ public: { return realized; } - // progresslistener interface - void setProgress (double p); - void setProgressStr (Glib::ustring str); - void setProgressState (bool inProcessing); - void error (Glib::ustring title, Glib::ustring descr); - void displayError (Glib::ustring title, Glib::ustring descr); // this is called by error in the gtk thread + // ProgressListener interface + void setProgress(double p); + void setProgressStr(const Glib::ustring& str); + void setProgressState(bool inProcessing); + void error(const Glib::ustring& descr); + + void error(const Glib::ustring& title, const Glib::ustring& descr); + void displayError(const Glib::ustring& title, const Glib::ustring& descr); // this is called by error in the gtk thread void refreshProcessingState (bool inProcessing); // this is called by setProcessingState in the gtk thread // PParamsChangeListener interface - void procParamsChanged (rtengine::procparams::ProcParams* params, rtengine::ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited = nullptr); + void procParamsChanged( + const rtengine::procparams::ProcParams* params, + const rtengine::ProcEvent& ev, + const Glib::ustring& descr, + const ParamsEdited* paramsEdited = nullptr + ); + void clearParamChanges(); // thumbnaillistener interface void procParamsChanged (Thumbnail* thm, int whoChangedIt); @@ -99,8 +108,22 @@ public: void historyBeforeLineChanged (const rtengine::procparams::ProcParams& params); // HistogramListener - void histogramChanged (LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, - LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw, LUTu & histChroma, LUTu & histLRETI); + void histogramChanged( + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRedRaw, + const LUTu& histGreenRaw, + const LUTu& histBlueRaw, + const LUTu& histChroma, + const LUTu& histLRETI + ); // event handlers void info_toggled (); diff --git a/rtgui/epd.cc b/rtgui/epd.cc index 602585dfb..681248994 100644 --- a/rtgui/epd.cc +++ b/rtgui/epd.cc @@ -143,7 +143,7 @@ void EdgePreservingDecompositionUI::setDefaults(const ProcParams *defParams, con void EdgePreservingDecompositionUI::adjusterChanged(Adjuster* a, double newval) { - if(listener && getEnabled()) { + if (listener && getEnabled()) { if(a == strength) { listener->panelChanged(EvEPDStrength, Glib::ustring::format(std::setw(2), std::fixed, std::setprecision(2), a->getValue())); } else if(a == gamma) { @@ -158,6 +158,10 @@ void EdgePreservingDecompositionUI::adjusterChanged(Adjuster* a, double newval) } } +void EdgePreservingDecompositionUI::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void EdgePreservingDecompositionUI::enabledChanged () { if (listener) { diff --git a/rtgui/epd.h b/rtgui/epd.h index 2e18cc0c9..c40133c3a 100644 --- a/rtgui/epd.h +++ b/rtgui/epd.h @@ -42,6 +42,7 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged (); void setAdjusterBehavior (bool stAdd, bool gAdd, bool esAdd, bool scAdd, bool rAdd); }; diff --git a/rtgui/exportpanel.h b/rtgui/exportpanel.h index 369682169..dc9aa34a5 100644 --- a/rtgui/exportpanel.h +++ b/rtgui/exportpanel.h @@ -26,9 +26,10 @@ class ExportPanelListener { - public: - virtual void exportRequested () {} + virtual ~ExportPanelListener() = default; + + virtual void exportRequested() = 0; }; class ExportPanel : public Gtk::VBox diff --git a/rtgui/fattaltonemap.cc b/rtgui/fattaltonemap.cc index 545a313a9..4bba72f2a 100644 --- a/rtgui/fattaltonemap.cc +++ b/rtgui/fattaltonemap.cc @@ -113,6 +113,10 @@ void FattalToneMapping::adjusterChanged(Adjuster* a, double newval) } } +void FattalToneMapping::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void FattalToneMapping::enabledChanged () { if (listener) { diff --git a/rtgui/fattaltonemap.h b/rtgui/fattaltonemap.h index 90f92a965..fb6f1acd6 100644 --- a/rtgui/fattaltonemap.h +++ b/rtgui/fattaltonemap.h @@ -42,6 +42,7 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged (); void setAdjusterBehavior(bool amountAdd, bool thresholdAdd, bool anchorAdd); }; diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc index edd37f7dd..f83e39146 100644 --- a/rtgui/filebrowser.cc +++ b/rtgui/filebrowser.cc @@ -981,7 +981,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) // Empty run to update the thumb rtengine::procparams::ProcParams params = mselected[i]->thumbnail->getProcParams (); - mselected[i]->thumbnail->setProcParams (params, nullptr, FILEBROWSER); + mselected[i]->thumbnail->setProcParams (params, nullptr, FILEBROWSER, true, true); } if (!mselected.empty() && bppcl) { @@ -1991,7 +1991,11 @@ void FileBrowser::setExportPanel (ExportPanel* expanel) exportPanel->setExportPanelListener (this); } -void FileBrowser::updateProfileList () +void FileBrowser::storeCurrentValue() +{ +} + +void FileBrowser::updateProfileList() { // submenu applmenu int p = 0; @@ -2085,6 +2089,10 @@ void FileBrowser::updateProfileList () subMenuList.clear(); } +void FileBrowser::restoreValue() +{ +} + void FileBrowser::openRequested( std::vector mselected) { std::vector entries; diff --git a/rtgui/filebrowser.h b/rtgui/filebrowser.h index 1d8bc4b2b..5debe9a6c 100644 --- a/rtgui/filebrowser.h +++ b/rtgui/filebrowser.h @@ -34,23 +34,20 @@ class ProfileStoreLabel; class FileBrowser; class FileBrowserEntry; + class FileBrowserListener { - public: - virtual ~FileBrowserListener () {} - virtual void filterApplied () {} - virtual void openRequested (std::vector tbe) {} - virtual void developRequested (std::vector tbe, bool fastmode) {} - virtual void renameRequested (std::vector tbe) {} - virtual void deleteRequested (std::vector tbe, bool inclBatchProcessed) {} - virtual void copyMoveRequested (std::vector tbe, bool moveRequested) {} - virtual void selectionChanged (std::vector tbe) {} - virtual void clearFromCacheRequested(std::vector tbe, bool leavenotrace) {} - virtual bool isInTabMode () - { - return false; - } + virtual ~FileBrowserListener() = default; + virtual void filterApplied() = 0; + virtual void openRequested(const std::vector& tbe) = 0; + virtual void developRequested(const std::vector& tbe, bool fastmode) = 0; + virtual void renameRequested(const std::vector& tbe) = 0; + virtual void deleteRequested(const std::vector& tbe, bool inclBatchProcessed) = 0; + virtual void copyMoveRequested(const std::vector& tbe, bool moveRequested) = 0; + virtual void selectionChanged(const std::vector& tbe) = 0; + virtual void clearFromCacheRequested(const std::vector& tbe, bool leavenotrace) = 0; + virtual bool isInTabMode() const = 0; }; /* @@ -203,7 +200,9 @@ public: // exportpanel interface void exportRequested(); - void updateProfileList (); + void storeCurrentValue(); + void updateProfileList(); + void restoreValue(); type_trash_changed trash_changed(); }; diff --git a/rtgui/filebrowserentry.cc b/rtgui/filebrowserentry.cc index 71e6aef24..c91f95912 100644 --- a/rtgui/filebrowserentry.cc +++ b/rtgui/filebrowserentry.cc @@ -209,7 +209,7 @@ void FileBrowserEntry::procParamsChanged (Thumbnail* thm, int whoChangedIt) } } -void FileBrowserEntry::updateImage (rtengine::IImage8* img, double scale, rtengine::procparams::CropParams cropParams) +void FileBrowserEntry::updateImage(rtengine::IImage8* img, double scale, const rtengine::procparams::CropParams& cropParams) { if (!feih) { return; @@ -260,7 +260,7 @@ void FileBrowserEntry::updateImage (rtengine::IImage8* img, double scale, rtengi idle_register.add(func, param, priority); } -void FileBrowserEntry::_updateImage (rtengine::IImage8* img, double s, rtengine::procparams::CropParams cropParams) +void FileBrowserEntry::_updateImage(rtengine::IImage8* img, double s, const rtengine::procparams::CropParams& cropParams) { MYWRITERLOCK(l, lockRW); diff --git a/rtgui/filebrowserentry.h b/rtgui/filebrowserentry.h index ada726dfc..5d5bd7e8e 100644 --- a/rtgui/filebrowserentry.h +++ b/rtgui/filebrowserentry.h @@ -99,8 +99,8 @@ public: // thumbnaillistener interface void procParamsChanged (Thumbnail* thm, int whoChangedIt); // thumbimageupdatelistener interface - void updateImage (rtengine::IImage8* img, double scale, rtengine::procparams::CropParams cropParams); - void _updateImage (rtengine::IImage8* img, double scale, rtengine::procparams::CropParams cropParams); // inside gtk thread + void updateImage(rtengine::IImage8* img, double scale, const rtengine::procparams::CropParams& cropParams); + void _updateImage(rtengine::IImage8* img, double scale, const rtengine::procparams::CropParams& cropParams); // inside gtk thread virtual bool motionNotify (int x, int y); virtual bool pressNotify (int button, int type, int bstate, int x, int y); diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index 2271c05c7..55e293718 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -749,18 +749,6 @@ void FileCatalog::_refreshProgressBar () } } -void FileCatalog::filterApplied() -{ - const auto func = [](gpointer data) -> gboolean { - static_cast(data)->_refreshProgressBar(); - - return FALSE; - }; - - idle_register.add(func, this); -} - - void FileCatalog::previewReady (int dir_id, FileBrowserEntry* fdn) { @@ -962,9 +950,19 @@ int openRequestedUI (void* p) return 0; } -void FileCatalog::openRequested (std::vector tmb) +void FileCatalog::filterApplied() { + const auto func = [](gpointer data) -> gboolean { + static_cast(data)->_refreshProgressBar(); + return FALSE; + }; + + idle_register.add(func, this); +} + +void FileCatalog::openRequested(const std::vector& tmb) +{ FCOIParams* params = new FCOIParams; params->catalog = this; params->tmb = tmb; @@ -976,9 +974,8 @@ void FileCatalog::openRequested (std::vector tmb) idle_register.add(openRequestedUI, params); } -void FileCatalog::deleteRequested (std::vector tbe, bool inclBatchProcessed) +void FileCatalog::deleteRequested(const std::vector& tbe, bool inclBatchProcessed) { - if (tbe.empty()) { return; } @@ -1017,15 +1014,12 @@ void FileCatalog::deleteRequested (std::vector tbe, bool inc } } - -void FileCatalog::copyMoveRequested (std::vector tbe, bool moveRequested) +void FileCatalog::copyMoveRequested(const std::vector& tbe, bool moveRequested) { - if (tbe.empty()) { return; } - Glib::ustring fc_title; if (moveRequested) { @@ -1129,9 +1123,9 @@ void FileCatalog::copyMoveRequested (std::vector tbe, bool m _refreshProgressBar(); } // Gtk::RESPONSE_OK } -void FileCatalog::developRequested (std::vector tbe, bool fastmode) -{ +void FileCatalog::developRequested(const std::vector& tbe, bool fastmode) +{ if (listener) { std::vector entries; @@ -1262,23 +1256,8 @@ void FileCatalog::developRequested (std::vector tbe, bool fas } } -void FileCatalog::exportRequested () +void FileCatalog::renameRequested(const std::vector& tbe) { - -} - -void FileCatalog::setExportPanel (ExportPanel* expanel) -{ - - exportPanel = expanel; - exportPanel->set_sensitive (false); - exportPanel->setExportPanelListener (this); - fileBrowser->setExportPanel(expanel); -} - -void FileCatalog::renameRequested (std::vector tbe) -{ - RenameDialog* renameDlg = new RenameDialog ((Gtk::Window*)get_toplevel()); for (size_t i = 0; i < tbe.size(); i++) { @@ -1333,9 +1312,15 @@ void FileCatalog::renameRequested (std::vector tbe) delete renameDlg; } -void FileCatalog::clearFromCacheRequested (std::vector tbe, bool leavenotrace) +void FileCatalog::selectionChanged(const std::vector& tbe) { + if (fslistener) { + fslistener->selectionChanged (tbe); + } +} +void FileCatalog::clearFromCacheRequested(const std::vector& tbe, bool leavenotrace) +{ if (tbe.empty()) { return; } @@ -1347,6 +1332,11 @@ void FileCatalog::clearFromCacheRequested (std::vector tbe, } } +bool FileCatalog::isInTabMode() const +{ + return inTabMode; +} + void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b, bool isMouseClick) { @@ -1966,12 +1956,8 @@ void FileCatalog::refreshEditedState (const std::set& efiles) fileBrowser->refreshEditedState (efiles); } -void FileCatalog::selectionChanged (std::vector tbe) +void FileCatalog::exportRequested() { - - if (fslistener) { - fslistener->selectionChanged (tbe); - } } // Called within GTK UI thread @@ -1991,6 +1977,15 @@ void FileCatalog::setFilterPanel (FilterPanel* fpanel) filterPanel->set_sensitive (false); filterPanel->setFilterPanelListener (this); } + +void FileCatalog::setExportPanel(ExportPanel* expanel) +{ + exportPanel = expanel; + exportPanel->set_sensitive (false); + exportPanel->setExportPanelListener (this); + fileBrowser->setExportPanel(expanel); +} + void FileCatalog::trashChanged () { if (trashIsEmpty()) { diff --git a/rtgui/filecatalog.h b/rtgui/filecatalog.h index af16fc8ae..0af52fd28 100644 --- a/rtgui/filecatalog.h +++ b/rtgui/filecatalog.h @@ -212,13 +212,16 @@ public: void refreshThumbImages (); void refreshHeight (); - void openRequested (std::vector tbe); - void deleteRequested (std::vector tbe, bool inclBatchProcessed); - void copyMoveRequested (std::vector tbe, bool moveRequested); - void developRequested (std::vector tbe, bool fastmode); - void renameRequested (std::vector tbe); - void clearFromCacheRequested(std::vector tbe, bool leavenotrace); - void selectionChanged (std::vector tbe); + void filterApplied(); + void openRequested(const std::vector& tbe); + void deleteRequested(const std::vector& tbe, bool inclBatchProcessed); + void copyMoveRequested(const std::vector& tbe, bool moveRequested); + void developRequested(const std::vector& tbe, bool fastmode); + void renameRequested(const std::vector& tbe); + void selectionChanged(const std::vector& tbe); + void clearFromCacheRequested(const std::vector& tbe, bool leavenotrace); + bool isInTabMode() const; + void emptyTrash (); bool trashIsEmpty (); @@ -277,11 +280,6 @@ public: bool handleShortcutKey (GdkEventKey* event); - bool isInTabMode() - { - return inTabMode; - } - bool CheckSidePanelsVisibility(); void toggleSidePanels(); void toggleLeftPanel(); @@ -289,7 +287,6 @@ public: void showToolBar(); void hideToolBar(); - void filterApplied(); #ifndef _WIN32 void on_dir_changed (const Glib::RefPtr& file, const Glib::RefPtr& other_file, Gio::FileMonitorEvent event_type, bool internal); diff --git a/rtgui/filepanel.cc b/rtgui/filepanel.cc index 3cb5afa4c..f75983ac0 100644 --- a/rtgui/filepanel.cc +++ b/rtgui/filepanel.cc @@ -228,7 +228,6 @@ void FilePanel::on_NB_switch_page(Gtk::Widget* page, guint page_num) bool FilePanel::fileSelected (Thumbnail* thm) { - if (!parent) { return false; } @@ -258,6 +257,16 @@ bool FilePanel::fileSelected (Thumbnail* thm) sigc::bind(sigc::mem_fun(*this, &FilePanel::imageLoaded), thm, ld) ); return true; } + +bool FilePanel::addBatchQueueJobs(const std::vector& entries) +{ + if (parent) { + parent->addBatchQueueJobs (entries); + } + + return true; +} + bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnector *pc ) { @@ -365,16 +374,6 @@ void FilePanel::open (const Glib::ustring& d) } } -bool FilePanel::addBatchQueueJobs ( std::vector &entries ) -{ - - if (parent) { - parent->addBatchQueueJobs (entries); - } - - return true; -} - void FilePanel::optionsChanged () { diff --git a/rtgui/filepanel.h b/rtgui/filepanel.h index 3ecf7a33b..8be0229bc 100644 --- a/rtgui/filepanel.h +++ b/rtgui/filepanel.h @@ -36,8 +36,7 @@ class RTWindow; class FilePanel final : public Gtk::HPaned, - public FileSelectionListener, - public PParamsChangeListener + public FileSelectionListener { public: FilePanel (); @@ -72,8 +71,8 @@ public: void saveOptions (); // interface fileselectionlistener - bool fileSelected (Thumbnail* thm); - bool addBatchQueueJobs ( std::vector &entries ); + bool fileSelected(Thumbnail* thm); + bool addBatchQueueJobs(const std::vector& entries); void optionsChanged (); bool imageLoaded( Thumbnail* thm, ProgressConnector * ); diff --git a/rtgui/fileselectionchangelistener.h b/rtgui/fileselectionchangelistener.h index 1ad905d17..5f1b20fcc 100644 --- a/rtgui/fileselectionchangelistener.h +++ b/rtgui/fileselectionchangelistener.h @@ -19,13 +19,13 @@ #ifndef _FILESELECTIONCHANGELISTENER_ #define _FILESELECTIONCHANGELISTENER_ -#include "thumbnail.h" +class Thumbnail; class FileSelectionChangeListener { - public: - virtual void selectionChanged (const std::vector& selected) {} + virtual ~FileSelectionChangeListener() = default; + virtual void selectionChanged(const std::vector& selected) = 0; }; #endif diff --git a/rtgui/fileselectionlistener.h b/rtgui/fileselectionlistener.h index dc6434dab..0cac24d46 100644 --- a/rtgui/fileselectionlistener.h +++ b/rtgui/fileselectionlistener.h @@ -19,15 +19,15 @@ #ifndef _FILESELECTIONLISTENER_ #define _FILESELECTIONLISTENER_ -#include "thumbnail.h" -#include "batchqueueentry.h" +class Thumbnail; +class BatchQueueEntry; class FileSelectionListener { - public: - virtual bool fileSelected (Thumbnail* thm) = 0; - virtual bool addBatchQueueJobs ( std::vector &entries ) = 0; + virtual ~FileSelectionListener() = default; + virtual bool fileSelected(Thumbnail* thm) = 0; + virtual bool addBatchQueueJobs(const std::vector& entries) = 0; }; #endif diff --git a/rtgui/filmsimulation.cc b/rtgui/filmsimulation.cc index 73e35b2f8..f929048b8 100644 --- a/rtgui/filmsimulation.cc +++ b/rtgui/filmsimulation.cc @@ -106,14 +106,18 @@ void FilmSimulation::enabledChanged () } } -void FilmSimulation::adjusterChanged( Adjuster* a, double newval ) +void FilmSimulation::adjusterChanged(Adjuster* a, double newval) { - if (listener && (multiImage || getEnabled()) ) { - Glib::ustring value = a->getTextValue(); - listener->panelChanged ( EvFilmSimulationStrength, value ); + if (listener && (multiImage || getEnabled())) { + const Glib::ustring value = a->getTextValue(); + listener->panelChanged(EvFilmSimulationStrength, value); } } +void FilmSimulation::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void FilmSimulation::setBatchMode( bool batchMode ) { ToolPanel::setBatchMode( batchMode ); diff --git a/rtgui/filmsimulation.h b/rtgui/filmsimulation.h index 8f627c352..72ef019c5 100644 --- a/rtgui/filmsimulation.h +++ b/rtgui/filmsimulation.h @@ -53,12 +53,13 @@ class FilmSimulation : public ToolParamBlock, public AdjusterListener, public Fo public: FilmSimulation(); - void adjusterChanged( Adjuster* a, double newval ); - void setBatchMode( bool batchMode ); - void read( const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr ); - void write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr ); - void setAdjusterBehavior( bool strength ); - void trimValues( rtengine::procparams::ProcParams* pp ); + void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); + void setBatchMode(bool batchMode); + void read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); + void write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); + void setAdjusterBehavior(bool strength); + void trimValues(rtengine::procparams::ProcParams* pp); private: void onClutSelected(); diff --git a/rtgui/filterpanel.cc b/rtgui/filterpanel.cc index 4ba332d3d..c140acfb0 100644 --- a/rtgui/filterpanel.cc +++ b/rtgui/filterpanel.cc @@ -35,7 +35,9 @@ FilterPanel::FilterPanel () : listener (nullptr) Gtk::HBox* fnhb = Gtk::manage(new Gtk::HBox ()); fnvb->pack_start (*enaFNumber, Gtk::PACK_SHRINK, 0); fnumberFrom = Gtk::manage(new Gtk::Entry ()); + fnumberFrom->set_width_chars(1); fnumberTo = Gtk::manage(new Gtk::Entry ()); + fnumberTo->set_width_chars(1); fnhb->pack_start (*fnumberFrom, true, true, 2); fnhb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4); fnhb->pack_start (*fnumberTo, true, true, 2); @@ -47,7 +49,9 @@ FilterPanel::FilterPanel () : listener (nullptr) Gtk::HBox* shb = Gtk::manage(new Gtk::HBox ()); svb->pack_start (*enaShutter, Gtk::PACK_SHRINK, 0); shutterFrom = Gtk::manage(new Gtk::Entry ()); + shutterFrom->set_width_chars(1); shutterTo = Gtk::manage(new Gtk::Entry ()); + shutterTo->set_width_chars(1); shb->pack_start (*shutterFrom, true, true, 2); shb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4); shb->pack_start (*shutterTo, true, true, 2); @@ -59,7 +63,9 @@ FilterPanel::FilterPanel () : listener (nullptr) Gtk::HBox* ihb = Gtk::manage(new Gtk::HBox ()); ivb->pack_start (*enaISO, Gtk::PACK_SHRINK, 0); isoFrom = Gtk::manage(new Gtk::Entry ()); + isoFrom->set_width_chars(1); isoTo = Gtk::manage(new Gtk::Entry ()); + isoTo->set_width_chars(1); ihb->pack_start (*isoFrom, true, true, 2); ihb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4); ihb->pack_start (*isoTo, true, true, 2); @@ -71,7 +77,9 @@ FilterPanel::FilterPanel () : listener (nullptr) Gtk::HBox* fhb = Gtk::manage(new Gtk::HBox ()); fvb->pack_start (*enaFocalLen, Gtk::PACK_SHRINK, 0); focalFrom = Gtk::manage(new Gtk::Entry ()); + focalFrom->set_width_chars(1); focalTo = Gtk::manage(new Gtk::Entry ()); + focalTo->set_width_chars(1); fhb->pack_start (*focalFrom, true, true, 2); fhb->pack_start (*Gtk::manage(new Gtk::Label(" - ")), false, false, 4); fhb->pack_start (*focalTo, true, true, 2); diff --git a/rtgui/filterpanel.h b/rtgui/filterpanel.h index f37695754..7f32a88d9 100644 --- a/rtgui/filterpanel.h +++ b/rtgui/filterpanel.h @@ -24,9 +24,9 @@ class FilterPanelListener { - public: - virtual void exifFilterChanged () {} + virtual ~FilterPanelListener() = default; + virtual void exifFilterChanged () = 0; }; class FilterPanel : public Gtk::VBox diff --git a/rtgui/flatfield.cc b/rtgui/flatfield.cc index 1b77ae316..83ab15127 100644 --- a/rtgui/flatfield.cc +++ b/rtgui/flatfield.cc @@ -232,11 +232,10 @@ void FlatField::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedit } -void FlatField::adjusterChanged (Adjuster* a, double newval) +void FlatField::adjusterChanged(Adjuster* a, double newval) { if (listener) { - - Glib::ustring value = a->getTextValue(); + const Glib::ustring value = a->getTextValue(); if (a == flatFieldBlurRadius) { listener->panelChanged (EvFlatFieldBlurRadius, value); @@ -248,7 +247,6 @@ void FlatField::adjusterChanged (Adjuster* a, double newval) void FlatField::adjusterAutoToggled (Adjuster* a, bool newval) { - if (multiImage) { if (flatFieldClipControl->getAutoInconsistent()) { flatFieldClipControl->setAutoInconsistent(false); diff --git a/rtgui/gradient.cc b/rtgui/gradient.cc index e14739fb4..82684060a 100644 --- a/rtgui/gradient.cc +++ b/rtgui/gradient.cc @@ -249,10 +249,9 @@ void Gradient::setDefaults (const ProcParams* defParams, const ParamsEdited* ped } } -void Gradient::adjusterChanged (Adjuster* a, double newval) +void Gradient::adjusterChanged(Adjuster* a, double newval) { - - updateGeometry (int(centerX->getValue()), int(centerY->getValue()), feather->getValue(), degree->getValue()); + updateGeometry(int(centerX->getValue()), int(centerY->getValue()), feather->getValue(), degree->getValue()); if (listener && getEnabled()) { @@ -268,6 +267,10 @@ void Gradient::adjusterChanged (Adjuster* a, double newval) } } +void Gradient::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void Gradient::enabledChanged () { diff --git a/rtgui/gradient.h b/rtgui/gradient.h index 2201ea7c4..c34364cb5 100644 --- a/rtgui/gradient.h +++ b/rtgui/gradient.h @@ -43,6 +43,7 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged (); void setAdjusterBehavior (bool degreeadd, bool featheradd, bool strengthadd, bool centeradd); void trimValues (rtengine::procparams::ProcParams* pp); diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index a2b38760b..f8129b0fb 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -945,8 +945,8 @@ bool MyScrolledWindow::on_scroll_event (GdkEventScroll* event) double step = adjust->get_step_increment(); double value2 = 0.; - printf("MyScrolledwindow::on_scroll_event / delta_x=%.5f, delta_y=%.5f, direction=%d, type=%d, send_event=%d\n", - event->delta_x, event->delta_y, (int)event->direction, (int)event->type, event->send_event); +// printf("MyScrolledwindow::on_scroll_event / delta_x=%.5f, delta_y=%.5f, direction=%d, type=%d, send_event=%d\n", +// event->delta_x, event->delta_y, (int)event->direction, (int)event->type, event->send_event); if (event->direction == GDK_SCROLL_DOWN) { value2 = value + step; @@ -1020,8 +1020,8 @@ bool MyScrolledToolbar::on_scroll_event (GdkEventScroll* event) double step = adjust->get_step_increment() * 2; double value2 = 0.; - printf("MyScrolledToolbar::on_scroll_event / delta_x=%.5f, delta_y=%.5f, direction=%d, type=%d, send_event=%d\n", - event->delta_x, event->delta_y, (int)event->direction, (int)event->type, event->send_event); +// printf("MyScrolledToolbar::on_scroll_event / delta_x=%.5f, delta_y=%.5f, direction=%d, type=%d, send_event=%d\n", +// event->delta_x, event->delta_y, (int)event->direction, (int)event->type, event->send_event); if (event->direction == GDK_SCROLL_DOWN) { value2 = rtengine::min(value + step, upper); @@ -1076,8 +1076,8 @@ MyComboBoxText::MyComboBoxText (bool has_entry) : Gtk::ComboBoxText(has_entry) bool MyComboBoxText::on_scroll_event (GdkEventScroll* event) { - printf("MyComboboxText::on_scroll_event / delta_x=%.5f, delta_y=%.5f, direction=%d, type=%d, send_event=%d\n", - event->delta_x, event->delta_y, (int)event->direction, (int)event->type, event->send_event); +// printf("MyComboboxText::on_scroll_event / delta_x=%.5f, delta_y=%.5f, direction=%d, type=%d, send_event=%d\n", +// event->delta_x, event->delta_y, (int)event->direction, (int)event->type, event->send_event); // If Shift is pressed, the widget is modified if (event->state & GDK_SHIFT_MASK) { Gtk::ComboBoxText::on_scroll_event(event); @@ -1235,8 +1235,8 @@ bool MySpinButton::on_scroll_event (GdkEventScroll* event) bool MyHScale::on_scroll_event (GdkEventScroll* event) { - printf("MyHScale::on_scroll_event / delta_x=%.5f, delta_y=%.5f, direction=%d, type=%d, send_event=%d\n", - event->delta_x, event->delta_y, (int)event->direction, (int)event->type, event->send_event); +// printf("MyHScale::on_scroll_event / delta_x=%.5f, delta_y=%.5f, direction=%d, type=%d, send_event=%d\n", +// event->delta_x, event->delta_y, (int)event->direction, (int)event->type, event->send_event); // If Shift is pressed, the widget is modified if (event->state & GDK_SHIFT_MASK) { Gtk::HScale::on_scroll_event(event); diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 6ff48a9fd..7c136cbfe 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -345,7 +345,7 @@ void HistogramPanel::reorder (Gtk::PositionType align) } // DrawModeListener interface: -void HistogramPanel::toggle_button_mode () +void HistogramPanel::toggleButtonMode () { if (options.histogramDrawMode == 0) showMode->set_image(*mode0Image); @@ -734,7 +734,16 @@ void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool c, bool updateBackBuffer (); } -void HistogramArea::update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw) +void HistogramArea::update( + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histChroma, + const LUTu& histRedRaw, + const LUTu& histGreenRaw, + const LUTu& histBlueRaw +) { if (histRed) { rhist = histRed; @@ -1042,7 +1051,7 @@ bool HistogramArea::on_button_press_event (GdkEventButton* event) options.histogramDrawMode = (options.histogramDrawMode + 1) % 3; if (myDrawModeListener) { - myDrawModeListener->toggle_button_mode (); + myDrawModeListener->toggleButtonMode (); } updateBackBuffer (); diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index 7c2e11162..9a8f58938 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -110,8 +110,8 @@ private: class DrawModeListener { public: - virtual ~DrawModeListener() {} - virtual void toggle_button_mode () {} + virtual ~DrawModeListener() = default; + virtual void toggleButtonMode() = 0; }; class HistogramArea : public Gtk::DrawingArea, public BackBuffer, private HistogramScaling @@ -144,7 +144,16 @@ public: ~HistogramArea(); void updateBackBuffer (); - void update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw); + void update( + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histChroma, + const LUTu& histRedRaw, + const LUTu& histGreenRaw, + const LUTu& histBlueRaw + ); void updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, int mode); void on_realize(); bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr); @@ -209,9 +218,17 @@ public: HistogramPanel (); ~HistogramPanel (); - void histogramChanged (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw) + void histogramChanged( + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histChroma, + const LUTu& histRedRaw, + const LUTu& histGreenRaw, + const LUTu& histBlueRaw) { - histogramArea->update (histRed, histGreen, histBlue, histLuma, histChroma, histRedRaw, histGreenRaw, histBlueRaw); + histogramArea->update(histRed, histGreen, histBlue, histLuma, histChroma, histRedRaw, histGreenRaw, histBlueRaw); } // pointermotionlistener interface void pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw = false); @@ -232,7 +249,7 @@ public: void resized (Gtk::Allocation& req); // drawModeListener interface - void toggle_button_mode (); + void toggleButtonMode (); }; #endif diff --git a/rtgui/history.cc b/rtgui/history.cc index ad88317e2..fc13188f7 100644 --- a/rtgui/history.cc +++ b/rtgui/history.cc @@ -160,12 +160,6 @@ void History::initHistory () bookmarkModel->clear (); } -void History::clearParamChanges () -{ - - initHistory (); -} - void History::historySelectionChanged () { @@ -222,9 +216,13 @@ void History::bookmarkSelectionChanged () } } -void History::procParamsChanged (ProcParams* params, ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited) +void History::procParamsChanged( + const ProcParams* params, + const ProcEvent& ev, + const Glib::ustring& descr, + const ParamsEdited* paramsEdited +) { - // to prevent recursion, we filter out the events triggered by the history and events that should not be registered if (ev == EvHistoryBrowsed || ev == EvMonitorTransform || descr == "") { return; @@ -308,6 +306,11 @@ void History::procParamsChanged (ProcParams* params, ProcEvent ev, Glib::ustring selchangebm.block (false); } +void History::clearParamChanges () +{ + initHistory (); +} + void History::addBookmarkWithText (Glib::ustring text) { diff --git a/rtgui/history.h b/rtgui/history.h index 8fbe256e4..4b9499502 100644 --- a/rtgui/history.h +++ b/rtgui/history.h @@ -27,9 +27,9 @@ class HistoryBeforeLineListener { - public: - virtual void historyBeforeLineChanged (const rtengine::procparams::ProcParams& params) {} + virtual ~HistoryBeforeLineListener() = default; + virtual void historyBeforeLineChanged(const rtengine::procparams::ProcParams& params) = 0; }; class History : public Gtk::VBox, public PParamsChangeListener @@ -106,7 +106,12 @@ public: } // pparamschangelistener interface - void procParamsChanged (rtengine::procparams::ProcParams* params, rtengine::ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited = nullptr); + void procParamsChanged( + const rtengine::procparams::ProcParams* params, + const rtengine::ProcEvent& ev, + const Glib::ustring& descr, + const ParamsEdited* paramsEdited = nullptr + ); void clearParamChanges (); void historySelectionChanged (); diff --git a/rtgui/hsvequalizer.h b/rtgui/hsvequalizer.h index fc3d22984..2d80bb626 100644 --- a/rtgui/hsvequalizer.h +++ b/rtgui/hsvequalizer.h @@ -29,7 +29,7 @@ #include "colorprovider.h" -class HSVEqualizer : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public CurveListener, public ColorProvider +class HSVEqualizer : public ToolParamBlock, public FoldableToolPanel, public CurveListener, public ColorProvider { protected: diff --git a/rtgui/iccprofilecreator.cc b/rtgui/iccprofilecreator.cc index 8ae8d4ab9..8d6e09553 100644 --- a/rtgui/iccprofilecreator.cc +++ b/rtgui/iccprofilecreator.cc @@ -363,7 +363,7 @@ void ICCProfileCreator::updateICCVersion() } } -void ICCProfileCreator::adjusterChanged (Adjuster* a, double newval) +void ICCProfileCreator::adjusterChanged(Adjuster* a, double newval) { if (a == aPrimariesRedX || a == aPrimariesRedY || a == aPrimariesGreenX || a == aPrimariesGreenY || @@ -382,6 +382,10 @@ void ICCProfileCreator::adjusterChanged (Adjuster* a, double newval) } } +void ICCProfileCreator::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void ICCProfileCreator::primariesChanged() { if (primaries->get_active_row_number() > 0) { diff --git a/rtgui/iccprofilecreator.h b/rtgui/iccprofilecreator.h index c3f2e48a1..4ec73ff5c 100644 --- a/rtgui/iccprofilecreator.h +++ b/rtgui/iccprofilecreator.h @@ -91,7 +91,8 @@ private: void primariesChanged(); void illuminantChanged(); void trcPresetsChanged(); - void adjusterChanged (Adjuster* a, double newval); + void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); static std::vector getGamma(); Glib::ustring getPrimariesPresetName(const Glib::ustring &preset); void getPrimaries(const Glib::ustring &preset, float *p, ColorTemp &temp); diff --git a/rtgui/icmpanel.cc b/rtgui/icmpanel.cc index 01b15d4b8..bb7fdd89b 100644 --- a/rtgui/icmpanel.cc +++ b/rtgui/icmpanel.cc @@ -698,6 +698,10 @@ void ICMPanel::adjusterChanged(Adjuster* a, double newval) } } +void ICMPanel::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void ICMPanel::wpChanged() { if (listener) { diff --git a/rtgui/icmpanel.h b/rtgui/icmpanel.h index e04a4397e..bd4aa493e 100644 --- a/rtgui/icmpanel.h +++ b/rtgui/icmpanel.h @@ -30,10 +30,9 @@ class ICMPanelListener { - public: - virtual ~ICMPanelListener() {} - virtual void saveInputICCReference(Glib::ustring fname, bool apply_wb) {} + virtual ~ICMPanelListener() = default; + virtual void saveInputICCReference(const Glib::ustring& fname, bool apply_wb) = 0; }; class ICMPanel : @@ -127,6 +126,7 @@ public: void setBatchMode(bool batchMode); void setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void wpChanged(); void wtrcinChanged(); diff --git a/rtgui/imagearea.cc b/rtgui/imagearea.cc index cd148acff..0bdb7f11c 100644 --- a/rtgui/imagearea.cc +++ b/rtgui/imagearea.cc @@ -302,8 +302,8 @@ bool ImageArea::on_button_press_event (GdkEventButton* event) bool ImageArea::on_scroll_event (GdkEventScroll* event) { - printf("ImageArea::on_scroll_event / delta_x=%.5f, delta_y=%.5f, direction=%d, type=%d, send_event=%d\n", - event->delta_x, event->delta_y, (int)event->direction, (int)event->type, event->send_event); +// printf("ImageArea::on_scroll_event / delta_x=%.5f, delta_y=%.5f, direction=%d, type=%d, send_event=%d\n", +// event->delta_x, event->delta_y, (int)event->direction, (int)event->type, event->send_event); CropWindow* cw = getCropWindow (event->x, event->y); if (cw) { diff --git a/rtgui/imageareatoollistener.h b/rtgui/imageareatoollistener.h index d11ec2e6f..705888676 100644 --- a/rtgui/imageareatoollistener.h +++ b/rtgui/imageareatoollistener.h @@ -27,23 +27,14 @@ class ImageAreaToolListener { public: - virtual ~ImageAreaToolListener() {} - virtual void spotWBselected (int x, int y, Thumbnail* thm = nullptr) {} - virtual void sharpMaskSelected (bool sharpMask) {} - virtual int getSpotWBRectSize () - { - return 8; - } - virtual void cropSelectionReady () {} - virtual void rotateSelectionReady (double rotate_deg, Thumbnail* thm = nullptr) {} - virtual ToolBar* getToolBar () - { - return nullptr; - } - virtual CropGUIListener* startCropEditing (Thumbnail* thm = nullptr) - { - return nullptr; - } + virtual ~ImageAreaToolListener() = default; + virtual void spotWBselected(int x, int y, Thumbnail* thm = nullptr) = 0; + virtual void sharpMaskSelected(bool sharpMask) = 0; + virtual int getSpotWBRectSize() const = 0; + virtual void cropSelectionReady() = 0; + virtual void rotateSelectionReady(double rotate_deg, Thumbnail* thm = nullptr) = 0; + virtual ToolBar* getToolBar() const = 0; + virtual CropGUIListener* startCropEditing(Thumbnail* thm = nullptr) = 0; }; #endif diff --git a/rtgui/impulsedenoise.cc b/rtgui/impulsedenoise.cc index 5aba32d77..3e5a9a980 100644 --- a/rtgui/impulsedenoise.cc +++ b/rtgui/impulsedenoise.cc @@ -77,15 +77,17 @@ void ImpulseDenoise::setDefaults (const ProcParams* defParams, const ParamsEdite } } -void ImpulseDenoise::adjusterChanged (Adjuster* a, double newval) +void ImpulseDenoise::adjusterChanged(Adjuster* a, double newval) { - if (listener && getEnabled()) { - listener->panelChanged (EvIDNThresh, Glib::ustring::format (std::setw(2), std::fixed, std::setprecision(1), a->getValue())); } } +void ImpulseDenoise::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void ImpulseDenoise::enabledChanged () { if (listener) { diff --git a/rtgui/impulsedenoise.h b/rtgui/impulsedenoise.h index cd8de582b..14b51eb7a 100644 --- a/rtgui/impulsedenoise.h +++ b/rtgui/impulsedenoise.h @@ -40,6 +40,7 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged (); void setAdjusterBehavior (bool threshadd); diff --git a/rtgui/labcurve.cc b/rtgui/labcurve.cc index 2669079ab..2e851c321 100644 --- a/rtgui/labcurve.cc +++ b/rtgui/labcurve.cc @@ -521,9 +521,8 @@ void LCurve::curveChanged (CurveEditor* ce) } } -void LCurve::adjusterChanged (Adjuster* a, double newval) +void LCurve::adjusterChanged(Adjuster* a, double newval) { - Glib::ustring costr; if (a == brightness) { @@ -565,6 +564,10 @@ void LCurve::adjusterChanged (Adjuster* a, double newval) } } +void LCurve::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void LCurve::colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller) { @@ -642,14 +645,21 @@ void LCurve::setBatchMode (bool batchMode) } -void LCurve::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) +void LCurve::updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI +) { - lshape->updateBackgroundHistogram (histLCurve); ccshape->updateBackgroundHistogram (histCCurve); -// clshape->updateBackgroundHistogram (histCLurve); -// lcshape->updateBackgroundHistogram (histLLCurve); - } void LCurve::setAdjusterBehavior (bool bradd, bool contradd, bool satadd) diff --git a/rtgui/labcurve.h b/rtgui/labcurve.h index e0b912559..d15f7d144 100644 --- a/rtgui/labcurve.h +++ b/rtgui/labcurve.h @@ -75,10 +75,22 @@ public: void curveChanged (CurveEditor* ce); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void avoidcolorshift_toggled (); void lcredsk_toggled(); - void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); + void updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI + ); virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller); diff --git a/rtgui/lensgeomlistener.h b/rtgui/lensgeomlistener.h index 3f9866e95..c6ba966b1 100644 --- a/rtgui/lensgeomlistener.h +++ b/rtgui/lensgeomlistener.h @@ -21,8 +21,8 @@ class LensGeomListener { - public: + virtual ~LensGeomListener() = default; virtual void straightenRequested () = 0; virtual void autoCropRequested () = 0; virtual double autoDistorRequested () = 0; diff --git a/rtgui/localcontrast.cc b/rtgui/localcontrast.cc index 727479c34..2be811a99 100644 --- a/rtgui/localcontrast.cc +++ b/rtgui/localcontrast.cc @@ -115,7 +115,6 @@ void LocalContrast::setDefaults(const ProcParams *defParams, const ParamsEdited } } - void LocalContrast::adjusterChanged(Adjuster* a, double newval) { if (listener && getEnabled()) { @@ -131,6 +130,9 @@ void LocalContrast::adjusterChanged(Adjuster* a, double newval) } } +void LocalContrast::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} void LocalContrast::enabledChanged () { diff --git a/rtgui/localcontrast.h b/rtgui/localcontrast.h index 4f6f872af..89341c976 100644 --- a/rtgui/localcontrast.h +++ b/rtgui/localcontrast.h @@ -47,6 +47,7 @@ public: void setBatchMode(bool batchMode); void adjusterChanged(Adjuster *a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged(); void setAdjusterBehavior(bool radiusAdd, bool amountAdd, bool darknessAdd, bool lightnessAdd); }; diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index b5a7c2d41..3489d0c53 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -2202,6 +2202,28 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe */ } +void Locallab::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + +void Locallab::adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) +{ +} +void Locallab::adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) +{ +} + + +void Locallab::adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) +{ +} + +void Locallab::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) +{ +} + + + void Locallab::adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) { printf("adjusterChangedTS\n"); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 7bec4c1f8..fb13027b0 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -245,9 +245,16 @@ public: // Adjuster event function void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); // ThresholdAdjuster event functions virtual void colorForValue(double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller); std::vector getCurvePoints(ThresholdSelector* tAdjuster) const; void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop); + void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop); + void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight); + void adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight); + void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR); + + }; diff --git a/rtgui/lockablecolorpicker.h b/rtgui/lockablecolorpicker.h index 308f5d6d5..211f8de4d 100644 --- a/rtgui/lockablecolorpicker.h +++ b/rtgui/lockablecolorpicker.h @@ -27,12 +27,13 @@ class CropWindow; -class LockablePickerToolListener { +class LockablePickerToolListener +{ public: - virtual ~LockablePickerToolListener () {} + virtual ~LockablePickerToolListener () = default; /// Callback on Color Picker's visibility switch - virtual void switchPickerVisibility (bool isVisible) {} + virtual void switchPickerVisibility(bool isVisible) = 0; }; class LockableColorPicker : BackBuffer diff --git a/rtgui/lwbutton.h b/rtgui/lwbutton.h index 2053911be..cccf59b11 100644 --- a/rtgui/lwbutton.h +++ b/rtgui/lwbutton.h @@ -22,13 +22,13 @@ #include class LWButton; + class LWButtonListener { - public: - virtual ~LWButtonListener () {} - virtual void buttonPressed (LWButton* button, int actionCode, void* actionData) {} - virtual void redrawNeeded (LWButton* button) {} + virtual ~LWButtonListener() = default; + virtual void buttonPressed(LWButton* button, int actionCode, void* actionData) = 0; + virtual void redrawNeeded(LWButton* button) = 0; }; class LWButton diff --git a/rtgui/main-cli.cc b/rtgui/main-cli.cc index 347161cd5..26ee4fa81 100644 --- a/rtgui/main-cli.cc +++ b/rtgui/main-cli.cc @@ -280,7 +280,7 @@ int processLineParams ( int argc, char **argv ) currParam = currParam.substr (1, currParam.length() - 2); #endif - if ( currParam.at (0) == '-' ) { + if ( currParam.at (0) == '-' && currParam.size() > 1) { switch ( currParam.at (1) ) { case 'O': copyParamsFile = true; diff --git a/rtgui/main.cc b/rtgui/main.cc index 194c33fd7..1de74ecb6 100644 --- a/rtgui/main.cc +++ b/rtgui/main.cc @@ -132,7 +132,7 @@ int processLineParams ( int argc, char **argv ) currParam = currParam.substr (1, currParam.length() - 2); #endif - if ( currParam.at (0) == '-' ) { + if ( currParam.at (0) == '-' && currParam.size() > 1 ) { switch ( currParam.at (1) ) { #ifdef WIN32 diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index a9e743e52..a72b513f7 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -292,6 +292,7 @@ void ParamsEdited::set(bool v) sh.shadows = v; sh.stonalwidth = v; sh.radius = v; + sh.lab = v; crop.enabled = v; crop.x = v; crop.y = v; @@ -966,6 +967,7 @@ void ParamsEdited::initFrom(const std::vector& sh.shadows = sh.shadows && p.sh.shadows == other.sh.shadows; sh.stonalwidth = sh.stonalwidth && p.sh.stonalwidth == other.sh.stonalwidth; sh.radius = sh.radius && p.sh.radius == other.sh.radius; + sh.lab = sh.lab && p.sh.lab == other.sh.lab; crop.enabled = crop.enabled && p.crop.enabled == other.crop.enabled; crop.x = crop.x && p.crop.x == other.crop.x; crop.y = crop.y && p.crop.y == other.crop.y; @@ -2346,6 +2348,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.sh.radius = mods.sh.radius; } + if (sh.lab) { + toEdit.sh.lab = mods.sh.lab; + } + if (crop.enabled) { toEdit.crop.enabled = mods.crop.enabled; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 5450fa77b..c0699be1e 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -402,12 +402,12 @@ class SHParamsEdited public: bool enabled; - bool hq; bool highlights; bool htonalwidth; bool shadows; bool stonalwidth; bool radius; + bool lab; }; class CropParamsEdited diff --git a/rtgui/pcvignette.cc b/rtgui/pcvignette.cc index 735b766c7..3d668fed9 100644 --- a/rtgui/pcvignette.cc +++ b/rtgui/pcvignette.cc @@ -78,9 +78,8 @@ void PCVignette::setDefaults (const ProcParams* defParams, const ParamsEdited* p } } -void PCVignette::adjusterChanged (Adjuster* a, double newval) +void PCVignette::adjusterChanged(Adjuster* a, double newval) { - if (listener && getEnabled()) { if (a == strength) { listener->panelChanged (EvPCVignetteStrength, strength->getTextValue()); @@ -92,6 +91,10 @@ void PCVignette::adjusterChanged (Adjuster* a, double newval) } } +void PCVignette::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void PCVignette::enabledChanged () { diff --git a/rtgui/pcvignette.h b/rtgui/pcvignette.h index eab1cf67d..91e876947 100644 --- a/rtgui/pcvignette.h +++ b/rtgui/pcvignette.h @@ -26,6 +26,7 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged (); void setAdjusterBehavior (bool strengthadd, bool featheradd, bool roundnessadd); void trimValues (rtengine::procparams::ProcParams* pp); diff --git a/rtgui/perspective.cc b/rtgui/perspective.cc index 4bfcc1d7b..db5e0c50b 100644 --- a/rtgui/perspective.cc +++ b/rtgui/perspective.cc @@ -88,14 +88,17 @@ void PerspCorrection::setDefaults (const ProcParams* defParams, const ParamsEdit } } -void PerspCorrection::adjusterChanged (Adjuster* a, double newval) +void PerspCorrection::adjusterChanged(Adjuster* a, double newval) { - if (listener) { listener->panelChanged (EvPerspCorr, Glib::ustring::compose ("%1=%3\n%2=%4", M("TP_PERSPECTIVE_HORIZONTAL"), M("TP_PERSPECTIVE_VERTICAL"), horiz->getValue(), vert->getValue())); } } +void PerspCorrection::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void PerspCorrection::setAdjusterBehavior (bool badd) { diff --git a/rtgui/perspective.h b/rtgui/perspective.h index 434df2b3f..a97d5d347 100644 --- a/rtgui/perspective.h +++ b/rtgui/perspective.h @@ -40,6 +40,7 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void setAdjusterBehavior (bool badd); void trimValues (rtengine::procparams::ProcParams* pp); }; diff --git a/rtgui/pparamschangelistener.h b/rtgui/pparamschangelistener.h index ff55eea00..c8338745e 100644 --- a/rtgui/pparamschangelistener.h +++ b/rtgui/pparamschangelistener.h @@ -25,20 +25,23 @@ class PParamsChangeListener { - public: - virtual ~PParamsChangeListener() {} - virtual void procParamsChanged (rtengine::procparams::ProcParams* params, rtengine::ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited = nullptr) {} - virtual void clearParamChanges () {} + virtual ~PParamsChangeListener() = default; + virtual void procParamsChanged( + const rtengine::procparams::ProcParams* params, + const rtengine::ProcEvent& ev, + const Glib::ustring& descr, + const ParamsEdited* paramsEdited = nullptr + ) = 0; + virtual void clearParamChanges() = 0; }; class BatchPParamsChangeListener { - public: - virtual ~BatchPParamsChangeListener() {} - virtual void beginBatchPParamsChange(int numberOfEntries) {} - virtual void endBatchPParamsChange() {} + virtual ~BatchPParamsChangeListener() = default; + virtual void beginBatchPParamsChange(int numberOfEntries) = 0; + virtual void endBatchPParamsChange() = 0; }; #endif diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index c2ce57f79..e09355311 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,13 +1,15 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 344 +#define PPVERSION 345 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* Log of version changes - 344 2018-09-25 + 345 2018-09-25 Added Locallab tool parameters + 344 2018-10-04 + added Lab/RGB color space selection for shadows/highlights 343 2018-09-06 raw auto ca correction avoid colour shift 342 2018-09-05 diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 1a597fd8a..bafa7dddf 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -282,8 +282,6 @@ Gtk::Widget* Preferences::getBatchProcPanel() appendBehavList(mi, M("TP_VIBRANCE_PASTELS"), ADDSET_VIBRANCE_PASTELS, false); appendBehavList(mi, M("TP_VIBRANCE_SATURATED"), ADDSET_VIBRANCE_SATURATED, false); - mi = behModel->append(); - mi->set_value(behavColumns.label, M("TP_GAMMA_OUTPUT")); mi = behModel->append(); mi->set_value(behavColumns.label, M("TP_CHMIXER_LABEL")); diff --git a/rtgui/preprocess.cc b/rtgui/preprocess.cc index 02e0ff220..9ad0953af 100644 --- a/rtgui/preprocess.cc +++ b/rtgui/preprocess.cc @@ -87,7 +87,7 @@ void PreProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedi } } -void PreProcess::adjusterChanged (Adjuster* a, double newval) +void PreProcess::adjusterChanged(Adjuster* a, double newval) { if (listener) { if (a == hdThreshold) { @@ -96,6 +96,10 @@ void PreProcess::adjusterChanged (Adjuster* a, double newval) } } +void PreProcess::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void PreProcess::hotPixelChanged () { if (batchMode) { diff --git a/rtgui/preprocess.h b/rtgui/preprocess.h index 856a9a25e..64ed110fb 100644 --- a/rtgui/preprocess.h +++ b/rtgui/preprocess.h @@ -47,7 +47,8 @@ public: void hotPixelChanged(); void deadPixelChanged(); - void adjusterChanged (Adjuster* a, double newval); + void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); //void adjusterChanged (Adjuster* a, double newval); diff --git a/rtgui/previewhandler.cc b/rtgui/previewhandler.cc index 45e46d2d8..a251986bf 100644 --- a/rtgui/previewhandler.cc +++ b/rtgui/previewhandler.cc @@ -57,7 +57,7 @@ PreviewHandler::~PreviewHandler () //----------------previewimagelistener functions-------------------- -void PreviewHandler::setImage (rtengine::IImage8* i, double scale, rtengine::procparams::CropParams cp) +void PreviewHandler::setImage(rtengine::IImage8* i, double scale, const rtengine::procparams::CropParams& cp) { pih->pending++; @@ -104,7 +104,7 @@ void PreviewHandler::setImage (rtengine::IImage8* i, double scale, rtengine::pro } -void PreviewHandler::delImage (IImage8* i) +void PreviewHandler::delImage(IImage8* i) { pih->pending++; @@ -149,7 +149,7 @@ void PreviewHandler::delImage (IImage8* i) idle_register.add(func, iap); } -void PreviewHandler::imageReady (CropParams cp) +void PreviewHandler::imageReady(const rtengine::procparams::CropParams& cp) { pih->pending++; iaimgpar* iap = new iaimgpar; diff --git a/rtgui/previewhandler.h b/rtgui/previewhandler.h index 1258083ec..7fae4121e 100644 --- a/rtgui/previewhandler.h +++ b/rtgui/previewhandler.h @@ -30,13 +30,13 @@ class PreviewListener { - public: - virtual ~PreviewListener () {} - virtual void previewImageChanged () {} + virtual ~PreviewListener() = default; + virtual void previewImageChanged() = 0; }; class PreviewHandler; + struct PreviewHandlerIdleHelper { PreviewHandler* phandler; bool destroyed; @@ -72,9 +72,9 @@ public: } // previewimagelistener - void setImage (rtengine::IImage8* img, double scale, rtengine::procparams::CropParams cp); - void delImage (rtengine::IImage8* img); - void imageReady (rtengine::procparams::CropParams cp); + void setImage(rtengine::IImage8* img, double scale, const rtengine::procparams::CropParams& cp); + void delImage(rtengine::IImage8* img); + void imageReady(const rtengine::procparams::CropParams& cp); // this function is called when a new preview image arrives from rtengine void previewImageChanged (); diff --git a/rtgui/previewloader.h b/rtgui/previewloader.h index d5207cd44..77091bcd3 100644 --- a/rtgui/previewloader.h +++ b/rtgui/previewloader.h @@ -29,9 +29,7 @@ class PreviewLoaderListener { public: - virtual ~PreviewLoaderListener() - { - } + virtual ~PreviewLoaderListener() = default; /** * @brief a preview is ready @@ -39,16 +37,12 @@ public: * @param dir_id directory ID this is for * @param fd entry */ - virtual void previewReady(int dir_id, FileBrowserEntry* fd) - { - } + virtual void previewReady(int dir_id, FileBrowserEntry* fd) = 0; /** * @brief all previews have finished loading */ - virtual void previewsFinished(int dir_id_) - { - } + virtual void previewsFinished(int dir_id_) = 0; }; class PreviewLoader : diff --git a/rtgui/previewwindow.cc b/rtgui/previewwindow.cc index f9dba53ac..cd4977bb1 100644 --- a/rtgui/previewwindow.cc +++ b/rtgui/previewwindow.cc @@ -194,24 +194,25 @@ void PreviewWindow::setImageArea (ImageArea* ia) } } -void PreviewWindow::cropPositionChanged (CropWindow* w) +void PreviewWindow::cropPositionChanged(CropWindow* w) { - queue_draw (); } -void PreviewWindow::cropWindowSizeChanged (CropWindow* w) +void PreviewWindow::cropWindowSizeChanged(CropWindow* w) { - queue_draw (); } -void PreviewWindow::cropZoomChanged (CropWindow* w) +void PreviewWindow::cropZoomChanged(CropWindow* w) { - queue_draw (); } +void PreviewWindow::initialImageArrived() +{ +} + bool PreviewWindow::on_motion_notify_event (GdkEventMotion* event) { diff --git a/rtgui/previewwindow.h b/rtgui/previewwindow.h index f50411170..ba9d8f633 100644 --- a/rtgui/previewwindow.h +++ b/rtgui/previewwindow.h @@ -66,9 +66,10 @@ public: void previewImageChanged (); // CropWindowListener interface - void cropPositionChanged (CropWindow* w); - void cropWindowSizeChanged (CropWindow* w); - void cropZoomChanged (CropWindow* w); + void cropPositionChanged(CropWindow* w); + void cropWindowSizeChanged(CropWindow* w); + void cropZoomChanged(CropWindow* w); + void initialImageArrived(); }; #endif diff --git a/rtgui/profilechangelistener.h b/rtgui/profilechangelistener.h index 79705b114..8e8dc99b5 100644 --- a/rtgui/profilechangelistener.h +++ b/rtgui/profilechangelistener.h @@ -19,27 +19,23 @@ #ifndef _PROFILECHANGELISTENER_ #define _PROFILECHANGELISTENER_ +#include + #include "../rtengine/rtengine.h" -#include class ProfileChangeListener { - public: - virtual ~ProfileChangeListener() {} - virtual void profileChange (const rtengine::procparams::PartialProfile* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited = nullptr, bool fromLastSaved = false) {} - virtual void setDefaults (rtengine::procparams::ProcParams* defparams) {} + virtual ~ProfileChangeListener() = default; + virtual void profileChange( + const rtengine::procparams::PartialProfile* nparams, + const rtengine::ProcEvent& event, + const Glib::ustring& descr, + const ParamsEdited* paramsEdited = nullptr, + bool fromLastSaved = false + ) = 0; + virtual void setDefaults(const rtengine::procparams::ProcParams* defparams) = 0; }; -class BatchProfileChangeListener -{ - -public: - virtual ~BatchProfileChangeListener() {} - virtual void beginBatchProfileChange(int numberOfEntries) {} - virtual void endBatchProfileChange() {} -}; - - #endif diff --git a/rtgui/profilepanel.cc b/rtgui/profilepanel.cc index 0adfb85cb..a2e75f3b5 100644 --- a/rtgui/profilepanel.cc +++ b/rtgui/profilepanel.cc @@ -709,9 +709,13 @@ void ProfilePanel::selection_changed () dontupdate = false; } -void ProfilePanel::procParamsChanged (rtengine::procparams::ProcParams* p, rtengine::ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited) +void ProfilePanel::procParamsChanged( + const rtengine::procparams::ProcParams* p, + const rtengine::ProcEvent& ev, + const Glib::ustring& descr, + const ParamsEdited* paramsEdited +) { - // to prevent recursion, filter out the events caused by the profilepanel if (ev == EvProfileChanged || ev == EvPhotoLoaded) { return; @@ -734,6 +738,10 @@ void ProfilePanel::procParamsChanged (rtengine::procparams::ProcParams* p, rteng *custom->pparams = *p; } +void ProfilePanel::clearParamChanges() +{ +} + /** @brief Initialize the Profile panel with a default profile, overridden by the last saved profile if provided * * The file tree has already been created on object's construction. We add here the Custom, LastSaved and/or Internal item. diff --git a/rtgui/profilepanel.h b/rtgui/profilepanel.h index dc07e2006..509800aaa 100644 --- a/rtgui/profilepanel.h +++ b/rtgui/profilepanel.h @@ -89,7 +89,13 @@ public: void setInitialFileName (const Glib::ustring& filename); // PParamsChangeListener interface - void procParamsChanged (rtengine::procparams::ProcParams* params, rtengine::ProcEvent ev, Glib::ustring descr, ParamsEdited* paramsEdited = nullptr); + void procParamsChanged( + const rtengine::procparams::ProcParams* params, + const rtengine::ProcEvent& ev, + const Glib::ustring& descr, + const ParamsEdited* paramsEdited = nullptr + ); + void clearParamChanges(); // gui callbacks void save_clicked (GdkEventButton* event); diff --git a/rtgui/progressconnector.h b/rtgui/progressconnector.h index 3ce20f8f8..12a2bf82f 100644 --- a/rtgui/progressconnector.h +++ b/rtgui/progressconnector.h @@ -26,22 +26,22 @@ #undef THREAD_PRIORITY_NORMAL -class PLDBridge : public rtengine::ProgressListener +class PLDBridge : + public rtengine::ProgressListener { - - rtengine::ProgressListener* pl; - public: - explicit PLDBridge ( rtengine::ProgressListener* pb) - : pl(pb) {} + explicit PLDBridge(rtengine::ProgressListener* pb) : + pl(pb) + { + } // ProgressListener interface - void setProgress (double p) + void setProgress(double p) { GThreadLock lock; pl->setProgress(p); } - void setProgressStr (Glib::ustring str) + void setProgressStr(const Glib::ustring& str) { GThreadLock lock; Glib::ustring progrstr; @@ -49,17 +49,20 @@ public: pl->setProgressStr(progrstr); } - void setProgressState (bool inProcessing) + void setProgressState(bool inProcessing) { GThreadLock lock; pl->setProgressState(inProcessing); } - void error (Glib::ustring descr) + void error(const Glib::ustring& descr) { GThreadLock lock; pl->error(descr); } + +private: + rtengine::ProgressListener* const pl; }; template diff --git a/rtgui/prsharpening.cc b/rtgui/prsharpening.cc index 8179efcd8..fd2c85227 100644 --- a/rtgui/prsharpening.cc +++ b/rtgui/prsharpening.cc @@ -314,7 +314,6 @@ void PrSharpening::setDefaults (const ProcParams* defParams, const ParamsEdited* void PrSharpening::adjusterChanged (Adjuster* a, double newval) { - if (listener && (multiImage || getEnabled()) ) { Glib::ustring costr; @@ -351,9 +350,12 @@ void PrSharpening::adjusterChanged (Adjuster* a, double newval) } } +void PrSharpening::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void PrSharpening::enabledChanged () { - if (listener) { if (get_inconsistent()) { listener->panelChanged (EvPrShrEnabled, M("GENERAL_UNCHANGED")); @@ -455,7 +457,19 @@ void PrSharpening::method_changed () } -void PrSharpening::adjusterChanged (ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) +void PrSharpening::adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) +{ +} + +void PrSharpening::adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) +{ +} + +void PrSharpening::adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) +{ +} + +void PrSharpening::adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) { if (listener && (multiImage || getEnabled()) ) { if(a == threshold) { @@ -464,6 +478,10 @@ void PrSharpening::adjusterChanged (ThresholdAdjuster* a, int newBottomL, int ne } } +void PrSharpening::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) +{ +} + void PrSharpening::setBatchMode (bool batchMode) { diff --git a/rtgui/prsharpening.h b/rtgui/prsharpening.h index bac0b9240..8b2c02e25 100644 --- a/rtgui/prsharpening.h +++ b/rtgui/prsharpening.h @@ -65,11 +65,17 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged (); void edgesonly_toggled (); void halocontrol_toggled (); void method_changed (); - void adjusterChanged (ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR); + + void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop); + void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight); + void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop); + void adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight); + void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR); void setAdjusterBehavior (bool contrastadd, bool radiusadd, bool amountadd, bool dampingadd, bool iteradd, bool edgetoladd, bool haloctrladd); void trimValues (rtengine::procparams::ProcParams* pp); diff --git a/rtgui/quickzoomlistener.h b/rtgui/quickzoomlistener.h deleted file mode 100644 index 5857bc259..000000000 --- a/rtgui/quickzoomlistener.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * RawTherapee is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * RawTherapee is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with RawTherapee. If not, see . - */ -#ifndef _QZLISTENER_ -#define _QZLISTENER_ - -class QuickZoomListener -{ - -public: - - virtual void increaseZoom () {} - virtual void decreaseZoom () {} - virtual void quickZoom () {} - virtual void increaseCropZoom () {} - virtual void decreaseCropZoom () {} - virtual void quickCropZoom () {} -}; - -#endif diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 44186bc70..b208f5509 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -123,7 +123,7 @@ void RAWCACorr::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedit } -void RAWCACorr::adjusterChanged (Adjuster* a, double newval) +void RAWCACorr::adjusterChanged(Adjuster* a, double newval) { if (listener) { @@ -139,6 +139,10 @@ void RAWCACorr::adjusterChanged (Adjuster* a, double newval) } } +void RAWCACorr::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void RAWCACorr::checkBoxToggled (CheckBox* c, CheckValue newval) { if (c == caAutocorrect) { diff --git a/rtgui/rawcacorrection.h b/rtgui/rawcacorrection.h index dea9ef738..3bb511885 100644 --- a/rtgui/rawcacorrection.h +++ b/rtgui/rawcacorrection.h @@ -50,6 +50,7 @@ public: void trimValues (rtengine::procparams::ProcParams* pp); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled (Adjuster* a, bool newval); void checkBoxToggled (CheckBox* c, CheckValue newval); }; diff --git a/rtgui/rawexposure.cc b/rtgui/rawexposure.cc index a705ed4ca..af0766e31 100644 --- a/rtgui/rawexposure.cc +++ b/rtgui/rawexposure.cc @@ -76,7 +76,7 @@ void RAWExposure::write( rtengine::procparams::ProcParams* pp, ParamsEdited* ped } -void RAWExposure::adjusterChanged (Adjuster* a, double newval) +void RAWExposure::adjusterChanged(Adjuster* a, double newval) { if (listener) { Glib::ustring value = a->getTextValue(); @@ -89,6 +89,10 @@ void RAWExposure::adjusterChanged (Adjuster* a, double newval) } } +void RAWExposure::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void RAWExposure::setBatchMode(bool batchMode) { ToolPanel::setBatchMode (batchMode); diff --git a/rtgui/rawexposure.h b/rtgui/rawexposure.h index d6e3e863f..6153ae98b 100644 --- a/rtgui/rawexposure.h +++ b/rtgui/rawexposure.h @@ -42,6 +42,7 @@ public: void setBatchMode (bool batchMode); void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled (Adjuster* a, bool newval); void setAdjusterBehavior (bool pexposadd, bool pexpreseradd); void trimValues (rtengine::procparams::ProcParams* pp); }; diff --git a/rtgui/recentselectionlistener.h b/rtgui/recentselectionlistener.h deleted file mode 100644 index a06048336..000000000 --- a/rtgui/recentselectionlistener.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * RawTherapee is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * RawTherapee is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with RawTherapee. If not, see . - */ -#ifndef _RECENTSELECTIONLISTENER_ -#define _RECENTSELECTIONLISTENER_ - -#include - -class RecentSelectionListener -{ - -public: - virtual void recentSelected (Glib::ustring recentdir) {} -}; - -#endif diff --git a/rtgui/resize.cc b/rtgui/resize.cc index d99068096..0de1f7db0 100644 --- a/rtgui/resize.cc +++ b/rtgui/resize.cc @@ -257,9 +257,8 @@ void Resize::setDefaults (const ProcParams* defParams, const ParamsEdited* pedit } } -void Resize::adjusterChanged (Adjuster* a, double newval) +void Resize::adjusterChanged(Adjuster* a, double newval) { - if (!batchMode) { wconn.block (true); hconn.block (true); @@ -274,6 +273,10 @@ void Resize::adjusterChanged (Adjuster* a, double newval) } } +void Resize::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + int Resize::getComputedWidth() { @@ -351,9 +354,8 @@ void Resize::update (bool isCropped, int cw, int ch, int ow, int oh) setDimensions(); } -void Resize::sizeChanged (int mw, int mh, int ow, int oh) +void Resize::sizeChanged(int mw, int mh, int ow, int oh) { - // updating max values now maxw = ow; maxh = oh; diff --git a/rtgui/resize.h b/rtgui/resize.h index 0534e292a..e403e5d6f 100644 --- a/rtgui/resize.h +++ b/rtgui/resize.h @@ -46,6 +46,7 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void entryWChanged (); void entryHChanged (); void appliesToChanged (); diff --git a/rtgui/retinex.cc b/rtgui/retinex.cc index 5fdb8998a..08883708e 100644 --- a/rtgui/retinex.cc +++ b/rtgui/retinex.cc @@ -1311,9 +1311,8 @@ void Retinex::setAdjusterBehavior (bool strAdd, bool neighAdd, bool limdAdd, boo } -void Retinex::adjusterChanged (Adjuster* a, double newval) +void Retinex::adjusterChanged(Adjuster* a, double newval) { - if (a == iter && !batchMode) { if (iter->getIntValue() > 1) { scal->set_sensitive (true); @@ -1368,11 +1367,11 @@ void Retinex::adjusterChanged (Adjuster* a, double newval) listener->panelChanged (EvLradius, radius->getTextValue()); } - - } - +void Retinex::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} void Retinex::autoOpenCurve () { @@ -1439,11 +1438,22 @@ void Retinex::trimValues (rtengine::procparams::ProcParams* pp) } -void Retinex::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) -{ - cdshape->updateBackgroundHistogram (histLRETI); - cdshapeH->updateBackgroundHistogram (histLRETI); +void Retinex::updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI +) +{ + cdshape->updateBackgroundHistogram(histLRETI); + cdshapeH->updateBackgroundHistogram(histLRETI); } void Retinex::colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller) diff --git a/rtgui/retinex.h b/rtgui/retinex.h index 134be502e..e0d0d7695 100644 --- a/rtgui/retinex.h +++ b/rtgui/retinex.h @@ -104,6 +104,7 @@ public: void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); void trimValues (rtengine::procparams::ProcParams* pp); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled (Adjuster* a, bool newval); void autoOpenCurve (); void medianmapChanged (); void minmaxChanged (double cdma, double cdmin, double mini, double maxi, double Tmean, double Tsigma, double Tmin, double Tmax); @@ -123,7 +124,18 @@ public: void writeOptions (std::vector &tpOpen); void updateToolState (std::vector &tpOpen); void setAdjusterBehavior (bool strAdd, bool neighAdd, bool limdAdd, bool offsAdd, bool vartAdd, bool gamAdd, bool slopeAdd); - void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); + void updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI + ); virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller); diff --git a/rtgui/rgbcurves.cc b/rtgui/rgbcurves.cc index d32633bf4..1ffb8cc46 100644 --- a/rtgui/rgbcurves.cc +++ b/rtgui/rgbcurves.cc @@ -198,12 +198,19 @@ void RGBCurves::setBatchMode (bool batchMode) } -void RGBCurves::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) +void RGBCurves::updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI +) { - - // Rshape->updateBackgroundHistogram (histRed); - // Gshape->updateBackgroundHistogram (histGreen); - // Bshape->updateBackgroundHistogram (histBlue); } diff --git a/rtgui/rgbcurves.h b/rtgui/rgbcurves.h index dfcba71f9..2bb24a10f 100644 --- a/rtgui/rgbcurves.h +++ b/rtgui/rgbcurves.h @@ -26,7 +26,7 @@ #include "curveeditorgroup.h" #include "colorprovider.h" -class RGBCurves : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public CurveListener, public ColorProvider +class RGBCurves : public ToolParamBlock, public FoldableToolPanel, public CurveListener, public ColorProvider { protected: @@ -51,7 +51,18 @@ public: void autoOpenCurve (); void curveChanged (CurveEditor* ce); - void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); + void updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI + ); void lumamodeChanged (); void enabledChanged(); }; diff --git a/rtgui/rotate.cc b/rtgui/rotate.cc index 481b65139..9f70010df 100644 --- a/rtgui/rotate.cc +++ b/rtgui/rotate.cc @@ -85,14 +85,17 @@ void Rotate::setDefaults (const ProcParams* defParams, const ParamsEdited* pedit } } -void Rotate::adjusterChanged (Adjuster* a, double newval) +void Rotate::adjusterChanged(Adjuster* a, double newval) { - if (listener) { - listener->panelChanged (EvROTDegree, Glib::ustring::format (std::setw(3), std::fixed, std::setprecision(2), degree->getValue())); + listener->panelChanged(EvROTDegree, Glib::ustring::format (std::setw(3), std::fixed, std::setprecision(2), degree->getValue())); } } +void Rotate::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void Rotate::straighten (double deg) { diff --git a/rtgui/rotate.h b/rtgui/rotate.h index bad46ef84..5361cd80e 100644 --- a/rtgui/rotate.h +++ b/rtgui/rotate.h @@ -44,6 +44,7 @@ public: void straighten (double deg); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled (Adjuster* a, bool newval); void setAdjusterBehavior (bool rotadd); void trimValues (rtengine::procparams::ProcParams* pp); void selectStraightPressed (); diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc index a52fd1ba5..8ecd31cc1 100644 --- a/rtgui/rtwindow.cc +++ b/rtgui/rtwindow.cc @@ -630,9 +630,8 @@ void RTWindow::addBatchQueueJob (BatchQueueEntry* bqe, bool head) fpanel->queue_draw (); } -void RTWindow::addBatchQueueJobs (std::vector &entries) +void RTWindow::addBatchQueueJobs(const std::vector& entries) { - bpanel->addBatchQueueJobs (entries, false); fpanel->queue_draw (); } @@ -794,19 +793,19 @@ void RTWindow::showPreferences () } } -void RTWindow::setProgress (double p) +void RTWindow::setProgress(double p) { - prProgBar.set_fraction (p); + prProgBar.set_fraction(p); } -void RTWindow::setProgressStr (Glib::ustring str) +void RTWindow::setProgressStr(const Glib::ustring& str) { if (!options.mainNBVertical) { - prProgBar.set_text ( str ); + prProgBar.set_text(str); } } -void RTWindow::setProgressState (bool inProcessing) +void RTWindow::setProgressState(bool inProcessing) { if (inProcessing) { prProgBar.show(); @@ -815,6 +814,11 @@ void RTWindow::setProgressState (bool inProcessing) } } +void RTWindow::error(const Glib::ustring& descr) +{ + prProgBar.set_text(descr); +} + void RTWindow::toggle_fullscreen () { if (is_fullscreen) { @@ -838,11 +842,6 @@ void RTWindow::toggle_fullscreen () } } -void RTWindow::error (Glib::ustring descr) -{ - prProgBar.set_text ( descr ); -} - void RTWindow::SetEditorCurrent() { mainNB->set_current_page (mainNB->page_num (*epanel)); diff --git a/rtgui/rtwindow.h b/rtgui/rtwindow.h index d5c13d515..61b961b64 100644 --- a/rtgui/rtwindow.h +++ b/rtgui/rtwindow.h @@ -78,7 +78,7 @@ public: bool selectEditorPanel (const std::string &name); void addBatchQueueJob (BatchQueueEntry* bqe, bool head = false); - void addBatchQueueJobs (std::vector &entries); + void addBatchQueueJobs (const std::vector& entries); bool keyPressed (GdkEventKey* event); bool on_configure_event (GdkEventConfigure* event); @@ -90,10 +90,12 @@ public: void showPreferences (); void on_realize (); void toggle_fullscreen (); - void setProgress (double p); - void setProgressStr (Glib::ustring str); - void setProgressState (bool inProcessing); - void error (Glib::ustring descr); + + void setProgress(double p); + void setProgressStr(const Glib::ustring& str); + void setProgressState(bool inProcessing); + void error(const Glib::ustring& descr); + rtengine::ProgressListener* getProgressListener () { return pldBridge; diff --git a/rtgui/saveformatpanel.cc b/rtgui/saveformatpanel.cc index b147c5d70..de2240fc6 100644 --- a/rtgui/saveformatpanel.cc +++ b/rtgui/saveformatpanel.cc @@ -206,7 +206,7 @@ void SaveFormatPanel::formatChanged () } } -void SaveFormatPanel::adjusterChanged (Adjuster* a, double newval) +void SaveFormatPanel::adjusterChanged(Adjuster* a, double newval) { const unsigned int act = format->get_active_row_number(); @@ -218,3 +218,7 @@ void SaveFormatPanel::adjusterChanged (Adjuster* a, double newval) listener->formatChanged(sf_templates[act].second.format); } } + +void SaveFormatPanel::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} diff --git a/rtgui/saveformatpanel.h b/rtgui/saveformatpanel.h index 7c4dbf33f..e6560d73d 100644 --- a/rtgui/saveformatpanel.h +++ b/rtgui/saveformatpanel.h @@ -26,7 +26,6 @@ class FormatChangeListener { - public: virtual ~FormatChangeListener() = default; virtual void formatChanged(const Glib::ustring& format) = 0; @@ -61,6 +60,7 @@ public: void formatChanged (); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); }; #endif diff --git a/rtgui/shadowshighlights.cc b/rtgui/shadowshighlights.cc index f1d8dbaf2..f4ed90138 100644 --- a/rtgui/shadowshighlights.cc +++ b/rtgui/shadowshighlights.cc @@ -17,12 +17,26 @@ * along with RawTherapee. If not, see . */ #include "shadowshighlights.h" +#include "eventmapper.h" using namespace rtengine; using namespace rtengine::procparams; ShadowsHighlights::ShadowsHighlights () : FoldableToolPanel(this, "shadowshighlights", M("TP_SHADOWSHLIGHTS_LABEL"), false, true) { + auto m = ProcEventMapper::getInstance(); + EvSHColorspace = m->newEvent(RGBCURVE, "HISTORY_MSG_SH_COLORSPACE"); + + Gtk::HBox* hb = Gtk::manage (new Gtk::HBox ()); + hb->pack_start(*Gtk::manage(new Gtk::Label(M("TP_DIRPYRDENOISE_MAIN_COLORSPACE") + ": ")), Gtk::PACK_SHRINK); + colorspace = Gtk::manage(new MyComboBoxText()); + colorspace->append(M("TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB")); + colorspace->append(M("TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB")); + hb->pack_start(*colorspace); + pack_start(*hb); + + pack_start (*Gtk::manage (new Gtk::HSeparator())); + highlights = Gtk::manage (new Adjuster (M("TP_SHADOWSHLIGHTS_HIGHLIGHTS"), 0, 100, 1, 0)); h_tonalwidth = Gtk::manage (new Adjuster (M("TP_SHADOWSHLIGHTS_HLTONALW"), 10, 100, 1, 70)); pack_start (*highlights); @@ -46,6 +60,8 @@ ShadowsHighlights::ShadowsHighlights () : FoldableToolPanel(this, "shadowshighli shadows->setAdjusterListener (this); s_tonalwidth->setAdjusterListener (this); + colorspace->signal_changed().connect(sigc::mem_fun(*this, &ShadowsHighlights::colorspaceChanged)); + show_all_children (); } @@ -61,6 +77,7 @@ void ShadowsHighlights::read (const ProcParams* pp, const ParamsEdited* pedited) shadows->setEditedState (pedited->sh.shadows ? Edited : UnEdited); s_tonalwidth->setEditedState (pedited->sh.stonalwidth ? Edited : UnEdited); set_inconsistent (multiImage && !pedited->sh.enabled); + } setEnabled (pp->sh.enabled); @@ -71,6 +88,14 @@ void ShadowsHighlights::read (const ProcParams* pp, const ParamsEdited* pedited) shadows->setValue (pp->sh.shadows); s_tonalwidth->setValue (pp->sh.stonalwidth); + if (pedited && !pedited->sh.lab) { + colorspace->set_active(2); + } else if (pp->sh.lab) { + colorspace->set_active(1); + } else { + colorspace->set_active(0); + } + enableListener (); } @@ -84,6 +109,12 @@ void ShadowsHighlights::write (ProcParams* pp, ParamsEdited* pedited) pp->sh.stonalwidth = (int)s_tonalwidth->getValue (); pp->sh.enabled = getEnabled(); + if (colorspace->get_active_row_number() == 0) { + pp->sh.lab = false; + } else if (colorspace->get_active_row_number() == 1) { + pp->sh.lab = true; + } + if (pedited) { pedited->sh.radius = radius->getEditedState (); pedited->sh.highlights = highlights->getEditedState (); @@ -91,6 +122,7 @@ void ShadowsHighlights::write (ProcParams* pp, ParamsEdited* pedited) pedited->sh.shadows = shadows->getEditedState (); pedited->sh.stonalwidth = s_tonalwidth->getEditedState (); pedited->sh.enabled = !get_inconsistent(); + pedited->sh.lab = colorspace->get_active_row_number() != 2; } } @@ -120,10 +152,8 @@ void ShadowsHighlights::setDefaults (const ProcParams* defParams, const ParamsEd void ShadowsHighlights::adjusterChanged (Adjuster* a, double newval) { - if (listener && getEnabled()) { - - Glib::ustring costr = Glib::ustring::format ((int)a->getValue()); + const Glib::ustring costr = Glib::ustring::format ((int)a->getValue()); if (a == highlights) { listener->panelChanged (EvSHHighlights, costr); @@ -139,6 +169,10 @@ void ShadowsHighlights::adjusterChanged (Adjuster* a, double newval) } } +void ShadowsHighlights::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void ShadowsHighlights::enabledChanged () { @@ -153,6 +187,13 @@ void ShadowsHighlights::enabledChanged () } } +void ShadowsHighlights::colorspaceChanged() +{ + if (listener && (multiImage || getEnabled()) ) { + listener->panelChanged(EvSHColorspace, colorspace->get_active_text()); + } +} + void ShadowsHighlights::setBatchMode (bool batchMode) { @@ -162,6 +203,7 @@ void ShadowsHighlights::setBatchMode (bool batchMode) h_tonalwidth->showEditedCB (); shadows->showEditedCB (); s_tonalwidth->showEditedCB (); + colorspace->append(M("GENERAL_UNCHANGED")); } void ShadowsHighlights::setAdjusterBehavior (bool hadd, bool sadd) diff --git a/rtgui/shadowshighlights.h b/rtgui/shadowshighlights.h index 96642bfc0..4b6daa9dc 100644 --- a/rtgui/shadowshighlights.h +++ b/rtgui/shadowshighlights.h @@ -32,6 +32,9 @@ protected: Adjuster* shadows; Adjuster* s_tonalwidth; Adjuster* radius; + MyComboBoxText *colorspace; + + rtengine::ProcEvent EvSHColorspace; public: @@ -43,10 +46,13 @@ public: void setBatchMode (bool batchMode); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged (); void setAdjusterBehavior (bool hadd, bool sadd); void trimValues (rtengine::procparams::ProcParams* pp); + + void colorspaceChanged(); }; #endif diff --git a/rtgui/sharpenedge.cc b/rtgui/sharpenedge.cc index 8849ffa72..03675a3bf 100644 --- a/rtgui/sharpenedge.cc +++ b/rtgui/sharpenedge.cc @@ -129,7 +129,7 @@ void SharpenEdge::chanthree_toggled () } } -void SharpenEdge::adjusterChanged (Adjuster* a, double newval) +void SharpenEdge::adjusterChanged(Adjuster* a, double newval) { if (listener && getEnabled()) { Glib::ustring value = a->getTextValue(); @@ -142,6 +142,10 @@ void SharpenEdge::adjusterChanged (Adjuster* a, double newval) } } +void SharpenEdge::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void SharpenEdge::setBatchMode(bool batchMode) { passes->showEditedCB (); diff --git a/rtgui/sharpenedge.h b/rtgui/sharpenedge.h index f27d4ecee..82f796cb5 100644 --- a/rtgui/sharpenedge.h +++ b/rtgui/sharpenedge.h @@ -51,6 +51,7 @@ public: void trimValues (rtengine::procparams::ProcParams* pp); void setAdjusterBehavior (bool amountadd, bool passadd); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled (Adjuster* a, bool newval); void enabledChanged (); void chanthree_toggled (); diff --git a/rtgui/sharpening.cc b/rtgui/sharpening.cc index f3bad9f3a..3614594ea 100644 --- a/rtgui/sharpening.cc +++ b/rtgui/sharpening.cc @@ -304,9 +304,8 @@ void Sharpening::setDefaults (const ProcParams* defParams, const ParamsEdited* p } } -void Sharpening::adjusterChanged (Adjuster* a, double newval) +void Sharpening::adjusterChanged(Adjuster* a, double newval) { - if (listener && (multiImage || getEnabled()) ) { Glib::ustring costr; @@ -343,15 +342,35 @@ void Sharpening::adjusterChanged (Adjuster* a, double newval) } } -void Sharpening::adjusterChanged (ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) +void Sharpening::adjusterAutoToggled(Adjuster* a, bool newval) { - if (listener && (multiImage || getEnabled()) ) { - if(a == threshold) { - listener->panelChanged (EvShrThresh, threshold->getHistoryString()); +} + +void Sharpening::adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) +{ +} + +void Sharpening::adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) +{ +} + +void Sharpening::adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) +{ +} + +void Sharpening::adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) +{ + if (listener && (multiImage || getEnabled())) { + if (a == threshold) { + listener->panelChanged(EvShrThresh, threshold->getHistoryString()); } } } +void Sharpening::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) +{ +} + void Sharpening::enabledChanged () { diff --git a/rtgui/sharpening.h b/rtgui/sharpening.h index 9bcbbbc20..ed22357fa 100644 --- a/rtgui/sharpening.h +++ b/rtgui/sharpening.h @@ -65,13 +65,19 @@ public: void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); void setBatchMode (bool batchMode); - void adjusterChanged (Adjuster* a, double newval); - void adjusterChanged (ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight); + void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged (); void edgesonly_toggled (); void halocontrol_toggled (); void method_changed (); + void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop); + void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight); + void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop); + void adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight); + void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR); + void setAdjusterBehavior (bool contrastadd, bool radiusadd, bool amountadd, bool dampingadd, bool iteradd, bool edgetoladd, bool haloctrladd); void trimValues (rtengine::procparams::ProcParams* pp); }; diff --git a/rtgui/sharpenmicro.cc b/rtgui/sharpenmicro.cc index 9beb5a340..7e981db96 100644 --- a/rtgui/sharpenmicro.cc +++ b/rtgui/sharpenmicro.cc @@ -137,10 +137,10 @@ void SharpenMicro::matrix_toggled () } } -void SharpenMicro::adjusterChanged (Adjuster* a, double newval) +void SharpenMicro::adjusterChanged(Adjuster* a, double newval) { if (listener && getEnabled()) { - Glib::ustring value = a->getTextValue(); + const Glib::ustring value = a->getTextValue(); if (a == amount) { listener->panelChanged (EvSharpenMicroAmount, value); @@ -152,6 +152,10 @@ void SharpenMicro::adjusterChanged (Adjuster* a, double newval) } } +void SharpenMicro::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void SharpenMicro::setBatchMode(bool batchMode) { amount->showEditedCB (); diff --git a/rtgui/sharpenmicro.h b/rtgui/sharpenmicro.h index e1fc0d7e0..19c962841 100644 --- a/rtgui/sharpenmicro.h +++ b/rtgui/sharpenmicro.h @@ -54,6 +54,7 @@ public: void trimValues (rtengine::procparams::ProcParams* pp); void setAdjusterBehavior (bool amountadd, bool contrastadd, bool uniformityadd); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled (Adjuster* a, bool newval); void enabledChanged (); void matrix_toggled (); diff --git a/rtgui/shcselector.h b/rtgui/shcselector.h index 92d4c21ba..5e02342d5 100644 --- a/rtgui/shcselector.h +++ b/rtgui/shcselector.h @@ -25,8 +25,8 @@ class SHCListener { public: - virtual ~SHCListener() {} - virtual void shcChanged () {} + virtual ~SHCListener() = default; + virtual void shcChanged() = 0; }; class SHCSelector : public Gtk::DrawingArea, BackBuffer diff --git a/rtgui/softlight.cc b/rtgui/softlight.cc index cac534ce3..0ee4c64b9 100644 --- a/rtgui/softlight.cc +++ b/rtgui/softlight.cc @@ -86,6 +86,11 @@ void SoftLight::adjusterChanged(Adjuster* a, double newval) } +void SoftLight::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + + void SoftLight::enabledChanged () { if (listener) { diff --git a/rtgui/softlight.h b/rtgui/softlight.h index dc51ac730..ad537894e 100644 --- a/rtgui/softlight.h +++ b/rtgui/softlight.h @@ -41,6 +41,7 @@ public: void setBatchMode(bool batchMode); void adjusterChanged(Adjuster *a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void enabledChanged(); void setAdjusterBehavior(bool strengthAdd); }; diff --git a/rtgui/thresholdadjuster.h b/rtgui/thresholdadjuster.h index 200fe2175..fea4e9094 100644 --- a/rtgui/thresholdadjuster.h +++ b/rtgui/thresholdadjuster.h @@ -33,16 +33,16 @@ class ThresholdAdjusterListener { public: - virtual ~ThresholdAdjusterListener() {} + virtual ~ThresholdAdjusterListener() = default; // to be used by listener that has created a ThresholdAdjuster with with single threshold and precision > 0 - virtual void adjusterChanged (ThresholdAdjuster* a, double newBottom, double newTop) {} + virtual void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) = 0; // to be used by listener that has created a ThresholdAdjuster with with double threshold and precision > 0 - virtual void adjusterChanged (ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) {} + virtual void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) = 0; // to be used by listener that has created a ThresholdAdjuster with with single threshold and precision == 0 - virtual void adjusterChanged (ThresholdAdjuster* a, int newBottom, int newTop) {} + virtual void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) = 0; // to be used by listener that has created a ThresholdAdjuster with with double threshold and precision == 0 - virtual void adjusterChanged (ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) {} - virtual void adjusterChanged2 (ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) {} + virtual void adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) = 0; + virtual void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) = 0; }; diff --git a/rtgui/thumbbrowserbase.cc b/rtgui/thumbbrowserbase.cc index 814c3e53e..1518428b7 100644 --- a/rtgui/thumbbrowserbase.cc +++ b/rtgui/thumbbrowserbase.cc @@ -952,10 +952,6 @@ bool ThumbBrowserBase::Internal::on_motion_notify_event (GdkEventMotion* event) bool ThumbBrowserBase::Internal::on_scroll_event (GdkEventScroll* event) { // Gtk signals automatically acquire the GUI (i.e. this method is enclosed by gdk_thread_enter and gdk_thread_leave) - - printf("ThumbBrowserBase::Internal::on_scroll_event / delta_x=%.5f, delta_y=%.5f, direction=%d, type=%d, send_event=%d\n", - event->delta_x, event->delta_y, (int)event->direction, (int)event->type, event->send_event); - parent->scroll (event->direction, event->delta_x, event->delta_y); return true; } diff --git a/rtgui/thumbimageupdater.h b/rtgui/thumbimageupdater.h index 3b34c9456..820ddca8f 100644 --- a/rtgui/thumbimageupdater.h +++ b/rtgui/thumbimageupdater.h @@ -30,9 +30,7 @@ class ThumbImageUpdateListener { public: - virtual ~ThumbImageUpdateListener() - { - } + virtual ~ThumbImageUpdateListener() = default; /** * @brief Called when thumbnail image is update @@ -43,9 +41,7 @@ public: * * @note no locks are held when called back */ - virtual void updateImage(rtengine::IImage8* img, double scale, rtengine::procparams::CropParams cropParams) - { - } + virtual void updateImage(rtengine::IImage8* img, double scale, const rtengine::procparams::CropParams& cropParams) = 0; }; class ThumbImageUpdater : diff --git a/rtgui/thumbnail.cc b/rtgui/thumbnail.cc index 68bd8987f..81ff190d3 100644 --- a/rtgui/thumbnail.cc +++ b/rtgui/thumbnail.cc @@ -418,10 +418,11 @@ bool Thumbnail::hasProcParams () const return pparamsValid; } -void Thumbnail::setProcParams (const ProcParams& pp, ParamsEdited* pe, int whoChangedIt, bool updateCacheNow) +void Thumbnail::setProcParams (const ProcParams& pp, ParamsEdited* pe, int whoChangedIt, bool updateCacheNow, bool resetToDefault) { const bool needsReprocessing = - pparams.toneCurve != pp.toneCurve + resetToDefault + || pparams.toneCurve != pp.toneCurve || pparams.labCurve != pp.labCurve || pparams.localContrast != pp.localContrast || pparams.rgbCurves != pp.rgbCurves diff --git a/rtgui/thumbnail.h b/rtgui/thumbnail.h index 93d85cc01..ae627c22f 100644 --- a/rtgui/thumbnail.h +++ b/rtgui/thumbnail.h @@ -87,7 +87,7 @@ public: // Use this to create params on demand for update ; if flaggingMode=true, the procparams is created for a file being flagged (inTrash, rank, colorLabel) rtengine::procparams::ProcParams* createProcParamsForUpdate (bool returnParams, bool force, bool flaggingMode = false); - void setProcParams (const rtengine::procparams::ProcParams& pp, ParamsEdited* pe = nullptr, int whoChangedIt = -1, bool updateCacheNow = true); + void setProcParams (const rtengine::procparams::ProcParams& pp, ParamsEdited* pe = nullptr, int whoChangedIt = -1, bool updateCacheNow = true, bool resetToDefault = false); void clearProcParams (int whoClearedIt = -1); void loadProcParams (); diff --git a/rtgui/thumbnaillistener.h b/rtgui/thumbnaillistener.h index 3c4200838..99a9a9286 100644 --- a/rtgui/thumbnaillistener.h +++ b/rtgui/thumbnaillistener.h @@ -19,16 +19,13 @@ #ifndef _THUMBNAILLISTENER_ #define _THUMBNAILLISTENER_ -#include "thumbnail.h" - class Thumbnail; + class ThumbnailListener { - public: - - virtual void procParamsChanged (Thumbnail* thm, int whoChangedIt) {} - + virtual ~ThumbnailListener() = default; + virtual void procParamsChanged(Thumbnail* thm, int whoChangedIt) = 0; }; #endif diff --git a/rtgui/tonecurve.cc b/rtgui/tonecurve.cc index 19326be26..06abe1fd2 100644 --- a/rtgui/tonecurve.cc +++ b/rtgui/tonecurve.cc @@ -587,9 +587,8 @@ float ToneCurve::blendPipetteValues(CurveEditor *ce, float chan1, float chan2, f return CurveListener::blendPipetteValues(ce, chan1, chan2, chan3); } -void ToneCurve::adjusterChanged (Adjuster* a, double newval) +void ToneCurve::adjusterChanged(Adjuster* a, double newval) { - // Switch off auto exposure if user changes sliders manually if (autolevels->get_active() && (a == expcomp || a == brightness || a == contrast || a == black || a == hlcompr || a == hlcomprthresh)) { autoconn.block(true); @@ -641,6 +640,10 @@ void ToneCurve::adjusterChanged (Adjuster* a, double newval) } } +void ToneCurve::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void ToneCurve::neutral_pressed () { // This method deselects auto levels and HL reconstruction auto @@ -808,25 +811,6 @@ void ToneCurve::waitForAutoExp () histmatching->set_sensitive(false); } -void ToneCurve::autoExpChanged (double expcomp, int bright, int contr, int black, int hlcompr, int hlcomprthresh, bool hlrecons) -{ - nextBlack = black; - nextExpcomp = expcomp; - nextBrightness = bright; - nextContrast = contr; - nextHlcompr = hlcompr; - nextHlcomprthresh = hlcomprthresh; - nextHLRecons = hlrecons; - - const auto func = [](gpointer data) -> gboolean { - static_cast(data)->autoExpComputed_(); - - return FALSE; - }; - - idle_register.add(func, this); -} - void ToneCurve::enableAll () { @@ -937,10 +921,20 @@ void ToneCurve::trimValues (rtengine::procparams::ProcParams* pp) saturation->trimValue(pp->toneCurve.saturation); } -void ToneCurve::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) +void ToneCurve::updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI +) { - - shape->updateBackgroundHistogram (histToneCurve); + shape->updateBackgroundHistogram(histToneCurve); } @@ -973,22 +967,6 @@ void ToneCurve::histmatchingToggled() } } - -void ToneCurve::autoMatchedToneCurveChanged(rtengine::procparams::ToneCurveParams::TcMode curveMode, const std::vector &curve) -{ - nextToneCurveMode = curveMode; - nextToneCurve = curve; - - const auto func = [](gpointer data) -> gboolean { - static_cast(data)->histmatchingComputed(); - - return FALSE; - }; - - idle_register.add(func, this); -} - - bool ToneCurve::histmatchingComputed() { GThreadLock lock; @@ -1024,3 +1002,36 @@ bool ToneCurve::histmatchingComputed() return false; } + +void ToneCurve::autoExpChanged(double expcomp, int bright, int contr, int black, int hlcompr, int hlcomprthresh, bool hlrecons) +{ + nextBlack = black; + nextExpcomp = expcomp; + nextBrightness = bright; + nextContrast = contr; + nextHlcompr = hlcompr; + nextHlcomprthresh = hlcomprthresh; + nextHLRecons = hlrecons; + + const auto func = [](gpointer data) -> gboolean { + static_cast(data)->autoExpComputed_(); + + return FALSE; + }; + + idle_register.add(func, this); +} + +void ToneCurve::autoMatchedToneCurveChanged(rtengine::procparams::ToneCurveParams::TcMode curveMode, const std::vector& curve) +{ + nextToneCurveMode = curveMode; + nextToneCurve = curve; + + const auto func = [](gpointer data) -> gboolean { + static_cast(data)->histmatchingComputed(); + + return FALSE; + }; + + idle_register.add(func, this); +} diff --git a/rtgui/tonecurve.h b/rtgui/tonecurve.h index ce431986a..53ec2fa9f 100644 --- a/rtgui/tonecurve.h +++ b/rtgui/tonecurve.h @@ -102,12 +102,12 @@ public: virtual float blendPipetteValues (CurveEditor *ce, float chan1, float chan2, float chan3); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void neutral_pressed (); void autolevels_toggled (); void clip_changed (); bool clip_changed_ (); void waitForAutoExp (); - void autoExpChanged (double expcomp, int bright, int contr, int black, int hlcompr, int hlcomprthresh, bool hlrecons); bool autoExpComputed_ (); void enableAll (); void curveChanged (CurveEditor* ce); @@ -117,12 +117,25 @@ public: bool curveMode2Changed_ (); void expandCurve (bool isExpanded); bool isCurveExpanded (); - void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); + void updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI + ); void histmatchingToggled(); - void autoMatchedToneCurveChanged(rtengine::procparams::ToneCurveParams::TcMode curveMode, const std::vector &curve); bool histmatchingComputed(); + void autoExpChanged(double expcomp, int bright, int contr, int black, int hlcompr, int hlcomprthresh, bool hlrecons); + void autoMatchedToneCurveChanged(rtengine::procparams::ToneCurveParams::TcMode curveMode, const std::vector& curve); + void setRaw (bool raw); void hrenabledChanged (); diff --git a/rtgui/toolbar.h b/rtgui/toolbar.h index 42e764952..2d859eac7 100644 --- a/rtgui/toolbar.h +++ b/rtgui/toolbar.h @@ -28,12 +28,12 @@ class ToolBarListener { public: - virtual ~ToolBarListener() {} + virtual ~ToolBarListener() = default; /// Callback when a tool is selected - virtual void toolSelected (ToolMode tool) {} + virtual void toolSelected(ToolMode tool) = 0; /// Callback when the Edit mode is stopped - virtual void editModeSwitchedOff () {} + virtual void editModeSwitchedOff() = 0; }; class ToolBar : public Gtk::HBox diff --git a/rtgui/toolpanel.h b/rtgui/toolpanel.h index fd7d27fbe..9f2d031c0 100644 --- a/rtgui/toolpanel.h +++ b/rtgui/toolpanel.h @@ -33,11 +33,9 @@ class FoldableToolPanel; class ToolPanelListener { - public: - - virtual ~ToolPanelListener() {} - virtual void panelChanged (rtengine::ProcEvent event, const Glib::ustring& descr) {} + virtual ~ToolPanelListener() = default; + virtual void panelChanged(const rtengine::ProcEvent& event, const Glib::ustring& descr) = 0; }; /// @brief This class control the space around the group of tools inside a tab, as well as the space separating each tool. */ diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index ad7772d12..284df6a54 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -367,12 +367,11 @@ void ToolPanelCoordinator::imageTypeChanged(bool isRaw, bool isBayer, bool isXtr } -void ToolPanelCoordinator::panelChanged(rtengine::ProcEvent event, const Glib::ustring& descr) +void ToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const Glib::ustring& descr) { // TODO Locallab printf printf("panelChanged\n"); - printf("panelChanged event: %d\n", (int)event); - + // printf("panelChanged event: %d\n", (int)event); if (!ipc) { return; } @@ -458,12 +457,17 @@ void ToolPanelCoordinator::panelChanged(rtengine::ProcEvent event, const Glib::u photoLoadedOnce = true; } -void ToolPanelCoordinator::profileChange(const PartialProfile *nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited, bool fromLastSave) +void ToolPanelCoordinator::profileChange( + const PartialProfile* nparams, + const rtengine::ProcEvent& event, + const Glib::ustring& descr, + const ParamsEdited* paramsEdited, + bool fromLastSave +) { // TODO Locallab printf printf("profileChanged\n"); - printf("profileChanged event: %d\n", (int)event); - +// printf("profileChanged event: %d\n", (int)event); int fw, fh, tr; if (!ipc) { @@ -563,13 +567,13 @@ void ToolPanelCoordinator::profileChange(const PartialProfile *nparams, rtengine photoLoadedOnce = true; } -void ToolPanelCoordinator::setDefaults(ProcParams* defparams) +void ToolPanelCoordinator::setDefaults(const ProcParams* defparams) { - - if (defparams) + if (defparams) { for (auto toolPanel : toolPanels) { toolPanel->setDefaults(defparams); } + } } CropGUIListener* ToolPanelCoordinator::getCropGUIListener() @@ -699,33 +703,8 @@ void ToolPanelCoordinator::writeToolExpandedStatus(std::vector &tpOpen) } -void ToolPanelCoordinator::cropSelectionReady() -{ - - toolBar->setTool(TMHand); - - if (!ipc) { - return; - } -} - -void ToolPanelCoordinator::rotateSelectionReady(double rotate_deg, Thumbnail* thm) -{ - - toolBar->setTool(TMHand); - - if (!ipc) { - return; - } - - if (rotate_deg != 0.0) { - rotate->straighten(rotate_deg); - } -} - void ToolPanelCoordinator::spotWBselected(int x, int y, Thumbnail* thm) { - if (!ipc) { return; } @@ -745,7 +724,6 @@ void ToolPanelCoordinator::spotWBselected(int x, int y, Thumbnail* thm) void ToolPanelCoordinator::sharpMaskSelected(bool sharpMask) { - if (!ipc) { return; } @@ -755,7 +733,42 @@ void ToolPanelCoordinator::sharpMaskSelected(bool sharpMask) ipc->endUpdateParams(rtengine::EvShrEnabled); } +int ToolPanelCoordinator::getSpotWBRectSize() const +{ + return whitebalance->getSize(); +} +void ToolPanelCoordinator::cropSelectionReady() +{ + toolBar->setTool (TMHand); + + if (!ipc) { + return; + } +} + +void ToolPanelCoordinator::rotateSelectionReady(double rotate_deg, Thumbnail* thm) +{ + toolBar->setTool (TMHand); + + if (!ipc) { + return; + } + + if (rotate_deg != 0.0) { + rotate->straighten (rotate_deg); + } +} + +ToolBar* ToolPanelCoordinator::getToolBar() const +{ + return toolBar; +} + +CropGUIListener* ToolPanelCoordinator::startCropEditing(Thumbnail* thm) +{ + return crop; +} void ToolPanelCoordinator::autoCropRequested() { @@ -866,28 +879,31 @@ void ToolPanelCoordinator::cropSelectRequested() toolBar->setTool(TMCropSelect); } -void ToolPanelCoordinator::saveInputICCReference(Glib::ustring fname, bool apply_wb) +void ToolPanelCoordinator::saveInputICCReference(const Glib::ustring& fname, bool apply_wb) { - if (ipc) { ipc->saveInputICCReference(fname, apply_wb); } } -int ToolPanelCoordinator::getSpotWBRectSize() +void ToolPanelCoordinator::updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI +) { - - return whitebalance->getSize(); -} - -void ToolPanelCoordinator::updateCurveBackgroundHistogram(LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) -{ - colorappearance->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); - toneCurve->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); - lcurve->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); - rgbcurves->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve, */histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); - retinex->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve, */histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); - + colorappearance->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve, histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); + toneCurve->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve,histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); + lcurve->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve, histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); + rgbcurves->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve, histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); + retinex->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve, histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); } void ToolPanelCoordinator::foldAllButOne(Gtk::Box* parent, FoldableToolPanel* openedSection) diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h index 70316fb5a..f6bc12643 100644 --- a/rtgui/toolpanelcoord.h +++ b/rtgui/toolpanelcoord.h @@ -85,7 +85,8 @@ class ImageEditorCoordinator; -class ToolPanelCoordinator : public ToolPanelListener, +class ToolPanelCoordinator : + public ToolPanelListener, public ToolBarListener, public ProfileChangeListener, public WBProvider, @@ -98,9 +99,7 @@ class ToolPanelCoordinator : public ToolPanelListener, public ImageAreaToolListener, public rtengine::ImageTypeListener { - protected: - WhiteBalance* whitebalance; Vignetting* vignetting; Gradient* gradient; @@ -198,13 +197,11 @@ protected: void notebookPageChanged(Gtk::Widget* page, guint page_num); private: - EditDataProvider *editDataProvider; sigc::connection notebookconn; bool photoLoadedOnce; // Used to indicated that a photo has been loaded yet public: - CoarsePanel* coarse; Gtk::Notebook* toolPanelNotebook; @@ -215,7 +212,18 @@ public: { return hasChanged; } - void updateCurveBackgroundHistogram(LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); + void updateCurveBackgroundHistogram( + const LUTu& histToneCurve, + const LUTu& histLCurve, + const LUTu& histCCurve, + const LUTu& histLCAM, + const LUTu& histCCAM, + const LUTu& histRed, + const LUTu& histGreen, + const LUTu& histBlue, + const LUTu& histLuma, + const LUTu& histLRETI + ); void foldAllButOne(Gtk::Box* parent, FoldableToolPanel* openedSection); // multiple listeners can be added that are notified on changes (typical: profile panel and the history) @@ -225,12 +233,19 @@ public: } // toolpanellistener interface - void panelChanged(rtengine::ProcEvent event, const Glib::ustring& descr); + void panelChanged(const rtengine::ProcEvent& event, const Glib::ustring& descr); void imageTypeChanged(bool isRaw, bool isBayer, bool isXtrans, bool isMono = false); + // profilechangelistener interface - void profileChange(const rtengine::procparams::PartialProfile* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited = nullptr, bool fromLastSave = false); - void setDefaults(rtengine::procparams::ProcParams* defparams); + void profileChange( + const rtengine::procparams::PartialProfile* nparams, + const rtengine::ProcEvent& event, + const Glib::ustring& descr, + const ParamsEdited* paramsEdited = nullptr, + bool fromLastSave = false + ); + void setDefaults(const rtengine::procparams::ProcParams* defparams); // DirSelectionListener interface void dirSelected(const Glib::ustring& dirname, const Glib::ustring& openfile); @@ -285,22 +300,16 @@ public: void cropSelectRequested(); // icmpanellistener interface - void saveInputICCReference(Glib::ustring fname, bool apply_wb); + void saveInputICCReference(const Glib::ustring& fname, bool apply_wb); // imageareatoollistener interface void spotWBselected(int x, int y, Thumbnail* thm = nullptr); void sharpMaskSelected(bool sharpMask); + int getSpotWBRectSize() const; void cropSelectionReady(); void rotateSelectionReady(double rotate_deg, Thumbnail* thm = nullptr); - ToolBar* getToolBar() - { - return toolBar; - } - int getSpotWBRectSize(); - CropGUIListener* startCropEditing(Thumbnail* thm = nullptr) - { - return crop; - } + ToolBar* getToolBar() const; + CropGUIListener* startCropEditing(Thumbnail* thm = nullptr); void updateTPVScrollbar(bool hide); bool handleShortcutKey(GdkEventKey* event); diff --git a/rtgui/vibrance.cc b/rtgui/vibrance.cc index 51cb31a02..0069576e0 100644 --- a/rtgui/vibrance.cc +++ b/rtgui/vibrance.cc @@ -273,7 +273,7 @@ void Vibrance::pastsattog_toggled () } } -void Vibrance::adjusterChanged (Adjuster* a, double newval) +void Vibrance::adjusterChanged(Adjuster* a, double newval) { if (a == pastels && pastSatTog->get_active()) { saturated->setValue (newval); @@ -290,13 +290,32 @@ void Vibrance::adjusterChanged (Adjuster* a, double newval) } } -void Vibrance::adjusterChanged (ThresholdAdjuster* a, int newBottom, int newTop) +void Vibrance::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + +void Vibrance::adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) +{ +} + +void Vibrance::adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) +{ +} + +void Vibrance::adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) { if (listener && getEnabled()) { listener->panelChanged (EvVibrancePastSatThreshold, psThreshold->getHistoryString()); } } +void Vibrance::adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) +{ +} + +void Vibrance::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) +{ +} void Vibrance::setBatchMode(bool batchMode) { diff --git a/rtgui/vibrance.h b/rtgui/vibrance.h index ceb010434..62faf0c85 100644 --- a/rtgui/vibrance.h +++ b/rtgui/vibrance.h @@ -61,10 +61,16 @@ public: void trimValues (rtengine::procparams::ProcParams* pp); void setAdjusterBehavior (bool pastelsadd, bool saturatedadd); void adjusterChanged (Adjuster* a, double newval); - void adjusterChanged (ThresholdAdjuster* a, int newBottom, int newTop); + void adjusterAutoToggled (Adjuster* a, bool newval); void curveChanged (); void autoOpenCurve (); + void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop); + void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight); + void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop); + void adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight); + void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR); + void enabledChanged (); void protectskins_toggled (); void avoidcolorshift_toggled (); diff --git a/rtgui/vignetting.cc b/rtgui/vignetting.cc index dd8d0a2b1..34559ef21 100644 --- a/rtgui/vignetting.cc +++ b/rtgui/vignetting.cc @@ -112,9 +112,8 @@ void Vignetting::setDefaults (const ProcParams* defParams, const ParamsEdited* p } } -void Vignetting::adjusterChanged (Adjuster* a, double newval) +void Vignetting::adjusterChanged(Adjuster* a, double newval) { - if (listener) { if (a == amount) { listener->panelChanged (EvVignettingAmount, amount->getTextValue()); @@ -128,6 +127,10 @@ void Vignetting::adjusterChanged (Adjuster* a, double newval) } } +void Vignetting::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void Vignetting::setAdjusterBehavior (bool amountadd, bool radiusadd, bool strengthadd, bool centeradd) { diff --git a/rtgui/vignetting.h b/rtgui/vignetting.h index 029f16808..975bf7344 100644 --- a/rtgui/vignetting.h +++ b/rtgui/vignetting.h @@ -42,7 +42,8 @@ public: void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); void setBatchMode (bool batchMode); - void adjusterChanged (Adjuster* a, double newval); + void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void setAdjusterBehavior (bool amountadd, bool radiusadd, bool strengthadd, bool centeradd); void trimValues (rtengine::procparams::ProcParams* pp); }; diff --git a/rtgui/wavelet.cc b/rtgui/wavelet.cc index 7acce1e90..81fc282ab 100644 --- a/rtgui/wavelet.cc +++ b/rtgui/wavelet.cc @@ -1921,7 +1921,8 @@ void Wavelet::setDefaults (const ProcParams* defParams, const ParamsEdited* pedi } } } -void Wavelet::adjusterChanged (ThresholdAdjuster* a, double newBottom, double newTop) + +void Wavelet::adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop) { if (listener && (multiImage || getEnabled()) ) { if(a == level0noise) { @@ -1941,8 +1942,19 @@ void Wavelet::adjusterChanged (ThresholdAdjuster* a, double newBottom, double ne } } +void Wavelet::adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight) +{ +} -void Wavelet::adjusterChanged2 (ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) +void Wavelet::adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop) +{ +} + +void Wavelet::adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight) +{ +} + +void Wavelet::adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR) { if (listener && (multiImage || getEnabled()) ) { if(a == hueskin) { @@ -2389,7 +2401,7 @@ void Wavelet::adjusterUpdateUI (Adjuster* a) */ } -void Wavelet::adjusterChanged (Adjuster* a, double newval) +void Wavelet::adjusterChanged(Adjuster* a, double newval) { if (listener && (multiImage || getEnabled()) ) { if (a == edgthresh) { @@ -2517,6 +2529,10 @@ void Wavelet::adjusterChanged (Adjuster* a, double newval) } } +void Wavelet::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void Wavelet::enabledUpdateUI () { if (!batchMode) { diff --git a/rtgui/wavelet.h b/rtgui/wavelet.h index b73045228..5cbb5bfe3 100644 --- a/rtgui/wavelet.h +++ b/rtgui/wavelet.h @@ -43,9 +43,8 @@ public: ~Wavelet (); bool wavComputed_ (); - void adjusterChanged (ThresholdAdjuster* a, double newBottom, double newTop); - void adjusterChanged (Adjuster* a, double newval); - void adjusterChanged2 (ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR); + void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); void autoOpenCurve (); void curveChanged (CurveEditor* ce); void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); @@ -57,6 +56,12 @@ public: void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); void writeOptions (std::vector &tpOpen); + void adjusterChanged(ThresholdAdjuster* a, double newBottom, double newTop); + void adjusterChanged(ThresholdAdjuster* a, double newBottomLeft, double newTopLeft, double newBottomRight, double newTopRight); + void adjusterChanged(ThresholdAdjuster* a, int newBottom, int newTop); + void adjusterChanged(ThresholdAdjuster* a, int newBottomLeft, int newTopLeft, int newBottomRight, int newTopRight); + void adjusterChanged2(ThresholdAdjuster* a, int newBottomL, int newTopL, int newBottomR, int newTopR); + private: void foldAllButMe (GdkEventButton* event, MyExpander *expander); diff --git a/rtgui/whitebalance.cc b/rtgui/whitebalance.cc index 681ac16c2..1257a9c58 100644 --- a/rtgui/whitebalance.cc +++ b/rtgui/whitebalance.cc @@ -370,7 +370,7 @@ void WhiteBalance::enabledChanged() } -void WhiteBalance::adjusterChanged (Adjuster* a, double newval) +void WhiteBalance::adjusterChanged(Adjuster* a, double newval) { int tVal = (int)temp->getValue(); double gVal = green->getValue(); @@ -433,6 +433,10 @@ void WhiteBalance::adjusterChanged (Adjuster* a, double newval) } } +void WhiteBalance::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void WhiteBalance::optChanged () { Gtk::TreeModel::Row row = getActiveMethod(); diff --git a/rtgui/whitebalance.h b/rtgui/whitebalance.h index 8603d1c59..08ec05047 100644 --- a/rtgui/whitebalance.h +++ b/rtgui/whitebalance.h @@ -28,10 +28,9 @@ class SpotWBListener { - public: - virtual ~SpotWBListener () {} - virtual void spotWBRequested (int size) {} + virtual ~SpotWBListener() = default; + virtual void spotWBRequested(int size) = 0; }; class WhiteBalance : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public rtengine::AutoWBListener @@ -107,7 +106,8 @@ public: void optChanged (); void spotPressed (); void spotSizeChanged (); - void adjusterChanged (Adjuster* a, double newval); + void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); int getSize (); void setWBProvider (WBProvider* p) { diff --git a/rtgui/windirmonitor.h b/rtgui/windirmonitor.h index b9be67a5a..8e18b7914 100644 --- a/rtgui/windirmonitor.h +++ b/rtgui/windirmonitor.h @@ -27,7 +27,7 @@ class WinDirChangeListener public: virtual ~WinDirChangeListener() = default; - virtual void winDirChanged () {} + virtual void winDirChanged() = 0; }; class WinDirMonitor : public Glib::Object diff --git a/rtgui/xtransprocess.cc b/rtgui/xtransprocess.cc index 27b5810c4..744c6f148 100644 --- a/rtgui/xtransprocess.cc +++ b/rtgui/xtransprocess.cc @@ -174,7 +174,7 @@ void XTransProcess::setDefaults(const rtengine::procparams::ProcParams* defParam } } -void XTransProcess::adjusterChanged (Adjuster* a, double newval) +void XTransProcess::adjusterChanged(Adjuster* a, double newval) { if (listener) { if (a == ccSteps) { @@ -185,6 +185,10 @@ void XTransProcess::adjusterChanged (Adjuster* a, double newval) } } +void XTransProcess::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void XTransProcess::methodChanged () { const int curSelection = method->get_active_row_number(); diff --git a/rtgui/xtransprocess.h b/rtgui/xtransprocess.h index edc0965b8..bd2086f77 100644 --- a/rtgui/xtransprocess.h +++ b/rtgui/xtransprocess.h @@ -51,6 +51,7 @@ public: void methodChanged(); void adjusterChanged(Adjuster* a, double newval); + void adjusterAutoToggled(Adjuster* a, bool newval); }; #endif diff --git a/rtgui/xtransrawexposure.cc b/rtgui/xtransrawexposure.cc index 480112537..19fcb0c46 100644 --- a/rtgui/xtransrawexposure.cc +++ b/rtgui/xtransrawexposure.cc @@ -90,7 +90,7 @@ void XTransRAWExposure::write( rtengine::procparams::ProcParams* pp, ParamsEdite } -void XTransRAWExposure::adjusterChanged (Adjuster* a, double newval) +void XTransRAWExposure::adjusterChanged(Adjuster* a, double newval) { if (listener) { Glib::ustring value = a->getTextValue(); @@ -105,6 +105,10 @@ void XTransRAWExposure::adjusterChanged (Adjuster* a, double newval) } } +void XTransRAWExposure::adjusterAutoToggled(Adjuster* a, bool newval) +{ +} + void XTransRAWExposure::setBatchMode(bool batchMode) { ToolPanel::setBatchMode (batchMode); diff --git a/rtgui/xtransrawexposure.h b/rtgui/xtransrawexposure.h index 4ed046a07..fc95d5743 100644 --- a/rtgui/xtransrawexposure.h +++ b/rtgui/xtransrawexposure.h @@ -43,6 +43,7 @@ public: void setBatchMode (bool batchMode); void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); void adjusterChanged (Adjuster* a, double newval); + void adjusterAutoToggled (Adjuster* a, bool newval); void setAdjusterBehavior (bool pexblackadd); void trimValues (rtengine::procparams::ProcParams* pp); };