diff --git a/CMakeLists.txt b/CMakeLists.txt
index ea95d818c..f2739c4da 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -252,6 +252,12 @@ if(DEFINED LENSFUNDBDIR AND NOT IS_ABSOLUTE "${LENSFUNDBDIR}")
set(LENSFUNDBDIR "${DATADIR}/${LENSFUNDBDIR}")
endif()
+if(APPLE)
+ if("${CODESIGNID}")
+ set(CODESIGNID "${CODESIGNID}" CACHE STRING "Codesigning Identity")
+ endif()
+endif()
+
# Enforce absolute paths for non-bundle builds:
if(NOT BUILD_BUNDLE)
foreach(path BINDIR DATADIR LIBDIR DOCDIR CREDITSDIR LICENCEDIR)
diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala
index a8d381a8e..c3a7ea1d0 100644
--- a/rtdata/languages/Catala
+++ b/rtdata/languages/Catala
@@ -587,7 +587,6 @@ PREFERENCES_TAB_GENERAL;General
PREFERENCES_TAB_IMPROC;Processament de la imatge
PREFERENCES_TAB_SOUND;Sons
PREFERENCES_TP_LABEL;Panell d'eines:
-PREFERENCES_TP_USEICONORTEXT;Usa les icones tab en comptes de text
PREFERENCES_TP_VSCROLLBAR;Amaga la barra d'eines vertical
PREFERENCES_WORKFLOW;Flux de treball
PROFILEPANEL_COPYPPASTE;Paràmetres a copiar
@@ -1343,7 +1342,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1465,6 +1464,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified)
index 78667ee02..077da51c0 100644
--- a/rtdata/languages/Chinese (Simplified)
+++ b/rtdata/languages/Chinese (Simplified)
@@ -661,7 +661,6 @@ PREFERENCES_TAB_IMPROC;图片处理
PREFERENCES_TAB_SOUND;音效
PREFERENCES_THEME;主题
PREFERENCES_TP_LABEL;工具栏
-PREFERENCES_TP_USEICONORTEXT;标签使用图标而不是文本
PREFERENCES_TP_VSCROLLBAR;隐藏垂直滚动栏
PREFERENCES_TUNNELMETADATA;无损复制 Exif/IPTC/XMP 到输出文件
PREFERENCES_USEBUNDLEDPROFILES;启用内置预设
@@ -1420,7 +1419,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1526,6 +1525,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!PARTIALPASTE_LOCALCONTRAST;Local contrast
!PARTIALPASTE_METADATA;Metadata mode
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_SOFTLIGHT;Soft light
!PARTIALPASTE_TM_FATTAL;Dynamic range compression
diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional)
index 6e7698f9a..2b2477748 100644
--- a/rtdata/languages/Chinese (Traditional)
+++ b/rtdata/languages/Chinese (Traditional)
@@ -1004,7 +1004,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1182,6 +1182,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1339,7 +1340,6 @@ TP_WBALANCE_TEMPERATURE;色溫
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech
index 671fde250..18af7bf65 100644
--- a/rtdata/languages/Czech
+++ b/rtdata/languages/Czech
@@ -1168,7 +1168,6 @@ PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Obrázek k zobrazení
PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutrální vykreslení raw
PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Vložený JPEG náhled pokud je v plné velikosti, jinak neutrální raw
PREFERENCES_TP_LABEL;Panel nástrojů:
-PREFERENCES_TP_USEICONORTEXT;V záhlaví karty zobrazit ikonu namísto textu
PREFERENCES_TP_VSCROLLBAR;Skrýt svislou posuvnou lištu
PREFERENCES_TUNNELMETADATA;Zkopírovat nezměněná Exif/IPTC/XMP metadata do výstupního souboru
PREFERENCES_USEBUNDLEDPROFILES;Použít přiložené profily
@@ -2216,7 +2215,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
!HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - Demosaic method for motion
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -2267,6 +2266,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
!MAIN_BUTTON_ICCPROFCREATOR;ICC Profile Creator
!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_SOFTLIGHT;Soft light
!PARTIALPASTE_TM_FATTAL;Dynamic range compression
diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk
index 9e1d79191..547c5a6e6 100644
--- a/rtdata/languages/Dansk
+++ b/rtdata/languages/Dansk
@@ -999,7 +999,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1179,6 +1179,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1336,7 +1337,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch
index d9488295e..ef518868d 100644
--- a/rtdata/languages/Deutsch
+++ b/rtdata/languages/Deutsch
@@ -69,6 +69,7 @@
#68 05.07.2018 Erweiterung (TooWaBoo) RT 5.4
#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
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Danksagungen
@@ -816,6 +817,8 @@ HISTORY_MSG_PIXELSHIFT_DEMOSAIC;(Sensor-Matrix)\nFarbinterpolation - PS\nBewegun
HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;(Sensor-Matrix)\nVorverarbeitung\nRichtung
HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;(Sensor-Matrix)\nVorverarbeitung\nPDAF-Zeilenfilter
HISTORY_MSG_PRSHARPEN_CONTRAST;(Skalieren) - Schärfen\nKontrastschwelle
+HISTORY_MSG_RAWCACORR_AUTOIT;(Sensor-Matrix)\nChromatische Aberration\nIterationen
+HISTORY_MSG_RAWCACORR_COLORSHIFT;(Sensor-Matrix)\nChromatische Aberration\nFarbverschiebungen\nvermeiden
HISTORY_MSG_RAW_BORDER;(Sensor-Matrix)\nFarbinterpolation\nBildrand
HISTORY_MSG_RESIZE_ALLOWUPSCALING;(Skalieren)\nHochskalieren zulassen
HISTORY_MSG_SHARPENING_CONTRAST;(Schärfung)\nKontrastschwelle
@@ -1058,6 +1061,7 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Vorverarbeitung: Zeilenrauschfilter
PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;Vorverarbeitung: PDAF-Zeilenfilter
PARTIALPASTE_PRSHARPENING;Schärfung nach Größenänderung
PARTIALPASTE_RAWCACORR_AUTO;Chromatische Aberration: Automatische Korrektur
+PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;Chromatische Aberration: Farbverschiebungen vermeiden
PARTIALPASTE_RAWCACORR_CAREDBLUE;Chromatische Aberration: Rot & Blau
PARTIALPASTE_RAWEXPOS_BLACK;Weißpunkt: Schwarzpegel
PARTIALPASTE_RAWEXPOS_LINEAR;Weißpunkt: Korrekturfaktor
@@ -1224,6 +1228,8 @@ PREFERENCES_PARSEDEXTADDHINT;Dateityp zur Liste hinzufügen
PREFERENCES_PARSEDEXTDELHINT;Ausgewählten Dateityp aus Liste entfernen
PREFERENCES_PARSEDEXTDOWNHINT;Ausgewählten Dateityp nach unten verschieben.
PREFERENCES_PARSEDEXTUPHINT;Ausgewählten Dateityp nach oben verschieben.
+PREFERENCES_PERFORMANCE_THREADS;Threads
+PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximale Anzahl Threads der Rauschreduzierung und Wavelet (0 = Automatik)
PREFERENCES_PREVDEMO;Farbinterpolation
PREFERENCES_PREVDEMO_FAST;Schnell
PREFERENCES_PREVDEMO_LABEL;Demosaikmethode für 100%-Ansicht
@@ -1270,6 +1276,7 @@ PREFERENCES_TAB_COLORMGR;Farbmanagement
PREFERENCES_TAB_DYNAMICPROFILE;Dynamisches Profil
PREFERENCES_TAB_GENERAL;Allgemein
PREFERENCES_TAB_IMPROC;Bildbearbeitung
+PREFERENCES_TAB_PERFORMANCE;Performance
PREFERENCES_TAB_SOUND;Klänge
PREFERENCES_THEME;Oberflächendesign
PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Eingebundenes JPEG
@@ -1277,7 +1284,6 @@ PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Bildanzeige
PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutrales RAW-Bild
PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Eingebundenes JPEG wenn in Originalgröße, sonst neutrales RAW-Bild
PREFERENCES_TP_LABEL;Werkzeugbereich:
-PREFERENCES_TP_USEICONORTEXT;Symbole statt Text in Karteireitern
PREFERENCES_TP_VSCROLLBAR;Keine vertikale Scrollbar
PREFERENCES_TUNNELMETADATA;Exif/XMP unverändert in die Ausgabedatei übernehmen.
PREFERENCES_USEBUNDLEDPROFILES;Standardprofile verwenden
@@ -1331,6 +1337,7 @@ SAMPLEFORMAT_32;24 Bit Gleitkomma
SAMPLEFORMAT_64;32 Bit Gleitkomma
SAVEDLG_AUTOSUFFIX;Suffix anfügen, wenn die Datei bereits existiert
SAVEDLG_FILEFORMAT;Dateiformat
+SAVEDLG_FILEFORMAT_FLOAT; Fließkomma
SAVEDLG_FORCEFORMATOPTS;Erzwinge Speicheroptionen
SAVEDLG_JPEGQUAL;JPEG-Qualität
SAVEDLG_PNGCOMPR;PNG-Kompression
@@ -1858,6 +1865,8 @@ TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Minimiert Streifenrauschen, das bei Gegenl
TP_PRSHARPENING_LABEL;Nach Skalierung schärfen
TP_PRSHARPENING_TOOLTIP;Schärft das Bild nach der Größenänderung.\nFunktioniert nur mit der Methode “Lanczos“.\nDas Ergebnis wird nicht in RawTherapee\nangezeigt.\n\nWeitere Informationen finden Sie auf “RawPedia“.
TP_RAWCACORR_AUTO;Automatische Korrektur
+TP_RAWCACORR_AUTOIT;Iterationen
+TP_RAWCACORR_AVOIDCOLORSHIFT;Farbverschiebungen vermeiden
TP_RAWCACORR_CABLUE;Blau
TP_RAWCACORR_CARED;Rot
TP_RAWCACORR_CASTR;Intensität
@@ -2348,15 +2357,3 @@ ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen\nTaste: Alt + f
ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: +
ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: -
-!!!!!!!!!!!!!!!!!!!!!!!!!
-! Untranslated keys follow; remove the ! prefix after an entry is translated.
-!!!!!!!!!!!!!!!!!!!!!!!!!
-
-!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
-!PREFERENCES_PERFORMANCE_THREADS;Threads
-!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic)
-!PREFERENCES_TAB_PERFORMANCE;Performance
-!SAVEDLG_FILEFORMAT_FLOAT; floating-point
-!TP_RAWCACORR_AUTOIT;Iterations
-!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift
diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK)
index 9fdef1914..800e23527 100644
--- a/rtdata/languages/English (UK)
+++ b/rtdata/languages/English (UK)
@@ -26,7 +26,7 @@ HISTORY_MSG_392;W - Residual - Colour Balance
HISTORY_MSG_419;Retinex - Colour space
HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colours
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Colour correction
-HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid colour shift
+HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid colour shift
MAIN_TAB_COLOR;Colour
MAIN_TOOLTIP_BACKCOLOR0;Background colour of the preview: Theme-based\nShortcut: 9
MAIN_TOOLTIP_BACKCOLOR1;Background colour of the preview: Black\nShortcut: 9
@@ -35,6 +35,7 @@ MAIN_TOOLTIP_BACKCOLOR3;Background colour of the preview: Middle grey\nSh
PARTIALPASTE_COLORGROUP;Colour Related Settings
PARTIALPASTE_COLORTONING;Colour toning
PARTIALPASTE_ICMSETTINGS;Colour management settings
+PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid colour shift
PARTIALPASTE_RAW_FALSECOLOR;False colour suppression
PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor colour profile
PREFERENCES_BEHAVIOR;Behaviour
@@ -1273,7 +1274,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US)
index 944457486..fc2fa83dd 100644
--- a/rtdata/languages/English (US)
+++ b/rtdata/languages/English (US)
@@ -749,7 +749,7 @@
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -990,6 +990,7 @@
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1207,7 +1208,6 @@
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol
index 8560fd93c..5402f6579 100644
--- a/rtdata/languages/Espanol
+++ b/rtdata/languages/Espanol
@@ -842,7 +842,6 @@ PREFERENCES_TAB_GENERAL;General
PREFERENCES_TAB_IMPROC;Procesamiento de imágenes
PREFERENCES_TAB_SOUND;Sonidos
PREFERENCES_TP_LABEL;Panel de herramientas:
-PREFERENCES_TP_USEICONORTEXT;Usar iconos de pestaña en lugar de texto
PREFERENCES_TP_VSCROLLBAR;Ocultar barra de desplazamiento vertical del panel de herramientas
PREFERENCES_USEBUNDLEDPROFILES;Usar perfiles empaquetados
PREFERENCES_VIEW;Balance de blancos en el dispositivo de salida (monitor, TV, proyector...)
@@ -1727,7 +1726,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1831,6 +1830,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!PARTIALPASTE_METADATA;Metadata mode
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara
index e3559ff98..851536a29 100644
--- a/rtdata/languages/Euskara
+++ b/rtdata/languages/Euskara
@@ -1000,7 +1000,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1180,6 +1180,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1337,7 +1338,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index a20f9251d..9c1fcce59 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -1167,7 +1167,6 @@ PREFERENCES_TAB_IMPROC;Traitement de l'image
PREFERENCES_TAB_SOUND;Sons
PREFERENCES_THEME;Thème
PREFERENCES_TP_LABEL;Panneau des outils:
-PREFERENCES_TP_USEICONORTEXT;Utiliser des icônes au lieu de textes
PREFERENCES_TP_VSCROLLBAR;Cacher la barre de défilement verticale
PREFERENCES_TUNNELMETADATA;Copier les données Exif/IPTC/XMP tel quel dans le fichier de sortie
PREFERENCES_USEBUNDLEDPROFILES;Utiliser les profils fournis
@@ -2239,7 +2238,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -2250,6 +2249,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
!ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Append gamma and slope values to the description
!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%.
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_SOFTLIGHT;Soft light
!PARTIALPASTE_TM_FATTAL;Dynamic range compression
diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek
index 9c7c024f9..086710b52 100644
--- a/rtdata/languages/Greek
+++ b/rtdata/languages/Greek
@@ -999,7 +999,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1179,6 +1179,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1336,7 +1337,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew
index 85bc43c05..c7477fd09 100644
--- a/rtdata/languages/Hebrew
+++ b/rtdata/languages/Hebrew
@@ -1000,7 +1000,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1180,6 +1180,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1337,7 +1338,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano
index 9ee5e607a..ca048d956 100644
--- a/rtdata/languages/Italiano
+++ b/rtdata/languages/Italiano
@@ -747,7 +747,6 @@ PREFERENCES_TAB_GENERAL;Generale
PREFERENCES_TAB_IMPROC;Elaborazione immagine
PREFERENCES_TAB_SOUND;Suoni
PREFERENCES_TP_LABEL;Pannello Strumenti:
-PREFERENCES_TP_USEICONORTEXT;Utilizza le icone delle schede anziché il testo
PREFERENCES_TP_VSCROLLBAR;Nascondi la barra di scorrimento verticale
PREFERENCES_USEBUNDLEDPROFILES;Usa profili inclusi
PREFERENCES_VIEW;Bilanciamento del bianco del dispositivo di uscita (monitor, TV, proiettore...)
@@ -1602,7 +1601,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1702,6 +1701,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese
index 038548deb..fe8b79022 100644
--- a/rtdata/languages/Japanese
+++ b/rtdata/languages/Japanese
@@ -779,8 +779,8 @@ HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - 振れに対するデモザイクの方式
HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;ラインノイズフィルタの方向
HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAFラインフィルタ
HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - コントラストのしきい値
-HISTORY_MSG_RAWCACORR_AUTOIT;Rawの色順応補正 - 繰り返し
-HISTORY_MSG_RAWCACORR_COLOURSHIFT;Rawの色順応補正 - 色ずれを回避
+HISTORY_MSG_RAWCACORR_AUTOIT;Rawの色収差補正 - 繰り返し
+HISTORY_MSG_RAWCACORR_COLORSHIFT;Rawの色収差補正 - 色ずれを回避
HISTORY_MSG_RAW_BORDER;Rawの境界
HISTORY_MSG_RESIZE_ALLOWUPSCALING;リサイズ - アップスケーリングを可能にする
HISTORY_MSG_SHARPENING_CONTRAST;シャープ化 - コントラストのしきい値
@@ -1238,7 +1238,6 @@ PREFERENCES_THUMBNAIL_INSPECTOR_MODE;表示する画像
PREFERENCES_THUMBNAIL_INSPECTOR_RAW;ニュートラルなrawレンダリング
PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;埋め込まれているJPEGがフルサイズの場合、指定がなければニュートラルなrawレンダリングで表示
PREFERENCES_TP_LABEL;ツール パネル:
-PREFERENCES_TP_USEICONORTEXT;テキストの代わりにタブアイコンを使用
PREFERENCES_TP_VSCROLLBAR;ツールパネルの垂直スクロールバーを隠す
PREFERENCES_TUNNELMETADATA;Exif/IPTC/XMPを変更を加えずに出力ファイルにコピー
PREFERENCES_USEBUNDLEDPROFILES;付属のプロファイルを使用
@@ -2287,3 +2286,8 @@ ZOOMPANEL_ZOOMFITSCREEN;画像全体を画面に合わせる\nショートカッ
ZOOMPANEL_ZOOMIN;ズームイン\nショートカット: +
ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
+!!!!!!!!!!!!!!!!!!!!!!!!!
+! Untranslated keys follow; remove the ! prefix after an entry is translated.
+!!!!!!!!!!!!!!!!!!!!!!!!!
+
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian
index 212330c9c..6689e4f95 100644
--- a/rtdata/languages/Latvian
+++ b/rtdata/languages/Latvian
@@ -1000,7 +1000,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1180,6 +1180,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1337,7 +1338,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar
index 00dc4d800..d0f806fea 100644
--- a/rtdata/languages/Magyar
+++ b/rtdata/languages/Magyar
@@ -570,7 +570,6 @@ PREFERENCES_TAB_GENERAL;Általános
PREFERENCES_TAB_IMPROC;Képfeldolgozás
PREFERENCES_TAB_SOUND;Hangok
PREFERENCES_TP_LABEL;Eszközök panel:
-PREFERENCES_TP_USEICONORTEXT;Ikonok használata szöveg helyett a füleken
PREFERENCES_TP_VSCROLLBAR;Függőleges görgetősáv elrejtése
PREFERENCES_WORKFLOW;Munkamenet
PROFILEPANEL_COPYPPASTE;Másolandó paraméterek
@@ -1273,7 +1272,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1400,6 +1399,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands
index d002263bc..f5948ef26 100644
--- a/rtdata/languages/Nederlands
+++ b/rtdata/languages/Nederlands
@@ -1076,7 +1076,6 @@ PREFERENCES_TAB_GENERAL;Algemeen
PREFERENCES_TAB_IMPROC;Beeldverwerking
PREFERENCES_TAB_SOUND;Geluiden
PREFERENCES_TP_LABEL;Gereedschapspaneel:
-PREFERENCES_TP_USEICONORTEXT;Gebruik iconen ipv. tekst voor de tabbladen
PREFERENCES_TP_VSCROLLBAR;Verberg de schuifbalk van het gereedschapspaneel
PREFERENCES_TUNNELMETADATA;Kopieer Exif/IPTC/XMP-data onveranderd naar uitvoerbestand
PREFERENCES_USEBUNDLEDPROFILES;Gebruik gebundelde profielen
@@ -2136,7 +2135,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -2201,6 +2200,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!PARTIALPASTE_LOCALCONTRAST;Local contrast
!PARTIALPASTE_METADATA;Metadata mode
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_SOFTLIGHT;Soft light
!PARTIALPASTE_TM_FATTAL;Dynamic range compression
diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM
index f61fa7a88..4a76fdcda 100644
--- a/rtdata/languages/Norsk BM
+++ b/rtdata/languages/Norsk BM
@@ -999,7 +999,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1179,6 +1179,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1336,7 +1337,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish
index 3558870b8..f54de5593 100644
--- a/rtdata/languages/Polish
+++ b/rtdata/languages/Polish
@@ -797,7 +797,6 @@ PREFERENCES_TAB_GENERAL;Ogólne
PREFERENCES_TAB_IMPROC;Przetwarzanie obrazu
PREFERENCES_TAB_SOUND;Dźwięki
PREFERENCES_TP_LABEL;Panel narzędzi:
-PREFERENCES_TP_USEICONORTEXT;Uzyj ikon w zakładkach zamiast tekstowych etykiet
PREFERENCES_TP_VSCROLLBAR;Ukry pionowy pasek przesuwania
PREFERENCES_USEBUNDLEDPROFILES;Użyj załączone profile przetwarzania
PREFERENCES_VIEW;Balans bieli urządzenia wyjściowego (monitora, TV, projektora, widowni, etc.)
@@ -1684,7 +1683,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1779,6 +1778,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!PARTIALPASTE_METADATA;Metadata mode
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters)
index 27740a48c..d3e62a777 100644
--- a/rtdata/languages/Polish (Latin Characters)
+++ b/rtdata/languages/Polish (Latin Characters)
@@ -797,7 +797,6 @@ PREFERENCES_TAB_GENERAL;Ogolne
PREFERENCES_TAB_IMPROC;Przetwarzanie obrazu
PREFERENCES_TAB_SOUND;Dzwieki
PREFERENCES_TP_LABEL;Panel narzedzi:
-PREFERENCES_TP_USEICONORTEXT;Uzyj ikon w zakladkach zamiast tekstowych etykiet
PREFERENCES_TP_VSCROLLBAR;Ukry pionowy pasek przesuwania
PREFERENCES_USEBUNDLEDPROFILES;Uzyj zalaczone profile przetwarzania
PREFERENCES_VIEW;Balans bieli urzadzenia wyjsciowego (monitora, TV, projektora, widowni, etc.)
@@ -1684,7 +1683,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1779,6 +1778,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!PARTIALPASTE_METADATA;Metadata mode
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil)
index ba33f8228..7acb91cce 100644
--- a/rtdata/languages/Portugues (Brasil)
+++ b/rtdata/languages/Portugues (Brasil)
@@ -1199,7 +1199,6 @@ PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Imagem para mostrar
PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Renderização raw neutra
PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;JPEG incorporado se tamanho completo, raw neutro caso contrário
PREFERENCES_TP_LABEL;Painel de ferramentas:
-PREFERENCES_TP_USEICONORTEXT;Use ícones de guias em vez de texto
PREFERENCES_TP_VSCROLLBAR;Ocultar barra de rolagem vertical
PREFERENCES_TUNNELMETADATA;Copiar Exif/IPTC/XMP inalterado para o arquivo de saída
PREFERENCES_USEBUNDLEDPROFILES;Use perfis agrupados
@@ -2257,8 +2256,9 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: -
!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram.
!HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift
!ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Append gamma and slope values to the description
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PREFERENCES_PERFORMANCE_THREADS;Threads
!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic)
!PREFERENCES_TAB_PERFORMANCE;Performance
diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian
index 774e2d580..36b63772e 100644
--- a/rtdata/languages/Russian
+++ b/rtdata/languages/Russian
@@ -803,7 +803,6 @@ PREFERENCES_TAB_IMPROC;Обработка изображения
PREFERENCES_TAB_SOUND;Звуки
PREFERENCES_THEME;Тема
PREFERENCES_TP_LABEL;Панель инструментов:
-PREFERENCES_TP_USEICONORTEXT;Использовать иконки вместо текста
PREFERENCES_TP_VSCROLLBAR;Спрятать вертикальную полосу прокрутки
PREFERENCES_USEBUNDLEDPROFILES;Использовать предустановленный профиль
PREFERENCES_VIEW;ББ устройства вывода (монитор, проектор и т.д.)
@@ -1656,7 +1655,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1745,6 +1744,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: -
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters)
index 675e710aa..e69c9b874 100644
--- a/rtdata/languages/Serbian (Cyrilic Characters)
+++ b/rtdata/languages/Serbian (Cyrilic Characters)
@@ -714,7 +714,6 @@ PREFERENCES_TAB_GENERAL;Опште
PREFERENCES_TAB_IMPROC;Обрада сликe
PREFERENCES_TAB_SOUND;Звуци
PREFERENCES_TP_LABEL;Површ алата:
-PREFERENCES_TP_USEICONORTEXT;Користи иконице језичка уместо текста
PREFERENCES_TP_VSCROLLBAR;Сакриј клизаче у области са алаткама
PREFERENCES_TUNNELMETADATA;Копирај неизмењене IPTC/XMP (када је слика означена другим програмом)
PREFERENCES_USEBUNDLEDPROFILES;Користи профиле који долазе уз програм
@@ -1578,7 +1577,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1688,6 +1687,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters)
index f41d7e36e..727cdeb9a 100644
--- a/rtdata/languages/Serbian (Latin Characters)
+++ b/rtdata/languages/Serbian (Latin Characters)
@@ -714,7 +714,6 @@ PREFERENCES_TAB_GENERAL;Opšte
PREFERENCES_TAB_IMPROC;Obrada slike
PREFERENCES_TAB_SOUND;Zvuci
PREFERENCES_TP_LABEL;Površ alata:
-PREFERENCES_TP_USEICONORTEXT;Koristi ikonice jezička umesto teksta
PREFERENCES_TP_VSCROLLBAR;Sakrij klizače u oblasti sa alatkama
PREFERENCES_TUNNELMETADATA;Kopiraj neizmenjene IPTC/XMP (kada je slika označena drugim programom)
PREFERENCES_USEBUNDLEDPROFILES;Koristi profile koji dolaze uz program
@@ -1578,7 +1577,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1688,6 +1687,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak
index b5ff03253..022c715e3 100644
--- a/rtdata/languages/Slovak
+++ b/rtdata/languages/Slovak
@@ -1062,7 +1062,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1233,6 +1233,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1380,7 +1381,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi
index e0ca416d0..722bf1b0b 100644
--- a/rtdata/languages/Suomi
+++ b/rtdata/languages/Suomi
@@ -1001,7 +1001,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1181,6 +1181,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1338,7 +1339,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish
index 049162e68..44c5dd475 100644
--- a/rtdata/languages/Swedish
+++ b/rtdata/languages/Swedish
@@ -970,7 +970,6 @@ PREFERENCES_TAB_GENERAL;Allmän
PREFERENCES_TAB_IMPROC;Bildbehandling
PREFERENCES_TAB_SOUND;Ljud
PREFERENCES_TP_LABEL;Verktygspanel:
-PREFERENCES_TP_USEICONORTEXT;Använd ikoner istället för text
PREFERENCES_TP_VSCROLLBAR;Göm verktygpanelens vertikala skrollist
PREFERENCES_TUNNELMETADATA;Kopiera Exif/IPTC/XMP till utfilen oförändrat
PREFERENCES_USEBUNDLEDPROFILES;Visa förinstallerade profiler
@@ -1939,7 +1938,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -2031,6 +2030,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!PARTIALPASTE_LOCALCONTRAST;Local contrast
!PARTIALPASTE_METADATA;Metadata mode
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAW_BORDER;Raw border
!PARTIALPASTE_RAW_IMAGENUM;Sub-image
diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish
index bae5f69de..a3dd1d5ea 100644
--- a/rtdata/languages/Turkish
+++ b/rtdata/languages/Turkish
@@ -1000,7 +1000,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+!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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1180,6 +1180,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1337,7 +1338,6 @@ TP_WBALANCE_TEMPERATURE;Isı
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
!PREFERENCES_TP_LABEL;Tool panel:
-!PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
!PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/languages/default b/rtdata/languages/default
index 2b525a260..00bdf0675 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -870,7 +870,7 @@ HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold
HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations
-HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift
+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_SHARPENING_CONTRAST;Sharpening - Contrast threshold
@@ -1115,6 +1115,7 @@ PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
PARTIALPASTE_PRSHARPENING;Post-resize sharpening
PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
+PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift
PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue
PARTIALPASTE_RAWEXPOS_BLACK;Black levels
PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
@@ -1344,7 +1345,6 @@ PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show
PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
PREFERENCES_TP_LABEL;Tool panel:
-PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text
PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar
PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles
diff --git a/rtdata/profiles/Auto-Matched Curve - ISO High.pp3 b/rtdata/profiles/Auto-Matched Curve - ISO High.pp3
index c3f286ae3..36dd66908 100644
--- a/rtdata/profiles/Auto-Matched Curve - ISO High.pp3
+++ b/rtdata/profiles/Auto-Matched Curve - ISO High.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=5.3-544-gc2e7d924
-Version=330
-
[HLRecovery]
Enabled=true
Method=Blend
diff --git a/rtdata/profiles/Auto-Matched Curve - ISO Low.pp3 b/rtdata/profiles/Auto-Matched Curve - ISO Low.pp3
index 0e9827677..7af720c4d 100644
--- a/rtdata/profiles/Auto-Matched Curve - ISO Low.pp3
+++ b/rtdata/profiles/Auto-Matched Curve - ISO Low.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=5.3-544-gc2e7d924
-Version=330
-
[HLRecovery]
Enabled=true
Method=Blend
diff --git a/rtdata/profiles/Auto-Matched Curve - ISO Medium.pp3 b/rtdata/profiles/Auto-Matched Curve - ISO Medium.pp3
index 02487a9cd..a391a7d2c 100644
--- a/rtdata/profiles/Auto-Matched Curve - ISO Medium.pp3
+++ b/rtdata/profiles/Auto-Matched Curve - ISO Medium.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=5.3-544-gc2e7d924
-Version=330
-
[HLRecovery]
Enabled=true
Method=Blend
diff --git a/rtdata/profiles/Black-and-White/Black-and-White 1.pp3 b/rtdata/profiles/Black-and-White/Black-and-White 1.pp3
index 8ee75890b..871cc7289 100644
--- a/rtdata/profiles/Black-and-White/Black-and-White 1.pp3
+++ b/rtdata/profiles/Black-and-White/Black-and-White 1.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=true
Clip=0.02
diff --git a/rtdata/profiles/Black-and-White/Black-and-White 2.pp3 b/rtdata/profiles/Black-and-White/Black-and-White 2.pp3
index f45ce9eb8..20579d56a 100644
--- a/rtdata/profiles/Black-and-White/Black-and-White 2.pp3
+++ b/rtdata/profiles/Black-and-White/Black-and-White 2.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=true
Clip=0.02
diff --git a/rtdata/profiles/Black-and-White/Black-and-White 3.pp3 b/rtdata/profiles/Black-and-White/Black-and-White 3.pp3
index ae512281a..0e62f7a0b 100644
--- a/rtdata/profiles/Black-and-White/Black-and-White 3.pp3
+++ b/rtdata/profiles/Black-and-White/Black-and-White 3.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=true
Clip=0.02
diff --git a/rtdata/profiles/Black-and-White/Black-and-White 4.pp3 b/rtdata/profiles/Black-and-White/Black-and-White 4.pp3
index 630b5bafc..679630c4c 100644
--- a/rtdata/profiles/Black-and-White/Black-and-White 4.pp3
+++ b/rtdata/profiles/Black-and-White/Black-and-White 4.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=true
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Amber 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Amber 1 TM Bright.pp3
index dc602e9f8..b636f3a8d 100644
--- a/rtdata/profiles/Faded/Faded Amber 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Amber 1 TM Bright.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Amber 1 TM.pp3 b/rtdata/profiles/Faded/Faded Amber 1 TM.pp3
index 9841feaf6..781ed1380 100644
--- a/rtdata/profiles/Faded/Faded Amber 1 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Amber 1 TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Amber 1.pp3 b/rtdata/profiles/Faded/Faded Amber 1.pp3
index f446ddfde..068fb369c 100644
--- a/rtdata/profiles/Faded/Faded Amber 1.pp3
+++ b/rtdata/profiles/Faded/Faded Amber 1.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Blue 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Blue 1 TM Bright.pp3
index ca5cd1608..43a1f72bd 100644
--- a/rtdata/profiles/Faded/Faded Blue 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Blue 1 TM Bright.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Blue 1 TM.pp3 b/rtdata/profiles/Faded/Faded Blue 1 TM.pp3
index 121969069..a0931ff2c 100644
--- a/rtdata/profiles/Faded/Faded Blue 1 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Blue 1 TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Blue 1.pp3 b/rtdata/profiles/Faded/Faded Blue 1.pp3
index 55cdb7493..a25670c0f 100644
--- a/rtdata/profiles/Faded/Faded Blue 1.pp3
+++ b/rtdata/profiles/Faded/Faded Blue 1.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Blue Pink TM.pp3 b/rtdata/profiles/Faded/Faded Blue Pink TM.pp3
index 571d11611..6950325f1 100644
--- a/rtdata/profiles/Faded/Faded Blue Pink TM.pp3
+++ b/rtdata/profiles/Faded/Faded Blue Pink TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Blue Pink.pp3 b/rtdata/profiles/Faded/Faded Blue Pink.pp3
index c60fe23d2..ac426a671 100644
--- a/rtdata/profiles/Faded/Faded Blue Pink.pp3
+++ b/rtdata/profiles/Faded/Faded Blue Pink.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Chocolate 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Chocolate 1 TM Bright.pp3
index 3ae99186e..ec0b45cf8 100644
--- a/rtdata/profiles/Faded/Faded Chocolate 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Chocolate 1 TM Bright.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Chocolate 2 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Chocolate 2 TM Bright.pp3
index 3eb53a151..e60da1e22 100644
--- a/rtdata/profiles/Faded/Faded Chocolate 2 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Chocolate 2 TM Bright.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Golden 1.pp3 b/rtdata/profiles/Faded/Faded Golden 1.pp3
index c8f5d26a4..68e7d163c 100644
--- a/rtdata/profiles/Faded/Faded Golden 1.pp3
+++ b/rtdata/profiles/Faded/Faded Golden 1.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Golden 2.pp3 b/rtdata/profiles/Faded/Faded Golden 2.pp3
index 1e7bb927d..ffb688403 100644
--- a/rtdata/profiles/Faded/Faded Golden 2.pp3
+++ b/rtdata/profiles/Faded/Faded Golden 2.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Green 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Green 1 TM Bright.pp3
index 036c58fdc..6e5786bda 100644
--- a/rtdata/profiles/Faded/Faded Green 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Green 1 TM Bright.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Green 1 TM.pp3 b/rtdata/profiles/Faded/Faded Green 1 TM.pp3
index d3f7c6adc..d3a8b3919 100644
--- a/rtdata/profiles/Faded/Faded Green 1 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Green 1 TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Green 1.pp3 b/rtdata/profiles/Faded/Faded Green 1.pp3
index 7ee20b51a..89a0b1afa 100644
--- a/rtdata/profiles/Faded/Faded Green 1.pp3
+++ b/rtdata/profiles/Faded/Faded Green 1.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Green 2.pp3 b/rtdata/profiles/Faded/Faded Green 2.pp3
index 2c908cf2e..1d25d36cf 100644
--- a/rtdata/profiles/Faded/Faded Green 2.pp3
+++ b/rtdata/profiles/Faded/Faded Green 2.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Green 3.pp3 b/rtdata/profiles/Faded/Faded Green 3.pp3
index 570e4f291..4353eaa1c 100644
--- a/rtdata/profiles/Faded/Faded Green 3.pp3
+++ b/rtdata/profiles/Faded/Faded Green 3.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Neutral TM.pp3 b/rtdata/profiles/Faded/Faded Neutral TM.pp3
index 2f2e856ed..8b5beb761 100644
--- a/rtdata/profiles/Faded/Faded Neutral TM.pp3
+++ b/rtdata/profiles/Faded/Faded Neutral TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Neutral.pp3 b/rtdata/profiles/Faded/Faded Neutral.pp3
index c01e7c09f..adf5069c1 100644
--- a/rtdata/profiles/Faded/Faded Neutral.pp3
+++ b/rtdata/profiles/Faded/Faded Neutral.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Purple 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Purple 1 TM Bright.pp3
index 75250f299..dc686e332 100644
--- a/rtdata/profiles/Faded/Faded Purple 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Purple 1 TM Bright.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Purple 1 TM.pp3 b/rtdata/profiles/Faded/Faded Purple 1 TM.pp3
index 24496dc67..71b0b780e 100644
--- a/rtdata/profiles/Faded/Faded Purple 1 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Purple 1 TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Purple 1.pp3 b/rtdata/profiles/Faded/Faded Purple 1.pp3
index a77d52afd..9224db874 100644
--- a/rtdata/profiles/Faded/Faded Purple 1.pp3
+++ b/rtdata/profiles/Faded/Faded Purple 1.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Purple 2 TM.pp3 b/rtdata/profiles/Faded/Faded Purple 2 TM.pp3
index 93017a0b1..12c1d4275 100644
--- a/rtdata/profiles/Faded/Faded Purple 2 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Purple 2 TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Purple 2.pp3 b/rtdata/profiles/Faded/Faded Purple 2.pp3
index 650d38da6..39f401ca7 100644
--- a/rtdata/profiles/Faded/Faded Purple 2.pp3
+++ b/rtdata/profiles/Faded/Faded Purple 2.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Teal Orange TM Bright.pp3 b/rtdata/profiles/Faded/Faded Teal Orange TM Bright.pp3
index c9d2eaf7a..fba0dc024 100644
--- a/rtdata/profiles/Faded/Faded Teal Orange TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Teal Orange TM Bright.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Teal Orange TM.pp3 b/rtdata/profiles/Faded/Faded Teal Orange TM.pp3
index 2e4b33b10..34302c02e 100644
--- a/rtdata/profiles/Faded/Faded Teal Orange TM.pp3
+++ b/rtdata/profiles/Faded/Faded Teal Orange TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Teal Orange.pp3 b/rtdata/profiles/Faded/Faded Teal Orange.pp3
index a2f4cf765..946812758 100644
--- a/rtdata/profiles/Faded/Faded Teal Orange.pp3
+++ b/rtdata/profiles/Faded/Faded Teal Orange.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Warm 1 TM Bright.pp3 b/rtdata/profiles/Faded/Faded Warm 1 TM Bright.pp3
index b742b71be..18a5898f2 100644
--- a/rtdata/profiles/Faded/Faded Warm 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded/Faded Warm 1 TM Bright.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Warm 1 TM.pp3 b/rtdata/profiles/Faded/Faded Warm 1 TM.pp3
index 3bea604e0..9f8157139 100644
--- a/rtdata/profiles/Faded/Faded Warm 1 TM.pp3
+++ b/rtdata/profiles/Faded/Faded Warm 1 TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Warm 1.pp3 b/rtdata/profiles/Faded/Faded Warm 1.pp3
index 3f7e67442..8fa907460 100644
--- a/rtdata/profiles/Faded/Faded Warm 1.pp3
+++ b/rtdata/profiles/Faded/Faded Warm 1.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Warm 2.pp3 b/rtdata/profiles/Faded/Faded Warm 2.pp3
index ab60ddb4e..567e235f4 100644
--- a/rtdata/profiles/Faded/Faded Warm 2.pp3
+++ b/rtdata/profiles/Faded/Faded Warm 2.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Faded/Faded Warm 3.pp3 b/rtdata/profiles/Faded/Faded Warm 3.pp3
index 4a53330e8..873f01f35 100644
--- a/rtdata/profiles/Faded/Faded Warm 3.pp3
+++ b/rtdata/profiles/Faded/Faded Warm 3.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Generic/Deep Shadows.pp3 b/rtdata/profiles/Generic/Deep Shadows.pp3
index 4fe3b95cb..cfee29587 100644
--- a/rtdata/profiles/Generic/Deep Shadows.pp3
+++ b/rtdata/profiles/Generic/Deep Shadows.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Generic/Equilibrated.pp3 b/rtdata/profiles/Generic/Equilibrated.pp3
index 744f3032e..3194ca5ff 100644
--- a/rtdata/profiles/Generic/Equilibrated.pp3
+++ b/rtdata/profiles/Generic/Equilibrated.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Generic/High-Key.pp3 b/rtdata/profiles/Generic/High-Key.pp3
index 3046dd460..9714151a0 100644
--- a/rtdata/profiles/Generic/High-Key.pp3
+++ b/rtdata/profiles/Generic/High-Key.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=true
Clip=0.02
diff --git a/rtdata/profiles/Generic/Natural 1.pp3 b/rtdata/profiles/Generic/Natural 1.pp3
index 8bfd2ffb0..4a21f7a05 100644
--- a/rtdata/profiles/Generic/Natural 1.pp3
+++ b/rtdata/profiles/Generic/Natural 1.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=true
Clip=0.02
diff --git a/rtdata/profiles/Generic/Natural 2.pp3 b/rtdata/profiles/Generic/Natural 2.pp3
index 940cab16e..c1bf8a832 100644
--- a/rtdata/profiles/Generic/Natural 2.pp3
+++ b/rtdata/profiles/Generic/Natural 2.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=true
Clip=0.02
diff --git a/rtdata/profiles/Generic/Punchy 1.pp3 b/rtdata/profiles/Generic/Punchy 1.pp3
index ae6cdbb7e..370862258 100644
--- a/rtdata/profiles/Generic/Punchy 1.pp3
+++ b/rtdata/profiles/Generic/Punchy 1.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=true
Clip=0.02
diff --git a/rtdata/profiles/Generic/Punchy 2.pp3 b/rtdata/profiles/Generic/Punchy 2.pp3
index 750b01565..c98f8e87f 100644
--- a/rtdata/profiles/Generic/Punchy 2.pp3
+++ b/rtdata/profiles/Generic/Punchy 2.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=true
Clip=0.02
diff --git a/rtdata/profiles/Non-raw/Brighten.pp3 b/rtdata/profiles/Non-raw/Brighten.pp3
index 267aa4e0b..863102ae0 100644
--- a/rtdata/profiles/Non-raw/Brighten.pp3
+++ b/rtdata/profiles/Non-raw/Brighten.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.2
-Version=322
-
[Luminance Curve]
Brightness=0
Contrast=0
diff --git a/rtdata/profiles/Pixel Shift/PS ISO High.pp3 b/rtdata/profiles/Pixel Shift/PS ISO High.pp3
index 87af3febd..02cd7047c 100644
--- a/rtdata/profiles/Pixel Shift/PS ISO High.pp3
+++ b/rtdata/profiles/Pixel Shift/PS ISO High.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=5.4
-Version=332
-
[RAW]
CA=true
diff --git a/rtdata/profiles/Pixel Shift/PS ISO Low.pp3 b/rtdata/profiles/Pixel Shift/PS ISO Low.pp3
index 3f907a117..afd3b762c 100644
--- a/rtdata/profiles/Pixel Shift/PS ISO Low.pp3
+++ b/rtdata/profiles/Pixel Shift/PS ISO Low.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=5.4
-Version=332
-
[Sharpening]
Enabled=true
Contrast=5
diff --git a/rtdata/profiles/Pixel Shift/PS ISO Medium.pp3 b/rtdata/profiles/Pixel Shift/PS ISO Medium.pp3
index 16463b1b0..71e9c3919 100644
--- a/rtdata/profiles/Pixel Shift/PS ISO Medium.pp3
+++ b/rtdata/profiles/Pixel Shift/PS ISO Medium.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=5.4
-Version=332
-
[RAW]
CA=true
diff --git a/rtdata/profiles/Pixel Shift/PS No Motion.pp3 b/rtdata/profiles/Pixel Shift/PS No Motion.pp3
index 948c98a3a..af624912e 100644
--- a/rtdata/profiles/Pixel Shift/PS No Motion.pp3
+++ b/rtdata/profiles/Pixel Shift/PS No Motion.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=5.4
-Version=332
-
[Sharpening]
Enabled=true
Contrast=5
diff --git a/rtdata/profiles/Pop/Pop 1.pp3 b/rtdata/profiles/Pop/Pop 1.pp3
index 61685727e..c86b146a8 100644
--- a/rtdata/profiles/Pop/Pop 1.pp3
+++ b/rtdata/profiles/Pop/Pop 1.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Pop/Pop 2 L.pp3 b/rtdata/profiles/Pop/Pop 2 L.pp3
index 13fe80293..854bd3eb5 100644
--- a/rtdata/profiles/Pop/Pop 2 L.pp3
+++ b/rtdata/profiles/Pop/Pop 2 L.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Pop/Pop 3 Skin.pp3 b/rtdata/profiles/Pop/Pop 3 Skin.pp3
index 90ce7e346..ec50418b1 100644
--- a/rtdata/profiles/Pop/Pop 3 Skin.pp3
+++ b/rtdata/profiles/Pop/Pop 3 Skin.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Pop/Pop 4 BW.pp3 b/rtdata/profiles/Pop/Pop 4 BW.pp3
index 4277869a4..b26a9d8a7 100644
--- a/rtdata/profiles/Pop/Pop 4 BW.pp3
+++ b/rtdata/profiles/Pop/Pop 4 BW.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Portrait/Portrait Lejto.pp3 b/rtdata/profiles/Portrait/Portrait Lejto.pp3
index 0fe9d68ad..085915ad4 100644
--- a/rtdata/profiles/Portrait/Portrait Lejto.pp3
+++ b/rtdata/profiles/Portrait/Portrait Lejto.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Portrait/Portrait Smooth.pp3 b/rtdata/profiles/Portrait/Portrait Smooth.pp3
index 26bb855dd..8079c050d 100644
--- a/rtdata/profiles/Portrait/Portrait Smooth.pp3
+++ b/rtdata/profiles/Portrait/Portrait Smooth.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Skintones/Skintones - Natural TM.pp3 b/rtdata/profiles/Skintones/Skintones - Natural TM.pp3
index ba2ff3be4..d2cd3bb77 100644
--- a/rtdata/profiles/Skintones/Skintones - Natural TM.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Natural TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Skintones/Skintones - Natural.pp3 b/rtdata/profiles/Skintones/Skintones - Natural.pp3
index fb05ab00f..0fcdbfbfa 100644
--- a/rtdata/profiles/Skintones/Skintones - Natural.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Natural.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Skintones/Skintones - Pale TM Bright.pp3 b/rtdata/profiles/Skintones/Skintones - Pale TM Bright.pp3
index 7ed909f89..f2d2add0e 100644
--- a/rtdata/profiles/Skintones/Skintones - Pale TM Bright.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Pale TM Bright.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Skintones/Skintones - Pale TM.pp3 b/rtdata/profiles/Skintones/Skintones - Pale TM.pp3
index 3e3476e92..d1eefc4c8 100644
--- a/rtdata/profiles/Skintones/Skintones - Pale TM.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Pale TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Skintones/Skintones - Pale.pp3 b/rtdata/profiles/Skintones/Skintones - Pale.pp3
index 7f6aa9c99..b22470758 100644
--- a/rtdata/profiles/Skintones/Skintones - Pale.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Pale.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Skintones/Skintones - Soft Texture.pp3 b/rtdata/profiles/Skintones/Skintones - Soft Texture.pp3
index 26815da33..65a8ea742 100644
--- a/rtdata/profiles/Skintones/Skintones - Soft Texture.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Soft Texture.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Skintones/Skintones - Strong Texture.pp3 b/rtdata/profiles/Skintones/Skintones - Strong Texture.pp3
index 691cc118d..23ae9feac 100644
--- a/rtdata/profiles/Skintones/Skintones - Strong Texture.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Strong Texture.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Skintones/Skintones - Studio TM.pp3 b/rtdata/profiles/Skintones/Skintones - Studio TM.pp3
index 944670a23..7d9482169 100644
--- a/rtdata/profiles/Skintones/Skintones - Studio TM.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Studio TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Skintones/Skintones - Studio.pp3 b/rtdata/profiles/Skintones/Skintones - Studio.pp3
index d58c7be11..f23d6dbfd 100644
--- a/rtdata/profiles/Skintones/Skintones - Studio.pp3
+++ b/rtdata/profiles/Skintones/Skintones - Studio.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Skintones/Skintones - StudioBase 1 TM.pp3 b/rtdata/profiles/Skintones/Skintones - StudioBase 1 TM.pp3
index 227cf09f9..a04141050 100644
--- a/rtdata/profiles/Skintones/Skintones - StudioBase 1 TM.pp3
+++ b/rtdata/profiles/Skintones/Skintones - StudioBase 1 TM.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Skintones/Skintones - StudioBase 1.pp3 b/rtdata/profiles/Skintones/Skintones - StudioBase 1.pp3
index e0d38aefc..64f284261 100644
--- a/rtdata/profiles/Skintones/Skintones - StudioBase 1.pp3
+++ b/rtdata/profiles/Skintones/Skintones - StudioBase 1.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=4.2.84
-Version=322
-
[Exposure]
Auto=false
Clip=0.02
diff --git a/rtdata/profiles/Standard Film Curve - ISO High.pp3 b/rtdata/profiles/Standard Film Curve - ISO High.pp3
index fddcd74a8..bedc931ee 100644
--- a/rtdata/profiles/Standard Film Curve - ISO High.pp3
+++ b/rtdata/profiles/Standard Film Curve - ISO High.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=5.3-544-gc2e7d924
-Version=330
-
[HLRecovery]
Enabled=true
Method=Blend
diff --git a/rtdata/profiles/Standard Film Curve - ISO Low.pp3 b/rtdata/profiles/Standard Film Curve - ISO Low.pp3
index 9db0b3da8..d403119b9 100644
--- a/rtdata/profiles/Standard Film Curve - ISO Low.pp3
+++ b/rtdata/profiles/Standard Film Curve - ISO Low.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=5.3-544-gc2e7d924
-Version=330
-
[HLRecovery]
Enabled=true
Method=Blend
diff --git a/rtdata/profiles/Standard Film Curve - ISO Medium.pp3 b/rtdata/profiles/Standard Film Curve - ISO Medium.pp3
index 47bcdb0de..6e00d6705 100644
--- a/rtdata/profiles/Standard Film Curve - ISO Medium.pp3
+++ b/rtdata/profiles/Standard Film Curve - ISO Medium.pp3
@@ -1,7 +1,3 @@
-[Version]
-AppVersion=5.3-544-gc2e7d924
-Version=330
-
[HLRecovery]
Enabled=true
Method=Blend
diff --git a/rtdata/themes/RawTherapee-GTK3-20_.css b/rtdata/themes/RawTherapee-GTK3-20_.css
index 91aff9a99..1224e3ce9 100644
--- a/rtdata/themes/RawTherapee-GTK3-20_.css
+++ b/rtdata/themes/RawTherapee-GTK3-20_.css
@@ -368,29 +368,7 @@ separator {
margin: 5px;
}
-progressbar.vertical trough {
- min-width: 6px;
-}
-progressbar.vertical trough progress {
- min-width: 6px;
-}
-
-progressbar.horizontal trough {
- min-height: 6px;
-}
-progressbar.horizontal trough progress {
- min-height: 6px;
-}
-
-progressbar trough {
- background-color: #2A2A2A;
- border-color: #202020;
-}
-
-notebook header progressbar trough {
- background-color: #202020;
- border-color: #181818;
-}
+/* */
.drawingarea {
border-radius: 0;
@@ -1016,3 +994,35 @@ button.combo, .image-combo .toggle, #MyFileChooserButton {
padding-right: 4px;
}
+/* Progress bars */
+
+progressbar.horizontal {
+ min-width: 100px;
+ margin-bottom: 2px;
+}
+
+progressbar.vertical {
+ min-height: 100px;
+ margin: 8px 0;
+}
+
+progressbar trough {
+ background-color: #383838;
+ border: none;
+}
+
+progressbar progress {
+ border-color: #363636;
+ border-radius: 3px;
+ background-color: #215d9c;
+}
+
+progressbar.horizontal trough, progressbar.horizontal progress {
+ min-height: 10px;
+}
+
+progressbar.vertical trough, progressbar.vertical progress {
+ min-width: 10px;
+}
+
+/* */
diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css
index af0173441..3f2165592 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.74
+ Version 2.80
RawTherapee is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -71,26 +71,33 @@
text-shadow: none;
outline-style: none; /* removes the ugly dashed focus line */
border-image: none;
+ background-image: none;
+ background-color: transparent;
transition: none;
-gtk-icon-shadow: none;
+ -gtk-icon-style: symbolic;
+ min-width: 0;
+ min-height: 0;
+ padding: 0;
+ margin: 0;
+ opacity: 1;
+ border: none;
+ box-shadow: none;
}
-#ToolBarPanelFileBrowser button:not(.smallbutton) image,
-#EditorTopPanel button:not(.narrowbutton) image,
-#IopsPanel button:not(.Right) image,
-#ProfilePanel button image,
-#MainNotebook > stack > :nth-child(2) > box:nth-child(3) image,
-#MainNotebook > header button:not(#CloseButton) image {
- -gtk-icon-transform: scale(calc(22/24));
-}
-
+/*GTK+4 now supports a more versatile -gtk-icon-filter instead. Replace
+-gtk-icon-effect: dim; with -gtk-icon-filter: opacity(0.5); and
+-gtk-icon-effect: highlight; with -gtk-icon-filter: brightness(1.2);.*/
*:disabled {
color: @fg-disabled;
-gtk-icon-effect: dim;
}
+*:hover {
+ -gtk-icon-effect: highlight;
+}
#ToolPanelNotebook {
- min-width: 22.25em;
+ min-width: 24em;
}
#HistoryPanel {
min-width: 17.5em;
@@ -101,7 +108,7 @@ window.background {
}
/* Single Window */
window > box {
- padding: 0.4167em;
+ padding: 0.416666666666666666em;
}
/**/
dialog {
@@ -113,7 +120,7 @@ dialog {
-GtkDialog-action-area-border: 0;
}
dialog > box {
- padding: 0.6667em;
+ padding: 0.666666666666666666em;
}
messagedialog {
background-color: @bg-light-grey;
@@ -121,11 +128,10 @@ messagedialog {
}
tooltip {
background-color: @bg-tooltip;
- border: 0.0834em solid @border-tooltip;
- border-radius: 0.3334em;
+ border: 0.083333333333333333em solid @border-tooltip;
+ border-radius: 0.333333333333333333em;
padding: 0;
margin: 0;
- box-shadow: none;
}
tooltip label {
color: @text-tooltip;
@@ -135,11 +141,21 @@ paned {
background-color: @bg-light-grey;
}
+arrow {
+ min-width: 1.333333333333333333em;
+ min-height: 1.333333333333333333em;
+}
+
+text {
+ background-color: @bg-dark-grey;
+}
+
/*?win*/
#PlacesPaned {
margin: 0;
}
+overshoot,
undershoot {
background-image: none; /* removes the dashed scrollbar line */
}
@@ -150,6 +166,7 @@ label {
}
/*** Frames ************************************************************************************/
+border,
frame {
border: none;
padding: 0;
@@ -158,17 +175,15 @@ frame {
min-height: 0;
min-width: 0;
border-radius: 0;
- box-shadow: none;
}
#BatchQueueButtonsMainContainer frame,
#MyExpander frame,
dialog frame {
- margin: 0.1667em 0.5em;
+ margin: 0.166666666666666666em 0.5em;
}
/* affects selection list*/
-entry > window > frame,
-filechooser frame {
+entry > window > frame {
margin: 0;
}
@@ -184,7 +199,6 @@ frame > border {
margin: 0;
min-height: 0;
min-width: 0;
- box-shadow: none;
}
#BatchQueueButtonsMainContainer > frame > border,
@@ -192,39 +206,35 @@ frame > border {
dialog frame > border {
padding: 0.5em;
border-radius: 0;
- border: 0.0834em solid @border-color;
+ border: 0.083333333333333333em solid @border-color;
background-color: transparent;
margin: 0 -0.5em;
}
-/* affects selection list*/
-entry > window > frame> border,
-filechooser > frame > border {
- padding: 0;
- border: none;
- background-color: transparent;
- margin: 0;
-}
+
#PrefNotebook box > frame > border {
padding-top: 0;
padding-bottom: 0.25em;
}
+#PrefNotebook scrolledwindow scrolledwindow {
+ border: 0.083333333333333333em solid @bg-dark-grey;
+}
#BatchQueueButtonsMainContainer frame > label,
#ToolPanelNotebook frame > label,
dialog frame > label {
margin: 0;
- padding: 0.1667em 0.5em;
+ padding: 0.166666666666666666em 0.5em;
}
#BatchQueueButtonsMainContainer frame > border {
- margin-bottom: 0.8334em;
+ margin-bottom: 0.833333333333333333em;
}
#BatchQueueButtonsMainContainer frame:nth-child(3) > border {
- padding-left: 0.9167em;
+ padding-left: 0.916666666666666666em;
}
frame > label {
margin: 0;
- padding: 0.4167em 0 0.3334em 0.0834em;
+ padding: 0.416666666666666666em 0 0.333333333333333333em 0.083333333333333333em;
color: @headline-frame;
}
frame > checkbutton label{
@@ -236,9 +246,12 @@ frame > checkbutton label{
textview.view, treeview.view {
background-color: @bg-dark-grey;
border-color: @view-grid-border;
- padding: 0.1667em;
+ padding: 0.166666666666666666em;
margin: 0;
}
+treeview header {
+ background-color: @bg-dark-grey;
+}
textview:hover, treeview:hover {
background-color: @bg-list-hover;
}
@@ -248,28 +261,32 @@ textview:selected, treeview:selected {
border-top-color: transparent;
}
-#RightNotebook > stack > :nth-child(1) treeview {
- border: 0.0834em solid @bg-dark-grey;
- border-bottom: none;
+/* Filter treeview */
+#RightNotebook > stack > :nth-child(1) checkbutton + scrolledwindow {
+ min-height: calc(6em + 43px);
+ border: 0.083333333333333333em solid @bg-dark-grey;
+}
+#RightNotebook > stack > :nth-child(1) checkbutton + scrolledwindow treeview {
+ border-bottom: 0.083333333333333333em solid @bg-dark-grey;
}
-#PlacesPaned > box:nth-child(1) treeview {
- padding: 0.0834em 0 0.0834em 0.41667em;
- -gtk-icon-style: symbolic;
+
+#PlacesPaned > box:nth-child(3) treeview {
+ padding: 0.25em 0.333333333333333333em 0.25em 0.333333333333333333em;
}
#HistoryPanel {
margin-top: 0.25em;
}
#RightNotebook #HistoryPanel {
- margin-top: 0.3334em;
+ margin-top: 0.333333333333333333em;
}
#HistoryPanel > border {
margin-top: 1.75em;
}
#HistoryPanel > label {
margin: 0 0 -1.5em 0;
- padding: 0 0 0 0.0834em;
+ padding: 0 0 0 0.083333333333333333em;
}
#Snapshots > border {
@@ -278,29 +295,47 @@ textview:selected, treeview:selected {
#Snapshots > label {
margin-bottom: -4px;
}
-#Snapshots button {
- margin-top: -8px;
- margin-bottom: -4px;
+#Snapshots scrolledwindow + box {
+ background-color: @bg-dark-grey;
+ margin: -8px 0 -4px ;
+ border-top: 0.083333333333333333em solid @view-grid-border;
}
-#Snapshots button image{
- min-height: 24px;
- min-width: 24px;
-}
-#Snapshots > box > :nth-child(1) {
- margin-bottom: 0.4167em;
+#PlacesPaned > box:nth-child(1) scrolledwindow + grid {
+ background-color:@bg-dark-grey;
+ margin: -2px 0 -2px 0;
+ border-top: 0.083333333333333333em solid @view-grid-border;
}
-#PlacesPaned > box:nth-child(3) > box:nth-child(2),
-#PlacesPaned > box:nth-child(1) > :nth-child(1),
+#Snapshots button,
+#PlacesPaned > box:nth-child(1) scrolledwindow + grid > button {
+ margin: 0;
+ padding: 0;
+ background-color: transparent;
+ background-image: none;
+ border: 0.083333333333333333em solid @bg-dark-grey;
+ border-radius: 0;
+ box-shadow: none;
+}
+
+#Snapshots button:hover,
+#PlacesPaned > box:nth-child(1) scrolledwindow + grid > button:hover {
+background-color: @bg-list-hover;
+}
+#Snapshots button:active,
+#PlacesPaned > box:nth-child(1) scrolledwindow + grid > button:active {
+background-color: shade(@bg-list-hover, 1.15);
+}
+
+#PlacesPaned scrolledwindow,
#HistoryPanel > border,
-#Snapshots > box > :nth-child(1) {
+#Snapshots scrolledwindow {
background-color: @bg-dark-grey;
- border: 0.0834em solid @bg-dark-grey;
+ border: 0.083333333333333333em solid @bg-dark-grey;
}
/*Corrects the space of the snapshot view to the paned separator*/
#Snapshots {
- margin-top: 0.1667em;
+ margin-top: 0.166666666666666666em;
}
/**/
@@ -313,7 +348,7 @@ textview:selected, treeview:selected {
background-color: @bg-dark-grey;
}
#Navigator box label {
- padding: 0.1667em 0;
+ padding: 0.166666666666666666em 0;
}
#Navigator > label:nth-child(2) {
margin-top: 0.5em;
@@ -322,52 +357,61 @@ textview:selected, treeview:selected {
/*** end ***************************************************************************************/
/*** Load - Save dialog ************************************************************************/
-filechooser * {
- box-shadow: none;
+
+filechooser box > box box > button {
+margin-top: 0.5em;
}
+
+filechooser list {
+ background-color: @bg-dark-grey;
+}
+
filechooser #pathbarbox {
border: none;
background-color: @bg-dark-grey;
padding: 0.5em;
}
-filechooser box {
- border-color: transparent;
-}
-
-filechooser > box > paned > box {
- border: 0.0834em solid @bg-dark-grey;
+/* Right side */
+filechooser > box > paned > box:nth-child(3) {
+ border: 0.083333333333333333em solid @bg-dark-grey;
background-color: @bg-dark-grey;
-}
-filechooser placessidebar {
- padding: 0 0.0834em;
- background-color: @bg-dark-grey;
-}
-
-filechooser list {
- background-color: @bg-dark-grey;
- border: none;
- box-shadow: none;
padding: 0;
- margin: -3px 0 0;
-}
-filechooser list row {
margin: 0;
- padding: 0;
- min-height: calc(1.4166em + 8px);
}
-filechooser list row label{
- margin: 0;
+filechooser > box > paned > box:nth-child(3) > box > * > * > * > frame {
padding: 0;
+ margin: -8px -1px;
+ background-color: @bg-dark-grey;
+}
+/**/
+filechooser placessidebar viewport.frame {
+ background-color: @bg-dark-grey;
+ padding: 0;
+ margin: -4px 0 -1px;
+ border: 0.083333333333333333em solid @bg-dark-grey;
+}
+filechooser placessidebar list row image {
+ min-width: 1.333333333333333333em;
+ min-height: 1.333333333333333333em;
+}
+filechooser placessidebar list row {
+ margin: 0;
+ padding: 0 0.5em 0 0.83333333333333333em;
+ min-height: calc(1.416666666666666666em + 8px);
+}
+filechooser placessidebar list row label{
+ margin: 0 0 0 0.58333333333333333em;
}
filechooser list row:hover {
background-color: @bg-list-hover;
}
-filechooser list row:selected label,
-filechooser list row:selected {
+filechooser placessidebar list row:selected label,
+filechooser placessidebar list row:selected {
background-color: @accent-color;
color: @text-hl-color;
}
+
/*** end ***************************************************************************************/
/*** Histogram *********************************************************************************/
@@ -381,7 +425,7 @@ filechooser list row:selected {
#HistogramPanel > :nth-child(2) {
border: none;
- border-left: 0.0834em solid @bg-light-grey;
+ border-left: 0.083333333333333333em solid @bg-light-grey;
background-color: @bg-dark-grey;
}
@@ -392,7 +436,7 @@ filechooser list row:selected {
#EditorLeftPaned #HistogramPanel > :nth-child(1) {
border: none;
- border-right: 0.0834em solid @bg-light-grey;
+ border-right: 0.083333333333333333em solid @bg-light-grey;
background-color: @bg-dark-grey;
}
@@ -403,40 +447,37 @@ filechooser list row:selected {
#HistogramArea,
#HistogramRGBArea {
- border: 0.0834em solid @bg-dark-grey;
+ border: 0.083333333333333333em solid @bg-dark-grey;
background-color: @bg-dark-grey;
}
#histButton {
- padding: 0;
- margin: 0;
+ padding: 0.25em 0.25em 0;
+ margin: 0 0 -1px 0;
border: none;
- background-color: @bg-dark-grey;
+ background-color: transparent;
background-image: none;
- box-shadow: none;
- min-height: 1.4166em;
- min-width: calc(1.3333em + 6px);
+ min-height: 1.333333333333333333em;
+ min-width: 1.333333333333333333em;
border-radius: 0;
-}
-
-#histButton:first-child {
- margin-top: 3px;
+ box-shadow: none;
}
#histButton:last-child {
- margin-bottom: 3px;
+ padding-bottom: 0.25em;
+ margin: 0;
}
-#HistogramPanel image {
- -gtk-icon-transform: scale(calc(14/16));
-}
/*** end ***************************************************************************************/
/*** Separator *********************************************************************************/
-separator {
+separator,
+.separator {
+ min-width: 0.083333333333333333em;
+ min-height: 0.083333333333333333em;
background-color: transparent;
}
grid separator.horizontal, box separator.horizontal {
- margin: 0.1667em 0;
+ margin: 0.166666666666666666em 0;
padding: 0;
}
grid separator.vertical, box separator.vertical {
@@ -444,8 +485,15 @@ grid separator.vertical, box separator.vertical {
padding: 0;
}
-#PlacesPaned .view.separator,
-filechooser separator,
+#PlacesPaned .view.separator {
+ min-height: 0.5em;
+}
+
+filechooser separator {
+ background-color: @view-grid-border;
+}
+
+.view.separator,
dialog separator {
background-color: @border-color;
}
@@ -457,31 +505,37 @@ popover separator:not(:only-child) {
paned.horizontal > separator {
background-color: transparent;
background-image: none;
- min-width: 0.4166em;
+ min-width: 0;
border: none;
- margin: 0 -0.25em;
+ margin: 0 -0.25em 0 -3px;
padding: 0 0.25em;
}
-
+/* Double line separator */
paned.vertical > separator {
- background-image: image(@bg-dark-grey);
+ background-image: none;
background-color: @bg-light-grey;
- min-height: 0.5em;
- border-top: 1px solid @bg-light-grey;
- border-bottom: 1px solid @bg-light-grey;
- margin: 0.25em 0 -0.5em;
+ min-height: 0.416666666666666666em;
+ border-top: 0.083333333333333333em solid @bg-dark-grey;
+ border-bottom: none;
+ margin: 0.416666666666666666em 0 -0.5em;
padding: 0.2em 0 0;
}
-/*Filmstrip*/
-#EditorRightPaned > paned.horizontal > paned.vertical > separator {
- margin-bottom: 0;
- min-height: 0.4167em;
+
+#EditorLeftPaned > paned.vertical:last-child > separator {
+ margin-bottom: 1px;
}
+/**/
+/* Remove hard coded pixel from tool button */
+#EditorLeftPaned > paned.vertical:last-child > box {
+ margin-top: -2px;
+ padding: 0;
+}
+/**/
dialog paned.horizontal > separator {
background-color: @bg-grey;
- border-color: @bg-grey;
- min-width: 0.3333em;
+ border-color: @bg-grey;
+ min-width: 0.333333333333333333em;
}
menu separator {
@@ -499,13 +553,13 @@ menu separator {
#IopsPanel separator,
#FileBrowser separator {
background-color: shade(@bg-light-grey,.75);
- margin-top: 0.1667em;
- margin-bottom: 0.1667em;
+ margin-top: 0.166666666666666666em;
+ margin-bottom: 0.166666666666666666em;
}
#MyExpander separator {
background-color: @view-grid-border;
- margin: 0.3334em 0;
+ margin: 0.333333333333333333em 0;
}
#MyFileChooserButton separator {
background-color: transparent;
@@ -518,34 +572,31 @@ menu separator {
/*** PartialPaste ******************************************************************************/
#PartialPaste {
- border-bottom: 0.0834em solid @border-color;
- border-top: 0.0834em solid @border-color;
+ border-bottom: 0.083333333333333333em solid @border-color;
+ border-top: 0.083333333333333333em solid @border-color;
padding-top: 0.5em;
padding-bottom: 0.5em;
}
#PartialPaste separator.vertical {
- margin: 0 0.3334em;
+ margin: 0 0.333333333333333333em;
padding: 0;
}
#PartialPaste separator { /* Struggles with #PartialPasteHeaderSep */
background-color: @border-color;
- margin: 0.1667em 0.5em 0.1667em 1.1667em;
+ margin: 0.166666666666666666em 0.5em 0.166666666666666666em 1.166666666666666666em;
}
#PartialPasteHeaderSep.horizontal {
background-color: rgb(192,192,192);
- margin: 0.1667em 0.5em;
+ margin: 0.166666666666666666em 0.5em;
}
#PartialPasteHeader label {
color: @headline-big;
font-weight: bold;
}
-#PartialPasteHeader {
- margin: 0.5em 0 0 0;
- padding: 0;
-}
+
/*** end ***************************************************************************************/
/*** Scrollbar *********************************************************************************/
@@ -554,6 +605,7 @@ scrollbar {
border: none;
margin: 0;
padding: 0;
+ border-radius: 0;
}
scrollbar slider {
background-color: @text-color;
@@ -561,7 +613,13 @@ scrollbar slider {
margin: 0;
border-color: transparent;
border-style: solid;
- border-radius: 1em;
+ border-radius: 0.5em;
+}
+scrollbar.overlay-indicator {
+ opacity: 0.8;
+}
+scrollbar.overlay-indicator:not(.hovering) {
+ opacity: 0.5;
}
scrollbar:not(.overlay-indicator) {
@@ -570,10 +628,10 @@ scrollbar:not(.overlay-indicator) {
background-color: rgba(0,0,0,.30);
}
scrollbar:not(.overlay-indicator).horizontal {
- border-width: 0 0.0834em 0.0834em 0.0834em;
+ border-width: 0 0.083333333333333333em 0.083333333333333333em 0.083333333333333333em;
}
scrollbar:not(.overlay-indicator).vertical {
- border-width: 0.0834em 0.0834em 0.0834em 0;
+ border-width: 0.083333333333333333em 0.083333333333333333em 0.083333333333333333em 0;
}
scrollbar:not(.overlay-indicator) slider {
background-color: shade(@text-color, .9);
@@ -594,9 +652,9 @@ scrollbar.horizontal.hovering.fine-tune slider {
scrollbar.horizontal.overlay-indicator:not(.hovering) slider {
min-width: 2em;
min-height: 0.25em;
- border-width: 0.0834em;
+ border-width: 0;
border-radius: 0.25em;
- margin: 0 0.1667em;
+ margin: 0.166666666666666666em 0.25em;
}
scrollbar:not(.overlay-indicator).vertical slider,
@@ -614,13 +672,13 @@ scrollbar.vertical.hovering.fine-tune slider {
scrollbar.vertical.overlay-indicator:not(.hovering) slider {
min-width: 0.25em;
min-height: 2em;
- border-width: 0.0834em;
- border-radius: 0.5em;
- margin: 0.1667em 0;
+ border-width: 0;
+ border-radius: 0.25em;
+ margin: 0.25em 0.166666666666666666em;
}
scrollbar:not(.overlay-indicator) slider:hover,
-scrollbar slider:hover {
+scrollbar.hovering slider:hover {
background-color: shade(@accent-color2,1.12);
}
@@ -628,62 +686,73 @@ scrollbar slider:hover {
scrollbar:not(.overlay-indicator):hover {
min-width: 1px;
}
+/**/
/*** end ***************************************************************************************/
/*** Scale**************************************************************************************/
scale {
padding: 0;
- min-height: 1.8333em;
- margin: 0 0.25em;
+ min-height: 1.833333333333333333em;
+ margin: 0;
}
scale slider {
- /* Slider size is min-width x min-height; margin have to be half of those values, but negative */
- min-width: 1em;
- min-height: 1em;
- margin: calc(-0.166em - 4px);
- border-radius: 0.8334em;
+ min-width: 0;
+ min-height: 0;
+ margin: -0.583333333333333333em;
+ padding: 0.583333333333333333em;
+ border-radius: 1.166666666666666666em;
background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85));
- border: 0.0834em solid @bg-button-border;
- box-shadow: none;
+ border: 0.083333333333333333em solid shade(@bg-dark-grey,0.9);
}
scale slider:hover {
background-image: linear-gradient(to bottom, shade (@accent-color4,1.25), shade (@accent-color4,.95));
}
scale trough {
- margin: 0.5em; /* has to be half of "scale slider / min-width min-height*/
- background-color: @bg-scale-entry;
- border: 0.0834em solid @bg-button-border;
- box-shadow: inset 0 0.0834em rgba(255, 255, 255, 0.11), 0 0.0834em rgba(242, 242, 242, 0.11);
- border-radius: 0.5em;
+ margin: 0.583333333333333333em;
+ background-color: shade(@bg-grey,.83);
+ border-radius: 0.333333333333333333em;
+ min-height: 0;
+ min-width: 0;
+ padding: 0 0.583333333333333333em;
+ border: none;
}
-scale:not(:disabled) trough highlight {
- background-color: @accent-color2;
- border: 0.0834em solid @bg-dark-grey;
- box-shadow: inset 0 0.1667em shade(@accent-color2, 1.25);
- border-radius: 0.5em;
+scale.color trough {
+ border: 0.083333333333333333em solid shade(@bg-dark-grey,0.9);
+ min-height: 0.333333333333333333em;
+ min-width: 0.333333333333333333em;
+ border-radius: 0;
+ padding: 0;
}
-scale.fine-tune trough {
- margin: calc(0.5em - 1px);
- padding: 1px;
+scale trough highlight {
+ background-color: transparent;
+ background-image: linear-gradient(to bottom, shade (@accent-color2,1.22), shade(@accent-color2,.88));
+ border: 0.083333333333333333em solid shade(@bg-dark-grey,0.9);
+ margin: 0 -0.583333333333333333em;
+ border-radius: 0.333333333333333333em;
+ min-height: 0;
+ min-width: 0;
+ padding: 0.333333333333333333em 0.333333333333333333em 0 0; /*height of trough */
}
+
scale.fine-tune trough highlight {
- margin: -2px;
+ padding: 0.5em 0.5em 0 0;
+ border-radius: 0.5em;
}
-
scale:disabled slider,
-scale:disabled trough {
- background-color: shade(@bg-grey,.9);
- box-shadow: none;
+scale:disabled trough highlight {
+ background-color: shade(@bg-grey,.83);
background-image: none;
+ border-color: transparent;
}
+#BatchQueueButtonsMainContainer scale trough,
#BatchQueueButtonsMainContainer scale:disabled slider,
-#BatchQueueButtonsMainContainer scale:disabled trough {
- background-color: shade(@bg-light-grey,.85);
+#BatchQueueButtonsMainContainer scale:disabled trough highlight {
+ background-color: @bg-grey;
}
/*** end ***************************************************************************************/
@@ -693,50 +762,60 @@ progressbar.vertical {
min-width: 0;
min-height: 9em;
}
+progressbar text {
+ background-color: transparent;
+}
progressbar.vertical text {
color: transparent;
}
-progressbar.vertical trough {
- min-width: 0.5em;
+progressbar trough {
+ background-color: alpha(@bg-grey, .45);
+ border: 0.083333333333333333em solid transparent;
+ border-radius: 0.416666666666666666em;
+}
+#IopsPanel progressbar trough {
+ background-color: @bg-grey;
+}
+
+progressbar trough progress {
background-color: transparent;
- border-width: 0;
+ border-radius: 0.416666666666666666em;
+ border: 0.083333333333333333em solid @bg-button-border;
+}
+
+progressbar.vertical trough {
+ min-width: 0.416666666666666666em;
}
progressbar.vertical trough progress {
- min-width: 0.5em;
- margin: 0 -1px;
- background-color: @accent-color2;
- border-width: 0;
- border-radius: 0.5em;
+ min-width: 0.416666666666666666em;
+ margin: -1px 0;
+ background-image: linear-gradient(to right, shade (@accent-color2,1.2), shade(@accent-color2,.85));
}
+
progressbar.horizontal trough {
- min-height: 0.4166em;
- background-color: transparent;
- border: none;
- border-radius: 0.5em;
- margin-top: 0.5834em;
+ min-height: 0.416666666666666666em;
+ margin-top: 0.416666666666666666em;
}
-progressbar.horizontal trough progress {
- min-height: 0.4166em;
- margin: -1px 0;
- background-color: @accent-color2;
- border: none;
- border-radius: 0.5em;
+#IopsPanel progressbar.horizontal trough {
+ margin-top: 0;
}
-#IopsPanel progressbar.horizontal trough {
- min-height: 0.5em;
- background-color: @bg-scale-entry;
- border: 0.0834em solid @bg-button-border;
- margin-top: 0.25em;
+progressbar.horizontal trough progress {
+ min-height: 0.416666666666666666em;
+ margin: 0 -1px;
+ background-image: linear-gradient(to bottom, shade (@accent-color2,1.2), shade(@accent-color2,.85));
}
-#IopsPanel progressbar.horizontal trough progress {
- min-height: 0.5em;
- margin: -1px 0;
- background-color: @accent-color2;
- border: none;
- border-radius: 0.5em;
+
+/* #IopsPanel progressbar trough.empty, */
+progressbar.horizontal trough.empty,
+progressbar.vertical trough.empty {
+ background-color: transparent;
+}
+progressbar trough.empty progress {
+ border-color: transparent;
+ background-image: none;
}
/*** end ***************************************************************************************/
@@ -749,64 +828,54 @@ notebook tab,
notebook stack {
border-radius: 0;
border: none;
- box-shadow: none;
padding: 0;
margin: 0;
min-width: 0;
min-height: 0;
}
-notebook header {
+notebook > header {
background-color: @bg-dark-grey;
- padding: 0 0.4167em;
+ padding: 0 0.416666666666666666em;
}
-notebook header.left {
- padding: 0.4167em 0;
+notebook > header.left {
+ padding: 0.416666666666666666em 0;
}
notebook tabs {
background-color: transparent;
}
-notebook header tab {
+notebook > header tab {
background-color: transparent;
- margin: 0.4167em 0.25em;
- padding: 0 0.3334em;
+ margin: 0.416666666666666666em 0.25em;
+ padding: 0 0.333333333333333333em;
}
-notebook header.left tab {
- margin: 0.25em 0.4167em;
- padding: 0.3334em 0;
+notebook > header.left tab {
+ margin: 0.25em 0.416666666666666666em;
+ padding: 0.333333333333333333em 0;
}
-notebook header tab > grid > image {
- min-height: 2.5em;
- min-width: 0;
- padding: 0 0.25em 0 0;
+notebook > header tab > grid > image {
+ min-height: 2em;
+ min-width: 2em;
+ padding: 0.25em;
margin: 0;
}
-notebook header.left tab > grid > image {
- min-height: 0;
- min-width: 2.5em;
- padding: 0.25em 0 0;
-}
-notebook header tab label {
- margin: 0.0834em;
-}
-notebook header tab:hover label {
+
+notebook > header tab:hover label {
color: @headline-hl;
}
-notebook header tab:checked {
+notebook > header tab:checked {
box-shadow: 0 0.25em @accent-color2;
}
-notebook header.left tab:checked {
+notebook > header.left tab:checked {
box-shadow: 0.25em 0 @accent-color2;
}
notebook > header > tabs > arrow {
background-color: transparent;
border-radius: 0.2em;
- min-width: 0;
- min-height: 0;
- padding: 0 0.1667em;
+ padding: 0 0.166666666666666666em;
margin: 0.5em 0;
}
notebook > header.left > tabs > arrow {
- padding: 0.1667em 0;
+ padding: 0.166666666666666666em 0;
margin: 0 0.5em;
}
notebook > header > tabs > arrow:hover {
@@ -825,11 +894,11 @@ dialog notebook stack {
/*?win*/
#MainNotebook > stack {
- padding: 0.4167em;
+ padding: 0.416666666666666666em;
}
#MainNotebook > stack > :nth-child(2) > box:nth-child(3) {
- margin-top: 0.4167em;
+ margin-top: 0.416666666666666666em;
}
@@ -837,78 +906,83 @@ dialog notebook stack {
dialog.csd #PrefNotebook > header,
dialog.csd #AboutNotebook > header,
window.csd:not(.fullscreen) #MainNotebook > header.top {
- border-top: 0.08334em solid rgba(200,200,200,.18);
+ border-top: 0.083333333333333333em solid rgba(200,200,200,.18);
}
/**/
+
+#RightNotebook > stack > scrolledwindow > viewport > box > box:last-child > image,
+#ToolPanelNotebook > stack > scrolledwindow > viewport > box > box:last-child > image {
+ min-height: 5em;
+}
+
#ToolPanelNotebook > header tabs {
- margin-bottom: 0.3334em;
+ margin-bottom: 0.333333333333333333em;
}
-
-#ToolPanelNotebook > header tab {
- margin-left: 0;
- margin-right: 0;
- padding: 0 0.3334em;
-}
-#ToolPanelNotebook > header tab + tab {
- margin-left: 0.25em;
-}
-
-#ToolPanelNotebook > header tab #TextOrIcon image{
- min-height: 2.3333em;
- min-width: calc(2em + 4px);
- padding: 2px 0;
+#ToolPanelNotebook > header tab > box > image{
+ min-height: 2em;
+ min-width: 2em;
+ padding-top: 0.25em;
+ padding-bottom: 0.333333333333333333em;
margin: 0;
}
#RightNotebook > header {
- margin: 0 0.4167em 0 0;
+ margin: 0 0.416666666666666666em 0 0;
}
#RightNotebook > stack {
background-color: @bg-grey;
padding: 0;
}
-#RightNotebook header tab label {
- padding-left: 0.1667em;
- padding-right: 0.1667em;
+#RightNotebook > header tab label {
+ padding-left: 0.25em;
+ padding-right: 0.25em;
}
#RightNotebook > stack > :nth-child(1) > * > box,
#RightNotebook > stack > :nth-child(4) > * > box {
padding: 0.5em;
- border: 0.0834em solid @bg-entry-border;
+ border: 0.083333333333333333em solid @bg-entry-border;
}
-#PrefNotebook header {
- margin: -0.6667em -0.6667em 0.3334em;
+#PrefNotebook > header {
+ margin: -0.666666666666666666em -0.666666666666666666em 0.333333333333333333em;
}
-#PrefNotebook header tab label {
- padding-top: 0.1667em;
- padding-bottom: 0.1667em;
+#PrefNotebook > header tab label {
+ padding-top: 0.25em;
+ padding-bottom: 0.25em;
+}
+#PrefNotebook > stack {
+ margin: 0 -0.666666666666666666em;
+}
+#PrefNotebook > stack > scrolledwindow > viewport {
+ padding: 0 0.666666666666666666em;
}
-#AboutNotebook header {
- margin: -0.6667em -0.6667em 0.6667em;
+#AboutNotebook > header {
+ margin: -0.666666666666666666em -0.666666666666666666em 0.666666666666666666em;
}
-#AboutNotebook stack text {
+#AboutNotebook > stack text,
+#AboutNotebook > stack textview {
background-color: @bg-dark-grey;
+ padding: 0.75em 0;
}
/* All tool panels have a frame except for Meta which unlike the rest is a notebook itself.
* So we use CSS to make it look like a frame. */
-#MetaPanelNotebook header {
+#MetaPanelNotebook > header {
background-color: @bg-grey;
- padding: 0.3334em;
+ padding: 0.333333333333333333em;
margin: 0 0.5em 0;
}
#MetaPanelNotebook > header > tabs {
background-color: @bg-dark-grey;
- padding-left: 0.3334em;
+ padding-left: 0.333333333333333333em;
}
#MetaPanelNotebook > header tab label{
- margin: 0.0834em;
+ margin: 0.083333333333333333em;
}
#MetaPanelNotebook > stack > box {
@@ -916,37 +990,37 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
background-color: @bg-grey;
border-radius: 0;
border-top-style: none;
- padding: 0 0.3334em 0.25em;
+ padding: 0 0.333333333333333333em 0.25em;
margin: 0 0.5em -0.5em;
}
#MetaPanelNotebook > stack > box:nth-child(1) > scrolledwindow {
- margin: 0 0 0.3334em;
+ margin: 0 0 0.333333333333333333em;
padding: 0;
}
#MetaPanelNotebook > stack > box:nth-child(2) > scrolledwindow > viewport.frame {
- padding: 0 0 0 1em;
+ padding: 0 0 0 1.166666666666666666em;
}
#MetaPanelNotebook separator {
background-color: @border-color;
- margin: 0.1667em 0;
+ margin: 0.166666666666666666em 0;
}
#MetaPanelNotebook entry, #MetaPanelNotebook button, #MetaPanelNotebook combobox button {
margin-top: 0;
margin-bottom: 0;
- min-height: 1.6666em;
- min-width: 0.8333em;
+ min-height: 1.666666666666666666em;
+ min-width: 0;
}
#MetaPanelNotebook entry {
- padding: 0 0.3334em;
+ padding: 0 0.333333333333333333em;
background-color: @bg-dark-grey;
margin: 0;
border-radius: 0;
}
#MetaPanelNotebook > stack > box:nth-child(1) > :nth-child(1) {
- border: 0.0834em solid @bg-dark-grey;
+ border: 0.083333333333333333em solid @bg-dark-grey;
}
#MetaPanelNotebook > stack > box:nth-child(2) > scrolledwindow scrolledwindow {
background-color: @bg-dark-grey;
@@ -954,13 +1028,13 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
margin: 0;
}
#MetaPanelNotebook > stack > box:nth-child(2) .view {
- border: 0.0834em solid @bg-dark-grey;
- padding: 0.1667em;
+ border: 0.083333333333333333em solid @bg-dark-grey;
+ padding: 0.166666666666666666em;
margin: 0;
}
#MetaPanelNotebook textview.view {
background-color: @bg-dark-grey;
- padding: 0.0834em 0.3334em;
+ padding: 0.083333333333333333em 0.333333333333333333em;
margin: 0;
}
#MetaPanelNotebook text {
@@ -976,17 +1050,17 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
}
#MetaPanelNotebook combobox + button,
#MetaPanelNotebook combobox + button + button {
- margin-left: 0.1667em;
- min-width: 1.6666em;
+ margin-left: 0.166666666666666666em;
+ min-width: 1.666666666666666666em;
}
#MetaPanelNotebook > stack > box > grid > button {
- margin-top: 0.0834em;
- margin-bottom: 0.0834em;
- min-height: 2.1666em;
+ margin-top: 0.083333333333333333em;
+ margin-bottom: 0.083333333333333333em;
+ min-height: 2.5em;
}
#MetaPanelNotebook label {
- padding: 0.0834em 0;
+ padding: 0.083333333333333333em 0;
}
/*** end ***************************************************************************************/
@@ -994,7 +1068,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
/*** File Browser ******************************************************************************/
#FileCatalog {
background-color: @bg-image;
- border: 0.0834em solid @bg-dark-grey;
+ border: 0.083333333333333333em solid @bg-dark-grey;
}
#FileCatalog:selected {
background-color: @accent-color3;
@@ -1008,7 +1082,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
}
#ToolBarPanelFileBrowser {
- margin: 0.4167em -1px;
+ margin: 0.416666666666666666em -1px;
min-height: 0;
min-width: 0;
padding: 0;
@@ -1016,56 +1090,68 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
#ToolBarPanelFileBrowser > box > button,
#ToolBarPanelFileBrowser > button {
- margin: 0 0.0834em;
+ margin: 0 0.083333333333333333em;
}
/* Filter */
#ToolBarPanelFileBrowser .smallbuttonbox {
- min-height: 1.0834em;
+ min-height: 1.333333333333333333em;
padding: 0;
margin: 0;
}
#ToolBarPanelFileBrowser .smallbuttonbox:nth-child(2) {
- margin: 1px 0 -1px 0;
+ margin: 0.083333333333333333em 0 -0.166666666666666666em;
+}
+#ToolBarPanelFileBrowser .smallbuttonbox button.smallbutton image {
+ margin: -0.166666666666666666em;
+ min-width: 1.333333333333333333em;
+ min-height: 1.333333333333333333em;
}
#ToolBarPanelFileBrowser .smallbuttonbox button.smallbutton {
min-height: 0;
- min-width: 1.0834em;
+ min-width: 1.333333333333333333em;
padding: 0;
- margin: 0 2px;
+ margin: 0 0.25em;
border: none;
border-radius: 0;
background-color: transparent;
background-image: none;
box-shadow: none;
}
-#ToolBarPanelFileBrowser .smallbuttonbox button.smallbutton:checked {
- background-color: @bg-dark-grey;
-}
-#ToolBarPanelFileBrowser .smallbuttonbox button.smallbutton image{
- -gtk-icon-transform: scale(calc(14/16));
- margin: -2px
+#FileBrowser #ToolBarPanelFileBrowser box:nth-child(7) > box.smallbuttonbox > button.smallbutton:checked,
+#EditorLeftPaned #ToolBarPanelFileBrowser box:nth-child(5) > box.smallbuttonbox > button.smallbutton:checked {
+ background-image: image(rgba(30,30,30,.3));
+ background-color: @bg-button-active;
}
/**/
-#ToolBarPanelFileBrowser entry + button.flat,
-#FileBrowser entry + button.flat {
- min-height: 1.6666em;
- min-width: 1.6666em;
- margin: 0 0 0 -1.6667em;
+#FileBrowserQueryToolbar entry + button.flat,
+#FileBrowserIconToolbar entry + button.flat {
+ min-height: 1.666666666666666666em;
+ min-width: 1.666666666666666666em;
+ margin: 0;
border-radius: 0 0.2em 0.2em 0;
- border: 0.0834em solid transparent;
+ box-shadow: inset 0 0.083333333333333333em rgba(0, 0, 0, 0.08), 0 0.083333333333333333em rgba(242, 242, 242, 0.1);
+ border: 0.083333333333333333em solid @bg-entry-border;
+ background-color: @bg-scale-entry;
padding: 0;
}
-#ToolBarPanelFileBrowser entry,
-#FileBrowser entry {
- min-height: 1.6666em;
- min-width: 12em;
- margin: 0 -2px 0 0;
- padding: 0 2em 0 0.3334em;
+#FileBrowserQueryToolbar entry + button.flat:not(:hover):not(:active),
+#FileBrowserIconToolbar entry + button.flat:not(:hover):not(:active) {
+ border-left: none;
+ padding-left: 0.083333333333333333em;
}
-#ToolBarPanelFileBrowser label,
-#FileBrowser label {
- margin: 0 0.3334em 0 0.5em;
+#FileBrowserQueryToolbar entry,
+#FileBrowserIconToolbar entry {
+ min-height: 1.666666666666666666em;
+ min-width: 0;
+ margin: 0;
+ padding: 0 0.333333333333333333em;
+ border-right: none;
+ border-radius: 0.2em 0 0 0.2em;
+}
+#FileBrowserQueryToolbar label,
+#FileBrowserIconToolbar label {
+ margin: 0 0.333333333333333333em 0 0.5em;
}
/*** end ***************************************************************************************/
@@ -1076,21 +1162,21 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
#BeforeAfterContainer {
background-color: @bg-grey;
- border: 0.0834em solid @bg-dark-grey;
+ border: 0.083333333333333333em solid @bg-dark-grey;
border-radius: 0;
padding: 0;
- margin: -2px 0 0.4167em;
+ margin: calc(0.416666666666666666em - 2px) 0 0.416666666666666666em;
}
#BeforeAfterContainer > box:nth-child(2) > box:nth-child(2),
#BeforeAfterContainer > box:nth-child(1) > box:nth-child(2){
- border-top: 0.0834em solid @bg-dark-grey;
+ border-top: 0.083333333333333333em solid @bg-dark-grey;
}
#BeforeAfterContainer > box:nth-child(2){
- border-left: 0.0834em solid @bg-dark-grey;
+ border-left: 0.083333333333333333em solid @bg-dark-grey;
}
#BeforeAfterContainer label {
- min-height: 2.6666em;
+ min-height: 2.666666666666666666em;
padding: 0 0.5em;
}
/* Small Lock Button */
@@ -1099,34 +1185,30 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
min-width: 2em;
margin: 0.25em 0.25em 0.25em 0;
padding: 0;
+ border-radius: 0.2em;
+ border: 0.083333333333333333em solid @bg-button-border;
+ background-color: transparent;
+ box-shadow: inset 0 0.083333333333333333em rgba(242, 242, 242, 0.1);
+ background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
}
#BeforeAfterContainer button image{
- margin: 0 0 0 1px;
+ margin: 0 0 0 0.083333333333333333em;
}
#BeforeAfterContainer button:checked image{
- margin: 0 -2px 0 3px;
+ margin: 0.083333333333333333em -0.166666666666666666em 0.083333333333333333em 0.25em;
}
/**/
#EditorToolbarTop {
- margin: -2px -2px 0.4167em;
+ margin: 0 -2px 0;
padding: 0;
min-height: 0;
}
-/* Single Window */
-window > box > #EditorRightPaned > paned > paned > box {
- margin-top: -2px;
- padding: 0;
-}
-window > box > #EditorRightPaned > paned > paned > box > #EditorToolbarTop {
- margin-top: 0;
-}
-/**/
#EditorTopPanel button {
- margin: 0 0.0834em;
- min-height: 2.1666em;
- min-width: 2.1666em;
+ margin: 0 0.083333333333333333em;
+ min-height: 2.5em;
+ min-width: 2.5em;
}
/* Removes margin from the last button. Otherwise the filmstrip will cut of the right border. */
#EditorTopPanel :last-child > button:last-child {
@@ -1134,8 +1216,8 @@ window > box > #EditorRightPaned > paned > paned > box > #EditorToolbarTop {
}
#EditorTopPanel button.narrowbutton {
- min-width: 1em;
- padding: 0;
+ min-width: 0.833333333333333333em;
+ padding: 0 0.166666666666666666em;
}
/*Button editor bottom*/
@@ -1147,8 +1229,8 @@ window > box > #EditorRightPaned > paned > paned > box > #EditorToolbarTop {
padding: 0 2px 0 3px;
}
#EditorZoomPanel button {
- margin-left: 0.0834em;
- margin-right: 0.0834em;
+ margin-left: 0.083333333333333333em;
+ margin-right: 0.083333333333333333em;
}
/*** end ***************************************************************************************/
@@ -1157,20 +1239,26 @@ window > box > #EditorRightPaned > paned > paned > box > #EditorToolbarTop {
background-color: @bg-dark-grey;
padding: 0 0 0.5em 0;
}
+
+#MyExpander image {
+ min-width: 1.333333333333333333em;
+ min-height: 1.333333333333333333em
+}
+
/*Curve spinbutton background */
#MyExpander flowbox > flowboxchild {
background-color: transparent;
}
/**/
#MyExpander .drawingarea:not(.slider) {
- border: 0.0834em solid @bg-light-grey;
+ border: 0.083333333333333333em solid @bg-light-grey;
background-color: @bg-dark-grey;
}
#MyExpander .slider,
#MyExpander #CurveSHCSelector {
background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85));
background-color: @accent-color4;
- border: 0.0834em solid rgb(15,15,15);
+ border: 0.083333333333333333em solid rgb(15,15,15);
}
#MyExpander .drawingarea:disabled {
background-color: shade(@bg-grey,.85);
@@ -1178,11 +1266,11 @@ window > box > #EditorRightPaned > paned > paned > box > #EditorToolbarTop {
background-image: none;
}
#ThresholdAdjuster {
- margin: 0.0834em 0 0.1667em 0;
+ margin: 0.083333333333333333em 0 0.166666666666666666em 0;
}
#ToolPanelNotebook scrolledwindow viewport.frame {
- padding: 0 0.56em;
+ padding: 0 0.5em;
}
#MyExpander {
@@ -1200,7 +1288,7 @@ window > box > #EditorRightPaned > paned > paned > box > #EditorToolbarTop {
/* Sub-tool (MyExpander) */
#ExpanderBox2 > box, #ExpanderBox2 > grid {
background-color: transparent;
- border: 0.0834em solid @border-color;
+ border: 0.083333333333333333em solid @border-color;
border-radius: 0;
margin: 0;
padding: 0.5em;
@@ -1214,7 +1302,7 @@ window > box > #EditorRightPaned > paned > paned > box > #EditorToolbarTop {
#MyExpanderTitle label {
color: @headline-big;
padding: 0;
- margin: 0.0834em 0.25em 0 0.5em;
+ margin: 0.083333333333333333em 0.25em 0 0.5em;
}
#MyExpanderTitle:hover label {
@@ -1229,19 +1317,19 @@ window > box > #EditorRightPaned > paned > paned > box > #EditorToolbarTop {
border: none;
padding: 0;
margin: 0;
- box-shadow: 0 0.25em 0.75em 0.0834em rgba(0, 0, 0, 0.50), 0 0 0 0.0834em @bg-dark-grey;
+ box-shadow: 0 0.25em 0.75em 0.083333333333333333em rgba(0, 0, 0, 0.50), 0 0 0 0.083333333333333333em @bg-dark-grey;
}
menu {
background-color: @bg-dark-grey;
- border: 0.0834em solid @accent-color;
- padding: 0.0834em;
+ border: 0.083333333333333333em solid @accent-color;
+ padding: 0.083333333333333333em;
margin: 0;
}
-menu > .top,
-menu > .top:hover,
-menu > .bottom,
-menu > .bottom:hover {
+menu > arrow.top,
+menu > arrow.top:hover,
+menu > arrow.bottom,
+menu > arrow.bottom:hover {
background-color: transparent;
border: none;
padding: 0.5em;
@@ -1249,10 +1337,17 @@ menu > .bottom:hover {
}
menuitem {
- padding: 0 0.3334em;
- margin: 0.0834em;
+ padding: 0 0.333333333333333333em;
+ margin: 0.083333333333333333em;
min-height: 2em;
}
+
+menu arrow {
+ min-width: 1.333333333333333333em;
+ margin: 0 -0.166666666666666666em;
+ padding: 0;
+ margin: 0 -0.25em 0 0;
+}
menuitem:hover {
background-color: @accent-color;
}
@@ -1263,8 +1358,9 @@ menuitem:hover > * {
menu image {
min-height: 2em;
+ min-width: 1.333333333333333333em;
padding: 0;
- margin: 0 0.3334em 0 0;
+ margin: 0 0.25em 0 -1.166666666666666666em;
}
/*** Selection popup list (used in filechooser) ***/
@@ -1273,11 +1369,11 @@ entry > window > frame {
}
entry > window > frame > border {
background-color: @bg-dark-grey;
- padding: 0.0834em;
- border: 0.0834em solid @accent-color;
+ padding: 0.083333333333333333em;
+ border: 0.083333333333333333em solid @accent-color;
}
entry > window > frame > border {
- margin: 0.0834em;
+ margin: 0.083333333333333333em;
}
/* end */
@@ -1287,7 +1383,7 @@ entry > window > frame > border {
popover.background {
background-color: @bg-dark-grey;
- border: 0.0834em solid @accent-color;
+ border: 0.083333333333333333em solid @accent-color;
border-radius: 0;
padding: 0;
margin: 0;
@@ -1299,7 +1395,7 @@ popover.background > box {
}
popover.background modelbutton {
min-height: 2em;
- padding: 0 0.4167em;
+ padding: 0 0.416666666666666666em;
margin: 0;
border-radius: 0;
}
@@ -1316,25 +1412,28 @@ popover.background modelbutton:hover {
/*** Switch ***********************************************************************************/
switch {
- min-height: 2.1666em;
+ min-height: 2.5em;
min-width: 11em;
margin: 0;
padding: 0;
border-radius: 0.2em;
background-image: none;
- box-shadow: inset 0.0834em 0.0834em rgba(0, 0, 0, 0.08), 0 0.0834em rgba(242, 242, 242, 0.1);
- border: 0.0834em solid @bg-entry-border;
+ box-shadow: inset 0.083333333333333333em 0.083333333333333333em rgba(0, 0, 0, 0.08), 0 0.083333333333333333em rgba(242, 242, 242, 0.1);
+ border: 0.083333333333333333em solid @bg-entry-border;
background-color: @bg-scale-entry;
margin-bottom: 0.5em;
}
switch slider {
- border: 0.0834em solid @bg-entry-border;
background-color: shade (@bg-light-grey, .85);
background-image: linear-gradient(to bottom, rgba(125,125,125,.4), rgba(60,60,60,.4));
- border: 0.0834em solid @bg-entry-border;
- box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.1);
+ border: 0.083333333333333333em solid @bg-entry-border;
+ box-shadow: inset 0 0.083333333333333333em rgba(242, 242, 242, 0.1);
border-radius: 0.2em 0 0 0.2em;
+
+ /* Needed to cover the total switch */
+ margin: -0.083333333333333333em;
+ padding: 0.083333333333333333em;
}
switch:checked slider{
border-radius: 0 0.2em 0.2em 0;
@@ -1361,14 +1460,14 @@ switch:disabled:not(:checked) {
/*** Buttons ***********************************************************************************/
button {
- min-height: 2.1666em;
- min-width: 2.1666em;
+ min-height: 2.5em;
+ min-width: 2.5em;
margin: 0;
padding: 0; /* x */
border-radius: 0.2em;
- border: 0.0834em solid @bg-button-border;
+ border: 0.083333333333333333em solid @bg-button-border;
background-color: transparent;
- box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.1);
+ box-shadow: inset 0 0.083333333333333333em rgba(242, 242, 242, 0.1);
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
}
button.flat {
@@ -1379,23 +1478,24 @@ button.text-button label {
}
#PrefNotebook > stack > :nth-child(5) combobox {
- /* margin: 0.1667em 0; */
+ /* margin: 0.166666666666666666em 0; */
margin: 2px 0;
}
#PrefNotebook > stack > :nth-child(2) #MyFileChooserButton {
- /* margin: 0.25em 0.3334em; */
+ /* margin: 0.25em 0.333333333333333333em; */
margin: 3px 5px;
}
filechooser button image,
#MyFileChooserButton image {
- opacity: .70;
- -gtk-icon-style: symbolic;
+ min-width: 1.333333333333333333em;
+ min-height: 1.333333333333333333em;
+ opacity: .85;
}
#MainNotebook > header > grid > button,
button.flat {
- border: 0.0834em solid transparent;
+ border: 0.083333333333333333em solid transparent;
box-shadow: none;
background-image: none;
background-color: transparent;
@@ -1407,18 +1507,18 @@ button.flat {
dialog scale + button.flat,
#MainNotebook > stack > :nth-child(2) > box:nth-child(1) scale + button.flat,
entry + button.flat {
- min-height: 1.1666em;
+ min-height: 1.166666666666666666em;
min-width: 1.5em;
- margin: 0.0834em 0 0.0834em 0.1667em;
- padding: 0 0 0 0.1667em;
+ margin: 0.083333333333333333em 0 0.083333333333333333em 0.166666666666666666em;
+ padding: 0 0 0 0.166666666666666666em;
}
dialog entry + button:last-child.flat {
- min-height: 1.6666em;
+ min-height: 1.666666666666666666em;
}
#MyExpander scale + button:last-child.flat,
#MyExpander spinbutton + button:last-child.flat {
- margin: 0 0 0 0.1667em;
+ margin: 0 0 0 0.166666666666666666em;
}
#MyExpander image + button:last-child.flat {
margin: 0 0 0 0.25em;
@@ -1426,30 +1526,27 @@ dialog entry + button:last-child.flat {
/**/
/* Buttons Curve drawingarea*/
-#MyExpander button.flat + button.flat,
-#MyExpander button.flat:first-child {
- min-height: 2em;
- min-width: 2em;
- margin: 0.1667em 0.1667em 0 0;
+#MyExpander grid > grid > grid > button.flat + button.flat,
+#MyExpander grid > grid > grid > button.flat:first-child {
+ min-height: 2.5em;
+ min-width: 2.5em;
+ margin: 0.166666666666666666em 0.166666666666666666em 0 0;
padding: 0;
}
-#MyExpander button.flat + button.flat image,
-#MyExpander button.flat:first-child image{
- -gtk-icon-transform: scale(calc(20/24));
- margin: -2px;
-}
/**/
+#BeforeAfterContainer button:hover,
#ToolBarPanelFileBrowser entry + button:hover,
#FileBrowser entry + button:hover,
button.flat:hover,
button:hover {
border-color: @bg-button-border;
- box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.1);
+ box-shadow: inset 0 0.083333333333333333em rgba(242, 242, 242, 0.1);
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
background-color: @bg-button-hover;
}
+#BeforeAfterContainer button:checked,
#ToolBarPanelFileBrowser entry + button:active,
#FileBrowser entry + button:active,
button.flat:active,
@@ -1457,7 +1554,7 @@ button.flat:checked,
button:active,
button:checked {
border-color: @bg-button-border;
- box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.08);
+ box-shadow: inset 0 0.083333333333333333em rgba(242, 242, 242, 0.08);
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
background-color: @bg-button-active;
}
@@ -1465,22 +1562,22 @@ button:checked {
/* Add space between connected buttons */
button.Right,
button.MiddleH {
- margin-left: 0.1667em;
- border: 0.0834em solid @bg-button-border;
+ margin-left: 0.166666666666666666em;
+ border: 0.083333333333333333em solid @bg-button-border;
}
/**/
/* Applies special styles in main notebook */
#ProfilePanel {
margin-bottom: -2px;
- padding-bottom: 0.4167em;
+ padding-bottom: 0.416666666666666666em;
}
#ProfilePanel > label {
- margin-bottom: 0.0834em;
+ margin-bottom: 0.083333333333333333em;
}
#ProfilePanel combobox {
- margin-left: 0.1667em;
- margin-right: 0.1667em;
+ margin-left: 0.166666666666666666em;
+ margin-right: 0.166666666666666666em;
}
#ProfilePanel button.Left {
margin-left: -2px;
@@ -1500,40 +1597,34 @@ button.MiddleH {
dialog button,
#MyExpander button,
#BatchQueueButtonsMainContainer button {
- min-height: 1.6666em;
+ min-height: 1.666666666666666666em;
min-width: 0;
- padding: 0 0.375em;
- margin: 0.0834em 0;
+ padding: 0 0.416666666666666666em;
+ margin: 0.083333333333333333em 0;
}
#MyExpander #MyFileChooserButton + button.image-button{
- min-width: 1.6666em;
+ min-width: 1.666666666666666666em;
padding: 0;
}
+combobox button.combo,
#ToolPanelNotebook > stack > box > box > combobox button.combo,
-dialog button.combo,
-#MyExpander button.combo,
-#BatchQueueButtonsMainContainer button.combo {
- padding: 0;
+dialog combobox button.combo,
+#MyExpander combobox button.combo,
+#BatchQueueButtonsMainContainer combobox button.combo {
+ padding: 0 0.166666666666666666em 0 0.25em;
}
+
#ToolPanelNotebook > stack > box > box > combobox {
margin-right: 0.25em;
}
-combobox button cellview {
- padding: 0 0 0 0.1667em;
-}
-combobox arrow {
- padding: 0 0.1667em 0 0;
- margin: 0;
-}
-#MetaPanelNotebook combobox arrow {
+
+combobox entry + button {
padding: 0;
- min-width: 1.25em;
}
-.popupbutton-arrow {
- min-width: 0;
+combobox entry + button arrow{
+ margin: 0 -0.166666666666666666em 0 -0.25em;
}
-/**/
/* Add/remove space between buttons and labels in toolbox*/
#ToolPanelNotebook > stack > box > box > label {
@@ -1547,25 +1638,21 @@ combobox arrow {
#MyExpander combobox + combobox,
#MyExpander button + label,
#MyExpander combobox + label {
- margin-left: 0.1667em;
+ margin-left: 0.166666666666666666em;
}
#MyExpander label + * > button:not(.flat).Left,
#MyExpander label + combobox:not(:first-child):not(:only-child),
#MyExpander label + button:not(.flat):not(spinbutton) {
- margin-left: 0.3334em;
+ margin-left: 0.333333333333333333em;
}
buttonbox:not(.dialog-action-area) button{
- margin: 0.0834em 0 0.3334em 0.1667em;
+ margin: 0.083333333333333333em 0 0.333333333333333333em 0.166666666666666666em;
}
#PrefNotebook buttonbox:not(.dialog-action-area) {
margin-right: -5px;
}
-#PrefNotebook radiobutton + entry + button:last-child image {
- -gtk-icon-transform: scale(calc(17/24));
- margin: -5px;
-}
/* Arrow toggle combo button */
#IopsPanel .image-combo button.Right,
@@ -1576,13 +1663,13 @@ buttonbox:not(.dialog-action-area) button{
padding-right: 0;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
- min-width: 1.3333em;
+ min-width: 1.333333333333333333em;
}
#IopsPanel .image-combo button.Left,
#MyExpander .image-combo button.Left {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
- min-width: 2.1666em;
+ min-width: 2.5em;
}
/**/
@@ -1591,36 +1678,38 @@ buttonbox:not(.dialog-action-area) button{
margin: 0;/* x */
}
/* Graduated filter big button */
-#MyExpander button:not(.image-button).independent:first-child:not(.flat):only-child {
- min-height: 2em;
- min-width: 2em;
+#MyExpander button.independent:not(.image-button):not(.text-button):first-child:only-child {
+ min-height: 2.5em;
+ min-width: 2.5em;
padding: 0;
- margin: 0 0 0.3334em;
+ margin: 0.25em 0;
}
-#MyExpander button:not(.image-button).independent:first-child:not(.flat):only-child image {
- -gtk-icon-transform: scale(calc(20/24));
- margin: -2px;
+/**/
+/* Pipette */
+#MyExpander button.independent.image-button {
+ min-height: 2.5em;
}
-/* WB pipete big button*/
-#MyExpander button.image-button.independent:first-child:not(.flat):not(:only-child) image {
- -gtk-icon-transform: scale(calc(18/24));
- margin: -4px;
+#MyExpander button.independent.image-button + label + combobox button {
+ margin: 0.5em 0;
+}
+#MyExpander button.independent.image-button + label {
+ margin-left: 2em ;
}
/**/
button.color {
- min-height: 1.1666em;
+ min-height: 1.166666666666666666em;
padding: 0.25em;
}
/* Save, Cancel, OK ... buttons */
.dialog-action-area button {
- min-height: 2.1666em;
- margin-top: 0.3334em;
+ min-height: 2.5em;
+ margin-top: 0.333333333333333333em;
}
messagedialog .dialog-action-area button {
- margin: 0 0.6667em 0.6667em 0.6667em;
- min-height: 1.8333em;
+ margin: 0 0.666666666666666666em 0.666666666666666666em 0.666666666666666666em;
+ min-height: 2.166666666666666666em;;
}
messagedialog .dialog-action-area button:not(:only-child):nth-child(1) {
margin-right: 0.25em;
@@ -1637,20 +1726,24 @@ window .view button {
background-image: none;
box-shadow: none;
min-height: 2em;
- min-width: 1.3333em;
- padding: 0 0.3334em;
+ min-width: 1.333333333333333333em;
+ padding: 0 0.166666666666666666em 0 0.333333333333333333em;
margin: 0;
}
+window treeview > header image {
+ min-width: 1.333333333333333333em;
+}
+
dialog .view button.text-button label,
window .view button.text-button label {
margin: 0;
}
window .view button {
border: none;
- border-bottom: 0.0834em solid @border-color;
+ border-bottom: 0.083333333333333333em solid @border-color;
}
dialog .view button {
- border: 0.0834em solid @border-color;
+ border: 0.083333333333333333em solid @border-color;
}
.view button:checked,
@@ -1696,7 +1789,7 @@ window .view header button,
}
.path-bar button label {
margin: 0;
- padding: 0 0.3334em;
+ padding: 0 0.333333333333333333em;
}
/**/
@@ -1704,12 +1797,12 @@ window .view header button,
popover button.text-button {
background-color: @bg-dark-grey;
background-image: none;
- border: 0.0834em solid @border-color;
+ border: 0.083333333333333333em solid @border-color;
box-shadow: none;
background-image: none;
- margin: 0.08334em 0;
- min-height: 1.6666em;
- padding: 0 0.6667em;
+ margin: 0.083333333333333333em 0;
+ min-height: 1.666666666666666666em;
+ padding: 0 0.666666666666666666em;
}
popover button.text-button label {
padding: 0;
@@ -1733,10 +1826,10 @@ popover button.text-button:active {
/* Titlebar & Notebook buttons */
#MainNotebook > header.top > grid > button {
- margin: 0 0 0 0.4167em;
+ margin: 0 0 0 0.416666666666666666em;
}
#MainNotebook > header.left > grid > button {
- margin: 0.4167em 0 0;
+ margin: 0.416666666666666666em 0 0;
}
headerbar button.titlebutton image {
@@ -1744,13 +1837,13 @@ headerbar button.titlebutton image {
margin: 0;
}
headerbar button.titlebutton {
- margin: 0 0 0 0.3334em;
+ margin: 0 0 0 0.333333333333333333em;
background-image: none;
- border: 0.0834em solid transparent;
+ border: 0.083333333333333333em solid transparent;
background-color: transparent;
box-shadow: none;
- min-width: 1.55em;
- min-height: 1.55em;
+ min-width: 1.5em;
+ min-height: 1.5em;
padding: 0;
}
messagedialog headerbar button.titlebutton {
@@ -1761,22 +1854,26 @@ messagedialog headerbar button.titlebutton {
#MainNotebook tab #CloseButton {
padding: 0;
- margin: 0.3334em -2px 0.5em 0.25em;
+ margin: 0.333333333333333333em 0 0.416666666666666666em 0.25em;
min-width: 1.5em;
- min-height: 1.5em;
+ min-height: 0;
+}
+#MainNotebook tab #CloseButton image{
+ min-width: 1.333333333333333333em;
+ min-height: 1.333333333333333333em;
}
#MainNotebook > header > grid > button:hover,
#MainNotebook tab #CloseButton:hover,
headerbar button.titlebutton:hover{
border-color: rgba(0,0,0,.8);
- box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.11);
+ box-shadow: inset 0 0.083333333333333333em rgba(242, 242, 242, 0.11);
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
background-color: rgba(128, 128, 128,.20);
}
#MainNotebook > header > grid > button:active,
headerbar button.titlebutton:active{
border-color: rgba(0,0,0,.8);
- box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.15);
+ box-shadow: inset 0 0.083333333333333333em rgba(242, 242, 242, 0.15);
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
background-color: rgba(128, 128, 128,.40);
}
@@ -1784,13 +1881,13 @@ headerbar button.titlebutton:active{
headerbar button.titlebutton.close:hover{
border-color: rgba(0,0,0,.8);
background-image: linear-gradient(to bottom, rgb(180,0,0), rgb(160,0,0) 40%, rgb(130,0,0));
- box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.32);
+ box-shadow: inset 0 0.083333333333333333em rgba(242, 242, 242, 0.32);
}
#MainNotebook tab #CloseButton:active,
headerbar button.titlebutton.close:active{
border-color: rgba(0,0,0,.8);
background-image: linear-gradient(to bottom, rgb(215,0,0), rgb(185,0,0) 40%, rgb(150,0,0));
- box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.4);
+ box-shadow: inset 0 0.083333333333333333em rgba(242, 242, 242, 0.4);
}
/**/
@@ -1806,18 +1903,18 @@ radiobutton {
}
#PrefNotebook checkbox,
#PrefNotebook checkbutton {
- min-height: 1.6666em;
+ min-height: 1.666666666666666666em;
}
check,
radio {
- border: calc(0.08334em + 0.18px) solid shade(@text-color, 0.95);
+ border: 0.105em solid shade(@text-color, 0.95);
background-image: none;
background-color: transparent;
margin: 0;
padding: 0;
- min-height: 1.1666em;
- min-width: 1.1666em;
+ min-height: 1.166666666666666666em;
+ min-width: 1.166666666666666666em;
box-shadow: none;
background-repeat: no-repeat;
color: shade(@text-color, 0.95);
@@ -1828,11 +1925,11 @@ checkbutton label {
padding: 0;
}
check {
- border-radius: 0.1667em;
+ border-radius: 0.166666666666666666em;
}
radio{
- border-radius: 1.1667em;
+ border-radius: 1.166666666666666666em;
}
check:disabled,
radio:disabled {
@@ -1843,17 +1940,22 @@ frame > checkbutton check{
margin-left: 0.5em;
}
+#PartialPaste checkbutton/* :not(#PartialPasteHeader) */ {
+ min-height: 1.166666666666666666em;
+ margin-top: calc(0.416666666666666666em - 4px);
+ margin-bottom: calc(0.416666666666666666em - 4px)
+}
#PartialPaste checkbutton:not(#PartialPasteHeader) {
- min-height: 1.4em;
- margin-left: 1.1667em;
+ margin-left: 1.166666666666666666em;
}
#PartialPasteHeader {
- min-height: 1.4em;
margin-left: 0.5em;
+ padding-top: 0.333333333333333333em;
+ padding-top: calc(0.666666666666666666em - 5px)
}
#MyExpander button + checkbutton:last-child {
- margin-left: 0.3334em;
+ margin-left: 0.333333333333333333em;
}
/*** end ***************************************************************************************/
@@ -1861,44 +1963,44 @@ frame > checkbutton check{
/*** Entry & Spinbutton ************************************************************************/
#MyExpander entry,
entry {
- margin: 0.0834em 0;
- padding: 0 0.3334em;
- min-height: 1.6666em;
+ margin: 0.083333333333333333em 0;
+ padding: 0 0.333333333333333333em;
+ min-height: 1.666666666666666666em;
min-width: 0;
border-radius: 0.2em;
- box-shadow: inset 0.0834em 0.0834em rgba(0, 0, 0, 0.08), 0 0.0834em rgba(242, 242, 242, 0.1);
- border: 0.0834em solid @bg-entry-border;
+ box-shadow: inset 0.083333333333333333em 0.083333333333333333em rgba(0, 0, 0, 0.08), 0 0.083333333333333333em rgba(242, 242, 242, 0.1);
+ border: 0.083333333333333333em solid @bg-entry-border;
background-color: @bg-scale-entry;
}
spinbutton {
- margin: 0.0834em 0;
+ margin: 0.083333333333333333em 0;
padding: 0;
- min-height: 1.6666em;
+ min-height: 1.666666666666666666em;
min-width: 0;
border-radius: 0.2em;
background-color: @bg-scale-entry;
- border: 0.0834em solid @bg-entry-border;
- box-shadow: inset 0.0834em 0.0834em rgba(0, 0, 0, 0.08), 0 0.0834em rgba(242, 242, 242, 0.1);
+ border: 0.083333333333333333em solid @bg-entry-border;
+ box-shadow: inset 0.083333333333333333em 0.083333333333333333em rgba(0, 0, 0, 0.08), 0 0.083333333333333333em rgba(242, 242, 242, 0.1);
}
#MyExpander spinbutton {
- margin: 0.1667em 0;
+ margin: 0.166666666666666666em 0;
padding: 0;
- min-height: 1.3333em;
+ min-height: 1.333333333333333333em;
min-width: 0;
- border-top-left-radius: 1.8334em;
- border-bottom-left-radius: 1.8334em;
+ border-top-left-radius: 1.833333333333333333em;
+ border-bottom-left-radius: 1.833333333333333333em;
background-color: @bg-tb-spinbutton;
- border: 0.0834em solid @bg-button-border;
+ border: 0.083333333333333333em solid @bg-button-border;
color: @text-tbEntry;
- box-shadow: inset 0.0834em 0.0834em rgba(0, 0, 0, .12), 0 0.0834em rgba(255, 255, 255, 0.12);
+ box-shadow: inset 0.083333333333333333em 0.083333333333333333em rgba(0, 0, 0, .12), 0 0.083333333333333333em rgba(255, 255, 255, 0.12);
}
#MyExpander button + label + spinbutton {
margin: 0.25em 0; /* Needed for Reset & and Auto button height*/
}
#MyExpander checkbutton + label + spinbutton {
- margin: 0.3334em 0; /* Needed for Reset & and Auto checkbox button height*/
+ margin: 0.333333333333333333em 0; /* Needed for Reset & and Auto checkbox button height*/
}
#MyExpander image + spinbutton {
@@ -1911,7 +2013,7 @@ spinbutton button {
padding: 0;
margin: 0;
min-height: 0;
- min-width: 1.3333em;
+ min-width: 1.333333333333333333em;
background-image: none;
background-color: transparent;
border: none;
@@ -1920,7 +2022,7 @@ spinbutton button {
}
#MyExpander spinbutton entry,
spinbutton entry {
- padding: 0 0.3334em;
+ padding: 0 0.333333333333333333em;
margin: 0;
min-height: 0;
min-width: 0;
@@ -1929,7 +2031,7 @@ spinbutton entry {
background-color: transparent;
}
#MyExpander spinbutton entry {
- padding: 0 0.3334em 0 0.8334em;
+ padding: 0 0.333333333333333333em 0 0.833333333333333333em;
}
#BatchQueueButtonsMainContainer spinbutton button:hover,
@@ -1977,7 +2079,7 @@ entry:focus > selection {
.view entry {
background-color: @bg-dark-grey;
margin: 0 -2px;
- border: 0.0834em solid @accent-color;
+ border: 0.083333333333333333em solid @accent-color;
box-shadow: none;
}
/* end*/
@@ -1988,20 +2090,20 @@ entry:focus > selection {
:not(.popup):not(tooltip) > decoration {
background-color: @winHeaderbar;
background-image: none;
- border-radius: 0.4167em 0.4167em 0 0;
+ border-radius: 0.416666666666666666em 0.416666666666666666em 0 0;
border: none;
padding: 0;
- box-shadow: 0 0.25em 0.75em 0.0834em rgba(0, 0, 0, 0.5), 0 0 0 0.0834em @bg-dark-grey;
- margin: 0.8334em;
+ box-shadow: 0 0.25em 0.75em 0.083333333333333333em rgba(0, 0, 0, 0.5), 0 0 0 0.083333333333333333em @bg-dark-grey;
+ margin: 0.833333333333333333em;
}
headerbar {
background-color: shade(@winHeaderbar,1.12);
- box-shadow: inset 0 0.0834em rgba(200,200,200,.13);
+ box-shadow: inset 0 0.083333333333333333em rgba(200,200,200,.13);
background-image: linear-gradient(shade(@winHeaderbar,1.14), shade(@winHeaderbar,.86));
- border-bottom: 0.0834em solid @bg-dark-grey;
- border-radius: 0.4167em 0.4167em 0 0;
- min-height: 2.1666em;
- padding: 0.0834em 0.4167em 0;
+ border-bottom: 0.083333333333333333em solid @bg-dark-grey;
+ border-radius: 0.416666666666666666em 0.416666666666666666em 0 0;
+ min-height: 2.333333333333333333em;
+ padding: 0.083333333333333333em 0.416666666666666666em 0;
margin: 0;
}
messagedialog headerbar {
@@ -2020,7 +2122,7 @@ headerbar .title{
/* Window in background */
:not(.popup):not(tooltip) > decoration:backdrop {
- box-shadow: 0 0.25em 0.75em 0.0834em rgba(0, 0, 0, 0.3), 0 0 0 0.0834em @bg-dark-grey;
+ box-shadow: 0 0.25em 0.75em 0.083333333333333333em rgba(0, 0, 0, 0.3), 0 0 0 0.083333333333333333em @bg-dark-grey;
}
headerbar:backdrop {
box-shadow: none;
@@ -2030,3 +2132,21 @@ 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;} */
+
+
diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc
index a27ee7998..22ad77e63 100644
--- a/rtengine/CA_correct_RT.cc
+++ b/rtengine/CA_correct_RT.cc
@@ -125,9 +125,11 @@ float* RawImageSource::CA_correct_RT(
)
{
BENCHFUN
-// multithreaded and vectorized by Ingo Weyrich
+ // multithreaded and vectorized by Ingo Weyrich
constexpr int ts = 128;
constexpr int tsh = ts / 2;
+ constexpr int cb = 2; // 2 pixels border will be excluded from correction
+
//shifts to location of vertical and diagonal neighbours
constexpr int v1 = ts, v2 = 2 * ts, v3 = 3 * ts, v4 = 4 * ts; //, p1=-ts+1, p2=-2*ts+2, p3=-3*ts+3, m1=ts+1, m2=2*ts+2, m3=3*ts+3;
@@ -145,14 +147,14 @@ float* RawImageSource::CA_correct_RT(
array2D* blueFactor = nullptr;
array2D* oldraw = nullptr;
if (avoidColourshift) {
- redFactor = new array2D((W+1)/2, (H+1)/2);
- blueFactor = new array2D((W+1)/2, (H+1)/2);
- oldraw = new array2D((W + 1) / 2, H);
+ redFactor = new array2D((W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2);
+ blueFactor = new array2D((W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2);
+ oldraw = new array2D((W + 1- 2 * cb) / 2, H- 2 * cb);
// copy raw values before ca correction
#pragma omp parallel for
- for (int i = 0; i < H; ++i) {
- for (int j = FC(i, 0) & 1; j < W; j += 2) {
- (*oldraw)[i][j / 2] = rawData[i][j];
+ for (int i = cb; i < H - cb; ++i) {
+ for (int j = cb + (FC(i, 0) & 1); j < W - cb; j += 2) {
+ (*oldraw)[i - cb][(j - cb) / 2] = rawData[i][j];
}
}
}
@@ -1208,15 +1210,15 @@ float* RawImageSource::CA_correct_RT(
// copy temporary image matrix back to image matrix
#pragma omp for
- for (int row = 0; row < height; row++) {
- int col = FC(row, 0) & 1;
+ for (int row = cb; row < height - cb; row++) {
+ int col = cb + (FC(row, 0) & 1);
int indx = (row * width + col) >> 1;
#ifdef __SSE2__
- for (; col < width - 7 - (3 * (W & 1)); col += 8, indx += 4) {
+ for (; col < width - 7 - cb; col += 8, indx += 4) {
STC2VFU(rawData[row][col], LVFU(RawDataTmp[indx]));
}
#endif
- for (; col < width - (3 * (W & 1)); col += 2, indx++) {
+ for (; col < width - cb; col += 2, indx++) {
rawData[row][col] = RawDataTmp[indx];
}
}
@@ -1232,41 +1234,39 @@ float* RawImageSource::CA_correct_RT(
#pragma omp parallel
{
- #ifdef __SSE2__
+#ifdef __SSE2__
const vfloat onev = F2V(1.f);
const vfloat twov = F2V(2.f);
const vfloat zd5v = F2V(0.5f);
- #endif
+#endif
#pragma omp for
- for (int i = 0; i < H; ++i) {
+ for (int i = 0; i < H - 2 * cb; ++i) {
const int firstCol = FC(i, 0) & 1;
const int colour = FC(i, firstCol);
const array2D* nonGreen = colour == 0 ? redFactor : blueFactor;
int j = firstCol;
- #ifdef __SSE2__
- for (; j < W - 7; j += 8) {
- const vfloat newvals = LC2VFU(rawData[i][j]);
+#ifdef __SSE2__
+ for (; j < W - 7 - 2 * cb; j += 8) {
+ const vfloat newvals = LC2VFU(rawData[i + cb][j + cb]);
const vfloat oldvals = LVFU((*oldraw)[i][j / 2]);
vfloat factors = oldvals / newvals;
factors = vself(vmaskf_le(newvals, onev), onev, factors);
factors = vself(vmaskf_le(oldvals, onev), onev, factors);
STVFU((*nonGreen)[i/2][j/2], LIMV(factors, zd5v, twov));
}
- #endif
- for (; j < W; j += 2) {
- (*nonGreen)[i/2][j/2] = (rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : rtengine::LIM((*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 2.f);
+#endif
+ for (; j < W - 2 * cb; j += 2) {
+ (*nonGreen)[i/2][j/2] = (rawData[i + cb][j + cb] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : rtengine::LIM((*oldraw)[i][j / 2] / rawData[i + cb][j + cb], 0.5f, 2.f);
}
}
#pragma omp single
{
if (H % 2) {
- // odd height => factors for one channel are not set in last row => use values of preceding row
- const int firstCol = FC(0, 0) & 1;
- const int colour = FC(0, firstCol);
- const array2D* nonGreen = colour == 0 ? blueFactor : redFactor;
- for (int j = 0; j < (W + 1) / 2; ++j) {
- (*nonGreen)[(H + 1) / 2 - 1][j] = (*nonGreen)[(H + 1) / 2 - 2][j];
+ // odd height => factors are not set in last row => use values of preceding row
+ for (int j = 0; j < (W + 1 - 2 * cb) / 2; ++j) {
+ (*redFactor)[(H - 2 * cb + 1) / 2 - 1][j] = (*redFactor)[(H - 2 * cb + 1) / 2 - 2][j];
+ (*blueFactor)[(H - 2 * cb + 1) / 2 - 1][j] = (*blueFactor)[(H - 2 * cb + 1) / 2 - 2][j];
}
}
@@ -1276,24 +1276,24 @@ float* RawImageSource::CA_correct_RT(
const int ngCol = FC(ngRow, 0) & 1;
const int colour = FC(ngRow, ngCol);
const array2D* nonGreen = colour == 0 ? redFactor : blueFactor;
- for (int i = 0; i < (H + 1) / 2; ++i) {
- (*nonGreen)[i][(W + 1) / 2 - 1] = (*nonGreen)[i][(W + 1) / 2 - 2];
+ for (int i = 0; i < (H + 1 - 2 * cb) / 2; ++i) {
+ (*nonGreen)[i][(W - 2 * cb + 1) / 2 - 1] = (*nonGreen)[i][(W - 2* cb + 1) / 2 - 2];
}
}
}
// blur correction factors
- gaussianBlur(*redFactor, *redFactor, (W+1)/2, (H+1)/2, 30.0);
- gaussianBlur(*blueFactor, *blueFactor, (W+1)/2, (H+1)/2, 30.0);
+ gaussianBlur(*redFactor, *redFactor, (W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2, 30.0);
+ gaussianBlur(*blueFactor, *blueFactor, (W + 1 - 2 * cb) / 2, (H + 1 - 2 * cb) / 2, 30.0);
// apply correction factors to avoid (reduce) colour shift
#pragma omp for
- for (int i = 0; i < H; ++i) {
+ for (int i = 0; i < H - 2 * cb; ++i) {
const int firstCol = FC(i, 0) & 1;
const int colour = FC(i, firstCol);
const array2D* nonGreen = colour == 0 ? redFactor : blueFactor;
- for (int j = firstCol; j < W; j += 2) {
- rawData[i][j] *= (*nonGreen)[i/2][j/2];
+ for (int j = firstCol; j < W - 2 * cb; j += 2) {
+ rawData[i + cb][j + cb] *= (*nonGreen)[i / 2][j / 2];
}
}
}
diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc
index 43985ea2a..b25eb7229 100644
--- a/rtengine/FTblockDN.cc
+++ b/rtengine/FTblockDN.cc
@@ -805,8 +805,8 @@ BENCHFUN
}
#endif
- float *LbloxArray[denoiseNestedLevels * numthreads];
- float *fLbloxArray[denoiseNestedLevels * numthreads];
+ float *LbloxArray[denoiseNestedLevels * numthreads] = {};
+ float *fLbloxArray[denoiseNestedLevels * numthreads] = {};
if (numtiles > 1 && denoiseLuminance) {
for (int i = 0; i < denoiseNestedLevels * numthreads; ++i) {
@@ -1742,9 +1742,11 @@ BENCHFUN
}
- if (denoiseLuminance) {
- for (int i = 0; i < denoiseNestedLevels * numthreads; ++i) {
+ for (int i = 0; i < denoiseNestedLevels * numthreads; ++i) {
+ if (LbloxArray[i]) {
fftwf_free(LbloxArray[i]);
+ }
+ if (fLbloxArray[i]) {
fftwf_free(fLbloxArray[i]);
}
}
diff --git a/rtengine/camconst.json b/rtengine/camconst.json
index fd7b4bf0f..fdaaeef92 100644
--- a/rtengine/camconst.json
+++ b/rtengine/camconst.json
@@ -1213,6 +1213,11 @@ Camera constants:
"ranges": { "white": 4050 } // nominal 4080-4093
},
+ { // Quality C
+ "make_model": "Canon PowerShot SX220 HS",
+ "raw_crop": [ 92, 16, 4072, 3042 ] // Cut 2pix at lower border because of too high values in blue channel
+ },
+
{ // Quality C
"make_model": [ "DJI FC2103" ],
"ranges": {
@@ -1300,6 +1305,11 @@ Camera constants:
"ranges": { "white": 16100 }
},
+ { // Quality C, only raw crop
+ "make_model": [ "FUJIFILM X-T3" ],
+ "raw_crop": [ 0, 0, 6254, 0]
+ },
+
{ // Quality B
"make_model": "FUJIFILM X30",
"dcraw_matrix": [ 12328,-5256,-1144,-4469,12927,1675,-87,1291,4351 ], // DNG_v8.7 D65
@@ -2298,18 +2308,6 @@ Camera constants:
"pdaf_offset" : 3
},
- { // Quality C, only pdaf data
- "make_model": "Sony ILCE-7M3",
- // A7III, from https://www.dpreview.com/forums/post/60843139
- // in the original post:
- // P 5 P 17 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11
- //
- // rotated to match the start of the frame
- // P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11 P 5 P 17 P 11 P 11 P 17 P 11 P 5
- "pdaf_pattern" : [ 0,12,24,36,54,66,72,84,96,114,120,132,150,156,174,180,192,204,216,234,240,252,264,276,282,300,306,324,336,342,360,372,384,402,414,420],
- "pdaf_offset" : 9
- },
-
{ // Quality A, correction for frame width
"make_model": "Sony ILCE-7R",
"dcraw_matrix": [ 4913,-541,-202,-6130,13513,2906,-1564,2151,7183 ],
@@ -2319,6 +2317,7 @@ Camera constants:
{ // Quality A
"make_model": "Sony ILCE-7M2",
+ "raw_crop": [ 0, 0, 6024, 4024 ],
"dcraw_matrix": [ 5271,-712,-347,-6153,13653,2763,-1601,2366,7242 ], // DNGv8.7.1
"ranges": { "black": 512, "white": 16300 }
},
@@ -2351,8 +2350,15 @@ Camera constants:
{ "iso": [ 64000, 80000, 102400 ], "levels": 16100 }, // g16340 , nc 16330, LongExp 16210
{ "iso": [ 128000, 160000, 204800 ], "levels": 16000 } // r16275, g16340, nc 16330, LongExp 16330-16370
]
- }
-
+ },
+ // A7III, from https://www.dpreview.com/forums/post/60843139
+ // in the original post:
+ // P 5 P 17 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11
+ //
+ // rotated to match the start of the frame
+ // P 11 P 11 P 11 P 17 P 11 P 5 P 11 P 11 P 17 P 5 P 11 P 17 P 5 P 17 P 5 P 11 P 11 P 11 P 17 P 5 P 11 P 11 P 11 P 5 P 17 P 5 P 17 P 11 P 5 P 17 P 11 P 11 P 17 P 11 P 5
+ "pdaf_pattern" : [ 0,12,24,36,54,66,72,84,96,114,120,132,150,156,174,180,192,204,216,234,240,252,264,276,282,300,306,324,336,342,360,372,384,402,414,420],
+ "pdaf_offset" : 9
},
{ // Quality C,
diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc
index bd9fa4b47..73f9c948f 100644
--- a/rtengine/dcraw.cc
+++ b/rtengine/dcraw.cc
@@ -6692,6 +6692,14 @@ void CLASS apply_tiff()
load_raw = &CLASS unpacked_load_raw;
load_flags = 4;
order = 0x4d4d;
+ } else if ((raw_width * raw_height * 2 * tiff_bps) / 16 == tiff_ifd[raw].bytes) {
+ // 12 bit uncompressed from Nikon Z7
+ load_raw = &CLASS packed_load_raw;
+ } else if ((raw_width * 2 * tiff_bps / 16 + 8) * raw_height == tiff_ifd[raw].bytes) {
+ // 14 bit uncompressed from Nikon Z7, still wrong
+ // each line has 8 padding byte. To inform 'packed_load_raw' about his padding, we have to set load_flags = padding << 9
+ load_flags = 8 << 9;
+ load_raw = &CLASS packed_load_raw;
} else
load_raw = &CLASS nikon_load_raw; break;
case 65535:
@@ -9074,6 +9082,9 @@ void CLASS identify()
parse_tiff (thumb_offset+12);
/*RT*/ exif_base = thumb_offset+12;
apply_tiff();
+ if (!strcmp(model, "X-T3")) {
+ height = raw_height - 2;
+ }
if (!load_raw) {
load_raw = &CLASS unpacked_load_raw;
tiff_bps = 14;
@@ -9866,7 +9877,8 @@ konica_400z:
width -= height > 3664 ? 8 : 32;
if (!strncmp(model,"DSC",3))
black = 200 << (tiff_bps - 12);
- } else if (!strcmp(make,"Sony") && raw_width == 6048) {
+ } else if (!strcmp(make,"Sony") && strcmp(model,"ILCE-7M2") && raw_width == 6048) {
+ // for Sony ILCE-7M2 the raw crop is defined in camconst.json
width -= 24;
if (strstr(model,"RX1") || strstr(model,"A99"))
width -= 6;
diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc
index b3f883803..24149ff59 100644
--- a/rtengine/dcrop.cc
+++ b/rtengine/dcrop.cc
@@ -1887,9 +1887,7 @@ void Crop::update(int todo)
if (params.wavelet.Tilesmethod == "big") {
realtile = 22;
- }
-
- if (params.wavelet.Tilesmethod == "lit") {
+ } else /*if (params.wavelet.Tilesmethod == "lit")*/ {
realtile = 12;
}
diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc
index 6aad21631..26616fadc 100644
--- a/rtengine/improccoordinator.cc
+++ b/rtengine/improccoordinator.cc
@@ -282,582 +282,577 @@ DetailedCrop* ImProcCoordinator::createCrop(::EditDataProvider *editDataProvider
// todo: bitmask containing desired actions, taken from changesSinceLast
-// cropCall: calling crop, used to prevent self-updates ...doesn't seem to be used
-void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
+void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
{
MyMutex::MyLock processingLock(mProcessing);
- int numofphases = 14;
+
+ constexpr int numofphases = 14;
int readyphase = 0;
- bwAutoR = bwAutoG = bwAutoB = -9000.f;
-
- if (todo == CROP && ipf.needsPCVignetting()) {
- todo |= TRANSFORM; // Change about Crop does affect TRANSFORM
- }
-
- bool highDetailNeeded = false;
-
- if (options.prevdemo == PD_Sidecar) {
- highDetailNeeded = true; //i#2664
- } else {
- highDetailNeeded = (todo & M_HIGHQUAL);
- }
+ bool highDetailNeeded = options.prevdemo == PD_Sidecar ? true : (todo & M_HIGHQUAL);
// Check if any detail crops need high detail. If not, take a fast path short cut
if (!highDetailNeeded) {
- for (size_t i = 0; i < crops.size(); i++)
+ for (size_t i = 0; i < crops.size(); i++) {
if (crops[i]->get_skip() == 1) { // skip=1 -> full resolution
highDetailNeeded = true;
break;
}
- }
-
- RAWParams rp = params.raw;
- ColorManagementParams cmp = params.icm;
- LCurveParams lcur = params.labCurve;
-
- if (!highDetailNeeded) {
- // if below 100% magnification, take a fast path
- if (rp.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::NONE) && rp.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::NONE)) {
- rp.bayersensor.method = RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::FAST);
- }
-
- //bayerrp.all_enhance = false;
-
- if (rp.xtranssensor.method != RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::NONE) && rp.xtranssensor.method != RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::NONE)) {
- rp.xtranssensor.method = RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FAST);
- }
-
- rp.bayersensor.ccSteps = 0;
- rp.xtranssensor.ccSteps = 0;
- //rp.deadPixelFilter = rp.hotPixelFilter = false;
- }
-
- progress("Applying white balance, color correction & sRGB conversion...", 100 * readyphase / numofphases);
-
- if (frameCountListener) {
- frameCountListener->FrameCountChanged(imgsrc->getFrameCount(), params.raw.bayersensor.imageNum);
- }
-
- // raw auto CA is bypassed if no high detail is needed, so we have to compute it when high detail is needed
- if ((todo & M_PREPROC) || (!highDetailPreprocessComputed && highDetailNeeded)) {
- imgsrc->setCurrentFrame(params.raw.bayersensor.imageNum);
-
- imgsrc->preprocess(rp, params.lensProf, params.coarse);
- imgsrc->getRAWHistogram(histRedRaw, histGreenRaw, histBlueRaw);
-
- highDetailPreprocessComputed = highDetailNeeded;
- }
-
- /*
- Demosaic is kicked off only when
- Detail considerations:
- accurate detail is not displayed yet needed based on preview specifics (driven via highDetailNeeded flag)
- OR
- HLR considerations:
- Color HLR alters rgb output of demosaic, so re-demosaic is needed when Color HLR is being turned off;
- if HLR is enabled and changing method *from* Color to any other method
- OR HLR gets disabled when Color method was selected
- */
- // If high detail (=100%) is newly selected, do a demosaic update, since the last was just with FAST
-
- if (imageTypeListener) {
- imageTypeListener->imageTypeChanged(imgsrc->isRAW(), imgsrc->getSensorType() == ST_BAYER, imgsrc->getSensorType() == ST_FUJI_XTRANS, imgsrc->isMono());
- }
-
- if ((todo & M_RAW)
- || (!highDetailRawComputed && highDetailNeeded)
- || (params.toneCurve.hrenabled && params.toneCurve.method != "Color" && imgsrc->isRGBSourceModified())
- || (!params.toneCurve.hrenabled && params.toneCurve.method == "Color" && imgsrc->isRGBSourceModified())) {
-
- if (settings->verbose) {
- if (imgsrc->getSensorType() == ST_BAYER) {
- printf("Demosaic Bayer image n.%d using method: %s\n", rp.bayersensor.imageNum + 1, rp.bayersensor.method.c_str());
- } else if (imgsrc->getSensorType() == ST_FUJI_XTRANS) {
- printf("Demosaic X-Trans image with using method: %s\n", rp.xtranssensor.method.c_str());
- }
- }
- if(imgsrc->getSensorType() == ST_BAYER) {
- if(params.raw.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT)) {
- imgsrc->setBorder(params.raw.bayersensor.border);
- } else {
- imgsrc->setBorder(std::max(params.raw.bayersensor.border, 2));
- }
- }
- bool autoContrast = false;
- double contrastThreshold = 0.f;
- imgsrc->demosaic(rp, autoContrast, contrastThreshold); //enabled demosaic
-
- // if a demosaic happened we should also call getimage later, so we need to set the M_INIT flag
- todo |= M_INIT;
-
- if (highDetailNeeded) {
- highDetailRawComputed = true;
- } else {
- highDetailRawComputed = false;
- }
-
- if (params.retinex.enabled) {
- lhist16RETI(32768);
- lhist16RETI.clear();
-
- imgsrc->retinexPrepareBuffers(params.icm, params.retinex, conversionBuffer, lhist16RETI);
}
}
- if ((todo & (M_RETINEX | M_INIT)) && params.retinex.enabled) {
- bool dehacontlutili = false;
- bool mapcontlutili = false;
- bool useHsl = false;
- LUTf cdcurve(65536, 0);
- LUTf mapcurve(65536, 0);
+ if (((todo & ALL) == ALL) || panningRelatedChange || (highDetailNeeded && options.prevdemo != PD_Sidecar)) {
+ bwAutoR = bwAutoG = bwAutoB = -9000.f;
- imgsrc->retinexPrepareCurves(params.retinex, cdcurve, mapcurve, dehatransmissionCurve, dehagaintransmissionCurve, dehacontlutili, mapcontlutili, useHsl, lhist16RETI, histLRETI);
- float minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax;
- imgsrc->retinex(params.icm, params.retinex, params.toneCurve, cdcurve, mapcurve, dehatransmissionCurve, dehagaintransmissionCurve, conversionBuffer, dehacontlutili, mapcontlutili, useHsl, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, histLRETI); //enabled Retinex
-
- if (dehaListener) {
- dehaListener->minmaxChanged(maxCD, minCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
- }
- }
-
- if (todo & (M_INIT | M_LINDENOISE | M_HDR)) {
- MyMutex::MyLock initLock(minit); // Also used in crop window
-
- imgsrc->HLRecovery_Global(params.toneCurve); // this handles Color HLRecovery
-
-
- if (settings->verbose) {
- printf("Applying white balance, color correction & sRBG conversion...\n");
+ if (todo == CROP && ipf.needsPCVignetting()) {
+ todo |= TRANSFORM; // Change about Crop does affect TRANSFORM
}
- currWB = ColorTemp(params.wb.temperature, params.wb.green, params.wb.equal, params.wb.method);
- if (!params.wb.enabled) {
- currWB = ColorTemp();
- } else if (params.wb.method == "Camera") {
- currWB = imgsrc->getWB();
- } else if (params.wb.method == "Auto") {
- if (lastAwbEqual != params.wb.equal || lastAwbTempBias != params.wb.tempBias) {
- double rm, gm, bm;
- imgsrc->getAutoWBMultipliers(rm, gm, bm);
- if (rm != -1.) {
- autoWB.update(rm, gm, bm, params.wb.equal, params.wb.tempBias);
- lastAwbEqual = params.wb.equal;
- lastAwbTempBias = params.wb.tempBias;
- } else {
- lastAwbEqual = -1.;
- lastAwbTempBias = 0.0;
- autoWB.useDefaults(params.wb.equal);
- }
+ RAWParams rp = params.raw;
+ ColorManagementParams cmp = params.icm;
+ LCurveParams lcur = params.labCurve;
- //double rr,gg,bb;
- //autoWB.getMultipliers(rr,gg,bb);
+ if (!highDetailNeeded) {
+ // if below 100% magnification, take a fast path
+ if (rp.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::NONE) && rp.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::NONE)) {
+ rp.bayersensor.method = RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::FAST);
}
- currWB = autoWB;
+ //bayerrp.all_enhance = false;
+
+ if (rp.xtranssensor.method != RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::NONE) && rp.xtranssensor.method != RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::NONE)) {
+ rp.xtranssensor.method = RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FAST);
+ }
+
+ rp.bayersensor.ccSteps = 0;
+ rp.xtranssensor.ccSteps = 0;
+ //rp.deadPixelFilter = rp.hotPixelFilter = false;
}
- if (params.wb.enabled) {
- params.wb.temperature = currWB.getTemp();
- params.wb.green = currWB.getGreen();
+ progress("Applying white balance, color correction & sRGB conversion...", 100 * readyphase / numofphases);
+
+ if (frameCountListener) {
+ frameCountListener->FrameCountChanged(imgsrc->getFrameCount(), params.raw.bayersensor.imageNum);
}
- if (params.wb.method == "Auto" && awbListener && params.wb.enabled) {
- awbListener->WBChanged(params.wb.temperature, params.wb.green);
+ // raw auto CA is bypassed if no high detail is needed, so we have to compute it when high detail is needed
+ if ((todo & M_PREPROC) || (!highDetailPreprocessComputed && highDetailNeeded)) {
+ imgsrc->setCurrentFrame(params.raw.bayersensor.imageNum);
+
+ imgsrc->preprocess(rp, params.lensProf, params.coarse);
+ imgsrc->getRAWHistogram(histRedRaw, histGreenRaw, histBlueRaw);
+
+ highDetailPreprocessComputed = highDetailNeeded;
}
/*
- GammaValues g_a;
- double pwr = 1.0 / params.icm.gampos;
- double ts = params.icm.slpos;
-
-
- int mode = 0;
- Color::calcGamma(pwr, ts, mode, g_a); // call to calcGamma with selected gamma and slope
- printf("ga[0]=%f ga[1]=%f ga[2]=%f ga[3]=%f ga[4]=%f\n", g_a[0],g_a[1],g_a[2],g_a[3],g_a[4]);
-
- Glib::ustring datal;
- datal = "lutsrgb.txt";
- ofstream fou(datal, ios::out | ios::trunc);
-
- for(int i=0; i < 212; i++) {
- //printf("igamma2=%i\n", (int) 65535.f*Color::igamma2(i/212.0));
- float gam = Color::igamma2(i/211.0);
- int lutga = nearbyint(65535.f* gam);
- // fou << 65535*(int)Color::igamma2(i/212.0) << endl;
- fou << i << " " << lutga << endl;
-
- }
- fou.close();
+ Demosaic is kicked off only when
+ Detail considerations:
+ accurate detail is not displayed yet needed based on preview specifics (driven via highDetailNeeded flag)
+ OR
+ HLR considerations:
+ Color HLR alters rgb output of demosaic, so re-demosaic is needed when Color HLR is being turned off;
+ if HLR is enabled and changing method *from* Color to any other method
+ OR HLR gets disabled when Color method was selected
*/
- int tr = getCoarseBitMask(params.coarse);
+ // If high detail (=100%) is newly selected, do a demosaic update, since the last was just with FAST
- imgsrc->getFullSize(fw, fh, tr);
+ if (imageTypeListener) {
+ imageTypeListener->imageTypeChanged(imgsrc->isRAW(), imgsrc->getSensorType() == ST_BAYER, imgsrc->getSensorType() == ST_FUJI_XTRANS, imgsrc->isMono());
+ }
- // Will (re)allocate the preview's buffers
- setScale(scale);
- PreviewProps pp(0, 0, fw, fh, scale);
- // Tells to the ImProcFunctions' tools what is the preview scale, which may lead to some simplifications
- ipf.setScale(scale);
+ if ((todo & M_RAW)
+ || (!highDetailRawComputed && highDetailNeeded)
+ || (params.toneCurve.hrenabled && params.toneCurve.method != "Color" && imgsrc->isRGBSourceModified())
+ || (!params.toneCurve.hrenabled && params.toneCurve.method == "Color" && imgsrc->isRGBSourceModified())) {
- imgsrc->getImage(currWB, tr, orig_prev, pp, params.toneCurve, params.raw);
- denoiseInfoStore.valid = false;
- //ColorTemp::CAT02 (orig_prev, ¶ms) ;
- // printf("orig_prevW=%d\n scale=%d",orig_prev->width, scale);
- /* Issue 2785, disabled some 1:1 tools
- if (todo & M_LINDENOISE) {
- DirPyrDenoiseParams denoiseParams = params.dirpyrDenoise;
- if (denoiseParams.enabled && (scale==1)) {
- Imagefloat *calclum = NULL ;
-
- denoiseParams.getCurves(noiseLCurve,noiseCCurve);
- int nbw=6;//nb tile W
- int nbh=4;//
-
- float ch_M[nbw*nbh];
- float max_r[nbw*nbh];
- float max_b[nbw*nbh];
-
- if(denoiseParams.Lmethod == "CUR") {
- if(noiseLCurve)
- denoiseParams.luma = 0.5f;
- else
- denoiseParams.luma = 0.0f;
- } else if(denoiseParams.Lmethod == "SLI")
- noiseLCurve.Reset();
-
-
- if(noiseLCurve || noiseCCurve){//only allocate memory if enabled and scale=1
- // we only need image reduced to 1/4 here
- calclum = new Imagefloat ((pW+1)/2, (pH+1)/2);//for luminance denoise curve
- for(int ii=0;iir(ii>>1,jj>>1) = orig_prev->r(ii,jj);
- calclum->g(ii>>1,jj>>1) = orig_prev->g(ii,jj);
- calclum->b(ii>>1,jj>>1) = orig_prev->b(ii,jj);
- }
- }
- imgsrc->convertColorSpace(calclum, params.icm, currWB);//calculate values after colorspace conversion
- }
-
- int kall=1;
- ipf.RGB_denoise(kall, orig_prev, orig_prev, calclum, ch_M, max_r, max_b, imgsrc->isRAW(), denoiseParams, imgsrc->getDirPyrDenoiseExpComp(), noiseLCurve, noiseCCurve, chaut, redaut, blueaut, maxredaut, maxblueaut, nresi, highresi);
- }
+ if (settings->verbose) {
+ if (imgsrc->getSensorType() == ST_BAYER) {
+ printf("Demosaic Bayer image n.%d using method: %s\n", rp.bayersensor.imageNum + 1, rp.bayersensor.method.c_str());
+ } else if (imgsrc->getSensorType() == ST_FUJI_XTRANS) {
+ printf("Demosaic X-Trans image with using method: %s\n", rp.xtranssensor.method.c_str());
}
- */
- imgsrc->convertColorSpace(orig_prev, params.icm, currWB);
-
- ipf.firstAnalysis(orig_prev, params, vhist16);
- }
-
- readyphase++;
-
- if ((todo & M_HDR) && params.fattal.enabled) {
- if (fattal_11_dcrop_cache) {
- delete fattal_11_dcrop_cache;
- fattal_11_dcrop_cache = nullptr;
- }
-
- ipf.ToneMapFattal02(orig_prev);
-
- if (oprevi != orig_prev) {
- delete oprevi;
- }
- }
-
- oprevi = orig_prev;
-
- progress("Rotate / Distortion...", 100 * readyphase / numofphases);
- // Remove transformation if unneeded
- bool needstransform = ipf.needsTransform();
-
- if ((needstransform || ((todo & (M_TRANSFORM | M_RGBCURVE)) && params.dirpyrequalizer.cbdlMethod == "bef" && params.dirpyrequalizer.enabled && !params.colorappearance.enabled))) {
- assert(oprevi);
- Imagefloat *op = oprevi;
- oprevi = new Imagefloat(pW, pH);
-
- if (needstransform)
- ipf.transform(op, oprevi, 0, 0, 0, 0, pW, pH, fw, fh,
- imgsrc->getMetaData(), imgsrc->getRotateDegree(), false);
- else {
- op->copyData(oprevi);
- }
- }
-
- if ((todo & (M_TRANSFORM | M_RGBCURVE)) && params.dirpyrequalizer.cbdlMethod == "bef" && params.dirpyrequalizer.enabled && !params.colorappearance.enabled) {
- const int W = oprevi->getWidth();
- const int H = oprevi->getHeight();
- LabImage labcbdl(W, H);
- ipf.rgb2lab(*oprevi, labcbdl, params.icm.workingProfile);
- ipf.dirpyrequalizer(&labcbdl, scale);
- ipf.lab2rgb(labcbdl, *oprevi, params.icm.workingProfile);
- }
-
- readyphase++;
- progress("Preparing shadow/highlight map...", 100 * readyphase / numofphases);
-
- readyphase++;
-
- if (todo & M_AUTOEXP) {
- if (params.toneCurve.autoexp) {
- LUTu aehist;
- int aehistcompr;
- imgsrc->getAutoExpHistogram(aehist, aehistcompr);
- ipf.getAutoExp(aehist, aehistcompr, params.toneCurve.clip, params.toneCurve.expcomp,
- params.toneCurve.brightness, params.toneCurve.contrast, params.toneCurve.black, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh);
-
- if (aeListener)
- aeListener->autoExpChanged(params.toneCurve.expcomp, params.toneCurve.brightness, params.toneCurve.contrast,
- params.toneCurve.black, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh, params.toneCurve.hrenabled);
- }
-
- if (params.toneCurve.histmatching) {
- if (!params.toneCurve.fromHistMatching) {
- imgsrc->getAutoMatchedToneCurve(params.icm, params.toneCurve.curve);
}
-
- if (params.toneCurve.autoexp) {
- params.toneCurve.expcomp = 0.0;
- }
-
- params.toneCurve.autoexp = false;
- params.toneCurve.curveMode = ToneCurveParams::TcMode::FILMLIKE;
- params.toneCurve.curve2 = { 0 };
- params.toneCurve.brightness = 0;
- params.toneCurve.contrast = 0;
- params.toneCurve.black = 0;
- params.toneCurve.fromHistMatching = true;
-
- if (aeListener) {
- aeListener->autoMatchedToneCurveChanged(params.toneCurve.curveMode, params.toneCurve.curve);
- }
- }
- }
-
- progress("Exposure curve & CIELAB conversion...", 100 * readyphase / numofphases);
-
- if (todo & (M_AUTOEXP | M_RGBCURVE)) {
- if (params.icm.workingTRC == "Custom") { //exec TRC IN free
- Glib::ustring profile;
- profile = params.icm.workingProfile;
-
- if (profile == "sRGB" || profile == "Adobe RGB" || profile == "ProPhoto" || profile == "WideGamut" || profile == "BruceRGB" || profile == "Beta RGB" || profile == "BestRGB" || profile == "Rec2020" || profile == "ACESp0" || profile == "ACESp1") {
- int cw = oprevi->getWidth();
- int ch = oprevi->getHeight();
- // put gamma TRC to 1
- Imagefloat* readyImg0 = NULL;
- readyImg0 = ipf.workingtrc(oprevi, cw, ch, -5, params.icm.workingProfile, 2.4, 12.92310);
- #pragma omp parallel for
-
- for (int row = 0; row < ch; row++) {
- for (int col = 0; col < cw; col++) {
- oprevi->r(row, col) = (float)readyImg0->r(row, col);
- oprevi->g(row, col) = (float)readyImg0->g(row, col);
- oprevi->b(row, col) = (float)readyImg0->b(row, col);
- }
+ if(imgsrc->getSensorType() == ST_BAYER) {
+ if(params.raw.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT)) {
+ imgsrc->setBorder(params.raw.bayersensor.border);
+ } else {
+ imgsrc->setBorder(std::max(params.raw.bayersensor.border, 2));
}
-
- delete readyImg0;
- //adjust TRC
- Imagefloat* readyImg = NULL;
- readyImg = ipf.workingtrc(oprevi, cw, ch, 5, params.icm.workingProfile, params.icm.workingTRCGamma, params.icm.workingTRCSlope);
- #pragma omp parallel for
-
- for (int row = 0; row < ch; row++) {
- for (int col = 0; col < cw; col++) {
- oprevi->r(row, col) = (float)readyImg->r(row, col);
- oprevi->g(row, col) = (float)readyImg->g(row, col);
- oprevi->b(row, col) = (float)readyImg->b(row, col);
- }
- }
-
- delete readyImg;
-
}
- }
- }
+ bool autoContrast = false;
+ double contrastThreshold = 0.f;
+ imgsrc->demosaic(rp, autoContrast, contrastThreshold); //enabled demosaic
+ // if a demosaic happened we should also call getimage later, so we need to set the M_INIT flag
+ todo |= M_INIT;
- if ((todo & M_RGBCURVE) || (todo & M_CROP)) {
-// if (hListener) oprevi->calcCroppedHistogram(params, scale, histCropped);
-
- //complexCurve also calculated pre-curves histogram depending on crop
- CurveFactory::complexCurve(params.toneCurve.expcomp, params.toneCurve.black / 65535.0,
- params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh,
- params.toneCurve.shcompr, params.toneCurve.brightness, params.toneCurve.contrast,
- params.toneCurve.curve, params.toneCurve.curve2,
- vhist16, hltonecurve, shtonecurve, tonecurve, histToneCurve, customToneCurve1, customToneCurve2, 1);
-
- CurveFactory::RGBCurve(params.rgbCurves.rcurve, rCurve, 1);
- CurveFactory::RGBCurve(params.rgbCurves.gcurve, gCurve, 1);
- CurveFactory::RGBCurve(params.rgbCurves.bcurve, bCurve, 1);
-
-
- opautili = false;
-
- if (params.colorToning.enabled) {
- TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix(params.icm.workingProfile);
- double wp[3][3] = {
- {wprof[0][0], wprof[0][1], wprof[0][2]},
- {wprof[1][0], wprof[1][1], wprof[1][2]},
- {wprof[2][0], wprof[2][1], wprof[2][2]}
- };
- params.colorToning.getCurves(ctColorCurve, ctOpacityCurve, wp, opautili);
- CurveFactory::curveToning(params.colorToning.clcurve, clToningcurve, scale == 1 ? 1 : 16);
- CurveFactory::curveToning(params.colorToning.cl2curve, cl2Toningcurve, scale == 1 ? 1 : 16);
- }
-
- if (params.blackwhite.enabled) {
- CurveFactory::curveBW(params.blackwhite.beforeCurve, params.blackwhite.afterCurve, vhist16bw, histToneCurveBW, beforeToneCurveBW, afterToneCurveBW, 1);
- }
-
- colourToningSatLimit = float (params.colorToning.satProtectionThreshold) / 100.f * 0.7f + 0.3f;
- colourToningSatLimitOpacity = 1.f - (float (params.colorToning.saturatedOpacity) / 100.f);
-
- int satTH = 80;
- int satPR = 30;
- int indi = 0;
-
- if (params.colorToning.enabled && params.colorToning.autosat && params.colorToning.method != "LabGrid") { //for colortoning evaluation of saturation settings
- float moyS = 0.f;
- float eqty = 0.f;
- ipf.moyeqt(oprevi, moyS, eqty); //return image : mean saturation and standard dev of saturation
- //printf("moy=%f ET=%f\n", moyS,eqty);
- float satp = ((moyS + 1.5f * eqty) - 0.3f) / 0.7f; //1.5 sigma ==> 93% pixels with high saturation -0.3 / 0.7 convert to Hombre scale
-
- if (satp >= 0.92f) {
- satp = 0.92f; //avoid values too high (out of gamut)
- }
-
- if (satp <= 0.15f) {
- satp = 0.15f; //avoid too low values
- }
-
- //satTH=(int) 100.f*satp;
- //satPR=(int) 100.f*(moyS-0.85f*eqty);//-0.85 sigma==>20% pixels with low saturation
- colourToningSatLimit = 100.f * satp;
- satTH = (int) 100.f * satp;
-
- colourToningSatLimitOpacity = 100.f * (moyS - 0.85f * eqty); //-0.85 sigma==>20% pixels with low saturation
- satPR = (int) 100.f * (moyS - 0.85f * eqty);
- }
-
- if (actListener) {
- //if(params.blackwhite.enabled) {actListener->autoColorTonChanged(0, satTH, satPR);}
- if (params.blackwhite.enabled && params.colorToning.autosat) {
- actListener->autoColorTonChanged(0, satTH, satPR); //hide sliders only if autosat
- indi = 0;
+ if (highDetailNeeded) {
+ highDetailRawComputed = true;
} else {
- if (params.colorToning.autosat) {
- if (params.colorToning.method == "Lab") {
- indi = 1;
- } else if (params.colorToning.method == "RGBCurves") {
- indi = 1;
- } else if (params.colorToning.method == "RGBSliders") {
- indi = 1;
- } else if (params.colorToning.method == "Splico") {
- indi = 2;
- } else if (params.colorToning.method == "Splitlr") {
- indi = 2;
+ highDetailRawComputed = false;
+ }
+
+ if (params.retinex.enabled) {
+ lhist16RETI(32768);
+ lhist16RETI.clear();
+
+ imgsrc->retinexPrepareBuffers(params.icm, params.retinex, conversionBuffer, lhist16RETI);
+ }
+ }
+
+ if ((todo & (M_RETINEX | M_INIT)) && params.retinex.enabled) {
+ bool dehacontlutili = false;
+ bool mapcontlutili = false;
+ bool useHsl = false;
+ LUTf cdcurve(65536, 0);
+ LUTf mapcurve(65536, 0);
+
+ imgsrc->retinexPrepareCurves(params.retinex, cdcurve, mapcurve, dehatransmissionCurve, dehagaintransmissionCurve, dehacontlutili, mapcontlutili, useHsl, lhist16RETI, histLRETI);
+ float minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax;
+ imgsrc->retinex(params.icm, params.retinex, params.toneCurve, cdcurve, mapcurve, dehatransmissionCurve, dehagaintransmissionCurve, conversionBuffer, dehacontlutili, mapcontlutili, useHsl, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, histLRETI); //enabled Retinex
+
+ if (dehaListener) {
+ dehaListener->minmaxChanged(maxCD, minCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
+ }
+ }
+
+ if (todo & (M_INIT | M_LINDENOISE | M_HDR)) {
+ MyMutex::MyLock initLock(minit); // Also used in crop window
+
+ imgsrc->HLRecovery_Global(params.toneCurve); // this handles Color HLRecovery
+
+
+ if (settings->verbose) {
+ printf("Applying white balance, color correction & sRBG conversion...\n");
+ }
+
+ currWB = ColorTemp(params.wb.temperature, params.wb.green, params.wb.equal, params.wb.method);
+
+ if (!params.wb.enabled) {
+ currWB = ColorTemp();
+ } else if (params.wb.method == "Camera") {
+ currWB = imgsrc->getWB();
+ } else if (params.wb.method == "Auto") {
+ if (lastAwbEqual != params.wb.equal || lastAwbTempBias != params.wb.tempBias) {
+ double rm, gm, bm;
+ imgsrc->getAutoWBMultipliers(rm, gm, bm);
+
+ if (rm != -1.) {
+ autoWB.update(rm, gm, bm, params.wb.equal, params.wb.tempBias);
+ lastAwbEqual = params.wb.equal;
+ lastAwbTempBias = params.wb.tempBias;
+ } else {
+ lastAwbEqual = -1.;
+ lastAwbTempBias = 0.0;
+ autoWB.useDefaults(params.wb.equal);
}
- //actListener->autoColorTonChanged(indi, satTH, satPR);
+ //double rr,gg,bb;
+ //autoWB.getMultipliers(rr,gg,bb);
+ }
+
+ currWB = autoWB;
+ }
+
+ if (params.wb.enabled) {
+ params.wb.temperature = currWB.getTemp();
+ params.wb.green = currWB.getGreen();
+ }
+
+ if (params.wb.method == "Auto" && awbListener && params.wb.enabled) {
+ awbListener->WBChanged(params.wb.temperature, params.wb.green);
+ }
+
+ /*
+ GammaValues g_a;
+ double pwr = 1.0 / params.icm.gampos;
+ double ts = params.icm.slpos;
+
+
+ int mode = 0;
+ Color::calcGamma(pwr, ts, mode, g_a); // call to calcGamma with selected gamma and slope
+ printf("ga[0]=%f ga[1]=%f ga[2]=%f ga[3]=%f ga[4]=%f\n", g_a[0],g_a[1],g_a[2],g_a[3],g_a[4]);
+
+ Glib::ustring datal;
+ datal = "lutsrgb.txt";
+ ofstream fou(datal, ios::out | ios::trunc);
+
+ for(int i=0; i < 212; i++) {
+ //printf("igamma2=%i\n", (int) 65535.f*Color::igamma2(i/212.0));
+ float gam = Color::igamma2(i/211.0);
+ int lutga = nearbyint(65535.f* gam);
+ // fou << 65535*(int)Color::igamma2(i/212.0) << endl;
+ fou << i << " " << lutga << endl;
+
+ }
+ fou.close();
+ */
+ int tr = getCoarseBitMask(params.coarse);
+
+ imgsrc->getFullSize(fw, fh, tr);
+
+ // Will (re)allocate the preview's buffers
+ setScale(scale);
+ PreviewProps pp(0, 0, fw, fh, scale);
+ // Tells to the ImProcFunctions' tools what is the preview scale, which may lead to some simplifications
+ ipf.setScale(scale);
+
+ imgsrc->getImage(currWB, tr, orig_prev, pp, params.toneCurve, params.raw);
+ denoiseInfoStore.valid = false;
+ //ColorTemp::CAT02 (orig_prev, ¶ms) ;
+ // printf("orig_prevW=%d\n scale=%d",orig_prev->width, scale);
+ /* Issue 2785, disabled some 1:1 tools
+ if (todo & M_LINDENOISE) {
+ DirPyrDenoiseParams denoiseParams = params.dirpyrDenoise;
+ if (denoiseParams.enabled && (scale==1)) {
+ Imagefloat *calclum = NULL ;
+
+ denoiseParams.getCurves(noiseLCurve,noiseCCurve);
+ int nbw=6;//nb tile W
+ int nbh=4;//
+
+ float ch_M[nbw*nbh];
+ float max_r[nbw*nbh];
+ float max_b[nbw*nbh];
+
+ if(denoiseParams.Lmethod == "CUR") {
+ if(noiseLCurve)
+ denoiseParams.luma = 0.5f;
+ else
+ denoiseParams.luma = 0.0f;
+ } else if(denoiseParams.Lmethod == "SLI")
+ noiseLCurve.Reset();
+
+
+ if(noiseLCurve || noiseCCurve){//only allocate memory if enabled and scale=1
+ // we only need image reduced to 1/4 here
+ calclum = new Imagefloat ((pW+1)/2, (pH+1)/2);//for luminance denoise curve
+ for(int ii=0;iir(ii>>1,jj>>1) = orig_prev->r(ii,jj);
+ calclum->g(ii>>1,jj>>1) = orig_prev->g(ii,jj);
+ calclum->b(ii>>1,jj>>1) = orig_prev->b(ii,jj);
+ }
+ }
+ imgsrc->convertColorSpace(calclum, params.icm, currWB);//calculate values after colorspace conversion
+ }
+
+ int kall=1;
+ ipf.RGB_denoise(kall, orig_prev, orig_prev, calclum, ch_M, max_r, max_b, imgsrc->isRAW(), denoiseParams, imgsrc->getDirPyrDenoiseExpComp(), noiseLCurve, noiseCCurve, chaut, redaut, blueaut, maxredaut, maxblueaut, nresi, highresi);
+ }
+ }
+ */
+ imgsrc->convertColorSpace(orig_prev, params.icm, currWB);
+
+ ipf.firstAnalysis(orig_prev, params, vhist16);
+ }
+
+ readyphase++;
+
+ if ((todo & M_HDR) && params.fattal.enabled) {
+ if (fattal_11_dcrop_cache) {
+ delete fattal_11_dcrop_cache;
+ fattal_11_dcrop_cache = nullptr;
+ }
+
+ ipf.ToneMapFattal02(orig_prev);
+
+ if (oprevi != orig_prev) {
+ delete oprevi;
+ }
+ }
+
+ oprevi = orig_prev;
+
+ progress("Rotate / Distortion...", 100 * readyphase / numofphases);
+ // Remove transformation if unneeded
+ bool needstransform = ipf.needsTransform();
+
+ if ((needstransform || ((todo & (M_TRANSFORM | M_RGBCURVE)) && params.dirpyrequalizer.cbdlMethod == "bef" && params.dirpyrequalizer.enabled && !params.colorappearance.enabled))) {
+ assert(oprevi);
+ Imagefloat *op = oprevi;
+ oprevi = new Imagefloat(pW, pH);
+
+ if (needstransform)
+ ipf.transform(op, oprevi, 0, 0, 0, 0, pW, pH, fw, fh,
+ imgsrc->getMetaData(), imgsrc->getRotateDegree(), false);
+ else {
+ op->copyData(oprevi);
+ }
+ }
+
+ if ((todo & (M_TRANSFORM | M_RGBCURVE)) && params.dirpyrequalizer.cbdlMethod == "bef" && params.dirpyrequalizer.enabled && !params.colorappearance.enabled) {
+ const int W = oprevi->getWidth();
+ const int H = oprevi->getHeight();
+ LabImage labcbdl(W, H);
+ ipf.rgb2lab(*oprevi, labcbdl, params.icm.workingProfile);
+ ipf.dirpyrequalizer(&labcbdl, scale);
+ ipf.lab2rgb(labcbdl, *oprevi, params.icm.workingProfile);
+ }
+
+ readyphase++;
+ progress("Preparing shadow/highlight map...", 100 * readyphase / numofphases);
+
+ readyphase++;
+
+ if (todo & M_AUTOEXP) {
+ if (params.toneCurve.autoexp) {
+ LUTu aehist;
+ int aehistcompr;
+ imgsrc->getAutoExpHistogram(aehist, aehistcompr);
+ ipf.getAutoExp(aehist, aehistcompr, params.toneCurve.clip, params.toneCurve.expcomp,
+ params.toneCurve.brightness, params.toneCurve.contrast, params.toneCurve.black, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh);
+
+ if (aeListener)
+ aeListener->autoExpChanged(params.toneCurve.expcomp, params.toneCurve.brightness, params.toneCurve.contrast,
+ params.toneCurve.black, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh, params.toneCurve.hrenabled);
+ }
+
+ if (params.toneCurve.histmatching) {
+ if (!params.toneCurve.fromHistMatching) {
+ imgsrc->getAutoMatchedToneCurve(params.icm, params.toneCurve.curve);
+ }
+
+ if (params.toneCurve.autoexp) {
+ params.toneCurve.expcomp = 0.0;
+ }
+
+ params.toneCurve.autoexp = false;
+ params.toneCurve.curveMode = ToneCurveParams::TcMode::FILMLIKE;
+ params.toneCurve.curve2 = { 0 };
+ params.toneCurve.brightness = 0;
+ params.toneCurve.contrast = 0;
+ params.toneCurve.black = 0;
+ params.toneCurve.fromHistMatching = true;
+
+ if (aeListener) {
+ aeListener->autoMatchedToneCurveChanged(params.toneCurve.curveMode, params.toneCurve.curve);
}
}
}
- // if it's just crop we just need the histogram, no image updates
- if (todo & M_RGBCURVE) {
- //initialize rrm bbm ggm different from zero to avoid black screen in some cases
- double rrm = 33.;
- double ggm = 33.;
- double bbm = 33.;
+ progress("Exposure curve & CIELAB conversion...", 100 * readyphase / numofphases);
- DCPProfile::ApplyState as;
- DCPProfile *dcpProf = imgsrc->getDCP(params.icm, as);
+ if (todo & (M_AUTOEXP | M_RGBCURVE)) {
+ if (params.icm.workingTRC == "Custom") { //exec TRC IN free
+ Glib::ustring profile;
+ profile = params.icm.workingProfile;
- ipf.rgbProc (oprevi, oprevl, nullptr, hltonecurve, shtonecurve, tonecurve, params.toneCurve.saturation,
- rCurve, gCurve, bCurve, colourToningSatLimit, colourToningSatLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, beforeToneCurveBW, afterToneCurveBW, rrm, ggm, bbm, bwAutoR, bwAutoG, bwAutoB, params.toneCurve.expcomp, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh, dcpProf, as, histToneCurve);
+ if (profile == "sRGB" || profile == "Adobe RGB" || profile == "ProPhoto" || profile == "WideGamut" || profile == "BruceRGB" || profile == "Beta RGB" || profile == "BestRGB" || profile == "Rec2020" || profile == "ACESp0" || profile == "ACESp1") {
+ int cw = oprevi->getWidth();
+ int ch = oprevi->getHeight();
+ // put gamma TRC to 1
+ Imagefloat* readyImg0 = NULL;
+ readyImg0 = ipf.workingtrc(oprevi, cw, ch, -5, params.icm.workingProfile, 2.4, 12.92310);
+ #pragma omp parallel for
+
+ for (int row = 0; row < ch; row++) {
+ for (int col = 0; col < cw; col++) {
+ oprevi->r(row, col) = (float)readyImg0->r(row, col);
+ oprevi->g(row, col) = (float)readyImg0->g(row, col);
+ oprevi->b(row, col) = (float)readyImg0->b(row, col);
+ }
+ }
+
+ delete readyImg0;
+ //adjust TRC
+ Imagefloat* readyImg = NULL;
+ readyImg = ipf.workingtrc(oprevi, cw, ch, 5, params.icm.workingProfile, params.icm.workingTRCGamma, params.icm.workingTRCSlope);
+ #pragma omp parallel for
+
+ for (int row = 0; row < ch; row++) {
+ for (int col = 0; col < cw; col++) {
+ oprevi->r(row, col) = (float)readyImg->r(row, col);
+ oprevi->g(row, col) = (float)readyImg->g(row, col);
+ oprevi->b(row, col) = (float)readyImg->b(row, col);
+ }
+ }
+
+ delete readyImg;
- if (params.blackwhite.enabled && params.blackwhite.autoc && abwListener) {
- if (settings->verbose) {
- printf("ImProcCoordinator / Auto B&W coefs: R=%.2f G=%.2f B=%.2f\n", bwAutoR, bwAutoG, bwAutoB);
}
-
- abwListener->BWChanged((float) rrm, (float) ggm, (float) bbm);
}
-
- if (params.colorToning.autosat && actListener) {
- if (settings->verbose) {
- printf("ImProcCoordinator / Auto CT: indi=%d satH=%d satPR=%d\n", indi, (int)colourToningSatLimit, (int) colourToningSatLimitOpacity);
- }
-
- actListener->autoColorTonChanged(indi, (int) colourToningSatLimit, (int)colourToningSatLimitOpacity); //change sliders autosat
- }
-
- // correct GUI black and white with value
}
+
+ if ((todo & M_RGBCURVE) || (todo & M_CROP)) {
+ // if (hListener) oprevi->calcCroppedHistogram(params, scale, histCropped);
+
+ //complexCurve also calculated pre-curves histogram depending on crop
+ CurveFactory::complexCurve(params.toneCurve.expcomp, params.toneCurve.black / 65535.0,
+ params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh,
+ params.toneCurve.shcompr, params.toneCurve.brightness, params.toneCurve.contrast,
+ params.toneCurve.curve, params.toneCurve.curve2,
+ vhist16, hltonecurve, shtonecurve, tonecurve, histToneCurve, customToneCurve1, customToneCurve2, 1);
+
+ CurveFactory::RGBCurve(params.rgbCurves.rcurve, rCurve, 1);
+ CurveFactory::RGBCurve(params.rgbCurves.gcurve, gCurve, 1);
+ CurveFactory::RGBCurve(params.rgbCurves.bcurve, bCurve, 1);
+
+
+ opautili = false;
+
+ if (params.colorToning.enabled) {
+ TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix(params.icm.workingProfile);
+ double wp[3][3] = {
+ {wprof[0][0], wprof[0][1], wprof[0][2]},
+ {wprof[1][0], wprof[1][1], wprof[1][2]},
+ {wprof[2][0], wprof[2][1], wprof[2][2]}
+ };
+ params.colorToning.getCurves(ctColorCurve, ctOpacityCurve, wp, opautili);
+ CurveFactory::curveToning(params.colorToning.clcurve, clToningcurve, scale == 1 ? 1 : 16);
+ CurveFactory::curveToning(params.colorToning.cl2curve, cl2Toningcurve, scale == 1 ? 1 : 16);
+ }
+
+ if (params.blackwhite.enabled) {
+ CurveFactory::curveBW(params.blackwhite.beforeCurve, params.blackwhite.afterCurve, vhist16bw, histToneCurveBW, beforeToneCurveBW, afterToneCurveBW, 1);
+ }
+
+ colourToningSatLimit = float (params.colorToning.satProtectionThreshold) / 100.f * 0.7f + 0.3f;
+ colourToningSatLimitOpacity = 1.f - (float (params.colorToning.saturatedOpacity) / 100.f);
+
+ int satTH = 80;
+ int satPR = 30;
+ int indi = 0;
+
+ if (params.colorToning.enabled && params.colorToning.autosat && params.colorToning.method != "LabGrid") { //for colortoning evaluation of saturation settings
+ float moyS = 0.f;
+ float eqty = 0.f;
+ ipf.moyeqt(oprevi, moyS, eqty); //return image : mean saturation and standard dev of saturation
+ //printf("moy=%f ET=%f\n", moyS,eqty);
+ float satp = ((moyS + 1.5f * eqty) - 0.3f) / 0.7f; //1.5 sigma ==> 93% pixels with high saturation -0.3 / 0.7 convert to Hombre scale
+
+ if (satp >= 0.92f) {
+ satp = 0.92f; //avoid values too high (out of gamut)
+ }
+
+ if (satp <= 0.15f) {
+ satp = 0.15f; //avoid too low values
+ }
+
+ //satTH=(int) 100.f*satp;
+ //satPR=(int) 100.f*(moyS-0.85f*eqty);//-0.85 sigma==>20% pixels with low saturation
+ colourToningSatLimit = 100.f * satp;
+ satTH = (int) 100.f * satp;
+
+ colourToningSatLimitOpacity = 100.f * (moyS - 0.85f * eqty); //-0.85 sigma==>20% pixels with low saturation
+ satPR = (int) 100.f * (moyS - 0.85f * eqty);
+ }
+
+ if (actListener && params.colorToning.enabled) {
+ if (params.blackwhite.enabled && params.colorToning.autosat) {
+ actListener->autoColorTonChanged(0, satTH, satPR); //hide sliders only if autosat
+ indi = 0;
+ } else {
+ if (params.colorToning.autosat) {
+ if (params.colorToning.method == "Lab") {
+ indi = 1;
+ } else if (params.colorToning.method == "RGBCurves") {
+ indi = 1;
+ } else if (params.colorToning.method == "RGBSliders") {
+ indi = 1;
+ } else if (params.colorToning.method == "Splico") {
+ indi = 2;
+ } else if (params.colorToning.method == "Splitlr") {
+ indi = 2;
+ }
+ }
+ }
+ }
+
+ // if it's just crop we just need the histogram, no image updates
+ if (todo & M_RGBCURVE) {
+ //initialize rrm bbm ggm different from zero to avoid black screen in some cases
+ double rrm = 33.;
+ double ggm = 33.;
+ double bbm = 33.;
+
+ DCPProfile::ApplyState as;
+ DCPProfile *dcpProf = imgsrc->getDCP(params.icm, as);
+
+ ipf.rgbProc (oprevi, oprevl, nullptr, hltonecurve, shtonecurve, tonecurve, params.toneCurve.saturation,
+ rCurve, gCurve, bCurve, colourToningSatLimit, colourToningSatLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, beforeToneCurveBW, afterToneCurveBW, rrm, ggm, bbm, bwAutoR, bwAutoG, bwAutoB, params.toneCurve.expcomp, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh, dcpProf, as, histToneCurve);
+
+ if (params.blackwhite.enabled && params.blackwhite.autoc && abwListener) {
+ if (settings->verbose) {
+ printf("ImProcCoordinator / Auto B&W coefs: R=%.2f G=%.2f B=%.2f\n", bwAutoR, bwAutoG, bwAutoB);
+ }
+
+ abwListener->BWChanged((float) rrm, (float) ggm, (float) bbm);
+ }
+
+ if (params.colorToning.enabled && params.colorToning.autosat && actListener) {
+ if (settings->verbose) {
+ printf("ImProcCoordinator / Auto CT: indi=%d satH=%d satPR=%d\n", indi, (int)colourToningSatLimit, (int) colourToningSatLimitOpacity);
+ }
+
+ actListener->autoColorTonChanged(indi, (int) colourToningSatLimit, (int)colourToningSatLimitOpacity); //change sliders autosat
+ }
+
+ // correct GUI black and white with value
+ }
+
// ipf.Lab_Tile(oprevl, oprevl, scale);
- // compute L channel histogram
- int x1, y1, x2, y2;
- params.crop.mapToResized(pW, pH, scale, x1, x2, y1, y2);
- }
+ // compute L channel histogram
+ int x1, y1, x2, y2;
+ params.crop.mapToResized(pW, pH, scale, x1, x2, y1, y2);
+ }
- readyphase++;
+ readyphase++;
lhist16(32768);
- if (todo & (M_LUMACURVE | M_CROP)) {
- LUTu lhist16(32768);
- lhist16.clear();
+ if (todo & (M_LUMACURVE | M_CROP)) {
+ LUTu lhist16(32768);
+ lhist16.clear();
#ifdef _OPENMP
- const int numThreads = min(max(pW * pH / (int)lhist16.getSize(), 1), omp_get_max_threads());
- #pragma omp parallel num_threads(numThreads) if(numThreads>1)
+ const int numThreads = min(max(pW * pH / (int)lhist16.getSize(), 1), omp_get_max_threads());
+ #pragma omp parallel num_threads(numThreads) if(numThreads>1)
#endif
- {
- LUTu lhist16thr(lhist16.getSize());
- lhist16thr.clear();
+ {
+ LUTu lhist16thr(lhist16.getSize());
+ lhist16thr.clear();
#ifdef _OPENMP
- #pragma omp for nowait
+ #pragma omp for nowait
#endif
- for (int x = 0; x < pH; x++)
- for (int y = 0; y < pW; y++) {
- int pos = (int)(oprevl->L[x][y]);
- lhist16thr[pos]++;
- }
+ for (int x = 0; x < pH; x++)
+ for (int y = 0; y < pW; y++) {
+ int pos = (int)(oprevl->L[x][y]);
+ lhist16thr[pos]++;
+ }
#ifdef _OPENMP
- #pragma omp critical
+ #pragma omp critical
#endif
- lhist16 += lhist16thr;
+ lhist16 += lhist16thr;
+ }
+#ifdef _OPENMP
+ static_cast(numThreads); // to silence cppcheck warning
+#endif
+ CurveFactory::complexLCurve(params.labCurve.brightness, params.labCurve.contrast, params.labCurve.lcurve, lhist16, lumacurve, histLCurve, scale == 1 ? 1 : 16, utili);
}
-#ifdef _OPENMP
- static_cast(numThreads); // to silence cppcheck warning
-#endif
- CurveFactory::complexLCurve(params.labCurve.brightness, params.labCurve.contrast, params.labCurve.lcurve, lhist16, lumacurve, histLCurve, scale == 1 ? 1 : 16, utili);
- }
- if (todo & M_LUMACURVE) {
+ if (todo & M_LUMACURVE) {
- CurveFactory::curveCL(clcutili, params.labCurve.clcurve, clcurve, scale == 1 ? 1 : 16);
+ CurveFactory::curveCL(clcutili, params.labCurve.clcurve, clcurve, scale == 1 ? 1 : 16);
- CurveFactory::complexsgnCurve(autili, butili, ccutili, cclutili, params.labCurve.acurve, params.labCurve.bcurve, params.labCurve.cccurve,
- params.labCurve.lccurve, chroma_acurve, chroma_bcurve, satcurve, lhskcurve, scale == 1 ? 1 : 16);
- }
+ CurveFactory::complexsgnCurve(autili, butili, ccutili, cclutili, params.labCurve.acurve, params.labCurve.bcurve, params.labCurve.cccurve,
+ params.labCurve.lccurve, chroma_acurve, chroma_bcurve, satcurve, lhskcurve, scale == 1 ? 1 : 16);
+ }
//scale = 1;
- if (todo & (M_LUMINANCE + M_COLOR)) {
- nprevl->CopyFrom(oprevl);
+ if (todo & (M_LUMINANCE + M_COLOR)) {
+ nprevl->CopyFrom(oprevl);
reserv->CopyFrom(oprevl);
int maxspot = settings->nspot + 1;
- progress("Applying Color Boost...", 100 * readyphase / numofphases);
-
+ progress("Applying Color Boost...", 100 * readyphase / numofphases);
+ // ipf.MSR(nprevl, nprevl->W, nprevl->H, 1);
if (params.locallab.enabled) {
/*
@@ -3740,244 +3735,247 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
delete [] exstr;
}
-
+
//*************************************************************
// end locallab
//*************************************************************
- histCCurve.clear();
- histLCurve.clear();
- ipf.chromiLuminanceCurve(nullptr, pW, nprevl, nprevl, chroma_acurve, chroma_bcurve, satcurve, lhskcurve, clcurve, lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, histCCurve, histLCurve);
- ipf.vibrance(nprevl);
+ histCCurve.clear();
+ histLCurve.clear();
+ ipf.chromiLuminanceCurve(nullptr, pW, nprevl, nprevl, chroma_acurve, chroma_bcurve, satcurve, lhskcurve, clcurve, lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, histCCurve, histLCurve);
+ ipf.vibrance(nprevl);
- if ((params.colorappearance.enabled && !params.colorappearance.tonecie) || (!params.colorappearance.enabled)) {
- ipf.EPDToneMap(nprevl, 5, scale);
- }
+ if ((params.colorappearance.enabled && !params.colorappearance.tonecie) || (!params.colorappearance.enabled)) {
+ ipf.EPDToneMap(nprevl, 5, scale);
+ }
- // for all treatments Defringe, Sharpening, Contrast detail , Microcontrast they are activated if "CIECAM" function are disabled
- readyphase++;
+ // for all treatments Defringe, Sharpening, Contrast detail , Microcontrast they are activated if "CIECAM" function are disabled
+ readyphase++;
- /* Issue 2785, disabled some 1:1 tools
- if (scale==1) {
- if((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)){
- progress ("Denoising luminance impulse...",100*readyphase/numofphases);
- ipf.impulsedenoise (nprevl);
- readyphase++;
- }
- if((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)){
- progress ("Defringing...",100*readyphase/numofphases);
- ipf.defringe (nprevl);
- readyphase++;
- }
- if (params.sharpenEdge.enabled) {
- progress ("Edge sharpening...",100*readyphase/numofphases);
- ipf.MLsharpen (nprevl);
- readyphase++;
- }
- if (params.sharpenMicro.enabled) {
- if(( params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)){
- progress ("Microcontrast...",100*readyphase/numofphases);
- ipf.MLmicrocontrast (nprevl);
+ /* Issue 2785, disabled some 1:1 tools
+ if (scale==1) {
+ if((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)){
+ progress ("Denoising luminance impulse...",100*readyphase/numofphases);
+ ipf.impulsedenoise (nprevl);
+ readyphase++;
+ }
+ if((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)){
+ progress ("Defringing...",100*readyphase/numofphases);
+ ipf.defringe (nprevl);
+ readyphase++;
+ }
+ if (params.sharpenEdge.enabled) {
+ progress ("Edge sharpening...",100*readyphase/numofphases);
+ ipf.MLsharpen (nprevl);
+ readyphase++;
+ }
+ if (params.sharpenMicro.enabled) {
+ if(( params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)){
+ progress ("Microcontrast...",100*readyphase/numofphases);
+ ipf.MLmicrocontrast (nprevl);
+ readyphase++;
+ }
+ }
+ if(((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled)) && params.sharpening.enabled) {
+ progress ("Sharpening...",100*readyphase/numofphases);
+
+ float **buffer = new float*[pH];
+ for (int i=0; iautocielab) || (!params.colorappearance.enabled)) && params.sharpening.enabled) {
- progress ("Sharpening...",100*readyphase/numofphases);
+ */
+ if (params.dirpyrequalizer.cbdlMethod == "aft") {
+ if (((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled))) {
+ progress("Pyramid wavelet...", 100 * readyphase / numofphases);
+ ipf.dirpyrequalizer(nprevl, scale);
+ //ipf.Lanczoslab (ip_wavelet(LabImage * lab, LabImage * dst, const procparams::EqualizerParams & eqparams), nprevl, 1.f/scale);
+ readyphase++;
+ }
+ }
- float **buffer = new float*[pH];
- for (int i=0; iL[x][y]));
+ int posc = CLIP((int)sqrt(nprevl->a[x][y] * nprevl->a[x][y] + nprevl->b[x][y] * nprevl->b[x][y]));
+ lhist16CAM[pos]++;
+ lhist16CCAM[posc]++;
+ }
+ }
+
+ CurveFactory::curveLightBrightColor(params.colorappearance.curve, params.colorappearance.curve2, params.colorappearance.curve3,
+ lhist16CAM, histLCAM, lhist16CCAM, histCCAM,
+ customColCurve1, customColCurve2, customColCurve3, 1);
+
+ const FramesMetaData* metaData = imgsrc->getMetaData();
+ int imgNum = 0;
+
+ if (imgsrc->isRAW()) {
+ if (imgsrc->getSensorType() == ST_BAYER) {
+ imgNum = rtengine::LIM(params.raw.bayersensor.imageNum, 0, metaData->getFrameCount() - 1);
+ } else if (imgsrc->getSensorType() == ST_FUJI_XTRANS) {
+ //imgNum = rtengine::LIM(params.raw.xtranssensor.imageNum, 0, metaData->getFrameCount() - 1);
}
}
- */
- if (params.dirpyrequalizer.cbdlMethod == "aft") {
- if (((params.colorappearance.enabled && !settings->autocielab) || (!params.colorappearance.enabled))) {
- progress("Pyramid wavelet...", 100 * readyphase / numofphases);
- ipf.dirpyrequalizer(nprevl, scale);
- //ipf.Lanczoslab (ip_wavelet(LabImage * lab, LabImage * dst, const procparams::EqualizerParams & eqparams), nprevl, 1.f/scale);
+
+ float fnum = metaData->getFNumber(imgNum); // F number
+ float fiso = metaData->getISOSpeed(imgNum) ; // ISO
+ float fspeed = metaData->getShutterSpeed(imgNum) ; // Speed
+ double fcomp = metaData->getExpComp(imgNum); // Compensation +/-
+ double adap;
+
+ if (fnum < 0.3f || fiso < 5.f || fspeed < 0.00001f) { //if no exif data or wrong
+ adap = 2000.;
+ } else {
+ double E_V = fcomp + log2(double ((fnum * fnum) / fspeed / (fiso / 100.f)));
+ E_V += params.toneCurve.expcomp;// exposure compensation in tonecurve ==> direct EV
+ E_V += log2(params.raw.expos); // exposure raw white point ; log2 ==> linear to EV
+ adap = powf(2.f, E_V - 3.f); // cd / m2
+ // end calculation adaptation scene luminosity
+ }
+
+ float d, dj, yb;
+ bool execsharp = false;
+
+ if (!ncie) {
+ ncie = new CieImage(pW, pH);
+ }
+
+ if (!CAMBrightCurveJ && (params.colorappearance.algo == "JC" || params.colorappearance.algo == "JS" || params.colorappearance.algo == "ALL")) {
+ CAMBrightCurveJ(32768, 0);
+ }
+
+ if (!CAMBrightCurveQ && (params.colorappearance.algo == "QM" || params.colorappearance.algo == "ALL")) {
+ CAMBrightCurveQ(32768, 0);
+ }
+
+ // Issue 2785, only float version of ciecam02 for navigator and pan background
+ CAMMean = NAN;
+ CAMBrightCurveJ.dirty = true;
+ CAMBrightCurveQ.dirty = true;
+
+ ipf.ciecam_02float(ncie, float (adap), pW, 2, nprevl, ¶ms, customColCurve1, customColCurve2, customColCurve3, histLCAM, histCCAM, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 5, scale, execsharp, d, dj, yb, 1);
+
+ if ((params.colorappearance.autodegree || params.colorappearance.autodegreeout) && acListener && params.colorappearance.enabled) {
+ acListener->autoCamChanged(100.* (double)d, 100.* (double)dj);
+ }
+
+ if (params.colorappearance.autoadapscen && acListener && params.colorappearance.enabled) {
+ acListener->adapCamChanged(adap); //real value of adapt scene
+ }
+
+ if (params.colorappearance.autoybscen && acListener && params.colorappearance.enabled) {
+ acListener->ybCamChanged((int) yb); //real value Yb scene
+ }
+
readyphase++;
- }
- }
+ } else {
+ // CIECAM is disabled, we free up its image buffer to save some space
+ if (ncie) {
+ delete ncie;
+ }
+ ncie = nullptr;
- wavcontlutili = false;
- //CurveFactory::curveWavContL ( wavcontlutili,params.wavelet.lcurve, wavclCurve, LUTu & histogramwavcl, LUTu & outBeforeWavCLurveHistogram,int skip);
- CurveFactory::curveWavContL(wavcontlutili, params.wavelet.wavclCurve, wavclCurve, scale == 1 ? 1 : 16);
+ if (CAMBrightCurveJ) {
+ CAMBrightCurveJ.reset();
+ }
-
- if ((params.wavelet.enabled)) {
- WaveletParams WaveParams = params.wavelet;
- // WaveParams.getCurves(wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY);
- WaveParams.getCurves(wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL);
-
- int kall = 0;
- progress("Wavelet...", 100 * readyphase / numofphases);
- // ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, scale);
- ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, waOpacityCurveRG, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale);
-
- }
-
-
- if (params.colorappearance.enabled) {
- //L histo and Chroma histo for ciecam
- // histogram well be for Lab (Lch) values, because very difficult to do with J,Q, M, s, C
- int x1, y1, x2, y2;
- params.crop.mapToResized(pW, pH, scale, x1, x2, y1, y2);
- lhist16CAM.clear();
- lhist16CCAM.clear();
-
- if (!params.colorappearance.datacie) {
- for (int x = 0; x < pH; x++)
- for (int y = 0; y < pW; y++) {
- int pos = CLIP((int)(nprevl->L[x][y]));
- int posc = CLIP((int)sqrt(nprevl->a[x][y] * nprevl->a[x][y] + nprevl->b[x][y] * nprevl->b[x][y]));
- lhist16CAM[pos]++;
- lhist16CCAM[posc]++;
- }
- }
-
- CurveFactory::curveLightBrightColor(params.colorappearance.curve, params.colorappearance.curve2, params.colorappearance.curve3,
- lhist16CAM, histLCAM, lhist16CCAM, histCCAM,
- customColCurve1, customColCurve2, customColCurve3, 1);
-
- const FramesMetaData* metaData = imgsrc->getMetaData();
- int imgNum = 0;
-
- if (imgsrc->isRAW()) {
- if (imgsrc->getSensorType() == ST_BAYER) {
- imgNum = rtengine::LIM (params.raw.bayersensor.imageNum, 0, metaData->getFrameCount() - 1);
- } else if (imgsrc->getSensorType() == ST_FUJI_XTRANS) {
- //imgNum = rtengine::LIM(params.raw.xtranssensor.imageNum, 0, metaData->getFrameCount() - 1);
+ if (CAMBrightCurveQ) {
+ CAMBrightCurveQ.reset();
}
}
-
- float fnum = metaData->getFNumber(imgNum); // F number
- float fiso = metaData->getISOSpeed(imgNum) ; // ISO
- float fspeed = metaData->getShutterSpeed(imgNum) ; // Speed
- double fcomp = metaData->getExpComp(imgNum); // Compensation +/-
- double adap;
-
- if (fnum < 0.3f || fiso < 5.f || fspeed < 0.00001f) { //if no exif data or wrong
- adap = 2000.;
- } else {
- double E_V = fcomp + log2(double ((fnum * fnum) / fspeed / (fiso / 100.f)));
- E_V += params.toneCurve.expcomp;// exposure compensation in tonecurve ==> direct EV
- E_V += log2(params.raw.expos); // exposure raw white point ; log2 ==> linear to EV
- adap = powf(2.f, E_V - 3.f); // cd / m2
- // end calculation adaptation scene luminosity
- }
-
- float d, dj, yb;
- bool execsharp = false;
-
- if (!ncie) {
- ncie = new CieImage(pW, pH);
- }
-
- if (!CAMBrightCurveJ && (params.colorappearance.algo == "JC" || params.colorappearance.algo == "JS" || params.colorappearance.algo == "ALL")) {
- CAMBrightCurveJ(32768, 0);
- }
-
- if (!CAMBrightCurveQ && (params.colorappearance.algo == "QM" || params.colorappearance.algo == "ALL")) {
- CAMBrightCurveQ(32768, 0);
- }
-
- // Issue 2785, only float version of ciecam02 for navigator and pan background
- CAMMean = NAN;
- CAMBrightCurveJ.dirty = true;
- CAMBrightCurveQ.dirty = true;
-
- ipf.ciecam_02float(ncie, float (adap), pW, 2, nprevl, ¶ms, customColCurve1, customColCurve2, customColCurve3, histLCAM, histCCAM, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 5, scale, execsharp, d, dj, yb, 1);
-
- if ((params.colorappearance.autodegree || params.colorappearance.autodegreeout) && acListener && params.colorappearance.enabled) {
- acListener->autoCamChanged(100.* (double)d, 100.* (double)dj);
- }
-
- if (params.colorappearance.autoadapscen && acListener && params.colorappearance.enabled) {
- acListener->adapCamChanged(adap); //real value of adapt scene
- }
-
- if (params.colorappearance.autoybscen && acListener && params.colorappearance.enabled) {
- acListener->ybCamChanged((int) yb); //real value Yb scene
- }
-
- readyphase++;
- } else {
- // CIECAM is disabled, we free up its image buffer to save some space
- if (ncie) {
- delete ncie;
- }
-
- ncie = nullptr;
-
- if (CAMBrightCurveJ) {
- CAMBrightCurveJ.reset();
- }
-
- if (CAMBrightCurveQ) {
- CAMBrightCurveQ.reset();
- }
}
- }
- // Update the monitor color transform if necessary
- if ((todo & M_MONITOR) || (lastOutputProfile != params.icm.outputProfile) || lastOutputIntent != params.icm.outputIntent || lastOutputBPC != params.icm.outputBPC) {
- lastOutputProfile = params.icm.outputProfile;
- lastOutputIntent = params.icm.outputIntent;
- lastOutputBPC = params.icm.outputBPC;
- ipf.updateColorProfiles(monitorProfile, monitorIntent, softProof, gamutCheck);
+ // Update the monitor color transform if necessary
+ if ((todo & M_MONITOR) || (lastOutputProfile != params.icm.outputProfile) || lastOutputIntent != params.icm.outputIntent || lastOutputBPC != params.icm.outputBPC) {
+ lastOutputProfile = params.icm.outputProfile;
+ lastOutputIntent = params.icm.outputIntent;
+ lastOutputBPC = params.icm.outputBPC;
+ ipf.updateColorProfiles(monitorProfile, monitorIntent, softProof, gamutCheck);
+ }
}
// process crop, if needed
for (size_t i = 0; i < crops.size(); i++)
- if (crops[i]->hasListener() && cropCall != crops[i]) {
+ if (crops[i]->hasListener() && (panningRelatedChange || crops[i]->get_skip() == 1)) {
crops[i]->update(todo); // may call ourselves
}
- progress("Conversion to RGB...", 100 * readyphase / numofphases);
+ if (panningRelatedChange) {
+ progress("Conversion to RGB...", 100 * readyphase / numofphases);
- if ((todo != CROP && todo != MINUPDATE) || (todo & M_MONITOR)) {
- MyMutex::MyLock prevImgLock(previmg->getMutex());
+ if ((todo != CROP && todo != MINUPDATE) || (todo & M_MONITOR)) {
+ MyMutex::MyLock prevImgLock(previmg->getMutex());
- try {
- // Computing the preview image, i.e. converting from WCS->Monitor color space (soft-proofing disabled) or WCS->Printer profile->Monitor color space (soft-proofing enabled)
- ipf.lab2monitorRgb(nprevl, previmg);
+ try {
+ // Computing the preview image, i.e. converting from WCS->Monitor color space (soft-proofing disabled) or WCS->Printer profile->Monitor color space (soft-proofing enabled)
+ ipf.lab2monitorRgb(nprevl, previmg);
- // Computing the internal image for analysis, i.e. conversion from WCS->Output profile
- delete workimg;
- workimg = ipf.lab2rgb(nprevl, 0, 0, pW, pH, params.icm);
- } catch (char * str) {
- progress("Error converting file...", 0);
- return;
+ // Computing the internal image for analysis, i.e. conversion from WCS->Output profile
+ delete workimg;
+ workimg = ipf.lab2rgb(nprevl, 0, 0, pW, pH, params.icm);
+ } catch (char * str) {
+ progress("Error converting file...", 0);
+ return;
+ }
}
- }
- if (!resultValid) {
- resultValid = true;
+ if (!resultValid) {
+ resultValid = true;
- if (imageListener) {
- imageListener->setImage(previmg, scale, params.crop);
+ if (imageListener) {
+ imageListener->setImage(previmg, scale, params.crop);
+ }
}
- }
- if (imageListener)
- // TODO: The WB tool should be advertised too in order to get the AutoWB's temp and green values
- {
- imageListener->imageReady(params.crop);
- }
+ if (imageListener)
+ // TODO: The WB tool should be advertised too in order to get the AutoWB's temp and green values
+ {
+ imageListener->imageReady(params.crop);
+ }
- readyphase++;
+ readyphase++;
- if (hListener) {
- updateLRGBHistograms();
- hListener->histogramChanged(histRed, histGreen, histBlue, histLuma, histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRedRaw, histGreenRaw, histBlueRaw, histChroma, histLRETI);
+ if (hListener) {
+ updateLRGBHistograms();
+ hListener->histogramChanged(histRed, histGreen, histBlue, histLuma, histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRedRaw, histGreenRaw, histBlueRaw, histChroma, histLRETI);
+ }
}
}
@@ -4393,7 +4391,7 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a
im->setMetadata(imgsrc->getMetaData()->getRootExifData());
- im->saveTIFF(fname, 16, true);
+ im->saveTIFF(fname, 16, false, true);
delete im;
if (plistener) {
@@ -4454,6 +4452,41 @@ void ImProcCoordinator::process()
paramsUpdateMutex.lock();
while (changeSinceLast) {
+ const bool panningRelatedChange =
+ params.toneCurve != nextParams.toneCurve
+ || params.labCurve != nextParams.labCurve
+ || params.localContrast != nextParams.localContrast
+ || params.locallab != nextParams.locallab
+
+ || params.rgbCurves != nextParams.rgbCurves
+ || params.colorToning != nextParams.colorToning
+ || params.vibrance != nextParams.vibrance
+ || params.wb != nextParams.wb
+ || params.colorappearance != nextParams.colorappearance
+ || params.epd != nextParams.epd
+ || params.fattal != nextParams.fattal
+ || params.sh != nextParams.sh
+ || params.crop != nextParams.crop
+ || params.coarse != nextParams.coarse
+ || params.commonTrans != nextParams.commonTrans
+ || params.rotate != nextParams.rotate
+ || params.distortion != nextParams.distortion
+ || params.lensProf != nextParams.lensProf
+ || params.perspective != nextParams.perspective
+ || params.gradient != nextParams.gradient
+ || params.pcvignette != nextParams.pcvignette
+ || params.cacorrection != nextParams.cacorrection
+ || params.vignetting != nextParams.vignetting
+ || params.chmixer != nextParams.chmixer
+ || params.blackwhite != nextParams.blackwhite
+ || params.icm != nextParams.icm
+ || params.hsvequalizer != nextParams.hsvequalizer
+ || params.filmSimulation != nextParams.filmSimulation
+ || params.softlight != nextParams.softlight
+ || params.raw != nextParams.raw
+ || params.retinex != nextParams.retinex
+ || params.dirpyrequalizer != nextParams.dirpyrequalizer;
+
params = nextParams;
int change = changeSinceLast;
changeSinceLast = 0;
@@ -4461,7 +4494,7 @@ void ImProcCoordinator::process()
// M_VOID means no update, and is a bit higher that the rest
if (change & (M_VOID - 1)) {
- updatePreviewImage(change);
+ updatePreviewImage(change, panningRelatedChange);
}
paramsUpdateMutex.lock();
diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h
index 32fb398c0..49de3090b 100644
--- a/rtengine/improccoordinator.h
+++ b/rtengine/improccoordinator.h
@@ -204,7 +204,8 @@ protected:
void reallocAll();
void updateLRGBHistograms();
void setScale(int prevscale);
- void updatePreviewImage(int todo, Crop* cropCall = nullptr);
+ void updatePreviewImage (int todo, bool panningRelatedChange);
+// void updatePreviewImage(int todo, Crop* cropCall = nullptr);
MyMutex mProcessing;
ProcParams params;
diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h
index 31fa027f1..5197540c1 100644
--- a/rtengine/improcfun.h
+++ b/rtengine/improcfun.h
@@ -270,9 +270,8 @@ public:
void EPDToneMapResid(float * WavCoeffs_L0, unsigned int Iterates, int skip, struct cont_params& cp, int W_L, int H_L, float max0, float min0);
- float *CompressDR(float *Source, int W_L, int H_L, float Compression, float DetailBoost, float *Compressed);
+ void CompressDR(float *Source, int W_L, int H_L, float Compression, float DetailBoost);
void ContrastResid(float * WavCoeffs_L0, struct cont_params &cp, int W_L, int H_L, float max0, float min0);
- float *ContrastDR(float *Source, int W_L, int H_L, float *Contrast = nullptr);
void EPDToneMap(LabImage *lab, unsigned int Iterates = 0, int skip = 1);
void EPDToneMaplocal(LabImage *lab, LabImage *tmp1, unsigned int Iterates, int skip);
diff --git a/rtengine/init.cc b/rtengine/init.cc
index 0d4560c6b..7d944fc0b 100644
--- a/rtengine/init.cc
+++ b/rtengine/init.cc
@@ -49,7 +49,7 @@ int init (const Settings* s, Glib::ustring baseDir, Glib::ustring userSettingsDi
RawImageSource::init();
#ifdef _OPENMP
-#pragma omp parallel sections
+#pragma omp parallel sections if (!settings->verbose)
#endif
{
#ifdef _OPENMP
diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc
index fdb13f197..568ff3683 100644
--- a/rtengine/ipwavelet.cc
+++ b/rtengine/ipwavelet.cc
@@ -1424,115 +1424,48 @@ void ImProcFunctions::Eval2 (float ** WavCoeffs_L, int level,
MaxN[level] = maxLN;
}
-float *ImProcFunctions::ContrastDR(float *Source, int W_L, int H_L, float *Contrast)
+void ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compression, float DetailBoost)
{
- int n = W_L * H_L;
+ const int n = W_L * H_L;
- if (Contrast == nullptr) {
- Contrast = new float[n];
- }
-
- memcpy (Contrast, Source, n * sizeof (float));
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int i = 0; i < W_L * H_L; i++) { //contrast
- Contrast[i] = Source[i] ;
- }
-
- return Contrast;
-}
-
-float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compression, float DetailBoost, float *Compressed)
-{
-
- const float eps = 0.000001f;
- int n = W_L * H_L;
-
-#ifdef __SSE2__
-#ifdef _OPENMP
- #pragma omp parallel
-#endif
- {
- __m128 epsv = _mm_set1_ps ( eps );
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int ii = 0; ii < n - 3; ii += 4) {
- _mm_storeu_ps ( &Source[ii], xlogf (LVFU (Source[ii]) + epsv));
- }
- }
-
- for (int ii = n - (n % 4); ii < n; ii++) {
- Source[ii] = xlogf (Source[ii] + eps);
- }
-
-#else
-#ifdef _OPENMP
- #pragma omp parallel for
-#endif
-
- for (int ii = 0; ii < n; ii++) {
- Source[ii] = xlogf (Source[ii] + eps);
- }
-
-#endif
-
- float *ucr = ContrastDR(Source, W_L, H_L);
-
- if (Compressed == nullptr) {
- Compressed = ucr;
- }
-
- float temp;
+ float exponent;
if (DetailBoost > 0.f && DetailBoost < 0.05f ) {
float betemp = expf (- (2.f - DetailBoost + 0.694f)) - 1.f; //0.694 = log(2)
- temp = 1.2f * xlogf ( -betemp);
- temp /= 20.f;
+ exponent = 1.2f * xlogf( -betemp);
+ exponent /= 20.f;
} else if (DetailBoost >= 0.05f && DetailBoost < 0.25f ) {
float betemp = expf (- (2.f - DetailBoost + 0.694f)) - 1.f; //0.694 = log(2)
- temp = 1.2f * xlogf ( -betemp);
- temp /= (-75.f * DetailBoost + 23.75f);
+ exponent = 1.2f * xlogf( -betemp);
+ exponent /= (-75.f * DetailBoost + 23.75f);
} else if (DetailBoost >= 0.25f) {
float betemp = expf (- (2.f - DetailBoost + 0.694f)) - 1.f; //0.694 = log(2)
- temp = 1.2f * xlogf ( -betemp);
- temp /= (-2.f * DetailBoost + 5.5f);
+ exponent = 1.2f * xlogf( -betemp);
+ exponent /= (-2.f * DetailBoost + 5.5f);
+ } else {
+ exponent = (Compression - 1.0f) / 20.f;
}
- else {
- temp = (Compression - 1.0f) / 20.f;
- }
+ exponent += 1.f;
+ // now calculate Source = pow(Source, exponent)
#ifdef __SSE2__
#ifdef _OPENMP
#pragma omp parallel
#endif
{
- __m128 cev, uev, sourcev;
- __m128 epsv = _mm_set1_ps ( eps );
- __m128 DetailBoostv = _mm_set1_ps ( DetailBoost );
- __m128 tempv = _mm_set1_ps ( temp );
+ vfloat exponentv = F2V(exponent);
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 0; i < n - 3; i += 4) {
- cev = xexpf (LVFU (Source[i]) + LVFU (ucr[i]) * (tempv)) - epsv;
- uev = xexpf (LVFU (ucr[i])) - epsv;
- sourcev = xexpf (LVFU (Source[i])) - epsv;
- _mm_storeu_ps ( &Source[i], sourcev);
- _mm_storeu_ps ( &Compressed[i], cev + DetailBoostv * (sourcev - uev) );
+ STVFU(Source[i], xexpf(xlogf(LVFU(Source[i])) * exponentv));
}
}
for (int i = n - (n % 4); i < n; i++) {
- float ce = xexpf (Source[i] + ucr[i] * (temp)) - eps;
- float ue = xexpf (ucr[i]) - eps;
- Source[i] = xexpf (Source[i]) - eps;
- Compressed[i] = ce + DetailBoost * (Source[i] - ue);
+ Source[i] = xexpf(xlogf(Source[i]) * exponent);
}
#else
@@ -1541,21 +1474,11 @@ float *ImProcFunctions::CompressDR(float *Source, int W_L, int H_L, float Compre
#endif
for (int i = 0; i < n; i++) {
- float ce = xexpf (Source[i] + ucr[i] * (temp)) - eps;
- float ue = xexpf (ucr[i]) - eps;
- Source[i] = xexpf (Source[i]) - eps;
- Compressed[i] = ce + DetailBoost * (Source[i] - ue);
+ Source[i] = xexpf(xlogf(Source[i]) * exponent);
}
#endif
- if (Compressed != ucr) {
- delete[] ucr;
- }
-
- return Compressed;
-
-
}
void ImProcFunctions::ContrastResid(float * WavCoeffs_L0, struct cont_params &cp, int W_L, int H_L, float max0, float min0)
@@ -1588,7 +1511,7 @@ void ImProcFunctions::ContrastResid(float * WavCoeffs_L0, struct cont_params &cp
}
- CompressDR(WavCoeffs_L0, W_L, H_L, Compression, DetailBoost, WavCoeffs_L0);
+ CompressDR(WavCoeffs_L0, W_L, H_L, Compression, DetailBoost);
#ifdef _OPENMP
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index b86ca2ae9..ea82663aa 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -1646,7 +1646,9 @@ bool LensProfParams::operator ==(const LensProfParams& other) const
&& useCA == other.useCA
&& lfCameraMake == other.lfCameraMake
&& lfCameraModel == other.lfCameraModel
- && lfLens == other.lfLens;
+ && lfLens == other.lfLens
+ && useDist == other.useDist
+ && useVign == other.useVign;
}
bool LensProfParams::operator !=(const LensProfParams& other) const
diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc
index 7f5826a85..1f967c90b 100644
--- a/rtengine/rawimagesource.cc
+++ b/rtengine/rawimagesource.cc
@@ -4730,10 +4730,14 @@ void RawImageSource::getRAWHistogram(LUTu & histRedRaw, LUTu & histGreenRaw, LUT
histRedRaw.clear();
histGreenRaw.clear();
histBlueRaw.clear();
- const float mult[4] = { 255.0f / Color::gamma(ri->get_white(0) - cblacksom[0]),
- 255.0f / Color::gamma(ri->get_white(1) - cblacksom[1]),
- 255.0f / Color::gamma(ri->get_white(2) - cblacksom[2]),
- 255.0f / Color::gamma(ri->get_white(3) - cblacksom[3])
+
+ const float maxWhite = rtengine::max(ri->get_white(0), ri->get_white(1), ri->get_white(2), ri->get_white(3));
+ const float scale = maxWhite <= 1.f ? 65535.f : 1.f; // special case for float raw images in [0.0;1.0] range
+ const float multScale = maxWhite <= 1.f ? 1.f / 255.f : 255.f;
+ const float mult[4] = { multScale / (ri->get_white(0) - cblacksom[0]),
+ multScale / (ri->get_white(1) - cblacksom[1]),
+ multScale / (ri->get_white(2) - cblacksom[2]),
+ multScale / (ri->get_white(3) - cblacksom[3])
};
const bool fourColours = ri->getSensorType() == ST_BAYER && ((mult[1] != mult[3] || cblacksom[1] != cblacksom[3]) || FC(0, 0) == 3 || FC(0, 1) == 3 || FC(1, 0) == 3 || FC(1, 1) == 3);
@@ -4797,26 +4801,26 @@ void RawImageSource::getRAWHistogram(LUTu & histRedRaw, LUTu & histGreenRaw, LUT
c2 = (fourColours && c2 == 1 && !(i & 1)) ? 3 : c2;
for (j = start; j < end - 1; j += 2) {
- tmphist[c1][(int)ri->data[i][j]]++;
- tmphist[c2][(int)ri->data[i][j + 1]]++;
+ tmphist[c1][(int)(ri->data[i][j] * scale)]++;
+ tmphist[c2][(int)(ri->data[i][j + 1] * scale)]++;
}
if (j < end) { // last pixel of row if width is odd
- tmphist[c1][(int)ri->data[i][j]]++;
+ tmphist[c1][(int)(ri->data[i][j] * scale)]++;
}
} else if (ri->get_colors() == 1) {
for (int j = start; j < end; j++) {
- tmphist[0][(int)ri->data[i][j]]++;
+ tmphist[0][(int)(ri->data[i][j] * scale)]++;
}
} else if (ri->getSensorType() == ST_FUJI_XTRANS) {
for (int j = start; j < end - 1; j += 2) {
int c = ri->XTRANSFC(i, j);
- tmphist[c][(int)ri->data[i][j]]++;
+ tmphist[c][(int)(ri->data[i][j] * scale)]++;
}
} else {
for (int j = start; j < end; j++) {
for (int c = 0; c < 3; c++) {
- tmphist[c][(int)ri->data[i][3 * j + c]]++;
+ tmphist[c][(int)(ri->data[i][3 * j + c] * scale)]++;
}
}
}
@@ -4839,21 +4843,20 @@ void RawImageSource::getRAWHistogram(LUTu & histRedRaw, LUTu & histGreenRaw, LUT
} // end of critical region
} // end of parallel region
- for(int i = 0; i < 65536; i++) {
- int idx;
- idx = (int)std::min(255.0f, mult[0] * Color::gamma(std::max(0.0f, i - cblacksom[0])));
+ for(int i = 0; i < histoSize; i++) {
+ int idx = std::min(255.f, mult[0] * std::max(0.f, i - cblacksom[0]));
histRedRaw[idx] += hist[0][i];
if (ri->get_colors() > 1) {
- idx = (int)std::min(255.0f, mult[1] * Color::gamma(std::max(0.0f, i - cblacksom[1])));
+ idx = std::min(255.f, mult[1] * std::max(0.f, i - cblacksom[1]));
histGreenRaw[idx] += hist[1][i];
if (fourColours) {
- idx = (int)std::min(255.0f, mult[3] * Color::gamma(std::max(0.0f, i - cblacksom[3])));
+ idx = std::min(255.f, mult[3] * std::max(0.f, i - cblacksom[3]));
histGreenRaw[idx] += hist[3][i];
}
- idx = (int)std::min(255.0f, mult[2] * Color::gamma(std::max(0.0f, i - cblacksom[2])));
+ idx = std::min(255.f, mult[2] * std::max(0.f, i - cblacksom[2]));
histBlueRaw[idx] += hist[2][i];
}
}
diff --git a/rtgui/adjuster.cc b/rtgui/adjuster.cc
index 6260314b1..3f12b0cfb 100644
--- a/rtgui/adjuster.cc
+++ b/rtgui/adjuster.cc
@@ -46,6 +46,10 @@ Adjuster::Adjuster (Glib::ustring vlabel, double vmin, double vmax, double vstep
grid = NULL;
imageIcon1 = imgIcon1;
+ logBase = 0;
+ logPivot = 0;
+ logAnchorMiddle = false;
+
if (imageIcon1) {
setExpandAlignProperties(imageIcon1, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
}
@@ -289,13 +293,13 @@ void Adjuster::resetValue (bool toInitial)
if (toInitial) {
// resetting to the initial editing value, when the image has been loaded
- slider->set_value (addMode ? defaultVal : value2slider(defaultVal));
+ setSliderValue(addMode ? defaultVal : value2slider(defaultVal));
} else {
// resetting to the slider default value
if (addMode) {
- slider->set_value (0.);
+ setSliderValue(0.);
} else {
- slider->set_value (value2slider(ctorDefaultVal));
+ setSliderValue(value2slider(ctorDefaultVal));
}
}
}
@@ -313,8 +317,8 @@ void Adjuster::resetPressed (GdkEventButton* event)
double Adjuster::shapeValue (double a)
{
-
- return round(a * pow(double(10), digits)) / pow(double(10), digits);
+ double val = round(a * pow(double(10), digits)) / pow(double(10), digits);
+ return val == -0.0 ? 0.0 : val;
}
void Adjuster::setLimits (double vmin, double vmax, double vstep, double vdefault)
@@ -333,7 +337,7 @@ void Adjuster::setLimits (double vmin, double vmax, double vstep, double vdefaul
slider->set_digits (digits);
slider->set_increments (vstep, 2.0 * vstep);
slider->set_range (addMode ? vmin : value2slider(vmin), addMode ? vmax : value2slider(vmax));
- slider->set_value (addMode ? shapeValue(vdefault) : value2slider(shapeValue(vdefault)));
+ setSliderValue(addMode ? shapeValue(vdefault) : value2slider(shapeValue(vdefault)));
//defaultVal = shapeValue (vdefault);
sliderChange.block (false);
spinChange.block (false);
@@ -369,7 +373,7 @@ void Adjuster::spinChanged ()
}
sliderChange.block (true);
- slider->set_value (addMode ? spin->get_value () : value2slider(spin->get_value ()));
+ setSliderValue(addMode ? spin->get_value () : value2slider(spin->get_value ()));
sliderChange.block (false);
if (delay == 0) {
@@ -409,7 +413,8 @@ void Adjuster::sliderChanged ()
}
spinChange.block (true);
- spin->set_value (addMode ? slider->get_value () : slider2value(slider->get_value ()));
+ double v = shapeValue(getSliderValue());
+ spin->set_value (addMode ? v : slider2value(v));
spinChange.block (false);
if (delay == 0 || afterReset) {
@@ -447,7 +452,7 @@ void Adjuster::setValue (double a)
spinChange.block (true);
sliderChange.block (true);
spin->set_value (shapeValue (a));
- slider->set_value (addMode ? shapeValue(a) : value2slider(shapeValue (a)));
+ setSliderValue(addMode ? shapeValue(a) : value2slider(shapeValue (a)));
sliderChange.block (false);
spinChange.block (false);
afterReset = false;
@@ -608,3 +613,81 @@ void Adjuster::trimValue (float &val)
val = rtengine::LIM(val, static_cast(vMin), static_cast(vMax));
}
+
+
+inline double Adjuster::getSliderValue()
+{
+ double val = slider->get_value();
+ if (logBase) {
+ if (logAnchorMiddle) {
+ double mid = (vMax - vMin) / 2;
+ double mmid = vMin + mid;
+ if (val >= mmid) {
+ double range = vMax - mmid;
+ double x = (val - mmid) / range;
+ val = logPivot + (pow(logBase, x) - 1.0) / (logBase - 1.0) * (vMax - logPivot);
+ } else {
+ double range = mmid - vMin;
+ double x = (mmid - val) / range;
+ val = logPivot - (pow(logBase, x) - 1.0) / (logBase - 1.0) * (logPivot - vMin);
+ }
+ } else {
+ if (val >= logPivot) {
+ double range = vMax - logPivot;
+ double x = (val - logPivot) / range;
+ val = logPivot + (pow(logBase, x) - 1.0) / (logBase - 1.0) * range;
+ } else {
+ double range = logPivot - vMin;
+ double x = (logPivot - val) / range;
+ val = logPivot - (pow(logBase, x) - 1.0) / (logBase - 1.0) * range;
+ }
+ }
+ }
+ return val;
+}
+
+
+inline void Adjuster::setSliderValue(double val)
+{
+ if (logBase) {
+ if (logAnchorMiddle) {
+ double mid = (vMax - vMin) / 2;
+ if (val >= logPivot) {
+ double range = vMax - logPivot;
+ double x = (val - logPivot) / range;
+ val = (vMin + mid) + log(x * (logBase - 1.0) + 1.0) / log(logBase) * mid;
+ } else {
+ double range = logPivot - vMin;
+ double x = (logPivot - val) / range;
+ val = (vMin + mid) - log(x * (logBase - 1.0) + 1.0) / log(logBase) * mid;
+ }
+ } else {
+ if (val >= logPivot) {
+ double range = vMax - logPivot;
+ double x = (val - logPivot) / range;
+ val = logPivot + log(x * (logBase - 1.0) + 1.0) / log(logBase) * range;
+ } else {
+ double range = logPivot - vMin;
+ double x = (logPivot - val) / range;
+ val = logPivot - log(x * (logBase - 1.0) + 1.0) / log(logBase) * range;
+ }
+ }
+ }
+ slider->set_value(val);
+}
+
+
+void Adjuster::setLogScale(double base, double pivot, bool anchorMiddle)
+{
+ spinChange.block (true);
+ sliderChange.block (true);
+
+ double cur = getSliderValue();
+ logBase = base;
+ logPivot = pivot;
+ logAnchorMiddle = anchorMiddle;
+ setSliderValue(cur);
+
+ sliderChange.block (false);
+ spinChange.block (false);
+}
diff --git a/rtgui/adjuster.h b/rtgui/adjuster.h
index 768406a33..5b4d6f46d 100644
--- a/rtgui/adjuster.h
+++ b/rtgui/adjuster.h
@@ -71,10 +71,17 @@ protected:
double vMax;
double vStep;
+ double logBase;
+ double logPivot;
+ bool logAnchorMiddle;
+
double shapeValue (double a);
void refreshLabelStyle ();
double2double_fun value2slider, slider2value;
+ double getSliderValue();
+ void setSliderValue(double val);
+
public:
int delay;
@@ -173,6 +180,8 @@ public:
void trimValue (double &val);
void trimValue (float &val);
void trimValue (int &val);
+
+ void setLogScale(double base, double pivot, bool anchorMiddle=false);
};
#endif
diff --git a/rtgui/bayerrawexposure.cc b/rtgui/bayerrawexposure.cc
index 2194d1639..7a8f32389 100644
--- a/rtgui/bayerrawexposure.cc
+++ b/rtgui/bayerrawexposure.cc
@@ -65,6 +65,11 @@ BayerRAWExposure::BayerRAWExposure () : FoldableToolPanel(this, "bayerrawexposur
pack_start( *PexBlack3, Gtk::PACK_SHRINK, 0);//black G2
pack_start( *PexBlack2, Gtk::PACK_SHRINK, 0);//black B
pack_start( *PextwoGreen, Gtk::PACK_SHRINK, 0);//black 2 green
+
+ PexBlack0->setLogScale(100, 0);
+ PexBlack1->setLogScale(100, 0);
+ PexBlack2->setLogScale(100, 0);
+ PexBlack3->setLogScale(100, 0);
}
void BayerRAWExposure::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
diff --git a/rtgui/cacorrection.cc b/rtgui/cacorrection.cc
index ffaa57c34..485a5e1cf 100644
--- a/rtgui/cacorrection.cc
+++ b/rtgui/cacorrection.cc
@@ -40,6 +40,9 @@ CACorrection::CACorrection () : FoldableToolPanel(this, "cacorrection", M("TP_CA
pack_start (*red);
pack_start (*blue);
+ red->setLogScale(10, 0);
+ blue->setLogScale(10, 0);
+
show_all();
}
diff --git a/rtgui/chmixer.cc b/rtgui/chmixer.cc
index 1e3bb395e..1a122ef6f 100644
--- a/rtgui/chmixer.cc
+++ b/rtgui/chmixer.cc
@@ -84,6 +84,10 @@ ChMixer::ChMixer (): FoldableToolPanel(this, "chmixer", M("TP_CHMIXER_LABEL"), f
red[i]->setAdjusterListener (this);
green[i]->setAdjusterListener (this);
blue[i]->setAdjusterListener (this);
+
+ red[i]->setLogScale(10, red[i]->getValue());
+ green[i]->setLogScale(10, green[i]->getValue());
+ blue[i]->setLogScale(10, blue[i]->getValue());
}
pack_start (*blabel);
diff --git a/rtgui/distortion.cc b/rtgui/distortion.cc
index c181ed479..b6ad7cc03 100644
--- a/rtgui/distortion.cc
+++ b/rtgui/distortion.cc
@@ -41,6 +41,9 @@ Distortion::Distortion (): FoldableToolPanel(this, "distortion", M("TP_DISTORTIO
distor = Gtk::manage (new Adjuster (M("TP_DISTORTION_AMOUNT"), -0.5, 0.5, 0.001, 0, idistL, idistR));
distor->setAdjusterListener (this);
+
+ distor->setLogScale(2, 0);
+
distor->show();
pack_start (*distor);
}
diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc
index e7fd11a26..392d12a2c 100644
--- a/rtgui/editorpanel.cc
+++ b/rtgui/editorpanel.cc
@@ -657,18 +657,21 @@ EditorPanel::EditorPanel (FilePanel* filePanel)
Gtk::Image *saveButtonImage = Gtk::manage (new RTImage ("save.png"));
saveimgas = Gtk::manage (new Gtk::Button ());
+ saveimgas->set_relief(Gtk::RELIEF_NONE);
saveimgas->add (*saveButtonImage);
saveimgas->set_tooltip_markup (M ("MAIN_BUTTON_SAVE_TOOLTIP"));
setExpandAlignProperties (saveimgas, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL);
Gtk::Image *queueButtonImage = Gtk::manage (new RTImage ("gears.png"));
queueimg = Gtk::manage (new Gtk::Button ());
+ queueimg->set_relief(Gtk::RELIEF_NONE);
queueimg->add (*queueButtonImage);
queueimg->set_tooltip_markup (M ("MAIN_BUTTON_PUTTOQUEUE_TOOLTIP"));
setExpandAlignProperties (queueimg, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL);
Gtk::Image *sendToEditorButtonImage = Gtk::manage (new RTImage ("palette-brush.png"));
sendtogimp = Gtk::manage (new Gtk::Button ());
+ sendtogimp->set_relief(Gtk::RELIEF_NONE);
sendtogimp->add (*sendToEditorButtonImage);
sendtogimp->set_tooltip_markup (M ("MAIN_BUTTON_SENDTOEDITOR_TOOLTIP"));
setExpandAlignProperties (sendtogimp, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL);
@@ -2184,9 +2187,11 @@ void EditorPanel::beforeAfterToggled ()
beforeLabel = Gtk::manage (new Gtk::Label ());
beforeLabel->set_markup (Glib::ustring ("") + M ("GENERAL_BEFORE") + "");
tbBeforeLock = Gtk::manage (new Gtk::ToggleButton ());
+ tbBeforeLock->set_relief(Gtk::RELIEF_NONE);
tbBeforeLock->set_tooltip_markup (M ("MAIN_TOOLTIP_BEFOREAFTERLOCK"));
tbBeforeLock->signal_toggled().connect ( sigc::mem_fun (*this, &EditorPanel::tbBeforeLock_toggled) );
beforeHeaderBox = Gtk::manage (new Gtk::Box (Gtk::ORIENTATION_HORIZONTAL));
+ beforeHeaderBox->get_style_context()->add_class("smallbuttonbox");
beforeHeaderBox->pack_end (*tbBeforeLock, Gtk::PACK_SHRINK, 2);
beforeHeaderBox->pack_end (*beforeLabel, Gtk::PACK_SHRINK, 2);
beforeHeaderBox->set_size_request (0, HeaderBoxHeight);
@@ -2315,11 +2320,6 @@ void EditorPanel::updateTPVScrollbar (bool hide)
tpc->updateTPVScrollbar (hide);
}
-void EditorPanel::updateTabsUsesIcons (bool useIcons)
-{
- tpc->updateTabsUsesIcons (useIcons);
-}
-
void EditorPanel::updateHistogramPosition (int oldPosition, int newPosition)
{
diff --git a/rtgui/editorpanel.h b/rtgui/editorpanel.h
index 054ad0a6b..3ac0d92b6 100644
--- a/rtgui/editorpanel.h
+++ b/rtgui/editorpanel.h
@@ -133,7 +133,6 @@ public:
}
void updateProfiles (const Glib::ustring &printerProfile, rtengine::RenderingIntent printerIntent, bool printerBPC);
void updateTPVScrollbar (bool hide);
- void updateTabsUsesIcons (bool useIcons);
void updateHistogramPosition (int oldPosition, int newPosition);
void defaultMonitorProfileChanged (const Glib::ustring &profile_name, bool auto_monitor_profile);
diff --git a/rtgui/filepanel.cc b/rtgui/filepanel.cc
index 260a6f448..3cb5afa4c 100644
--- a/rtgui/filepanel.cc
+++ b/rtgui/filepanel.cc
@@ -425,8 +425,3 @@ void FilePanel::updateTPVScrollbar (bool hide)
{
tpc->updateTPVScrollbar (hide);
}
-
-void FilePanel::updateTabsUsesIcons (bool useIcons)
-{
- tpc->updateTabsUsesIcons (useIcons);
-}
diff --git a/rtgui/filepanel.h b/rtgui/filepanel.h
index b8389d1c9..3ecf7a33b 100644
--- a/rtgui/filepanel.h
+++ b/rtgui/filepanel.h
@@ -80,7 +80,6 @@ public:
bool handleShortcutKey (GdkEventKey* event);
void updateTPVScrollbar (bool hide);
- void updateTabsUsesIcons (bool useIcons);
private:
void on_NB_switch_page(Gtk::Widget* page, guint page_num);
diff --git a/rtgui/filmsimulation.cc b/rtgui/filmsimulation.cc
index ba8f6740b..73e35b2f8 100644
--- a/rtgui/filmsimulation.cc
+++ b/rtgui/filmsimulation.cc
@@ -135,6 +135,8 @@ void FilmSimulation::read( const rtengine::procparams::ProcParams* pp, const Par
: pp->filmSimulation.clutFilename
);
m_oldClutFilename = m_clutComboBox->getSelectedClut();
+ } else {
+ m_clutComboBox->set_active(-1);
}
m_strength->setValue(pp->filmSimulation.strength);
@@ -249,7 +251,7 @@ void ClutComboBox::setBatchMode(bool yes)
if (batchMode != yes) {
batchMode = yes;
set_model(m_model());
- if (batchMode && options.multiDisplayMode) {
+ if (batchMode) {
updateUnchangedEntry();
}
}
@@ -270,7 +272,6 @@ void ClutComboBox::updateUnchangedEntry()
if (c.size() > 0) {
Gtk::TreeModel::Row row = c[c.size()-1];
if (row[m_columns().clutFilename] == "NULL") {
- std::cout << " removing " << ((void *)this) << std::endl;
m_model()->erase(row);
}
}
diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc
index 1e4f4eac8..980b94765 100644
--- a/rtgui/guiutils.cc
+++ b/rtgui/guiutils.cc
@@ -1434,63 +1434,15 @@ void MyFileChooserButton::get_preferred_width_for_height_vfunc (int height, int
-TextOrIcon::TextOrIcon (Glib::ustring fname, Glib::ustring labelTx, Glib::ustring tooltipTx, TOITypes type)
+TextOrIcon::TextOrIcon (const Glib::ustring &fname, const Glib::ustring &labelTx, const Glib::ustring &tooltipTx)
{
- imgIcon = nullptr;
- label = nullptr;
- filename = fname;
- labelText = labelTx;
- tooltipText = tooltipTx;
+ pack_start(*Gtk::manage(new RTImage(fname)), Gtk::PACK_SHRINK, 0);
+ set_tooltip_markup("" + labelTx + "\n" + tooltipTx);
set_name("TextOrIcon");
-
- switchTo(type);
-}
-
-TextOrIcon::~TextOrIcon ()
-{
- if (imgIcon) {
- delete imgIcon;
- }
-
- if (label) {
- delete label;
- }
-}
-
-void TextOrIcon::switchTo(TOITypes type)
-{
- switch (type) {
- case (TOI_ICON):
- if (!imgIcon) {
- removeIfThere(this, label, false);
- delete label;
- label = nullptr;
- imgIcon = new RTImage (filename);
- pack_start(*imgIcon, Gtk::PACK_SHRINK, 0);
- set_tooltip_markup ("" + labelText + "\n" + tooltipText);
- }
-
- // do nothing if imgIcon exist, which mean that it is currently being displayed
- break;
-
- case(TOI_TEXT):
- default:
- if (!label) {
- removeIfThere(this, imgIcon, false);
- delete imgIcon;
- imgIcon = nullptr;
- label = new Gtk::Label (labelText, Gtk::ALIGN_CENTER);
- pack_start(*label, Gtk::PACK_EXPAND_WIDGET, 0);
- set_tooltip_markup (tooltipText);
- }
-
- // do nothing if label exist, which mean that it is currently being displayed
- break;
- }
-
show_all();
+
}
MyImageMenuItem::MyImageMenuItem(Glib::ustring label, Glib::ustring imageFileName)
diff --git a/rtgui/guiutils.h b/rtgui/guiutils.h
index fb627a78a..8816eca4f 100644
--- a/rtgui/guiutils.h
+++ b/rtgui/guiutils.h
@@ -450,11 +450,6 @@ typedef enum RTOrientation {
RTO_Top2Bottom
} eRTOrientation;
-enum TOITypes {
- TOI_TEXT,
- TOI_ICON
-};
-
typedef enum RTNav {
NAV_NONE,
NAV_NEXT,
@@ -467,18 +462,8 @@ typedef enum RTNav {
class TextOrIcon : public Gtk::HBox
{
-protected:
- Gtk::Image* imgIcon;
- Gtk::Label* label;
- Glib::ustring filename;
- Glib::ustring labelText;
- Glib::ustring tooltipText;
-
public:
- TextOrIcon (Glib::ustring filename, Glib::ustring labelTx, Glib::ustring tooltipTx, TOITypes type);
- ~TextOrIcon ();
-
- void switchTo(TOITypes type);
+ TextOrIcon (const Glib::ustring &filename, const Glib::ustring &labelTx, const Glib::ustring &tooltipTx);
};
class MyImageMenuItem : public Gtk::MenuItem
diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc
index 5293c6c00..6ff48a9fd 100644
--- a/rtgui/histogrampanel.cc
+++ b/rtgui/histogrampanel.cc
@@ -443,7 +443,7 @@ bool HistogramRGBArea::getShow()
void HistogramRGBArea::updateBackBuffer (int r, int g, int b, const Glib::ustring &profile, const Glib::ustring &profileW)
{
- if (!get_realized () || !showMode) {
+ if (!get_realized () || !showMode || rawMode) {
return;
}
@@ -606,10 +606,6 @@ void HistogramRGBArea::updateOptions (bool r, bool g, bool b, bool l, bool c, bo
barDisplayed = false;
}
- // Disable (but don't hide it) the bar button when RAW histogram is displayed
- if (rawMode) {
- showMode = false;
- }
}
void HistogramRGBArea::on_realize ()
@@ -820,14 +816,14 @@ void HistogramArea::updateBackBuffer ()
// draw vertical gridlines
if (options.histogramDrawMode < 2) {
for (int i = 1; i < nrOfVGridPartitions; i++) {
- cr->move_to ((pow(2.0,i) - 1) / 255 * w + 0.5, 1.5);
- cr->line_to ((pow(2.0,i) - 1) / 255 * w + 0.5, h - 2);
+ cr->move_to ((pow(2.0,i) - 1) / 255.0 * w + 0.5, 1.5);
+ cr->line_to ((pow(2.0,i) - 1) / 255.0 * w + 0.5, h - 2);
cr->stroke ();
}
} else {
for (int i = 1; i < nrOfVGridPartitions; i++) {
- cr->move_to (HistogramScaling::log (255, pow(2.0,i) - 1) / 255 * w + 0.5, 1.5);
- cr->line_to (HistogramScaling::log (255, pow(2.0,i) - 1) / 255 * w + 0.5, h - 2);
+ cr->move_to (HistogramScaling::log (255, pow(2.0,i) - 1) / 255.0 * w + 0.5, 1.5);
+ cr->line_to (HistogramScaling::log (255, pow(2.0,i) - 1) / 255.0 * w + 0.5, h - 2);
cr->stroke ();
}
}
@@ -835,14 +831,14 @@ void HistogramArea::updateBackBuffer ()
// draw horizontal gridlines
if (options.histogramDrawMode == 0) {
for (int i = 1; i < nrOfHGridPartitions; i++) {
- cr->move_to (1.5, i * h / nrOfHGridPartitions + 0.5);
- cr->line_to (w - 2, i * h / nrOfHGridPartitions + 0.5);
+ cr->move_to (1.5, i * (double)h / nrOfHGridPartitions + 0.5);
+ cr->line_to (w - 2, i * (double)h / nrOfHGridPartitions + 0.5);
cr->stroke ();
}
} else {
for (int i = 1; i < nrOfHGridPartitions; i++) {
- cr->move_to (1.5, h - HistogramScaling::log (h, i * h / nrOfHGridPartitions) + 0.5);
- cr->line_to (w - 2, h - HistogramScaling::log (h, i * h / nrOfHGridPartitions) + 0.5);
+ cr->move_to (1.5, h - HistogramScaling::log (h, i * (double)h / nrOfHGridPartitions) + 0.5);
+ cr->line_to (w - 2, h - HistogramScaling::log (h, i * (double)h / nrOfHGridPartitions) + 0.5);
cr->stroke ();
}
}
@@ -1086,4 +1082,4 @@ bool HistogramArea::on_motion_notify_event (GdkEventMotion* event)
HistogramArea::type_signal_factor_changed HistogramArea::signal_factor_changed()
{
return sigFactorChanged;
-}
\ No newline at end of file
+}
diff --git a/rtgui/icmpanel.cc b/rtgui/icmpanel.cc
index 936b68fd0..01b15d4b8 100644
--- a/rtgui/icmpanel.cc
+++ b/rtgui/icmpanel.cc
@@ -686,7 +686,7 @@ void ICMPanel::setDefaults(const ProcParams* defParams, const ParamsEdited* pedi
void ICMPanel::adjusterChanged(Adjuster* a, double newval)
{
- if (listener || batchMode) {
+ if (listener) {
Glib::ustring costr2 = Glib::ustring::format(std::setw(3), std::fixed, std::setprecision(2), newval);
if (a == wGamma) {
diff --git a/rtgui/labcurve.cc b/rtgui/labcurve.cc
index 1cde4262d..2669079ab 100644
--- a/rtgui/labcurve.cc
+++ b/rtgui/labcurve.cc
@@ -47,6 +47,10 @@ LCurve::LCurve () : FoldableToolPanel(this, "labcurves", M("TP_LABCURVE_LABEL"),
contrast->setAdjusterListener (this);
chromaticity->setAdjusterListener (this);
+ brightness->setLogScale(2, 0, true);
+ contrast->setLogScale(2, 0, true);
+ chromaticity->setLogScale(2, 0, true);
+
//%%%%%%%%%%%%%%%%%%
Gtk::HSeparator *hsep2 = Gtk::manage (new Gtk::HSeparator());
hsep2->show ();
diff --git a/rtgui/lensprofile.cc b/rtgui/lensprofile.cc
index a89fdb51e..a725ae9f8 100644
--- a/rtgui/lensprofile.cc
+++ b/rtgui/lensprofile.cc
@@ -604,7 +604,7 @@ bool LensProfilePanel::checkLensfunCanCorrect(bool automatch)
LensProfilePanel::LFDbHelper::LFDbHelper()
{
#ifdef _OPENMP
-#pragma omp parallel sections
+#pragma omp parallel sections if (!options.rtSettings.verbose)
#endif
{
#ifdef _OPENMP
diff --git a/rtgui/options.cc b/rtgui/options.cc
index bad998a3b..dfe7252b1 100644
--- a/rtgui/options.cc
+++ b/rtgui/options.cc
@@ -426,6 +426,9 @@ void Options::setDefaults()
histogramRed = true;
histogramGreen = true;
histogramBlue = true;
+ histogramLuma = false;
+ histogramChroma = false;
+ histogramRAW = false;
histogramBar = true;
histogramHeight = 200;
histogramDrawMode = 0;
@@ -447,7 +450,6 @@ void Options::setDefaults()
FileBrowserToolbarSingleRow = false;
hideTPVScrollbar = false;
- UseIconNoText = true;
whiteBalanceSpotSize = 8;
showFilmStripToolBar = false;
showdelimspot = false;
@@ -1389,10 +1391,6 @@ void Options::readFromFile(Glib::ustring fname)
#endif
- if (keyFile.has_key("GUI", "UseIconNoText")) {
- UseIconNoText = keyFile.get_boolean("GUI", "UseIconNoText");
- }
-
if (keyFile.has_key("GUI", "HistogramWorking")) {
rtSettings.HistogramWorking = keyFile.get_boolean("GUI", "HistogramWorking");
}
@@ -2096,7 +2094,6 @@ void Options::saveToFile(Glib::ustring fname)
keyFile.set_boolean ("GUI", "ShowFilmStripToolBar", showFilmStripToolBar);
keyFile.set_boolean ("GUI", "FileBrowserToolbarSingleRow", FileBrowserToolbarSingleRow);
keyFile.set_boolean ("GUI", "HideTPVScrollbar", hideTPVScrollbar);
- keyFile.set_boolean ("GUI", "UseIconNoText", UseIconNoText);
keyFile.set_boolean ("GUI", "HistogramWorking", rtSettings.HistogramWorking);
keyFile.set_integer ("GUI", "CurveBBoxPosition", curvebboxpos);
diff --git a/rtgui/options.h b/rtgui/options.h
index c7d38a302..24e97e243 100644
--- a/rtgui/options.h
+++ b/rtgui/options.h
@@ -44,15 +44,46 @@
#define DEFPROFILE_DYNAMIC "Dynamic"
struct SaveFormat {
+ SaveFormat(
+ const Glib::ustring& _format,
+ int _png_bits,
+ int _jpeg_quality,
+ int _jpeg_sub_samp,
+ int _tiff_bits,
+ bool _tiff_float,
+ bool _tiff_uncompressed,
+ bool _save_params
+ ) :
+ format(_format),
+ pngBits(_png_bits),
+ jpegQuality(_jpeg_quality),
+ jpegSubSamp(_jpeg_sub_samp),
+ tiffBits(_tiff_bits),
+ tiffFloat(_tiff_float),
+ tiffUncompressed(_tiff_uncompressed),
+ saveParams(_save_params)
+ {
+ }
+ SaveFormat(
+ const Glib::ustring& _format,
+ int _png_bits,
+ int _tiff_bits,
+ bool _tiff_float
+ ) :
+ SaveFormat(
+ _format,
+ _png_bits,
+ 90,
+ 2,
+ _tiff_bits,
+ _tiff_float,
+ true,
+ true
+ )
+ {
+ }
SaveFormat() :
- format ("jpg"),
- pngBits (8),
- jpegQuality (90),
- jpegSubSamp (2),
- tiffBits (8),
- tiffFloat(false),
- tiffUncompressed (true),
- saveParams (true)
+ SaveFormat("jpg", 8, 8, false)
{
}
@@ -265,7 +296,6 @@ public:
int histogramDrawMode;
bool FileBrowserToolbarSingleRow;
bool hideTPVScrollbar;
- bool UseIconNoText;
int whiteBalanceSpotSize;
int curvebboxpos; // 0=above, 1=right, 2=below, 3=left
@@ -276,7 +306,7 @@ public:
int cropPPI;
enum CropGuidesMode { CROP_GUIDE_NONE, CROP_GUIDE_FRAME, CROP_GUIDE_FULL };
CropGuidesMode cropGuides;
- bool cropAutoFit;
+ bool cropAutoFit;
// Performance options
Glib::ustring clutsDir;
diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc
index 556360bda..6b192dba9 100644
--- a/rtgui/partialpastedlg.cc
+++ b/rtgui/partialpastedlg.cc
@@ -133,6 +133,7 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
//---
raw_ca_autocorrect = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWCACORR_AUTO")));
raw_caredblue = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWCACORR_CAREDBLUE")));
+ raw_ca_avoid_colourshift = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT")));
Gtk::VBox* vboxes[8];
Gtk::HSeparator* hseps[8];
@@ -247,6 +248,7 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
vboxes[7]->pack_start (*Gtk::manage (new Gtk::HSeparator ()), Gtk::PACK_SHRINK, 0);
vboxes[7]->pack_start (*raw_ca_autocorrect, Gtk::PACK_SHRINK, 2);
vboxes[7]->pack_start (*raw_caredblue, Gtk::PACK_SHRINK, 2);
+ vboxes[7]->pack_start (*raw_ca_avoid_colourshift, Gtk::PACK_SHRINK, 2);
Gtk::VBox* vbCol1 = Gtk::manage (new Gtk::VBox ());
Gtk::VBox* vbCol2 = Gtk::manage (new Gtk::VBox ());
@@ -393,6 +395,7 @@ PartialPasteDlg::PartialPasteDlg (const Glib::ustring &title, Gtk::Window* paren
//---
raw_ca_autocorrectConn = raw_ca_autocorrect->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
raw_caredblueConn = raw_caredblue->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
+ raw_ca_avoid_colourshiftconn = raw_ca_avoid_colourshift->signal_toggled().connect (sigc::bind (sigc::mem_fun(*raw, &Gtk::CheckButton::set_inconsistent), true));
add_button (M("GENERAL_OK"), Gtk::RESPONSE_OK);
add_button (M("GENERAL_CANCEL"), Gtk::RESPONSE_CANCEL);
@@ -464,6 +467,7 @@ void PartialPasteDlg::rawToggled ()
ConnectionBlocker ff_ClipControlBlocker(ff_ClipControlConn);
ConnectionBlocker raw_ca_autocorrectBlocker(raw_ca_autocorrectConn);
ConnectionBlocker raw_caredblueBlocker(raw_caredblueConn);
+ ConnectionBlocker raw_ca_avoid_colourshiftBlocker(raw_ca_avoid_colourshiftconn);
raw->set_inconsistent (false);
@@ -492,6 +496,7 @@ void PartialPasteDlg::rawToggled ()
ff_ClipControl->set_active (raw->get_active ());
raw_ca_autocorrect->set_active (raw->get_active ());
raw_caredblue->set_active (raw->get_active ());
+ raw_ca_avoid_colourshift->set_active (raw->get_active ());
}
void PartialPasteDlg::basicToggled ()
@@ -909,6 +914,10 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param
filterPE.raw.cablue = falsePE.raw.cablue;
}
+ if (!raw_ca_avoid_colourshift->get_active ()) {
+ filterPE.raw.ca_avoidcolourshift = falsePE.raw.ca_avoidcolourshift;
+ }
+
if (!raw_hotpix_filt->get_active ()) {
filterPE.raw.hotPixelFilter = falsePE.raw.hotPixelFilter;
}
diff --git a/rtgui/partialpastedlg.h b/rtgui/partialpastedlg.h
index 7f903730b..5195d0756 100644
--- a/rtgui/partialpastedlg.h
+++ b/rtgui/partialpastedlg.h
@@ -105,6 +105,7 @@ public:
Gtk::CheckButton* raw_black;
Gtk::CheckButton* raw_ca_autocorrect;
Gtk::CheckButton* raw_caredblue;
+ Gtk::CheckButton* raw_ca_avoid_colourshift;
Gtk::CheckButton* raw_hotpix_filt;
Gtk::CheckButton* raw_deadpix_filt;
Gtk::CheckButton* raw_pdaf_lines_filter;
@@ -136,7 +137,7 @@ public:
sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, prsharpeningConn, perspectiveConn, commonTransConn;
sigc::connection metadataConn, exifchConn, iptcConn, icmConn;
sigc::connection df_fileConn, df_AutoSelectConn, ff_fileConn, ff_AutoSelectConn, ff_BlurRadiusConn, ff_BlurTypeConn, ff_ClipControlConn;
- sigc::connection raw_caredblueConn, raw_ca_autocorrectConn, raw_hotpix_filtConn, raw_deadpix_filtConn, raw_pdaf_lines_filterConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_methodConn, raw_borderConn, raw_imagenumConn, raw_dcb_iterationsConn, raw_lmmse_iterationsConn, raw_pixelshiftConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn;
+ sigc::connection raw_caredblueConn, raw_ca_autocorrectConn, raw_ca_avoid_colourshiftconn, raw_hotpix_filtConn, raw_deadpix_filtConn, raw_pdaf_lines_filterConn, raw_linenoiseConn, raw_greenthreshConn, raw_ccStepsConn, raw_methodConn, raw_borderConn, raw_imagenumConn, raw_dcb_iterationsConn, raw_lmmse_iterationsConn, raw_pixelshiftConn, raw_dcb_enhanceConn, raw_exposConn, raw_preserConn, raw_blackConn;
public:
PartialPasteDlg (const Glib::ustring &title, Gtk::Window* parent);
diff --git a/rtgui/perspective.cc b/rtgui/perspective.cc
index 1ca6e54b6..4bfcc1d7b 100644
--- a/rtgui/perspective.cc
+++ b/rtgui/perspective.cc
@@ -39,6 +39,9 @@ PerspCorrection::PerspCorrection () : FoldableToolPanel(this, "perspective", M("
pack_start (*horiz);
pack_start (*vert);
+ horiz->setLogScale(2, 0);
+ vert->setLogScale(2, 0);
+
show_all();
}
diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc
index 2f8341494..8a387e6fd 100644
--- a/rtgui/preferences.cc
+++ b/rtgui/preferences.cc
@@ -952,11 +952,8 @@ Gtk::Widget* Preferences::getGeneralPanel()
ckbHideTPVScrollbar->set_active(false);
ckbHideTPVScrollbar->set_sensitive(false);
#endif
- ckbUseIconNoText = Gtk::manage(new Gtk::CheckButton(M("PREFERENCES_TP_USEICONORTEXT")));
- setExpandAlignProperties(ckbUseIconNoText, false, false, Gtk::ALIGN_START, Gtk::ALIGN_BASELINE);
workflowGrid->attach_next_to(*hb4label, *ckbFileBrowserToolbarSingleRow, Gtk::POS_BOTTOM, 1, 1);
workflowGrid->attach_next_to(*ckbHideTPVScrollbar, *hb4label, Gtk::POS_RIGHT, 1, 1);
- workflowGrid->attach_next_to(*ckbUseIconNoText, *ckbHideTPVScrollbar, Gtk::POS_RIGHT, 1, 1);
ckbAutoSaveTpOpen = Gtk::manage(new Gtk::CheckButton(M("PREFERENCES_AUTOSAVE_TP_OPEN")));
workflowGrid->attach_next_to(*ckbAutoSaveTpOpen, *hb4label, Gtk::POS_BOTTOM, 1, 1);
btnSaveTpOpenNow = Gtk::manage(new Gtk::Button(M("PREFERENCES_SAVE_TP_OPEN_NOW")));
@@ -1783,7 +1780,6 @@ void Preferences::storePreferences()
moptions.showdelimspot = ckbShowdelimspot->get_active();
moptions.hideTPVScrollbar = ckbHideTPVScrollbar->get_active();
moptions.overwriteOutputFile = chOverwriteOutputFile->get_active();
- moptions.UseIconNoText = ckbUseIconNoText->get_active();
moptions.autoSaveTpOpen = ckbAutoSaveTpOpen->get_active();
@@ -1990,7 +1986,6 @@ void Preferences::fillPreferences()
ckbShowFilmStripToolBar->set_active(moptions.showFilmStripToolBar);
ckbShowdelimspot->set_active(moptions.showdelimspot);
ckbHideTPVScrollbar->set_active(moptions.hideTPVScrollbar);
- ckbUseIconNoText->set_active(moptions.UseIconNoText);
ckbAutoSaveTpOpen->set_active(moptions.autoSaveTpOpen);
@@ -2373,11 +2368,6 @@ void Preferences::workflowUpdate()
parent->updateTPVScrollbar(moptions.hideTPVScrollbar);
}
- if (moptions.UseIconNoText != options.UseIconNoText) {
- // Update the tool's tab titles
- parent->updateTabsUsesIcons(moptions.UseIconNoText);
- }
-
if (moptions.FileBrowserToolbarSingleRow != options.FileBrowserToolbarSingleRow) {
// Update the position of the Query toolbar
parent->updateFBQueryTB(moptions.FileBrowserToolbarSingleRow);
diff --git a/rtgui/preferences.h b/rtgui/preferences.h
index c2ed34817..9b5c84b8d 100644
--- a/rtgui/preferences.h
+++ b/rtgui/preferences.h
@@ -201,7 +201,6 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener
Gtk::CheckButton* ckbShowFilmStripToolBar;
Gtk::CheckButton* ckbShowdelimspot;
Gtk::CheckButton* ckbHideTPVScrollbar;
- Gtk::CheckButton* ckbUseIconNoText;
Gtk::CheckButton* ckbAutoSaveTpOpen;
Gtk::Button* btnSaveTpOpenNow;
diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc
index 37f01cfcf..44186bc70 100644
--- a/rtgui/rawcacorrection.cc
+++ b/rtgui/rawcacorrection.cc
@@ -28,8 +28,8 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM
{
auto m = ProcEventMapper::getInstance();
EvPreProcessCAAutoiterations = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_AUTOIT");
- EvPreProcessCAColourshift = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_COLOURSHIFT");
- EvPreProcessCAColourshiftHistory = m->newEvent(M_VOID, "HISTORY_MSG_RAWCACORR_COLOURSHIFT");
+ EvPreProcessCAColourshift = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_COLORSHIFT");
+ EvPreProcessCAColourshiftHistory = m->newEvent(M_VOID, "HISTORY_MSG_RAWCACORR_COLORSHIFT");
Gtk::Image* icaredL = Gtk::manage (new RTImage ("circle-red-cyan-small.png"));
Gtk::Image* icaredR = Gtk::manage (new RTImage ("circle-cyan-red-small.png"));
@@ -46,7 +46,7 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM
caAutoiterations->delay = options.adjusterMaxDelay;
}
- caRed = Gtk::manage(new Adjuster (M("TP_RAWCACORR_CARED"), -8.0, 8.0, 0.1, 0, icaredL, icaredR));
+ caRed = Gtk::manage(new Adjuster (M("TP_RAWCACORR_CARED"), -4.0, 4.0, 0.1, 0, icaredL, icaredR));
caRed->setAdjusterListener (this);
if (caRed->delay < options.adjusterMaxDelay) {
@@ -63,6 +63,9 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM
caBlue->show();
+ caRed->setLogScale(10, 0);
+ caBlue->setLogScale(10, 0);
+
pack_start( *caAutocorrect, Gtk::PACK_SHRINK, 4);
pack_start( *caAutoiterations, Gtk::PACK_SHRINK, 4);
pack_start( *caRed, Gtk::PACK_SHRINK, 4);
diff --git a/rtgui/rawexposure.cc b/rtgui/rawexposure.cc
index 56fcf7ec9..a705ed4ca 100644
--- a/rtgui/rawexposure.cc
+++ b/rtgui/rawexposure.cc
@@ -45,6 +45,8 @@ RAWExposure::RAWExposure () : FoldableToolPanel(this, "rawexposure", M("TP_EXPOS
pack_start( *PexPos, Gtk::PACK_SHRINK, 4);//exposi
// raw highlight exposure setting is obsolete, removing from GUI
//pack_start( *PexPreser, Gtk::PACK_SHRINK, 4);
+
+ PexPos->setLogScale(100, 0);
}
void RAWExposure::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
diff --git a/rtgui/rotate.cc b/rtgui/rotate.cc
index 802519d8d..481b65139 100644
--- a/rtgui/rotate.cc
+++ b/rtgui/rotate.cc
@@ -44,6 +44,8 @@ Rotate::Rotate () : FoldableToolPanel(this, "rotate", M("TP_ROTATE_LABEL"))
selectStraight->signal_pressed().connect( sigc::mem_fun(*this, &Rotate::selectStraightPressed) );
+ degree->setLogScale(2, 0);
+
show_all ();
}
diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc
index 8541504f8..a52fd1ba5 100644
--- a/rtgui/rtwindow.cc
+++ b/rtgui/rtwindow.cc
@@ -232,6 +232,7 @@ RTWindow::RTWindow ()
Gtk::Button* iccProfileCreator = Gtk::manage (new Gtk::Button ());
setExpandAlignProperties (iccProfileCreator, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
+ iccProfileCreator->set_relief(Gtk::RELIEF_NONE);
iccProfileCreator->set_image (*Gtk::manage (new RTImage ("gamut-plus.png")));
iccProfileCreator->set_tooltip_markup (M ("MAIN_BUTTON_ICCPROFCREATOR"));
iccProfileCreator->signal_clicked().connect ( sigc::mem_fun (*this, &RTWindow::showICCProfileCreator) );
@@ -240,6 +241,7 @@ RTWindow::RTWindow ()
//Gtk::Button* preferences = Gtk::manage (new Gtk::Button (M("MAIN_BUTTON_PREFERENCES")+"..."));
Gtk::Button* preferences = Gtk::manage (new Gtk::Button ());
setExpandAlignProperties (preferences, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
+ preferences->set_relief(Gtk::RELIEF_NONE);
preferences->set_image (*Gtk::manage (new RTImage ("preferences.png")));
preferences->set_tooltip_markup (M ("MAIN_BUTTON_PREFERENCES"));
preferences->signal_clicked().connect ( sigc::mem_fun (*this, &RTWindow::showPreferences) );
@@ -247,6 +249,7 @@ RTWindow::RTWindow ()
//btn_fullscreen = Gtk::manage( new Gtk::Button(M("MAIN_BUTTON_FULLSCREEN")));
btn_fullscreen = Gtk::manage ( new Gtk::Button());
setExpandAlignProperties (btn_fullscreen, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
+ btn_fullscreen->set_relief(Gtk::RELIEF_NONE);
btn_fullscreen->set_tooltip_markup (M ("MAIN_BUTTON_FULLSCREEN"));
btn_fullscreen->set_image (*iFullscreen);
btn_fullscreen->signal_clicked().connect ( sigc::mem_fun (*this, &RTWindow::toggle_fullscreen) );
@@ -901,19 +904,6 @@ void RTWindow::updateTPVScrollbar (bool hide)
}
}
-void RTWindow::updateTabsUsesIcons (bool useIcons)
-{
- fpanel->updateTabsUsesIcons (useIcons);
-
- if (epanel) {
- epanel->updateTabsUsesIcons (useIcons);
- }
-
- for (auto panel : epanels) {
- panel.second->updateTabsUsesIcons (useIcons);
- }
-}
-
void RTWindow::updateFBQueryTB (bool singleRow)
{
fpanel->fileCatalog->updateFBQueryTB (singleRow);
diff --git a/rtgui/rtwindow.h b/rtgui/rtwindow.h
index 7bb818c7c..d5c13d515 100644
--- a/rtgui/rtwindow.h
+++ b/rtgui/rtwindow.h
@@ -110,7 +110,6 @@ public:
void updateProfiles (const Glib::ustring &printerProfile, rtengine::RenderingIntent printerIntent, bool printerBPC);
void updateTPVScrollbar (bool hide);
void updateHistogramPosition (int oldPosition, int newPosition);
- void updateTabsUsesIcons (bool useIcons);
void updateFBQueryTB (bool singleRow);
void updateFBToolBarVisibility (bool showFilmStripToolBar);
bool getIsFullscreen()
diff --git a/rtgui/saveformatpanel.cc b/rtgui/saveformatpanel.cc
index 755cb9239..b147c5d70 100644
--- a/rtgui/saveformatpanel.cc
+++ b/rtgui/saveformatpanel.cc
@@ -16,10 +16,28 @@
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see .
*/
+#include
+#include
+
#include "saveformatpanel.h"
#include "multilangmgr.h"
#include "guiutils.h"
+namespace
+{
+
+const std::array, 7> sf_templates = {{
+ {"JPEG (8-bit)", SaveFormat("jpg", 8, 8, false)},
+ {"TIFF (8-bit)", SaveFormat("tif", 8, 8, false)},
+ {"TIFF (16-bit)", SaveFormat("tif", 8, 16, false)},
+ {"TIFF (16-bit float)", SaveFormat("tif", 8, 16, true)},
+ {"TIFF (32-bit float)", SaveFormat("tif", 8, 32, true)},
+ {"PNG (8-bit)", SaveFormat("png", 8, 8, false)},
+ {"PNG (16-bit)", SaveFormat("png", 16, 8, false)}
+}};
+
+}
+
SaveFormatPanel::SaveFormatPanel () : listener (nullptr)
{
@@ -37,21 +55,9 @@ SaveFormatPanel::SaveFormatPanel () : listener (nullptr)
setExpandAlignProperties(format, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER);
format->signal_changed ().connect (sigc::mem_fun (*this, &SaveFormatPanel::formatChanged));
- format->append ("JPEG (8-bit)");
- format->append ("TIFF (8-bit)");
- format->append ("TIFF (16-bit)");
- format->append ("TIFF (16-bit float)");
- format->append ("TIFF (32-bit float)");
- format->append ("PNG (8-bit)");
- format->append ("PNG (16-bit)");
-
- fstr[0] = "jpg";
- fstr[1] = "tif";
- fstr[2] = "tif";
- fstr[3] = "tif";
- fstr[4] = "tif";
- fstr[5] = "png";
- fstr[6] = "png";
+ for (const auto& sf_template : sf_templates) {
+ format->append(sf_template.first);
+ }
hb1->attach (*flab, 0, 0, 1, 1);
hb1->attach (*format, 1, 0, 1, 1);
@@ -118,75 +124,71 @@ SaveFormatPanel::~SaveFormatPanel ()
void SaveFormatPanel::init (SaveFormat &sf)
{
-
- FormatChangeListener* tmp = listener;
+ FormatChangeListener* const tmp = listener;
listener = nullptr;
- if (sf.format == "jpg") {
- format->set_active (0);
- } else if (sf.format == "png" && sf.pngBits == 16) {
- format->set_active (6);
- } else if (sf.format == "png" && sf.pngBits == 8) {
- format->set_active (5);
- } else if (sf.format == "tif" && sf.tiffBits == 32) {
- format->set_active (4);
- } else if (sf.format == "tif" && sf.tiffBits == 16 && sf.tiffFloat) {
- format->set_active (3);
- } else if (sf.format == "tif" && sf.tiffBits == 16) {
- format->set_active (2);
- } else if (sf.format == "tif" && sf.tiffBits == 8) {
- format->set_active (1);
+ std::pair index;
+
+ for (std::size_t i = 0; i < sf_templates.size(); ++i) {
+ // Without relating the other SaveFormat fields to the
+ // SaveFormat::format by additional logic the best
+ // way is computing a weight for fitting the input
+ // to one of the sf_templates.
+ // The format field must match exactly, tiffBits,
+ // tiffFloat, and pngBits fields all weigh the same.
+ // By providing sane sets of parameters in getFormat()
+ // we have perfect matches. If the parameters were
+ // tampered with, some entry within SaveFormat::format
+ // will be selected, which will be consistent again.
+
+ const int weight =
+ 10 * (sf.format == sf_templates[i].second.format)
+ + (sf.tiffBits == sf_templates[i].second.tiffBits)
+ + (sf.tiffFloat == sf_templates[i].second.tiffFloat)
+ + (sf.pngBits == sf_templates[i].second.pngBits);
+
+ if (weight > index.first) {
+ index = {weight, i};
+ }
}
- jpegSubSamp->set_active (sf.jpegSubSamp - 1);
+ format->set_active(index.second);
+
+ jpegSubSamp->set_active(sf.jpegSubSamp - 1);
+ jpegQual->setValue(sf.jpegQuality);
+ savesPP->set_active(sf.saveParams);
+ tiffUncompressed->set_active(sf.tiffUncompressed);
- jpegQual->setValue (sf.jpegQuality);
- savesPP->set_active (sf.saveParams);
- tiffUncompressed->set_active (sf.tiffUncompressed);
listener = tmp;
}
SaveFormat SaveFormatPanel::getFormat ()
{
-
SaveFormat sf;
- int sel = format->get_active_row_number();
- sf.format = fstr[sel];
+ const unsigned int sel = format->get_active_row_number();
- if (sel == 6) {
- sf.pngBits = 16;
- } else {
- sf.pngBits = 8;
+ if (sel < sf_templates.size()) {
+ sf = sf_templates[sel].second;
}
- if (sel == 2 || sel == 3) {
- sf.tiffBits = 16;
- } else if (sel == 4) {
- sf.tiffBits = 32;
- } else {
- sf.tiffBits = 8;
- }
-
- sf.tiffFloat = sel == 4 || sel == 3;
-
- sf.jpegQuality = (int) jpegQual->getValue ();
- sf.jpegSubSamp = jpegSubSamp->get_active_row_number() + 1;
+ sf.jpegQuality = jpegQual->getValue();
+ sf.jpegSubSamp = jpegSubSamp->get_active_row_number() + 1;
sf.tiffUncompressed = tiffUncompressed->get_active();
- sf.saveParams = savesPP->get_active ();
+ sf.saveParams = savesPP->get_active();
+
return sf;
}
void SaveFormatPanel::formatChanged ()
{
+ const unsigned int act = format->get_active_row_number();
- int act = format->get_active_row_number();
-
- if (act < 0 || act > 6) {
+ if (act >= sf_templates.size()) {
return;
}
- Glib::ustring fr = fstr[act];
+ const Glib::ustring& fr = sf_templates[act].second.format;
if (fr == "jpg") {
jpegOpts->show_all();
@@ -206,14 +208,13 @@ void SaveFormatPanel::formatChanged ()
void SaveFormatPanel::adjusterChanged (Adjuster* a, double newval)
{
+ const unsigned int act = format->get_active_row_number();
- int act = format->get_active_row_number();
-
- if (act < 0 || act > 4) {
+ if (act >= sf_templates.size()) {
return;
}
if (listener) {
- listener->formatChanged (fstr[act]);
+ listener->formatChanged(sf_templates[act].second.format);
}
}
diff --git a/rtgui/saveformatpanel.h b/rtgui/saveformatpanel.h
index 788593d9e..47011be18 100644
--- a/rtgui/saveformatpanel.h
+++ b/rtgui/saveformatpanel.h
@@ -44,7 +44,6 @@ protected:
Gtk::Grid* jpegOpts;
Gtk::Label* jpegSubSampLabel;
FormatChangeListener* listener;
- Glib::ustring fstr[7];
Gtk::CheckButton* savesPP;
diff --git a/rtgui/thumbnail.cc b/rtgui/thumbnail.cc
index 46c34e284..68bd8987f 100644
--- a/rtgui/thumbnail.cc
+++ b/rtgui/thumbnail.cc
@@ -38,7 +38,7 @@ using namespace rtengine::procparams;
Thumbnail::Thumbnail (CacheManager* cm, const Glib::ustring& fname, CacheImageData* cf)
: fname(fname), cfs(*cf), cachemgr(cm), ref(1), enqueueNumber(0), tpp(nullptr),
- pparamsValid(false), needsReProcessing(true), imageLoading(false), lastImg(nullptr),
+ pparamsValid(false), imageLoading(false), lastImg(nullptr),
lastW(0), lastH(0), lastScale(0), initial_(false)
{
@@ -66,7 +66,7 @@ Thumbnail::Thumbnail (CacheManager* cm, const Glib::ustring& fname, CacheImageDa
Thumbnail::Thumbnail (CacheManager* cm, const Glib::ustring& fname, const std::string& md5)
: fname(fname), cachemgr(cm), ref(1), enqueueNumber(0), tpp(nullptr), pparamsValid(false),
- needsReProcessing(true), imageLoading(false), lastImg(nullptr),
+ imageLoading(false), lastImg(nullptr),
lastW(0), lastH(0), lastScale(0.0), initial_(true)
{
@@ -156,7 +156,6 @@ void Thumbnail::_generateThumbnailImage ()
tpp->getAutoWBMultipliers(cfs.redAWBMul, cfs.greenAWBMul, cfs.blueAWBMul);
_saveThumbnail ();
cfs.supported = true;
- needsReProcessing = true;
cfs.save (getCacheFileName ("data", ".txt"));
@@ -369,7 +368,6 @@ void Thumbnail::clearProcParams (int whoClearedIt)
cfs.recentlySaved = false;
pparamsValid = false;
- needsReProcessing = true;
//TODO: run though customprofilebuilder?
// probably not as this is the only option to set param values to default
@@ -414,7 +412,7 @@ void Thumbnail::clearProcParams (int whoClearedIt)
}
}
-bool Thumbnail::hasProcParams ()
+bool Thumbnail::hasProcParams () const
{
return pparamsValid;
@@ -422,26 +420,50 @@ bool Thumbnail::hasProcParams ()
void Thumbnail::setProcParams (const ProcParams& pp, ParamsEdited* pe, int whoChangedIt, bool updateCacheNow)
{
+ const bool needsReprocessing =
+ pparams.toneCurve != pp.toneCurve
+ || pparams.labCurve != pp.labCurve
+ || pparams.localContrast != pp.localContrast
+ || pparams.rgbCurves != pp.rgbCurves
+ || pparams.colorToning != pp.colorToning
+ || pparams.vibrance != pp.vibrance
+ || pparams.wb != pp.wb
+ || pparams.colorappearance != pp.colorappearance
+ || pparams.epd != pp.epd
+ || pparams.fattal != pp.fattal
+ || pparams.sh != pp.sh
+ || pparams.crop != pp.crop
+ || pparams.coarse != pp.coarse
+ || pparams.commonTrans != pp.commonTrans
+ || pparams.rotate != pp.rotate
+ || pparams.distortion != pp.distortion
+ || pparams.lensProf != pp.lensProf
+ || pparams.perspective != pp.perspective
+ || pparams.gradient != pp.gradient
+ || pparams.pcvignette != pp.pcvignette
+ || pparams.cacorrection != pp.cacorrection
+ || pparams.vignetting != pp.vignetting
+ || pparams.chmixer != pp.chmixer
+ || pparams.blackwhite != pp.blackwhite
+ || pparams.icm != pp.icm
+ || pparams.hsvequalizer != pp.hsvequalizer
+ || pparams.filmSimulation != pp.filmSimulation
+ || pparams.softlight != pp.softlight;
{
MyMutex::MyLock lock(mutex);
- if (pparams.sharpening.threshold.isDouble() != pp.sharpening.threshold.isDouble()) {
- printf("WARNING: Sharpening different!\n");
- }
-
- if (pparams.vibrance.psthreshold.isDouble() != pp.vibrance.psthreshold.isDouble()) {
- printf("WARNING: Vibrance different!\n");
- }
-
if (pparams != pp) {
cfs.recentlySaved = false;
+ } else if (pparamsValid && !updateCacheNow) {
+ // nothing to do
+ return;
}
// do not update rank, colorlabel and inTrash
- int rank = getRank();
- int colorlabel = getColorLabel();
- int inTrash = getStage();
+ const int rank = getRank();
+ const int colorlabel = getColorLabel();
+ const int inTrash = getStage();
if (pe) {
pe->combine(pparams, pp, true);
@@ -450,24 +472,24 @@ void Thumbnail::setProcParams (const ProcParams& pp, ParamsEdited* pe, int whoCh
}
pparamsValid = true;
- needsReProcessing = true;
setRank(rank);
setColorLabel(colorlabel);
setStage(inTrash);
if (updateCacheNow) {
- updateCache ();
+ updateCache();
}
-
} // end of mutex lock
- for (size_t i = 0; i < listeners.size(); i++) {
- listeners[i]->procParamsChanged (this, whoChangedIt);
+ if (needsReprocessing) {
+ for (size_t i = 0; i < listeners.size(); i++) {
+ listeners[i]->procParamsChanged (this, whoChangedIt);
+ }
}
}
-bool Thumbnail::isRecentlySaved ()
+bool Thumbnail::isRecentlySaved () const
{
return cfs.recentlySaved;
@@ -496,17 +518,17 @@ void Thumbnail::imageRemovedFromQueue ()
enqueueNumber--;
}
-bool Thumbnail::isEnqueued ()
+bool Thumbnail::isEnqueued () const
{
return enqueueNumber > 0;
}
-bool Thumbnail::isPixelShift ()
+bool Thumbnail::isPixelShift () const
{
return cfs.isPixelShift;
}
-bool Thumbnail::isHDR ()
+bool Thumbnail::isHDR () const
{
return cfs.isHDR;
}
@@ -695,13 +717,13 @@ void Thumbnail::generateExifDateTimeStrings ()
dateTimeString = ostr.str ();
}
-const Glib::ustring& Thumbnail::getExifString ()
+const Glib::ustring& Thumbnail::getExifString () const
{
return exifString;
}
-const Glib::ustring& Thumbnail::getDateTimeString ()
+const Glib::ustring& Thumbnail::getDateTimeString () const
{
return dateTimeString;
@@ -799,7 +821,6 @@ int Thumbnail::infoFromImage (const Glib::ustring& fname, std::unique_ptrgetCamWB (temp, green);
@@ -143,7 +142,7 @@ public:
}
ThFileType getType ();
- Glib::ustring getFileName ()
+ Glib::ustring getFileName () const
{
return fname;
}
@@ -155,12 +154,12 @@ public:
{
return &cfs;
}
- std::string getMD5 ()
+ std::string getMD5 () const
{
return cfs.md5;
}
- int getRank ()
+ int getRank () const
{
return pparams.rank;
}
@@ -172,7 +171,7 @@ public:
}
}
- int getColorLabel ()
+ int getColorLabel () const
{
return pparams.colorlabel;
}
@@ -184,7 +183,7 @@ public:
}
}
- int getStage ()
+ int getStage () const
{
return pparams.inTrash;
}
diff --git a/rtgui/tonecurve.cc b/rtgui/tonecurve.cc
index 5205d6f18..19326be26 100644
--- a/rtgui/tonecurve.cc
+++ b/rtgui/tonecurve.cc
@@ -106,6 +106,7 @@ ToneCurve::ToneCurve () : FoldableToolPanel(this, "tonecurve", M("TP_EXPOSURE_LA
pack_start (*Gtk::manage (new Gtk::HSeparator()));
expcomp = Gtk::manage (new Adjuster (M("TP_EXPOSURE_EXPCOMP"), -5, 12, 0.05, 0));
+ expcomp->setLogScale(2, 0, true);
pack_start (*expcomp);
//----------- Highlight recovery & threshold -------------
@@ -116,6 +117,7 @@ ToneCurve::ToneCurve () : FoldableToolPanel(this, "tonecurve", M("TP_EXPOSURE_LA
//----------- Black Level & Compression -------------------
black = Gtk::manage (new Adjuster (M("TP_EXPOSURE_BLACKLEVEL"), -16384, 32768, 50, 0));
+ black->setLogScale(10, 0, true);
pack_start (*black);
shcompr = Gtk::manage (new Adjuster (M("TP_EXPOSURE_COMPRSHADOWS"), 0, 100, 1, 50));
pack_start (*shcompr);
@@ -130,6 +132,10 @@ ToneCurve::ToneCurve () : FoldableToolPanel(this, "tonecurve", M("TP_EXPOSURE_LA
saturation = Gtk::manage (new Adjuster (M("TP_EXPOSURE_SATURATION"), -100, 100, 1, 0));
pack_start (*saturation);
+ brightness->setLogScale(2, 0, true);
+ contrast->setLogScale(2, 0, true);
+ saturation->setLogScale(2, 0, true);
+
//----------- Curve 1 ------------------------------
pack_start (*Gtk::manage (new Gtk::HSeparator()));
diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc
index 138512674..015f633d0 100644
--- a/rtgui/toolpanelcoord.cc
+++ b/rtgui/toolpanelcoord.cc
@@ -209,18 +209,16 @@ ToolPanelCoordinator::ToolPanelCoordinator(bool batch) : ipc(nullptr), hasChange
rawPanel->pack_start(*Gtk::manage(new Gtk::HSeparator), Gtk::PACK_SHRINK, 0);
rawPanel->pack_start(*vbPanelEnd[4], Gtk::PACK_SHRINK, 0);
+ toiE = Gtk::manage (new TextOrIcon ("exposure.png", M ("MAIN_TAB_EXPOSURE"), M ("MAIN_TAB_EXPOSURE_TOOLTIP")));
+ toiD = Gtk::manage (new TextOrIcon ("detail.png", M ("MAIN_TAB_DETAIL"), M ("MAIN_TAB_DETAIL_TOOLTIP")));
+ toiC = Gtk::manage (new TextOrIcon ("color-circles.png", M ("MAIN_TAB_COLOR"), M ("MAIN_TAB_COLOR_TOOLTIP")));
+ toiW = Gtk::manage (new TextOrIcon ("atom.png", M ("MAIN_TAB_ADVANCED"), M ("MAIN_TAB_ADVANCED_TOOLTIP")));
+ toiL = Gtk::manage(new TextOrIcon("hand-open.png", M("MAIN_TAB_LOCALLAB"), M("MAIN_TAB_LOCALLAB_TOOLTIP")));
+ toiT = Gtk::manage (new TextOrIcon ("transform.png", M ("MAIN_TAB_TRANSFORM"), M ("MAIN_TAB_TRANSFORM_TOOLTIP")));
+ toiR = Gtk::manage (new TextOrIcon ("bayer.png", M ("MAIN_TAB_RAW"), M ("MAIN_TAB_RAW_TOOLTIP")));
+ toiM = Gtk::manage (new TextOrIcon ("metadata.png", M ("MAIN_TAB_METADATA"), M ("MAIN_TAB_METADATA_TOOLTIP")));
- TOITypes type = options.UseIconNoText ? TOI_ICON : TOI_TEXT;
- toiE = Gtk::manage(new TextOrIcon("exposure.png", M("MAIN_TAB_EXPOSURE"), M("MAIN_TAB_EXPOSURE_TOOLTIP"), type));
- toiD = Gtk::manage(new TextOrIcon("detail.png", M("MAIN_TAB_DETAIL"), M("MAIN_TAB_DETAIL_TOOLTIP"), type));
- toiC = Gtk::manage (new TextOrIcon ("color-circles.png", M ("MAIN_TAB_COLOR"), M ("MAIN_TAB_COLOR_TOOLTIP"), type));
- toiW = Gtk::manage (new TextOrIcon ("atom.png", M ("MAIN_TAB_ADVANCED"), M ("MAIN_TAB_ADVANCED_TOOLTIP"), type));
- toiL = Gtk::manage(new TextOrIcon("hand-open.png", M("MAIN_TAB_LOCALLAB"), M("MAIN_TAB_LOCALLAB_TOOLTIP"), type));
-
- toiT = Gtk::manage(new TextOrIcon("transform.png", M("MAIN_TAB_TRANSFORM"), M("MAIN_TAB_TRANSFORM_TOOLTIP"), type));
- toiR = Gtk::manage (new TextOrIcon ("bayer.png", M ("MAIN_TAB_RAW"), M ("MAIN_TAB_RAW_TOOLTIP"), type));
- toiM = Gtk::manage (new TextOrIcon ("metadata.png", M ("MAIN_TAB_METADATA"), M ("MAIN_TAB_METADATA_TOOLTIP"), type));
toolPanelNotebook->append_page(*exposurePanelSW, *toiE);
toolPanelNotebook->append_page(*detailsPanelSW, *toiD);
@@ -916,33 +914,12 @@ void ToolPanelCoordinator::updateVScrollbars(bool hide)
}
}
-void ToolPanelCoordinator::updateTabsHeader(bool useIcons)
-{
- GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
- TOITypes type = useIcons ? TOI_ICON : TOI_TEXT;
-
- toiE->switchTo(type);
- toiD->switchTo(type);
- toiC->switchTo(type);
- toiT->switchTo(type);
- toiR->switchTo(type);
- toiL->switchTo(type);
-
- if (toiM) {
- toiM->switchTo(type);
- }
-}
void ToolPanelCoordinator::updateTPVScrollbar(bool hide)
{
updateVScrollbars(hide);
}
-void ToolPanelCoordinator::updateTabsUsesIcons(bool useIcons)
-{
- updateTabsHeader(useIcons);
-}
-
void ToolPanelCoordinator::toolSelected(ToolMode tool)
{
GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected
diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h
index 987fdbad2..9b7ef6088 100644
--- a/rtgui/toolpanelcoord.h
+++ b/rtgui/toolpanelcoord.h
@@ -195,7 +195,6 @@ protected:
void addPanel(Gtk::Box* where, FoldableToolPanel* panel, int level = 1);
void foldThemAll(GdkEventButton* event);
void updateVScrollbars(bool hide);
- void updateTabsHeader(bool useIcons);
private:
@@ -301,7 +300,6 @@ public:
}
void updateTPVScrollbar(bool hide);
- void updateTabsUsesIcons(bool useIcons);
bool handleShortcutKey(GdkEventKey* event);
// ToolBarListener interface
diff --git a/rtgui/whitebalance.cc b/rtgui/whitebalance.cc
index 99a564a85..681ac16c2 100644
--- a/rtgui/whitebalance.cc
+++ b/rtgui/whitebalance.cc
@@ -315,6 +315,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB
temp = Gtk::manage (new Adjuster (M("TP_WBALANCE_TEMPERATURE"), MINTEMP, MAXTEMP, 5, CENTERTEMP, itempL, itempR, &wbSlider2Temp, &wbTemp2Slider));
green = Gtk::manage (new Adjuster (M("TP_WBALANCE_GREEN"), MINGREEN, MAXGREEN, 0.001, 1.0, igreenL, igreenR));
+ green->setLogScale(10, 1, true);
equal = Gtk::manage (new Adjuster (M("TP_WBALANCE_EQBLUERED"), MINEQUAL, MAXEQUAL, 0.001, 1.0, iblueredL, iblueredR));
tempBias = Gtk::manage (new Adjuster(M("TP_WBALANCE_TEMPBIAS"), -0.5, 0.5, 0.01, 0.0, itempbiasL, itempbiasR));
cache_customTemp (0);
@@ -689,6 +690,8 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited)
set_inconsistent(multiImage && !pedited->wb.enabled);
}
+ green->setLogScale(10, green->getValue(), true);
+
methconn.block (false);
enableListener ();
}
@@ -794,6 +797,8 @@ void WhiteBalance::setWB (int vtemp, double vgreen)
if (listener) {
listener->panelChanged (EvWBTemp, Glib::ustring::compose("%1, %2", (int)temp->getValue(), Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), green->getValue())));
}
+
+ green->setLogScale(10, vgreen, true);
}
void WhiteBalance::setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd, bool tempbiasadd)
diff --git a/rtgui/xtransrawexposure.cc b/rtgui/xtransrawexposure.cc
index 84fae9032..480112537 100644
--- a/rtgui/xtransrawexposure.cc
+++ b/rtgui/xtransrawexposure.cc
@@ -53,6 +53,10 @@ XTransRAWExposure::XTransRAWExposure () : FoldableToolPanel(this, "xtransrawexpo
pack_start( *PexBlackRed, Gtk::PACK_SHRINK, 0);//black
pack_start( *PexBlackGreen, Gtk::PACK_SHRINK, 0);//black
pack_start( *PexBlackBlue, Gtk::PACK_SHRINK, 0);//black
+
+ PexBlackRed->setLogScale(100, 0);
+ PexBlackGreen->setLogScale(100, 0);
+ PexBlackBlue->setLogScale(100, 0);
}
void XTransRAWExposure::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh
index 20a140ce5..e5c9d0bd3 100644
--- a/tools/osx/macosx_bundle.sh
+++ b/tools/osx/macosx_bundle.sh
@@ -125,10 +125,15 @@ find -E "${LIB}" -type f -regex '.*\.(a|la|cache)$' | while read -r; do rm "${RE
msg "Copying configuration files from ${GTK_PREFIX}:"
install -d "${ETC}/gtk-3.0"
-cp "${GTK_PREFIX}/etc/gtk-3.0/im-multipress.conf" "${ETC}/gtk-3.0"
-"${GTK_PREFIX}/bin/gdk-pixbuf-query-loaders" "${LIB}"/gdk-pixbuf-2.0/*/loaders/*.so > "${ETC}/gtk-3.0/gdk-pixbuf.loaders"
-"${GTK_PREFIX}/bin/gtk-query-immodules-3.0" "${LIB}"/gtk-3.0/*/immodules/*.so > "${ETC}/gtk-3.0/gtk.immodules"
-#sed -i "" -e "s|${PWD}|/tmp|" "${ETC}/gtk-3.0/gdk-pixbuf.loaders" "${ETC}/gtk-3.0/gtk.immodules"
+
+# Make Frameworks folder flat
+mv "${LIB}"/gdk-pixbuf-2.0/2*/loaders/*.so "${LIB}"
+mv "${LIB}"/gtk-3.0/3*/immodules/*.so "${LIB}"
+rm -r "${LIB}"/gtk-3.0
+rm -r "${LIB}"/gdk-pixbuf-2.0
+
+"${GTK_PREFIX}/bin/gdk-pixbuf-query-loaders" "${LIB}"/libpix*.so > "${ETC}/gtk-3.0/gdk-pixbuf.loaders"
+"${GTK_PREFIX}/bin/gtk-query-immodules-3.0" "${LIB}"/{im*.so,libprint*.so} > "${ETC}/gtk-3.0/gtk.immodules"
sed -i "" -e "s|${PWD}/RawTherapee.app/Contents/|@executable_path/../|" "${ETC}/gtk-3.0/gdk-pixbuf.loaders" "${ETC}/gtk-3.0/gtk.immodules"
ditto {"${GTK_PREFIX}","${RESOURCES}"}/share/glib-2.0/schemas
@@ -147,13 +152,6 @@ done
ditto {"${GTK_PREFIX}","${RESOURCES}"}/share/icons/Adwaita/index.theme
"${GTK_PREFIX}/bin/gtk-update-icon-cache-3.0" "${RESOURCES}/share/icons/Adwaita"
-### Pending deletion:
-# fontconfig files (X11 backend only)
-# if otool -L "${EXECUTABLE}" | grep -sq 'libgtk-x11-2.0'; then
-# msg "Installing fontconfig files (Using X11 backend. FONTCONFIG_PATH will be set by executable loader.)"
-# cp -RL "${GTK_PREFIX}/etc/fonts" "${ETC}"
-# fi
-
# Copy the Lensfun database into the app bundle
mkdir -p "${RESOURCES}/share/lensfun"
cp /opt/local/share/lensfun/version_2/* "${RESOURCES}/share/lensfun"
@@ -201,8 +199,11 @@ s|@arch@|${arch}|" \
"${CONTENTS}/Info.plist"
plutil -convert binary1 "${CONTENTS}/Info.plist"
-
-
+# Sign the app
+CODESIGNID="$(cmake .. -LA -N | grep "CODESIGNID" | cut -d "=" -f2)"
+codesign --deep --force -v -s "${CODESIGNID}" "${APP}"
+spctl -a -vvvv "${APP}"
+
function CreateDmg {
local srcDir="$(mktemp -dt $$)"
@@ -229,6 +230,9 @@ function CreateDmg {
msg "Creating disk image:"
hdiutil create -format UDBZ -srcdir "${srcDir}" -volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" "${dmg_name}.dmg"
+ # Sign disk image
+ codesign --deep --force -v -s "${CODESIGNID}" "${dmg_name}.dmg"
+
# Zip disk image for redistribution
zip "${dmg_name}.zip" "${dmg_name}.dmg" AboutThisBuild.txt
rm "${dmg_name}.dmg"
diff --git a/tools/win/InnoSetup/WindowsInnoSetup.iss.in b/tools/win/InnoSetup/WindowsInnoSetup.iss.in
index 11601a53d..b9b3aa8ec 100644
--- a/tools/win/InnoSetup/WindowsInnoSetup.iss.in
+++ b/tools/win/InnoSetup/WindowsInnoSetup.iss.in
@@ -24,6 +24,7 @@
#define MyAppPublisher "rawtherapee.com"
#define MyAppURL "http://www.rawtherapee.com/"
#define MyAppExeName "rawtherapee.exe"
+#define MyAppCliExeName "rawtherapee-cli.exe"
#define MyBuildBasePath "${CMAKE_INSTALL_PREFIX}"
#define MySourceBasePath "${PROJECT_SOURCE_DIR}"
#define MyBitDepth "${BUILD_BIT_DEPTH}"
@@ -85,6 +86,8 @@ Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl"
[Tasks]
+Name: "userinstall"; Description: "Only me (Single User Install)"; GroupDescription: "Install RawTherapee for:"; Flags: exclusive unchecked
+Name: "commoninstall"; Description: "Anyone who uses this computer (Multi-User Install)"; GroupDescription: "Install RawTherapee for:"; Flags: exclusive; Check: IsElevatedUser
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
;Name: "desktopicon\common"; Description: "For all users"; GroupDescription: "Additional icons:"; Flags: exclusive
;Name: "desktopicon\user"; Description: "For the current user only"; GroupDescription: "Additional icons:"; Flags: exclusive unchecked
@@ -122,14 +125,31 @@ Source: "{#MyBuildBasePath}\fonts\DroidSansMonoSlashed.ttf"; DestDir: "{fonts}";
Name: "{group}\{#MyAppName} {#MyAppVersion}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName} {#MyAppVersion}}"; Filename: "{uninstallexe}"
-Name: "{commondesktop}\{#MyAppName} {#MyAppVersion}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
+Name: "{commondesktop}\{#MyAppName} {#MyAppVersion}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon and commoninstall
+Name: "{userdesktop}\{#MyAppName} {#MyAppVersion}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon and userinstall
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName} {#MyAppVersion}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
[Registry]
-Root: HKCU; Subkey: "SOFTWARE\Classes\Directory\shell\Browse with RawTherapee"; ValueType: string; ValueData: "Browse with RawTherapee"; Flags: uninsdeletekey; Tasks: regBrowseFolder
-Root: HKCU; Subkey: "SOFTWARE\Classes\Directory\shell\Browse with RawTherapee\command"; ValueType: string; ValueData: "{app}\{#MyAppExeName} -w ""%1"""; Flags: uninsdeletekey; Tasks: regBrowseFolder
-Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\Open with RawTherapee"; ValueType: string; ValueData: "Open with RawTherapee"; Flags: uninsdeletekey; Tasks: regOpenFile
-Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\Open with RawTherapee\command"; ValueType: string; ValueData: "{app}\{#MyAppExeName} -R ""%1"""; Flags: uninsdeletekey; Tasks: regOpenFile
+Root: HKCU; Subkey: "SOFTWARE\Classes\Directory\shell\Browse with RawTherapee"; ValueType: string; ValueData: "Browse with RawTherapee"; Flags: uninsdeletekey; Tasks: regBrowseFolder and userinstall
+Root: HKCU; Subkey: "SOFTWARE\Classes\Directory\shell\Browse with RawTherapee\command"; ValueType: string; ValueData: "{app}\{#MyAppExeName} -w ""%1"""; Flags: uninsdeletekey; Tasks: regBrowseFolder and userinstall
+Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\Open with RawTherapee"; ValueType: string; ValueData: "Open with RawTherapee"; Flags: uninsdeletekey; Tasks: regOpenFile and userinstall
+Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\Open with RawTherapee\command"; ValueType: string; ValueData: "{app}\{#MyAppExeName} -R ""%1"""; Flags: uninsdeletekey; Tasks: regOpenFile and userinstall
+Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueData: "{app}\{#MyAppExeName}"; Flags: uninsdeletekey; Tasks: userinstall
+Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppCliExeName}"; ValueType: string; ValueData: "{app}\{#MyAppCliExeName}"; Flags: uninsdeletekey; Tasks: userinstall
+
+Root: HKLM; Subkey: "SOFTWARE\Classes\Directory\shell\Browse with RawTherapee"; ValueType: string; ValueData: "Browse with RawTherapee"; Flags: uninsdeletekey; Tasks: regBrowseFolder and commoninstall
+Root: HKLM; Subkey: "SOFTWARE\Classes\Directory\shell\Browse with RawTherapee\command"; ValueType: string; ValueData: "{app}\{#MyAppExeName} -w ""%1"""; Flags: uninsdeletekey; Tasks: regBrowseFolder and commoninstall
+Root: HKLM; Subkey: "SOFTWARE\Classes\*\shell\Open with RawTherapee"; ValueType: string; ValueData: "Open with RawTherapee"; Flags: uninsdeletekey; Tasks: regOpenFile and commoninstall
+Root: HKLM; Subkey: "SOFTWARE\Classes\*\shell\Open with RawTherapee\command"; ValueType: string; ValueData: "{app}\{#MyAppExeName} -R ""%1"""; Flags: uninsdeletekey; Tasks: regOpenFile and commoninstall
+Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueData: "{app}\{#MyAppExeName}"; Flags: uninsdeletekey; Tasks: commoninstall
+Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppCliExeName}"; ValueType: string; ValueData: "{app}\{#MyAppCliExeName}"; Flags: uninsdeletekey; Tasks: commoninstall
+
+[Code]
+function IsElevatedUser(): Boolean;
+begin
+Result := IsAdminLoggedOn or IsPowerUserLoggedOn;
+end;
+
\ No newline at end of file