diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch
index 1daaa9119..f502e61cc 100644
--- a/rtdata/languages/Deutsch
+++ b/rtdata/languages/Deutsch
@@ -48,6 +48,7 @@
#47 19.11.2017 HDR-Dynamikkompression (TooWaBoo) RT 5.3
#48 13.12.2017 Erweiterung (TooWaBoo) RT 5.3
#49 21.12.2017 Lokaler Kontrast (TooWaBoo) RT 5.3
+#50 07.01.2018 Crop Settings (TooWaBoo) RT 5.3
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Danksagungen
@@ -572,9 +573,9 @@ HISTORY_MSG_281;(Farbanpassungen)\nSättigung schützen\nIntensität
HISTORY_MSG_282;(Farbanpassungen)\nSättigung schützen\nSchwelle
HISTORY_MSG_283;(Farbanpassungen)\nIntensität
HISTORY_MSG_284;(Farbanpassungen)\nSättigung schützen\nAutomatisch
-HISTORY_MSG_285;(Rauschreduzierung)\nMedianmethode
+HISTORY_MSG_285;(Rauschreduzierung)\nMedianfilter - Methode
HISTORY_MSG_286;(Rauschreduzierung)\nMediantyp
-HISTORY_MSG_287;(Rauschreduzierung)\nMedianiterationen
+HISTORY_MSG_287;(Rauschreduzierung)\nMedianfilter - Iterationen
HISTORY_MSG_288;(Weißbild)\nKontrolle zu heller Bereiche
HISTORY_MSG_289;(Weißbild)\nAuto-Kontrolle zu\nheller Bereiche
HISTORY_MSG_290;(Sensor-Matrix)\nSchwarzpunkt - Rot
@@ -1151,7 +1152,7 @@ PREFERENCES_REMEMBERZOOMPAN;Zoom und Bildposition merken
PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Öffnen eines neuen Bildes mit den Zoom- und Positionswerten\ndes vorangegangenen Bildes.\n\nFunktioniert nur unter folgenden Bedingungen:\nEin-Reitermodus aktiv\n“Demosaikmethode für 100%-Ansicht“ muss auf “Wie im Bild-\nverarbeitungsprofil vorgegeben“ eingestellt sein.
PREFERENCES_RGBDTL_LABEL;Maximale Anzahl Threads für Rauschreduzierung
PREFERENCES_RGBDTL_TOOLTIP;Die Rauschreduzierung benötigt mindestens 128MB RAM für ein 10 Megapixel-Bild oder 512MB für ein 40 Megapixel-Bild, und zusätzlich 128MB RAM pro Thread. Je mehr Threads parallel ablaufen, desto schneller ist die Berechnung. Bei Einstellung "0" werden so viele Threads wie möglich benutzt.
-PREFERENCES_SAVE_TP_OPEN_NOW;Werkzeugstatus jetzt sichern
+PREFERENCES_SAVE_TP_OPEN_NOW;Werkzeugstatus jetzt speichern
PREFERENCES_SELECTFONT;Schriftart
PREFERENCES_SELECTFONT_COLPICKER;Schriftart für die Farbwähler
PREFERENCES_SELECTLANG;Sprache
@@ -1513,7 +1514,7 @@ TP_DIRPYRDENOISE_LUMINANCE_CURVE;Luminanzkurve
TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Luminanzdetails
TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminanz
TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;Luminanz
-TP_DIRPYRDENOISE_MAIN_COLORSPACE;Methode
+TP_DIRPYRDENOISE_MAIN_COLORSPACE;Farbraum
TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b*
TP_DIRPYRDENOISE_MAIN_COLORSPACE_LABEL;Rauschreduzierung
TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB
@@ -1524,7 +1525,7 @@ TP_DIRPYRDENOISE_MAIN_MODE;Qualität
TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;Hoch
TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;Standard
TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;Einstellung der Qualität der Rauschreduzierung.\nDie Einstellung “Hoch“ verbessert die Rausch-\nreduzierung auf Kosten der Verarbeitungszeit.
-TP_DIRPYRDENOISE_MEDIAN_METHOD;Medianmethode
+TP_DIRPYRDENOISE_MEDIAN_METHOD;Methode
TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;Nur Farbe
TP_DIRPYRDENOISE_MEDIAN_METHOD_LAB;L*a*b*
TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;Medianfilter
@@ -1532,7 +1533,7 @@ TP_DIRPYRDENOISE_MEDIAN_METHOD_LUMINANCE;Nur Luminanz
TP_DIRPYRDENOISE_MEDIAN_METHOD_RGB;RGB
TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;Bei der Methode “Nur Luminanz“ und “L*a*b*“,\nwird der Medianfilter nach den Waveletschritten\nverarbeitet.\nBei RGB wird der Medianfilter am Ende der\nRauschreduzierung verarbeitet.
TP_DIRPYRDENOISE_MEDIAN_METHOD_WEIGHTED;Gewichtet L* (wenig) + a*b* (normal)
-TP_DIRPYRDENOISE_MEDIAN_PASSES;Medianiterationen
+TP_DIRPYRDENOISE_MEDIAN_PASSES;Iterationen
TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;Manchmal führt ein kleines 3×3-Fenster mit\nmehreren Iterationen zu besseren Ergebnissen\nals ein 7×7-Fenster mit nur einer Iteration.
TP_DIRPYRDENOISE_MEDIAN_TYPE;Mediantyp
TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Einen Medianfilter mit der gewünschten Fenstergröße auswählen.\nJe größer das Fenster, umso länger dauert die Verarbeitungszeit.\n\n3×3 weich: Nutzt 5 Pixel in einem 3×3-Pixelfenster.\n3×3: Nutzt 9 Pixel in einem 3×3-Pixelfenster.\n5×5 weich: Nutzt 13 Pixel in einem 5×5-Pixelfenster.\n5×5: Nutzt 25 Pixel in einem 5×5-Pixelfenster.\n7×7: Nutzt 49 Pixel in einem 7×7-Pixelfenster.\n9×9: Nutzt 81 Pixel in einem 9×9-Pixelfenster.\n\nManchmal ist das Ergebnis mit einem kleineren Fenster und mehreren Iterationen besser, als mit einem größeren und nur einer Iteration.
@@ -2226,25 +2227,25 @@ ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: -
! Untranslated keys follow; remove the ! prefix after an entry is translated.
!!!!!!!!!!!!!!!!!!!!!!!!!
-!BATCHQUEUE_STARTSTOPHINT;Start or stop processing the images in the queue.\n\nShortcut: Ctrl+s
-!GENERAL_SLIDER;Slider
-!HISTORY_MSG_173;NR - Detail recovery
-!HISTORY_MSG_203;NR - Color space
-!HISTORY_MSG_256;NR - Median - Type
-!HISTORY_MSG_297;NR - Mode
-!HISTORY_MSG_METADATA_MODE;Metadata copy mode
-!PREFERENCES_CROP;Crop editing
-!PREFERENCES_CROP_AUTO_FIT;Automatically zoom to fit the crop area
-!PREFERENCES_CROP_GUIDES;Guides shown when not editing the crop
-!PREFERENCES_CROP_GUIDES_FRAME;Frame
-!PREFERENCES_CROP_GUIDES_FULL;Original
-!PREFERENCES_CROP_GUIDES_NONE;None
-!PREFERENCES_EDITORCMDLINE;Custom command line
-!TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation.
-!TP_DIRPYRDENOISE_LABEL;Noise Reduction
-!TP_METADATA_EDIT;Apply modifications
-!TP_METADATA_MODE;Metadata copy mode
-!TP_METADATA_STRIP;Strip all metadata
-!TP_METADATA_TUNNEL;Copy unchanged
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
+BATCHQUEUE_STARTSTOPHINT;Startet / Stoppt die Verarbeitung\nder Warteschlange.\n\nTaste: Strg + s
+GENERAL_SLIDER;Regler
+HISTORY_MSG_173;(Rauschreduzierung)\nLuminanzdetails
+HISTORY_MSG_203;(Rauschreduzierung)\nFarbraum
+HISTORY_MSG_256;(Rauschreduzierung)\nMedianfilter - Mediantyp
+HISTORY_MSG_297;(Rauschreduzierung)\nQualität
+HISTORY_MSG_METADATA_MODE;(Metadaten)\nKopiermodus
+PREFERENCES_CROP;Einstellung des Ausschnittswerkzeuges
+PREFERENCES_CROP_AUTO_FIT;Automatischer Zoom des Ausschnitts
+PREFERENCES_CROP_GUIDES;Hilfslinien anzeigen wenn Ausschnitt nicht verändert wird
+PREFERENCES_CROP_GUIDES_FRAME;Rahmen
+PREFERENCES_CROP_GUIDES_FULL;Vorgabe des Ausschnittswerkzeuges
+PREFERENCES_CROP_GUIDES_NONE;Keine
+PREFERENCES_EDITORCMDLINE;Benutzerdefinierte Befehlszeile
+TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Erhöht / Reduziert die Intensität der\nChrominanz-Rauschreduzierung in\nAbhängigkeit der Farbsättigung.
+TP_DIRPYRDENOISE_LABEL;Rauschreduzierung
+TP_METADATA_EDIT;Veränderte Daten
+TP_METADATA_MODE;Kopiermodus
+TP_METADATA_STRIP;Keine
+TP_METADATA_TUNNEL;Unveränderte Daten
+TP_RAW_PIXELSHIFTONEGREEN;Benutze ein Grün
+TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Benutze ein Grün anstelle des\nDurchschnitts beider Grüns für\nBereiche ohne Bewegung.
diff --git a/rtdata/languages/default b/rtdata/languages/default
index 3b4e3b74a..7e125a3b8 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -2444,7 +2444,7 @@ TP_WBALANCE_WATER_HEADER;UnderWater
ZOOMPANEL_100;(100%)
ZOOMPANEL_NEWCROPWINDOW;Open (new) detail window
ZOOMPANEL_ZOOM100;Zoom to 100%\nShortcut: z
-ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: Alt-f
-ZOOMPANEL_ZOOMFITSCREEN;Fit whole image to screen\nShortcut: f
+ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: f
+ZOOMPANEL_ZOOMFITSCREEN;Fit whole image to screen\nShortcut: Alt-f
ZOOMPANEL_ZOOMIN;Zoom In\nShortcut: +
ZOOMPANEL_ZOOMOUT;Zoom Out\nShortcut: -
diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css
index 1e196bff8..af7fb00af 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.60
+ Version 2.61
RawTherapee is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -213,10 +213,6 @@ dialog frame > label {
padding-left: 0.91667em;
}
-#BatchQueueButtons {
- margin-top: 0.66667em;
-}
-
frame > label {
margin: 0;
padding: 0.5em 0;
@@ -637,6 +633,11 @@ scale:disabled trough {
background-image: none;
}
+#BatchQueueButtonsMainContainer scale:disabled slider,
+#BatchQueueButtonsMainContainer scale:disabled trough {
+ background-color: shade(@bg-light-grey,.85);
+}
+
/*** end ***************************************************************************************/
/*** Progressbar *******************************************************************************/
@@ -1225,6 +1226,51 @@ popover.background modelbutton:hover {
}
/** end ****************************************************************************************/
+/*** Switch ***********************************************************************************/
+switch {
+ min-height: 2.16667em;
+ min-width: 11em;
+ margin: 0;
+ padding: 0;
+ border-radius: 0.2em;
+ background-image: none;
+ 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;
+ margin-bottom: 0.5em;
+}
+
+switch slider {
+ border: 0.08334em solid @bg-entry-border;
+ background-image: linear-gradient(to bottom, shade (@accent-color2,1.15), shade (@accent-color2,.85));
+ border: 0.08334em solid @bg-entry-border;
+ box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.1);
+ border-radius: 0.2em 0 0 0.2em;
+}
+switch:checked slider{
+ border-radius: 0 0.2em 0.2em 0;
+}
+
+switch:hover slider {
+ background-image: linear-gradient(to bottom, shade (@accent-color2,1.20), shade (@accent-color2,.90));
+}
+
+switch:checked {
+ background-color: rgb(140,0,20);
+ color: @headline-big;
+}
+
+switch:disabled:not(:checked) {
+ box-shadow: none;
+ background-image: none;
+ background-color: shade (@bg-light-grey, .85);
+}
+switch:disabled slider {
+ background-image: linear-gradient(to bottom, rgba(125,125,125,.4), rgba(60,60,60,.4));
+ background-color: shade (@bg-light-grey, .85);
+}
+/** end ****************************************************************************************/
+
/*** Buttons ***********************************************************************************/
button {
min-height: 2.16667em;
@@ -1355,6 +1401,7 @@ button.MiddleH {
/**/
/* Button base format for Toolbox and dialogs */
+#ToolPanelNotebook > stack > box > box > combobox .combo,
dialog button,
#MyExpander button,
#BatchQueueButtonsMainContainer button {
@@ -1371,7 +1418,7 @@ combobox .combo,
dialog combobox .combo,
#ToolPanelNotebook combobox .combo,
#BatchQueueButtonsMainContainer combobox .combo {
- padding: 0 0.208334em;
+ padding: 0 0.26667em;
}
/**/
@@ -1386,6 +1433,7 @@ dialog combobox .combo,
#MyExpander combobox + label */ {
margin-left: 0.16667em;
}
+
#MyExpander label + * > button:not(.flat).Left,
#MyExpander label + combobox:not(:first-child):not(:only-child),
#MyExpander label + button:not(.flat):not(spinbutton) {
@@ -1455,13 +1503,6 @@ messagedialog .dialog-action-area button:not(:only-child):nth-child(2) {
}
/**/
-/* Queue */
-#BatchQueueButtons button {
- min-height: 2.16667em;
- min-width: 10em;
-}
-/**/
-
/* View & Filechooser Buttons */
dialog .view button,
window .view button {
diff --git a/rtengine/curves.h b/rtengine/curves.h
index 22c873fee..9a5a95a79 100644
--- a/rtengine/curves.h
+++ b/rtengine/curves.h
@@ -1277,6 +1277,10 @@ inline void SatAndValueBlendingToneCurve::Apply(float& r, float& g, float& b) co
const float lum = (r + g + b) / 3.f;
const float newLum = lutToneCurve[lum];
+ if (newLum == lum) {
+ return;
+ }
+
float h, s, v;
Color::rgb2hsvtc(r, g, b, h, s, v);
diff --git a/rtengine/rt_math.h b/rtengine/rt_math.h
index 4bdfe6f06..787e2e63f 100644
--- a/rtengine/rt_math.h
+++ b/rtengine/rt_math.h
@@ -25,6 +25,8 @@ constexpr double RT_NAN = std::numeric_limits::quiet_NaN();
constexpr float RT_PI_F = RT_PI;
constexpr float RT_PI_F_2 = RT_PI_2;
constexpr float RT_PI_F_180 = RT_PI_180;
+constexpr float RT_1_PI_F = RT_1_PI;
+constexpr float RT_2_PI_F = RT_2_PI;
constexpr float RT_INFINITY_F = std::numeric_limits::infinity();
constexpr float RT_NAN_F = std::numeric_limits::quiet_NaN();
diff --git a/rtengine/sleef.c b/rtengine/sleef.c
index 17dfccc0f..f03c9f1b3 100644
--- a/rtengine/sleef.c
+++ b/rtengine/sleef.c
@@ -923,9 +923,8 @@ __inline float mulsignf(float x, float y) {
return intBitsToFloat(floatToRawIntBits(x) ^ (floatToRawIntBits(y) & (1 << 31)));
}
-__inline float signf(float d) { return mulsignf(1, d); }
+__inline float signf(float d) { return copysign(1, d); }
__inline float mlaf(float x, float y, float z) { return x * y + z; }
-__inline float xrintf(float x) { return x < 0 ? (int)(x - 0.5f) : (int)(x + 0.5f); }
__inline int xisnanf(float x) { return x != x; }
__inline int xisinff(float x) { return x == rtengine::RT_INFINITY_F || x == -rtengine::RT_INFINITY_F; }
@@ -984,7 +983,7 @@ __inline float xsinf(float d) {
int q;
float u, s;
- q = (int)xrintf(d * (float)rtengine::RT_1_PI);
+ q = rint(d * rtengine::RT_1_PI_F);
d = mlaf(q, -PI4_Af*4, d);
d = mlaf(q, -PI4_Bf*4, d);
@@ -1009,7 +1008,7 @@ __inline float xcosf(float d) {
int q;
float u, s;
- q = 1 + 2*(int)xrintf(d * (float)rtengine::RT_1_PI - 0.5f);
+ q = 1 + 2*rint(d * rtengine::RT_1_PI_F - 0.5f);
d = mlaf(q, -PI4_Af*2, d);
d = mlaf(q, -PI4_Bf*2, d);
@@ -1035,7 +1034,7 @@ __inline float2 xsincosf(float d) {
float u, s, t;
float2 r;
- q = (int)rint(d * ((float)(2 * rtengine::RT_1_PI)));
+ q = rint(d * rtengine::RT_2_PI_F);
s = d;
@@ -1076,7 +1075,7 @@ __inline float xtanf(float d) {
int q;
float u, s, x;
- q = (int)xrintf(d * (float)(2 * rtengine::RT_1_PI));
+ q = rint(d * (float)(2 * rtengine::RT_1_PI));
x = d;
@@ -1202,7 +1201,7 @@ __inline float xlogf(float d) {
__inline float xexpf(float d) {
if(d<=-104.0f) return 0.0f;
- int q = (int)xrintf(d * R_LN2f);
+ int q = rint(d * R_LN2f);
float s, u;
s = mlaf(q, -L2Uf, d);
diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc
index 643803075..e9964073a 100644
--- a/rtgui/editorpanel.cc
+++ b/rtgui/editorpanel.cc
@@ -1643,7 +1643,7 @@ bool EditorPanel::handleShortcutKey (GdkEventKey* event)
return true;
case GDK_KEY_f:
- iareapanel->imageArea->zoomPanel->zoomFitClicked();
+ iareapanel->imageArea->zoomPanel->zoomFitCropClicked();
return true;
case GDK_KEY_F5:
@@ -1718,7 +1718,7 @@ bool EditorPanel::handleShortcutKey (GdkEventKey* event)
return true;
case GDK_KEY_f:
- iareapanel->imageArea->zoomPanel->zoomFitCropClicked();
+ iareapanel->imageArea->zoomPanel->zoomFitClicked();
return true;
}
}
diff --git a/rtgui/multilangmgr.cc b/rtgui/multilangmgr.cc
index 7cc79d19a..b4896d69a 100644
--- a/rtgui/multilangmgr.cc
+++ b/rtgui/multilangmgr.cc
@@ -94,10 +94,34 @@ struct LocaleToLang : private std::map,
return "default";
}
+
+ std::string getLocale(const Glib::ustring &language) const
+ {
+ for (auto &p : *this) {
+ if (p.second == language) {
+ std::string ret = p.first.first;
+ if (!p.first.second.empty()) {
+ ret += "_" + p.first.second;
+ }
+ return ret;
+ }
+ }
+ return "C";
+ }
};
const LocaleToLang localeToLang;
+void setGtkLanguage(const Glib::ustring &language)
+{
+ auto l = localeToLang.getLocale(language);
+#ifdef WIN32
+ putenv(("LANG=" + l).c_str());
+#else
+ setenv("LANG", l.c_str(), true);
+#endif
+}
+
}
MultiLangMgr langMgr;
@@ -106,8 +130,10 @@ MultiLangMgr::MultiLangMgr ()
{
}
-void MultiLangMgr::load (const std::vector &fnames)
+void MultiLangMgr::load(const Glib::ustring &language, const std::vector &fnames)
{
+ setGtkLanguage(language);
+
translations.clear();
for (const auto& fname : fnames) {
diff --git a/rtgui/multilangmgr.h b/rtgui/multilangmgr.h
index d439307e3..649865217 100644
--- a/rtgui/multilangmgr.h
+++ b/rtgui/multilangmgr.h
@@ -30,7 +30,7 @@ class MultiLangMgr
public:
MultiLangMgr ();
- void load(const std::vector &fnames);
+ void load(const Glib::ustring &language, const std::vector &fnames);
Glib::ustring getStr(const std::string& key) const;
static bool isOSLanguageDetectSupported();
static Glib::ustring getOSUserLanguage();
diff --git a/rtgui/options.cc b/rtgui/options.cc
index 7bfdb983a..43a51d1cd 100644
--- a/rtgui/options.cc
+++ b/rtgui/options.cc
@@ -2386,7 +2386,7 @@ void Options::load (bool lightweight)
}
}
- langMgr.load ({localeTranslation, languageTranslation, defaultTranslation});
+ langMgr.load (options.language, {localeTranslation, languageTranslation, defaultTranslation});
rtengine::init (&options.rtSettings, argv0, rtdir, !lightweight);
}