diff --git a/AUTHORS.txt b/AUTHORS.txt
index 6aebfcf6e..3dc820555 100644
--- a/AUTHORS.txt
+++ b/AUTHORS.txt
@@ -15,6 +15,7 @@ Developement contributors, in last name alphabetical order:
Flössie
Jean-Christophe Frisch
Ilias Giarimis
+ Alberto Griggio
Steve Herrell
Philippe Hupé
Wolfgang Kuehnel
diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala
index 5fc720cfa..991d99479 100644
--- a/rtdata/languages/Catala
+++ b/rtdata/languages/Catala
@@ -1280,6 +1280,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -2033,6 +2034,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!TP_WAVELET_TON;Toning
!TP_WBALANCE_EQBLUERED;Blue/Red equalizer
!TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behavior of "white balance" by modulating the blue/red balance.\nThis can be useful when shooting conditions:\na) are far from the standard illuminant (e.g. underwater),\nb) are far from conditions where calibrations were performed,\nc) where the matrices or ICC profiles are unsuitable.
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
!TP_WBALANCE_WATER_HEADER;UnderWater
diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified)
index 64631d2b8..af56b7dd1 100644
--- a/rtdata/languages/Chinese (Simplified)
+++ b/rtdata/languages/Chinese (Simplified)
@@ -1197,6 +1197,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -1310,7 +1311,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELDSDIR;Flat-fields directory
!PREFERENCES_FLATFIELDSHOTS;shots
@@ -1380,7 +1381,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files
@@ -2041,5 +2042,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!TP_WBALANCE_LED_LSI;LSI Lumelex 2040
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: Alt-f
diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional)
index 90933541f..65abab6de 100644
--- a/rtdata/languages/Chinese (Traditional)
+++ b/rtdata/languages/Chinese (Traditional)
@@ -934,6 +934,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1116,7 +1117,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
!PREFERENCES_FLATFIELDFOUND;Found
@@ -1190,7 +1191,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files
@@ -2030,6 +2031,8 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_WBALANCE_SOLUX41;Solux 4100K
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech
index 6fa1fa8f7..08efca6cb 100644
--- a/rtdata/languages/Czech
+++ b/rtdata/languages/Czech
@@ -2070,3 +2070,10 @@ ZOOMPANEL_ZOOMFITSCREEN;Přizpůsobit obrázek obrazovce\nZkratka: f
ZOOMPANEL_ZOOMIN;Přiblížit\nZkratka: +
ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
+!!!!!!!!!!!!!!!!!!!!!!!!!
+! Untranslated keys follow; remove the ! prefix after an entry is translated.
+!!!!!!!!!!!!!!!!!!!!!!!!!
+
+!HISTORY_MSG_444;WB - Temp bias
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk
index 1aa0d3788..0726bf930 100644
--- a/rtdata/languages/Dansk
+++ b/rtdata/languages/Dansk
@@ -930,6 +930,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1114,7 +1115,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
!PREFERENCES_FLATFIELDFOUND;Found
@@ -1188,7 +1189,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files
@@ -2029,6 +2030,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_WBALANCE_SOLUX41;Solux 4100K
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch
index 13da1e9fc..0cdfd7437 100644
--- a/rtdata/languages/Deutsch
+++ b/rtdata/languages/Deutsch
@@ -33,6 +33,7 @@
#32 2016-12-29 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1464
#33 2017-01-04 Erweiterung/Korrekturen/Soft-Proofing (TooWaBoo) RT4.2.1477
#34 2017-01-07 IPTC (TooWaBoo) RT4.2.1492
+#35 2017-02-18 AWB bias (TooWaBoo)
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Danksagungen
@@ -707,6 +708,7 @@ HISTORY_MSG_440;(Detailebenenkontrast)\nProzessreihenfolge
HISTORY_MSG_441;(Retinex) - Einstellungen\nVerstärkung und Ausgleich\nTransmissionsverstärkung
HISTORY_MSG_442;(Retinex) - Einstellungen\nTransmission - Skalierung
HISTORY_MSG_443;(Farbmanagement)\nAusgabeprofil\nSchwarzpunkt-Kompensation
+HISTORY_MSG_444;(Weißabgleich)\nAWB-Temperatur-Korrektur
HISTORY_NEWSNAPSHOT;Hinzufügen
HISTORY_NEWSNAPSHOT_TOOLTIP;Taste: Alt + s
HISTORY_SNAPSHOT;Schnappschuss
@@ -2054,6 +2056,8 @@ TP_WBALANCE_SOLUX41;Solux 4100K
TP_WBALANCE_SOLUX47;Solux 4700K (Vendor)
TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
TP_WBALANCE_SPOTWB;Manuell setzen
+TP_WBALANCE_TEMPBIAS;AWB-Temperatur-Korrektur
+TP_WBALANCE_TEMPBIAS_TOOLTIP;Prozentuale Korrektur der Farbtemperatur des automatischen\nWeißabgleichs in Richtung wärmer oder kälter.\nDer Korreturwert berechnet sich aus:\nAWB-Temperatur + AWB-Temperatur * AWB-Temperatur-Korrektur
TP_WBALANCE_TEMPERATURE;Farbtemperatur
TP_WBALANCE_TUNGSTEN;Glühlampe
TP_WBALANCE_WATER1;Unterwasser 1
diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK)
index bf4734453..cb0bfa7ad 100644
--- a/rtdata/languages/English (UK)
+++ b/rtdata/languages/English (UK)
@@ -758,6 +758,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT;Add
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!HISTORY_SNAPSHOT;Snapshot
@@ -1018,7 +1019,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PREFERENCES_EXPAUT;Expert
!PREFERENCES_EXTERNALEDITOR;External Editor
!PREFERENCES_FBROWSEROPTS;File Browser / Thumbnail Options
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILEFORMAT;File format
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1112,7 +1113,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTLANG;Select language
!PREFERENCES_SELECTTHEME;Select theme
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
@@ -2023,6 +2024,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
!TP_WBALANCE_SPOTWB;Spot WB
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TEMPERATURE;Temperature
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US)
index d5a0e16f2..f9aa862f4 100644
--- a/rtdata/languages/English (US)
+++ b/rtdata/languages/English (US)
@@ -676,6 +676,7 @@
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT;Add
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!HISTORY_SNAPSHOT;Snapshot
@@ -947,7 +948,7 @@
!PREFERENCES_EXPAUT;Expert
!PREFERENCES_EXTERNALEDITOR;External Editor
!PREFERENCES_FBROWSEROPTS;File Browser / Thumbnail Options
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILEFORMAT;File format
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
@@ -1048,7 +1049,7 @@
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SELECTLANG;Select language
!PREFERENCES_SELECTTHEME;Select theme
@@ -2023,6 +2024,8 @@
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
!TP_WBALANCE_SPOTWB;Spot WB
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TEMPERATURE;Temperature
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol
index f9763dadb..3cd36a01f 100644
--- a/rtdata/languages/Espanol
+++ b/rtdata/languages/Espanol
@@ -1674,6 +1674,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -2100,4 +2101,6 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out.
!TP_WAVELET_TMTYPE;Compression method
!TP_WAVELET_TON;Toning
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: Alt-f
diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara
index fb1b452dc..7dce64cdf 100644
--- a/rtdata/languages/Euskara
+++ b/rtdata/languages/Euskara
@@ -930,6 +930,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1114,7 +1115,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
!PREFERENCES_FLATFIELDFOUND;Found
@@ -1188,7 +1189,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files
@@ -2029,6 +2030,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_WBALANCE_SOLUX41;Solux 4100K
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index 937ac0927..d1031f359 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -2035,3 +2035,10 @@ ZOOMPANEL_ZOOMFITSCREEN;Affiche l'image entière\nRaccourci: f
ZOOMPANEL_ZOOMIN;Zoom Avant\nRaccourci: +
ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
+!!!!!!!!!!!!!!!!!!!!!!!!!
+! Untranslated keys follow; remove the ! prefix after an entry is translated.
+!!!!!!!!!!!!!!!!!!!!!!!!!
+
+!HISTORY_MSG_444;WB - Temp bias
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek
index f57acf41a..e71a2c1e0 100644
--- a/rtdata/languages/Greek
+++ b/rtdata/languages/Greek
@@ -929,6 +929,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1113,7 +1114,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
!PREFERENCES_FLATFIELDFOUND;Found
@@ -1187,7 +1188,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files
@@ -2028,6 +2029,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_WBALANCE_SOLUX41;Solux 4100K
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew
index 0ed0c41bf..d0a5d9023 100644
--- a/rtdata/languages/Hebrew
+++ b/rtdata/languages/Hebrew
@@ -930,6 +930,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1114,7 +1115,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
!PREFERENCES_FLATFIELDFOUND;Found
@@ -1188,7 +1189,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files
@@ -2029,6 +2030,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_WBALANCE_SOLUX41;Solux 4100K
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano
index 613a29301..ae60b9303 100644
--- a/rtdata/languages/Italiano
+++ b/rtdata/languages/Italiano
@@ -1547,6 +1547,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -2041,4 +2042,6 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out.
!TP_WAVELET_TMTYPE;Compression method
!TP_WAVELET_TON;Toning
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: Alt-f
diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese
index 0ba1b52e4..c879c649c 100644
--- a/rtdata/languages/Japanese
+++ b/rtdata/languages/Japanese
@@ -1925,6 +1925,7 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -2071,3 +2072,5 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!TP_RETINEX_VIEW_TRAN;Transmission - Auto
!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian
index bb9c63ea4..4594b8250 100644
--- a/rtdata/languages/Latvian
+++ b/rtdata/languages/Latvian
@@ -930,6 +930,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1114,7 +1115,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
!PREFERENCES_FLATFIELDFOUND;Found
@@ -1188,7 +1189,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files
@@ -2029,6 +2030,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_WBALANCE_SOLUX41;Solux 4100K
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar
index b2ae35fbe..1188f5344 100644
--- a/rtdata/languages/Magyar
+++ b/rtdata/languages/Magyar
@@ -1209,6 +1209,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -2036,6 +2037,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!TP_WAVELET_TON;Toning
!TP_WBALANCE_EQBLUERED;Blue/Red equalizer
!TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behavior of "white balance" by modulating the blue/red balance.\nThis can be useful when shooting conditions:\na) are far from the standard illuminant (e.g. underwater),\nb) are far from conditions where calibrations were performed,\nc) where the matrices or ICC profiles are unsuitable.
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
!TP_WBALANCE_WATER_HEADER;UnderWater
diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands
index adb37a61f..636efe1ad 100644
--- a/rtdata/languages/Nederlands
+++ b/rtdata/languages/Nederlands
@@ -2004,6 +2004,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -2058,3 +2059,5 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce transmission map to achieve luminance.\nAbscissa: transmission -min from 0, mean, and values (max).\nOrdinate: gain.
!TP_RETINEX_SKAL;Scale
!TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM
index 40ed600c9..2525bb55e 100644
--- a/rtdata/languages/Norsk BM
+++ b/rtdata/languages/Norsk BM
@@ -929,6 +929,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1113,7 +1114,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
!PREFERENCES_FLATFIELDFOUND;Found
@@ -1187,7 +1188,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files
@@ -2028,6 +2029,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_WBALANCE_SOLUX41;Solux 4100K
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish
index bbe23f2fd..6493ba694 100644
--- a/rtdata/languages/Polish
+++ b/rtdata/languages/Polish
@@ -1631,6 +1631,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -2047,3 +2048,5 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out.
!TP_WAVELET_TMTYPE;Compression method
!TP_WAVELET_TON;Toning
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters)
index fd1205a7d..ce490653c 100644
--- a/rtdata/languages/Polish (Latin Characters)
+++ b/rtdata/languages/Polish (Latin Characters)
@@ -1631,6 +1631,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -2047,3 +2048,5 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out.
!TP_WAVELET_TMTYPE;Compression method
!TP_WAVELET_TON;Toning
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil)
index 4643008f1..a08f2453d 100644
--- a/rtdata/languages/Portugues (Brasil)
+++ b/rtdata/languages/Portugues (Brasil)
@@ -930,6 +930,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1114,7 +1115,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
!PREFERENCES_FLATFIELDFOUND;Found
@@ -1188,7 +1189,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files
@@ -2029,6 +2030,8 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!TP_WBALANCE_SOLUX41;Solux 4100K
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian
index 120d17530..9ed2b940b 100644
--- a/rtdata/languages/Russian
+++ b/rtdata/languages/Russian
@@ -1490,6 +1490,7 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -2043,4 +2044,6 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out.
!TP_WAVELET_TMTYPE;Compression method
!TP_WAVELET_TON;Toning
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: Alt-f
diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters)
index 6797ab195..648a123e2 100644
--- a/rtdata/languages/Serbian (Cyrilic Characters)
+++ b/rtdata/languages/Serbian (Cyrilic Characters)
@@ -1657,6 +1657,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -2176,4 +2177,6 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out.
!TP_WAVELET_TMTYPE;Compression method
!TP_WAVELET_TON;Toning
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: Alt-f
diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters)
index 1a86a552a..49f5eee27 100644
--- a/rtdata/languages/Serbian (Latin Characters)
+++ b/rtdata/languages/Serbian (Latin Characters)
@@ -1657,6 +1657,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -2176,4 +2177,6 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out.
!TP_WAVELET_TMTYPE;Compression method
!TP_WAVELET_TON;Toning
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: Alt-f
diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak
index 8e7957cf4..4fbe51c42 100644
--- a/rtdata/languages/Slovak
+++ b/rtdata/languages/Slovak
@@ -993,6 +993,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1164,7 +1165,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and Wavelet Levels tools use a Debauchies mother wavelet. If you choose D6 instead of D4 you increase the number of orthogonal Daubechies coefficients and probably increase quality of small-scale levels. There is no memory or processing time difference between the two.
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
!PREFERENCES_FLATFIELDFOUND;Found
@@ -2037,6 +2038,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!TP_WBALANCE_SOLUX41;Solux 4100K
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi
index d92c71c88..aeed6500f 100644
--- a/rtdata/languages/Suomi
+++ b/rtdata/languages/Suomi
@@ -931,6 +931,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1115,7 +1116,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
!PREFERENCES_FLATFIELDFOUND;Found
@@ -1189,7 +1190,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files
@@ -2029,6 +2030,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_WBALANCE_SOLUX41;Solux 4100K
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish
index d98dabc24..b25ebf2a5 100644
--- a/rtdata/languages/Swedish
+++ b/rtdata/languages/Swedish
@@ -1918,6 +1918,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_427;Output rendering intent
!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_444;WB - Temp bias
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
!IPTCPANEL_COPYRIGHT;Copyright notice
@@ -2043,3 +2044,5 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements.
!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out.
!TP_WAVELET_TON;Toning
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish
index 2e64516f1..e9da40531 100644
--- a/rtdata/languages/Turkish
+++ b/rtdata/languages/Turkish
@@ -930,6 +930,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!HISTORY_MSG_441;Retinex - Gain transmission
!HISTORY_MSG_442;Retinex - Scale
!HISTORY_MSG_443;Output Black Point Compensation
+!HISTORY_MSG_444;WB - Temp bias
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider.
!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image.
@@ -1114,7 +1115,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!PREFERENCES_DIRDARKFRAMES;Dark-frames directory
!PREFERENCES_EDITORLAYOUT;Editor Layout
!PREFERENCES_EXPAUT;Expert
-!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar (de-select for low resolution display)
+!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display)
!PREFERENCES_FILMSIMULATION;Film Simulation
!PREFERENCES_FLATFIELD;Flat-Field
!PREFERENCES_FLATFIELDFOUND;Found
@@ -1188,7 +1189,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
!PREFERENCES_RGBDTL_TOOLTIP;Leave the setting at "0" to automatically use as many threads as possible. The more threads run in parallel, the faster the computation. Refer to RawPedia for memory requirements.
-!PREFERENCES_SELECTFONT;Select global font
+!PREFERENCES_SELECTFONT;Select main font
!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files
@@ -2028,6 +2029,8 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_WBALANCE_SOLUX41;Solux 4100K
!TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
!TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
+!TP_WBALANCE_TEMPBIAS;AWB temperature bias
+!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
!TP_WBALANCE_TUNGSTEN;Tungsten
!TP_WBALANCE_WATER1;UnderWater 1
!TP_WBALANCE_WATER2;UnderWater 2
diff --git a/rtdata/languages/default b/rtdata/languages/default
index d21857d98..ad076de69 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -742,6 +742,7 @@ HISTORY_MSG_507;Local - LH Curve
HISTORY_MSG_508;Local - Enable super
HISTORY_MSG_509;Local - CC curve
HISTORY_MSG_510;Local - curve method
+HISTORY_MSG_411;WB - Temp bias
HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
HISTORY_SNAPSHOT;Snapshot
@@ -2181,6 +2182,8 @@ TP_WBALANCE_SOLUX41;Solux 4100K
TP_WBALANCE_SOLUX47;Solux 4700K (vendor)
TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery)
TP_WBALANCE_SPOTWB;Spot WB
+TP_WBALANCE_TEMPBIAS;AWB temperature bias
+TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias".
TP_WBALANCE_TEMPERATURE;Temperature
TP_WBALANCE_TUNGSTEN;Tungsten
TP_WBALANCE_WATER1;UnderWater 1
diff --git a/rtdata/themes/TooWaBlue-Dark-GTK3-20_.css b/rtdata/themes/TooWaBlue-Dark-GTK3-20_.css
index 43d9a3035..9472f4b3d 100644
--- a/rtdata/themes/TooWaBlue-Dark-GTK3-20_.css
+++ b/rtdata/themes/TooWaBlue-Dark-GTK3-20_.css
@@ -2,7 +2,7 @@
This file is part of RawTherapee.
Copyright (c) 2016-2017 TooWaBoo
- Version 2.42 - requires RT 5.0
+ Version 2.44 - requires RT 5.0
RawTherapee is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -105,7 +105,7 @@ messagedialog {
}
tooltip {
background-color: @bg-tooltip;
- border: 1px solid @border-tooltip;
+ border: 0.08334em solid @border-tooltip;
border-radius: 0.33334em;
padding: 0;
margin: 0;
@@ -180,7 +180,7 @@ frame > border {
dialog frame > border {
padding: 0.5em;
border-radius: 0;
- border: 1px solid @border-color;
+ border: 0.08334em solid @border-color;
background-color: transparent;
margin: 0 -0.5em;
}
@@ -241,11 +241,11 @@ textview:selected, treeview:selected {
}
#RightNotebook > stack > :nth-child(3) treeview {
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
border-bottom: none;
}
-#PlacesPaned > :nth-child(1) treeview {
+#PlacesPaned > box:nth-child(1) treeview {
padding: 0.08334em 0 0.08334em 0.5em;
-gtk-icon-style: symbolic;
}
@@ -275,15 +275,15 @@ textview:selected, treeview:selected {
margin-bottom: 0.41667em;
}
-#PlacesPaned > box:nth-child(3) > :nth-child(2),
+#PlacesPaned > box:nth-child(3) > box:nth-child(2),
#PlacesPaned > box:nth-child(1) > :nth-child(1),
#HistoryPanel > border,
#Snapshots > box > :nth-child(1) {
- padding: 1px;
background-color: @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
}
-/*Corrects the space for the snapshot view of the paned separator*/
+/*Corrects the space of the snapshot view to the paned separator*/
#Snapshots {
margin-top: -0.33334em;
}
@@ -321,11 +321,11 @@ filechooser box {
}
filechooser > box > paned > box {
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
background-color: @bg-dark-grey;
}
filechooser placessidebar {
- padding: 0 1px;
+ padding: 0 0.08334em;
background-color: @bg-dark-grey;
}
@@ -362,7 +362,7 @@ filechooser list row:selected {
}
#HistogramArea,
#HistogramRGBArea {
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
background-color: @bg-dark-grey;
}
@@ -372,7 +372,7 @@ filechooser list row:selected {
margin: 0;
border-color: @bg-light-grey;
border-style: solid;
- border-width: 0 0 0 1px;
+ border-width: 0 0 0 0.08334em;
background-color: @bg-dark-grey;
background-image: none;
box-shadow: none;
@@ -385,7 +385,7 @@ filechooser list row:selected {
}
#EditorLeftPaned #fullButton,
#EditorLeftPaned #histButton {
- border-width: 0 1px 0 0;
+ border-width: 0 0.08334em 0 0;
}
/*** end ***************************************************************************************/
@@ -467,8 +467,8 @@ menu separator {
/*** PartialPaste ******************************************************************************/
#PartialPaste {
- border-bottom: 1px solid @border-color;
- border-top: 1px solid @border-color;
+ border-bottom: 0.08334em solid @border-color;
+ border-top: 0.08334em solid @border-color;
padding-top: 0.5em;
padding-bottom: 0.5em;
}
@@ -518,10 +518,10 @@ scrollbar:not(.overlay-indicator) {
background-color: rgba(0,0,0,.30);
}
scrollbar:not(.overlay-indicator).horizontal {
- border-width: 0 1px 1px 1px;
+ border-width: 0 0.08334em 0.08334em 0.08334em;
}
scrollbar:not(.overlay-indicator).vertical {
- border-width: 1px 1px 1px 0;
+ border-width: 0.08334em 0.08334em 0.08334em 0;
}
scrollbar:not(.overlay-indicator) slider {
background-color: shade(@text-color, .9);
@@ -593,7 +593,7 @@ scale slider {
margin: calc(-0.33334em - 1px);
border-radius: 0.83334em;
background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85));
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
box-shadow: none;
}
scale slider:hover {
@@ -603,14 +603,14 @@ scale slider:hover {
scale trough {
margin: 0.5em; /* has to be half of "scale slider / min-width min-height*/
background-color: @bg-scale-entry;
- border-color: @bg-dark-grey;
- box-shadow: inset 0 1px rgba(255, 255, 255, 0.11), 0 1px rgba(242, 242, 242, 0.11);
+ border: 0.08334em solid @bg-dark-grey;
+ box-shadow: inset 0 0.08334em rgba(255, 255, 255, 0.11), 0 0.08334em rgba(242, 242, 242, 0.11);
border-radius: 0.5em;
}
scale:not(:disabled) trough highlight {
background-color: @accent-color2;
- border-color: @bg-dark-grey;
- box-shadow: inset 0 1px shade(@accent-color2, 1.3);
+ border: 0.08334em solid @bg-dark-grey;
+ box-shadow: inset 0 0.08334em shade(@accent-color2, 1.3);
border-radius: 0.5em;
}
@@ -671,7 +671,7 @@ progressbar.horizontal trough progress {
#IopsPanel progressbar.horizontal trough {
min-height: 0.5em;
background-color: @bg-scale-entry;
- border: 1px solid @bg-button-border;
+ border: 0.08334em solid @bg-button-border;
margin-top: 0.25em;
}
#IopsPanel progressbar.horizontal trough progress {
@@ -770,8 +770,9 @@ dialog notebook stack {
#MainNotebook > stack {
padding: 0.41667em;
}
-#MainNotebook > stack > :nth-child(2) > :nth-child(2) {
- margin-bottom: 0.33334em;
+
+#MainNotebook > stack > :nth-child(2) > box:nth-child(3) {
+ margin-top: 0.41667em;
}
@@ -801,10 +802,11 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
background-color: @bg-grey;
padding: 0;
}
-#RightNotebook > stack > :nth-child(3),
-#RightNotebook > stack > :nth-child(4) {
+
+#RightNotebook > stack > :nth-child(3) > * > box,
+#RightNotebook > stack > :nth-child(4) > * > box {
padding: 0.5em;
- border: 1px solid @bg-entry-border;
+ border: 0.08334em solid @bg-entry-border;
}
#PrefNotebook header {
@@ -813,8 +815,9 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
#AboutNotebook header {
margin: -0.66667em -0.66667em 0.66667em;
}
-#AboutNotebook stack > * > * > * {
- background-color: @dark-grey;
+
+#AboutNotebook stack text {
+ background-color: @bg-dark-grey;
}
/* All tool panels have a frame except for Meta which unlike the rest is a notebook itself.
@@ -873,7 +876,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
margin: 0;
}
#MetaPanelNotebook .view {
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
padding: 0.16667em;
margin: 0;
}
@@ -894,8 +897,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
min-width: 1.66667em;
}
#MetaPanelNotebook > stack > box > grid > button {
- margin-top: 1px;
- margin-bottom: 1px;
+ margin-top: 0.08334em;
+ margin-bottom: 0.08334em;
min-height: 2.16667em;
}
@@ -908,7 +911,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
/*** File Browser ******************************************************************************/
#FileCatalog {
background-color: @bg-image;
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
}
#FileCatalog:selected {
background-color: @accent-color3;
@@ -949,7 +952,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
min-width: 1.66667em;
margin: 0 0 0 -1.66667em;
border-radius: 0 0.2em 0.2em 0;
- border: 1px solid transparent;
+ border: 0.08334em solid transparent;
padding: 0;
}
#ToolBarPanelFileBrowser entry,
@@ -972,25 +975,17 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
#BeforeAfterContainer {
background-color: @bg-grey;
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
border-radius: 0;
padding: 0;
margin: 0.41667em 0;
}
-#BeforeAfterContainer > box:nth-child(1) frame {
- background-color: @bg-image;
- border-top: 1px solid @bg-dark-grey;
- border-radius: 0;
- padding: 0;
- margin: -1px 0 0 0;
+#BeforeAfterContainer > box:nth-child(2) > box:nth-child(2),
+#BeforeAfterContainer > box:nth-child(1) > box:nth-child(2){
+ border-top: 0.08334em solid @bg-dark-grey;
}
-#BeforeAfterContainer > box:nth-child(2) frame {
- background-color: @bg-image;
- border-top: 1px solid @bg-dark-grey;
- border-left: 1px solid @bg-dark-grey;
- border-radius: 0;
- padding: 0;
- margin: -1px 0 0 0;
+#BeforeAfterContainer > box:nth-child(2){
+ border-left: 0.08334em solid @bg-dark-grey;
}
#BeforeAfterContainer label {
@@ -1000,8 +995,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
/* Small Lock Button */
#BeforeAfterContainer button {
min-height: 1.66667em;
- min-width: 1.66667em;
- margin: 0.25em 0 0.33334em;
+ min-width: 1.75em;
+ margin: 0.25em;
padding: 0 0 0 0.08334em;
}
/**/
@@ -1034,7 +1029,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
min-width: 0;
margin: 0 0.16667em;
padding: 0 0.16667em;
- border: 1px solid transparent;
+ border: 0.08334em solid transparent;
background-color: transparent;
background-image: none;
box-shadow: none;
@@ -1042,13 +1037,13 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
#EditorTopPanel > box > box > button:hover {
background-color: transparent;
background-image: none;
- border: 1px solid transparent;
+ border: 0.08334em solid transparent;
box-shadow: none;
}
#EditorTopPanel > box > box > button:checked {
background-color: transparent;
background-image: none;
- border: 1px solid @bg-button-border;
+ border: 0.08334em solid @bg-button-border;
box-shadow: none;
}
@@ -1077,13 +1072,13 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
}
/**/
#MyExpander .drawingarea:not(.slider) {
- border: 1px solid @bg-light-grey;
+ border: 0.08334em solid @bg-light-grey;
}
#MyExpander .slider,
#MyExpander .drawingarea:nth-child(2) {
background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85));
background-color: @accent-color4;
- border: 1px solid rgb(15,15,15);
+ border: 0.08334em solid rgb(15,15,15);
}
#MyExpander .drawingarea:disabled {
background-color: shade(@bg-grey,.85);
@@ -1114,7 +1109,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
/* Sub-tool (MyExpander) */
#ExpanderBox2 > box, #ExpanderBox2 > grid {
background-color: transparent;
- border: 1px solid @border-color;
+ border: 0.08334em solid @border-color;
border-radius: 0;
margin: 0;
padding: 0.5em;
@@ -1143,13 +1138,13 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
border: none;
padding: 0;
margin: 0;
- box-shadow: 0 3px 9px 1px rgba(0, 0, 0, 0.50), 0 0 0 1px @bg-dark-grey;
+ box-shadow: 0 0.25em 0.75em 0.08334em rgba(0, 0, 0, 0.50), 0 0 0 0.08334em @bg-dark-grey;
}
menu {
background-color: @bg-dark-grey;
- border: 1px solid @accent-color;
- padding: 1px;
+ border: 0.08334em solid @accent-color;
+ padding: 0.08334em;
margin: 0;
}
menu > .top,
@@ -1159,12 +1154,12 @@ menu > .bottom:hover {
background-color: transparent;
border: none;
padding: 0.5em;
- min-height: 2em;
+ min-height: 1.5em;
}
menuitem {
padding: 0 0.33334em;
- margin: 1px;
+ margin: 0.08334em;
min-height: 2em;
}
menuitem:hover {
@@ -1187,11 +1182,11 @@ entry > window > frame {
}
entry > window > frame > border {
background-color: @bg-dark-grey;
- padding: 1px;
- border: 1px solid @accent-color;
+ padding: 0.08334em;
+ border: 0.08334em solid @accent-color;
}
.csd entry > window > frame > border {
- margin: 1px;
+ margin: 0.08334em;
}
/* end */
@@ -1203,7 +1198,7 @@ entry > window > frame > border {
}
popover.background {
background-color: @bg-dark-grey;
- border-color: @accent-color;
+ border: 0.08334em solid @accent-color;
border-radius: 0;
padding: 0;
margin: 0;
@@ -1236,9 +1231,9 @@ button {
margin: 0;
padding: 0; /* x */
border-radius: 0.2em;
- border: 1px solid @bg-button-border;
+ border: 0.08334em solid @bg-button-border;
background-color: transparent;
- box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
+ box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.1);
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
}
button.flat {
@@ -1250,7 +1245,7 @@ button.text-button label {
#MainNotebook > header > grid > button,
button.flat {
- border: 1px solid transparent;
+ border: 0.08334em solid transparent;
box-shadow: none;
background-image: none;
background-color: transparent;
@@ -1301,7 +1296,7 @@ scale + button.flat {
button.flat:hover,
button:hover {
border-color: @bg-button-border;
- box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
+ box-shadow: inset 0 0.08334em 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;
}
@@ -1313,7 +1308,7 @@ button.flat:checked,
button:active,
button:checked {
border-color: @bg-button-border;
- box-shadow: inset 0 1px rgba(242, 242, 242, 0.08);
+ box-shadow: inset 0 0.08334em 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;
}
@@ -1322,7 +1317,7 @@ button:checked {
button.Right,
button.MiddleH {
margin-left: 0.16667em;
- border: 1px solid @bg-button-border;
+ border: 0.08334em solid @bg-button-border;
}
/**/
@@ -1364,9 +1359,10 @@ dialog combobox .combo,
#MyExpander button:not(.flat).Left,
#MyExpander button:not(.flat) + combobox,
#MyExpander combobox + button:not(.flat),
-#MyExpander combobox + combobox,
+#MyExpander combobox + combobox
+/* Crash
#MyExpander button + label,
-#MyExpander combobox + label {
+#MyExpander combobox + label */ {
margin-left: 0.16667em;
}
#MyExpander label + filechooserbutton,
@@ -1453,7 +1449,7 @@ window .view button {
background-image: none;
box-shadow: none;
min-height: 2em;
- min-width: 1.33334em;
+ min-width: 1.33334em;
padding: 0 0.33334em;
}
dialog .view button.text-button label,
@@ -1462,20 +1458,21 @@ window .view button.text-button label {
}
window .view button {
border: none;
- border-bottom: 1px solid @border-color;
+ border-bottom: 0.08334em solid @border-color;
}
dialog .view button {
- border-color: @border-color;
+ border: 0.08334em solid @border-color;
}
-.view button:checked label,
.view button:checked,
-.view button:hover:not(:active) label,
.view button:hover:not(:active) {
- color: @headline-hl;
background-image: none;
background-color: @bg-list-hover;
}
+.view button:checked label,
+.view button:hover:not(:active) label {
+ color: @headline-hl;
+}
dialog .view header button:not(:last-child):not(:only-child),
window .view header button:not(:last-child):not(:only-child),
@@ -1517,7 +1514,7 @@ window .view header button,
popover button.text-button {
background-color: @bg-dark-grey;
background-image: none;
- border: 1px solid @border-color;
+ border: 0.08334em solid @border-color;
box-shadow: none;
background-image: none;
margin: 0;
@@ -1559,7 +1556,7 @@ headerbar button.titlebutton image {
headerbar button.titlebutton {
margin: 0 0 0 0.33334em;
background-image: none;
- border: 1px solid transparent;
+ border: 0.08334em solid transparent;
background-color: transparent;
box-shadow: none;
min-width: 1.55em;
@@ -1582,14 +1579,14 @@ messagedialog headerbar button.titlebutton {
#MainNotebook tab #CloseButton:hover,
headerbar button.titlebutton:hover{
border-color: rgba(0,0,0,.8);
- box-shadow: inset 0 1px rgba(242, 242, 242, 0.11);
+ box-shadow: inset 0 0.08334em 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 1px rgba(242, 242, 242, 0.15);
+ box-shadow: inset 0 0.08334em 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);
}
@@ -1597,13 +1594,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 1px rgba(242, 242, 242, 0.32);
+ box-shadow: inset 0 0.08334em 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 1px rgba(242, 242, 242, 0.4);
+ box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.4);
}
/**/
@@ -1642,14 +1639,6 @@ checkbutton label {
check {
border-radius: 0.16667em;
}
-check:checked {
- padding: 0 2px 0 0;
- min-width: calc(1.16667em - 2px);
-}
-check:indeterminate {
- min-width: 1.16667em;
- padding: 0;
-}
radio{
border-radius: 1.16667em;
@@ -1676,7 +1665,7 @@ frame > checkbutton check{
}
#PrefNotebook stack > box:nth-child(3) checkbutton,
#PrefNotebook stack > box:nth-child(4) checkbutton {
- min-height: 2em;
+ min-height: 1.83334em;
}
#PrefNotebook radiobutton {
min-height: 2em;
@@ -1696,8 +1685,8 @@ entry {
min-height: 1.66667em;
min-width: 0;
border-radius: 0.2em;
- box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242, 242, 242, 0.1);
- border: 1px solid @bg-entry-border;
+ box-shadow: inset 0.08334em 0.08334em rgba(0, 0, 0, 0.08), 0 0.08334em rgba(242, 242, 242, 0.1);
+ border: 0.08334em solid @bg-entry-border;
background-color: @bg-scale-entry;
}
@@ -1708,8 +1697,8 @@ spinbutton {
min-width: 0;
border-radius: 0.2em;
background-color: @bg-scale-entry;
- border: 1px solid @bg-entry-border;
- box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242, 242, 242, 0.1);
+ border: 0.08334em solid @bg-entry-border;
+ box-shadow: inset 0.08334em 0.08334em rgba(0, 0, 0, 0.08), 0 0.08334em rgba(242, 242, 242, 0.1);
}
#MyExpander spinbutton {
@@ -1720,9 +1709,9 @@ spinbutton {
border-top-left-radius: 1.83334em;
border-bottom-left-radius: 1.83334em;
background-color: shade(@bg-grey, 1.33);
- border: 1px solid @bg-button-border;
+ border: 0.08334em solid @bg-button-border;
color: @text-tbEntry;
- box-shadow: inset 1px 1px rgba(0, 0, 0, .12), 0 1px rgba(255, 255, 255, 0.12);
+ box-shadow: inset 0.08334em 0.08334em rgba(0, 0, 0, .12), 0 0.08334em rgba(255, 255, 255, 0.12);
}
#MyExpander button + label + spinbutton {
margin: 0.25em 0; /* Needed for Reset & and Auto button height*/
@@ -1808,7 +1797,7 @@ entry:focus > selection {
.view entry {
background-color: @bg-dark-grey;
margin: 0 -2px;
- border: 1px solid @accent-color;
+ border: 0.08334em solid @accent-color;
box-shadow: none;
}
/* end*/
@@ -1822,14 +1811,14 @@ entry:focus > selection {
border-radius: 0.41667em 0.41667em 0 0;
border: none;
padding: 0;
- box-shadow: 0 0.25em 0.75em 1px rgba(0, 0, 0, 0.5), 0 0 0 1px @bg-dark-grey;
+ box-shadow: 0 0.25em 0.75em 0.08334em rgba(0, 0, 0, 0.5), 0 0 0 0.08334em @bg-dark-grey;
margin: 0.83334em;
}
headerbar {
background-color: shade(@winHeaderbar,1.12);
- box-shadow: inset 0 1px rgba(200,200,200,.13);
+ box-shadow: inset 0 0.08334em rgba(200,200,200,.13);
background-image: linear-gradient(shade(@winHeaderbar,1.14), shade(@winHeaderbar,.86));
- border-bottom: 1px solid @bg-dark-grey;
+ border-bottom: 0.08334em solid @bg-dark-grey;
border-radius: 0.41667em 0.41667em 0 0;
min-height: 2.16667em;
padding: 0.08334em 0.41667em 0;
@@ -1851,7 +1840,7 @@ headerbar .title{
/* Window in background */
:not(.popup):not(tooltip) > decoration:backdrop {
- box-shadow: 0 0.25em 0.75em 1px rgba(0, 0, 0, 0.3), 0 0 0 1px @bg-dark-grey;
+ box-shadow: 0 0.25em 0.75em 0.08334em rgba(0, 0, 0, 0.3), 0 0 0 0.08334em @bg-dark-grey;
}
headerbar:backdrop {
box-shadow: none;
diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css
index e1a7e84c2..679a8ed13 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-2017 TooWaBoo
- Version 2.42 - requires RT 5.0
+ Version 2.44 - requires RT 5.0
RawTherapee is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -105,7 +105,7 @@ messagedialog {
}
tooltip {
background-color: @bg-tooltip;
- border: 1px solid @border-tooltip;
+ border: 0.08334em solid @border-tooltip;
border-radius: 0.33334em;
padding: 0;
margin: 0;
@@ -180,7 +180,7 @@ frame > border {
dialog frame > border {
padding: 0.5em;
border-radius: 0;
- border: 1px solid @border-color;
+ border: 0.08334em solid @border-color;
background-color: transparent;
margin: 0 -0.5em;
}
@@ -241,11 +241,11 @@ textview:selected, treeview:selected {
}
#RightNotebook > stack > :nth-child(3) treeview {
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
border-bottom: none;
}
-#PlacesPaned > :nth-child(1) treeview {
+#PlacesPaned > box:nth-child(1) treeview {
padding: 0.08334em 0 0.08334em 0.5em;
-gtk-icon-style: symbolic;
}
@@ -275,15 +275,15 @@ textview:selected, treeview:selected {
margin-bottom: 0.41667em;
}
-#PlacesPaned > box:nth-child(3) > :nth-child(2),
+#PlacesPaned > box:nth-child(3) > box:nth-child(2),
#PlacesPaned > box:nth-child(1) > :nth-child(1),
#HistoryPanel > border,
#Snapshots > box > :nth-child(1) {
- padding: 1px;
background-color: @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
}
-/*Corrects the space for the snapshot view of the paned separator*/
+/*Corrects the space of the snapshot view to the paned separator*/
#Snapshots {
margin-top: -0.33334em;
}
@@ -321,11 +321,11 @@ filechooser box {
}
filechooser > box > paned > box {
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
background-color: @bg-dark-grey;
}
filechooser placessidebar {
- padding: 0 1px;
+ padding: 0 0.08334em;
background-color: @bg-dark-grey;
}
@@ -362,7 +362,7 @@ filechooser list row:selected {
}
#HistogramArea,
#HistogramRGBArea {
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
background-color: @bg-dark-grey;
}
@@ -372,7 +372,7 @@ filechooser list row:selected {
margin: 0;
border-color: @bg-light-grey;
border-style: solid;
- border-width: 0 0 0 1px;
+ border-width: 0 0 0 0.08334em;
background-color: @bg-dark-grey;
background-image: none;
box-shadow: none;
@@ -385,7 +385,7 @@ filechooser list row:selected {
}
#EditorLeftPaned #fullButton,
#EditorLeftPaned #histButton {
- border-width: 0 1px 0 0;
+ border-width: 0 0.08334em 0 0;
}
/*** end ***************************************************************************************/
@@ -467,8 +467,8 @@ menu separator {
/*** PartialPaste ******************************************************************************/
#PartialPaste {
- border-bottom: 1px solid @border-color;
- border-top: 1px solid @border-color;
+ border-bottom: 0.08334em solid @border-color;
+ border-top: 0.08334em solid @border-color;
padding-top: 0.5em;
padding-bottom: 0.5em;
}
@@ -518,10 +518,10 @@ scrollbar:not(.overlay-indicator) {
background-color: rgba(0,0,0,.30);
}
scrollbar:not(.overlay-indicator).horizontal {
- border-width: 0 1px 1px 1px;
+ border-width: 0 0.08334em 0.08334em 0.08334em;
}
scrollbar:not(.overlay-indicator).vertical {
- border-width: 1px 1px 1px 0;
+ border-width: 0.08334em 0.08334em 0.08334em 0;
}
scrollbar:not(.overlay-indicator) slider {
background-color: shade(@text-color, .9);
@@ -593,7 +593,7 @@ scale slider {
margin: calc(-0.33334em - 1px);
border-radius: 0.83334em;
background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85));
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
box-shadow: none;
}
scale slider:hover {
@@ -603,14 +603,14 @@ scale slider:hover {
scale trough {
margin: 0.5em; /* has to be half of "scale slider / min-width min-height*/
background-color: @bg-scale-entry;
- border-color: @bg-dark-grey;
- box-shadow: inset 0 1px rgba(255, 255, 255, 0.11), 0 1px rgba(242, 242, 242, 0.11);
+ border: 0.08334em solid @bg-dark-grey;
+ box-shadow: inset 0 0.08334em rgba(255, 255, 255, 0.11), 0 0.08334em rgba(242, 242, 242, 0.11);
border-radius: 0.5em;
}
scale:not(:disabled) trough highlight {
background-color: @accent-color2;
- border-color: @bg-dark-grey;
- box-shadow: inset 0 1px shade(@accent-color2, 1.3);
+ border: 0.08334em solid @bg-dark-grey;
+ box-shadow: inset 0 0.08334em shade(@accent-color2, 1.3);
border-radius: 0.5em;
}
@@ -671,7 +671,7 @@ progressbar.horizontal trough progress {
#IopsPanel progressbar.horizontal trough {
min-height: 0.5em;
background-color: @bg-scale-entry;
- border: 1px solid @bg-button-border;
+ border: 0.08334em solid @bg-button-border;
margin-top: 0.25em;
}
#IopsPanel progressbar.horizontal trough progress {
@@ -770,8 +770,9 @@ dialog notebook stack {
#MainNotebook > stack {
padding: 0.41667em;
}
-#MainNotebook > stack > :nth-child(2) > :nth-child(2) {
- margin-bottom: 0.33334em;
+
+#MainNotebook > stack > :nth-child(2) > box:nth-child(3) {
+ margin-top: 0.41667em;
}
@@ -801,10 +802,11 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
background-color: @bg-grey;
padding: 0;
}
-#RightNotebook > stack > :nth-child(3),
-#RightNotebook > stack > :nth-child(4) {
+
+#RightNotebook > stack > :nth-child(3) > * > box,
+#RightNotebook > stack > :nth-child(4) > * > box {
padding: 0.5em;
- border: 1px solid @bg-entry-border;
+ border: 0.08334em solid @bg-entry-border;
}
#PrefNotebook header {
@@ -813,8 +815,9 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
#AboutNotebook header {
margin: -0.66667em -0.66667em 0.66667em;
}
-#AboutNotebook stack > * > * > * {
- background-color: @dark-grey;
+
+#AboutNotebook stack text {
+ background-color: @bg-dark-grey;
}
/* All tool panels have a frame except for Meta which unlike the rest is a notebook itself.
@@ -873,7 +876,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
margin: 0;
}
#MetaPanelNotebook .view {
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
padding: 0.16667em;
margin: 0;
}
@@ -894,8 +897,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
min-width: 1.66667em;
}
#MetaPanelNotebook > stack > box > grid > button {
- margin-top: 1px;
- margin-bottom: 1px;
+ margin-top: 0.08334em;
+ margin-bottom: 0.08334em;
min-height: 2.16667em;
}
@@ -908,7 +911,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
/*** File Browser ******************************************************************************/
#FileCatalog {
background-color: @bg-image;
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
}
#FileCatalog:selected {
background-color: @accent-color3;
@@ -949,7 +952,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
min-width: 1.66667em;
margin: 0 0 0 -1.66667em;
border-radius: 0 0.2em 0.2em 0;
- border: 1px solid transparent;
+ border: 0.08334em solid transparent;
padding: 0;
}
#ToolBarPanelFileBrowser entry,
@@ -972,25 +975,17 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
#BeforeAfterContainer {
background-color: @bg-grey;
- border: 1px solid @bg-dark-grey;
+ border: 0.08334em solid @bg-dark-grey;
border-radius: 0;
padding: 0;
margin: 0.41667em 0;
}
-#BeforeAfterContainer > box:nth-child(1) frame {
- background-color: @bg-image;
- border-top: 1px solid @bg-dark-grey;
- border-radius: 0;
- padding: 0;
- margin: -1px 0 0 0;
+#BeforeAfterContainer > box:nth-child(2) > box:nth-child(2),
+#BeforeAfterContainer > box:nth-child(1) > box:nth-child(2){
+ border-top: 0.08334em solid @bg-dark-grey;
}
-#BeforeAfterContainer > box:nth-child(2) frame {
- background-color: @bg-image;
- border-top: 1px solid @bg-dark-grey;
- border-left: 1px solid @bg-dark-grey;
- border-radius: 0;
- padding: 0;
- margin: -1px 0 0 0;
+#BeforeAfterContainer > box:nth-child(2){
+ border-left: 0.08334em solid @bg-dark-grey;
}
#BeforeAfterContainer label {
@@ -1000,8 +995,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
/* Small Lock Button */
#BeforeAfterContainer button {
min-height: 1.66667em;
- min-width: 1.66667em;
- margin: 0.25em 0 0.33334em;
+ min-width: 1.75em;
+ margin: 0.25em;
padding: 0 0 0 0.08334em;
}
/**/
@@ -1034,7 +1029,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
min-width: 0;
margin: 0 0.16667em;
padding: 0 0.16667em;
- border: 1px solid transparent;
+ border: 0.08334em solid transparent;
background-color: transparent;
background-image: none;
box-shadow: none;
@@ -1042,13 +1037,13 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
#EditorTopPanel > box > box > button:hover {
background-color: transparent;
background-image: none;
- border: 1px solid transparent;
+ border: 0.08334em solid transparent;
box-shadow: none;
}
#EditorTopPanel > box > box > button:checked {
background-color: transparent;
background-image: none;
- border: 1px solid @bg-button-border;
+ border: 0.08334em solid @bg-button-border;
box-shadow: none;
}
@@ -1077,13 +1072,13 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
}
/**/
#MyExpander .drawingarea:not(.slider) {
- border: 1px solid @bg-light-grey;
+ border: 0.08334em solid @bg-light-grey;
}
#MyExpander .slider,
#MyExpander .drawingarea:nth-child(2) {
background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85));
background-color: @accent-color4;
- border: 1px solid rgb(15,15,15);
+ border: 0.08334em solid rgb(15,15,15);
}
#MyExpander .drawingarea:disabled {
background-color: shade(@bg-grey,.85);
@@ -1114,7 +1109,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
/* Sub-tool (MyExpander) */
#ExpanderBox2 > box, #ExpanderBox2 > grid {
background-color: transparent;
- border: 1px solid @border-color;
+ border: 0.08334em solid @border-color;
border-radius: 0;
margin: 0;
padding: 0.5em;
@@ -1143,13 +1138,13 @@ window.csd:not(.fullscreen) #MainNotebook > header.top {
border: none;
padding: 0;
margin: 0;
- box-shadow: 0 3px 9px 1px rgba(0, 0, 0, 0.50), 0 0 0 1px @bg-dark-grey;
+ box-shadow: 0 0.25em 0.75em 0.08334em rgba(0, 0, 0, 0.50), 0 0 0 0.08334em @bg-dark-grey;
}
menu {
background-color: @bg-dark-grey;
- border: 1px solid @accent-color;
- padding: 1px;
+ border: 0.08334em solid @accent-color;
+ padding: 0.08334em;
margin: 0;
}
menu > .top,
@@ -1159,12 +1154,12 @@ menu > .bottom:hover {
background-color: transparent;
border: none;
padding: 0.5em;
- min-height: 2em;
+ min-height: 1.5em;
}
menuitem {
padding: 0 0.33334em;
- margin: 1px;
+ margin: 0.08334em;
min-height: 2em;
}
menuitem:hover {
@@ -1187,11 +1182,11 @@ entry > window > frame {
}
entry > window > frame > border {
background-color: @bg-dark-grey;
- padding: 1px;
- border: 1px solid @accent-color;
+ padding: 0.08334em;
+ border: 0.08334em solid @accent-color;
}
.csd entry > window > frame > border {
- margin: 1px;
+ margin: 0.08334em;
}
/* end */
@@ -1203,7 +1198,7 @@ entry > window > frame > border {
}
popover.background {
background-color: @bg-dark-grey;
- border-color: @accent-color;
+ border: 0.08334em solid @accent-color;
border-radius: 0;
padding: 0;
margin: 0;
@@ -1236,9 +1231,9 @@ button {
margin: 0;
padding: 0; /* x */
border-radius: 0.2em;
- border: 1px solid @bg-button-border;
+ border: 0.08334em solid @bg-button-border;
background-color: transparent;
- box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
+ box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.1);
background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3));
}
button.flat {
@@ -1250,7 +1245,7 @@ button.text-button label {
#MainNotebook > header > grid > button,
button.flat {
- border: 1px solid transparent;
+ border: 0.08334em solid transparent;
box-shadow: none;
background-image: none;
background-color: transparent;
@@ -1301,7 +1296,7 @@ scale + button.flat {
button.flat:hover,
button:hover {
border-color: @bg-button-border;
- box-shadow: inset 0 1px rgba(242, 242, 242, 0.1);
+ box-shadow: inset 0 0.08334em 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;
}
@@ -1313,7 +1308,7 @@ button.flat:checked,
button:active,
button:checked {
border-color: @bg-button-border;
- box-shadow: inset 0 1px rgba(242, 242, 242, 0.08);
+ box-shadow: inset 0 0.08334em 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;
}
@@ -1322,7 +1317,7 @@ button:checked {
button.Right,
button.MiddleH {
margin-left: 0.16667em;
- border: 1px solid @bg-button-border;
+ border: 0.08334em solid @bg-button-border;
}
/**/
@@ -1364,9 +1359,10 @@ dialog combobox .combo,
#MyExpander button:not(.flat).Left,
#MyExpander button:not(.flat) + combobox,
#MyExpander combobox + button:not(.flat),
-#MyExpander combobox + combobox,
+#MyExpander combobox + combobox
+/* Crash
#MyExpander button + label,
-#MyExpander combobox + label {
+#MyExpander combobox + label */ {
margin-left: 0.16667em;
}
#MyExpander label + filechooserbutton,
@@ -1453,7 +1449,7 @@ window .view button {
background-image: none;
box-shadow: none;
min-height: 2em;
- min-width: 1.33334em;
+ min-width: 1.33334em;
padding: 0 0.33334em;
}
dialog .view button.text-button label,
@@ -1462,20 +1458,21 @@ window .view button.text-button label {
}
window .view button {
border: none;
- border-bottom: 1px solid @border-color;
+ border-bottom: 0.08334em solid @border-color;
}
dialog .view button {
- border-color: @border-color;
+ border: 0.08334em solid @border-color;
}
-.view button:checked label,
.view button:checked,
-.view button:hover:not(:active) label,
.view button:hover:not(:active) {
- color: @headline-hl;
background-image: none;
background-color: @bg-list-hover;
}
+.view button:checked label,
+.view button:hover:not(:active) label {
+ color: @headline-hl;
+}
dialog .view header button:not(:last-child):not(:only-child),
window .view header button:not(:last-child):not(:only-child),
@@ -1517,7 +1514,7 @@ window .view header button,
popover button.text-button {
background-color: @bg-dark-grey;
background-image: none;
- border: 1px solid @border-color;
+ border: 0.08334em solid @border-color;
box-shadow: none;
background-image: none;
margin: 0;
@@ -1559,7 +1556,7 @@ headerbar button.titlebutton image {
headerbar button.titlebutton {
margin: 0 0 0 0.33334em;
background-image: none;
- border: 1px solid transparent;
+ border: 0.08334em solid transparent;
background-color: transparent;
box-shadow: none;
min-width: 1.55em;
@@ -1582,14 +1579,14 @@ messagedialog headerbar button.titlebutton {
#MainNotebook tab #CloseButton:hover,
headerbar button.titlebutton:hover{
border-color: rgba(0,0,0,.8);
- box-shadow: inset 0 1px rgba(242, 242, 242, 0.11);
+ box-shadow: inset 0 0.08334em 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 1px rgba(242, 242, 242, 0.15);
+ box-shadow: inset 0 0.08334em 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);
}
@@ -1597,13 +1594,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 1px rgba(242, 242, 242, 0.32);
+ box-shadow: inset 0 0.08334em 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 1px rgba(242, 242, 242, 0.4);
+ box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.4);
}
/**/
@@ -1642,14 +1639,6 @@ checkbutton label {
check {
border-radius: 0.16667em;
}
-check:checked {
- padding: 0 2px 0 0;
- min-width: calc(1.16667em - 2px);
-}
-check:indeterminate {
- min-width: 1.16667em;
- padding: 0;
-}
radio{
border-radius: 1.16667em;
@@ -1676,7 +1665,7 @@ frame > checkbutton check{
}
#PrefNotebook stack > box:nth-child(3) checkbutton,
#PrefNotebook stack > box:nth-child(4) checkbutton {
- min-height: 2em;
+ min-height: 1.83334em;
}
#PrefNotebook radiobutton {
min-height: 2em;
@@ -1696,8 +1685,8 @@ entry {
min-height: 1.66667em;
min-width: 0;
border-radius: 0.2em;
- box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242, 242, 242, 0.1);
- border: 1px solid @bg-entry-border;
+ box-shadow: inset 0.08334em 0.08334em rgba(0, 0, 0, 0.08), 0 0.08334em rgba(242, 242, 242, 0.1);
+ border: 0.08334em solid @bg-entry-border;
background-color: @bg-scale-entry;
}
@@ -1708,8 +1697,8 @@ spinbutton {
min-width: 0;
border-radius: 0.2em;
background-color: @bg-scale-entry;
- border: 1px solid @bg-entry-border;
- box-shadow: inset 1px 1px rgba(0, 0, 0, 0.08), 0 1px rgba(242, 242, 242, 0.1);
+ border: 0.08334em solid @bg-entry-border;
+ box-shadow: inset 0.08334em 0.08334em rgba(0, 0, 0, 0.08), 0 0.08334em rgba(242, 242, 242, 0.1);
}
#MyExpander spinbutton {
@@ -1720,9 +1709,9 @@ spinbutton {
border-top-left-radius: 1.83334em;
border-bottom-left-radius: 1.83334em;
background-color: shade(@bg-grey, 1.33);
- border: 1px solid @bg-button-border;
+ border: 0.08334em solid @bg-button-border;
color: @text-tbEntry;
- box-shadow: inset 1px 1px rgba(0, 0, 0, .12), 0 1px rgba(255, 255, 255, 0.12);
+ box-shadow: inset 0.08334em 0.08334em rgba(0, 0, 0, .12), 0 0.08334em rgba(255, 255, 255, 0.12);
}
#MyExpander button + label + spinbutton {
margin: 0.25em 0; /* Needed for Reset & and Auto button height*/
@@ -1808,7 +1797,7 @@ entry:focus > selection {
.view entry {
background-color: @bg-dark-grey;
margin: 0 -2px;
- border: 1px solid @accent-color;
+ border: 0.08334em solid @accent-color;
box-shadow: none;
}
/* end*/
@@ -1822,14 +1811,14 @@ entry:focus > selection {
border-radius: 0.41667em 0.41667em 0 0;
border: none;
padding: 0;
- box-shadow: 0 0.25em 0.75em 1px rgba(0, 0, 0, 0.5), 0 0 0 1px @bg-dark-grey;
+ box-shadow: 0 0.25em 0.75em 0.08334em rgba(0, 0, 0, 0.5), 0 0 0 0.08334em @bg-dark-grey;
margin: 0.83334em;
}
headerbar {
background-color: shade(@winHeaderbar,1.12);
- box-shadow: inset 0 1px rgba(200,200,200,.13);
+ box-shadow: inset 0 0.08334em rgba(200,200,200,.13);
background-image: linear-gradient(shade(@winHeaderbar,1.14), shade(@winHeaderbar,.86));
- border-bottom: 1px solid @bg-dark-grey;
+ border-bottom: 0.08334em solid @bg-dark-grey;
border-radius: 0.41667em 0.41667em 0 0;
min-height: 2.16667em;
padding: 0.08334em 0.41667em 0;
@@ -1851,7 +1840,7 @@ headerbar .title{
/* Window in background */
:not(.popup):not(tooltip) > decoration:backdrop {
- box-shadow: 0 0.25em 0.75em 1px rgba(0, 0, 0, 0.3), 0 0 0 1px @bg-dark-grey;
+ box-shadow: 0 0.25em 0.75em 0.08334em rgba(0, 0, 0, 0.3), 0 0 0 0.08334em @bg-dark-grey;
}
headerbar:backdrop {
box-shadow: none;
diff --git a/rtengine/FTblockDN.cc b/rtengine/FTblockDN.cc
index 14b9c554f..a5d799d65 100644
--- a/rtengine/FTblockDN.cc
+++ b/rtengine/FTblockDN.cc
@@ -495,8 +495,8 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagef
//printf("NL=%f \n",noisevarL);
if (useNoiseLCurve || useNoiseCCurve) {
- int hei = calclum->height;
- int wid = calclum->width;
+ int hei = calclum->getHeight();
+ int wid = calclum->getWidth();
TMatrix wprofi = iccStore->workingSpaceMatrix (params->icm.working);
const float wpi[3][3] = {
@@ -573,7 +573,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagef
calclum = nullptr;
}
- const short int imheight = src->height, imwidth = src->width;
+ const short int imheight = src->getHeight(), imwidth = src->getWidth();
if (dnparams.luma != 0 || dnparams.chroma != 0 || dnparams.methodmed == "Lab" || dnparams.methodmed == "Lonly") {
// gamma transform for input data
@@ -1717,8 +1717,8 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagef
#pragma omp parallel for
#endif
- for (int i = 0; i < dst->height; ++i) {
- for (int j = 0; j < dst->width; ++j) {
+ for (int i = 0; i < dst->getHeight(); ++i) {
+ for (int j = 0; j < dst->getWidth(); ++j) {
dst->r(i, j) = Color::gammatab_srgb[ dst->r(i, j) ];
dst->g(i, j) = Color::gammatab_srgb[ dst->g(i, j) ];
dst->b(i, j) = Color::gammatab_srgb[ dst->b(i, j) ];
@@ -1746,7 +1746,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagef
//median 3x3 in complement on RGB
if (dnparams.methodmed == "RGB" && dnparams.median) {
//printf("RGB den\n");
- int wid = dst->width, hei = dst->height;
+ int wid = dst->getWidth(), hei = dst->getHeight();
float** tm;
tm = new float*[hei];
@@ -3137,8 +3137,8 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
float** lumcalc;
float** acalc;
float** bcalc;
- hei = provicalc->height;
- wid = provicalc->width;
+ hei = provicalc->getHeight();
+ wid = provicalc->getWidth();
TMatrix wprofi = iccStore->workingSpaceMatrix (params->icm.working);
const float wpi[3][3] = {
@@ -3187,7 +3187,7 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise_info(Imagefloat * src, Imagefloat
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- const int imheight = src->height, imwidth = src->width;
+ const int imheight = src->getHeight(), imwidth = src->getWidth();
bool denoiseMethodRgb = (dnparams.dmethod == "RGB");
diff --git a/rtengine/colortemp.h b/rtengine/colortemp.h
index 33a2b1b04..2d346dd81 100644
--- a/rtengine/colortemp.h
+++ b/rtengine/colortemp.h
@@ -57,10 +57,13 @@ public:
ColorTemp (double t, double g, double e, const Glib::ustring &m);
ColorTemp (double mulr, double mulg, double mulb, double e);
- void update (const double rmul, const double gmul, const double bmul, const double equal)
+ void update (const double rmul, const double gmul, const double bmul, const double equal, const double tempBias=0.0)
{
this->equal = equal;
mul2temp (rmul, gmul, bmul, this->equal, temp, green);
+ if (tempBias != 0.0 && tempBias >= -1.0 && tempBias <= 1.0) {
+ temp += temp * tempBias;
+ }
}
void useDefaults (const double equal)
{
diff --git a/rtengine/dcp.cc b/rtengine/dcp.cc
index a597fa8db..58524d94c 100644
--- a/rtengine/dcp.cc
+++ b/rtengine/dcp.cc
@@ -1015,8 +1015,8 @@ void DCPProfile::apply(
#pragma omp parallel for
#endif
- for (int y = 0; y < img->height; ++y) {
- for (int x = 0; x < img->width; x++) {
+ for (int y = 0; y < img->getHeight(); ++y) {
+ for (int x = 0; x < img->getWidth(); x++) {
const float& newr = mat[0][0] * img->r(y, x) + mat[0][1] * img->g(y, x) + mat[0][2] * img->b(y, x);
const float& newg = mat[1][0] * img->r(y, x) + mat[1][1] * img->g(y, x) + mat[1][2] * img->b(y, x);
const float& newb = mat[2][0] * img->r(y, x) + mat[2][1] * img->g(y, x) + mat[2][2] * img->b(y, x);
@@ -1053,8 +1053,8 @@ void DCPProfile::apply(
#pragma omp parallel for schedule(dynamic,16)
#endif
- for (int y = 0; y < img->height; ++y) {
- for (int x = 0; x < img->width; x++) {
+ for (int y = 0; y < img->getHeight(); ++y) {
+ for (int x = 0; x < img->getWidth(); x++) {
float newr = pro_photo[0][0] * img->r(y, x) + pro_photo[0][1] * img->g(y, x) + pro_photo[0][2] * img->b(y, x);
float newg = pro_photo[1][0] * img->r(y, x) + pro_photo[1][1] * img->g(y, x) + pro_photo[1][2] * img->b(y, x);
float newb = pro_photo[2][0] * img->r(y, x) + pro_photo[2][1] * img->g(y, x) + pro_photo[2][2] * img->b(y, x);
diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc
index 3b6d98133..3584b7908 100644
--- a/rtengine/dcraw.cc
+++ b/rtengine/dcraw.cc
@@ -9,6 +9,7 @@
/*RT*/#define NO_JASPER
/*RT*/#define LOCALTIME
/*RT*/#define DJGPP
+/*RT*/#include "jpeg.h"
#include "opthelper.h"
@@ -2604,7 +2605,7 @@ void CLASS kodak_radc_load_raw()
#ifdef NO_JPEG
void CLASS kodak_jpeg_load_raw() {}
-void CLASS lossy_dng_load_raw() {}
+// RT void CLASS lossy_dng_load_raw() {}
#else
METHODDEF(boolean)
@@ -2661,6 +2662,7 @@ void CLASS kodak_jpeg_load_raw()
}
void CLASS gamma_curve (double pwr, double ts, int mode, int imax);
+/*RT*/#endif
void CLASS lossy_dng_load_raw()
{
@@ -2704,7 +2706,8 @@ void CLASS lossy_dng_load_raw()
fseek (ifp, save+=4, SEEK_SET);
if (tile_length < INT_MAX)
fseek (ifp, get4(), SEEK_SET);
- jpeg_stdio_src (&cinfo, ifp);
+ /*RT jpeg_stdio_src (&cinfo, ifp); */
+ /*RT*/jpeg_memory_src(&cinfo, fdata(ftell(ifp), ifp), ifp->size - ftell(ifp));
jpeg_read_header (&cinfo, TRUE);
jpeg_start_decompress (&cinfo);
buf = (*cinfo.mem->alloc_sarray)
@@ -2724,7 +2727,7 @@ void CLASS lossy_dng_load_raw()
jpeg_destroy_decompress (&cinfo);
maximum = 0xffff;
}
-#endif
+/*RT #endif */
void CLASS kodak_dc120_load_raw()
{
@@ -9525,8 +9528,8 @@ dng_skip:
}
#endif
#ifdef NO_JPEG
- if (load_raw == &CLASS kodak_jpeg_load_raw ||
- load_raw == &CLASS lossy_dng_load_raw) {
+ if (load_raw == &CLASS kodak_jpeg_load_raw /* RT ||
+ load_raw == &CLASS lossy_dng_load_raw*/) {
fprintf (stderr,_("%s: You must link dcraw with %s!!\n"),
ifname, "libjpeg");
is_raw = 0;
diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc
index e960380ab..72b57e453 100644
--- a/rtengine/dcrop.cc
+++ b/rtengine/dcrop.cc
@@ -123,7 +123,7 @@ void Crop::setEditSubscriber (EditSubscriber* newSubscriber)
PipetteBuffer::LabBuffer = nullptr;
}
- if (PipetteBuffer::singlePlaneBuffer.getW() != -1) {
+ if (PipetteBuffer::singlePlaneBuffer.getWidth() != -1) {
PipetteBuffer::singlePlaneBuffer.flushData();
}
}
diff --git a/rtengine/image16.cc b/rtengine/image16.cc
index df2c5a21f..e0f7470a6 100644
--- a/rtengine/image16.cc
+++ b/rtengine/image16.cc
@@ -153,8 +153,8 @@ void Image16::getStdImage (ColorTemp ctemp, int tran, Imagefloat* image, Preview
transform (pp, tran, sx1, sy1, sx2, sy2);
- int imwidth = image->width; // Destination image
- int imheight = image->height; // Destination image
+ int imwidth = image->getWidth(); // Destination image
+ int imheight = image->getHeight(); // Destination image
if (((tran & TR_ROT) == TR_R90) || ((tran & TR_ROT) == TR_R270)) {
int swap = imwidth;
@@ -165,7 +165,7 @@ void Image16::getStdImage (ColorTemp ctemp, int tran, Imagefloat* image, Preview
int maxx = width; // Source image
int maxy = height; // Source image
int mtran = tran & TR_ROT;
- int skip = pp.skip;
+ int skip = pp.getSkip();
//if ((sx1 + skip*imwidth)>maxx) imwidth -- ; // we have a boundary condition that can cause errors
diff --git a/rtengine/image8.cc b/rtengine/image8.cc
index 9eaf3afc5..56c2a63ee 100644
--- a/rtengine/image8.cc
+++ b/rtengine/image8.cc
@@ -113,8 +113,8 @@ void Image8::getStdImage (ColorTemp ctemp, int tran, Imagefloat* image, PreviewP
transform (pp, tran, sx1, sy1, sx2, sy2);
- int imwidth = image->width; // Destination image
- int imheight = image->height; // Destination image
+ int imwidth = image->getWidth(); // Destination image
+ int imheight = image->getHeight(); // Destination image
if (((tran & TR_ROT) == TR_R90) || ((tran & TR_ROT) == TR_R270)) {
int swap = imwidth;
@@ -125,7 +125,7 @@ void Image8::getStdImage (ColorTemp ctemp, int tran, Imagefloat* image, PreviewP
int maxx = width; // Source image
int maxy = height; // Source image
int mtran = tran & TR_ROT;
- int skip = pp.skip;
+ int skip = pp.getSkip();
//if ((sx1 + skip*imwidth)>maxx) imwidth -- ; // we have a boundary condition that can cause errors
diff --git a/rtengine/imagedimensions.cc b/rtengine/imagedimensions.cc
index f7d291483..7dec1358a 100644
--- a/rtengine/imagedimensions.cc
+++ b/rtengine/imagedimensions.cc
@@ -20,49 +20,88 @@
#include "imagedimensions.h"
#include "rtengine.h"
-void ImageDimensions::transform (PreviewProps pp, int tran, int &sx1, int &sy1, int &sx2, int &sy2)
+PreviewProps::PreviewProps(int _x, int _y, int _width, int _height, int _skip) :
+ x(_x),
+ y(_y),
+ width(_width),
+ height(_height),
+ skip(_skip)
{
+}
- int sw = width, sh = height;
+int PreviewProps::getX() const
+{
+ return x;
+}
+
+int PreviewProps::getY() const
+{
+ return y;
+}
+
+int PreviewProps::getWidth() const
+{
+ return width;
+}
+
+int PreviewProps::getHeight() const
+{
+ return height;
+}
+
+int PreviewProps::getSkip() const
+{
+ return skip;
+}
+
+ImageDimensions::ImageDimensions() :
+ width(-1),
+ height(-1)
+{
+}
+
+void ImageDimensions::transform(const PreviewProps& pp, int tran, int& sx1, int& sy1, int& sx2, int& sy2) const
+{
+ int sw = width;
+ int sh = height;
if ((tran & TR_ROT) == TR_R90 || (tran & TR_ROT) == TR_R270) {
- sw = height;
- sh = width;
+ std::swap(sw, sh);
}
- int ppx = pp.x, ppy = pp.y;
+ int ppx = pp.getX();
+ int ppy = pp.getY();
if (tran & TR_HFLIP) {
- ppx = sw - pp.x - pp.w;
+ ppx = sw - pp.getX() - pp.getWidth();
}
if (tran & TR_VFLIP) {
- ppy = sh - pp.y - pp.h;
+ ppy = sh - pp.getY() - pp.getHeight();
}
sx1 = ppx;
sy1 = ppy;
- sx2 = ppx + pp.w;
- sy2 = ppy + pp.h;
+ sx2 = ppx + pp.getWidth();
+ sy2 = ppy + pp.getHeight();
if ((tran & TR_ROT) == TR_R180) {
- sx1 = width - ppx - pp.w;
- sy1 = height - ppy - pp.h;
- sx2 = sx1 + pp.w;
- sy2 = sy1 + pp.h;
+ sx1 = width - ppx - pp.getWidth();
+ sy1 = height - ppy - pp.getHeight();
+ sx2 = sx1 + pp.getWidth();
+ sy2 = sy1 + pp.getHeight();
} else if ((tran & TR_ROT) == TR_R90) {
sx1 = ppy;
- sy1 = height - ppx - pp.w;
- sx2 = sx1 + pp.h;
- sy2 = sy1 + pp.w;
+ sy1 = height - ppx - pp.getWidth();
+ sx2 = sx1 + pp.getHeight();
+ sy2 = sy1 + pp.getWidth();
} else if ((tran & TR_ROT) == TR_R270) {
- sx1 = width - ppy - pp.h;
+ sx1 = width - ppy - pp.getHeight();
sy1 = ppx;
- sx2 = sx1 + pp.h;
- sy2 = sy1 + pp.w;
+ sx2 = sx1 + pp.getHeight();
+ sy2 = sy1 + pp.getWidth();
}
- //printf ("ppx %d ppy %d ppw %d pph %d s: %d %d %d %d\n",pp.x, pp.y,pp.w,pp.h,sx1,sy1,sx2,sy2);
if (sx1 < 0) {
sx1 = 0;
}
diff --git a/rtengine/imagedimensions.h b/rtengine/imagedimensions.h
index e3b98f7c5..63b1a1062 100644
--- a/rtengine/imagedimensions.h
+++ b/rtengine/imagedimensions.h
@@ -17,47 +17,47 @@
* along with RawTherapee. If not, see .
*/
-#ifndef _IMAGEDIMENSIONS_
-#define _IMAGEDIMENSIONS_
+#pragma once
class PreviewProps
{
public:
- int x, y, w, h, skip;
- PreviewProps (int _x, int _y, int _w, int _h, int _skip)
- : x(_x), y(_y), w(_w), h(_h), skip(_skip) {}
+ PreviewProps(int _x, int _y, int _width, int _height, int _skip);
+
+ int getX() const;
+ int getY() const;
+ int getWidth() const;
+ int getHeight() const;
+ int getSkip() const;
+
+private:
+ int x;
+ int y;
+ int width;
+ int height;
+ int skip;
};
/*
- * Description of an image dimension, with getter and setter
+ * Description of an image dimension, with getter
*/
class ImageDimensions
{
-
public:
+ ImageDimensions();
+
+ int getWidth() const
+ {
+ return width;
+ }
+ int getHeight() const
+ {
+ return height;
+ }
+
+ void transform(const PreviewProps& pp, int tran, int& sx1, int& sy1, int& sx2, int& sy2) const;
+
+protected:
int width;
int height;
-
-public:
- ImageDimensions() : width(-1), height(-1) {}
- int getW ()
- {
- return width;
- }
- int getH ()
- {
- return height;
- }
- int getWidth () const
- {
- return width;
- }
- int getHeight () const
- {
- return height;
- }
- void transform (PreviewProps pp, int tran, int &sx1, int &sy1, int &sx2, int &sy2);
};
-
-
-#endif
diff --git a/rtengine/imagefloat.cc b/rtengine/imagefloat.cc
index f4629682d..aeb57c795 100644
--- a/rtengine/imagefloat.cc
+++ b/rtengine/imagefloat.cc
@@ -203,7 +203,7 @@ void Imagefloat::getStdImage (ColorTemp ctemp, int tran, Imagefloat* image, Prev
int maxx = width; // Source image
int maxy = height; // Source image
int mtran = tran & TR_ROT;
- int skip = pp.skip;
+ int skip = pp.getSkip();
// improve speed by integrating the area division into the multipliers
// switched to using ints for the red/green/blue channel buffer.
diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc
index 05684aaa7..60e037ba9 100644
--- a/rtengine/imageio.cc
+++ b/rtengine/imageio.cc
@@ -909,7 +909,7 @@ int ImageIO::loadPPMFromMemory(const char* buffer, int width, int height, bool s
int ImageIO::savePNG (Glib::ustring fname, int compression, volatile int bps)
{
- if (getW() < 1 || getH() < 1) {
+ if (getWidth() < 1 || getHeight() < 1) {
return IMIO_HEADERERROR;
}
@@ -949,8 +949,8 @@ int ImageIO::savePNG (Glib::ustring fname, int compression, volatile int bps)
png_set_compression_level(png, compression);
- int width = getW ();
- int height = getH ();
+ int width = getWidth ();
+ int height = getHeight ();
if (bps < 0) {
bps = getBPS ();
@@ -1006,7 +1006,7 @@ int ImageIO::savePNG (Glib::ustring fname, int compression, volatile int bps)
// Quality 0..100, subsampling: 1=low quality, 2=medium, 3=high
int ImageIO::saveJPEG (Glib::ustring fname, int quality, int subSamp)
{
- if (getW() < 1 || getH() < 1) {
+ if (getWidth() < 1 || getHeight() < 1) {
return IMIO_HEADERERROR;
}
@@ -1054,8 +1054,8 @@ int ImageIO::saveJPEG (Glib::ustring fname, int quality, int subSamp)
jpeg_stdio_dest (&cinfo, file);
- int width = getW ();
- int height = getH ();
+ int width = getWidth ();
+ int height = getHeight ();
cinfo.image_width = width;
cinfo.image_height = height;
@@ -1196,14 +1196,14 @@ int ImageIO::saveJPEG (Glib::ustring fname, int quality, int subSamp)
int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed)
{
- if (getW() < 1 || getH() < 1) {
+ if (getWidth() < 1 || getHeight() < 1) {
return IMIO_HEADERERROR;
}
//TODO: Handling 32 bits floating point output images!
bool writeOk = true;
- int width = getW ();
- int height = getH ();
+ int width = getWidth ();
+ int height = getHeight ();
if (bps < 0) {
bps = getBPS ();
diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc
index 8eb9cc2a0..c9fc0c25d 100644
--- a/rtengine/improccoordinator.cc
+++ b/rtengine/improccoordinator.cc
@@ -40,10 +40,19 @@ extern const Settings* settings;
ImProcCoordinator::ImProcCoordinator ()
: orig_prev (nullptr), oprevi (nullptr), oprevl (nullptr), nprevl (nullptr), previmg (nullptr), workimg (nullptr),
- ncie (nullptr), imgsrc (nullptr), shmap (nullptr), lastAwbEqual (0.), ipf (¶ms, true), monitorIntent (RI_RELATIVE),
+ ncie (nullptr), imgsrc (nullptr), shmap (nullptr), lastAwbEqual (0.), lastAwbTempBias(0.0), ipf (¶ms, true), monitorIntent (RI_RELATIVE),
softProof (false), gamutCheck (false), scale (10), highDetailPreprocessComputed (false), highDetailRawComputed (false),
allocated (false), bwAutoR (-9000.f), bwAutoG (-9000.f), bwAutoB (-9000.f), CAMMean (NAN), coordX (0), coordY (0), localX (0), localY (0),
dataspot (nullptr), retistr (nullptr), retistrsav (nullptr), llstr (nullptr), lhstr (nullptr), ccstr (nullptr),
+ /*
+=======
+ : orig_prev(nullptr), oprevi(nullptr), oprevl(nullptr), nprevl(nullptr), previmg(nullptr), workimg(nullptr),
+ ncie(nullptr), imgsrc(nullptr), shmap(nullptr), lastAwbEqual(0.), lastAwbTempBias(0.0), ipf(¶ms, true), monitorIntent(RI_RELATIVE),
+ softProof(false), gamutCheck(false), scale(10), highDetailPreprocessComputed(false), highDetailRawComputed(false),
+ allocated(false), bwAutoR(-9000.f), bwAutoG(-9000.f), bwAutoB(-9000.f), CAMMean(NAN),
+
+>>>>>>> dev
+*/
ctColorCurve(),
// localcurve(65536, 0),
hltonecurve (65536),
@@ -168,7 +177,7 @@ ImProcCoordinator::ImProcCoordinator ()
fw (0), fh (0), tr (0),
fullw (1), fullh (1),
pW (-1), pH (-1),
- plistener (nullptr), imageListener (nullptr), aeListener (nullptr), acListener (nullptr), abwListener (nullptr), aloListener (nullptr), actListener (nullptr), adnListener (nullptr), awavListener (nullptr), dehaListener (nullptr), hListener (nullptr),
+ plistener (nullptr), imageListener (nullptr), aeListener (nullptr), acListener (nullptr), abwListener (nullptr), awbListener(nullptr), aloListener (nullptr), actListener (nullptr), adnListener (nullptr), awavListener (nullptr), dehaListener (nullptr), hListener (nullptr),
resultValid (false), lastOutputProfile ("BADFOOD"), lastOutputIntent (RI__COUNT), lastOutputBPC (false), thread (nullptr), changeSinceLast (0), updaterRunning (false), destroying (false), utili (false), autili (false), wavcontlutili (false),
butili (false), ccutili (false), cclutili (false), clcutili (false), opautili (false), conversionBuffer (1, 1), colourToningSatLimit (0.f), colourToningSatLimitOpacity (0.f)
@@ -367,16 +376,18 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
if (params.wb.method == "Camera") {
currWB = imgsrc->getWB ();
} else if (params.wb.method == "Auto") {
- if (lastAwbEqual != params.wb.equal) {
+ 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);
+ autoWB.update(rm, gm, bm, params.wb.equal, params.wb.tempBias);
lastAwbEqual = params.wb.equal;
+ lastAwbTempBias = params.wb.tempBias;
} else {
lastAwbEqual = -1.;
- autoWB.useDefaults (params.wb.equal);
+ lastAwbTempBias = 0.0;
+ autoWB.useDefaults(params.wb.equal);
}
//double rr,gg,bb;
@@ -388,6 +399,9 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
params.wb.temperature = currWB.getTemp ();
params.wb.green = currWB.getGreen ();
+ if(params.wb.method == "Auto" && awbListener) {
+ awbListener->WBChanged(params.wb.temperature, params.wb.green);
+ }
int tr = getCoarseBitMask (params.coarse);
@@ -2884,21 +2898,23 @@ void ImProcCoordinator::progress (Glib::ustring str, int pr)
}*/
}
-bool ImProcCoordinator::getAutoWB (double & temp, double & green, double equal)
+bool ImProcCoordinator::getAutoWB (double& temp, double& green, double equal, double tempBias)
{
if (imgsrc) {
- if (lastAwbEqual != equal) {
+ if (lastAwbEqual != equal || lastAwbTempBias != tempBias) {
// Issue 2500 MyMutex::MyLock lock(minit); // Also used in crop window
double rm, gm, bm;
imgsrc->getAutoWBMultipliers (rm, gm, bm);
if (rm != -1) {
- autoWB.update (rm, gm, bm, equal);
+ autoWB.update(rm, gm, bm, equal, tempBias);
lastAwbEqual = equal;
+ lastAwbTempBias = tempBias;
} else {
lastAwbEqual = -1.;
- autoWB.useDefaults (equal);
+ autoWB.useDefaults(equal);
+ lastAwbTempBias = 0.0;
}
}
@@ -3035,16 +3051,18 @@ void ImProcCoordinator::saveInputICCReference (const Glib::ustring & fname, bool
if (params.wb.method == "Camera") {
currWB = imgsrc->getWB ();
} else if (params.wb.method == "Auto") {
- if (lastAwbEqual != params.wb.equal) {
+ 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);
+ autoWB.update(rm, gm, bm, params.wb.equal, params.wb.tempBias);
lastAwbEqual = params.wb.equal;
+ lastAwbTempBias = params.wb.tempBias;
} else {
lastAwbEqual = -1.;
- autoWB.useDefaults (params.wb.equal);
+ lastAwbTempBias = 0.0;
+ autoWB.useDefaults(params.wb.equal);
}
}
@@ -3089,11 +3107,11 @@ void ImProcCoordinator::saveInputICCReference (const Glib::ustring & fname, bool
// image may contain out of range samples, clip them to avoid wrap-arounds
#pragma omp parallel for
- for (int i = 0; i < im->height; i++) {
- for (int j = 0; j < im->width; j++) {
- im->r (i, j) = CLIP (im->r (i, j));
- im->g (i, j) = CLIP (im->g (i, j));
- im->b (i, j) = CLIP (im->b (i, j));
+ for(int i = 0; i < im->getHeight(); i++) {
+ for(int j = 0; j < im->getWidth(); j++) {
+ im->r(i, j) = CLIP(im->r(i, j));
+ im->g(i, j) = CLIP(im->g(i, j));
+ im->b(i, j) = CLIP(im->b(i, j));
}
}
diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h
index 9e9f0f223..097a26487 100644
--- a/rtengine/improccoordinator.h
+++ b/rtengine/improccoordinator.h
@@ -72,6 +72,7 @@ protected:
ColorTemp autoWB;
double lastAwbEqual;
+ double lastAwbTempBias;
ImProcFunctions ipf;
@@ -167,6 +168,7 @@ protected:
AutoCamListener* acListener;
AutoBWListener* abwListener;
localListener* aloListener;
+ AutoWBListener* awbListener;
AutoColorTonListener* actListener;
AutoChromaListener* adnListener;
@@ -354,7 +356,7 @@ public:
DetailedCrop* createCrop (::EditDataProvider *editDataProvider, bool isDetailWindow);
- bool getAutoWB (double& temp, double& green, double equal);
+ bool getAutoWB (double& temp, double& green, double equal, double tempBias);
void getCamWB (double& temp, double& green);
void getSpotWB (int x, int y, int rectSize, double& temp, double& green);
void getAutoCrop (double ratio, int &x, int &y, int &w, int &h);
@@ -414,6 +416,10 @@ public:
aloListener = alo;
}
+ void setAutoWBListener (AutoWBListener* awb)
+ {
+ awbListener = awb;
+ }
void setAutoColorTonListener (AutoColorTonListener* bwct)
{
actListener = bwct;
diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc
index 852a11f0a..644d80f4d 100644
--- a/rtengine/improcfun.cc
+++ b/rtengine/improcfun.cc
@@ -150,8 +150,8 @@ void ImProcFunctions::firstAnalysis (const Imagefloat* const original, const Pro
lumimul[0] = wprof[1][0];
lumimul[1] = wprof[1][1];
lumimul[2] = wprof[1][2];
- int W = original->width;
- int H = original->height;
+ int W = original->getWidth();
+ int H = original->getHeight();
float lumimulf[3] = {static_cast(lumimul[0]), static_cast(lumimul[1]), static_cast(lumimul[2])};
@@ -2888,8 +2888,8 @@ void ImProcFunctions::moyeqt (Imagefloat* working, float &moyS, float &eqty)
{
BENCHFUN
- int tHh = working->height;
- int tWw = working->width;
+ int tHh = working->getHeight();
+ int tWw = working->getWidth();
double moy = 0.0;
double sqrs = 0.0;
@@ -3284,11 +3284,11 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
bool hasgammabw = gammabwr != 1.f || gammabwg != 1.f || gammabwb != 1.f;
if (hasColorToning || blackwhite || (params->dirpyrequalizer.cbdlMethod == "bef" && params->dirpyrequalizer.enabled)) {
- tmpImage = new Imagefloat(working->width, working->height);
+ tmpImage = new Imagefloat(working->getWidth(), working->getHeight());
}
- int W = working->width;
- int H = working->height;
+ int W = working->getWidth();
+ int H = working->getHeight();
// For tonecurve histogram
int toneCurveHistSize = histToneCurve ? histToneCurve.getSize() : 0;
@@ -3354,12 +3354,12 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
#pragma omp for schedule(dynamic) collapse(2)
#endif
- for(int ii = 0; ii < working->height; ii += TS)
- for(int jj = 0; jj < working->width; jj += TS) {
+ for(int ii = 0; ii < working->getHeight(); ii += TS)
+ for(int jj = 0; jj < working->getWidth(); jj += TS) {
istart = ii;
jstart = jj;
- tH = min(ii + TS, working->height);
- tW = min(jj + TS, working->width);
+ tH = min(ii + TS, working->getHeight());
+ tW = min(jj + TS, working->getWidth());
for (int i = istart, ti = 0; i < tH; i++, ti++) {
@@ -4452,8 +4452,8 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, PipetteBuffer
// starting a new tile processing with a 'reduction' clause for the auto mixer computing
if (blackwhite) {//channel-mixer
- int tW = working->width;
- int tH = working->height;
+ int tW = working->getWidth();
+ int tH = working->getHeight();
if (algm == 2) { //channel-mixer
//end auto chmix
diff --git a/rtengine/ipresize.cc b/rtengine/ipresize.cc
index 8bdc0a6cb..e9c457ac8 100644
--- a/rtengine/ipresize.cc
+++ b/rtengine/ipresize.cc
@@ -53,18 +53,18 @@ void ImProcFunctions::Lanczos(const Image16* src, Image16* dst, float scale)
#pragma omp parallel
{
// storage for precomputed parameters for horisontal interpolation
- float * wwh = new float[support * dst->width];
- int * jj0 = new int[dst->width];
- int * jj1 = new int[dst->width];
+ float * wwh = new float[support * dst->getWidth()];
+ int * jj0 = new int[dst->getWidth()];
+ int * jj1 = new int[dst->getWidth()];
// temporal storage for vertically-interpolated row of pixels
- float * lr = new float[src->width];
- float * lg = new float[src->width];
- float * lb = new float[src->width];
+ float * lr = new float[src->getWidth()];
+ float * lg = new float[src->getWidth()];
+ float * lb = new float[src->getWidth()];
// Phase 1: precompute coefficients for horisontal interpolation
- for (int j = 0; j < dst->width; j++) {
+ for (int j = 0; j < dst->getWidth(); j++) {
// x coord of the center of pixel on src image
float x0 = (static_cast(j) + 0.5f) * delta - 0.5f;
@@ -76,7 +76,7 @@ void ImProcFunctions::Lanczos(const Image16* src, Image16* dst, float scale)
float ws = 0.0f;
jj0[j] = max(0, static_cast(floorf(x0 - a / sc)) + 1);
- jj1[j] = min(src->width, static_cast(floorf(x0 + a / sc)) + 1);
+ jj1[j] = min(src->getWidth(), static_cast(floorf(x0 + a / sc)) + 1);
// calculate weights
for (int jj = jj0[j]; jj < jj1[j]; jj++) {
@@ -95,7 +95,7 @@ void ImProcFunctions::Lanczos(const Image16* src, Image16* dst, float scale)
// Phase 2: do actual interpolation
#pragma omp for
- for (int i = 0; i < dst->height; i++) {
+ for (int i = 0; i < dst->getHeight(); i++) {
// y coord of the center of pixel on src image
float y0 = (static_cast(i) + 0.5f) * delta - 0.5f;
@@ -107,7 +107,7 @@ void ImProcFunctions::Lanczos(const Image16* src, Image16* dst, float scale)
float ws = 0.0f;
int ii0 = max(0, static_cast(floorf(y0 - a / sc)) + 1);
- int ii1 = min(src->height, static_cast(floorf(y0 + a / sc)) + 1);
+ int ii1 = min(src->getHeight(), static_cast(floorf(y0 + a / sc)) + 1);
// calculate weights for vertical interpolation
for (int ii = ii0; ii < ii1; ii++) {
@@ -123,7 +123,7 @@ void ImProcFunctions::Lanczos(const Image16* src, Image16* dst, float scale)
}
// Do vertical interpolation. Store results.
- for (int j = 0; j < src->width; j++) {
+ for (int j = 0; j < src->getWidth(); j++) {
float r = 0.0f, g = 0.0f, b = 0.0f;
@@ -141,7 +141,7 @@ void ImProcFunctions::Lanczos(const Image16* src, Image16* dst, float scale)
}
// Do horizontal interpolation
- for(int j = 0; j < dst->width; j++) {
+ for(int j = 0; j < dst->getWidth(); j++) {
float * wh = wwh + support * j;
@@ -407,13 +407,13 @@ void ImProcFunctions::resize (Image16* src, Image16* dst, float dScale)
#pragma omp parallel for if (multiThread)
#endif
- for (int i = 0; i < dst->height; i++) {
+ for (int i = 0; i < dst->getHeight(); i++) {
int sy = i / dScale;
- sy = LIM(sy, 0, src->height - 1);
+ sy = LIM(sy, 0, src->getHeight() - 1);
- for (int j = 0; j < dst->width; j++) {
+ for (int j = 0; j < dst->getWidth(); j++) {
int sx = j / dScale;
- sx = LIM(sx, 0, src->width - 1);
+ sx = LIM(sx, 0, src->getWidth() - 1);
dst->r(i, j) = src->r(sy, sx);
dst->g(i, j) = src->g(sy, sx);
dst->b(i, j) = src->b(sy, sx);
diff --git a/rtengine/iptransform.cc b/rtengine/iptransform.cc
index 1c0a09929..deae39108 100644
--- a/rtengine/iptransform.cc
+++ b/rtengine/iptransform.cc
@@ -299,7 +299,7 @@ void ImProcFunctions::transform (Imagefloat* original, Imagefloat* transformed,
LCPProfile *pLCPProf = lcpStore->getProfile(params->lensProf.lcpFile);
if (pLCPProf) pLCPMap = new LCPMapper(pLCPProf, focalLen, focalLen35mm, focusDist, 0, false, params->lensProf.useDist,
- original->width, original->height, params->coarse, rawRotationDeg);
+ original->getWidth(), original->getHeight(), params->coarse, rawRotationDeg);
}
if (!(needsCA() || needsDistortion() || needsRotation() || needsPerspective() || needsLCP()) && (needsVignetting() || needsPCVignetting() || needsGradient())) {
@@ -663,17 +663,17 @@ void ImProcFunctions::transformLuminanceOnly (Imagefloat* original, Imagefloat*
struct pcv_params pcv;
if (applyPCVignetting) {
- //fprintf(stderr, "%d %d | %d %d | %d %d | %d %d [%d %d]\n", fW, fH, oW, oH, transformed->width, transformed->height, cx, cy, params->crop.w, params->crop.h);
+ //fprintf(stderr, "%d %d | %d %d | %d %d | %d %d [%d %d]\n", fW, fH, oW, oH, transformed->getWidth(), transformed->getHeight(), cx, cy, params->crop.w, params->crop.h);
calcPCVignetteParams(fW, fH, oW, oH, params->pcvignette, params->crop, pcv);
}
bool darkening = (params->vignetting.amount <= 0.0);
#pragma omp parallel for schedule(dynamic,16) if (multiThread)
- for (int y = 0; y < transformed->height; y++) {
+ for (int y = 0; y < transformed->getHeight(); y++) {
double vig_y_d = (double) (y + cy) - vig_h2 ;
- for (int x = 0; x < transformed->width; x++) {
+ for (int x = 0; x < transformed->getWidth(); x++) {
double factor = 1.0;
if (applyVignetting) {
@@ -779,8 +779,8 @@ void ImProcFunctions::transformHighQuality (Imagefloat* original, Imagefloat* tr
bool darkening = (params->vignetting.amount <= 0.0);
#pragma omp parallel for if (multiThread)
- for (int y = 0; y < transformed->height; y++) {
- for (int x = 0; x < transformed->width; x++) {
+ for (int y = 0; y < transformed->getHeight(); y++) {
+ for (int x = 0; x < transformed->getWidth(); x++) {
double x_d = x, y_d = y;
if (enableLCPDist) {
@@ -849,7 +849,7 @@ void ImProcFunctions::transformHighQuality (Imagefloat* original, Imagefloat* tr
yc -= sy;
// Convert only valid pixels
- if (yc >= 0 && yc < original->height && xc >= 0 && xc < original->width) {
+ if (yc >= 0 && yc < original->getHeight() && xc >= 0 && xc < original->getWidth()) {
// multiplier for vignetting correction
double vignmul = 1.0;
@@ -870,7 +870,7 @@ void ImProcFunctions::transformHighQuality (Imagefloat* original, Imagefloat* tr
vignmul *= calcPCVignetteFactor(pcv, cx + x, cy + y);
}
- if (yc > 0 && yc < original->height - 2 && xc > 0 && xc < original->width - 2) {
+ if (yc > 0 && yc < original->getHeight() - 2 && xc > 0 && xc < original->getWidth() - 2) {
// all interpolation pixels inside image
if (enableCA) {
interpolateTransformChannelsCubic (chOrig[c], xc - 1, yc - 1, Dx, Dy, &(chTrans[c][y][x]), vignmul);
@@ -879,10 +879,10 @@ void ImProcFunctions::transformHighQuality (Imagefloat* original, Imagefloat* tr
}
} else {
// edge pixels
- int y1 = LIM(yc, 0, original->height - 1);
- int y2 = LIM(yc + 1, 0, original->height - 1);
- int x1 = LIM(xc, 0, original->width - 1);
- int x2 = LIM(xc + 1, 0, original->width - 1);
+ int y1 = LIM(yc, 0, original->getHeight() - 1);
+ int y2 = LIM(yc + 1, 0, original->getHeight() - 1);
+ int x1 = LIM(xc, 0, original->getWidth() - 1);
+ int x2 = LIM(xc + 1, 0, original->getWidth() - 1);
if (enableCA) {
chTrans[c][y][x] = vignmul * (chOrig[c][y1][x1] * (1.0 - Dx) * (1.0 - Dy) + chOrig[c][y1][x2] * Dx * (1.0 - Dy) + chOrig[c][y2][x1] * (1.0 - Dx) * Dy + chOrig[c][y2][x2] * Dx * Dy);
@@ -956,8 +956,8 @@ void ImProcFunctions::transformPreview (Imagefloat* original, Imagefloat* transf
// main cycle
#pragma omp parallel for if (multiThread)
- for (int y = 0; y < transformed->height; y++) {
- for (int x = 0; x < transformed->width; x++) {
+ for (int y = 0; y < transformed->getHeight(); y++) {
+ for (int x = 0; x < transformed->getWidth(); x++) {
double x_d = x, y_d = y;
if (pLCPMap && params->lensProf.useDist) {
@@ -1019,7 +1019,7 @@ void ImProcFunctions::transformPreview (Imagefloat* original, Imagefloat* transf
yc -= sy;
// Convert only valid pixels
- if (yc >= 0 && yc < original->height && xc >= 0 && xc < original->width) {
+ if (yc >= 0 && yc < original->getHeight() && xc >= 0 && xc < original->getWidth()) {
// multiplier for vignetting correction
double vignmul = 1.0;
@@ -1040,17 +1040,17 @@ void ImProcFunctions::transformPreview (Imagefloat* original, Imagefloat* transf
vignmul *= calcPCVignetteFactor(pcv, cx + x, cy + y);
}
- if (yc < original->height - 1 && xc < original->width - 1) {
+ if (yc < original->getHeight() - 1 && xc < original->getWidth() - 1) {
// all interpolation pixels inside image
transformed->r(y, x) = vignmul * (original->r(yc, xc) * (1.0 - Dx) * (1.0 - Dy) + original->r(yc, xc + 1) * Dx * (1.0 - Dy) + original->r(yc + 1, xc) * (1.0 - Dx) * Dy + original->r(yc + 1, xc + 1) * Dx * Dy);
transformed->g(y, x) = vignmul * (original->g(yc, xc) * (1.0 - Dx) * (1.0 - Dy) + original->g(yc, xc + 1) * Dx * (1.0 - Dy) + original->g(yc + 1, xc) * (1.0 - Dx) * Dy + original->g(yc + 1, xc + 1) * Dx * Dy);
transformed->b(y, x) = vignmul * (original->b(yc, xc) * (1.0 - Dx) * (1.0 - Dy) + original->b(yc, xc + 1) * Dx * (1.0 - Dy) + original->b(yc + 1, xc) * (1.0 - Dx) * Dy + original->b(yc + 1, xc + 1) * Dx * Dy);
} else {
// edge pixels
- int y1 = LIM(yc, 0, original->height - 1);
- int y2 = LIM(yc + 1, 0, original->height - 1);
- int x1 = LIM(xc, 0, original->width - 1);
- int x2 = LIM(xc + 1, 0, original->width - 1);
+ int y1 = LIM(yc, 0, original->getHeight() - 1);
+ int y2 = LIM(yc + 1, 0, original->getHeight() - 1);
+ int x1 = LIM(xc, 0, original->getWidth() - 1);
+ int x2 = LIM(xc + 1, 0, original->getWidth() - 1);
transformed->r(y, x) = vignmul * (original->r(y1, x1) * (1.0 - Dx) * (1.0 - Dy) + original->r(y1, x2) * Dx * (1.0 - Dy) + original->r(y2, x1) * (1.0 - Dx) * Dy + original->r(y2, x2) * Dx * Dy);
transformed->g(y, x) = vignmul * (original->g(y1, x1) * (1.0 - Dx) * (1.0 - Dy) + original->g(y1, x2) * Dx * (1.0 - Dy) + original->g(y2, x1) * (1.0 - Dx) * Dy + original->g(y2, x2) * Dx * Dy);
transformed->b(y, x) = vignmul * (original->b(y1, x1) * (1.0 - Dx) * (1.0 - Dy) + original->b(y1, x2) * Dx * (1.0 - Dy) + original->b(y2, x1) * (1.0 - Dx) * Dy + original->b(y2, x2) * Dx * Dy);
diff --git a/rtengine/procevents.h b/rtengine/procevents.h
index 2b64900d6..58bfb7f2a 100644
--- a/rtengine/procevents.h
+++ b/rtengine/procevents.h
@@ -537,7 +537,7 @@ enum ProcEvent {
Evlocallabcurvactiv = 507,
Evlocallabccshape = 508,
EvlocallabqualitycurveMethod = 509,
-
+ EvWBtempBias = 510,
NUMOFEVENTS
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index 5d216112a..4dcef6f2e 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -58,40 +58,40 @@ bool ToneCurveParams::HLReconstructionNecessary (LUTu &histRedRaw, LUTu &histGre
void WBParams::init()
{
// Creation of the different methods and its associated temperature value
- wbEntries.push_back (new WBEntry ("Camera" , WBT_CAMERA, M ("TP_WBALANCE_CAMERA"), 0, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Auto" , WBT_AUTO, M ("TP_WBALANCE_AUTO"), 0, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Daylight" , WBT_DAYLIGHT, M ("TP_WBALANCE_DAYLIGHT"), 5300, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Cloudy" , WBT_CLOUDY, M ("TP_WBALANCE_CLOUDY"), 6200, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Shade" , WBT_SHADE, M ("TP_WBALANCE_SHADE"), 7600, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Water 1" , WBT_WATER, M ("TP_WBALANCE_WATER1"), 35000, 0.3f, 1.1f));
- wbEntries.push_back (new WBEntry ("Water 2" , WBT_WATER, M ("TP_WBALANCE_WATER2"), 48000, 0.63f, 1.38f));
- wbEntries.push_back (new WBEntry ("Tungsten" , WBT_TUNGSTEN, M ("TP_WBALANCE_TUNGSTEN"), 2856, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F1" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO1"), 6430, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F2" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO2"), 4230, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F3" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO3"), 3450, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F4" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO4"), 2940, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F5" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO5"), 6350, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F6" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO6"), 4150, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F7" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO7"), 6500, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F8" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO8"), 5020, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F9" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO9"), 4330, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F10" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO10"), 5300, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F11" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO11"), 4000, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Fluo F12" , WBT_FLUORESCENT, M ("TP_WBALANCE_FLUO12"), 3000, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("HMI Lamp" , WBT_LAMP, M ("TP_WBALANCE_HMI"), 4800, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("GTI Lamp" , WBT_LAMP, M ("TP_WBALANCE_GTI"), 5000, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("JudgeIII Lamp" , WBT_LAMP, M ("TP_WBALANCE_JUDGEIII"), 5100, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Solux Lamp 3500K" , WBT_LAMP, M ("TP_WBALANCE_SOLUX35"), 3480, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Solux Lamp 4100K" , WBT_LAMP, M ("TP_WBALANCE_SOLUX41"), 3930, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Solux Lamp 4700K" , WBT_LAMP, M ("TP_WBALANCE_SOLUX47"), 4700, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("NG Solux Lamp 4700K" , WBT_LAMP, M ("TP_WBALANCE_SOLUX47_NG"), 4480, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("LED LSI Lumelex 2040", WBT_LED, M ("TP_WBALANCE_LED_LSI"), 2970, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("LED CRS SP12 WWMR16" , WBT_LED, M ("TP_WBALANCE_LED_CRS"), 3050, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Flash 5500K" , WBT_FLASH, M ("TP_WBALANCE_FLASH55"), 5500, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Flash 6000K" , WBT_FLASH, M ("TP_WBALANCE_FLASH60"), 6000, 1.f, 1.f));
- wbEntries.push_back (new WBEntry ("Flash 6500K" , WBT_FLASH, M ("TP_WBALANCE_FLASH65"), 6500, 1.f, 1.f));
+ wbEntries.push_back(new WBEntry("Camera" , WBT_CAMERA, M("TP_WBALANCE_CAMERA"), 0, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Auto" , WBT_AUTO, M("TP_WBALANCE_AUTO"), 0, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Daylight" , WBT_DAYLIGHT, M("TP_WBALANCE_DAYLIGHT"), 5300, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Cloudy" , WBT_CLOUDY, M("TP_WBALANCE_CLOUDY"), 6200, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Shade" , WBT_SHADE, M("TP_WBALANCE_SHADE"), 7600, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Water 1" , WBT_WATER, M("TP_WBALANCE_WATER1"), 35000, 0.3f, 1.1f, 0.f));
+ wbEntries.push_back(new WBEntry("Water 2" , WBT_WATER, M("TP_WBALANCE_WATER2"), 48000, 0.63f, 1.38f, 0.f));
+ wbEntries.push_back(new WBEntry("Tungsten" , WBT_TUNGSTEN, M("TP_WBALANCE_TUNGSTEN"), 2856, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F1" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO1"), 6430, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F2" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO2"), 4230, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F3" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO3"), 3450, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F4" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO4"), 2940, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F5" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO5"), 6350, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F6" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO6"), 4150, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F7" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO7"), 6500, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F8" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO8"), 5020, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F9" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO9"), 4330, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F10" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO10"), 5300, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F11" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO11"), 4000, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Fluo F12" , WBT_FLUORESCENT, M("TP_WBALANCE_FLUO12"), 3000, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("HMI Lamp" , WBT_LAMP, M("TP_WBALANCE_HMI"), 4800, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("GTI Lamp" , WBT_LAMP, M("TP_WBALANCE_GTI"), 5000, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("JudgeIII Lamp" , WBT_LAMP, M("TP_WBALANCE_JUDGEIII"), 5100, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Solux Lamp 3500K" , WBT_LAMP, M("TP_WBALANCE_SOLUX35"), 3480, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Solux Lamp 4100K" , WBT_LAMP, M("TP_WBALANCE_SOLUX41"), 3930, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Solux Lamp 4700K" , WBT_LAMP, M("TP_WBALANCE_SOLUX47"), 4700, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("NG Solux Lamp 4700K" , WBT_LAMP, M("TP_WBALANCE_SOLUX47_NG"), 4480, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("LED LSI Lumelex 2040", WBT_LED, M("TP_WBALANCE_LED_LSI"), 2970, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("LED CRS SP12 WWMR16" , WBT_LED, M("TP_WBALANCE_LED_CRS"), 3050, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Flash 5500K" , WBT_FLASH, M("TP_WBALANCE_FLASH55"), 5500, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Flash 6000K" , WBT_FLASH, M("TP_WBALANCE_FLASH60"), 6000, 1.f, 1.f, 0.f));
+ wbEntries.push_back(new WBEntry("Flash 6500K" , WBT_FLASH, M("TP_WBALANCE_FLASH65"), 6500, 1.f, 1.f, 0.f));
// Should remain the last one
- wbEntries.push_back (new WBEntry ("Custom" , WBT_CUSTOM, M ("TP_WBALANCE_CUSTOM"), 0, 1.f, 1.f));
+ wbEntries.push_back(new WBEntry("Custom" , WBT_CUSTOM, M("TP_WBALANCE_CUSTOM"), 0, 1.f, 1.f, 0.f));
}
void WBParams::cleanup()
@@ -1244,6 +1244,7 @@ void ProcParams::setDefaults ()
wb.temperature = 6504;
wb.green = 1.0;
wb.equal = 1.0;
+ wb.tempBias = 0.0;
colorappearance.enabled = false;
colorappearance.degree = 90;
colorappearance.autodegree = true;
@@ -2170,6 +2171,10 @@ int ProcParams::save (const Glib::ustring &fname, const Glib::ustring &fname2, b
keyFile.set_double ("White Balance", "Equal", wb.equal);
}
+ if (!pedited || pedited->wb.tempBias) {
+ keyFile.set_double ("White Balance", "TemperatureBias", wb.tempBias);
+ }
+
/*
// save colorShift
if (!pedited || pedited->colorShift.a) keyFile.set_double ("Color Shift", "ChannelA", colorShift.a);
@@ -5697,6 +5702,14 @@ int ProcParams::load (const Glib::ustring &fname, ParamsEdited* pedited)
pedited->wb.equal = true;
}
}
+
+ if (keyFile.has_key ("White Balance", "TemperatureBias")) {
+ wb.tempBias = keyFile.get_double ("White Balance", "TemperatureBias");
+
+ if (pedited) {
+ pedited->wb.tempBias = true;
+ }
+ }
}
// load colorShift
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index 4e56e0ecb..210093299 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -550,8 +550,9 @@ public:
int temperature;
double green;
double equal;
+ double tempBias;
- WBEntry (const Glib::ustring &p, enum WBTypes t, const Glib::ustring &l, int temp, double green, double equal) : ppLabel (p), type (t), GUILabel (l), temperature (temp), green (green), equal (equal) {};
+ WBEntry(const Glib::ustring &p, enum WBTypes t, const Glib::ustring &l, int temp, double green, double equal, double bias) : ppLabel(p), type(t), GUILabel(l), temperature(temp), green(green), equal(equal), tempBias(bias) {};
};
class WBParams
@@ -563,6 +564,7 @@ public:
int temperature;
double green;
double equal;
+ double tempBias;
static void init();
static void cleanup();
diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc
index 126ec4dea..195afcba8 100644
--- a/rtengine/rawimagesource.cc
+++ b/rtengine/rawimagesource.cc
@@ -101,10 +101,10 @@ void transLineFuji (const float* const red, const float* const green, const floa
int y = i + j - fw;
int x = fw - i + j;
- if (x >= 0 && y < image->height && y >= 0 && x < image->width) {
- image->r (image->height - 1 - y, image->width - 1 - x) = red[j];
- image->g (image->height - 1 - y, image->width - 1 - x) = green[j];
- image->b (image->height - 1 - y, image->width - 1 - x) = blue[j];
+ if (x >= 0 && y < image->getHeight() && y >= 0 && x < image->getWidth()) {
+ image->r(image->getHeight() - 1 - y, image->getWidth() - 1 - x) = red[j];
+ image->g(image->getHeight() - 1 - y, image->getWidth() - 1 - x) = green[j];
+ image->b(image->getHeight() - 1 - y, image->getWidth() - 1 - x) = blue[j];
}
}
@@ -115,10 +115,10 @@ void transLineFuji (const float* const red, const float* const green, const floa
int y = i + j - fw;
int x = fw - i + j;
- if (x >= 0 && x < image->height && y >= 0 && y < image->width) {
- image->r (image->height - 1 - x, y) = red[j];
- image->g (image->height - 1 - x, y) = green[j];
- image->b (image->height - 1 - x, y) = blue[j];
+ if (x >= 0 && x < image->getHeight() && y >= 0 && y < image->getWidth()) {
+ image->r(image->getHeight() - 1 - x, y) = red[j];
+ image->g(image->getHeight() - 1 - x, y) = green[j];
+ image->b(image->getHeight() - 1 - x, y) = blue[j];
}
}
@@ -129,10 +129,10 @@ void transLineFuji (const float* const red, const float* const green, const floa
int y = i + j - fw;
int x = fw - i + j;
- if (x >= 0 && y < image->width && y >= 0 && x < image->height) {
- image->r (x, image->width - 1 - y) = red[j];
- image->g (x, image->width - 1 - y) = green[j];
- image->b (x, image->width - 1 - y) = blue[j];
+ if (x >= 0 && y < image->getWidth() && y >= 0 && x < image->getHeight()) {
+ image->r(x, image->getWidth() - 1 - y) = red[j];
+ image->g(x, image->getWidth() - 1 - y) = green[j];
+ image->b(x, image->getWidth() - 1 - y) = blue[j];
}
}
@@ -144,10 +144,10 @@ void transLineFuji (const float* const red, const float* const green, const floa
int y = i + j - fw;
int x = fw - i + j;
- if (x >= 0 && y < image->height && y >= 0 && x < image->width) {
- image->r (y, x) = red[j];
- image->g (y, x) = green[j];
- image->b (y, x) = blue[j];
+ if (x >= 0 && y < image->getHeight() && y >= 0 && x < image->getWidth()) {
+ image->r(y, x) = red[j];
+ image->g(y, x) = green[j];
+ image->b(y, x) = blue[j];
}
}
}
@@ -499,17 +499,18 @@ RawImageSource::~RawImageSource ()
void RawImageSource::transformRect (PreviewProps pp, int tran, int &ssx1, int &ssy1, int &width, int &height, int &fw)
{
-
- pp.x += border;
- pp.y += border;
+ int pp_x = pp.getX() + border;
+ int pp_y = pp.getY() + border;
+ int pp_width = pp.getWidth();
+ int pp_height = pp.getHeight();
if (d1x) {
if ((tran & TR_ROT) == TR_R90 || (tran & TR_ROT) == TR_R270) {
- pp.x /= 2;
- pp.w = pp.w / 2 + 1;
+ pp_x /= 2;
+ pp_width = pp_width / 2 + 1;
} else {
- pp.y /= 2;
- pp.h = pp.h / 2 + 1;
+ pp_y /= 2;
+ pp_height = pp_height / 2 + 1;
}
}
@@ -527,44 +528,44 @@ void RawImageSource::transformRect (PreviewProps pp, int tran, int &ssx1, int &s
sh = w;
}
- if ( pp.w > sw - 2 * border) {
- pp.w = sw - 2 * border;
+ if( pp_width > sw - 2 * border) {
+ pp_width = sw - 2 * border;
}
- if ( pp.h > sh - 2 * border) {
- pp.h = sh - 2 * border;
+ if( pp_height > sh - 2 * border) {
+ pp_height = sh - 2 * border;
}
- int ppx = pp.x, ppy = pp.y;
+ int ppx = pp_x, ppy = pp_y;
if (tran & TR_HFLIP) {
- ppx = sw - pp.x - pp.w;
+ ppx = sw - pp_x - pp_width;
}
if (tran & TR_VFLIP) {
- ppy = sh - pp.y - pp.h;
+ ppy = sh - pp_y - pp_height;
}
int sx1 = ppx; // assuming it's >=0
int sy1 = ppy; // assuming it's >=0
- int sx2 = max (ppx + pp.w, w - 1);
- int sy2 = max (ppy + pp.h, h - 1);
+ int sx2 = max(ppx + pp_width, w - 1);
+ int sy2 = max(ppy + pp_height, h - 1);
if ((tran & TR_ROT) == TR_R180) {
- sx1 = max (w - ppx - pp.w, 0);
- sy1 = max (h - ppy - pp.h, 0);
- sx2 = min (sx1 + pp.w, w - 1);
- sy2 = min (sy1 + pp.h, h - 1);
+ sx1 = max(w - ppx - pp_width, 0);
+ sy1 = max(h - ppy - pp_height, 0);
+ sx2 = min(sx1 + pp_width, w - 1);
+ sy2 = min(sy1 + pp_height, h - 1);
} else if ((tran & TR_ROT) == TR_R90) {
sx1 = ppy;
- sy1 = max (h - ppx - pp.w, 0);
- sx2 = min (sx1 + pp.h, w - 1);
- sy2 = min (sy1 + pp.w, h - 1);
+ sy1 = max(h - ppx - pp_width, 0);
+ sx2 = min(sx1 + pp_height, w - 1);
+ sy2 = min(sy1 + pp_width, h - 1);
} else if ((tran & TR_ROT) == TR_R270) {
- sx1 = max (w - ppy - pp.h, 0);
+ sx1 = max(w - ppy - pp_height, 0);
sy1 = ppx;
- sx2 = min (sx1 + pp.h, w - 1);
- sy2 = min (sy1 + pp.w, h - 1);
+ sx2 = min(sx1 + pp_height, w - 1);
+ sy2 = min(sy1 + pp_width, h - 1);
}
if (fuji) {
@@ -574,14 +575,14 @@ void RawImageSource::transformRect (PreviewProps pp, int tran, int &ssx1, int &s
ssy1 = (sy1 - sx2 ) / 2 + ri->get_FujiWidth();
int ssx2 = (sx2 + sy2) / 2 + 1;
int ssy2 = (sy2 - sx1) / 2 + ri->get_FujiWidth();
- fw = (sx2 - sx1) / 2 / pp.skip;
- width = (ssx2 - ssx1) / pp.skip + ((ssx2 - ssx1) % pp.skip > 0);
- height = (ssy2 - ssy1) / pp.skip + ((ssy2 - ssy1) % pp.skip > 0);
+ fw = (sx2 - sx1) / 2 / pp.getSkip();
+ width = (ssx2 - ssx1) / pp.getSkip() + ((ssx2 - ssx1) % pp.getSkip() > 0);
+ height = (ssy2 - ssy1) / pp.getSkip() + ((ssy2 - ssy1) % pp.getSkip() > 0);
} else {
ssx1 = sx1;
ssy1 = sy1;
- width = (sx2 - sx1) / pp.skip + ((sx2 - sx1) % pp.skip > 0);
- height = (sy2 - sy1) / pp.skip + ((sy2 - sy1) % pp.skip > 0);
+ width = (sx2 - sx1) / pp.getSkip() + ((sx2 - sx1) % pp.getSkip() > 0);
+ height = (sy2 - sy1) / pp.getSkip() + ((sy2 - sy1) % pp.getSkip() > 0);
}
}
@@ -674,11 +675,11 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima
int maximwidth, maximheight;
if ((tran & TR_ROT) == TR_R90 || (tran & TR_ROT) == TR_R270) {
- maximwidth = image->height;
- maximheight = image->width;
+ maximwidth = image->getHeight();
+ maximheight = image->getWidth();
} else {
- maximwidth = image->width;
- maximheight = image->height;
+ maximwidth = image->getWidth();
+ maximheight = image->getHeight();
}
if (d1x) {
@@ -699,7 +700,7 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima
imheight = maximheight;
}
- int maxx = this->W, maxy = this->H, skip = pp.skip;
+ int maxx = this->W, maxy = this->H, skip = pp.getSkip();
// raw clip levels after white balance
hlmax[0] = clmax[0] * rm;
@@ -818,18 +819,18 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima
#endif
if (fuji) {
- int a = ((tran & TR_ROT) == TR_R90 && image->width % 2 == 0) || ((tran & TR_ROT) == TR_R180 && image->height % 2 + image->width % 2 == 1) || ((tran & TR_ROT) == TR_R270 && image->height % 2 == 0);
+ int a = ((tran & TR_ROT) == TR_R90 && image->getWidth() % 2 == 0) || ((tran & TR_ROT) == TR_R180 && image->getHeight() % 2 + image->getWidth() % 2 == 1) || ((tran & TR_ROT) == TR_R270 && image->getHeight() % 2 == 0);
// first row
- for (int j = 1 + a; j < image->width - 1; j += 2) {
- image->r (0, j) = (image->r (1, j) + image->r (0, j + 1) + image->r (0, j - 1)) / 3;
- image->g (0, j) = (image->g (1, j) + image->g (0, j + 1) + image->g (0, j - 1)) / 3;
- image->b (0, j) = (image->b (1, j) + image->b (0, j + 1) + image->b (0, j - 1)) / 3;
+ for (int j = 1 + a; j < image->getWidth() - 1; j += 2) {
+ image->r(0, j) = (image->r(1, j) + image->r(0, j + 1) + image->r(0, j - 1)) / 3;
+ image->g(0, j) = (image->g(1, j) + image->g(0, j + 1) + image->g(0, j - 1)) / 3;
+ image->b(0, j) = (image->b(1, j) + image->b(0, j + 1) + image->b(0, j - 1)) / 3;
}
// other rows
- for (int i = 1; i < image->height - 1; i++) {
- for (int j = 2 - (a + i + 1) % 2; j < image->width - 1; j += 2) {
+ for (int i = 1; i < image->getHeight() - 1; i++) {
+ for (int j = 2 - (a + i + 1) % 2; j < image->getWidth() - 1; j += 2) {
// edge-adaptive interpolation
double dh = (ABS (image->r (i, j + 1) - image->r (i, j - 1)) + ABS (image->g (i, j + 1) - image->g (i, j - 1)) + ABS (image->b (i, j + 1) - image->b (i, j - 1))) / 1.0;
double dv = (ABS (image->r (i + 1, j) - image->r (i - 1, j)) + ABS (image->g (i + 1, j) - image->g (i - 1, j)) + ABS (image->b (i + 1, j) - image->b (i - 1, j))) / 1.0;
@@ -848,20 +849,20 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima
}
// last pixel
- if (2 - (a + i + image->width) % 2 == 2) {
- image->r (i, image->width - 1) = (image->r (i + 1, image->width - 1) + image->r (i - 1, image->width - 1) + image->r (i, image->width - 2)) / 3;
- image->g (i, image->width - 1) = (image->g (i + 1, image->width - 1) + image->g (i - 1, image->width - 1) + image->g (i, image->width - 2)) / 3;
- image->b (i, image->width - 1) = (image->b (i + 1, image->width - 1) + image->b (i - 1, image->width - 1) + image->b (i, image->width - 2)) / 3;
+ if (2 - (a + i + image->getWidth()) % 2 == 2) {
+ image->r(i, image->getWidth() - 1) = (image->r(i + 1, image->getWidth() - 1) + image->r(i - 1, image->getWidth() - 1) + image->r(i, image->getWidth() - 2)) / 3;
+ image->g(i, image->getWidth() - 1) = (image->g(i + 1, image->getWidth() - 1) + image->g(i - 1, image->getWidth() - 1) + image->g(i, image->getWidth() - 2)) / 3;
+ image->b(i, image->getWidth() - 1) = (image->b(i + 1, image->getWidth() - 1) + image->b(i - 1, image->getWidth() - 1) + image->b(i, image->getWidth() - 2)) / 3;
}
}
// last row
- int b = (a == 1 && image->height % 2) || (a == 0 && image->height % 2 == 0);
+ int b = (a == 1 && image->getHeight() % 2) || (a == 0 && image->getHeight() % 2 == 0);
- for (int j = 1 + b; j < image->width - 1; j += 2) {
- image->r (image->height - 1, j) = (image->r (image->height - 2, j) + image->r (image->height - 1, j + 1) + image->r (image->height - 1, j - 1)) / 3;
- image->g (image->height - 1, j) = (image->g (image->height - 2, j) + image->g (image->height - 1, j + 1) + image->g (image->height - 1, j - 1)) / 3;
- image->b (image->height - 1, j) = (image->b (image->height - 2, j) + image->b (image->height - 1, j + 1) + image->b (image->height - 1, j - 1)) / 3;
+ for (int j = 1 + b; j < image->getWidth() - 1; j += 2) {
+ image->r(image->getHeight() - 1, j) = (image->r(image->getHeight() - 2, j) + image->r(image->getHeight() - 1, j + 1) + image->r(image->getHeight() - 1, j - 1)) / 3;
+ image->g(image->getHeight() - 1, j) = (image->g(image->getHeight() - 2, j) + image->g(image->getHeight() - 1, j + 1) + image->g(image->getHeight() - 1, j - 1)) / 3;
+ image->b(image->getHeight() - 1, j) = (image->b(image->getHeight() - 2, j) + image->b(image->getHeight() - 1, j + 1) + image->b(image->getHeight() - 1, j - 1)) / 3;
}
}
@@ -875,8 +876,8 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima
}
// Colour correction (only when running on full resolution)
- if (pp.skip == 1) {
- switch (ri->getSensorType()) {
+ if(pp.getSkip() == 1) {
+ switch(ri->getSensorType()) {
case ST_BAYER:
processFalseColorCorrection (image, raw.bayersensor.ccSteps);
break;
@@ -1472,9 +1473,8 @@ void RawImageSource::getFullSize (int& w, int& h, int tr)
void RawImageSource::getSize (PreviewProps pp, int& w, int& h)
{
-
- w = pp.w / pp.skip + (pp.w % pp.skip > 0);
- h = pp.h / pp.skip + (pp.h % pp.skip > 0);
+ w = pp.getWidth() / pp.getSkip() + (pp.getWidth() % pp.getSkip() > 0);
+ h = pp.getHeight() / pp.getSkip() + (pp.getHeight() % pp.getSkip() > 0);
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1768,14 +1768,31 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
if (pLCPProf) { // don't check focal length to allow distortion correction for lenses without chip, also pass dummy focal length 1 in case of 0
LCPMapper map (pLCPProf, max (idata->getFocalLen(), 1.0), idata->getFocalLen35mm(), idata->getFocusDist(), idata->getFNumber(), true, false, W, H, coarse, -1);
+if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS || ri->get_colors() == 1) {
#ifdef _OPENMP
- #pragma omp parallel for
+ #pragma omp parallel for
#endif
- for (int y = 0; y < H; y++) {
- for (int x = 0; x < W; x++) {
- if (rawData[y][x] > 0) {
- rawData[y][x] *= map.calcVignetteFac (x, y);
+ for (int y = 0; y < H; y++) {
+ for (int x = 0; x < W; x++) {
+ if (rawData[y][x] > 0) {
+ rawData[y][x] *= map.calcVignetteFac(x, y);
+ }
+ }
+ }
+ } else if(ri->get_colors() == 3) {
+#ifdef _OPENMP
+ #pragma omp parallel for
+#endif
+
+ for (int y = 0; y < H; y++) {
+ for (int x = 0; x < W; x++) {
+ float vignFactor = map.calcVignetteFac(x, y);
+ for(int c = 0;c < 3; ++c) {
+ if (rawData[y][3 * x + c] > 0) {
+ rawData[y][3 * x + c] *= vignFactor;
+ }
+ }
}
}
}
@@ -3513,7 +3530,7 @@ int RawImageSource::defTransform (int tran)
void RawImageSource::processFalseColorCorrectionThread (Imagefloat* im, array2D &rbconv_Y, array2D &rbconv_I, array2D &rbconv_Q, array2D &rbout_I, array2D &rbout_Q, const int row_from, const int row_to)
{
- const int W = im->width;
+ const int W = im->getWidth();
constexpr float onebynine = 1.f / 9.f;
#ifdef __SSE2__
@@ -3660,7 +3677,7 @@ void RawImageSource::processFalseColorCorrectionThread (Imagefloat* im, array2D
void RawImageSource::processFalseColorCorrection (Imagefloat* im, const int steps)
{
- if (im->height < 4 || steps < 1) {
+ if (im->getHeight() < 4 || steps < 1) {
return;
}
@@ -3670,14 +3687,14 @@ void RawImageSource::processFalseColorCorrection (Imagefloat* im, const int ste
multi_array2D buffer (W, 3);
int tid = omp_get_thread_num();
int nthreads = omp_get_num_threads();
- int blk = (im->height - 2) / nthreads;
+ int blk = (im->getHeight() - 2) / nthreads;
for (int t = 0; t < steps; t++) {
if (tid < nthreads - 1) {
processFalseColorCorrectionThread (im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 + tid * blk, 1 + (tid + 1)*blk);
} else {
- processFalseColorCorrectionThread (im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 + tid * blk, im->height - 1);
+ processFalseColorCorrectionThread (im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 + tid * blk, im->getHeight() - 1);
}
#pragma omp barrier
@@ -3687,7 +3704,7 @@ void RawImageSource::processFalseColorCorrection (Imagefloat* im, const int ste
multi_array2D buffer (W, 3);
for (int t = 0; t < steps; t++) {
- processFalseColorCorrectionThread (im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 , im->height - 1);
+ processFalseColorCorrectionThread (im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 , im->getHeight() - 1);
}
#endif
@@ -3811,8 +3828,8 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, ColorManagementParam
#pragma omp parallel for
#endif
- for (int i = 0; i < im->height; i++)
- for (int j = 0; j < im->width; j++) {
+ for (int i = 0; i < im->getHeight(); i++)
+ for (int j = 0; j < im->getWidth(); j++) {
float newr = mat[0][0] * im->r (i, j) + mat[0][1] * im->g (i, j) + mat[0][2] * im->b (i, j);
float newg = mat[1][0] * im->r (i, j) + mat[1][1] * im->g (i, j) + mat[1][2] * im->b (i, j);
@@ -3944,21 +3961,21 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, ColorManagementParam
#pragma omp parallel
#endif
{
- AlignedBuffer buffer (im->width * 3);
- AlignedBuffer hl_buffer (im->width * 3);
- AlignedBuffer hl_scale (im->width);
+ AlignedBuffer buffer(im->getWidth() * 3);
+ AlignedBuffer hl_buffer(im->getWidth() * 3);
+ AlignedBuffer hl_scale(im->getWidth());
#ifdef _OPENMP
#pragma omp for schedule(static)
#endif
- for ( int h = 0; h < im->height; ++h ) {
- float *p = buffer.data, *pR = im->r (h), *pG = im->g (h), *pB = im->b (h);
+ for ( int h = 0; h < im->getHeight(); ++h ) {
+ float *p = buffer.data, *pR = im->r(h), *pG = im->g(h), *pB = im->b(h);
// Apply pre-processing
- for ( int w = 0; w < im->width; ++w ) {
- float r = * (pR++);
- float g = * (pG++);
- float b = * (pB++);
+ for ( int w = 0; w < im->getWidth(); ++w ) {
+ float r = *(pR++);
+ float g = *(pG++);
+ float b = *(pB++);
// convert to 0-1 range as LCMS expects that
r /= 65535.0f;
@@ -4026,10 +4043,10 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, ColorManagementParam
}
// Run icc transform
- cmsDoTransform (hTransform, buffer.data, buffer.data, im->width);
+ cmsDoTransform (hTransform, buffer.data, buffer.data, im->getWidth());
if (separate_pcs_lab_highlights) {
- cmsDoTransform (hTransform, hl_buffer.data, hl_buffer.data, im->width);
+ cmsDoTransform (hTransform, hl_buffer.data, hl_buffer.data, im->getWidth());
}
// Apply post-processing
@@ -4038,7 +4055,7 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, ColorManagementParam
pG = im->g (h);
pB = im->b (h);
- for ( int w = 0; w < im->width; ++w ) {
+ for ( int w = 0; w < im->getWidth(); ++w ) {
float r, g, b, hr, hg, hb;
diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc
index 4163a1f6e..1d37b7fd9 100644
--- a/rtengine/refreshmap.cc
+++ b/rtengine/refreshmap.cc
@@ -536,9 +536,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, //EvlocallabLHshape
LUMINANCECURVE, //Evlocallabcurvactiv
LUMINANCECURVE, //Evlocallabccshape
- LUMINANCECURVE //EvlocallabqualitycurveMethod
-
-
+ LUMINANCECURVE, //EvlocallabqualitycurveMethod
+ ALLNORAW // EvWBtempBias
};
diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h
index 368ae9b80..90d62008f 100644
--- a/rtengine/rtengine.h
+++ b/rtengine/rtengine.h
@@ -321,6 +321,13 @@ public :
};
+class AutoWBListener
+{
+public :
+ virtual ~AutoWBListener() = default;
+ virtual void WBChanged(double temp, double green) = 0;
+};
+
class WaveletListener
{
public :
@@ -407,7 +414,7 @@ public:
* @return a pointer to the Crop object that handles the image data trough its own pipeline */
virtual DetailedCrop* createCrop (::EditDataProvider *editDataProvider, bool isDetailWindow) = 0;
- virtual bool getAutoWB (double& temp, double& green, double equal) = 0;
+ virtual bool getAutoWB (double& temp, double& green, double equal, double tempBias) = 0;
virtual void getCamWB (double& temp, double& green) = 0;
virtual void getSpotWB (int x, int y, int rectSize, double& temp, double& green) = 0;
virtual void getAutoCrop (double ratio, int &x, int &y, int &w, int &h) = 0;
@@ -423,6 +430,7 @@ public:
virtual void setAutoCamListener (AutoCamListener* l) = 0;
virtual void setAutoBWListener (AutoBWListener* l) = 0;
virtual void setlocalListener (localListener* l) = 0;
+ virtual void setAutoWBListener (AutoWBListener* l) = 0;
virtual void setAutoColorTonListener (AutoColorTonListener* l) = 0;
virtual void setAutoChromaListener (AutoChromaListener* l) = 0;
virtual void setRetinexListener (RetinexListener* l) = 0;
diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc
index 82d1b29c6..1ab1f3219 100644
--- a/rtengine/rtthumbnail.cc
+++ b/rtengine/rtthumbnail.cc
@@ -98,16 +98,16 @@ Thumbnail* Thumbnail::loadFromImage (const Glib::ustring& fname, int &w, int &h,
if (inspectorMode) {
// Special case, meaning that we want a full sized thumbnail image (e.g. for the Inspector feature)
- w = img->width;
- h = img->height;
+ w = img->getWidth();
+ h = img->getHeight();
tpp->scale = 1.;
} else {
if (fixwh == 1) {
- w = h * img->width / img->height;
- tpp->scale = (double)img->height / h;
+ w = h * img->getWidth() / img->getHeight();
+ tpp->scale = (double)img->getHeight() / h;
} else {
- h = w * img->height / img->width;
- tpp->scale = (double)img->width / w;
+ h = w * img->getHeight() / img->getWidth();
+ tpp->scale = (double)img->getWidth() / w;
}
}
@@ -162,6 +162,7 @@ Thumbnail* Thumbnail::loadFromImage (const Glib::ustring& fname, int &w, int &h,
tpp->greenAWBMul = avg_g / double(n);
tpp->blueAWBMul = avg_b / double(n);
tpp->wbEqual = wbEq;
+ tpp->wbTempBias = 0.0;
cTemp.mul2temp (tpp->redAWBMul, tpp->greenAWBMul, tpp->blueAWBMul, tpp->wbEqual, tpp->autoWBTemp, tpp->autoWBGreen);
}
@@ -223,16 +224,16 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL
if (inspectorMode) {
// Special case, meaning that we want a full sized thumbnail image (e.g. for the Inspector feature)
- w = img->width;
- h = img->height;
+ w = img->getWidth();
+ h = img->getHeight();
tpp->scale = 1.;
} else {
if (fixwh == 1) {
- w = h * img->width / img->height;
- tpp->scale = (double)img->height / h;
+ w = h * img->getWidth() / img->getHeight();
+ tpp->scale = (double)img->getHeight() / h;
} else {
- h = w * img->height / img->width;
- tpp->scale = (double)img->width / w;
+ h = w * img->getHeight() / img->getWidth();
+ tpp->scale = (double)img->getWidth() / w;
}
}
@@ -260,8 +261,8 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL
if (suffix != "mos" && suffix != "mef" && suffix != "iiq") {
tpp->thumbImg->rotate(ri->get_rotateDegree());
// width/height may have changed after rotating
- w = tpp->thumbImg->width;
- h = tpp->thumbImg->height;
+ w = tpp->thumbImg->getWidth();
+ h = tpp->thumbImg->getHeight();
}
}
@@ -735,6 +736,7 @@ Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocati
tpp->greenAWBMul = ri->get_rgb_cam(1, 0) * reds + ri->get_rgb_cam(1, 1) * greens + ri->get_rgb_cam(1, 2) * blues;
tpp->blueAWBMul = ri->get_rgb_cam(2, 0) * reds + ri->get_rgb_cam(2, 1) * greens + ri->get_rgb_cam(2, 2) * blues;
tpp->wbEqual = wbEq;
+ tpp->wbTempBias = 0.0;
ColorTemp cTemp;
cTemp.mul2temp(tpp->redAWBMul, tpp->greenAWBMul, tpp->blueAWBMul, tpp->wbEqual, tpp->autoWBTemp, tpp->autoWBGreen);
@@ -776,7 +778,7 @@ Thumbnail::Thumbnail () :
camProfile(nullptr), thumbImg(nullptr),
camwbRed(1.0), camwbGreen(1.0), camwbBlue(1.0),
redAWBMul(-1.0), greenAWBMul(-1.0), blueAWBMul(-1.0),
- autoWBTemp(2700), autoWBGreen(1.0), wbEqual(-1.0),
+ autoWBTemp(2700), autoWBGreen(1.0), wbEqual(-1.0), wbTempBias(0.0),
embProfileLength(0), embProfileData(nullptr), embProfile(nullptr),
redMultiplier(1.0), greenMultiplier(1.0), blueMultiplier(1.0),
defGain(1.0),
@@ -810,9 +812,9 @@ IImage8* Thumbnail::quickProcessImage (const procparams::ProcParams& params, int
if (params.coarse.rotate == 90 || params.coarse.rotate == 270) {
rwidth = rheight;
- rheight = thumbImg->height * rwidth / thumbImg->width;
+ rheight = thumbImg->getHeight() * rwidth / thumbImg->getWidth();
} else {
- rwidth = thumbImg->width * rheight / thumbImg->height;
+ rwidth = thumbImg->getWidth() * rheight / thumbImg->getHeight();
}
Image8* baseImg = resizeTo(rwidth, rheight, interp, thumbImg);
@@ -839,11 +841,13 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rhei
BENCHFUN
// check if the WB's equalizer value has changed
- if (wbEqual < (params.wb.equal - 5e-4) || wbEqual > (params.wb.equal + 5e-4)) {
+ if (wbEqual < (params.wb.equal - 5e-4) || wbEqual > (params.wb.equal + 5e-4) || wbTempBias < (params.wb.tempBias - 5e-4) || wbTempBias > (params.wb.tempBias + 5e-4)) {
wbEqual = params.wb.equal;
+ wbTempBias = params.wb.tempBias;
// recompute the autoWB
ColorTemp cTemp;
cTemp.mul2temp (redAWBMul, greenAWBMul, blueAWBMul, wbEqual, autoWBTemp, autoWBGreen);
+ autoWBTemp += autoWBTemp * wbTempBias;
}
// compute WB multipliers
@@ -889,9 +893,9 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rhei
if (params.coarse.rotate == 90 || params.coarse.rotate == 270) {
rwidth = rheight;
- rheight = int(size_t(thumbImg->height) * size_t(rwidth) / size_t(thumbImg->width));
+ rheight = int(size_t(thumbImg->getHeight()) * size_t(rwidth) / size_t(thumbImg->getWidth()));
} else {
- rwidth = int(size_t(thumbImg->width) * size_t(rheight) / size_t(thumbImg->height));
+ rwidth = int(size_t(thumbImg->getWidth()) * size_t(rheight) / size_t(thumbImg->getHeight()));
}
@@ -899,8 +903,8 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rhei
if (params.coarse.rotate) {
baseImg->rotate (params.coarse.rotate);
- rwidth = baseImg->width;
- rheight = baseImg->height;
+ rwidth = baseImg->getWidth();
+ rheight = baseImg->getHeight();
}
if (params.coarse.hflip) {
@@ -940,12 +944,12 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rhei
StdImageSource::colorSpaceConversion (baseImg, params.icm, embProfile, thumbImg->getSampleFormat());
}
- int fw = baseImg->width;
- int fh = baseImg->height;
+ int fw = baseImg->getWidth();
+ int fh = baseImg->getHeight();
//ColorTemp::CAT02 (baseImg, ¶ms) ;//perhaps not good!
ImProcFunctions ipf (¶ms, false);
- ipf.setScale (sqrt(double(fw * fw + fh * fh)) / sqrt(double(thumbImg->width * thumbImg->width + thumbImg->height * thumbImg->height))*scale);
+ ipf.setScale (sqrt(double(fw * fw + fh * fh)) / sqrt(double(thumbImg->getWidth() * thumbImg->getWidth() + thumbImg->getHeight() * thumbImg->getHeight()))*scale);
ipf.updateColorProfiles (options.rtSettings.monitorProfile, options.rtSettings.monitorIntent, false, false);
LUTu hist16 (65536);
@@ -1207,9 +1211,9 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rhei
// calculate scale
if (params.coarse.rotate == 90 || params.coarse.rotate == 270) {
- myscale = scale * thumbImg->width / fh;
+ myscale = scale * thumbImg->getWidth() / fh;
} else {
- myscale = scale * thumbImg->height / fh;
+ myscale = scale * thumbImg->getHeight() / fh;
}
myscale = 1.0 / myscale;
@@ -1239,9 +1243,9 @@ int Thumbnail::getImageWidth (const procparams::ProcParams& params, int rheight,
int rwidth;
if (params.coarse.rotate == 90 || params.coarse.rotate == 270) {
- ratio = (float)(thumbImg->height) / (float)(thumbImg->width);
+ ratio = (float)(thumbImg->getHeight()) / (float)(thumbImg->getWidth());
} else {
- ratio = (float)(thumbImg->width) / (float)(thumbImg->height);
+ ratio = (float)(thumbImg->getWidth()) / (float)(thumbImg->getHeight());
}
rwidth = (int)(ratio * (float)rheight);
@@ -1252,8 +1256,8 @@ int Thumbnail::getImageWidth (const procparams::ProcParams& params, int rheight,
void Thumbnail::getDimensions (int& w, int& h, double& scaleFac)
{
if (thumbImg) {
- w = thumbImg->width;
- h = thumbImg->height;
+ w = thumbImg->getWidth();
+ h = thumbImg->getHeight();
scaleFac = scale;
} else {
w = 0;
@@ -1273,15 +1277,17 @@ void Thumbnail::getCamWB (double& temp, double& green)
green = currWB.getGreen ();
}
-void Thumbnail::getAutoWB (double& temp, double& green, double equal)
+void Thumbnail::getAutoWB (double& temp, double& green, double equal, double tempBias)
{
- if (equal != wbEqual) {
+ if (equal != wbEqual || tempBias != wbTempBias) {
// compute the values depending on equal
ColorTemp cTemp;
wbEqual = equal;
+ wbTempBias = tempBias;
// compute autoWBTemp and autoWBGreen
cTemp.mul2temp(redAWBMul, greenAWBMul, blueAWBMul, wbEqual, autoWBTemp, autoWBGreen);
+ autoWBTemp += autoWBTemp * tempBias;
}
temp = autoWBTemp;
@@ -1315,11 +1321,11 @@ void Thumbnail::getSpotWB (const procparams::ProcParams& params, int xp, int yp,
points.push_back (Coord2D (j, i));
}
- int fw = thumbImg->width, fh = thumbImg->height;
+ int fw = thumbImg->getWidth(), fh = thumbImg->getHeight();
if (params.coarse.rotate == 90 || params.coarse.rotate == 270) {
- fw = thumbImg->height;
- fh = thumbImg->width;
+ fw = thumbImg->getHeight();
+ fh = thumbImg->getWidth();
}
ImProcFunctions ipf (¶ms, false);
@@ -1344,8 +1350,8 @@ void Thumbnail::getSpotWB (const procparams::ProcParams& params, int xp, int yp,
void Thumbnail::transformPixel (int x, int y, int tran, int& tx, int& ty)
{
- int W = thumbImg->width;
- int H = thumbImg->height;
+ int W = thumbImg->getWidth();
+ int H = thumbImg->getHeight();
int sw = W, sh = H;
if ((tran & TR_ROT) == TR_R90 || (tran & TR_ROT) == TR_R270) {
@@ -1387,12 +1393,12 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
return nullptr;
}
- if (thumbImg->width < trim_width) {
+ if (thumbImg->getWidth() < trim_width) {
return nullptr;
}
// to utilize the 8 bit color range of the thumbnail we brighten it and apply gamma correction
- unsigned char* tmpdata = new unsigned char[thumbImg->height * trim_width];
+ unsigned char* tmpdata = new unsigned char[thumbImg->getHeight() * trim_width];
int ix = 0, max;
if (gammaCorrected) {
@@ -1418,7 +1424,7 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
}
// Go down till we cut off that many pixels
- unsigned long cutoff = thumbImg->height * thumbImg->height * 4 * BurnOffPct;
+ unsigned long cutoff = thumbImg->getHeight() * thumbImg->getHeight() * 4 * BurnOffPct;
int max_;
unsigned long sum = 0;
@@ -1435,8 +1441,8 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
if (thumbImg->getType() == sImage8) {
Image8 *image = static_cast(thumbImg);
- for (int i = 0; i < thumbImg->height; i++)
- for (int j = (thumbImg->width - trim_width) / 2; j < trim_width + (thumbImg->width - trim_width) / 2; j++) {
+ for (int i = 0; i < thumbImg->getHeight(); i++)
+ for (int j = (thumbImg->getWidth() - trim_width) / 2; j < trim_width + (thumbImg->getWidth() - trim_width) / 2; j++) {
unsigned short r_, g_, b_;
image->convertTo(image->r(i, j), r_);
image->convertTo(image->g(i, j), g_);
@@ -1449,8 +1455,8 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
} else if (thumbImg->getType() == sImage16) {
Image16 *image = static_cast(thumbImg);
- for (int i = 0; i < thumbImg->height; i++)
- for (int j = (thumbImg->width - trim_width) / 2; j < trim_width + (thumbImg->width - trim_width) / 2; j++) {
+ for (int i = 0; i < thumbImg->getHeight(); i++)
+ for (int j = (thumbImg->getWidth() - trim_width) / 2; j < trim_width + (thumbImg->getWidth() - trim_width) / 2; j++) {
unsigned short r_, g_, b_;
image->convertTo(image->r(i, j), r_);
image->convertTo(image->g(i, j), g_);
@@ -1463,8 +1469,8 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
} else if (thumbImg->getType() == sImagefloat) {
Imagefloat *image = static_cast(thumbImg);
- for (int i = 0; i < thumbImg->height; i++)
- for (int j = (thumbImg->width - trim_width) / 2; j < trim_width + (thumbImg->width - trim_width) / 2; j++) {
+ for (int i = 0; i < thumbImg->getHeight(); i++)
+ for (int j = (thumbImg->getWidth() - trim_width) / 2; j < trim_width + (thumbImg->getWidth() - trim_width) / 2; j++) {
unsigned short r_, g_, b_;
image->convertTo(image->r(i, j), r_);
image->convertTo(image->g(i, j), g_);
@@ -1483,8 +1489,8 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
Image8 *image = static_cast(thumbImg);
unsigned char max_ = 0;
- for (int row = 0; row < image->height; row++)
- for (int col = 0; col < image->width; col++) {
+ for (int row = 0; row < image->getHeight(); row++)
+ for (int col = 0; col < image->getWidth(); col++) {
if (image->r(row, col) > max_) {
max_ = image->r(row, col);
}
@@ -1507,8 +1513,8 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
scaleForSave = 65535 * 8192 / max;
// Correction and gamma to 8 Bit
- for (int i = 0; i < image->height; i++)
- for (int j = (image->width - trim_width) / 2; j < trim_width + (image->width - trim_width) / 2; j++) {
+ for (int i = 0; i < image->getHeight(); i++)
+ for (int j = (image->getWidth() - trim_width) / 2; j < trim_width + (image->getWidth() - trim_width) / 2; j++) {
unsigned short rtmp, gtmp, btmp;
image->convertTo(image->r(i, j), rtmp);
image->convertTo(image->g(i, j), gtmp);
@@ -1522,8 +1528,8 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
Image16 *image = static_cast(thumbImg);
unsigned short max_ = 0;
- for (int row = 0; row < image->height; row++)
- for (int col = 0; col < image->width; col++) {
+ for (int row = 0; row < image->getHeight(); row++)
+ for (int col = 0; col < image->getWidth(); col++) {
if (image->r(row, col) > max_) {
max_ = image->r(row, col);
}
@@ -1546,8 +1552,8 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
scaleForSave = 65535 * 8192 / max;
// Correction and gamma to 8 Bit
- for (int i = 0; i < image->height; i++)
- for (int j = (image->width - trim_width) / 2; j < trim_width + (image->width - trim_width) / 2; j++) {
+ for (int i = 0; i < image->getHeight(); i++)
+ for (int j = (image->getWidth() - trim_width) / 2; j < trim_width + (image->getWidth() - trim_width) / 2; j++) {
unsigned short rtmp, gtmp, btmp;
image->convertTo(image->r(i, j), rtmp);
image->convertTo(image->g(i, j), gtmp);
@@ -1561,8 +1567,8 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
Imagefloat *image = static_cast(thumbImg);
float max_ = 0.f;
- for (int row = 0; row < image->height; row++)
- for (int col = 0; col < image->width; col++) {
+ for (int row = 0; row < image->getHeight(); row++)
+ for (int col = 0; col < image->getWidth(); col++) {
if (image->r(row, col) > max_) {
max_ = image->r(row, col);
}
@@ -1585,8 +1591,8 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
scaleForSave = 65535 * 8192 / max;
// Correction and gamma to 8 Bit
- for (int i = 0; i < image->height; i++)
- for (int j = (image->width - trim_width) / 2; j < trim_width + (image->width - trim_width) / 2; j++) {
+ for (int i = 0; i < image->getHeight(); i++)
+ for (int j = (image->getWidth() - trim_width) / 2; j < trim_width + (image->getWidth() - trim_width) / 2; j++) {
unsigned short rtmp, gtmp, btmp;
image->convertTo(image->r(i, j), rtmp);
image->convertTo(image->g(i, j), gtmp);
@@ -1618,7 +1624,7 @@ unsigned char* Thumbnail::getGrayscaleHistEQ (int trim_width)
}
if (cdf_min != -1) {
- hist[i] = (cdf - cdf_min) * 255 / ((thumbImg->height * trim_width) - cdf_min);
+ hist[i] = (cdf - cdf_min) * 255 / ((thumbImg->getHeight() * trim_width) - cdf_min);
}
}
@@ -1646,8 +1652,8 @@ bool Thumbnail::writeImage (const Glib::ustring& fname, int format)
fwrite (thumbImg->getType(), sizeof (char), strlen(thumbImg->getType()), f);
fputc ('\n', f);
- guint32 w = guint32(thumbImg->width);
- guint32 h = guint32(thumbImg->height);
+ guint32 w = guint32(thumbImg->getWidth());
+ guint32 h = guint32(thumbImg->getHeight());
fwrite (&w, sizeof (guint32), 1, f);
fwrite (&h, sizeof (guint32), 1, f);
diff --git a/rtengine/rtthumbnail.h b/rtengine/rtthumbnail.h
index 18e72fc19..56e68f815 100644
--- a/rtengine/rtthumbnail.h
+++ b/rtengine/rtthumbnail.h
@@ -47,7 +47,7 @@ class Thumbnail
double camwbGreen;
double camwbBlue;
double redAWBMul, greenAWBMul, blueAWBMul; // multipliers for auto WB
- double autoWBTemp, autoWBGreen, wbEqual; // autoWBTemp and autoWBGreen are updated each time autoWB is requested and if wbEqual has been modified
+ double autoWBTemp, autoWBGreen, wbEqual, wbTempBias; // autoWBTemp and autoWBGreen are updated each time autoWB is requested and if wbEqual has been modified
LUTu aeHistogram;
int aeHistCompression;
int embProfileLength;
@@ -83,7 +83,7 @@ public:
static RawMetaDataLocation loadMetaDataFromRaw (const Glib::ustring& fname);
void getCamWB (double& temp, double& green);
- void getAutoWB (double& temp, double& green, double equal);
+ void getAutoWB (double& temp, double& green, double equal, double tempBias);
void getAutoWBMultipliers (double& rm, double& gm, double& bm);
void getSpotWB (const procparams::ProcParams& params, int x, int y, int rect, double& temp, double& green);
void applyAutoExp (procparams::ProcParams& pparams);
diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc
index c60c71a83..90a62ab26 100644
--- a/rtengine/simpleprocess.cc
+++ b/rtengine/simpleprocess.cc
@@ -165,8 +165,8 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
currWB = imgsrc->getWB ();
} else if (params.wb.method == "Auto") {
double rm, gm, bm;
- imgsrc->getAutoWBMultipliers (rm, gm, bm);
- currWB.update (rm, gm, bm, params.wb.equal);
+ imgsrc->getAutoWBMultipliers(rm, gm, bm);
+ currWB.update(rm, gm, bm, params.wb.equal, params.wb.tempBias);
}
NoiseCurve noiseLCurve;
diff --git a/rtengine/stdimagesource.cc b/rtengine/stdimagesource.cc
index 95475e6a4..1ef4bf884 100644
--- a/rtengine/stdimagesource.cc
+++ b/rtengine/stdimagesource.cc
@@ -276,20 +276,19 @@ void StdImageSource::colorSpaceConversion (Imagefloat* im, const ColorManagement
void StdImageSource::getFullSize (int& w, int& h, int tr)
{
- w = img->width;
- h = img->height;
+ w = img->getWidth();
+ h = img->getHeight();
if ((tr & TR_ROT) == TR_R90 || (tr & TR_ROT) == TR_R270) {
- w = img->height;
- h = img->width;
+ w = img->getHeight();
+ h = img->getWidth();
}
}
void StdImageSource::getSize (PreviewProps pp, int& w, int& h)
{
-
- w = pp.w / pp.skip + (pp.w % pp.skip > 0);
- h = pp.h / pp.skip + (pp.h % pp.skip > 0);
+ w = pp.getWidth() / pp.getSkip() + (pp.getWidth() % pp.getSkip() > 0);
+ h = pp.getHeight() / pp.getSkip() + (pp.getHeight() % pp.getSkip() > 0);
}
void StdImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr)
diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h
index 633b795b1..98d2ebf37 100644
--- a/rtgui/addsetids.h
+++ b/rtgui/addsetids.h
@@ -128,6 +128,8 @@ enum {
ADDSET_LOCALLAB_TRANSIT,
ADDSET_LOCALLAB_STRENGTH,
ADDSET_LOCALLAB_SENSI,
+ ADDSET_WB_TEMPBIAS,
+
ADDSET_PARAM_NUM // THIS IS USED AS A DELIMITER!!
};
diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc
index 38645ad6a..3b10bedea 100644
--- a/rtgui/batchtoolpanelcoord.cc
+++ b/rtgui/batchtoolpanelcoord.cc
@@ -152,7 +152,7 @@ void BatchToolPanelCoordinator::initSession ()
toneCurve->setAdjusterBehavior (false, false, false, false, false, false, false, false);
lcurve->setAdjusterBehavior (false, false, false);
- whitebalance->setAdjusterBehavior (false, false, false);
+ whitebalance->setAdjusterBehavior (false, false, false, false);
vibrance->setAdjusterBehavior (false, false);
vignetting->setAdjusterBehavior (false, false, false, false);
colorappearance->setAdjusterBehavior (false, false, false, false, false, false, false, false, false, false, false, false, false);
@@ -192,7 +192,7 @@ void BatchToolPanelCoordinator::initSession ()
toneCurve->setAdjusterBehavior (options.baBehav[ADDSET_TC_EXPCOMP], options.baBehav[ADDSET_TC_HLCOMPAMOUNT], options.baBehav[ADDSET_TC_HLCOMPTHRESH], options.baBehav[ADDSET_TC_BRIGHTNESS], options.baBehav[ADDSET_TC_BLACKLEVEL], options.baBehav[ADDSET_TC_SHCOMP], options.baBehav[ADDSET_TC_CONTRAST], options.baBehav[ADDSET_TC_SATURATION]);
lcurve->setAdjusterBehavior (options.baBehav[ADDSET_LC_BRIGHTNESS], options.baBehav[ADDSET_LC_CONTRAST], options.baBehav[ADDSET_LC_CHROMATICITY]);
- whitebalance->setAdjusterBehavior (options.baBehav[ADDSET_WB_TEMPERATURE], options.baBehav[ADDSET_WB_GREEN], options.baBehav[ADDSET_WB_EQUAL]);
+ whitebalance->setAdjusterBehavior (options.baBehav[ADDSET_WB_TEMPERATURE], options.baBehav[ADDSET_WB_GREEN], options.baBehav[ADDSET_WB_EQUAL], options.baBehav[ADDSET_WB_TEMPBIAS]);
vibrance->setAdjusterBehavior (options.baBehav[ADDSET_VIBRANCE_PASTELS], options.baBehav[ADDSET_VIBRANCE_SATURATED]);
vignetting->setAdjusterBehavior (options.baBehav[ADDSET_VIGN_AMOUNT], options.baBehav[ADDSET_VIGN_RADIUS], options.baBehav[ADDSET_VIGN_STRENGTH], options.baBehav[ADDSET_VIGN_CENTER]);
colorappearance->setAdjusterBehavior (options.baBehav[ADDSET_CAT_DEGREE], options.baBehav[ADDSET_CAT_ADAPTSCENE], options.baBehav[ADDSET_CAT_ADAPTVIEWING], options.baBehav[ADDSET_CAT_BADPIX], options.baBehav[ADDSET_CAT_LIGHT], options.baBehav[ADDSET_CAT_CHROMA], options.baBehav[ADDSET_CAT_CONTRAST], options.baBehav[ADDSET_CAT_RSTPRO], options.baBehav[ADDSET_CAT_BRIGHT], options.baBehav[ADDSET_CAT_CONTRAST_Q], options.baBehav[ADDSET_CAT_CHROMA_S], options.baBehav[ADDSET_CAT_CHROMA_M], options.baBehav[ADDSET_CAT_HUE]);
@@ -327,6 +327,10 @@ void BatchToolPanelCoordinator::initSession ()
pparams.wb.equal = 0;
}
+ if (options.baBehav[ADDSET_WB_TEMPBIAS]) {
+ pparams.wb.tempBias = 0;
+ }
+
if (options.baBehav[ADDSET_VIBRANCE_PASTELS]) {
pparams.vibrance.pastels = 0;
}
@@ -914,11 +918,11 @@ void BatchToolPanelCoordinator::panelChanged (rtengine::ProcEvent event, const G
}
}
-void BatchToolPanelCoordinator::getAutoWB (double& temp, double& green, double equal)
+void BatchToolPanelCoordinator::getAutoWB (double& temp, double& green, double equal, double tempBias)
{
if (!selected.empty()) {
- selected[0]->getAutoWB (temp, green, equal);
+ selected[0]->getAutoWB (temp, green, equal, tempBias);
}
}
diff --git a/rtgui/batchtoolpanelcoord.h b/rtgui/batchtoolpanelcoord.h
index c96a1a329..4efcea6fa 100644
--- a/rtgui/batchtoolpanelcoord.h
+++ b/rtgui/batchtoolpanelcoord.h
@@ -60,7 +60,7 @@ public:
void profileChange (const rtengine::procparams::PartialProfile* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited = nullptr);
// wbprovider interface
- void getAutoWB (double& temp, double& green, double equal);
+ void getAutoWB (double& temp, double& green, double equal, double tempBias);
void getCamWB (double& temp, double& green);
// thumbnaillistener interface
diff --git a/rtgui/bqentryupdater.cc b/rtgui/bqentryupdater.cc
index 37ce4c0ef..1bb7e4257 100644
--- a/rtgui/bqentryupdater.cc
+++ b/rtgui/bqentryupdater.cc
@@ -120,11 +120,11 @@ void BatchQueueEntryUpdater::processThread ()
int prevh = img->getHeight();
#ifndef NDEBUG
- if (current.ow != img->getW() || current.oh != img->getH()) {
- printf("WARNING! Expected image size: %dx%d ; image size is: %dx%d\n", current.ow, current.oh, img->getW(), img->getH());
+ if (current.ow != img->getWidth() || current.oh != img->getHeight()) {
+ printf("WARNING! Expected image size: %dx%d ; image size is: %dx%d\n", current.ow, current.oh, img->getWidth(), img->getHeight());
}
- assert ((current.ow + 1)*current.oh >= img->getW()*img->getH());
+ assert ((current.ow + 1)*current.oh >= img->getWidth()*img->getHeight());
#endif
current.ow = prevw;
current.oh = prevh;
diff --git a/rtgui/options.cc b/rtgui/options.cc
index 22ccc142e..f2c7fe533 100644
--- a/rtgui/options.cc
+++ b/rtgui/options.cc
@@ -624,7 +624,7 @@ void Options::setDefaults ()
0, // ADDSET_LOCALLAB_TRANSIT
0, // ADDSET_LOCALLAB_STRENGTH
0, // ADDSET_LOCALLAB_SENSI
-
+ 0, // ADDSET_WB_TEMPBIAS
};
rtSettings.darkFramesPath = "";
diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc
index 41d70bcb2..95171ce00 100644
--- a/rtgui/paramsedited.cc
+++ b/rtgui/paramsedited.cc
@@ -215,6 +215,7 @@ void ParamsEdited::set (bool v)
wb.green = v;
wb.temperature = v;
wb.equal = v;
+ wb.tempBias = v;
//colorShift.a = v;
//colorShift.b = v;
//lumaDenoise.enabled = v;
@@ -781,6 +782,7 @@ void ParamsEdited::initFrom (const std::vector
wb.green = wb.green && p.wb.green == other.wb.green;
wb.equal = wb.equal && p.wb.equal == other.wb.equal;
wb.temperature = wb.temperature && p.wb.temperature == other.wb.temperature;
+ wb.tempBias = wb.tempBias && p.wb.tempBias == other.wb.tempBias;
//colorShift.a = colorShift.a && p.colorShift.a == other.colorShift.a;
//colorShift.b = colorShift.b && p.colorShift.b == other.colorShift.b;
//lumaDenoise.enabled = lumaDenoise.enabled && p.lumaDenoise.enabled == other.lumaDenoise.enabled;
@@ -1732,6 +1734,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
toEdit.wb.equal = dontforceSet && options.baBehav[ADDSET_WB_EQUAL] ? toEdit.wb.equal + mods.wb.equal : mods.wb.equal;
}
+ if (wb.tempBias) {
+ toEdit.wb.tempBias = dontforceSet && options.baBehav[ADDSET_WB_TEMPBIAS] ? toEdit.wb.tempBias + mods.wb.tempBias : mods.wb.tempBias;
+ }
+
if (wb.green) {
toEdit.wb.green = dontforceSet && options.baBehav[ADDSET_WB_GREEN] ? toEdit.wb.green + mods.wb.green : mods.wb.green;
}
diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h
index 8544261a9..0491f688e 100644
--- a/rtgui/paramsedited.h
+++ b/rtgui/paramsedited.h
@@ -234,6 +234,7 @@ public:
bool temperature;
bool green;
bool equal;
+ bool tempBias;
};
/*class ColorShiftParamsEdited {
diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc
index 59b89e30a..1e81c8ea6 100644
--- a/rtgui/preferences.cc
+++ b/rtgui/preferences.cc
@@ -247,10 +247,11 @@ Gtk::Widget* Preferences::getBatchProcPanel ()
appendBehavList (mi, M ("TP_DIRPYRDENOISE_PASSES"), ADDSET_DIRPYRDN_PASSES, true);
mi = behModel->append ();
- mi->set_value (behavColumns.label, M ("TP_WBALANCE_LABEL"));
- appendBehavList (mi, M ("TP_WBALANCE_TEMPERATURE"), ADDSET_WB_TEMPERATURE, true);
- appendBehavList (mi, M ("TP_WBALANCE_GREEN"), ADDSET_WB_GREEN, true);
- appendBehavList (mi, M ("TP_WBALANCE_EQBLUERED"), ADDSET_WB_EQUAL, true);
+ mi->set_value (behavColumns.label, M("TP_WBALANCE_LABEL"));
+ appendBehavList (mi, M("TP_WBALANCE_TEMPERATURE"), ADDSET_WB_TEMPERATURE, true);
+ appendBehavList (mi, M("TP_WBALANCE_GREEN"), ADDSET_WB_GREEN, true);
+ appendBehavList (mi, M("TP_WBALANCE_EQBLUERED"), ADDSET_WB_EQUAL, true);
+ appendBehavList (mi, M("TP_WBALANCE_TEMPBIAS"), ADDSET_WB_TEMPBIAS, true);
mi = behModel->append ();
mi->set_value (behavColumns.label, M ("TP_COLORAPP_LABEL"));
diff --git a/rtgui/thumbnail.cc b/rtgui/thumbnail.cc
index 71aeab0ab..03ef49a5e 100644
--- a/rtgui/thumbnail.cc
+++ b/rtgui/thumbnail.cc
@@ -184,7 +184,7 @@ const ProcParams& Thumbnail::getProcParamsU ()
pparams.wb.temperature = ct;
} else if (pparams.wb.method == "Auto") {
double ct;
- getAutoWB (ct, pparams.wb.green, pparams.wb.equal);
+ getAutoWB (ct, pparams.wb.green, pparams.wb.equal, pparams.wb.tempBias);
pparams.wb.temperature = ct;
}
}
@@ -669,7 +669,7 @@ const Glib::ustring& Thumbnail::getDateTimeString ()
return dateTimeString;
}
-void Thumbnail::getAutoWB (double& temp, double& green, double equal)
+void Thumbnail::getAutoWB (double& temp, double& green, double equal, double tempBias)
{
if (cfs.redAWBMul != -1.0) {
rtengine::ColorTemp ct(cfs.redAWBMul, cfs.greenAWBMul, cfs.blueAWBMul, equal);
diff --git a/rtgui/thumbnail.h b/rtgui/thumbnail.h
index a7b889d5f..8c7691ed2 100644
--- a/rtgui/thumbnail.h
+++ b/rtgui/thumbnail.h
@@ -125,7 +125,7 @@ public:
temp = green = -1.0;
}
}
- void getAutoWB (double& temp, double& green, double equal);
+ void getAutoWB (double& temp, double& green, double equal, double tempBias);
void getSpotWB (int x, int y, int rect, double& temp, double& green)
{
if (tpp) {
diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc
index 8ab29d53f..8b636c922 100644
--- a/rtgui/toolpanelcoord.cc
+++ b/rtgui/toolpanelcoord.cc
@@ -497,6 +497,7 @@ void ToolPanelCoordinator::initImage (rtengine::StagedImageProcessor* ipc_, bool
ipc->setAutoExpListener (toneCurve);
ipc->setAutoCamListener (colorappearance);
ipc->setAutoBWListener (blackwhite);
+ ipc->setAutoWBListener (whitebalance);
ipc->setAutoColorTonListener (colortoning);
ipc->setAutoChromaListener (dirpyrdenoise);
ipc->setWaveletListener (wavelet);
diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h
index 04221ddef..32f971c11 100644
--- a/rtgui/toolpanelcoord.h
+++ b/rtgui/toolpanelcoord.h
@@ -254,10 +254,10 @@ public:
void writeOptions ();
// wbprovider interface
- void getAutoWB (double& temp, double& green, double equal)
+ void getAutoWB (double& temp, double& green, double equal, double tempBias)
{
if (ipc) {
- ipc->getAutoWB (temp, green, equal);
+ ipc->getAutoWB (temp, green, equal, tempBias);
}
}
void getCamWB (double& temp, double& green)
diff --git a/rtgui/wbprovider.h b/rtgui/wbprovider.h
index 2e46467f9..df1329c84 100644
--- a/rtgui/wbprovider.h
+++ b/rtgui/wbprovider.h
@@ -25,7 +25,7 @@ class WBProvider
public:
virtual ~WBProvider() {}
- virtual void getAutoWB (double& temp, double& green, double equal) {}
+ virtual void getAutoWB (double& temp, double& green, double equal, double tempBias) {}
virtual void getCamWB (double& temp, double& green) {}
virtual void spotWBRequested (int size) {}
};
diff --git a/rtgui/whitebalance.cc b/rtgui/whitebalance.cc
index d0413412b..362d03a8d 100644
--- a/rtgui/whitebalance.cc
+++ b/rtgui/whitebalance.cc
@@ -309,17 +309,22 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB
Gtk::Image* igreenR = Gtk::manage (new RTImage ("ajd-wb-green2.png"));
Gtk::Image* iblueredL = Gtk::manage (new RTImage ("ajd-wb-bluered1.png"));
Gtk::Image* iblueredR = Gtk::manage (new RTImage ("ajd-wb-bluered2.png"));
+ Gtk::Image* itempbiasL = Gtk::manage (new RTImage ("ajd-wb-temp1.png"));
+ Gtk::Image* itempbiasR = Gtk::manage (new RTImage ("ajd-wb-temp2.png"));
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));
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);
cache_customGreen (0);
cache_customEqual (0);
equal->set_tooltip_markup (M("TP_WBALANCE_EQBLUERED_TOOLTIP"));
+ tempBias->set_tooltip_markup (M("TP_WBALANCE_TEMPBIAS_TOOLTIP"));
temp->show ();
green->show ();
equal->show ();
+ tempBias->show ();
/* Gtk::HBox* boxgreen = Gtk::manage (new Gtk::HBox ());
boxgreen->show ();
@@ -332,10 +337,12 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, "whitebalance", M("TP_WB
//pack_start (*boxgreen);
pack_start (*green);
pack_start (*equal);
+ pack_start (*tempBias);
temp->setAdjusterListener (this);
green->setAdjusterListener (this);
equal->setAdjusterListener (this);
+ tempBias->setAdjusterListener (this);
spotbutton->signal_pressed().connect( sigc::mem_fun(*this, &WhiteBalance::spotPressed) );
methconn = method->signal_changed().connect( sigc::mem_fun(*this, &WhiteBalance::optChanged) );
@@ -348,6 +355,7 @@ void WhiteBalance::adjusterChanged (Adjuster* a, double newval)
int tVal = (int)temp->getValue();
double gVal = green->getValue();
double eVal = equal->getValue();
+ double tempBiasVal = tempBias->getValue();
Gtk::TreeModel::Row row = getActiveMethod();
if (row == refTreeModel->children().end()) {
@@ -358,11 +366,15 @@ void WhiteBalance::adjusterChanged (Adjuster* a, double newval)
WBEntry* ppMethod = findWBEntry (row[methodColumns.colLabel], WBLT_GUI);
WBEntry* wbCustom = findWBEntry ("Custom", WBLT_PP);
- if (!ppMethod || (ppMethod->ppLabel != wbCustom->ppLabel && !(a == equal && ppMethod->type == WBT_AUTO)) ) {
+ if (!ppMethod || (ppMethod->ppLabel != wbCustom->ppLabel && !((a == equal || a == tempBias) && ppMethod->type == WBT_AUTO)) ) {
methconn.block(true);
opt = setActiveMethod(wbCustom->GUILabel);
+ tempBias->set_sensitive(false);
+
cache_customWB (tVal, gVal);
- cache_customEqual(eVal);
+ if (a != equal) {
+ cache_customEqual(eVal);
+ }
methconn.block(false);
}
@@ -373,27 +385,10 @@ void WhiteBalance::adjusterChanged (Adjuster* a, double newval)
cache_customGreen (gVal);
} else if (a == equal) {
cache_customEqual (eVal);
-
- // Recomputing AutoWB if it's the current method
- if (wbp && ppMethod->type == WBT_AUTO) {
- double ctemp = -1.0;
- double cgreen = -1.0;
- wbp->getAutoWB (ctemp, cgreen, eVal);
-
- if (ctemp != -1.0) {
- // Set the automatics temperature value only if in SET mode
- if (temp->getEditedState() && !temp->getAddMode() ) {
- temp->setValue (ctemp);
- }
-
- // Set the automatics green value only if in SET mode
- if (green->getEditedState() && !green->getAddMode()) {
- green->setValue (cgreen);
- }
- }
- }
}
+ // Recomputing AutoWB if it's the current method will happen in improccoordinator.cc
+
if (listener) {
if (a == temp) {
listener->panelChanged (EvWBTemp, Glib::ustring::format ((int)a->getValue()));
@@ -401,6 +396,8 @@ void WhiteBalance::adjusterChanged (Adjuster* a, double newval)
listener->panelChanged (EvWBGreen, Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), a->getValue()));
} else if (a == equal) {
listener->panelChanged (EvWBequal, Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), a->getValue()));
+ } else if (a == tempBias) {
+ listener->panelChanged (EvWBtempBias, Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(2), a->getValue()));
}
}
}
@@ -430,10 +427,13 @@ void WhiteBalance::optChanged ()
temp->setEditedState (UnEdited);
green->setEditedState (UnEdited);
equal->setEditedState (UnEdited);
+ tempBias->setEditedState (UnEdited);
} else {
int methodId = findWBEntryId (row[methodColumns.colLabel], WBLT_GUI);
WBEntry* currMethod = WBParams::wbEntries[methodId];
+ tempBias->set_sensitive(currMethod->type == WBT_AUTO);
+
switch (currMethod->type) {
case WBT_CAMERA:
if (wbp) {
@@ -460,15 +460,7 @@ void WhiteBalance::optChanged ()
// equal remain as is
}
- if (!batchMode || equal->getEditedState()) {
- double ctemp, cgreen;
- wbp->getAutoWB (ctemp, cgreen, equal->getValue());
-
- if (ctemp != -1.0) {
- temp->setValue (temp->getAddMode() ? 0.0 : (int)ctemp);
- green->setValue (green->getAddMode() ? 0.0 : cgreen);
- }
- }
+ // Recomputing AutoWB will happen in improccoordinator.cc
}
break;
@@ -546,12 +538,15 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited)
methconn.block (true);
equal->setValue (pp->wb.equal);
+ tempBias->setValue (pp->wb.tempBias);
+ tempBias->set_sensitive(true);
if (pedited) {
// By default, temperature and green are said "UnEdited", but it may change later
temp->setEditedState (UnEdited);
green->setEditedState (UnEdited);
equal->setEditedState (pedited->wb.equal ? Edited : UnEdited);
+ tempBias->setEditedState (pedited->wb.tempBias ? Edited : UnEdited);
}
if (pedited && !pedited->wb.method) {
@@ -571,6 +566,7 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited)
temp->setValue (temp->getAddMode() ? 0.0 : pp->wb.temperature);
green->setValue (green->getAddMode() ? 0.0 : pp->wb.green);
equal->setValue (equal->getAddMode() ? 0.0 : pp->wb.equal);
+ tempBias->setValue (tempBias->getAddMode() ? 0.0 : pp->wb.tempBias);
cache_customTemp (pp->wb.temperature);
cache_customGreen (pp->wb.green);
cache_customEqual (pp->wb.equal);
@@ -600,6 +596,7 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited)
green->setValue (green->getAddMode() ? 0.0 : pp->wb.green);
equal->setValue (equal->getAddMode() ? 0.0 : pp->wb.equal);
}
+ tempBias->setValue (equal->getAddMode() ? 0.0 : pp->wb.tempBias);
}
break;
@@ -607,7 +604,8 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited)
case WBT_AUTO:
// the equalizer's value is restored for the AutoWB
equal->setValue (equal->getAddMode() ? 0.0 : pp->wb.equal);
-
+ tempBias->setValue (tempBias->getAddMode() ? 0.0 : pp->wb.tempBias);
+
// set default values first if in ADD mode, otherwise keep the current ones
if (temp->getAddMode() ) {
temp->setValue (0.0);
@@ -617,32 +615,7 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited)
green->setValue (0.0);
}
- // then check for the correct ones, if possible
- if (wbp) {
- double ctemp = -1.0;
- double cgreen = -1.0;
- wbp->getAutoWB (ctemp, cgreen, pp->wb.equal);
-
- if (ctemp != -1.0) {
- // Set the automatics temperature if in SET mode
- if (!pedited || (pedited->wb.temperature && !temp->getAddMode()) ) {
- temp->setValue (ctemp);
-
- if (pedited) {
- temp->setEditedState (Edited);
- }
- }
-
- // Set the automatics green value if in SET mode
- if (!pedited || (pedited->wb.green && !green->getAddMode())) {
- green->setValue (cgreen);
-
- if (pedited) {
- green->setEditedState (Edited);
- }
- }
- }
- }
+ // Recomputing AutoWB will happen in improccoordinator.cc
break;
@@ -663,16 +636,20 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited)
// Set the stored temperature, or 0.0 if in ADD mode
green->setValue(green->getAddMode() ? 0.0 : pp->wb.green);
equal->setValue(equal->getAddMode() ? 0.0 : pp->wb.equal);
+ tempBias->setValue(equal->getAddMode() ? 0.0 : pp->wb.tempBias);
// The user may have changed the green value even for predefined WB values
if (pedited) {
green->setEditedState (pedited->wb.green ? Edited : UnEdited);
equal->setEditedState (pedited->wb.equal ? Edited : UnEdited);
+ tempBias->setEditedState (pedited->wb.tempBias ? Edited : UnEdited);
}
//cache_customGreen (pp->wb.green);
break;
}
+
+ tempBias->set_sensitive(wbValues->type == WBT_AUTO);
}
methconn.block (false);
@@ -688,6 +665,7 @@ void WhiteBalance::write (ProcParams* pp, ParamsEdited* pedited)
pedited->wb.temperature = temp->getEditedState ();
pedited->wb.green = green->getEditedState ();
pedited->wb.equal = equal->getEditedState ();
+ pedited->wb.tempBias = tempBias->getEditedState ();
pedited->wb.method = row[methodColumns.colLabel] != M("GENERAL_UNCHANGED");
}
@@ -700,11 +678,14 @@ void WhiteBalance::write (ProcParams* pp, ParamsEdited* pedited)
pp->wb.temperature = temp->getIntValue ();
pp->wb.green = green->getValue ();
pp->wb.equal = equal->getValue ();
+ pp->wb.tempBias = tempBias->getValue ();
}
void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited)
{
+
equal->setDefault (defParams->wb.equal);
+ tempBias->setDefault (defParams->wb.tempBias);
if (wbp && defParams->wb.method == "Camera") {
double ctemp;
@@ -716,34 +697,22 @@ void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited*
temp->setDefault (temp->getAddMode() ? 0 : (int)ctemp);
green->setDefault (green->getAddMode() ? 0 : cgreen);
}
- } else if (wbp && defParams->wb.method == "Auto") {
- // this setDefaults method is called too early ; the wbp has been set,
- // but wbp is not ready to provide!
- double ctemp;
- double cgreen;
- wbp->getAutoWB (ctemp, cgreen, defParams->wb.equal);
-
- if (ctemp != -1.0) {
- temp->setDefault (temp->getAddMode() ? 0 : (int)ctemp);
- green->setDefault (green->getAddMode() ? 0 : cgreen);
- } else {
- // 6504 & 1.0 = same values as in ProcParams::setDefaults
- temp->setDefault (temp->getAddMode() ? 0 : 6504);
- green->setDefault (green->getAddMode() ? 0 : 1.0);
- }
} else {
temp->setDefault (defParams->wb.temperature);
green->setDefault (defParams->wb.green);
}
+ // Recomputing AutoWB if it's the current method will happen in improccoordinator.cc
if (pedited) {
temp->setDefaultEditedState (pedited->wb.temperature ? Edited : UnEdited);
green->setDefaultEditedState (pedited->wb.green ? Edited : UnEdited);
equal->setDefaultEditedState (pedited->wb.equal ? Edited : UnEdited);
+ tempBias->setDefaultEditedState (pedited->wb.tempBias ? Edited : UnEdited);
} else {
temp->setDefaultEditedState (Irrelevant);
green->setDefaultEditedState (Irrelevant);
equal->setDefaultEditedState (Irrelevant);
+ tempBias->setDefaultEditedState (Irrelevant);
}
}
@@ -754,6 +723,7 @@ void WhiteBalance::setBatchMode (bool batchMode)
temp->showEditedCB ();
green->showEditedCB ();
equal->showEditedCB ();
+ tempBias->showEditedCB ();
Gtk::TreeModel::Row row = *(refTreeModel->append());
row[methodColumns.colId] = WBParams::wbEntries.size();
row[methodColumns.colLabel] = M("GENERAL_UNCHANGED");
@@ -785,12 +755,13 @@ void WhiteBalance::setWB (int vtemp, double vgreen)
}
}
-void WhiteBalance::setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd)
+void WhiteBalance::setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd, bool tempbiasadd)
{
temp->setAddMode(tempadd);
green->setAddMode(greenadd);
equal->setAddMode(equaladd);
+ tempBias->setAddMode(tempbiasadd);
}
void WhiteBalance::trimValues (rtengine::procparams::ProcParams* pp)
@@ -799,6 +770,7 @@ void WhiteBalance::trimValues (rtengine::procparams::ProcParams* pp)
temp->trimValue(pp->wb.temperature);
green->trimValue(pp->wb.green);
equal->trimValue(pp->wb.equal);
+ tempBias->trimValue(pp->wb.tempBias);
}
inline void WhiteBalance::cache_customTemp(int temp)
@@ -884,3 +856,14 @@ inline Gtk::TreeRow WhiteBalance::getActiveMethod ()
{
return *(method->get_active());
}
+
+void WhiteBalance::WBChanged(double temperature, double greenVal)
+{
+ GThreadLock lock;
+ disableListener();
+ temp->setValue(temperature);
+ green->setValue(greenVal);
+ temp->setDefault(temperature);
+ green->setDefault(greenVal);
+ enableListener();
+}
diff --git a/rtgui/whitebalance.h b/rtgui/whitebalance.h
index c18b15853..1d493c035 100644
--- a/rtgui/whitebalance.h
+++ b/rtgui/whitebalance.h
@@ -34,7 +34,7 @@ public:
virtual void spotWBRequested (int size) {}
};
-class WhiteBalance : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel
+class WhiteBalance : public ToolParamBlock, public AdjusterListener, public FoldableToolPanel, public rtengine::AutoWBListener
{
enum WB_LabelType {
@@ -65,6 +65,7 @@ protected:
Adjuster* temp;
Adjuster* green;
Adjuster* equal;
+ Adjuster* tempBias;
Gtk::Button* spotbutton;
int opt;
@@ -114,8 +115,9 @@ public:
wblistener = l;
}
void setWB (int temp, double green);
+ void WBChanged (double temp, double green);
- void setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd);
+ void setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd, bool tempbiasadd);
void trimValues (rtengine::procparams::ProcParams* pp);
};