From dbb9fcd2b189f2b5b502793c768699b1368650c0 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Wed, 11 Apr 2018 11:03:07 +0200 Subject: [PATCH 001/115] Lens corrections: apply CA correction after distortion, and not before --- rtengine/iptransform.cc | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/rtengine/iptransform.cc b/rtengine/iptransform.cc index ff976137e..a5ade7c53 100644 --- a/rtengine/iptransform.cc +++ b/rtengine/iptransform.cc @@ -327,25 +327,29 @@ void ImProcFunctions::transform (Imagefloat* original, Imagefloat* transformed, } else { bool highQuality; std::unique_ptr tmpimg; + Imagefloat *dest = transformed; if (!needsCA() && scale != 1) { highQuality = false; } else { highQuality = true; // agriggio: CA correction via the lens profile has to be - // performed before all the other transformations (except for the - // coarse rotation/flipping). In order to not change the code too - // much, I simply introduced a new mode - // TRANSFORM_HIGH_QUALITY_CA, which applies *only* - // profile-based CA correction. So, the correction in this case - // occurs in two steps, using an intermediate temporary - // image. There's room for optimization of course... + // performed before separately from the the other transformations + // (except for the coarse rotation/flipping). In order to not + // change the code too much, I simply introduced a new mode + // TRANSFORM_HIGH_QUALITY_CA, which applies *only* profile-based + // CA correction. So, the correction in this case occurs in two + // steps, using an intermediate temporary image. There's room for + // optimization of course... if (pLCPMap && params->lensProf.useCA && pLCPMap->isCACorrectionAvailable()) { tmpimg.reset(new Imagefloat(original->getWidth(), original->getHeight())); - transformLCPCAOnly(original, tmpimg.get(), cx, cy, pLCPMap.get()); - original = tmpimg.get(); + dest = tmpimg.get(); } } - transformGeneral(highQuality, original, transformed, cx, cy, sx, sy, oW, oH, fW, fH, pLCPMap.get()); + transformGeneral(highQuality, original, dest, cx, cy, sx, sy, oW, oH, fW, fH, pLCPMap.get()); + + if (highQuality && dest != transformed) { + transformLCPCAOnly(dest, transformed, cx, cy, pLCPMap.get()); + } } } From 5ac11ef1b95aec7d02ef3fbca4845682d5734425 Mon Sep 17 00:00:00 2001 From: Hombre Date: Sun, 6 May 2018 18:50:42 +0200 Subject: [PATCH 002/115] Enable saving 32 bits floating point TIFF image with rt-cli (see #2357) --- rtengine/imageio.cc | 3 +++ rtgui/main-cli.cc | 10 ++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index 1d07fbc84..cc126a3b3 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -1026,6 +1026,9 @@ int ImageIO::savePNG (Glib::ustring fname, volatile int bps) if (bps < 0) { bps = getBPS (); } + if (bps > 16) { + bps = 16; + } png_set_IHDR(png, info, width, height, bps, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_BASE); diff --git a/rtgui/main-cli.cc b/rtgui/main-cli.cc index 6643b0913..daa709696 100644 --- a/rtgui/main-cli.cc +++ b/rtgui/main-cli.cc @@ -391,8 +391,8 @@ int processLineParams ( int argc, char **argv ) case 'b': bits = atoi (currParam.substr (2).c_str()); - if (bits != 8 && bits != 16) { - std::cerr << "Error: specify -b8 for 8-bit or -b16 for 16-bit output." << std::endl; + if (bits != 8 && bits != 16 && bits != 32) { + std::cerr << "Error: specify -b8 for 8-bit/integer or -b16 for 16-bit/integer or -b32 for 32-bit/float output." << std::endl; deleteProcParams (processingParams); return -3; } @@ -550,8 +550,10 @@ int processLineParams ( int argc, char **argv ) std::cout << " Chroma halved horizontally." << std::endl; std::cout << " 3 = Best quality: 1x1, 1x1, 1x1 (4:4:4)" << std::endl; std::cout << " No chroma subsampling." << std::endl; - std::cout << " -b<8|16> Specify bit depth per channel (default value: 16 for TIFF, 8 for PNG)." << std::endl; - std::cout << " Only applies to TIFF and PNG output, JPEG is always 8." << std::endl; + std::cout << " -b<8|16|32> Specify bit depth per channel (default value: 16 for TIFF, 8 for PNG)." << std::endl; + std::cout << " TIFF can be 8-bit/int, 16-bit/int or 32-bit/float" << std::endl; + std::cout << " PNG can be 8-bit/int or 16-bit/int." << std::endl; + std::cout << " JPEG is only 8-bit/int." << std::endl; std::cout << " -t[z] Specify output to be TIFF." << std::endl; std::cout << " Uncompressed by default, or deflate compression with 'z'." << std::endl; std::cout << " -n Specify output to be compressed PNG." << std::endl; From 30efa5930da20985d47c6706f2801245f68798af Mon Sep 17 00:00:00 2001 From: Hombre Date: Mon, 7 May 2018 09:57:53 +0200 Subject: [PATCH 003/115] 16-bit floating-point support for TIFF output image (see #2357) --- rtdata/languages/Francais | 1 + rtdata/languages/default | 1 + rtengine/iimage.h | 3 ++- rtengine/image16.h | 4 ++-- rtengine/image8.h | 4 ++-- rtengine/imagefloat.h | 4 ++-- rtengine/imageio.cc | 33 +++++++++++++++++++++------------ rtengine/imageio.h | 2 +- rtgui/batchqueue.cc | 8 +++++--- rtgui/batchqueueentry.cc | 5 +++-- rtgui/editorpanel.cc | 9 +++++---- rtgui/main-cli.cc | 17 +++++++++++------ rtgui/options.cc | 12 ++++++++++++ rtgui/options.h | 2 ++ rtgui/saveformatpanel.cc | 18 ++++++++++++------ rtgui/saveformatpanel.h | 2 +- 16 files changed, 83 insertions(+), 42 deletions(-) diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 1553c0347..b28545648 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -1216,6 +1216,7 @@ SAMPLEFORMAT_8;LogLuv 32 bits SAMPLEFORMAT_16;32 bits à virgule flottante SAVEDLG_AUTOSUFFIX;Ajouter automatiquement un suffixe si le fichier existe déjà SAVEDLG_FILEFORMAT;Format de fichier +SAVEDLG_FILEFORMAT_FLOAT; virgule flottante SAVEDLG_FORCEFORMATOPTS;Forcer les options d'enregistrement SAVEDLG_JPEGQUAL;Qualité JPEG SAVEDLG_PNGCOMPR;Compression PNG diff --git a/rtdata/languages/default b/rtdata/languages/default index 2e1b6cca8..2a5f53505 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1219,6 +1219,7 @@ SAMPLEFORMAT_8;LogLuv 32 bits SAMPLEFORMAT_16;32 bits floating point SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists SAVEDLG_FILEFORMAT;File format +SAVEDLG_FILEFORMAT_FLOAT; floating-point SAVEDLG_FORCEFORMATOPTS;Force saving options SAVEDLG_JPEGQUAL;JPEG quality SAVEDLG_PUTTOQUEUE;Put into processing queue diff --git a/rtengine/iimage.h b/rtengine/iimage.h index d09f46a3a..cd22a2559 100644 --- a/rtengine/iimage.h +++ b/rtengine/iimage.h @@ -1765,8 +1765,9 @@ public: /** @brief Saves the image to file in a tif format. * @param fname is the name of the file * @param bps can be 8 or 16 depending on the bits per pixels the output file will have + * @param isFloat is true for saving float images. Will be ignored by file format not supporting float data @return the error code, 0 if none */ - virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false) = 0; + virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, float isFloat = false, bool uncompressed = false) = 0; /** @brief Sets the progress listener if you want to follow the progress of the image saving operations (optional). * @param pl is the pointer to the class implementing the ProgressListener interface */ virtual void setSaveProgressListener (ProgressListener* pl) = 0; diff --git a/rtengine/image16.h b/rtengine/image16.h index af5642638..33e74f146 100644 --- a/rtengine/image16.h +++ b/rtengine/image16.h @@ -83,9 +83,9 @@ public: { return saveJPEG (fname, quality, subSamp); } - virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false) + virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, float isFloat = false, bool uncompressed = false) { - return saveTIFF (fname, bps, uncompressed); + return saveTIFF (fname, bps, isFloat, uncompressed); } virtual void setSaveProgressListener (ProgressListener* pl) { diff --git a/rtengine/image8.h b/rtengine/image8.h index eafaa2d46..6444499d9 100644 --- a/rtengine/image8.h +++ b/rtengine/image8.h @@ -78,9 +78,9 @@ public: { return saveJPEG (fname, quality, subSamp); } - virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false) + virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, float isFloat = false, bool uncompressed = false) { - return saveTIFF (fname, bps, uncompressed); + return saveTIFF (fname, bps, isFloat, uncompressed); } virtual void setSaveProgressListener (ProgressListener* pl) { diff --git a/rtengine/imagefloat.h b/rtengine/imagefloat.h index 5246a2f6e..abb74bc8e 100644 --- a/rtengine/imagefloat.h +++ b/rtengine/imagefloat.h @@ -87,9 +87,9 @@ public: { return saveJPEG (fname, quality, subSamp); } - virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false) + virtual int saveAsTIFF (Glib::ustring fname, int bps = -1, float isFloat = false, bool uncompressed = false) { - return saveTIFF (fname, bps, uncompressed); + return saveTIFF (fname, bps, isFloat, uncompressed); } virtual void setSaveProgressListener (ProgressListener* pl) { diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index cc126a3b3..c965d182a 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -1300,13 +1300,12 @@ int ImageIO::saveJPEG (Glib::ustring fname, int quality, int subSamp) return IMIO_SUCCESS; } -int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed) +int ImageIO::saveTIFF (Glib::ustring fname, int bps, float isFloat, bool uncompressed) { if (getWidth() < 1 || getHeight() < 1) { return IMIO_HEADERERROR; } - //TODO: Handling 32 bits floating point output images! bool writeOk = true; int width = getWidth (); int height = getHeight (); @@ -1458,10 +1457,10 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed) TIFFSetField (out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); TIFFSetField (out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); TIFFSetField (out, TIFFTAG_COMPRESSION, uncompressed ? COMPRESSION_NONE : COMPRESSION_ADOBE_DEFLATE); - TIFFSetField (out, TIFFTAG_SAMPLEFORMAT, bps == 32 ? SAMPLEFORMAT_IEEEFP : SAMPLEFORMAT_UINT); + TIFFSetField (out, TIFFTAG_SAMPLEFORMAT, (bps == 16 || bps == 32) && isFloat ? SAMPLEFORMAT_IEEEFP : SAMPLEFORMAT_UINT); if (!uncompressed) { - TIFFSetField (out, TIFFTAG_PREDICTOR, bps == 32 ? PREDICTOR_FLOATINGPOINT : PREDICTOR_HORIZONTAL); + TIFFSetField (out, TIFFTAG_PREDICTOR, (bps == 16 || bps == 32) && isFloat ? PREDICTOR_FLOATINGPOINT : PREDICTOR_HORIZONTAL); } if (profileData) { TIFFSetField (out, TIFFTAG_ICCPROFILE, profileLength, profileData); @@ -1470,14 +1469,24 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed) for (int row = 0; row < height; row++) { getScanline (row, linebuffer, bps); - if(needsReverse && !uncompressed && bps == 32) { - for(int i = 0; i < lineWidth; i += 4) { - char temp = linebuffer[i]; - linebuffer[i] = linebuffer[i + 3]; - linebuffer[i + 3] = temp; - temp = linebuffer[i + 1]; - linebuffer[i + 1] = linebuffer[i + 2]; - linebuffer[i + 2] = temp; + /*if (bps == 16) { + if(needsReverse && !uncompressed) { + for(int i = 0; i < lineWidth; i += 2) { + char temp = linebuffer[i]; + linebuffer[i] = linebuffer[i + 1]; + linebuffer[i + 1] = temp; + } + } + } else */ if (bps == 32) { + if(needsReverse && !uncompressed) { + for(int i = 0; i < lineWidth; i += 4) { + char temp = linebuffer[i]; + linebuffer[i] = linebuffer[i + 3]; + linebuffer[i + 3] = temp; + temp = linebuffer[i + 1]; + linebuffer[i + 1] = linebuffer[i + 2]; + linebuffer[i + 2] = temp; + } } } diff --git a/rtengine/imageio.h b/rtengine/imageio.h index 294a3d476..135927bbf 100644 --- a/rtengine/imageio.h +++ b/rtengine/imageio.h @@ -138,7 +138,7 @@ public: int savePNG (Glib::ustring fname, volatile int bps = -1); int saveJPEG (Glib::ustring fname, int quality = 100, int subSamp = 3); - int saveTIFF (Glib::ustring fname, int bps = -1, bool uncompressed = false); + int saveTIFF (Glib::ustring fname, int bps = -1, float isFloat = false, bool uncompressed = false); cmsHPROFILE getEmbeddedProfile () { diff --git a/rtgui/batchqueue.cc b/rtgui/batchqueue.cc index 2f3505a08..10105e117 100644 --- a/rtgui/batchqueue.cc +++ b/rtgui/batchqueue.cc @@ -228,7 +228,7 @@ bool BatchQueue::saveBatchQueue () // The column's header is mandatory (the first line will be skipped when loaded) file << "input image full path|param file full path|output image full path|file format|jpeg quality|jpeg subsampling|" - << "png bit depth|png compression|tiff bit depth|uncompressed tiff|save output params|force format options|fast export|" + << "png bit depth|png compression|tiff bit depth|tiff is float|uncompressed tiff|save output params|force format options|fast export|" << std::endl; // method is already running with entryLock, so no need to lock again @@ -246,7 +246,7 @@ bool BatchQueue::saveBatchQueue () #endif << saveFormat.jpegQuality << '|' << saveFormat.jpegSubSamp << '|' << saveFormat.pngBits << '|' - << saveFormat.tiffBits << '|' << saveFormat.tiffUncompressed << '|' + << saveFormat.tiffBits << '|' << (saveFormat.tiffFloat ? 1 : 0) << '|' << saveFormat.tiffUncompressed << '|' << saveFormat.saveParams << '|' << entry->forceFormatOpts << '|' << entry->fast_pipeline << '|' << std::endl; @@ -311,6 +311,7 @@ bool BatchQueue::loadBatchQueue () const auto jpegSubSamp = nextIntOr (options.saveFormat.jpegSubSamp); const auto pngBits = nextIntOr (options.saveFormat.pngBits); const auto tiffBits = nextIntOr (options.saveFormat.tiffBits); + const auto tiffFloat = nextIntOr (options.saveFormat.tiffFloat); const auto tiffUncompressed = nextIntOr (options.saveFormat.tiffUncompressed); const auto saveParams = nextIntOr (options.saveFormat.saveParams); const auto forceFormatOpts = nextIntOr (options.forceFormatOpts); @@ -352,6 +353,7 @@ bool BatchQueue::loadBatchQueue () saveFormat.jpegSubSamp = jpegSubSamp; saveFormat.pngBits = pngBits; saveFormat.tiffBits = tiffBits; + saveFormat.tiffFloat = tiffFloat == 1; saveFormat.tiffUncompressed = tiffUncompressed != 0; saveFormat.saveParams = saveParams != 0; entry->forceFormatOpts = forceFormatOpts != 0; @@ -608,7 +610,7 @@ rtengine::ProcessingJob* BatchQueue::imageReady (rtengine::IImagefloat* img) int err = 0; if (saveFormat.format == "tif") { - err = img->saveAsTIFF (fname, saveFormat.tiffBits, saveFormat.tiffUncompressed); + err = img->saveAsTIFF (fname, saveFormat.tiffBits, saveFormat.tiffFloat, saveFormat.tiffUncompressed); } else if (saveFormat.format == "png") { err = img->saveAsPNG (fname, saveFormat.pngBits); } else if (saveFormat.format == "jpg") { diff --git a/rtgui/batchqueueentry.cc b/rtgui/batchqueueentry.cc index 3092d6db4..d886abac6 100644 --- a/rtgui/batchqueueentry.cc +++ b/rtgui/batchqueueentry.cc @@ -175,9 +175,10 @@ Glib::ustring BatchQueueEntry::getToolTip (int x, int y) tooltip += Glib::ustring::compose("\n\n%1: %2", M("BATCHQUEUE_DESTFILENAME"), outFileName); if (forceFormatOpts) { - tooltip += Glib::ustring::compose("\n\n%1: %2 (%3 bits)", M("SAVEDLG_FILEFORMAT"), saveFormat.format, + tooltip += Glib::ustring::compose("\n\n%1: %2 (%3-bits%4)", M("SAVEDLG_FILEFORMAT"), saveFormat.format, saveFormat.format == "png" ? saveFormat.pngBits : - saveFormat.format == "tif" ? saveFormat.tiffBits : 8); + saveFormat.format == "tif" ? saveFormat.tiffBits : 8, + saveFormat.format == "tif" && saveFormat.tiffFloat ? M("SAVEDLG_FILEFORMAT_FLOAT") : ""); if (saveFormat.format == "jpg") { tooltip += Glib::ustring::compose("\n%1: %2\n%3: %4", diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 76bf2794a..30c8b4c59 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -1763,7 +1763,7 @@ bool EditorPanel::idle_saveImage (ProgressConnector *pc, img->setSaveProgressListener (parent->getProgressListener()); if (sf.format == "tif") - ld->startFunc (sigc::bind (sigc::mem_fun (img, &rtengine::IImagefloat::saveAsTIFF), fname, sf.tiffBits, sf.tiffUncompressed), + ld->startFunc (sigc::bind (sigc::mem_fun (img, &rtengine::IImagefloat::saveAsTIFF), fname, sf.tiffBits, sf.tiffFloat, sf.tiffUncompressed), sigc::bind (sigc::mem_fun (*this, &EditorPanel::idle_imageSaved), ld, img, fname, sf, pparams)); else if (sf.format == "png") ld->startFunc (sigc::bind (sigc::mem_fun (img, &rtengine::IImagefloat::saveAsPNG), fname, sf.pngBits), @@ -1980,9 +1980,9 @@ bool EditorPanel::saveImmediately (const Glib::ustring &filename, const SaveForm int err = 0; if (gimpPlugin) { - err = img->saveAsTIFF (filename, 32, true); + err = img->saveAsTIFF (filename, 32, true, true); } else if (sf.format == "tif") { - err = img->saveAsTIFF (filename, sf.tiffBits, sf.tiffUncompressed); + err = img->saveAsTIFF (filename, sf.tiffBits, sf.tiffFloat, sf.tiffUncompressed); } else if (sf.format == "png") { err = img->saveAsPNG (filename, sf.pngBits); } else if (sf.format == "jpg") { @@ -2038,6 +2038,7 @@ bool EditorPanel::idle_sendToGimp ( ProgressConnector *p SaveFormat sf; sf.format = "tif"; sf.tiffBits = 16; + sf.tiffFloat = false; sf.tiffUncompressed = true; sf.saveParams = true; @@ -2058,7 +2059,7 @@ bool EditorPanel::idle_sendToGimp ( ProgressConnector *p ProgressConnector *ld = new ProgressConnector(); img->setSaveProgressListener (parent->getProgressListener()); - ld->startFunc (sigc::bind (sigc::mem_fun (img, &rtengine::IImagefloat::saveAsTIFF), fileName, sf.tiffBits, sf.tiffUncompressed), + ld->startFunc (sigc::bind (sigc::mem_fun (img, &rtengine::IImagefloat::saveAsTIFF), fileName, sf.tiffBits, sf.tiffFloat, sf.tiffUncompressed), sigc::bind (sigc::mem_fun (*this, &EditorPanel::idle_sentToGimp), ld, img, fileName)); } else { Glib::ustring msg_ = Glib::ustring (" Error during image processing\n"); diff --git a/rtgui/main-cli.cc b/rtgui/main-cli.cc index daa709696..c480c7213 100644 --- a/rtgui/main-cli.cc +++ b/rtgui/main-cli.cc @@ -267,6 +267,7 @@ int processLineParams ( int argc, char **argv ) int compression = 92; int subsampling = 3; int bits = -1; + bool isFloat = false; std::string outputType = ""; unsigned errors = 0; @@ -392,11 +393,14 @@ int processLineParams ( int argc, char **argv ) bits = atoi (currParam.substr (2).c_str()); if (bits != 8 && bits != 16 && bits != 32) { - std::cerr << "Error: specify -b8 for 8-bit/integer or -b16 for 16-bit/integer or -b32 for 32-bit/float output." << std::endl; + std::cerr << "Error: specify -b8 for 8-bit/integer or -b16 for 16-bit/integer or -b16f for 16-bit/float or -b32 for 32-bit/float output." << std::endl; deleteProcParams (processingParams); return -3; } + isFloat = (bits == 16 && currParam.length() == 3 && currParam.at(2) == 'f') || bits == 32; + printf("Float output detected (%d bits)!\n", bits); + break; case 't': @@ -550,10 +554,11 @@ int processLineParams ( int argc, char **argv ) std::cout << " Chroma halved horizontally." << std::endl; std::cout << " 3 = Best quality: 1x1, 1x1, 1x1 (4:4:4)" << std::endl; std::cout << " No chroma subsampling." << std::endl; - std::cout << " -b<8|16|32> Specify bit depth per channel (default value: 16 for TIFF, 8 for PNG)." << std::endl; - std::cout << " TIFF can be 8-bit/int, 16-bit/int or 32-bit/float" << std::endl; - std::cout << " PNG can be 8-bit/int or 16-bit/int." << std::endl; - std::cout << " JPEG is only 8-bit/int." << std::endl; + std::cout << " -b<8|16|16f|32> Specify bit depth per channel (default value: 16 for TIFF, 8 for PNG and JPEG)." << std::endl; + std::cout << " 8 = 8 bits integer, applies to JPEG, PNG and TIFF" << std::endl; + std::cout << " 16 = 16 bits integer, applies to PNG and TIFF" << std::endl; + std::cout << " 16f = 16 bits float, applies to TIFF" << std::endl; + std::cout << " 32 = 32 bits float, applies to TIFF" << std::endl; std::cout << " -t[z] Specify output to be TIFF." << std::endl; std::cout << " Uncompressed by default, or deflate compression with 'z'." << std::endl; std::cout << " -n Specify output to be compressed PNG." << std::endl; @@ -781,7 +786,7 @@ int processLineParams ( int argc, char **argv ) if ( outputType == "jpg" ) { errorCode = resultImage->saveAsJPEG ( outputFile, compression, subsampling ); } else if ( outputType == "tif" ) { - errorCode = resultImage->saveAsTIFF ( outputFile, bits, compression == 0 ); + errorCode = resultImage->saveAsTIFF ( outputFile, bits, isFloat, compression == 0 ); } else if ( outputType == "png" ) { errorCode = resultImage->saveAsPNG ( outputFile, bits ); } else { diff --git a/rtgui/options.cc b/rtgui/options.cc index 1dbaa574e..0c95cc7ae 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -298,6 +298,7 @@ void Options::setDefaults () saveFormat.jpegSubSamp = 2; saveFormat.pngBits = 8; saveFormat.tiffBits = 16; + saveFormat.tiffFloat = false; saveFormat.tiffUncompressed = true; saveFormat.saveParams = true; @@ -306,6 +307,7 @@ void Options::setDefaults () saveFormatBatch.jpegSubSamp = 2; saveFormatBatch.pngBits = 8; saveFormatBatch.tiffBits = 16; + saveFormatBatch.tiffFloat = false; saveFormatBatch.tiffUncompressed = true; saveFormatBatch.saveParams = true; @@ -736,6 +738,10 @@ void Options::readFromFile (Glib::ustring fname) saveFormat.tiffBits = keyFile.get_integer ("Output", "TiffBps"); } + if (keyFile.has_key ("Output", "TiffFloat")) { + saveFormat.tiffFloat = keyFile.get_boolean ("Output", "TiffFloat"); + } + if (keyFile.has_key ("Output", "TiffUncompressed")) { saveFormat.tiffUncompressed = keyFile.get_boolean ("Output", "TiffUncompressed"); } @@ -765,6 +771,10 @@ void Options::readFromFile (Glib::ustring fname) saveFormatBatch.tiffBits = keyFile.get_integer ("Output", "TiffBpsBatch"); } + if (keyFile.has_key ("Output", "TiffFloatBatch")) { + saveFormatBatch.tiffFloat = keyFile.get_boolean ("Output", "TiffFloatBatch"); + } + if (keyFile.has_key ("Output", "TiffUncompressedBatch")) { saveFormatBatch.tiffUncompressed = keyFile.get_boolean ("Output", "TiffUncompressedBatch"); } @@ -1852,6 +1862,7 @@ void Options::saveToFile (Glib::ustring fname) keyFile.set_integer ("Output", "JpegSubSamp", saveFormat.jpegSubSamp); keyFile.set_integer ("Output", "PngBps", saveFormat.pngBits); keyFile.set_integer ("Output", "TiffBps", saveFormat.tiffBits); + keyFile.set_boolean ("Output", "TiffFloat", saveFormat.tiffFloat); keyFile.set_boolean ("Output", "TiffUncompressed", saveFormat.tiffUncompressed); keyFile.set_boolean ("Output", "SaveProcParams", saveFormat.saveParams); @@ -1860,6 +1871,7 @@ void Options::saveToFile (Glib::ustring fname) keyFile.set_integer ("Output", "JpegSubSampBatch", saveFormatBatch.jpegSubSamp); keyFile.set_integer ("Output", "PngBpsBatch", saveFormatBatch.pngBits); keyFile.set_integer ("Output", "TiffBpsBatch", saveFormatBatch.tiffBits); + keyFile.set_boolean ("Output", "TiffFloatBatch", saveFormatBatch.tiffFloat); keyFile.set_boolean ("Output", "TiffUncompressedBatch", saveFormatBatch.tiffUncompressed); keyFile.set_boolean ("Output", "SaveProcParamsBatch", saveFormatBatch.saveParams); diff --git a/rtgui/options.h b/rtgui/options.h index 25fa31b6d..4695b0443 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -50,6 +50,7 @@ struct SaveFormat { jpegQuality (90), jpegSubSamp (2), tiffBits (8), + tiffFloat(false), tiffUncompressed (true), saveParams (true) { @@ -60,6 +61,7 @@ struct SaveFormat { int jpegQuality; int jpegSubSamp; // 1=best compression, 3=best quality int tiffBits; + bool tiffFloat; bool tiffUncompressed; bool saveParams; }; diff --git a/rtgui/saveformatpanel.cc b/rtgui/saveformatpanel.cc index a14a7359c..2a6d5cad1 100644 --- a/rtgui/saveformatpanel.cc +++ b/rtgui/saveformatpanel.cc @@ -40,6 +40,7 @@ SaveFormatPanel::SaveFormatPanel () : listener (nullptr) format->append ("JPEG (8-bit)"); format->append ("TIFF (8-bit)"); format->append ("TIFF (16-bit)"); + format->append ("TIFF (16-bit float)"); format->append ("TIFF (32-bit float)"); format->append ("PNG (8-bit)"); format->append ("PNG (16-bit)"); @@ -48,8 +49,9 @@ SaveFormatPanel::SaveFormatPanel () : listener (nullptr) fstr[1] = "tif"; fstr[2] = "tif"; fstr[3] = "tif"; - fstr[4] = "png"; + fstr[4] = "tif"; fstr[5] = "png"; + fstr[6] = "png"; hb1->attach (*flab, 0, 0, 1, 1); hb1->attach (*format, 1, 0, 1, 1); @@ -123,10 +125,12 @@ void SaveFormatPanel::init (SaveFormat &sf) if (sf.format == "jpg") { format->set_active (0); } else if (sf.format == "png" && sf.pngBits == 16) { - format->set_active (5); + format->set_active (6); } else if (sf.format == "png" && sf.pngBits == 8) { - format->set_active (4); + format->set_active (5); } else if (sf.format == "tif" && sf.tiffBits == 32) { + format->set_active (4); + } else if (sf.format == "tif" && sf.tiffBits == 16 && sf.tiffFloat) { format->set_active (3); } else if (sf.format == "tif" && sf.tiffBits == 16) { format->set_active (2); @@ -150,20 +154,22 @@ SaveFormat SaveFormatPanel::getFormat () int sel = format->get_active_row_number(); sf.format = fstr[sel]; - if (sel == 5) { + if (sel == 6) { sf.pngBits = 16; } else { sf.pngBits = 8; } - if (sel == 2) { + if (sel == 2 || sel == 3) { sf.tiffBits = 16; - } else if (sel == 3) { + } else if (sel == 4) { sf.tiffBits = 32; } else { sf.tiffBits = 8; } + sf.tiffFloat = sel == 4 || sel == 3; + sf.jpegQuality = (int) jpegQual->getValue (); sf.jpegSubSamp = jpegSubSamp->get_active_row_number() + 1; sf.tiffUncompressed = tiffUncompressed->get_active(); diff --git a/rtgui/saveformatpanel.h b/rtgui/saveformatpanel.h index 8dc493051..788593d9e 100644 --- a/rtgui/saveformatpanel.h +++ b/rtgui/saveformatpanel.h @@ -44,7 +44,7 @@ protected: Gtk::Grid* jpegOpts; Gtk::Label* jpegSubSampLabel; FormatChangeListener* listener; - Glib::ustring fstr[6]; + Glib::ustring fstr[7]; Gtk::CheckButton* savesPP; From b356c7481318f9c0a53a28b68d3126efbe5ec7d1 Mon Sep 17 00:00:00 2001 From: Hombre Date: Thu, 10 May 2018 22:13:06 +0200 Subject: [PATCH 004/115] RT now generates valid 16-bit float TIFF output image (see #2357) ...however the "reader" of those files is broken and make RT crash. Thanks to @heckflosse for the "writer" patch. --- rtengine/image16.cc | 11 +--- rtengine/image16.h | 4 +- rtengine/image8.cc | 7 +-- rtengine/image8.h | 4 +- rtengine/imagefloat.cc | 108 +++++++++++++------------------------ rtengine/imagefloat.h | 118 ++++++++++++++++++++++++++++++++++++++++- rtengine/imageio.cc | 6 +-- rtengine/imageio.h | 4 +- 8 files changed, 166 insertions(+), 96 deletions(-) diff --git a/rtengine/image16.cc b/rtengine/image16.cc index 68dd4bb40..65d9fc5a7 100644 --- a/rtengine/image16.cc +++ b/rtengine/image16.cc @@ -60,7 +60,7 @@ Image16::~Image16 () { } -void Image16::getScanline (int row, unsigned char* buffer, int bps) +void Image16::getScanline (int row, unsigned char* buffer, int bps, bool isFloat) { if (data == nullptr) { @@ -74,20 +74,13 @@ void Image16::getScanline (int row, unsigned char* buffer, int bps) } } -/* - * void Image16::setScanline (int row, unsigned char* buffer, int bps, int minValue[3], int maxValue[3]); - * has not been implemented yet, because as of now, this method is called for IIOSF_FLOATxx sample format only - */ -void Image16::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue, float *maxValue) +void Image16::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples) { if (data == nullptr) { return; } - // For optimization purpose, we're assuming that this class never has to provide min/max bounds - assert(!minValue); - switch (sampleFormat) { case (IIOSF_UNSIGNED_CHAR): { int ix = 0; diff --git a/rtengine/image16.h b/rtengine/image16.h index 33e74f146..9764785a4 100644 --- a/rtengine/image16.h +++ b/rtengine/image16.h @@ -55,8 +55,8 @@ public: { return 8 * sizeof(unsigned short); } - virtual void getScanline (int row, unsigned char* buffer, int bps); - virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue = nullptr, float *maxValue = nullptr); + virtual void getScanline (int row, unsigned char* buffer, int bps, bool isFloat = false); + virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples); // functions inherited from IImage16: virtual MyMutex& getMutex () diff --git a/rtengine/image8.cc b/rtengine/image8.cc index 69066f2dd..ab7393100 100644 --- a/rtengine/image8.cc +++ b/rtengine/image8.cc @@ -37,7 +37,7 @@ Image8::~Image8 () { } -void Image8::getScanline (int row, unsigned char* buffer, int bps) +void Image8::getScanline (int row, unsigned char* buffer, int bps, bool isFloat) { if (data == nullptr) { @@ -55,16 +55,13 @@ void Image8::getScanline (int row, unsigned char* buffer, int bps) } } -void Image8::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue, float *maxValue) +void Image8::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples) { if (data == nullptr) { return; } - // For optimization purpose, we're assuming that this class never have to provide min/max bound - assert(!minValue); - switch (sampleFormat) { case (IIOSF_UNSIGNED_CHAR): if(numSamples == 1) { diff --git a/rtengine/image8.h b/rtengine/image8.h index 6444499d9..59d13c298 100644 --- a/rtengine/image8.h +++ b/rtengine/image8.h @@ -50,8 +50,8 @@ public: { return 8 * sizeof(unsigned char); } - virtual void getScanline (int row, unsigned char* buffer, int bps); - virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue = nullptr, float *maxValue = nullptr); + virtual void getScanline (int row, unsigned char* buffer, int bps, bool isFloat = false); + virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples); // functions inherited from IImage*: virtual MyMutex& getMutex () diff --git a/rtengine/imagefloat.cc b/rtengine/imagefloat.cc index e79678194..9ef6cc70b 100644 --- a/rtengine/imagefloat.cc +++ b/rtengine/imagefloat.cc @@ -44,7 +44,7 @@ Imagefloat::~Imagefloat () } // Call this method to handle floating points input values of different size -void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue, float *maxValue) +void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples) { if (data == nullptr) { @@ -55,45 +55,27 @@ void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned // DNG_HalfToFloat and DNG_FP24ToFloat from dcraw.cc can be used to manually convert // from 16 and 24 bits to 32 bits float respectively switch (sampleFormat) { - case (IIOSF_FLOAT16): - case (IIOSF_FLOAT24): + case (IIOSF_FLOAT16): { + int ix = 0; + uint16_t* sbuffer = (uint16_t*) buffer; + + for (int i = 0; i < width; i++) { + r(row, i) = 65535.f * DNG_HalfToFloat(sbuffer[ix++]); + g(row, i) = 65535.f * DNG_HalfToFloat(sbuffer[ix++]); + b(row, i) = 65535.f * DNG_HalfToFloat(sbuffer[ix++]); + } + + break; + } + //case (IIOSF_FLOAT24): case (IIOSF_FLOAT32): { int ix = 0; float* sbuffer = (float*) buffer; for (int i = 0; i < width; i++) { - r(row, i) = 65535.f * sbuffer[ix]; - - if (minValue) { - if (sbuffer[ix] < minValue[0]) { - minValue[0] = sbuffer[ix]; - } else if (sbuffer[ix] > maxValue[0]) { - maxValue[0] = sbuffer[ix]; - } - } - ++ix; - - g(row, i) = 65535.f * sbuffer[ix]; - - if (minValue) { - if (sbuffer[ix] < minValue[1]) { - minValue[1] = sbuffer[ix]; - } else if (sbuffer[ix] > maxValue[1]) { - maxValue[1] = sbuffer[ix]; - } - } - ++ix; - - b(row, i) = 65535.f * sbuffer[ix]; - - if (minValue) { - if (sbuffer[ix] < minValue[2]) { - minValue[2] = sbuffer[ix]; - } else if (sbuffer[ix] > maxValue[2]) { - maxValue[2] = sbuffer[ix]; - } - } - ++ix; + r(row, i) = 65535.f * sbuffer[ix++]; + g(row, i) = 65535.f * sbuffer[ix++]; + b(row, i) = 65535.f * sbuffer[ix++]; } break; @@ -112,34 +94,8 @@ void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned // TODO: we may have to handle other color space than sRGB! Color::xyz2srgb(xyzvalues[0], xyzvalues[1], xyzvalues[2], rgbvalues[0], rgbvalues[1], rgbvalues[2]); r(row, i) = rgbvalues[0]; - - if (minValue) { - if (rgbvalues[0] < minValue[0]) { - minValue[0] = rgbvalues[0]; - } else if (rgbvalues[0] > maxValue[0]) { - maxValue[0] = rgbvalues[0]; - } - } - g(row, i) = rgbvalues[1]; - - if (minValue) { - if (rgbvalues[1] < minValue[1]) { - minValue[1] = rgbvalues[1]; - } else if (rgbvalues[1] > maxValue[1]) { - maxValue[1] = rgbvalues[1]; - } - } - b(row, i) = rgbvalues[2]; - - if (minValue) { - if (rgbvalues[2] < minValue[2]) { - minValue[2] = rgbvalues[2]; - } else if (rgbvalues[2] > maxValue[2]) { - maxValue[2] = rgbvalues[2]; - } - } } break; @@ -154,22 +110,32 @@ void Imagefloat::setScanline (int row, unsigned char* buffer, int bps, unsigned namespace rtengine { extern void filmlike_clip(float *r, float *g, float *b); } -void Imagefloat::getScanline (int row, unsigned char* buffer, int bps) +void Imagefloat::getScanline (int row, unsigned char* buffer, int bps, bool isFloat) { if (data == nullptr) { return; } - if (bps == 32) { - int ix = 0; - float* sbuffer = (float*) buffer; - - // agriggio -- assume the image is normalized to [0, 65535] - for (int i = 0; i < width; i++) { - sbuffer[ix++] = r(row, i) / 65535.f; - sbuffer[ix++] = g(row, i) / 65535.f; - sbuffer[ix++] = b(row, i) / 65535.f; + if (isFloat) { + if (bps == 32) { + int ix = 0; + float* sbuffer = (float*) buffer; + // agriggio -- assume the image is normalized to [0, 65535] + for (int i = 0; i < width; i++) { + sbuffer[ix++] = r(row, i) / 65535.f; + sbuffer[ix++] = g(row, i) / 65535.f; + sbuffer[ix++] = b(row, i) / 65535.f; + } + } else if (bps == 16) { + int ix = 0; + uint16_t* sbuffer = (uint16_t*) buffer; + // agriggio -- assume the image is normalized to [0, 65535] + for (int i = 0; i < width; i++) { + sbuffer[ix++] = DNG_FloatToHalf(r(row, i) / 65535.f); + sbuffer[ix++] = DNG_FloatToHalf(g(row, i) / 65535.f); + sbuffer[ix++] = DNG_FloatToHalf(b(row, i) / 65535.f); + } } } else { unsigned short *sbuffer = (unsigned short *)buffer; diff --git a/rtengine/imagefloat.h b/rtengine/imagefloat.h index abb74bc8e..a705a45e7 100644 --- a/rtengine/imagefloat.h +++ b/rtengine/imagefloat.h @@ -59,8 +59,8 @@ public: { return 8 * sizeof(float); } - virtual void getScanline (int row, unsigned char* buffer, int bps); - virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples, float *minValue = nullptr, float *maxValue = nullptr); + virtual void getScanline (int row, unsigned char* buffer, int bps, bool isFloat = false); + virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples); // functions inherited from IImagefloat: virtual MyMutex& getMutex () @@ -100,6 +100,120 @@ public: delete this; } + inline uint16_t DNG_FloatToHalf(float f) + { + union { + float f; + uint32_t i; + } tmp; + + tmp.f = f; + int32_t sign = (tmp.i >> 16) & 0x00008000; + int32_t exponent = ((tmp.i >> 23) & 0x000000ff) - (127 - 15); + int32_t mantissa = tmp.i & 0x007fffff; + if (exponent <= 0) { + if (exponent < -10) { + return (uint16_t)sign; + } + mantissa = (mantissa | 0x00800000) >> (1 - exponent); + if (mantissa & 0x00001000) + mantissa += 0x00002000; + return (uint16_t)(sign | (mantissa >> 13)); + } else if (exponent == 0xff - (127 - 15)) { + if (mantissa == 0) { + return (uint16_t)(sign | 0x7c00); + } else { + return (uint16_t)(sign | 0x7c00 | (mantissa >> 13)); + } + } + if (mantissa & 0x00001000) { + mantissa += 0x00002000; + if (mantissa & 0x00800000) { + mantissa = 0; // overflow in significand, + exponent += 1; // adjust exponent + } + } + if (exponent > 30) { + return (uint16_t)(sign | 0x7c00); // infinity with the same sign as f. + } + return (uint16_t)(sign | (exponent << 10) | (mantissa >> 13)); + } + + // From DNG SDK dng_utils.h + inline float DNG_HalfToFloat(uint16_t halfValue) + { + union { + float f; + uint32_t i; + } tmp; + + int32_t sign = (halfValue >> 15) & 0x00000001; + int32_t exponent = (halfValue >> 10) & 0x0000001f; + int32_t mantissa = halfValue & 0x000003ff; + if (exponent == 0) { + if (mantissa == 0) { + // Plus or minus zero + return (uint32_t) (sign << 31); + } else { + // Denormalized number -- renormalize it + while (!(mantissa & 0x00000400)) { + mantissa <<= 1; + exponent -= 1; + } + exponent += 1; + mantissa &= ~0x00000400; + } + } else if (exponent == 31) { + if (mantissa == 0) { + // Positive or negative infinity, convert to maximum (16 bit) values. + return (uint32_t) ((sign << 31) | ((0x1eL + 127 - 15) << 23) | (0x3ffL << 13)); + } else { + // Nan -- Just set to zero. + return 0; + } + } + // Normalized number + exponent += (127 - 15); + mantissa <<= 13; + // Assemble sign, exponent and mantissa. + tmp.i = (uint32_t) ((sign << 31) | (exponent << 23) | mantissa); + return tmp.f; + } + + inline uint32_t DNG_FP24ToFloat(const uint8_t * input) + { + int32_t sign = (input [0] >> 7) & 0x01; + int32_t exponent = (input [0] ) & 0x7F; + int32_t mantissa = (((int32_t) input [1]) << 8) | input[2]; + if (exponent == 0) { + if (mantissa == 0) { + // Plus or minus zero + return (uint32_t) (sign << 31); + } else { + // Denormalized number -- renormalize it + while (!(mantissa & 0x00010000)) { + mantissa <<= 1; + exponent -= 1; + } + exponent += 1; + mantissa &= ~0x00010000; + } + } else if (exponent == 127) { + if (mantissa == 0) { + // Positive or negative infinity, convert to maximum (24 bit) values. + return (uint32_t) ((sign << 31) | ((0x7eL + 128 - 64) << 23) | (0xffffL << 7)); + } else { + // Nan -- Just set to zero. + return 0; + } + } + // Normalized number + exponent += (128 - 64); + mantissa <<= 7; + // Assemble sign, exponent and mantissa. + return (uint32_t) ((sign << 31) | (exponent << 23) | mantissa); + } + virtual void normalizeFloat(float srcMinVal, float srcMaxVal); void normalizeFloatTo1(); void normalizeFloatTo65535(); diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index d3e815027..8bfe81504 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -1468,9 +1468,9 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, float isFloat, bool uncompr } for (int row = 0; row < height; row++) { - getScanline (row, linebuffer, bps); + getScanline (row, linebuffer, bps, isFloat); - /*if (bps == 16) { + if (bps == 16) { if(needsReverse && !uncompressed) { for(int i = 0; i < lineWidth; i += 2) { char temp = linebuffer[i]; @@ -1478,7 +1478,7 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, float isFloat, bool uncompr linebuffer[i + 1] = temp; } } - } else */ if (bps == 32) { + } else if (bps == 32) { if(needsReverse && !uncompressed) { for(int i = 0; i < lineWidth; i += 4) { char temp = linebuffer[i]; diff --git a/rtengine/imageio.h b/rtengine/imageio.h index 135927bbf..cbf245291 100644 --- a/rtengine/imageio.h +++ b/rtengine/imageio.h @@ -112,8 +112,8 @@ public: } virtual int getBPS () = 0; - virtual void getScanline (int row, unsigned char* buffer, int bps) {} - virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples = 3, float minValue[3] = nullptr, float maxValue[3] = nullptr) {} + virtual void getScanline (int row, unsigned char* buffer, int bps, bool isFloat = false) {} + virtual void setScanline (int row, unsigned char* buffer, int bps, unsigned int numSamples = 3) {} virtual bool readImage (Glib::ustring &fname, FILE *fh) { From 4481fa4699e6f7f2784dc1f50884155ce6f7775f Mon Sep 17 00:00:00 2001 From: Roel Baars Date: Thu, 14 Jun 2018 20:55:58 +0200 Subject: [PATCH 005/115] Preparation work: remove fullMode fullMode will be removed, since it seems unnecessary when you can toggle between different scalings of the histogram. --- rtgui/histogrampanel.cc | 56 ++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index a41786d4e..2479bd133 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -71,7 +71,7 @@ HistogramPanel::HistogramPanel () valueImage = new RTImage ("histValue.png"); chroImage = new RTImage ("histChro.png"); rawImage = new RTImage ("histRaw.png"); - fullImage = new RTImage ("histFull.png"); + //fullImage = new RTImage ("histFull.png"); barImage = new RTImage ("histBar.png"); redImage_g = new RTImage ("histRedg.png"); @@ -80,7 +80,7 @@ HistogramPanel::HistogramPanel () valueImage_g = new RTImage ("histValueg.png"); chroImage_g = new RTImage ("histChrog.png"); rawImage_g = new RTImage ("histRawg.png"); - fullImage_g = new RTImage ("histFullg.png"); + //fullImage_g = new RTImage ("histFullg.png"); barImage_g = new RTImage ("histBarg.png"); showRed = Gtk::manage (new Gtk::ToggleButton ()); @@ -89,7 +89,7 @@ HistogramPanel::HistogramPanel () showValue = Gtk::manage (new Gtk::ToggleButton ()); showChro = Gtk::manage (new Gtk::ToggleButton ()); showRAW = Gtk::manage (new Gtk::ToggleButton ()); - showFull = Gtk::manage (new Gtk::ToggleButton ()); + //showFull = Gtk::manage (new Gtk::ToggleButton ()); showBAR = Gtk::manage (new Gtk::ToggleButton ()); showRed->set_name("histButton"); @@ -104,8 +104,8 @@ HistogramPanel::HistogramPanel () showChro->set_can_focus(false); showRAW->set_name("histButton"); showRAW->set_can_focus(false); - showFull->set_name("fullButton"); - showFull->set_can_focus(false); + //showFull->set_name("fullButton"); + //showFull->set_can_focus(false); showBAR->set_name("histButton"); showBAR->set_can_focus(false); @@ -115,7 +115,7 @@ HistogramPanel::HistogramPanel () showValue->set_relief (Gtk::RELIEF_NONE); showChro->set_relief (Gtk::RELIEF_NONE); showRAW->set_relief (Gtk::RELIEF_NONE); - showFull->set_relief (Gtk::RELIEF_NONE); + //showFull->set_relief (Gtk::RELIEF_NONE); showBAR->set_relief (Gtk::RELIEF_NONE); showRed->set_tooltip_text (M("HISTOGRAM_TOOLTIP_R")); @@ -124,7 +124,7 @@ HistogramPanel::HistogramPanel () showValue->set_tooltip_text (M("HISTOGRAM_TOOLTIP_L")); showChro->set_tooltip_text (M("HISTOGRAM_TOOLTIP_CHRO")); showRAW->set_tooltip_text (M("HISTOGRAM_TOOLTIP_RAW")); - showFull->set_tooltip_text (M("HISTOGRAM_TOOLTIP_FULL")); + //showFull->set_tooltip_text (M("HISTOGRAM_TOOLTIP_FULL")); showBAR->set_tooltip_text (M("HISTOGRAM_TOOLTIP_BAR")); buttonGrid = Gtk::manage (new Gtk::Grid ()); @@ -136,7 +136,7 @@ HistogramPanel::HistogramPanel () showChro->set_active (false);//unactive by default showRAW->set_active (false); - showFull->set_active (!options.histogramFullMode); + //showFull->set_active (!options.histogramFullMode); showBAR->set_active (options.histogramBar); showRed->set_image (showRed->get_active() ? *redImage : *redImage_g); @@ -145,7 +145,7 @@ HistogramPanel::HistogramPanel () showValue->set_image (showValue->get_active() ? *valueImage : *valueImage_g); showChro->set_image (showChro->get_active() ? *chroImage : *chroImage_g); showRAW->set_image (showRAW->get_active() ? *rawImage : *rawImage_g); - showFull->set_image (showFull->get_active() ? *fullImage : *fullImage_g); + //showFull->set_image (showFull->get_active() ? *fullImage : *fullImage_g); showBAR->set_image (showBAR->get_active() ? *barImage : *barImage_g); showRed->set_hexpand(false); @@ -172,10 +172,10 @@ HistogramPanel::HistogramPanel () showRAW->set_vexpand(false); showRAW->set_halign(Gtk::ALIGN_CENTER); showRAW->set_valign(Gtk::ALIGN_START); - showFull->set_hexpand(false); - showFull->set_vexpand(false); - showFull->set_halign(Gtk::ALIGN_CENTER); - showFull->set_valign(Gtk::ALIGN_START); + //showFull->set_hexpand(false); + //showFull->set_vexpand(false); + //showFull->set_halign(Gtk::ALIGN_CENTER); + //showFull->set_valign(Gtk::ALIGN_START); showBAR->set_hexpand(false); showBAR->set_vexpand(false); showBAR->set_halign(Gtk::ALIGN_CENTER); @@ -187,7 +187,7 @@ HistogramPanel::HistogramPanel () showValue->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::value_toggled), showValue ); showChro->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::chro_toggled), showChro ); showRAW->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::raw_toggled), showRAW ); - showFull->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::full_toggled), showFull ); + //showFull->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::full_toggled), showFull ); showBAR->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::bar_toggled), showBAR ); buttonGrid->add (*showRed); @@ -196,7 +196,7 @@ HistogramPanel::HistogramPanel () buttonGrid->add (*showValue); buttonGrid->add (*showChro); buttonGrid->add (*showRAW); - buttonGrid->add (*showFull); + //buttonGrid->add (*showFull); buttonGrid->add (*showBAR); // Put the button vbox next to the window's border to be less disturbing @@ -221,7 +221,7 @@ HistogramPanel::~HistogramPanel () delete valueImage; delete chroImage; delete rawImage; - delete fullImage; + //delete fullImage; delete barImage; delete redImage_g; @@ -230,7 +230,7 @@ HistogramPanel::~HistogramPanel () delete valueImage_g; delete chroImage_g; delete rawImage_g; - delete fullImage_g; + //delete fullImage_g; delete barImage_g; } @@ -312,12 +312,12 @@ void HistogramPanel::raw_toggled () rgbv_toggled(); } -void HistogramPanel::full_toggled () +/*void HistogramPanel::full_toggled () { options.histogramFullMode = !showFull->get_active(); showFull->set_image(showFull->get_active() ? *fullImage : *fullImage_g); rgbv_toggled(); -} +}*/ void HistogramPanel::bar_toggled () { showBAR->set_image(showBAR->get_active() ? *barImage : *barImage_g); @@ -387,11 +387,11 @@ void HistogramPanel::reorder (Gtk::PositionType align) } // FullModeListener interface: -void HistogramPanel::toggle_button_full () +/*void HistogramPanel::toggle_button_full () { showFull->set_active (!showFull->get_active ()); showFull->set_image(showFull->get_active() ? *fullImage : *fullImage_g); -} +}*/ // // @@ -671,8 +671,8 @@ bool HistogramRGBArea::on_button_press_event (GdkEventButton* event) // // // HistogramArea -HistogramArea::HistogramArea (FullModeListener *fml) : //needChroma unactive by default - valid(false), fullMode(options.histogramFullMode), myFullModeListener(fml), oldwidth(-1), oldheight(-1), needLuma(true), needRed(true), needGreen(true), needBlue(true), rawMode(false), needChroma(false) +HistogramArea::HistogramArea (/*FullModeListener *fml*/) : //needChroma unactive by default + valid(false), /*fullMode(options.histogramFullMode), myFullModeListener(fml),*/ oldwidth(-1), oldheight(-1), needLuma(true), needRed(true), needGreen(true), needBlue(true), rawMode(false), needChroma(false) { lhist(256); @@ -747,7 +747,7 @@ void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, boo needBlue = b; needLuma = l; rawMode = raw; - fullMode = !full; + //fullMode = !full; needChroma = c; updateBackBuffer (); @@ -883,7 +883,7 @@ void HistogramArea::updateBackBuffer () int realhistheight = fullhistheight; // though much faster than before, this still takes a lot of time especially for big files if rawMode is true - if (!fullMode) { + /*if (!fullMode) { int area = 0; #ifdef __SSE2__ @@ -928,7 +928,7 @@ void HistogramArea::updateBackBuffer () break; } } - } + }*/ if (realhistheight < winh - 2) { realhistheight = winh - 2; @@ -1085,7 +1085,7 @@ bool HistogramArea::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) bool HistogramArea::on_button_press_event (GdkEventButton* event) { - if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { + /*if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { fullMode = !fullMode; options.histogramFullMode = fullMode; @@ -1095,7 +1095,7 @@ bool HistogramArea::on_button_press_event (GdkEventButton* event) updateBackBuffer (); queue_draw (); - } + }*/ return true; } From c4853034ed0d80913bd9324f35981c66cec3c29f Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Thu, 14 Jun 2018 21:58:51 +0200 Subject: [PATCH 006/115] Total removal of fullMode --- rtgui/histogrampanel.cc | 6 +++--- rtgui/histogrampanel.h | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 2479bd133..fe912fc84 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -44,7 +44,7 @@ HistogramPanel::HistogramPanel () set_halign(Gtk::ALIGN_FILL); set_name("HistogramPanel"); - histogramArea = Gtk::manage (new HistogramArea (this)); + histogramArea = Gtk::manage (new HistogramArea (/*this*/)); histogramArea->set_hexpand(true); histogramArea->set_vexpand(true); histogramRGBArea = Gtk::manage (new HistogramRGBArea ()); @@ -326,7 +326,7 @@ void HistogramPanel::bar_toggled () void HistogramPanel::rgbv_toggled () { // Update Display - histogramArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), showFull->get_active(), showChro->get_active()); + histogramArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), /*showFull->get_active(),*/ showChro->get_active()); histogramArea->queue_draw (); histogramRGBArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), showBAR->get_active(), showChro->get_active()); @@ -739,7 +739,7 @@ void HistogramArea::get_preferred_width_for_height_vfunc (int height, int &minim get_preferred_width_vfunc (minimum_width, natural_width); } -void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, bool full, bool c) +void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, /*bool full,*/ bool c) { needRed = r; diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index 0ce62956c..784bdec78 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -101,12 +101,12 @@ private: }; -class FullModeListener +/*class FullModeListener { public: virtual ~FullModeListener() {} virtual void toggle_button_full () {} -}; +};*/ class HistogramArea : public Gtk::DrawingArea, public BackBuffer { @@ -118,8 +118,8 @@ protected: LUTu lhistRaw, rhistRaw, ghistRaw, bhistRaw; bool valid; - bool fullMode; - FullModeListener *myFullModeListener; + //bool fullMode; + //FullModeListener *myFullModeListener; int oldwidth, oldheight; bool needLuma, needRed, needGreen, needBlue, rawMode, needChroma; @@ -127,12 +127,12 @@ protected: HistogramAreaIdleHelper* haih; public: - explicit HistogramArea(FullModeListener *fml = nullptr); + explicit HistogramArea(/*FullModeListener *fml = nullptr*/); ~HistogramArea(); void updateBackBuffer (); void update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw, LUTu &histChroma); - void updateOptions (bool r, bool g, bool b, bool l, bool raw, bool full , bool c); + void updateOptions (bool r, bool g, bool b, bool l, bool raw, /*bool full ,*/ bool c); void on_realize(); bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr); bool on_button_press_event (GdkEventButton* event); @@ -147,7 +147,7 @@ private: void get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const; }; -class HistogramPanel : public Gtk::Grid, public PointerMotionListener, public FullModeListener +class HistogramPanel : public Gtk::Grid, public PointerMotionListener/*, public FullModeListener*/ { protected: @@ -161,7 +161,7 @@ protected: Gtk::ToggleButton* showBlue; Gtk::ToggleButton* showValue; Gtk::ToggleButton* showRAW; - Gtk::ToggleButton* showFull; + //Gtk::ToggleButton* showFull; Gtk::ToggleButton* showBAR; Gtk::ToggleButton* showChro; @@ -170,7 +170,7 @@ protected: Gtk::Image *blueImage; Gtk::Image *valueImage; Gtk::Image *rawImage; - Gtk::Image *fullImage; + //Gtk::Image *fullImage; Gtk::Image *barImage; Gtk::Image *chroImage; @@ -179,7 +179,7 @@ protected: Gtk::Image *blueImage_g; Gtk::Image *valueImage_g; Gtk::Image *rawImage_g; - Gtk::Image *fullImage_g; + //Gtk::Image *fullImage_g; Gtk::Image *barImage_g; Gtk::Image *chroImage_g; @@ -209,14 +209,14 @@ public: void blue_toggled (); void value_toggled (); void raw_toggled (); - void full_toggled (); + //void full_toggled (); void chro_toggled (); void bar_toggled (); void rgbv_toggled (); void resized (Gtk::Allocation& req); // fullModeListener interface - void toggle_button_full (); + //void toggle_button_full (); }; #endif From 646d1edcd23a22bfa5c14b9abb035a7e15d2c3fb Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 15 Jun 2018 07:08:02 +0200 Subject: [PATCH 007/115] Change aspect ratio of histogram (make bigger) --- rtgui/histogrampanel.cc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index fe912fc84..929de21cb 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -446,7 +446,7 @@ void HistogramRGBArea::get_preferred_height_for_width_vfunc (int width, int &min int bHeight = width / 30; if (bHeight > 10) { - bHeight = 10; + bHeight = 10; // it would be useful to scale this based on display dpi } else if (bHeight < 5 ) { bHeight = 5; } @@ -455,6 +455,7 @@ void HistogramRGBArea::get_preferred_height_for_width_vfunc (int width, int &min natural_height = bHeight; } +// unused? void HistogramRGBArea::get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const { get_preferred_width_vfunc (minimum_width, natural_width); @@ -709,7 +710,7 @@ Gtk::SizeRequestMode HistogramArea::get_request_mode_vfunc () const void HistogramArea::get_preferred_height_vfunc (int &minimum_height, int &natural_height) const { int minimumWidth = 0; - int naturalWidth = 0; + int naturalWidth = 0; // unused? get_preferred_width_vfunc (minimumWidth, naturalWidth); get_preferred_height_for_width_vfunc (minimumWidth, minimum_height, natural_height); } @@ -722,18 +723,24 @@ void HistogramArea::get_preferred_width_vfunc (int &minimum_width, int &natural_ void HistogramArea::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const { - int gHeight = width / 2; + /*int gHeight = width / 2; if (gHeight > 150) { gHeight = 150; } else if (gHeight < 100) { gHeight = 100; - } + }*/ + + inf gHeight = width; // aspect ratio 1:1 should fit on most monitors + if (gHeight < 100) { + gHeight = 100; + } minimum_height = gHeight * 0.7; natural_height = gHeight; } +//unused? void HistogramArea::get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const { get_preferred_width_vfunc (minimum_width, natural_width); From 0d3e7f02ad32d004057dc27500ac27f60f1a9e47 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 15 Jun 2018 07:18:58 +0200 Subject: [PATCH 008/115] Stupid typo and a comment --- rtgui/histogrampanel.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 929de21cb..5cbf3d655 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -731,7 +731,7 @@ void HistogramArea::get_preferred_height_for_width_vfunc (int width, int &minimu gHeight = 100; }*/ - inf gHeight = width; // aspect ratio 1:1 should fit on most monitors + int gHeight = width; // aspect ratio 1:1 should fit on most monitors if (gHeight < 100) { gHeight = 100; } From bd831d10439fba446316a404ec882b98065597ee Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 15 Jun 2018 20:11:30 +0200 Subject: [PATCH 009/115] Change the looks of the histogram (inspired by darktable) with overlapping shades --- rtgui/histogrampanel.cc | 66 +++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 23 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 5cbf3d655..436350925 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -702,6 +702,10 @@ HistogramArea::~HistogramArea () } } +/* Note: best case scenario would be to have the histogram size really flexible + by being able to resize the panel vertically, and the side-bar horizontally. + We would only need to enforce some lower limits then. */ + Gtk::SizeRequestMode HistogramArea::get_request_mode_vfunc () const { return Gtk::SIZE_REQUEST_HEIGHT_FOR_WIDTH; @@ -943,48 +947,64 @@ void HistogramArea::updateBackBuffer () cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); cr->set_line_width (1.0); + cr->set_operator(Cairo::OPERATOR_ADD); int ui = 0, oi = 0; - if (needLuma && !rawMode) { - drawCurve(cr, lhist, realhistheight, w, h); - cr->set_source_rgb (0.65, 0.65, 0.65); + if (needBlue) { + drawCurve(cr, bhchanged, realhistheight, w, h); + cr->set_source_rgba (0.0, 0.0, 1.0, 0.4); cr->fill (); - - drawMarks(cr, lhist, realhistheight, w, ui, oi); - } - - if (needChroma && !rawMode) { - drawCurve(cr, chist, realhistheight, w, h); - cr->set_source_rgb (0., 0., 0.); + + drawCurve(cr, bhchanged, realhistheight, w, h); + cr->set_source_rgba (0.0, 0.0, 1.0, 0.9); cr->stroke (); - drawMarks(cr, chist, realhistheight, w, ui, oi); + drawMarks(cr, bhchanged, realhistheight, w, ui, oi); } - + + if (needGreen) { + drawCurve(cr, ghchanged, realhistheight, w, h); + cr->set_source_rgba (0.0, 1.0, 0.0, 0.4); + cr->fill (); + + drawCurve(cr, ghchanged, realhistheight, w, h); + cr->set_source_rgba (0.0, 1.0, 0.0, 0.9); + cr->stroke (); + + drawMarks(cr, ghchanged, realhistheight, w, ui, oi); + } + if (needRed) { - drawCurve(cr, rhchanged, realhistheight, w, h); - cr->set_source_rgb (1.0, 0.0, 0.0); + drawCurve(cr, rhchanged, realhistheight, w, h); + cr->set_source_rgba (1.0, 0.0, 0.0, 0.4); + cr->fill (); + + drawCurve(cr, rhchanged, realhistheight, w, h); + cr->set_source_rgba (1.0, 0.0, 0.0, 0.9); cr->stroke (); drawMarks(cr, rhchanged, realhistheight, w, ui, oi); } - if (needGreen) { - drawCurve(cr, ghchanged, realhistheight, w, h); - cr->set_source_rgb (0.0, 1.0, 0.0); + cr->set_operator(Cairo::OPERATOR_SOURCE); + + if (needLuma && !rawMode) { + drawCurve(cr, lhist, realhistheight, w, h); + cr->set_source_rgb (0.9, 0.9, 0.9); cr->stroke (); - drawMarks(cr, ghchanged, realhistheight, w, ui, oi); + drawMarks(cr, lhist, realhistheight, w, ui, oi); } - - if (needBlue) { - drawCurve(cr, bhchanged, realhistheight, w, h); - cr->set_source_rgb (0.0, 0.0, 1.0); + + if (needChroma && !rawMode) { + drawCurve(cr, chist, realhistheight, w, h); + cr->set_source_rgb (0.15, 0.15, 0.15); cr->stroke (); - drawMarks(cr, bhchanged, realhistheight, w, ui, oi); + drawMarks(cr, chist, realhistheight, w, ui, oi); } + } cr->set_source_rgba (1., 1., 1., 0.35); From 09a93c72bb7980603bef7b06294313465bb6720a Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 15 Jun 2018 20:21:56 +0200 Subject: [PATCH 010/115] Disable show luma by default - clutter --- rtgui/histogrampanel.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 436350925..a8db1e804 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -398,7 +398,7 @@ void HistogramPanel::reorder (Gtk::PositionType align) // // HistogramRGBArea HistogramRGBArea::HistogramRGBArea () ://needChroma unactive by default - val(0), r(0), g(0), b(0), frozen(false), valid(false), needRed(true), needGreen(true), needBlue(true), needLuma(true), rawMode(false), showMode(options.histogramBar), barDisplayed(options.histogramBar), needChroma(false), parent(nullptr) + val(0), r(0), g(0), b(0), frozen(false), valid(false), needRed(true), needGreen(true), needBlue(true), needLuma(false), rawMode(false), showMode(options.histogramBar), barDisplayed(options.histogramBar), needChroma(false), parent(nullptr) { get_style_context()->add_class("drawingarea"); @@ -673,7 +673,7 @@ bool HistogramRGBArea::on_button_press_event (GdkEventButton* event) // // HistogramArea HistogramArea::HistogramArea (/*FullModeListener *fml*/) : //needChroma unactive by default - valid(false), /*fullMode(options.histogramFullMode), myFullModeListener(fml),*/ oldwidth(-1), oldheight(-1), needLuma(true), needRed(true), needGreen(true), needBlue(true), rawMode(false), needChroma(false) + valid(false), /*fullMode(options.histogramFullMode), myFullModeListener(fml),*/ oldwidth(-1), oldheight(-1), needLuma(false), needRed(true), needGreen(true), needBlue(true), rawMode(false), needChroma(false) { lhist(256); From 658d975fa1f88814d84ca9550feaf7e063b37fa3 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 15 Jun 2018 20:42:26 +0200 Subject: [PATCH 011/115] Definitely disable luma now --- rtgui/histogrampanel.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index a8db1e804..dd3f3f718 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -132,7 +132,7 @@ HistogramPanel::HistogramPanel () showRed->set_active (true); showGreen->set_active (true); showBlue->set_active (true); - showValue->set_active (true); + showValue->set_active (false);//unactive by default showChro->set_active (false);//unactive by default showRAW->set_active (false); From dec54d00ad06ad38b0a8bd8ad73bd57bccd51ef6 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 15 Jun 2018 23:16:20 +0200 Subject: [PATCH 012/115] Big update: implemented toggling between three modes. Button does not yet update when double clicking. Completely removed fullMode-related code. --- rtgui/histogrampanel.cc | 263 +++++++++++++++++++++------------------- rtgui/histogrampanel.h | 34 ++++-- rtgui/options.cc | 14 ++- rtgui/options.h | 3 +- 4 files changed, 175 insertions(+), 139 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index dd3f3f718..bff8a4b3c 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -21,6 +21,7 @@ #include "guiutils.h" #include "options.h" #include +#include #include "../rtengine/LUT.h" #include "rtimage.h" #include "../rtengine/improccoordinator.h" @@ -71,8 +72,8 @@ HistogramPanel::HistogramPanel () valueImage = new RTImage ("histValue.png"); chroImage = new RTImage ("histChro.png"); rawImage = new RTImage ("histRaw.png"); - //fullImage = new RTImage ("histFull.png"); barImage = new RTImage ("histBar.png"); + modeImage = new RTImage ("histFull.png"); // needs replacement! redImage_g = new RTImage ("histRedg.png"); greenImage_g = new RTImage ("histGreeng.png"); @@ -80,8 +81,9 @@ HistogramPanel::HistogramPanel () valueImage_g = new RTImage ("histValueg.png"); chroImage_g = new RTImage ("histChrog.png"); rawImage_g = new RTImage ("histRawg.png"); - //fullImage_g = new RTImage ("histFullg.png"); barImage_g = new RTImage ("histBarg.png"); + modeImage_g = new RTImage ("histFullg.png"); // needs replacement! + modeImage_g2 = new RTImage ("histBarg.png"); // needs replacement! showRed = Gtk::manage (new Gtk::ToggleButton ()); showGreen = Gtk::manage (new Gtk::ToggleButton ()); @@ -89,8 +91,8 @@ HistogramPanel::HistogramPanel () showValue = Gtk::manage (new Gtk::ToggleButton ()); showChro = Gtk::manage (new Gtk::ToggleButton ()); showRAW = Gtk::manage (new Gtk::ToggleButton ()); - //showFull = Gtk::manage (new Gtk::ToggleButton ()); showBAR = Gtk::manage (new Gtk::ToggleButton ()); + showMode = Gtk::manage (new Gtk::Button ()); showRed->set_name("histButton"); showRed->set_can_focus(false); @@ -104,10 +106,10 @@ HistogramPanel::HistogramPanel () showChro->set_can_focus(false); showRAW->set_name("histButton"); showRAW->set_can_focus(false); - //showFull->set_name("fullButton"); - //showFull->set_can_focus(false); showBAR->set_name("histButton"); showBAR->set_can_focus(false); + showMode->set_name("histButton"); + showMode->set_can_focus(false); showRed->set_relief (Gtk::RELIEF_NONE); showGreen->set_relief (Gtk::RELIEF_NONE); @@ -115,8 +117,8 @@ HistogramPanel::HistogramPanel () showValue->set_relief (Gtk::RELIEF_NONE); showChro->set_relief (Gtk::RELIEF_NONE); showRAW->set_relief (Gtk::RELIEF_NONE); - //showFull->set_relief (Gtk::RELIEF_NONE); showBAR->set_relief (Gtk::RELIEF_NONE); + showMode->set_relief (Gtk::RELIEF_NONE); showRed->set_tooltip_text (M("HISTOGRAM_TOOLTIP_R")); showGreen->set_tooltip_text (M("HISTOGRAM_TOOLTIP_G")); @@ -124,8 +126,8 @@ HistogramPanel::HistogramPanel () showValue->set_tooltip_text (M("HISTOGRAM_TOOLTIP_L")); showChro->set_tooltip_text (M("HISTOGRAM_TOOLTIP_CHRO")); showRAW->set_tooltip_text (M("HISTOGRAM_TOOLTIP_RAW")); - //showFull->set_tooltip_text (M("HISTOGRAM_TOOLTIP_FULL")); showBAR->set_tooltip_text (M("HISTOGRAM_TOOLTIP_BAR")); + showMode->set_tooltip_text (M("HISTOGRAM_TOOLTIP_FULL")); // needs replacement! buttonGrid = Gtk::manage (new Gtk::Grid ()); buttonGrid->set_orientation(Gtk::ORIENTATION_VERTICAL); @@ -136,7 +138,6 @@ HistogramPanel::HistogramPanel () showChro->set_active (false);//unactive by default showRAW->set_active (false); - //showFull->set_active (!options.histogramFullMode); showBAR->set_active (options.histogramBar); showRed->set_image (showRed->get_active() ? *redImage : *redImage_g); @@ -145,8 +146,14 @@ HistogramPanel::HistogramPanel () showValue->set_image (showValue->get_active() ? *valueImage : *valueImage_g); showChro->set_image (showChro->get_active() ? *chroImage : *chroImage_g); showRAW->set_image (showRAW->get_active() ? *rawImage : *rawImage_g); - //showFull->set_image (showFull->get_active() ? *fullImage : *fullImage_g); showBAR->set_image (showBAR->get_active() ? *barImage : *barImage_g); + + if (options.histogramDrawMode == 0) + showMode->set_image(*modeImage); + else if (options.histogramDrawMode == 1) + showMode->set_image(*modeImage_g); + else + showMode->set_image(*modeImage_g2); showRed->set_hexpand(false); showRed->set_vexpand(false); @@ -172,14 +179,14 @@ HistogramPanel::HistogramPanel () showRAW->set_vexpand(false); showRAW->set_halign(Gtk::ALIGN_CENTER); showRAW->set_valign(Gtk::ALIGN_START); - //showFull->set_hexpand(false); - //showFull->set_vexpand(false); - //showFull->set_halign(Gtk::ALIGN_CENTER); - //showFull->set_valign(Gtk::ALIGN_START); showBAR->set_hexpand(false); showBAR->set_vexpand(false); showBAR->set_halign(Gtk::ALIGN_CENTER); showBAR->set_valign(Gtk::ALIGN_START); + showMode->set_hexpand(false); + showMode->set_vexpand(false); + showMode->set_halign(Gtk::ALIGN_CENTER); + showMode->set_valign(Gtk::ALIGN_START); showRed->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::red_toggled), showRed ); showGreen->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::green_toggled), showGreen ); @@ -187,8 +194,8 @@ HistogramPanel::HistogramPanel () showValue->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::value_toggled), showValue ); showChro->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::chro_toggled), showChro ); showRAW->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::raw_toggled), showRAW ); - //showFull->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::full_toggled), showFull ); showBAR->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::bar_toggled), showBAR ); + showMode->signal_released().connect( sigc::mem_fun(*this, &HistogramPanel::mode_released), showMode ); buttonGrid->add (*showRed); buttonGrid->add (*showGreen); @@ -196,8 +203,8 @@ HistogramPanel::HistogramPanel () buttonGrid->add (*showValue); buttonGrid->add (*showChro); buttonGrid->add (*showRAW); - //buttonGrid->add (*showFull); buttonGrid->add (*showBAR); + buttonGrid->add (*showMode); // Put the button vbox next to the window's border to be less disturbing if (options.histogramPosition == 1) { @@ -221,8 +228,8 @@ HistogramPanel::~HistogramPanel () delete valueImage; delete chroImage; delete rawImage; - //delete fullImage; delete barImage; + delete modeImage; delete redImage_g; delete greenImage_g; @@ -230,8 +237,9 @@ HistogramPanel::~HistogramPanel () delete valueImage_g; delete chroImage_g; delete rawImage_g; - //delete fullImage_g; delete barImage_g; + delete modeImage_g; + delete modeImage_g2; } @@ -312,21 +320,26 @@ void HistogramPanel::raw_toggled () rgbv_toggled(); } -/*void HistogramPanel::full_toggled () -{ - options.histogramFullMode = !showFull->get_active(); - showFull->set_image(showFull->get_active() ? *fullImage : *fullImage_g); - rgbv_toggled(); -}*/ void HistogramPanel::bar_toggled () { showBAR->set_image(showBAR->get_active() ? *barImage : *barImage_g); rgbv_toggled(); } +void HistogramPanel::mode_released () +{ + options.histogramDrawMode = (options.histogramDrawMode + 1) % 3; + if (options.histogramDrawMode == 0) + showMode->set_image(*modeImage); + else if (options.histogramDrawMode == 1) + showMode->set_image(*modeImage_g); + else + showMode->set_image(*modeImage_g2); + rgbv_toggled(); +} void HistogramPanel::rgbv_toggled () { // Update Display - histogramArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), /*showFull->get_active(),*/ showChro->get_active()); + histogramArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), showChro->get_active(), options.histogramDrawMode); histogramArea->queue_draw (); histogramRGBArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), showBAR->get_active(), showChro->get_active()); @@ -386,18 +399,27 @@ void HistogramPanel::reorder (Gtk::PositionType align) } } -// FullModeListener interface: -/*void HistogramPanel::toggle_button_full () -{ - showFull->set_active (!showFull->get_active ()); - showFull->set_image(showFull->get_active() ? *fullImage : *fullImage_g); -}*/ +// DrawModeListener interface: +void HistogramPanel::toggle_button_mode () +{ + // Does not seem to be called from HistogramArea::on_button_press_event ... why? + // + // printf("%i\n",options.histogramDrawMode); + // fflush(stdout); + + if (options.histogramDrawMode == 0) + showMode->set_image(*modeImage); + else if (options.histogramDrawMode == 1) + showMode->set_image(*modeImage_g); + else + showMode->set_image(*modeImage_g2); +} // // // // HistogramRGBArea -HistogramRGBArea::HistogramRGBArea () ://needChroma unactive by default +HistogramRGBArea::HistogramRGBArea () ://needChroma unactive by default, luma too val(0), r(0), g(0), b(0), frozen(false), valid(false), needRed(true), needGreen(true), needBlue(true), needLuma(false), rawMode(false), showMode(options.histogramBar), barDisplayed(options.histogramBar), needChroma(false), parent(nullptr) { @@ -672,8 +694,8 @@ bool HistogramRGBArea::on_button_press_event (GdkEventButton* event) // // // HistogramArea -HistogramArea::HistogramArea (/*FullModeListener *fml*/) : //needChroma unactive by default - valid(false), /*fullMode(options.histogramFullMode), myFullModeListener(fml),*/ oldwidth(-1), oldheight(-1), needLuma(false), needRed(true), needGreen(true), needBlue(true), rawMode(false), needChroma(false) +HistogramArea::HistogramArea (DrawModeListener *fml) : //needChroma unactive by default, luma too + valid(false), drawMode(options.histogramDrawMode), myDrawModeListener(fml), oldwidth(-1), oldheight(-1), needLuma(false), needRed(true), needGreen(true), needBlue(true), rawMode(false), needChroma(false) { lhist(256); @@ -750,7 +772,7 @@ void HistogramArea::get_preferred_width_for_height_vfunc (int height, int &minim get_preferred_width_vfunc (minimum_width, natural_width); } -void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, /*bool full,*/ bool c) +void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, bool c, int mode) { needRed = r; @@ -758,8 +780,8 @@ void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, /*b needBlue = b; needLuma = l; rawMode = raw; - //fullMode = !full; needChroma = c; + drawMode = mode; updateBackBuffer (); } @@ -867,7 +889,7 @@ void HistogramArea::updateBackBuffer () // does not take into account 0 and 255 values // them are handled separately - unsigned int fullhistheight = 0; + int fullhistheight = 0; for (int i = 1; i < 255; i++) { if (needLuma && lhisttemp[i] > fullhistheight) { @@ -891,58 +913,8 @@ void HistogramArea::updateBackBuffer () } } - int realhistheight = fullhistheight; - - // though much faster than before, this still takes a lot of time especially for big files if rawMode is true - /*if (!fullMode) { - int area = 0; - -#ifdef __SSE2__ - vint onev = _mm_set1_epi32(1); - vint iv = (vint)ZEROV; -#endif - - for (unsigned i = 0; i < fullhistheight; i++) { -#ifdef __SSE2__ - vint areatempv = (vint)ZEROV; - - for (int j = 0; j < 256; j += 4) { - vmask mask1v = _mm_cmpgt_epi32(LVI(lhisttemp[j]), iv); - vmask mask2v = _mm_cmpgt_epi32(LVI(rhtemp[j]), iv); - vmask mask3v = _mm_cmpgt_epi32(LVI(ghtemp[j]), iv); - vmask mask4v = _mm_cmpgt_epi32(LVI(bhtemp[j]), iv); - mask1v = _mm_or_si128(mask1v, mask2v); - mask3v = _mm_or_si128(mask3v, mask4v); - mask2v = _mm_cmpgt_epi32(LVI(chisttemp[j]), iv); - mask1v = _mm_or_si128(mask1v, mask3v); - mask1v = _mm_or_si128(mask1v, mask2v); - areatempv = _mm_add_epi32(areatempv, _mm_and_si128(mask1v, onev)); - - } - - areatempv = _mm_add_epi32(areatempv, (vint)_mm_movehl_ps((vfloat)areatempv, (vfloat)areatempv)); - areatempv = _mm_add_epi32(areatempv, _mm_shuffle_epi32(areatempv, 1)); - area += _mm_cvtsi128_si32(areatempv); - iv = _mm_add_epi32(iv, onev); - -#else - - for (int j = 0; j < 256; j++) - if (lhisttemp[j] > i || rhtemp[j] > i || ghtemp[j] > i || bhtemp[j] > i || chisttemp[j] > i) { - area++; - } - -#endif - - if ((double)area / (256 * (i + 1)) < 0.3) { - realhistheight = i; - break; - } - } - }*/ - - if (realhistheight < winh - 2) { - realhistheight = winh - 2; + if (fullhistheight < winh - 2) { + fullhistheight = winh - 2; } cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); @@ -952,57 +924,57 @@ void HistogramArea::updateBackBuffer () int ui = 0, oi = 0; if (needBlue) { - drawCurve(cr, bhchanged, realhistheight, w, h); + drawCurve(cr, bhchanged, fullhistheight, w, h); cr->set_source_rgba (0.0, 0.0, 1.0, 0.4); cr->fill (); - drawCurve(cr, bhchanged, realhistheight, w, h); + drawCurve(cr, bhchanged, fullhistheight, w, h); cr->set_source_rgba (0.0, 0.0, 1.0, 0.9); cr->stroke (); - drawMarks(cr, bhchanged, realhistheight, w, ui, oi); + drawMarks(cr, bhchanged, fullhistheight, w, ui, oi); } if (needGreen) { - drawCurve(cr, ghchanged, realhistheight, w, h); + drawCurve(cr, ghchanged, fullhistheight, w, h); cr->set_source_rgba (0.0, 1.0, 0.0, 0.4); cr->fill (); - drawCurve(cr, ghchanged, realhistheight, w, h); + drawCurve(cr, ghchanged, fullhistheight, w, h); cr->set_source_rgba (0.0, 1.0, 0.0, 0.9); cr->stroke (); - drawMarks(cr, ghchanged, realhistheight, w, ui, oi); + drawMarks(cr, ghchanged, fullhistheight, w, ui, oi); } if (needRed) { - drawCurve(cr, rhchanged, realhistheight, w, h); + drawCurve(cr, rhchanged, fullhistheight, w, h); cr->set_source_rgba (1.0, 0.0, 0.0, 0.4); cr->fill (); - drawCurve(cr, rhchanged, realhistheight, w, h); + drawCurve(cr, rhchanged, fullhistheight, w, h); cr->set_source_rgba (1.0, 0.0, 0.0, 0.9); cr->stroke (); - drawMarks(cr, rhchanged, realhistheight, w, ui, oi); + drawMarks(cr, rhchanged, fullhistheight, w, ui, oi); } cr->set_operator(Cairo::OPERATOR_SOURCE); if (needLuma && !rawMode) { - drawCurve(cr, lhist, realhistheight, w, h); + drawCurve(cr, lhist, fullhistheight, w, h); cr->set_source_rgb (0.9, 0.9, 0.9); cr->stroke (); - drawMarks(cr, lhist, realhistheight, w, ui, oi); + drawMarks(cr, lhist, fullhistheight, w, ui, oi); } if (needChroma && !rawMode) { - drawCurve(cr, chist, realhistheight, w, h); - cr->set_source_rgb (0.15, 0.15, 0.15); + drawCurve(cr, chist, fullhistheight, w, h); + cr->set_source_rgb (0.4, 0.4, 0.4); cr->stroke (); - drawMarks(cr, chist, realhistheight, w, ui, oi); + drawMarks(cr, chist, fullhistheight, w, ui, oi); } } @@ -1016,7 +988,7 @@ void HistogramArea::updateBackBuffer () std::valarray ch_ds (1); ch_ds[0] = 4; cr->set_dash (ch_ds, 0); - + cr->move_to(w / 4 + 0.5, 1.5); cr->line_to(w / 4 + 0.5, h - 2); cr->stroke(); @@ -1026,16 +998,44 @@ void HistogramArea::updateBackBuffer () cr->move_to(3 * w / 4 + 0.5, 1.5); cr->line_to(3 * w / 4 + 0.5, h - 2); cr->stroke(); - cr->move_to(1.5, h / 4 + 0.5); - cr->line_to(w - 2, h / 4 + 0.5); - cr->stroke(); - cr->move_to(1.5, 2 * h / 4 + 0.5); - cr->line_to(w - 2, 2 * h / 4 + 0.5); - cr->stroke(); - cr->move_to(1.5, 3 * h / 4 + 0.5); - cr->line_to(w - 2, 3 * h / 4 + 0.5); - cr->stroke(); - + + if (options.histogramDrawMode == 0) + { + cr->move_to(1.5, h / 4 + 0.5); + cr->line_to(w - 2, h / 4 + 0.5); + cr->stroke(); + cr->move_to(1.5, 2 * h / 4 + 0.5); + cr->line_to(w - 2, 2 * h / 4 + 0.5); + cr->stroke(); + cr->move_to(1.5, 3 * h / 4 + 0.5); + cr->line_to(w - 2, 3 * h / 4 + 0.5); + cr->stroke(); + } + if (options.histogramDrawMode == 1) + { + cr->move_to(1.5, h - scalingFunctionLog(h,h / 4 + 0.5)); + cr->line_to(w - 2, h - scalingFunctionLog(h,h / 4 + 0.5)); + cr->stroke(); + cr->move_to(1.5, h - scalingFunctionLog(h,2 * h / 4 + 0.5)); + cr->line_to(w - 2, h - scalingFunctionLog(h,2 * h / 4 + 0.5)); + cr->stroke(); + cr->move_to(1.5, h - scalingFunctionLog(h,3 * h / 4 + 0.5)); + cr->line_to(w - 2, h - scalingFunctionLog(h,3 * h / 4 + 0.5)); + cr->stroke(); + } + if (options.histogramDrawMode == 2) + { + cr->move_to(1.5, scalingFunctionCube(h,h / 4 + 0.5)); + cr->line_to(w - 2, scalingFunctionCube(h,h / 4 + 0.5)); + cr->stroke(); + cr->move_to(1.5, scalingFunctionCube(h,2 * h / 4 + 0.5)); + cr->line_to(w - 2, scalingFunctionCube(h,2 * h / 4 + 0.5)); + cr->stroke(); + cr->move_to(1.5, scalingFunctionCube(h,3 * h / 4 + 0.5)); + cr->line_to(w - 2, scalingFunctionCube(h,3 * h / 4 + 0.5)); + cr->stroke(); + } + cr->unset_dash(); // Draw the frame's border @@ -1055,6 +1055,18 @@ void HistogramArea::on_realize () add_events(Gdk::BUTTON_PRESS_MASK); } +double HistogramArea::scalingFunctionLog(double vsize, double val) +{ + double factor = 1.0; // can be tuned if necessary - makes the log 'steeper' + return vsize * log(factor / (factor + val)) / log(factor / vsize); +} + +double HistogramArea::scalingFunctionCube(double vsize, double val) +{ + double factor = 3.0; // can be tuned; higher values compress the middel part of the scale + return (val * (4 * (-1.0 + factor) * val * val - 6.0 * (-1.0 + factor) * val * vsize + (-2.0 + 3.0 * factor) * vsize *vsize))/(factor * vsize * vsize); +} + void HistogramArea::drawCurve(Cairo::RefPtr &cr, LUTu & data, double scale, int hsize, int vsize) { @@ -1063,6 +1075,11 @@ void HistogramArea::drawCurve(Cairo::RefPtr &cr, for (int i = 0; i < 256; i++) { double val = data[i] * (double)(vsize - 2) / scale; + + if (drawMode == 1) + val = scalingFunctionLog((double)vsize,val); + if (drawMode == 2) + val = scalingFunctionCube((double)vsize,val); if (val > vsize - 1) { val = vsize - 1; @@ -1111,18 +1128,18 @@ bool HistogramArea::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) bool HistogramArea::on_button_press_event (GdkEventButton* event) { - - /*if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { - fullMode = !fullMode; - options.histogramFullMode = fullMode; - - if (myFullModeListener) { - myFullModeListener->toggle_button_full (); + if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { + + drawMode = (drawMode + 1) % 3; + options.histogramDrawMode = (options.histogramDrawMode + 1) % 3; + + if (myDrawModeListener) { // This doesn't seem te be work? Therefore no update of the button graphics... + myDrawModeListener->toggle_button_mode (); } - - updateBackBuffer (); + + updateBackBuffer (); queue_draw (); - }*/ + } return true; } diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index 784bdec78..bc9fca9a4 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -108,6 +108,13 @@ public: virtual void toggle_button_full () {} };*/ +class DrawModeListener +{ +public: + virtual ~DrawModeListener() {} + virtual void toggle_button_mode () {} +}; + class HistogramArea : public Gtk::DrawingArea, public BackBuffer { private: @@ -118,21 +125,23 @@ protected: LUTu lhistRaw, rhistRaw, ghistRaw, bhistRaw; bool valid; - //bool fullMode; - //FullModeListener *myFullModeListener; + int drawMode; + DrawModeListener *myDrawModeListener; int oldwidth, oldheight; bool needLuma, needRed, needGreen, needBlue, rawMode, needChroma; + + HistogramAreaIdleHelper* haih; public: - explicit HistogramArea(/*FullModeListener *fml = nullptr*/); + explicit HistogramArea(DrawModeListener *fml = nullptr); ~HistogramArea(); void updateBackBuffer (); void update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw, LUTu &histChroma); - void updateOptions (bool r, bool g, bool b, bool l, bool raw, /*bool full ,*/ bool c); + void updateOptions (bool r, bool g, bool b, bool l, bool raw, bool c, int mode); void on_realize(); bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr); bool on_button_press_event (GdkEventButton* event); @@ -145,9 +154,11 @@ private: void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const; void get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const; void get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const; + double scalingFunctionLog(double vsize, double val); + double scalingFunctionCube(double vsize, double val); }; -class HistogramPanel : public Gtk::Grid, public PointerMotionListener/*, public FullModeListener*/ +class HistogramPanel : public Gtk::Grid, public PointerMotionListener, public DrawModeListener { protected: @@ -161,16 +172,15 @@ protected: Gtk::ToggleButton* showBlue; Gtk::ToggleButton* showValue; Gtk::ToggleButton* showRAW; - //Gtk::ToggleButton* showFull; Gtk::ToggleButton* showBAR; Gtk::ToggleButton* showChro; + Gtk::Button* showMode; Gtk::Image *redImage; Gtk::Image *greenImage; Gtk::Image *blueImage; Gtk::Image *valueImage; Gtk::Image *rawImage; - //Gtk::Image *fullImage; Gtk::Image *barImage; Gtk::Image *chroImage; @@ -179,10 +189,12 @@ protected: Gtk::Image *blueImage_g; Gtk::Image *valueImage_g; Gtk::Image *rawImage_g; - //Gtk::Image *fullImage_g; Gtk::Image *barImage_g; Gtk::Image *chroImage_g; + Gtk::Image *modeImage; + Gtk::Image *modeImage_g; + Gtk::Image *modeImage_g2; sigc::connection rconn; void setHistInvalid (); @@ -209,14 +221,14 @@ public: void blue_toggled (); void value_toggled (); void raw_toggled (); - //void full_toggled (); void chro_toggled (); void bar_toggled (); + void mode_released (); void rgbv_toggled (); void resized (Gtk::Allocation& req); - // fullModeListener interface - //void toggle_button_full (); + // drawModeListener interface + void toggle_button_mode (); }; #endif diff --git a/rtgui/options.cc b/rtgui/options.cc index 1dbaa574e..501756d3f 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -415,7 +415,8 @@ void Options::setDefaults () multiDisplayMode = 0; histogramPosition = 1; histogramBar = true; - histogramFullMode = false; + //histogramFullMode = false; + histogramDrawMode = 0; curvebboxpos = 1; prevdemo = PD_Sidecar; rgbDenoiseThreadLimit = 0; @@ -1290,8 +1291,12 @@ void Options::readFromFile (Glib::ustring fname) histogramBar = keyFile.get_boolean ("GUI", "HistogramBar"); } - if (keyFile.has_key ("GUI", "HistogramFullMode")) { - histogramFullMode = keyFile.get_boolean ("GUI", "HistogramFullMode"); + //if (keyFile.has_key ("GUI", "HistogramFullMode")) { + // histogramFullMode = keyFile.get_boolean ("GUI", "HistogramFullMode"); + //} + + if (keyFile.has_key ("GUI", "HistogramDrawMode")) { + histogramDrawMode = keyFile.get_integer ("GUI", "HistogramDrawMode"); } if (keyFile.has_key ("GUI", "NavigatorRGBUnit")) { @@ -1938,7 +1943,8 @@ void Options::saveToFile (Glib::ustring fname) keyFile.set_double_list ("GUI", "NavGuideBrush", navGuideBrush); keyFile.set_integer ("GUI", "HistogramPosition", histogramPosition); keyFile.set_boolean ("GUI", "HistogramBar", histogramBar); - keyFile.set_boolean ("GUI", "HistogramFullMode", histogramFullMode); + //keyFile.set_boolean ("GUI", "HistogramFullMode", histogramFullMode); + keyFile.set_integer ("GUI", "HistogramDrawMode", histogramDrawMode); keyFile.set_integer ("GUI", "NavigatorRGBUnit", (int)navRGBUnit); keyFile.set_integer ("GUI", "NavigatorHSVUnit", (int)navHSVUnit); keyFile.set_boolean ("GUI", "ShowFilmStripToolBar", showFilmStripToolBar); diff --git a/rtgui/options.h b/rtgui/options.h index 25fa31b6d..33835b664 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -256,7 +256,8 @@ public: int histogramPosition; // 0=disabled, 1=left pane, 2=right pane //int histogramWorking; // 0=disabled, 1=left pane, 2=right pane bool histogramBar; - bool histogramFullMode; + //bool histogramFullMode; + int histogramDrawMode; bool FileBrowserToolbarSingleRow; bool hideTPVScrollbar; bool UseIconNoText; From ab5ce7f1308d7f7b9acde0639eafeed6dcedc9b9 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 15 Jun 2018 23:22:23 +0200 Subject: [PATCH 013/115] Full functional button now. Reverted a minor change from unsigned int to int. --- rtgui/histogrampanel.cc | 43 +++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index bff8a4b3c..53ea6c459 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -45,7 +45,7 @@ HistogramPanel::HistogramPanel () set_halign(Gtk::ALIGN_FILL); set_name("HistogramPanel"); - histogramArea = Gtk::manage (new HistogramArea (/*this*/)); + histogramArea = Gtk::manage (new HistogramArea (this)); histogramArea->set_hexpand(true); histogramArea->set_vexpand(true); histogramRGBArea = Gtk::manage (new HistogramRGBArea ()); @@ -402,11 +402,6 @@ void HistogramPanel::reorder (Gtk::PositionType align) // DrawModeListener interface: void HistogramPanel::toggle_button_mode () { - // Does not seem to be called from HistogramArea::on_button_press_event ... why? - // - // printf("%i\n",options.histogramDrawMode); - // fflush(stdout); - if (options.histogramDrawMode == 0) showMode->set_image(*modeImage); else if (options.histogramDrawMode == 1) @@ -889,7 +884,7 @@ void HistogramArea::updateBackBuffer () // does not take into account 0 and 255 values // them are handled separately - int fullhistheight = 0; + unsigned int fullhistheight = 0; for (int i = 1; i < 255; i++) { if (needLuma && lhisttemp[i] > fullhistheight) { @@ -912,9 +907,11 @@ void HistogramArea::updateBackBuffer () fullhistheight = bhtemp[i]; } } + + int realhistheight = fullhistheight; - if (fullhistheight < winh - 2) { - fullhistheight = winh - 2; + if (realhistheight < winh - 2) { + realhistheight = winh - 2; } cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); @@ -924,57 +921,57 @@ void HistogramArea::updateBackBuffer () int ui = 0, oi = 0; if (needBlue) { - drawCurve(cr, bhchanged, fullhistheight, w, h); + drawCurve(cr, bhchanged, realhistheight, w, h); cr->set_source_rgba (0.0, 0.0, 1.0, 0.4); cr->fill (); - drawCurve(cr, bhchanged, fullhistheight, w, h); + drawCurve(cr, bhchanged, realhistheight, w, h); cr->set_source_rgba (0.0, 0.0, 1.0, 0.9); cr->stroke (); - drawMarks(cr, bhchanged, fullhistheight, w, ui, oi); + drawMarks(cr, bhchanged, realhistheight, w, ui, oi); } if (needGreen) { - drawCurve(cr, ghchanged, fullhistheight, w, h); + drawCurve(cr, ghchanged, realhistheight, w, h); cr->set_source_rgba (0.0, 1.0, 0.0, 0.4); cr->fill (); - drawCurve(cr, ghchanged, fullhistheight, w, h); + drawCurve(cr, ghchanged, realhistheight, w, h); cr->set_source_rgba (0.0, 1.0, 0.0, 0.9); cr->stroke (); - drawMarks(cr, ghchanged, fullhistheight, w, ui, oi); + drawMarks(cr, ghchanged, realhistheight, w, ui, oi); } if (needRed) { - drawCurve(cr, rhchanged, fullhistheight, w, h); + drawCurve(cr, rhchanged, realhistheight, w, h); cr->set_source_rgba (1.0, 0.0, 0.0, 0.4); cr->fill (); - drawCurve(cr, rhchanged, fullhistheight, w, h); + drawCurve(cr, rhchanged, realhistheight, w, h); cr->set_source_rgba (1.0, 0.0, 0.0, 0.9); cr->stroke (); - drawMarks(cr, rhchanged, fullhistheight, w, ui, oi); + drawMarks(cr, rhchanged, realhistheight, w, ui, oi); } cr->set_operator(Cairo::OPERATOR_SOURCE); if (needLuma && !rawMode) { - drawCurve(cr, lhist, fullhistheight, w, h); + drawCurve(cr, lhist, realhistheight, w, h); cr->set_source_rgb (0.9, 0.9, 0.9); cr->stroke (); - drawMarks(cr, lhist, fullhistheight, w, ui, oi); + drawMarks(cr, lhist, realhistheight, w, ui, oi); } if (needChroma && !rawMode) { - drawCurve(cr, chist, fullhistheight, w, h); + drawCurve(cr, chist, realhistheight, w, h); cr->set_source_rgb (0.4, 0.4, 0.4); cr->stroke (); - drawMarks(cr, chist, fullhistheight, w, ui, oi); + drawMarks(cr, chist, realhistheight, w, ui, oi); } } @@ -1133,7 +1130,7 @@ bool HistogramArea::on_button_press_event (GdkEventButton* event) drawMode = (drawMode + 1) % 3; options.histogramDrawMode = (options.histogramDrawMode + 1) % 3; - if (myDrawModeListener) { // This doesn't seem te be work? Therefore no update of the button graphics... + if (myDrawModeListener) { myDrawModeListener->toggle_button_mode (); } From c8bddca09b8c23cdaa9e124878165775f3775360 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Sat, 16 Jun 2018 08:57:50 +0200 Subject: [PATCH 014/115] Changed back the order of the buttons --- rtgui/histogrampanel.cc | 246 ++++++++++++++++++++-------------------- 1 file changed, 124 insertions(+), 122 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 53ea6c459..9856462b2 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -72,8 +72,8 @@ HistogramPanel::HistogramPanel () valueImage = new RTImage ("histValue.png"); chroImage = new RTImage ("histChro.png"); rawImage = new RTImage ("histRaw.png"); + modeImage = new RTImage ("histFull.png"); // needs replacement! barImage = new RTImage ("histBar.png"); - modeImage = new RTImage ("histFull.png"); // needs replacement! redImage_g = new RTImage ("histRedg.png"); greenImage_g = new RTImage ("histGreeng.png"); @@ -81,9 +81,9 @@ HistogramPanel::HistogramPanel () valueImage_g = new RTImage ("histValueg.png"); chroImage_g = new RTImage ("histChrog.png"); rawImage_g = new RTImage ("histRawg.png"); + modeImage_g = new RTImage ("histFullg.png"); // needs replacement! + modeImage_g2 = new RTImage ("histBarg.png"); // needs replacement! barImage_g = new RTImage ("histBarg.png"); - modeImage_g = new RTImage ("histFullg.png"); // needs replacement! - modeImage_g2 = new RTImage ("histBarg.png"); // needs replacement! showRed = Gtk::manage (new Gtk::ToggleButton ()); showGreen = Gtk::manage (new Gtk::ToggleButton ()); @@ -91,8 +91,8 @@ HistogramPanel::HistogramPanel () showValue = Gtk::manage (new Gtk::ToggleButton ()); showChro = Gtk::manage (new Gtk::ToggleButton ()); showRAW = Gtk::manage (new Gtk::ToggleButton ()); + showMode = Gtk::manage (new Gtk::Button ()); showBAR = Gtk::manage (new Gtk::ToggleButton ()); - showMode = Gtk::manage (new Gtk::Button ()); showRed->set_name("histButton"); showRed->set_can_focus(false); @@ -106,10 +106,10 @@ HistogramPanel::HistogramPanel () showChro->set_can_focus(false); showRAW->set_name("histButton"); showRAW->set_can_focus(false); + showMode->set_name("histButton"); + showMode->set_can_focus(false); showBAR->set_name("histButton"); showBAR->set_can_focus(false); - showMode->set_name("histButton"); - showMode->set_can_focus(false); showRed->set_relief (Gtk::RELIEF_NONE); showGreen->set_relief (Gtk::RELIEF_NONE); @@ -117,8 +117,8 @@ HistogramPanel::HistogramPanel () showValue->set_relief (Gtk::RELIEF_NONE); showChro->set_relief (Gtk::RELIEF_NONE); showRAW->set_relief (Gtk::RELIEF_NONE); + showMode->set_relief (Gtk::RELIEF_NONE); showBAR->set_relief (Gtk::RELIEF_NONE); - showMode->set_relief (Gtk::RELIEF_NONE); showRed->set_tooltip_text (M("HISTOGRAM_TOOLTIP_R")); showGreen->set_tooltip_text (M("HISTOGRAM_TOOLTIP_G")); @@ -126,8 +126,8 @@ HistogramPanel::HistogramPanel () showValue->set_tooltip_text (M("HISTOGRAM_TOOLTIP_L")); showChro->set_tooltip_text (M("HISTOGRAM_TOOLTIP_CHRO")); showRAW->set_tooltip_text (M("HISTOGRAM_TOOLTIP_RAW")); + showMode->set_tooltip_text (M("HISTOGRAM_TOOLTIP_FULL")); // needs replacement! showBAR->set_tooltip_text (M("HISTOGRAM_TOOLTIP_BAR")); - showMode->set_tooltip_text (M("HISTOGRAM_TOOLTIP_FULL")); // needs replacement! buttonGrid = Gtk::manage (new Gtk::Grid ()); buttonGrid->set_orientation(Gtk::ORIENTATION_VERTICAL); @@ -136,8 +136,8 @@ HistogramPanel::HistogramPanel () showBlue->set_active (true); showValue->set_active (false);//unactive by default showChro->set_active (false);//unactive by default - showRAW->set_active (false); + // no showMode->set_active(), as it's not a ToggleButton showBAR->set_active (options.histogramBar); showRed->set_image (showRed->get_active() ? *redImage : *redImage_g); @@ -146,14 +146,13 @@ HistogramPanel::HistogramPanel () showValue->set_image (showValue->get_active() ? *valueImage : *valueImage_g); showChro->set_image (showChro->get_active() ? *chroImage : *chroImage_g); showRAW->set_image (showRAW->get_active() ? *rawImage : *rawImage_g); + if (options.histogramDrawMode == 0) + showMode->set_image(*modeImage); + else if (options.histogramDrawMode == 1) + showMode->set_image(*modeImage_g); + else + showMode->set_image(*modeImage_g2); showBAR->set_image (showBAR->get_active() ? *barImage : *barImage_g); - - if (options.histogramDrawMode == 0) - showMode->set_image(*modeImage); - else if (options.histogramDrawMode == 1) - showMode->set_image(*modeImage_g); - else - showMode->set_image(*modeImage_g2); showRed->set_hexpand(false); showRed->set_vexpand(false); @@ -179,14 +178,14 @@ HistogramPanel::HistogramPanel () showRAW->set_vexpand(false); showRAW->set_halign(Gtk::ALIGN_CENTER); showRAW->set_valign(Gtk::ALIGN_START); + showMode->set_hexpand(false); + showMode->set_vexpand(false); + showMode->set_halign(Gtk::ALIGN_CENTER); + showMode->set_valign(Gtk::ALIGN_START); showBAR->set_hexpand(false); showBAR->set_vexpand(false); showBAR->set_halign(Gtk::ALIGN_CENTER); showBAR->set_valign(Gtk::ALIGN_START); - showMode->set_hexpand(false); - showMode->set_vexpand(false); - showMode->set_halign(Gtk::ALIGN_CENTER); - showMode->set_valign(Gtk::ALIGN_START); showRed->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::red_toggled), showRed ); showGreen->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::green_toggled), showGreen ); @@ -194,8 +193,8 @@ HistogramPanel::HistogramPanel () showValue->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::value_toggled), showValue ); showChro->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::chro_toggled), showChro ); showRAW->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::raw_toggled), showRAW ); - showBAR->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::bar_toggled), showBAR ); showMode->signal_released().connect( sigc::mem_fun(*this, &HistogramPanel::mode_released), showMode ); + showBAR->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::bar_toggled), showBAR ); buttonGrid->add (*showRed); buttonGrid->add (*showGreen); @@ -203,8 +202,8 @@ HistogramPanel::HistogramPanel () buttonGrid->add (*showValue); buttonGrid->add (*showChro); buttonGrid->add (*showRAW); + buttonGrid->add (*showMode); buttonGrid->add (*showBAR); - buttonGrid->add (*showMode); // Put the button vbox next to the window's border to be less disturbing if (options.histogramPosition == 1) { @@ -228,8 +227,8 @@ HistogramPanel::~HistogramPanel () delete valueImage; delete chroImage; delete rawImage; + delete modeImage; delete barImage; - delete modeImage; delete redImage_g; delete greenImage_g; @@ -237,9 +236,9 @@ HistogramPanel::~HistogramPanel () delete valueImage_g; delete chroImage_g; delete rawImage_g; + delete modeImage_g; + delete modeImage_g2; delete barImage_g; - delete modeImage_g; - delete modeImage_g2; } @@ -320,22 +319,25 @@ void HistogramPanel::raw_toggled () rgbv_toggled(); } + +void HistogramPanel::mode_released () +{ + options.histogramDrawMode = (options.histogramDrawMode + 1) % 3; + if (options.histogramDrawMode == 0) + showMode->set_image(*modeImage); + else if (options.histogramDrawMode == 1) + showMode->set_image(*modeImage_g); + else + showMode->set_image(*modeImage_g2); + rgbv_toggled(); +} + void HistogramPanel::bar_toggled () { showBAR->set_image(showBAR->get_active() ? *barImage : *barImage_g); rgbv_toggled(); } -void HistogramPanel::mode_released () -{ - options.histogramDrawMode = (options.histogramDrawMode + 1) % 3; - if (options.histogramDrawMode == 0) - showMode->set_image(*modeImage); - else if (options.histogramDrawMode == 1) - showMode->set_image(*modeImage_g); - else - showMode->set_image(*modeImage_g2); - rgbv_toggled(); -} + void HistogramPanel::rgbv_toggled () { // Update Display @@ -401,13 +403,13 @@ void HistogramPanel::reorder (Gtk::PositionType align) // DrawModeListener interface: void HistogramPanel::toggle_button_mode () -{ - if (options.histogramDrawMode == 0) - showMode->set_image(*modeImage); - else if (options.histogramDrawMode == 1) - showMode->set_image(*modeImage_g); - else - showMode->set_image(*modeImage_g2); +{ + if (options.histogramDrawMode == 0) + showMode->set_image(*modeImage); + else if (options.histogramDrawMode == 1) + showMode->set_image(*modeImage_g); + else + showMode->set_image(*modeImage_g2); } // @@ -751,11 +753,11 @@ void HistogramArea::get_preferred_height_for_width_vfunc (int width, int &minimu } else if (gHeight < 100) { gHeight = 100; }*/ - - int gHeight = width; // aspect ratio 1:1 should fit on most monitors - if (gHeight < 100) { - gHeight = 100; - } + + int gHeight = width; // aspect ratio 1:1 should fit on most monitors + if (gHeight < 100) { + gHeight = 100; + } minimum_height = gHeight * 0.7; natural_height = gHeight; @@ -776,7 +778,7 @@ void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, boo needLuma = l; rawMode = raw; needChroma = c; - drawMode = mode; + drawMode = mode; updateBackBuffer (); } @@ -907,8 +909,8 @@ void HistogramArea::updateBackBuffer () fullhistheight = bhtemp[i]; } } - - int realhistheight = fullhistheight; + + int realhistheight = fullhistheight; if (realhistheight < winh - 2) { realhistheight = winh - 2; @@ -916,7 +918,7 @@ void HistogramArea::updateBackBuffer () cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); cr->set_line_width (1.0); - cr->set_operator(Cairo::OPERATOR_ADD); + cr->set_operator(Cairo::OPERATOR_ADD); int ui = 0, oi = 0; @@ -924,39 +926,39 @@ void HistogramArea::updateBackBuffer () drawCurve(cr, bhchanged, realhistheight, w, h); cr->set_source_rgba (0.0, 0.0, 1.0, 0.4); cr->fill (); - - drawCurve(cr, bhchanged, realhistheight, w, h); + + drawCurve(cr, bhchanged, realhistheight, w, h); cr->set_source_rgba (0.0, 0.0, 1.0, 0.9); cr->stroke (); drawMarks(cr, bhchanged, realhistheight, w, ui, oi); } - + if (needGreen) { drawCurve(cr, ghchanged, realhistheight, w, h); cr->set_source_rgba (0.0, 1.0, 0.0, 0.4); cr->fill (); - - drawCurve(cr, ghchanged, realhistheight, w, h); + + drawCurve(cr, ghchanged, realhistheight, w, h); cr->set_source_rgba (0.0, 1.0, 0.0, 0.9); cr->stroke (); - + drawMarks(cr, ghchanged, realhistheight, w, ui, oi); } - + if (needRed) { - drawCurve(cr, rhchanged, realhistheight, w, h); - cr->set_source_rgba (1.0, 0.0, 0.0, 0.4); + drawCurve(cr, rhchanged, realhistheight, w, h); + cr->set_source_rgba (1.0, 0.0, 0.0, 0.4); cr->fill (); - drawCurve(cr, rhchanged, realhistheight, w, h); + drawCurve(cr, rhchanged, realhistheight, w, h); cr->set_source_rgba (1.0, 0.0, 0.0, 0.9); cr->stroke (); drawMarks(cr, rhchanged, realhistheight, w, ui, oi); } - cr->set_operator(Cairo::OPERATOR_SOURCE); + cr->set_operator(Cairo::OPERATOR_SOURCE); if (needLuma && !rawMode) { drawCurve(cr, lhist, realhistheight, w, h); @@ -965,7 +967,7 @@ void HistogramArea::updateBackBuffer () drawMarks(cr, lhist, realhistheight, w, ui, oi); } - + if (needChroma && !rawMode) { drawCurve(cr, chist, realhistheight, w, h); cr->set_source_rgb (0.4, 0.4, 0.4); @@ -973,7 +975,7 @@ void HistogramArea::updateBackBuffer () drawMarks(cr, chist, realhistheight, w, ui, oi); } - + } cr->set_source_rgba (1., 1., 1., 0.35); @@ -985,7 +987,7 @@ void HistogramArea::updateBackBuffer () std::valarray ch_ds (1); ch_ds[0] = 4; cr->set_dash (ch_ds, 0); - + cr->move_to(w / 4 + 0.5, 1.5); cr->line_to(w / 4 + 0.5, h - 2); cr->stroke(); @@ -995,44 +997,44 @@ void HistogramArea::updateBackBuffer () cr->move_to(3 * w / 4 + 0.5, 1.5); cr->line_to(3 * w / 4 + 0.5, h - 2); cr->stroke(); - - if (options.histogramDrawMode == 0) - { - cr->move_to(1.5, h / 4 + 0.5); - cr->line_to(w - 2, h / 4 + 0.5); - cr->stroke(); - cr->move_to(1.5, 2 * h / 4 + 0.5); - cr->line_to(w - 2, 2 * h / 4 + 0.5); - cr->stroke(); - cr->move_to(1.5, 3 * h / 4 + 0.5); - cr->line_to(w - 2, 3 * h / 4 + 0.5); - cr->stroke(); - } - if (options.histogramDrawMode == 1) - { - cr->move_to(1.5, h - scalingFunctionLog(h,h / 4 + 0.5)); - cr->line_to(w - 2, h - scalingFunctionLog(h,h / 4 + 0.5)); - cr->stroke(); - cr->move_to(1.5, h - scalingFunctionLog(h,2 * h / 4 + 0.5)); - cr->line_to(w - 2, h - scalingFunctionLog(h,2 * h / 4 + 0.5)); - cr->stroke(); - cr->move_to(1.5, h - scalingFunctionLog(h,3 * h / 4 + 0.5)); - cr->line_to(w - 2, h - scalingFunctionLog(h,3 * h / 4 + 0.5)); - cr->stroke(); - } - if (options.histogramDrawMode == 2) - { - cr->move_to(1.5, scalingFunctionCube(h,h / 4 + 0.5)); - cr->line_to(w - 2, scalingFunctionCube(h,h / 4 + 0.5)); - cr->stroke(); - cr->move_to(1.5, scalingFunctionCube(h,2 * h / 4 + 0.5)); - cr->line_to(w - 2, scalingFunctionCube(h,2 * h / 4 + 0.5)); - cr->stroke(); - cr->move_to(1.5, scalingFunctionCube(h,3 * h / 4 + 0.5)); - cr->line_to(w - 2, scalingFunctionCube(h,3 * h / 4 + 0.5)); - cr->stroke(); - } - + + if (options.histogramDrawMode == 0) + { + cr->move_to(1.5, h / 4 + 0.5); + cr->line_to(w - 2, h / 4 + 0.5); + cr->stroke(); + cr->move_to(1.5, 2 * h / 4 + 0.5); + cr->line_to(w - 2, 2 * h / 4 + 0.5); + cr->stroke(); + cr->move_to(1.5, 3 * h / 4 + 0.5); + cr->line_to(w - 2, 3 * h / 4 + 0.5); + cr->stroke(); + } + if (options.histogramDrawMode == 1) + { + cr->move_to(1.5, h - scalingFunctionLog(h,h / 4 + 0.5)); + cr->line_to(w - 2, h - scalingFunctionLog(h,h / 4 + 0.5)); + cr->stroke(); + cr->move_to(1.5, h - scalingFunctionLog(h,2 * h / 4 + 0.5)); + cr->line_to(w - 2, h - scalingFunctionLog(h,2 * h / 4 + 0.5)); + cr->stroke(); + cr->move_to(1.5, h - scalingFunctionLog(h,3 * h / 4 + 0.5)); + cr->line_to(w - 2, h - scalingFunctionLog(h,3 * h / 4 + 0.5)); + cr->stroke(); + } + if (options.histogramDrawMode == 2) + { + cr->move_to(1.5, scalingFunctionCube(h,h / 4 + 0.5)); + cr->line_to(w - 2, scalingFunctionCube(h,h / 4 + 0.5)); + cr->stroke(); + cr->move_to(1.5, scalingFunctionCube(h,2 * h / 4 + 0.5)); + cr->line_to(w - 2, scalingFunctionCube(h,2 * h / 4 + 0.5)); + cr->stroke(); + cr->move_to(1.5, scalingFunctionCube(h,3 * h / 4 + 0.5)); + cr->line_to(w - 2, scalingFunctionCube(h,3 * h / 4 + 0.5)); + cr->stroke(); + } + cr->unset_dash(); // Draw the frame's border @@ -1054,14 +1056,14 @@ void HistogramArea::on_realize () double HistogramArea::scalingFunctionLog(double vsize, double val) { - double factor = 1.0; // can be tuned if necessary - makes the log 'steeper' - return vsize * log(factor / (factor + val)) / log(factor / vsize); + double factor = 1.0; // can be tuned if necessary - makes the log 'steeper' + return vsize * log(factor / (factor + val)) / log(factor / vsize); } double HistogramArea::scalingFunctionCube(double vsize, double val) { - double factor = 3.0; // can be tuned; higher values compress the middel part of the scale - return (val * (4 * (-1.0 + factor) * val * val - 6.0 * (-1.0 + factor) * val * vsize + (-2.0 + 3.0 * factor) * vsize *vsize))/(factor * vsize * vsize); + double factor = 3.0; // can be tuned; higher values compress the middel part of the scale + return (val * (4 * (-1.0 + factor) * val * val - 6.0 * (-1.0 + factor) * val * vsize + (-2.0 + 3.0 * factor) * vsize *vsize))/(factor * vsize * vsize); } void HistogramArea::drawCurve(Cairo::RefPtr &cr, @@ -1072,11 +1074,11 @@ void HistogramArea::drawCurve(Cairo::RefPtr &cr, for (int i = 0; i < 256; i++) { double val = data[i] * (double)(vsize - 2) / scale; - - if (drawMode == 1) - val = scalingFunctionLog((double)vsize,val); - if (drawMode == 2) - val = scalingFunctionCube((double)vsize,val); + + if (drawMode == 1) + val = scalingFunctionLog((double)vsize,val); + if (drawMode == 2) + val = scalingFunctionCube((double)vsize,val); if (val > vsize - 1) { val = vsize - 1; @@ -1125,18 +1127,18 @@ bool HistogramArea::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) bool HistogramArea::on_button_press_event (GdkEventButton* event) { - if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { - - drawMode = (drawMode + 1) % 3; - options.histogramDrawMode = (options.histogramDrawMode + 1) % 3; - - if (myDrawModeListener) { + if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { + + drawMode = (drawMode + 1) % 3; + options.histogramDrawMode = (options.histogramDrawMode + 1) % 3; + + if (myDrawModeListener) { myDrawModeListener->toggle_button_mode (); } - - updateBackBuffer (); + + updateBackBuffer (); queue_draw (); - } + } return true; } From 9e735b264037e1b476200ccde525fc125b933d0a Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Sun, 17 Jun 2018 10:01:16 +0200 Subject: [PATCH 015/115] Big update: 1) implemented scalable histogram (TooWaBoo's CSS untested but probably unnecessary now); 2) reverted graphical changes; 3) gridlines now multiply based on height and width; 4) removed cube-scaling; 5) implementend double-log scaling as the third alternative based on suggestion by @iliasg --- rtgui/editorpanel.cc | 56 +++++++----- rtgui/editorpanel.h | 16 ++-- rtgui/histogrampanel.cc | 194 ++++++++++++++++------------------------ rtgui/histogrampanel.h | 17 +--- 4 files changed, 121 insertions(+), 162 deletions(-) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 76bf2794a..3f1fba8e6 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -497,8 +497,11 @@ EditorPanel::EditorPanel (FilePanel* filePanel) // build GUI // build left side panel - leftbox = new Gtk::VBox (); - leftbox->set_size_request (230, 250); + leftbox = new Gtk::Paned (Gtk::ORIENTATION_VERTICAL); + + // make a subbox to allow resizing of the histogram (if it's on the left) + leftsubbox = new Gtk::Box (Gtk::ORIENTATION_VERTICAL); + leftsubbox->set_size_request (230, 250); histogramPanel = nullptr; @@ -507,19 +510,21 @@ EditorPanel::EditorPanel (FilePanel* filePanel) ppframe->set_name ("ProfilePanel"); ppframe->add (*profilep); ppframe->set_label (M ("PROFILEPANEL_LABEL")); - //leftbox->pack_start (*ppframe, Gtk::PACK_SHRINK, 4); + //leftsubbox->pack_start (*ppframe, Gtk::PACK_SHRINK, 4); navigator = Gtk::manage (new Navigator ()); navigator->previewWindow->set_size_request (-1, 150); - leftbox->pack_start (*navigator, Gtk::PACK_SHRINK, 2); + leftsubbox->pack_start (*navigator, Gtk::PACK_SHRINK, 2); history = Gtk::manage (new History ()); - leftbox->pack_start (*history); + leftsubbox->pack_start (*history); - leftbox->show_all (); + leftsubbox->show_all (); + + leftbox->pack2 (*leftsubbox, true, true); // build the middle of the screen - Gtk::VBox* editbox = Gtk::manage (new Gtk::VBox ()); + Gtk::Box* editbox = Gtk::manage (new Gtk::Box (Gtk::ORIENTATION_VERTICAL)); info = Gtk::manage (new Gtk::ToggleButton ()); Gtk::Image* infoimg = Gtk::manage (new RTImage ("info.png")); @@ -590,7 +595,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) tpc->setEditProvider (iareapanel->imageArea); tpc->getToolBar()->setLockablePickerToolListener (iareapanel->imageArea); - Gtk::HBox* toolBarPanel = Gtk::manage (new Gtk::HBox ()); + Gtk::Box* toolBarPanel = Gtk::manage (new Gtk::Box (Gtk::ORIENTATION_HORIZONTAL)); toolBarPanel->set_name ("EditorTopPanel"); toolBarPanel->pack_start (*hidehp, Gtk::PACK_SHRINK, 1); toolBarPanel->pack_start (*vseph, Gtk::PACK_SHRINK, 2); @@ -617,10 +622,10 @@ EditorPanel::EditorPanel (FilePanel* filePanel) toolBarPanel->pack_end (*iareapanel->imageArea->previewModePanel, Gtk::PACK_SHRINK, 0); toolBarPanel->pack_end (*vsepz4, Gtk::PACK_SHRINK, 2); - afterBox = Gtk::manage (new Gtk::VBox ()); + afterBox = Gtk::manage (new Gtk::Box (Gtk::ORIENTATION_VERTICAL)); afterBox->pack_start (*iareapanel); - beforeAfterBox = Gtk::manage (new Gtk::HBox()); + beforeAfterBox = Gtk::manage (new Gtk::Box (Gtk::ORIENTATION_HORIZONTAL)); beforeAfterBox->set_name ("BeforeAfterContainer"); beforeAfterBox->pack_start (*afterBox); @@ -628,12 +633,16 @@ EditorPanel::EditorPanel (FilePanel* filePanel) editbox->pack_start (*beforeAfterBox); // build right side panel - vboxright = new Gtk::VBox (false, 0); - vboxright->set_size_request (300, 250); + vboxright = new Gtk::Paned (Gtk::ORIENTATION_VERTICAL); + + vsubboxright = new Gtk::Box (Gtk::ORIENTATION_VERTICAL, 0); + vsubboxright->set_size_request (300, 250); - vboxright->pack_start (*ppframe, Gtk::PACK_SHRINK, 2); + vsubboxright->pack_start (*ppframe, Gtk::PACK_SHRINK, 2); // main notebook - vboxright->pack_start (*tpc->toolPanelNotebook); + vsubboxright->pack_start (*tpc->toolPanelNotebook); + + vboxright->pack2 (*vsubboxright, true, true); // Save buttons Gtk::Grid *iops = new Gtk::Grid (); @@ -769,8 +778,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) hpanedl->set_position (options.historyPanelWidth); } - - Gtk::VPaned * viewpaned = Gtk::manage (new Gtk::VPaned()); + Gtk::Paned *viewpaned = Gtk::manage (new Gtk::Paned (Gtk::ORIENTATION_VERTICAL)); fPanel = filePanel; if (filePanel) { @@ -886,7 +894,9 @@ EditorPanel::~EditorPanel () delete tpc; delete ppframe; + delete leftsubbox; delete leftbox; + delete vsubboxright; delete vboxright; //delete saveAsDialog; @@ -2165,7 +2175,7 @@ void EditorPanel::beforeAfterToggled () tbBeforeLock = Gtk::manage (new Gtk::ToggleButton ()); tbBeforeLock->set_tooltip_markup (M ("MAIN_TOOLTIP_BEFOREAFTERLOCK")); tbBeforeLock->signal_toggled().connect ( sigc::mem_fun (*this, &EditorPanel::tbBeforeLock_toggled) ); - beforeHeaderBox = Gtk::manage (new Gtk::HBox ()); + beforeHeaderBox = Gtk::manage (new Gtk::Box (Gtk::ORIENTATION_HORIZONTAL)); beforeHeaderBox->pack_end (*tbBeforeLock, Gtk::PACK_SHRINK, 2); beforeHeaderBox->pack_end (*beforeLabel, Gtk::PACK_SHRINK, 2); beforeHeaderBox->set_size_request (0, HeaderBoxHeight); @@ -2179,7 +2189,7 @@ void EditorPanel::beforeAfterToggled () afterLabel = Gtk::manage (new Gtk::Label ()); afterLabel->set_markup (Glib::ustring ("") + M ("GENERAL_AFTER") + ""); - afterHeaderBox = Gtk::manage (new Gtk::HBox ()); + afterHeaderBox = Gtk::manage (new Gtk::Box (Gtk::ORIENTATION_HORIZONTAL)); afterHeaderBox->set_size_request (0, HeaderBoxHeight); afterHeaderBox->pack_end (*afterLabel, Gtk::PACK_SHRINK, 2); afterBox->pack_start (*afterHeaderBox, Gtk::PACK_SHRINK, 2); @@ -2321,17 +2331,16 @@ void EditorPanel::updateHistogramPosition (int oldPosition, int newPosition) if (oldPosition == 0) { // There was no Histogram before, so we create it histogramPanel = Gtk::manage (new HistogramPanel ()); - leftbox->pack_start (*histogramPanel, Gtk::PACK_SHRINK, 2); + leftbox->pack1(*histogramPanel, true, false); } else if (oldPosition == 2) { // The histogram was on the right side, so we move it to the left histogramPanel->reference(); removeIfThere (vboxright, histogramPanel, false); - leftbox->pack_start (*histogramPanel, Gtk::PACK_SHRINK, 2); + leftbox->pack1(*histogramPanel, true, false); histogramPanel->unreference(); } histogramPanel->reorder (Gtk::POS_LEFT); - leftbox->reorder_child (*histogramPanel, 0); break; case 2: @@ -2341,17 +2350,16 @@ void EditorPanel::updateHistogramPosition (int oldPosition, int newPosition) if (oldPosition == 0) { // There was no Histogram before, so we create it histogramPanel = Gtk::manage (new HistogramPanel ()); - vboxright->pack_start (*histogramPanel, Gtk::PACK_SHRINK, 2); + vboxright->pack1 (*histogramPanel, true, false); } else if (oldPosition == 1) { // The histogram was on the left side, so we move it to the right histogramPanel->reference(); removeIfThere (leftbox, histogramPanel, false); - vboxright->pack_start (*histogramPanel, Gtk::PACK_SHRINK, 2); + vboxright->pack1 (*histogramPanel, true, false); histogramPanel->unreference(); } histogramPanel->reorder (Gtk::POS_RIGHT); - vboxright->reorder_child (*histogramPanel, 0); break; } diff --git a/rtgui/editorpanel.h b/rtgui/editorpanel.h index 7876d18e1..054ad0a6b 100644 --- a/rtgui/editorpanel.h +++ b/rtgui/editorpanel.h @@ -173,8 +173,10 @@ private: Gtk::Image *iShowHideSidePanels; Gtk::Image *iShowHideSidePanels_exit; Gtk::Image *iBeforeLockON, *iBeforeLockOFF; - Gtk::VBox *leftbox; - Gtk::VBox *vboxright; + Gtk::Paned *leftbox; + Gtk::Box *leftsubbox; + Gtk::Paned *vboxright; + Gtk::Box *vsubboxright; Gtk::Button* queueimg; Gtk::Button* saveimgas; @@ -191,13 +193,13 @@ private: PreviewHandler* beforePreviewHandler; // for the before-after view Navigator* navigator; ImageAreaPanel* beforeIarea; // for the before-after view - Gtk::VBox* beforeBox; - Gtk::VBox* afterBox; + Gtk::Box* beforeBox; + Gtk::Box* afterBox; Gtk::Label* beforeLabel; Gtk::Label* afterLabel; - Gtk::HBox* beforeAfterBox; - Gtk::HBox* beforeHeaderBox; - Gtk::HBox* afterHeaderBox; + Gtk::Box* beforeAfterBox; + Gtk::Box* beforeHeaderBox; + Gtk::Box* afterHeaderBox; Gtk::ToggleButton* toggleHistogramProfile; Gtk::Frame* ppframe; diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 9856462b2..65384d75a 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -39,9 +39,9 @@ extern Options options; HistogramPanel::HistogramPanel () { - set_vexpand(false); + set_vexpand(true); set_hexpand(true); - set_valign(Gtk::ALIGN_START); + set_valign(Gtk::ALIGN_FILL); set_halign(Gtk::ALIGN_FILL); set_name("HistogramPanel"); @@ -464,10 +464,10 @@ void HistogramRGBArea::get_preferred_height_for_width_vfunc (int width, int &min { int bHeight = width / 30; - if (bHeight > 10) { - bHeight = 10; // it would be useful to scale this based on display dpi - } else if (bHeight < 5 ) { - bHeight = 5; + if (bHeight > 15) { + bHeight = 15; + } else if (bHeight < 10 ) { + bHeight = 10; } minimum_height = bHeight; @@ -721,19 +721,15 @@ HistogramArea::~HistogramArea () } } -/* Note: best case scenario would be to have the histogram size really flexible - by being able to resize the panel vertically, and the side-bar horizontally. - We would only need to enforce some lower limits then. */ - Gtk::SizeRequestMode HistogramArea::get_request_mode_vfunc () const { - return Gtk::SIZE_REQUEST_HEIGHT_FOR_WIDTH; + return Gtk::SIZE_REQUEST_CONSTANT_SIZE; } void HistogramArea::get_preferred_height_vfunc (int &minimum_height, int &natural_height) const { int minimumWidth = 0; - int naturalWidth = 0; // unused? + int naturalWidth = 0; get_preferred_width_vfunc (minimumWidth, naturalWidth); get_preferred_height_for_width_vfunc (minimumWidth, minimum_height, natural_height); } @@ -745,16 +741,8 @@ void HistogramArea::get_preferred_width_vfunc (int &minimum_width, int &natural_ } void HistogramArea::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const -{ - /*int gHeight = width / 2; - - if (gHeight > 150) { - gHeight = 150; - } else if (gHeight < 100) { - gHeight = 100; - }*/ - - int gHeight = width; // aspect ratio 1:1 should fit on most monitors +{ + int gHeight = width * 0.618; if (gHeight < 100) { gHeight = 100; } @@ -763,7 +751,6 @@ void HistogramArea::get_preferred_height_for_width_vfunc (int width, int &minimu natural_height = gHeight; } -//unused? void HistogramArea::get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const { get_preferred_width_vfunc (minimum_width, natural_width); @@ -918,67 +905,53 @@ void HistogramArea::updateBackBuffer () cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); cr->set_line_width (1.0); - cr->set_operator(Cairo::OPERATOR_ADD); + cr->set_operator(Cairo::OPERATOR_SOURCE); int ui = 0, oi = 0; - if (needBlue) { - drawCurve(cr, bhchanged, realhistheight, w, h); - cr->set_source_rgba (0.0, 0.0, 1.0, 0.4); + if (needLuma && !rawMode) { + drawCurve(cr, lhist, realhistheight, w, h); + cr->set_source_rgb (0.65, 0.65, 0.65); cr->fill (); - - drawCurve(cr, bhchanged, realhistheight, w, h); - cr->set_source_rgba (0.0, 0.0, 1.0, 0.9); + + drawMarks(cr, lhist, realhistheight, w, ui, oi); + } + + if (needChroma && !rawMode) { + drawCurve(cr, chist, realhistheight, w, h); + cr->set_source_rgb (0., 0., 0.); cr->stroke (); - drawMarks(cr, bhchanged, realhistheight, w, ui, oi); + drawMarks(cr, chist, realhistheight, w, ui, oi); } - - if (needGreen) { - drawCurve(cr, ghchanged, realhistheight, w, h); - cr->set_source_rgba (0.0, 1.0, 0.0, 0.4); - cr->fill (); - - drawCurve(cr, ghchanged, realhistheight, w, h); - cr->set_source_rgba (0.0, 1.0, 0.0, 0.9); - cr->stroke (); - - drawMarks(cr, ghchanged, realhistheight, w, ui, oi); - } - + if (needRed) { drawCurve(cr, rhchanged, realhistheight, w, h); - cr->set_source_rgba (1.0, 0.0, 0.0, 0.4); - cr->fill (); - - drawCurve(cr, rhchanged, realhistheight, w, h); - cr->set_source_rgba (1.0, 0.0, 0.0, 0.9); + cr->set_source_rgb (1.0, 0.0, 0.0); cr->stroke (); drawMarks(cr, rhchanged, realhistheight, w, ui, oi); } - cr->set_operator(Cairo::OPERATOR_SOURCE); - - if (needLuma && !rawMode) { - drawCurve(cr, lhist, realhistheight, w, h); - cr->set_source_rgb (0.9, 0.9, 0.9); + if (needGreen) { + drawCurve(cr, ghchanged, realhistheight, w, h); + cr->set_source_rgb (0.0, 1.0, 0.0); cr->stroke (); - drawMarks(cr, lhist, realhistheight, w, ui, oi); + drawMarks(cr, ghchanged, realhistheight, w, ui, oi); } - - if (needChroma && !rawMode) { - drawCurve(cr, chist, realhistheight, w, h); - cr->set_source_rgb (0.4, 0.4, 0.4); + + if (needBlue) { + drawCurve(cr, bhchanged, realhistheight, w, h); + cr->set_source_rgb (0.0, 0.0, 1.0); cr->stroke (); - drawMarks(cr, chist, realhistheight, w, ui, oi); + drawMarks(cr, bhchanged, realhistheight, w, ui, oi); } } - cr->set_source_rgba (1., 1., 1., 0.35); + cr->set_source_rgba (1., 1., 1., 0.25); cr->set_line_width (1.0); cr->set_antialias(Cairo::ANTIALIAS_NONE); @@ -988,51 +961,38 @@ void HistogramArea::updateBackBuffer () ch_ds[0] = 4; cr->set_dash (ch_ds, 0); - cr->move_to(w / 4 + 0.5, 1.5); - cr->line_to(w / 4 + 0.5, h - 2); - cr->stroke(); - cr->move_to(2 * w / 4 + 0.5, 1.5); - cr->line_to(2 * w / 4 + 0.5, h - 2); - cr->stroke(); - cr->move_to(3 * w / 4 + 0.5, 1.5); - cr->line_to(3 * w / 4 + 0.5, h - 2); - cr->stroke(); + // determine the number of gridlines based on current h/w + int nrOfHGridPartitions = (int)rtengine::min (16.0, pow (2.0, floor ((h - 100) / 250) + 2)); + int nrOfVGridPartitions = (int)rtengine::min (16.0, pow (2.0, floor ((w - 100) / 250) + 2)); - if (options.histogramDrawMode == 0) - { - cr->move_to(1.5, h / 4 + 0.5); - cr->line_to(w - 2, h / 4 + 0.5); - cr->stroke(); - cr->move_to(1.5, 2 * h / 4 + 0.5); - cr->line_to(w - 2, 2 * h / 4 + 0.5); - cr->stroke(); - cr->move_to(1.5, 3 * h / 4 + 0.5); - cr->line_to(w - 2, 3 * h / 4 + 0.5); - cr->stroke(); + // draw vertical gridlines + if (options.histogramDrawMode < 2) { + for (int i = 1; i < nrOfVGridPartitions; i++) { + cr->move_to (i * w / nrOfVGridPartitions + 0.5, 1.5); + cr->line_to (i * w / nrOfVGridPartitions + 0.5, h - 2); + cr->stroke (); + } + } else { + for (int i = 1; i < nrOfVGridPartitions; i++) { + cr->move_to (scalingFunctionLog (w, i * w / nrOfVGridPartitions) + 0.5, 1.5); + cr->line_to (scalingFunctionLog (w, i * w / nrOfVGridPartitions) + 0.5, h - 2); + cr->stroke (); + } } - if (options.histogramDrawMode == 1) - { - cr->move_to(1.5, h - scalingFunctionLog(h,h / 4 + 0.5)); - cr->line_to(w - 2, h - scalingFunctionLog(h,h / 4 + 0.5)); - cr->stroke(); - cr->move_to(1.5, h - scalingFunctionLog(h,2 * h / 4 + 0.5)); - cr->line_to(w - 2, h - scalingFunctionLog(h,2 * h / 4 + 0.5)); - cr->stroke(); - cr->move_to(1.5, h - scalingFunctionLog(h,3 * h / 4 + 0.5)); - cr->line_to(w - 2, h - scalingFunctionLog(h,3 * h / 4 + 0.5)); - cr->stroke(); - } - if (options.histogramDrawMode == 2) - { - cr->move_to(1.5, scalingFunctionCube(h,h / 4 + 0.5)); - cr->line_to(w - 2, scalingFunctionCube(h,h / 4 + 0.5)); - cr->stroke(); - cr->move_to(1.5, scalingFunctionCube(h,2 * h / 4 + 0.5)); - cr->line_to(w - 2, scalingFunctionCube(h,2 * h / 4 + 0.5)); - cr->stroke(); - cr->move_to(1.5, scalingFunctionCube(h,3 * h / 4 + 0.5)); - cr->line_to(w - 2, scalingFunctionCube(h,3 * h / 4 + 0.5)); - cr->stroke(); + + // draw horizontal gridlines + if (options.histogramDrawMode == 0) { + for (int i = 1; i < nrOfHGridPartitions; i++) { + cr->move_to (1.5, i * h / nrOfHGridPartitions + 0.5); + cr->line_to (w - 2, i * h / nrOfHGridPartitions + 0.5); + cr->stroke (); + } + } else { + for (int i = 1; i < nrOfHGridPartitions; i++) { + cr->move_to (1.5, h - scalingFunctionLog(h, i * h / nrOfHGridPartitions) + 0.5); + cr->line_to (w - 2, h - scalingFunctionLog(h, i * h / nrOfHGridPartitions) + 0.5); + cr->stroke (); + } } cr->unset_dash(); @@ -1056,14 +1016,8 @@ void HistogramArea::on_realize () double HistogramArea::scalingFunctionLog(double vsize, double val) { - double factor = 1.0; // can be tuned if necessary - makes the log 'steeper' - return vsize * log(factor / (factor + val)) / log(factor / vsize); -} - -double HistogramArea::scalingFunctionCube(double vsize, double val) -{ - double factor = 3.0; // can be tuned; higher values compress the middel part of the scale - return (val * (4 * (-1.0 + factor) * val * val - 6.0 * (-1.0 + factor) * val * vsize + (-2.0 + 3.0 * factor) * vsize *vsize))/(factor * vsize * vsize); + double factor = 20.0; // can be tuned if necessary - higher is flatter curve + return vsize * log(factor / (factor + val)) / log(factor / (factor + vsize)); } void HistogramArea::drawCurve(Cairo::RefPtr &cr, @@ -1075,16 +1029,20 @@ void HistogramArea::drawCurve(Cairo::RefPtr &cr, for (int i = 0; i < 256; i++) { double val = data[i] * (double)(vsize - 2) / scale; - if (drawMode == 1) - val = scalingFunctionLog((double)vsize,val); - if (drawMode == 2) - val = scalingFunctionCube((double)vsize,val); - + if (drawMode > 0) { // scale y for single and double log-scale + val = scalingFunctionLog ((double)vsize, val); + } + if (val > vsize - 1) { val = vsize - 1; } + + double iscaled = i; + if (drawMode == 2) { // scale x for double log-scale + iscaled = scalingFunctionLog (256.0, (double)i); + } - double posX = (i / 255.0) * (hsize - 1); + double posX = (iscaled / 255.0) * (hsize - 1); double posY = vsize - 1 - val; cr->line_to (posX, posY); } diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index bc9fca9a4..bb20dadfb 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -100,14 +100,6 @@ private: // Some ... }; - -/*class FullModeListener -{ -public: - virtual ~FullModeListener() {} - virtual void toggle_button_full () {} -};*/ - class DrawModeListener { public: @@ -125,12 +117,12 @@ protected: LUTu lhistRaw, rhistRaw, ghistRaw, bhistRaw; bool valid; - int drawMode; - DrawModeListener *myDrawModeListener; + int drawMode; + DrawModeListener *myDrawModeListener; int oldwidth, oldheight; bool needLuma, needRed, needGreen, needBlue, rawMode, needChroma; - + HistogramAreaIdleHelper* haih; @@ -154,8 +146,7 @@ private: void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const; void get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const; void get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const; - double scalingFunctionLog(double vsize, double val); - double scalingFunctionCube(double vsize, double val); + double scalingFunctionLog (double vsize, double val); }; class HistogramPanel : public Gtk::Grid, public PointerMotionListener, public DrawModeListener From 19c38fd2cde6d828906e6d4bc72350a957ad62dd Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Wed, 20 Jun 2018 06:32:01 +0200 Subject: [PATCH 016/115] Revert small change in size of RGB bar. TooWaBoo's CSS works just fine! --- rtgui/histogrampanel.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 65384d75a..599573e19 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -464,10 +464,10 @@ void HistogramRGBArea::get_preferred_height_for_width_vfunc (int width, int &min { int bHeight = width / 30; - if (bHeight > 15) { - bHeight = 15; - } else if (bHeight < 10 ) { + if (bHeight > 10) { bHeight = 10; + } else if (bHeight < 5) { + bHeight = 5; } minimum_height = bHeight; From 46753c6a2794199f9ef9488c286000cb13ac1601 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Wed, 20 Jun 2018 07:05:19 +0200 Subject: [PATCH 017/115] Tried to go back to default 2:1 ratio, but the Gtk::Paned keeps setting a different default height... --- rtgui/histogrampanel.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 599573e19..ac8835617 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -723,7 +723,7 @@ HistogramArea::~HistogramArea () Gtk::SizeRequestMode HistogramArea::get_request_mode_vfunc () const { - return Gtk::SIZE_REQUEST_CONSTANT_SIZE; + return Gtk::SIZE_REQUEST_HEIGHT_FOR_WIDTH; } void HistogramArea::get_preferred_height_vfunc (int &minimum_height, int &natural_height) const @@ -741,8 +741,9 @@ void HistogramArea::get_preferred_width_vfunc (int &minimum_width, int &natural_ } void HistogramArea::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const -{ - int gHeight = width * 0.618; +{ + int gHeight = width / 2; + if (gHeight < 100) { gHeight = 100; } From 08cad72be0262eed725e0a4eaddd466d847f3f44 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Thu, 28 Jun 2018 19:04:19 +0200 Subject: [PATCH 018/115] Modifications such that the aspect ratio of the histogram is stored between sessions. Additionally, the scaling behavior is changed slightly to make the code easier without being to different from the current situation. --- rtgui/editorpanel.cc | 4 ++++ rtgui/histogrampanel.cc | 42 +++++++++++++++-------------------------- rtgui/options.cc | 10 +++++----- rtgui/options.h | 2 +- 4 files changed, 25 insertions(+), 33 deletions(-) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 396b2a1f1..b59a607f4 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -851,6 +851,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) if (tbTopPanel_1) { tbTopPanel_1->signal_toggled().connect ( sigc::mem_fun (*this, &EditorPanel::tbTopPanel_1_toggled) ); } + } EditorPanel::~EditorPanel () @@ -2341,6 +2342,7 @@ void EditorPanel::updateHistogramPosition (int oldPosition, int newPosition) histogramPanel->unreference(); } + leftbox->set_position(options.historyPanelWidth * options.histogramAspect); // Make sure the panel gets the right aspect ratio histogramPanel->reorder (Gtk::POS_LEFT); break; @@ -2360,11 +2362,13 @@ void EditorPanel::updateHistogramPosition (int oldPosition, int newPosition) histogramPanel->unreference(); } + vboxright->set_position(options.toolPanelWidth * options.histogramAspect); // Make sure the panel gets the right aspect ratio histogramPanel->reorder (Gtk::POS_RIGHT); break; } iareapanel->imageArea->setPointerMotionHListener (histogramPanel); + } diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index ac8835617..407d7fd34 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -48,6 +48,9 @@ HistogramPanel::HistogramPanel () histogramArea = Gtk::manage (new HistogramArea (this)); histogramArea->set_hexpand(true); histogramArea->set_vexpand(true); + histogramArea->set_halign(Gtk::ALIGN_FILL); + histogramArea->set_valign(Gtk::ALIGN_FILL); + histogramRGBArea = Gtk::manage (new HistogramRGBArea ()); histogramRGBArea->set_hexpand(true); histogramRGBArea->set_vexpand(false); @@ -244,19 +247,9 @@ HistogramPanel::~HistogramPanel () void HistogramPanel::resized (Gtk::Allocation& req) { - - /* - rconn.block (true); - - int gHeight = req.get_width()/2; - if (gHeight > 150) gHeight = 150; else if (gHeight < 100) gHeight = 100; - int bHeight = req.get_width()/30; - if (bHeight > 10) bHeight = 10; else if (bHeight < 5 ) bHeight = 5; - histogramArea->set_size_request (req.get_width(), gHeight); - histogramRGBArea->set_size_request (req.get_width(), bHeight); - - rconn.block (false); - */ + + // Store current aspect ratio of the histogram + options.histogramAspect = histogramArea->get_height() / (float)histogramArea->get_width(); histogramArea->updateBackBuffer (); histogramArea->queue_draw (); @@ -723,33 +716,28 @@ HistogramArea::~HistogramArea () Gtk::SizeRequestMode HistogramArea::get_request_mode_vfunc () const { - return Gtk::SIZE_REQUEST_HEIGHT_FOR_WIDTH; + return Gtk::SIZE_REQUEST_CONSTANT_SIZE; } void HistogramArea::get_preferred_height_vfunc (int &minimum_height, int &natural_height) const { - int minimumWidth = 0; - int naturalWidth = 0; - get_preferred_width_vfunc (minimumWidth, naturalWidth); - get_preferred_height_for_width_vfunc (minimumWidth, minimum_height, natural_height); + + minimum_height = 100; + natural_height = 200; } void HistogramArea::get_preferred_width_vfunc (int &minimum_width, int &natural_width) const { - minimum_width = 60; - natural_width = 200; + + minimum_width = 200; + natural_width = 400; } void HistogramArea::get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const { - int gHeight = width / 2; - if (gHeight < 100) { - gHeight = 100; - } - - minimum_height = gHeight * 0.7; - natural_height = gHeight; + minimum_height = 0; + natural_height = 0; } void HistogramArea::get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const diff --git a/rtgui/options.cc b/rtgui/options.cc index 501756d3f..788bdb440 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -415,7 +415,7 @@ void Options::setDefaults () multiDisplayMode = 0; histogramPosition = 1; histogramBar = true; - //histogramFullMode = false; + histogramAspect = 0.618; histogramDrawMode = 0; curvebboxpos = 1; prevdemo = PD_Sidecar; @@ -1291,9 +1291,9 @@ void Options::readFromFile (Glib::ustring fname) histogramBar = keyFile.get_boolean ("GUI", "HistogramBar"); } - //if (keyFile.has_key ("GUI", "HistogramFullMode")) { - // histogramFullMode = keyFile.get_boolean ("GUI", "HistogramFullMode"); - //} + if (keyFile.has_key ("GUI", "HistogramAspect")) { + histogramAspect = keyFile.get_double ("GUI", "HistogramAspect"); + } if (keyFile.has_key ("GUI", "HistogramDrawMode")) { histogramDrawMode = keyFile.get_integer ("GUI", "HistogramDrawMode"); @@ -1943,7 +1943,7 @@ void Options::saveToFile (Glib::ustring fname) keyFile.set_double_list ("GUI", "NavGuideBrush", navGuideBrush); keyFile.set_integer ("GUI", "HistogramPosition", histogramPosition); keyFile.set_boolean ("GUI", "HistogramBar", histogramBar); - //keyFile.set_boolean ("GUI", "HistogramFullMode", histogramFullMode); + keyFile.set_double ("GUI", "HistogramAspect", histogramAspect); keyFile.set_integer ("GUI", "HistogramDrawMode", histogramDrawMode); keyFile.set_integer ("GUI", "NavigatorRGBUnit", (int)navRGBUnit); keyFile.set_integer ("GUI", "NavigatorHSVUnit", (int)navHSVUnit); diff --git a/rtgui/options.h b/rtgui/options.h index 33835b664..08e7288bb 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -256,7 +256,7 @@ public: int histogramPosition; // 0=disabled, 1=left pane, 2=right pane //int histogramWorking; // 0=disabled, 1=left pane, 2=right pane bool histogramBar; - //bool histogramFullMode; + float histogramAspect; int histogramDrawMode; bool FileBrowserToolbarSingleRow; bool hideTPVScrollbar; From 32e2aa2e6cb48b4e904bf8bd1997ffbc9298aaf1 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Thu, 28 Jun 2018 19:07:20 +0200 Subject: [PATCH 019/115] Minor code styling --- rtgui/options.cc | 6 +++--- rtgui/options.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index 788bdb440..d78fd272a 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -416,7 +416,7 @@ void Options::setDefaults () histogramPosition = 1; histogramBar = true; histogramAspect = 0.618; - histogramDrawMode = 0; + histogramDrawMode = 0; curvebboxpos = 1; prevdemo = PD_Sidecar; rgbDenoiseThreadLimit = 0; @@ -1294,8 +1294,8 @@ void Options::readFromFile (Glib::ustring fname) if (keyFile.has_key ("GUI", "HistogramAspect")) { histogramAspect = keyFile.get_double ("GUI", "HistogramAspect"); } - - if (keyFile.has_key ("GUI", "HistogramDrawMode")) { + + if (keyFile.has_key ("GUI", "HistogramDrawMode")) { histogramDrawMode = keyFile.get_integer ("GUI", "HistogramDrawMode"); } diff --git a/rtgui/options.h b/rtgui/options.h index 08e7288bb..976ea545b 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -257,7 +257,7 @@ public: //int histogramWorking; // 0=disabled, 1=left pane, 2=right pane bool histogramBar; float histogramAspect; - int histogramDrawMode; + int histogramDrawMode; bool FileBrowserToolbarSingleRow; bool hideTPVScrollbar; bool UseIconNoText; From da5fd6fac850fa964a881139b98aa5c7f805274c Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 29 Jun 2018 21:56:06 +0200 Subject: [PATCH 020/115] Removed histogramAspect in favor of histogramHeight, which sets the panelheight properly and consistently on restarting. --- rtgui/editorpanel.cc | 4 ++-- rtgui/histogrampanel.cc | 7 ++++--- rtgui/options.cc | 10 +++++----- rtgui/options.h | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index b59a607f4..a9c5e523e 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -2342,7 +2342,7 @@ void EditorPanel::updateHistogramPosition (int oldPosition, int newPosition) histogramPanel->unreference(); } - leftbox->set_position(options.historyPanelWidth * options.histogramAspect); // Make sure the panel gets the right aspect ratio + leftbox->set_position(options.histogramHeight); histogramPanel->reorder (Gtk::POS_LEFT); break; @@ -2362,7 +2362,7 @@ void EditorPanel::updateHistogramPosition (int oldPosition, int newPosition) histogramPanel->unreference(); } - vboxright->set_position(options.toolPanelWidth * options.histogramAspect); // Make sure the panel gets the right aspect ratio + vboxright->set_position(options.histogramHeight); histogramPanel->reorder (Gtk::POS_RIGHT); break; } diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 407d7fd34..3d1095f8d 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -247,9 +247,6 @@ HistogramPanel::~HistogramPanel () void HistogramPanel::resized (Gtk::Allocation& req) { - - // Store current aspect ratio of the histogram - options.histogramAspect = histogramArea->get_height() / (float)histogramArea->get_width(); histogramArea->updateBackBuffer (); histogramArea->queue_draw (); @@ -266,6 +263,10 @@ void HistogramPanel::resized (Gtk::Allocation& req) histogramRGBArea->updateBackBuffer(-1, -1, -1); histogramRGBArea->queue_draw (); } + + // Store current height of the histogram + options.histogramHeight = get_height(); + } void HistogramPanel::red_toggled () diff --git a/rtgui/options.cc b/rtgui/options.cc index d78fd272a..7350ba056 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -415,7 +415,7 @@ void Options::setDefaults () multiDisplayMode = 0; histogramPosition = 1; histogramBar = true; - histogramAspect = 0.618; + histogramHeight = 200; histogramDrawMode = 0; curvebboxpos = 1; prevdemo = PD_Sidecar; @@ -1290,9 +1290,9 @@ void Options::readFromFile (Glib::ustring fname) if (keyFile.has_key ("GUI", "HistogramBar")) { histogramBar = keyFile.get_boolean ("GUI", "HistogramBar"); } - - if (keyFile.has_key ("GUI", "HistogramAspect")) { - histogramAspect = keyFile.get_double ("GUI", "HistogramAspect"); + + if (keyFile.has_key ("GUI", "HistogramHeight")) { + histogramHeight = keyFile.get_integer ("GUI", "HistogramHeight"); } if (keyFile.has_key ("GUI", "HistogramDrawMode")) { @@ -1943,7 +1943,7 @@ void Options::saveToFile (Glib::ustring fname) keyFile.set_double_list ("GUI", "NavGuideBrush", navGuideBrush); keyFile.set_integer ("GUI", "HistogramPosition", histogramPosition); keyFile.set_boolean ("GUI", "HistogramBar", histogramBar); - keyFile.set_double ("GUI", "HistogramAspect", histogramAspect); + keyFile.set_integer ("GUI", "HistogramHeight", histogramHeight); keyFile.set_integer ("GUI", "HistogramDrawMode", histogramDrawMode); keyFile.set_integer ("GUI", "NavigatorRGBUnit", (int)navRGBUnit); keyFile.set_integer ("GUI", "NavigatorHSVUnit", (int)navHSVUnit); diff --git a/rtgui/options.h b/rtgui/options.h index 976ea545b..c8d287e08 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -256,7 +256,7 @@ public: int histogramPosition; // 0=disabled, 1=left pane, 2=right pane //int histogramWorking; // 0=disabled, 1=left pane, 2=right pane bool histogramBar; - float histogramAspect; + int histogramHeight; int histogramDrawMode; bool FileBrowserToolbarSingleRow; bool hideTPVScrollbar; From 293d0d7e2b2aa7bd8c61997e325ddeb6f4bf5c4e Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Sat, 30 Jun 2018 18:31:50 +0200 Subject: [PATCH 021/115] Final fix? Included shorthand suggested by Hombre --- rtgui/editorpanel.cc | 12 ++++----- rtgui/histogrampanel.cc | 56 ++++++++--------------------------------- 2 files changed, 17 insertions(+), 51 deletions(-) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index a9c5e523e..a9cd7a994 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -2333,15 +2333,15 @@ void EditorPanel::updateHistogramPosition (int oldPosition, int newPosition) if (oldPosition == 0) { // There was no Histogram before, so we create it histogramPanel = Gtk::manage (new HistogramPanel ()); - leftbox->pack1(*histogramPanel, true, false); + leftbox->pack1(*histogramPanel, false, false); } else if (oldPosition == 2) { // The histogram was on the right side, so we move it to the left histogramPanel->reference(); removeIfThere (vboxright, histogramPanel, false); - leftbox->pack1(*histogramPanel, true, false); + leftbox->pack1(*histogramPanel, false, false); histogramPanel->unreference(); } - + leftbox->set_position(options.histogramHeight); histogramPanel->reorder (Gtk::POS_LEFT); break; @@ -2353,15 +2353,15 @@ void EditorPanel::updateHistogramPosition (int oldPosition, int newPosition) if (oldPosition == 0) { // There was no Histogram before, so we create it histogramPanel = Gtk::manage (new HistogramPanel ()); - vboxright->pack1 (*histogramPanel, true, false); + vboxright->pack1 (*histogramPanel, false, false); } else if (oldPosition == 1) { // The histogram was on the left side, so we move it to the right histogramPanel->reference(); removeIfThere (leftbox, histogramPanel, false); - vboxright->pack1 (*histogramPanel, true, false); + vboxright->pack1 (*histogramPanel, false, false); histogramPanel->unreference(); } - + vboxright->set_position(options.histogramHeight); histogramPanel->reorder (Gtk::POS_RIGHT); break; diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 3d1095f8d..20c3b91d9 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -38,24 +38,14 @@ extern Options options; // HistogramPanel HistogramPanel::HistogramPanel () { - - set_vexpand(true); - set_hexpand(true); - set_valign(Gtk::ALIGN_FILL); - set_halign(Gtk::ALIGN_FILL); + setExpandAlignProperties(this, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); set_name("HistogramPanel"); histogramArea = Gtk::manage (new HistogramArea (this)); - histogramArea->set_hexpand(true); - histogramArea->set_vexpand(true); - histogramArea->set_halign(Gtk::ALIGN_FILL); - histogramArea->set_valign(Gtk::ALIGN_FILL); + setExpandAlignProperties(histogramArea, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); histogramRGBArea = Gtk::manage (new HistogramRGBArea ()); - histogramRGBArea->set_hexpand(true); - histogramRGBArea->set_vexpand(false); - histogramRGBArea->set_halign(Gtk::ALIGN_FILL); - histogramRGBArea->set_valign(Gtk::ALIGN_END); + setExpandAlignProperties(histogramArea, false, true, Gtk::ALIGN_END, Gtk::ALIGN_FILL); histogramRGBArea->show(); gfxGrid = Gtk::manage (new Gtk::Grid ()); @@ -157,38 +147,14 @@ HistogramPanel::HistogramPanel () showMode->set_image(*modeImage_g2); showBAR->set_image (showBAR->get_active() ? *barImage : *barImage_g); - showRed->set_hexpand(false); - showRed->set_vexpand(false); - showRed->set_halign(Gtk::ALIGN_CENTER); - showRed->set_valign(Gtk::ALIGN_START); - showGreen->set_hexpand(false); - showGreen->set_vexpand(false); - showGreen->set_halign(Gtk::ALIGN_CENTER); - showGreen->set_valign(Gtk::ALIGN_START); - showBlue->set_hexpand(false); - showRed->set_vexpand(false); - showBlue->set_halign(Gtk::ALIGN_CENTER); - showBlue->set_valign(Gtk::ALIGN_START); - showValue->set_hexpand(false); - showValue->set_vexpand(false); - showValue->set_halign(Gtk::ALIGN_CENTER); - showValue->set_valign(Gtk::ALIGN_START); - showChro->set_hexpand(false); - showChro->set_vexpand(false); - showChro->set_halign(Gtk::ALIGN_CENTER); - showChro->set_valign(Gtk::ALIGN_START); - showRAW->set_hexpand(false); - showRAW->set_vexpand(false); - showRAW->set_halign(Gtk::ALIGN_CENTER); - showRAW->set_valign(Gtk::ALIGN_START); - showMode->set_hexpand(false); - showMode->set_vexpand(false); - showMode->set_halign(Gtk::ALIGN_CENTER); - showMode->set_valign(Gtk::ALIGN_START); - showBAR->set_hexpand(false); - showBAR->set_vexpand(false); - showBAR->set_halign(Gtk::ALIGN_CENTER); - showBAR->set_valign(Gtk::ALIGN_START); + setExpandAlignProperties(showRed , false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showGreen, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showBlue , false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showValue, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showChro , false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showRAW , false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showMode , false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + setExpandAlignProperties(showBAR , false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); showRed->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::red_toggled), showRed ); showGreen->signal_toggled().connect( sigc::mem_fun(*this, &HistogramPanel::green_toggled), showGreen ); From b3dcb915b169b07adfa715a4d2e1466d37e90d1f Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Sat, 30 Jun 2018 19:52:37 +0200 Subject: [PATCH 022/115] Corrects typo that fixes halign behavior. Chroma color test: yellow --- rtgui/cropwindow.cc | 2 +- rtgui/histogrampanel.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 08ea9d0f7..3b11f8021 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -43,7 +43,7 @@ CropWindow::CropWindow (ImageArea* parent, bool isLowUpdatePriority_, bool isDet pmlistener(nullptr), pmhlistener(nullptr), observedCropWin(nullptr), crop_custom_ratio(0.f) { - initZoomSteps(); + initZoomSteps(); Glib::RefPtr context = parent->get_pango_context () ; Pango::FontDescription fontd = context->get_font_description (); diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 20c3b91d9..d742f1386 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -45,7 +45,7 @@ HistogramPanel::HistogramPanel () setExpandAlignProperties(histogramArea, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); histogramRGBArea = Gtk::manage (new HistogramRGBArea ()); - setExpandAlignProperties(histogramArea, false, true, Gtk::ALIGN_END, Gtk::ALIGN_FILL); + setExpandAlignProperties(histogramRGBArea, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_END); histogramRGBArea->show(); gfxGrid = Gtk::manage (new Gtk::Grid ()); @@ -875,7 +875,7 @@ void HistogramArea::updateBackBuffer () if (needChroma && !rawMode) { drawCurve(cr, chist, realhistheight, w, h); - cr->set_source_rgb (0., 0., 0.); + cr->set_source_rgb (0.9, 0.9, 0.); cr->stroke (); drawMarks(cr, chist, realhistheight, w, ui, oi); From 3a799af85f570e9ee5ec27f98786e1ea9cc7962a Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Sat, 30 Jun 2018 19:53:50 +0200 Subject: [PATCH 023/115] Removed spurious space --- rtgui/cropwindow.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 3b11f8021..08ea9d0f7 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -43,7 +43,7 @@ CropWindow::CropWindow (ImageArea* parent, bool isLowUpdatePriority_, bool isDet pmlistener(nullptr), pmhlistener(nullptr), observedCropWin(nullptr), crop_custom_ratio(0.f) { - initZoomSteps(); + initZoomSteps(); Glib::RefPtr context = parent->get_pango_context () ; Pango::FontDescription fontd = context->get_font_description (); From bb2631d3fb5e963d80bb358cac116742e6e700b9 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Sat, 30 Jun 2018 20:21:10 +0200 Subject: [PATCH 024/115] Also turn the chroma indicator in the bar yellow --- rtgui/histogrampanel.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index d742f1386..e532d17b0 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -525,7 +525,7 @@ void HistogramRGBArea::updateBackBuffer (int r, int g, int b, const Glib::ustrin // Chroma float chromaval = sqrt(Lab_a * Lab_a + Lab_b * Lab_b) / 1.8; // float chromaval = sqrt(Lab_a*Lab_a + Lab_b*Lab_b); - cc->set_source_rgb(0.0, 0.0, 0.0); + cc->set_source_rgb(0.9, 0.9, 0.0); cc->move_to((int)(chromaval * (winw / 100.0)), 0); cc->line_to((int)(chromaval * (winw / 100.0)), winh - 0); cc->stroke(); From 860fb73cd4ded6ea450b7fcd936ef97f73c9279a Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Mon, 2 Jul 2018 19:01:34 +0200 Subject: [PATCH 025/115] Histogram scaling toolip updated --- rtdata/languages/default | 2 +- rtgui/histogrampanel.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index c007b0ac8..52364caa8 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -240,7 +240,7 @@ GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done edit HISTOGRAM_TOOLTIP_B;Show/Hide blue histogram. HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. HISTOGRAM_TOOLTIP_G;Show/Hide green histogram. HISTOGRAM_TOOLTIP_L;Show/Hide CIELab luminance histogram. HISTOGRAM_TOOLTIP_R;Show/Hide red histogram. diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index e532d17b0..0a7c034a4 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -119,7 +119,7 @@ HistogramPanel::HistogramPanel () showValue->set_tooltip_text (M("HISTOGRAM_TOOLTIP_L")); showChro->set_tooltip_text (M("HISTOGRAM_TOOLTIP_CHRO")); showRAW->set_tooltip_text (M("HISTOGRAM_TOOLTIP_RAW")); - showMode->set_tooltip_text (M("HISTOGRAM_TOOLTIP_FULL")); // needs replacement! + showMode->set_tooltip_text (M("HISTOGRAM_TOOLTIP_MODE")); showBAR->set_tooltip_text (M("HISTOGRAM_TOOLTIP_BAR")); buttonGrid = Gtk::manage (new Gtk::Grid ()); From f5d9f9529a985f6a2a7298f291869f899d04c646 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Mon, 2 Jul 2018 19:48:24 +0200 Subject: [PATCH 026/115] Removed freeze-mode for the histogram bar --- rtdata/languages/default | 2 +- rtgui/cropwindow.cc | 4 --- rtgui/histogrampanel.cc | 46 +++++------------------------------ rtgui/histogrampanel.h | 5 ---- rtgui/pointermotionlistener.h | 1 - 5 files changed, 7 insertions(+), 51 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 52364caa8..de1e657e3 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -238,7 +238,7 @@ GENERAL_UNCHANGED;(Unchanged) GENERAL_WARNING;Warning GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. HISTOGRAM_TOOLTIP_B;Show/Hide blue histogram. -HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. HISTOGRAM_TOOLTIP_G;Show/Hide green histogram. diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 08ea9d0f7..bf01a9c7b 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -754,10 +754,6 @@ void CropWindow::buttonRelease (int button, int num, int bstate, int x, int y) } iarea->setToolHand (); - - if (pmhlistener) { - pmhlistener->toggleFreeze(); - } } state = SNormal; diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 0a7c034a4..db0970e63 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -217,18 +217,9 @@ void HistogramPanel::resized (Gtk::Allocation& req) histogramArea->updateBackBuffer (); histogramArea->queue_draw (); - if (histogramRGBArea->getFreeze()) { - histogramRGBArea->updateFreeze(false); - // set histogramRGBArea invalid; - histogramRGBArea->updateBackBuffer(-1, -1, -1); - // re-set freeze to old state - histogramRGBArea->updateFreeze(true); - histogramRGBArea->queue_draw (); - } else { - // set histogramRGBArea invalid; - histogramRGBArea->updateBackBuffer(-1, -1, -1); - histogramRGBArea->queue_draw (); - } + // set histogramRGBArea invalid; + histogramRGBArea->updateBackBuffer(-1, -1, -1); + histogramRGBArea->queue_draw (); // Store current height of the histogram options.histogramHeight = get_height(); @@ -316,18 +307,6 @@ void HistogramPanel::setHistRGBInvalid () histogramRGBArea->queue_draw (); } -// "Freeze" is not a button, but a RMB-click, so this is not in the RGBV-Toggle method -void HistogramPanel::toggleFreeze () -{ - if (histogramRGBArea->getFreeze()) { - histogramRGBArea->updateFreeze(false); - } else if (histogramRGBArea->getShow()) { - histogramRGBArea->updateFreeze(true); - } - - return; -} - void HistogramPanel::pointerMoved (bool validPos, Glib::ustring profile, Glib::ustring profileW, int x, int y, int r, int g, int b) { @@ -377,7 +356,7 @@ void HistogramPanel::toggle_button_mode () // // HistogramRGBArea HistogramRGBArea::HistogramRGBArea () ://needChroma unactive by default, luma too - val(0), r(0), g(0), b(0), frozen(false), valid(false), needRed(true), needGreen(true), needBlue(true), needLuma(false), rawMode(false), showMode(options.histogramBar), barDisplayed(options.histogramBar), needChroma(false), parent(nullptr) + val(0), r(0), g(0), b(0), valid(false), needRed(true), needGreen(true), needBlue(true), needLuma(false), rawMode(false), showMode(options.histogramBar), barDisplayed(options.histogramBar), needChroma(false), parent(nullptr) { get_style_context()->add_class("drawingarea"); @@ -440,25 +419,14 @@ void HistogramRGBArea::get_preferred_width_for_height_vfunc (int height, int &mi get_preferred_width_vfunc (minimum_width, natural_width); } -bool HistogramRGBArea::getFreeze() -{ - return(frozen); -} - bool HistogramRGBArea::getShow() { return(showMode); } -void HistogramRGBArea::updateFreeze (bool f) -{ - frozen = f; - return; -} - void HistogramRGBArea::updateBackBuffer (int r, int g, int b, const Glib::ustring &profile, const Glib::ustring &profileW) { - if (!get_realized () || frozen || !showMode) { + if (!get_realized () || !showMode) { return; } @@ -599,8 +567,6 @@ void HistogramRGBArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, removeIfThere(parent, this, false); options.histogramBar = false; barDisplayed = false; - // unfreeze - updateFreeze(false); } // Disable (but don't hide it) the bar button when RAW histogram is displayed @@ -641,7 +607,7 @@ bool HistogramRGBArea::on_button_press_event (GdkEventButton* event) { if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { - // do something. Maybe un-freeze ? + // do something? } return true; diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index bb20dadfb..d11b87153 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -56,7 +56,6 @@ protected: int g; int b; - bool frozen; bool valid; bool needRed; @@ -77,8 +76,6 @@ public: ~HistogramRGBArea(); void updateBackBuffer (int r, int g, int b, const Glib::ustring &profile = "", const Glib::ustring &profileW = ""); - void updateFreeze (bool f); - bool getFreeze (); bool getShow (); void setParent (Gtk::Grid* p) { @@ -201,8 +198,6 @@ public: } // pointermotionlistener interface void pointerMoved (bool validPos, Glib::ustring profile, Glib::ustring profileW, int x, int y, int r, int g, int b); - // added pointermotionlistener interface - void toggleFreeze(); // TODO should be protected void setHistRGBInvalid (); diff --git a/rtgui/pointermotionlistener.h b/rtgui/pointermotionlistener.h index 09a9b3b4f..5600a0838 100644 --- a/rtgui/pointermotionlistener.h +++ b/rtgui/pointermotionlistener.h @@ -28,7 +28,6 @@ protected: public: virtual ~PointerMotionListener() {} virtual void pointerMoved (bool validPos, Glib::ustring profile, Glib::ustring profileW, int x, int y, int r, int g, int b) {} - virtual void toggleFreeze () {} virtual void getRGBText (int r, int g, int b, Glib::ustring &sR, Glib::ustring &sG, Glib::ustring &sB) { sR = "--"; sG = "--"; sB = "--"; } virtual void getHSVText (float h, float s, float v, Glib::ustring &sH, Glib::ustring &sS, Glib::ustring &sV) { sH = "--"; sS = "--"; sV = "--"; } virtual void getLABText (float l, float a, float b, Glib::ustring &sL, Glib::ustring &sA, Glib::ustring &sB) { sL = "--"; sA = "--"; sB = "--"; } From 7960e07bfe0b4df9deaecb6d476f7f48cd9f90b5 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Thu, 5 Jul 2018 08:24:09 +0200 Subject: [PATCH 027/115] Histogram always shows gridlines for 8 stops in log-log mode --- rtgui/histogrampanel.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index db0970e63..7e3b63a20 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -887,6 +887,10 @@ void HistogramArea::updateBackBuffer () int nrOfHGridPartitions = (int)rtengine::min (16.0, pow (2.0, floor ((h - 100) / 250) + 2)); int nrOfVGridPartitions = (int)rtengine::min (16.0, pow (2.0, floor ((w - 100) / 250) + 2)); + if (rawMode || options.histogramDrawMode == 2) { + nrOfVGridPartitions = 8; // always show 8 stops for the raw histogam and in log-log mode + } + // draw vertical gridlines if (options.histogramDrawMode < 2) { for (int i = 1; i < nrOfVGridPartitions; i++) { @@ -895,9 +899,9 @@ void HistogramArea::updateBackBuffer () cr->stroke (); } } else { - for (int i = 1; i < nrOfVGridPartitions; i++) { - cr->move_to (scalingFunctionLog (w, i * w / nrOfVGridPartitions) + 0.5, 1.5); - cr->line_to (scalingFunctionLog (w, i * w / nrOfVGridPartitions) + 0.5, h - 2); + for (int i = 0; i < nrOfVGridPartitions; i++) { + cr->move_to (scalingFunctionLog (256, pow(2.0,i)) * w / 256 + 0.5, 1.5); + cr->line_to (scalingFunctionLog (256, pow(2.0,i)) * w / 256 + 0.5, h - 2); cr->stroke (); } } @@ -938,7 +942,7 @@ void HistogramArea::on_realize () double HistogramArea::scalingFunctionLog(double vsize, double val) { - double factor = 20.0; // can be tuned if necessary - higher is flatter curve + double factor = 10.0; // can be tuned if necessary - higher is flatter curve return vsize * log(factor / (factor + val)) / log(factor / (factor + vsize)); } From 4dd85ea8754b6b8ef0ac86ef0fcbf5d66da0d131 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Thu, 5 Jul 2018 08:29:37 +0200 Subject: [PATCH 028/115] Now it works: histogram always shows gridlines for 8 stops in log-log mode --- rtgui/histogrampanel.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 7e3b63a20..44fd40686 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -887,8 +887,8 @@ void HistogramArea::updateBackBuffer () int nrOfHGridPartitions = (int)rtengine::min (16.0, pow (2.0, floor ((h - 100) / 250) + 2)); int nrOfVGridPartitions = (int)rtengine::min (16.0, pow (2.0, floor ((w - 100) / 250) + 2)); - if (rawMode || options.histogramDrawMode == 2) { - nrOfVGridPartitions = 8; // always show 8 stops for the raw histogam and in log-log mode + if (options.histogramDrawMode == 2) { + nrOfVGridPartitions = 8; // always show 8 stops in log-log mode } // draw vertical gridlines From cf610f5f5b5b7e39aceca866857ee2d6f9d4c36d Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 6 Jul 2018 07:16:34 +0200 Subject: [PATCH 029/115] Updated calculation of RAW histogram binning The RAW histogram did not always fill up to the 255th value. This fixes that by including the blackpoint in the calculation --- rtengine/rawimagesource.cc | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 77cb6a522..29039b712 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -4740,10 +4740,10 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU histRedRaw.clear(); histGreenRaw.clear(); histBlueRaw.clear(); - const float mult[4] = { 65535.0f / ri->get_white(0), - 65535.0f / ri->get_white(1), - 65535.0f / ri->get_white(2), - 65535.0f / ri->get_white(3) + const float mult[4] = { 255.0f / Color::gamma(ri->get_white(0) - cblacksom[0]), + 255.0f / Color::gamma(ri->get_white(1) - cblacksom[1]), + 255.0f / Color::gamma(ri->get_white(2) - cblacksom[2]), + 255.0f / Color::gamma(ri->get_white(3) - cblacksom[3]) }; const bool fourColours = ri->getSensorType() == ST_BAYER && ((mult[1] != mult[3] || cblacksom[1] != cblacksom[3]) || FC(0, 0) == 3 || FC(0, 1) == 3 || FC(1, 0) == 3 || FC(1, 1) == 3); @@ -4849,23 +4849,22 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU } // end of critical region } // end of parallel region - constexpr float gammaLimit = 32767.f * 65536.f; // Color::gamma overflows when the LUT is accessed with too large values for(int i = 0; i < 65536; i++) { int idx; - idx = CLIP((int)Color::gamma(std::min(mult[0] * (i - (cblacksom[0]/*+black_lev[0]*/)), gammaLimit))); - histRedRaw[idx >> 8] += hist[0][i]; + idx = (int)std::min(255.0f, mult[0] * Color::gamma(std::max(0.0f, i - cblacksom[0]))); + histRedRaw[idx] += hist[0][i]; if (ri->get_colors() > 1) { - idx = CLIP((int)Color::gamma(std::min(mult[1] * (i - (cblacksom[1]/*+black_lev[1]*/)), gammaLimit))); - histGreenRaw[idx >> 8] += hist[1][i]; + idx = (int)std::min(255.0f, mult[1] * Color::gamma(std::max(0.0f, i - cblacksom[1]))); + histGreenRaw[idx] += hist[1][i]; if (fourColours) { - idx = CLIP((int)Color::gamma(std::min(mult[3] * (i - (cblacksom[3]/*+black_lev[3]*/)), gammaLimit))); - histGreenRaw[idx >> 8] += hist[3][i]; + idx = (int)std::min(255.0f, mult[3] * Color::gamma(std::max(0.0f, i - cblacksom[3]))); + histGreenRaw[idx] += hist[3][i]; } - idx = CLIP((int)Color::gamma(std::min(mult[2] * (i - (cblacksom[2]/*+black_lev[2]*/)), gammaLimit))); - histBlueRaw[idx >> 8] += hist[2][i]; + idx = (int)std::min(255.0f, mult[2] * Color::gamma(std::max(0.0f, i - cblacksom[2]))); + histBlueRaw[idx] += hist[2][i]; } } From 5419b9dd20b3688751bc899a3879aeca7d33cbc0 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 6 Jul 2018 07:18:42 +0200 Subject: [PATCH 030/115] Minor update to drawing of histogram After some pixel peeping I made sure the histogram lines stay within the drawing area completely --- rtgui/histogrampanel.cc | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 44fd40686..c2a584368 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -28,6 +28,7 @@ #include "../rtengine/color.h" #include "../rtengine/opthelper.h" #include "../rtengine/iccstore.h" + using namespace rtengine; extern Options options; @@ -953,23 +954,20 @@ void HistogramArea::drawCurve(Cairo::RefPtr &cr, scale = scale <= 0.f ? 0.001f : scale; // avoid division by zero and negative values for (int i = 0; i < 256; i++) { - double val = data[i] * (double)(vsize - 2) / scale; - + double val = data[i] * (double)vsize / scale; + if (drawMode > 0) { // scale y for single and double log-scale val = scalingFunctionLog ((double)vsize, val); } - - if (val > vsize - 1) { - val = vsize - 1; - } - + double iscaled = i; if (drawMode == 2) { // scale x for double log-scale - iscaled = scalingFunctionLog (256.0, (double)i); + iscaled = scalingFunctionLog (255.0, (double)i); } double posX = (iscaled / 255.0) * (hsize - 1); - double posY = vsize - 1 - val; + double posY = vsize - 2 + val * (4 - vsize) / vsize; + cr->line_to (posX, posY); } From cebded3a2dfe80e06f8c3aeb68a3b951ddaa2c6f Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 6 Jul 2018 18:00:32 +0200 Subject: [PATCH 031/115] RAW histogram now correctly shows 8 stops --- rtgui/histogrampanel.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index c2a584368..e6777a6ea 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -889,7 +889,7 @@ void HistogramArea::updateBackBuffer () int nrOfVGridPartitions = (int)rtengine::min (16.0, pow (2.0, floor ((w - 100) / 250) + 2)); if (options.histogramDrawMode == 2) { - nrOfVGridPartitions = 8; // always show 8 stops in log-log mode + nrOfVGridPartitions = 9; // always show 9 stops in log-log mode (lines at 1,2,4,8,16,32,64,128) } // draw vertical gridlines From 531868b01a62883759bc3b1c9b9afe82cd66748e Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Sat, 7 Jul 2018 07:51:41 +0200 Subject: [PATCH 032/115] New vertical gridline divisions based on @heckflosse's insight. And a minor correction from 265 to 255 --- rtgui/histogrampanel.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index e6777a6ea..3cce98070 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -889,7 +889,7 @@ void HistogramArea::updateBackBuffer () int nrOfVGridPartitions = (int)rtengine::min (16.0, pow (2.0, floor ((w - 100) / 250) + 2)); if (options.histogramDrawMode == 2) { - nrOfVGridPartitions = 9; // always show 9 stops in log-log mode (lines at 1,2,4,8,16,32,64,128) + nrOfVGridPartitions = 8; // always show 8 stops in log-log mode (lines at 1,3,7,15,31,63,127) } // draw vertical gridlines @@ -900,9 +900,9 @@ void HistogramArea::updateBackBuffer () cr->stroke (); } } else { - for (int i = 0; i < nrOfVGridPartitions; i++) { - cr->move_to (scalingFunctionLog (256, pow(2.0,i)) * w / 256 + 0.5, 1.5); - cr->line_to (scalingFunctionLog (256, pow(2.0,i)) * w / 256 + 0.5, h - 2); + for (int i = 1; i < nrOfVGridPartitions; i++) { + cr->move_to (scalingFunctionLog (255, pow(2.0,i) - 1) * w / 255 + 0.5, 1.5); + cr->line_to (scalingFunctionLog (255, pow(2.0,i) - 1) * w / 255 + 0.5, h - 2); cr->stroke (); } } From 5cdbf9a49a599b15c2993128c00d1f7d41abb7d7 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Wed, 11 Jul 2018 08:13:11 +0200 Subject: [PATCH 033/115] Change histogram v-gridlines to stops in all cases --- rtgui/histogrampanel.cc | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 3cce98070..bf9c9de3d 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -883,30 +883,26 @@ void HistogramArea::updateBackBuffer () std::valarray ch_ds (1); ch_ds[0] = 4; cr->set_dash (ch_ds, 0); - - // determine the number of gridlines based on current h/w + + // determine the number of h-gridlines based on current h int nrOfHGridPartitions = (int)rtengine::min (16.0, pow (2.0, floor ((h - 100) / 250) + 2)); - int nrOfVGridPartitions = (int)rtengine::min (16.0, pow (2.0, floor ((w - 100) / 250) + 2)); - - if (options.histogramDrawMode == 2) { - nrOfVGridPartitions = 8; // always show 8 stops in log-log mode (lines at 1,3,7,15,31,63,127) - } - + int nrOfVGridPartitions = 8; // always show 8 stops (lines at 1,3,7,15,31,63,127) + // draw vertical gridlines if (options.histogramDrawMode < 2) { for (int i = 1; i < nrOfVGridPartitions; i++) { - cr->move_to (i * w / nrOfVGridPartitions + 0.5, 1.5); - cr->line_to (i * w / nrOfVGridPartitions + 0.5, h - 2); + cr->move_to ((pow(2.0,i) - 1) / 255 * w + 0.5, 1.5); + cr->line_to ((pow(2.0,i) - 1) / 255 * w + 0.5, h - 2); cr->stroke (); } } else { for (int i = 1; i < nrOfVGridPartitions; i++) { - cr->move_to (scalingFunctionLog (255, pow(2.0,i) - 1) * w / 255 + 0.5, 1.5); - cr->line_to (scalingFunctionLog (255, pow(2.0,i) - 1) * w / 255 + 0.5, h - 2); + cr->move_to (scalingFunctionLog (255, pow(2.0,i) - 1) / 255 * w + 0.5, 1.5); + cr->line_to (scalingFunctionLog (255, pow(2.0,i) - 1) / 255 * w + 0.5, h - 2); cr->stroke (); } } - + // draw horizontal gridlines if (options.histogramDrawMode == 0) { for (int i = 1; i < nrOfHGridPartitions; i++) { @@ -921,7 +917,7 @@ void HistogramArea::updateBackBuffer () cr->stroke (); } } - + cr->unset_dash(); // Draw the frame's border From aed90f29ea32fec8a48ab24f08fb9e34092c2156 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Thu, 12 Jul 2018 09:01:30 +0200 Subject: [PATCH 034/115] Try something new: click-and-drag to modify scaling. Feedback appreciated. --- rtgui/histogrampanel.cc | 34 ++++++++++++++++++++++++++++++++-- rtgui/histogrampanel.h | 7 +++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index bf9c9de3d..511f7f35e 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -627,6 +627,9 @@ HistogramArea::HistogramArea (DrawModeListener *fml) : //needChroma unactive by ghist(256); bhist(256); chist(256); + + factor = 10.0; + isPressed = false; get_style_context()->add_class("drawingarea"); set_name("HistogramArea"); @@ -934,12 +937,12 @@ void HistogramArea::on_realize () Gtk::DrawingArea::on_realize(); Glib::RefPtr window = get_window(); - add_events(Gdk::BUTTON_PRESS_MASK); + add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK); } double HistogramArea::scalingFunctionLog(double vsize, double val) { - double factor = 10.0; // can be tuned if necessary - higher is flatter curve + //double factor = 10.0; // can be tuned if necessary - higher is flatter curve return vsize * log(factor / (factor + val)) / log(factor / (factor + vsize)); } @@ -1005,6 +1008,9 @@ bool HistogramArea::on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr) bool HistogramArea::on_button_press_event (GdkEventButton* event) { + isPressed = true; + movingPosition = event->x; + if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { drawMode = (drawMode + 1) % 3; @@ -1021,3 +1027,27 @@ bool HistogramArea::on_button_press_event (GdkEventButton* event) return true; } +bool HistogramArea::on_button_release_event (GdkEventButton* event) +{ + isPressed = false; + return true; +} + +bool HistogramArea::on_motion_notify_event (GdkEventMotion* event) +{ + if (isPressed) + { + double mod = 1 + (event->x - movingPosition) / get_width(); + + factor /= mod; + if (factor < 1.0) + factor = 1.0; + if (factor > 100.0) + factor = 100.0; + + setDirty(true); + queue_draw (); + } + + return true; +} diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index d11b87153..b38a20d3c 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -119,8 +119,9 @@ protected: int oldwidth, oldheight; bool needLuma, needRed, needGreen, needBlue, rawMode, needChroma; - - + double factor; + bool isPressed; + double movingPosition; HistogramAreaIdleHelper* haih; @@ -134,6 +135,8 @@ public: void on_realize(); bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr); bool on_button_press_event (GdkEventButton* event); + bool on_button_release_event (GdkEventButton* event); + bool on_motion_notify_event (GdkEventMotion* event); private: void drawCurve(Cairo::RefPtr &cr, LUTu & data, double scale, int hsize, int vsize); From 382dcb2f0675b750e46843235be6ab7e64cbcac7 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 20 Jul 2018 11:12:13 +0430 Subject: [PATCH 035/115] Fixed header.. --- rtgui/histogrampanel.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index b38a20d3c..2bfc2a5c9 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -183,9 +183,9 @@ protected: Gtk::Image *barImage_g; Gtk::Image *chroImage_g; - Gtk::Image *modeImage; - Gtk::Image *modeImage_g; - Gtk::Image *modeImage_g2; + Gtk::Image *mode0Image; + Gtk::Image *mode1Image; + Gtk::Image *mode2Image; sigc::connection rconn; void setHistInvalid (); From 12ab150c0a04a56607637f2972fe10b3e5eca531 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Fri, 17 Aug 2018 12:47:52 +0200 Subject: [PATCH 036/115] RGB-bar correctly shows actual cursor values in all modes --- rtgui/histogrampanel.cc | 95 ++++++++++++++++++++++++++++++----------- rtgui/histogrampanel.h | 21 +++++++-- 2 files changed, 86 insertions(+), 30 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index ae6e7b44b..2d19e82be 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -48,6 +48,9 @@ HistogramPanel::HistogramPanel () histogramRGBArea = Gtk::manage (new HistogramRGBArea ()); setExpandAlignProperties(histogramRGBArea, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_END); histogramRGBArea->show(); + + // connecting the two childs + histogramArea->signal_factor_changed().connect( sigc::mem_fun(*histogramRGBArea, &HistogramRGBArea::factorChanged) ); gfxGrid = Gtk::manage (new Gtk::Grid ()); gfxGrid->set_orientation(Gtk::ORIENTATION_VERTICAL); @@ -353,6 +356,16 @@ void HistogramPanel::toggle_button_mode () showMode->set_image(*mode2Image); } +// +// +// +// HistogramScaling +double HistogramScaling::log(double vsize, double val) +{ + //double factor = 10.0; // can be tuned if necessary - higher is flatter curve + return vsize * std::log(factor / (factor + val)) / std::log(factor / (factor + vsize)); +} + // // // @@ -458,24 +471,39 @@ void HistogramRGBArea::updateBackBuffer (int r, int g, int b, const Glib::ustrin if (needRed) { // Red cc->set_source_rgb(1.0, 0.0, 0.0); - cc->move_to((int)(r * (winw / 256.0)), 0); - cc->line_to((int)(r * (winw / 256.0)), winh - 0); + if (options.histogramDrawMode < 2) { + cc->move_to(r * (winw - 3) / 255.0 + 2, 0); // Rescaling seems needed to fit between boundaries of draw area + cc->line_to(r * (winw - 3) / 255.0 + 2, winh - 0); + } else { + cc->move_to(HistogramScaling::log (255, r) * (winw - 3) / 255.0 + 2, 0); + cc->line_to(HistogramScaling::log (255, r) * (winw - 3) / 255.0 + 2, winh - 0); + } cc->stroke(); } if (needGreen) { // Green cc->set_source_rgb(0.0, 1.0, 0.0); - cc->move_to((int)(g * (winw / 256.0)), 0); - cc->line_to((int)(g * (winw / 256.0)), winh - 0); + if (options.histogramDrawMode < 2) { + cc->move_to(g * (winw - 3) / 255.0 + 2, 0); + cc->line_to(g * (winw - 3) / 255.0 + 2, winh - 0); + } else { + cc->move_to(HistogramScaling::log (255, g) * (winw - 3) / 255.0 + 2, 0); + cc->line_to(HistogramScaling::log (255, g) * (winw - 3) / 255.0 + 2, winh - 0); + } cc->stroke(); } if (needBlue) { // Blue cc->set_source_rgb(0.0, 0.0, 1.0); - cc->move_to((int)(b * (winw / 256.0)), 0); - cc->line_to((int)(b * (winw / 256.0)), winh - 0); + if (options.histogramDrawMode < 2) { + cc->move_to(b * (winw - 3) / 255.0 + 2, 0); + cc->line_to(b * (winw - 3) / 255.0 + 2, winh - 0); + } else { + cc->move_to(HistogramScaling::log (255, b) * (winw - 3) / 255.0 + 2, 0); + cc->line_to(HistogramScaling::log (255, b) * (winw - 3) / 255.0 + 2, winh - 0); + } cc->stroke(); } @@ -486,8 +514,13 @@ void HistogramRGBArea::updateBackBuffer (int r, int g, int b, const Glib::ustrin if (needLuma) { // Luma cc->set_source_rgb(1.0, 1.0, 1.0); - cc->move_to((int)((Lab_L) * (winw / 100.0)), 0); - cc->line_to((int)((Lab_L) * (winw / 100.0)), winh - 0); + if (options.histogramDrawMode < 2) { + cc->move_to(Lab_L * (winw - 3) / 100.0 + 2, 0); + cc->line_to(Lab_L * (winw - 3) / 100.0 + 2, winh - 0); + } else { + cc->move_to(HistogramScaling::log (100, Lab_L) * (winw - 3) / 100.0 + 2, 0); + cc->line_to(HistogramScaling::log (100, Lab_L) * (winw - 3) / 100.0 + 2, winh - 0); + } cc->stroke(); } @@ -496,8 +529,13 @@ void HistogramRGBArea::updateBackBuffer (int r, int g, int b, const Glib::ustrin float chromaval = sqrt(Lab_a * Lab_a + Lab_b * Lab_b) / 1.8; // float chromaval = sqrt(Lab_a*Lab_a + Lab_b*Lab_b); cc->set_source_rgb(0.9, 0.9, 0.0); - cc->move_to((int)(chromaval * (winw / 100.0)), 0); - cc->line_to((int)(chromaval * (winw / 100.0)), winh - 0); + if (options.histogramDrawMode < 2) { + cc->move_to(chromaval * (winw - 3) / 100.0 + 2, 0); + cc->line_to(chromaval * (winw - 3) / 100.0 + 2, winh - 0); + } else { + cc->move_to(HistogramScaling::log (100, chromaval) * (winw - 3) / 100.0 + 2, 0); + cc->line_to(HistogramScaling::log (100, chromaval) * (winw - 3) / 100.0 + 2, winh - 0); + } cc->stroke(); } } @@ -615,12 +653,19 @@ bool HistogramRGBArea::on_button_press_event (GdkEventButton* event) return true; } +void HistogramRGBArea::factorChanged (double newFactor) +{ + factor = newFactor; +} + // // // // HistogramArea HistogramArea::HistogramArea (DrawModeListener *fml) : //needChroma unactive by default, luma too - valid(false), drawMode(options.histogramDrawMode), myDrawModeListener(fml), oldwidth(-1), oldheight(-1), needLuma(false), needRed(true), needGreen(true), needBlue(true), rawMode(false), needChroma(false) + valid(false), drawMode(options.histogramDrawMode), myDrawModeListener(fml), + oldwidth(-1), oldheight(-1), needLuma(false), needRed(true), needGreen(true), needBlue(true), + rawMode(false), needChroma(false), isPressed(false), movingPosition(0.0) { lhist(256); @@ -628,9 +673,6 @@ HistogramArea::HistogramArea (DrawModeListener *fml) : //needChroma unactive by ghist(256); bhist(256); chist(256); - - factor = 10.0; - isPressed = false; get_style_context()->add_class("drawingarea"); set_name("HistogramArea"); @@ -901,8 +943,8 @@ void HistogramArea::updateBackBuffer () } } else { for (int i = 1; i < nrOfVGridPartitions; i++) { - cr->move_to (scalingFunctionLog (255, pow(2.0,i) - 1) / 255 * w + 0.5, 1.5); - cr->line_to (scalingFunctionLog (255, pow(2.0,i) - 1) / 255 * w + 0.5, h - 2); + cr->move_to (HistogramScaling::log (255, pow(2.0,i) - 1) / 255 * w + 0.5, 1.5); + cr->line_to (HistogramScaling::log (255, pow(2.0,i) - 1) / 255 * w + 0.5, h - 2); cr->stroke (); } } @@ -916,8 +958,8 @@ void HistogramArea::updateBackBuffer () } } else { for (int i = 1; i < nrOfHGridPartitions; i++) { - cr->move_to (1.5, h - scalingFunctionLog(h, i * h / nrOfHGridPartitions) + 0.5); - cr->line_to (w - 2, h - scalingFunctionLog(h, i * h / nrOfHGridPartitions) + 0.5); + cr->move_to (1.5, h - HistogramScaling::log (h, i * h / nrOfHGridPartitions) + 0.5); + cr->line_to (w - 2, h - HistogramScaling::log (h, i * h / nrOfHGridPartitions) + 0.5); cr->stroke (); } } @@ -941,12 +983,6 @@ void HistogramArea::on_realize () add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK); } -double HistogramArea::scalingFunctionLog(double vsize, double val) -{ - //double factor = 10.0; // can be tuned if necessary - higher is flatter curve - return vsize * log(factor / (factor + val)) / log(factor / (factor + vsize)); -} - void HistogramArea::drawCurve(Cairo::RefPtr &cr, LUTu & data, double scale, int hsize, int vsize) { @@ -957,12 +993,12 @@ void HistogramArea::drawCurve(Cairo::RefPtr &cr, double val = data[i] * (double)vsize / scale; if (drawMode > 0) { // scale y for single and double log-scale - val = scalingFunctionLog ((double)vsize, val); + val = HistogramScaling::log ((double)vsize, val); } double iscaled = i; if (drawMode == 2) { // scale x for double log-scale - iscaled = scalingFunctionLog (255.0, (double)i); + iscaled = HistogramScaling::log (255.0, (double)i); } double posX = (iscaled / 255.0) * (hsize - 1); @@ -1046,9 +1082,16 @@ bool HistogramArea::on_motion_notify_event (GdkEventMotion* event) if (factor > 100.0) factor = 100.0; + sigFactorChanged.emit(factor); + setDirty(true); queue_draw (); } return true; } + +HistogramArea::type_signal_factor_changed HistogramArea::signal_factor_changed() +{ + return sigFactorChanged; +} \ No newline at end of file diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index 2bfc2a5c9..990d67a52 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -43,7 +43,15 @@ struct HistogramRGBAreaIdleHelper { int pending; }; -class HistogramRGBArea : public Gtk::DrawingArea, public BackBuffer +class HistogramScaling +{ +public: + double factor; + HistogramScaling() : factor(10.0) {} + double log (double vsize, double val); +}; + +class HistogramRGBArea : public Gtk::DrawingArea, public BackBuffer, private HistogramScaling { private: typedef const double (*TMatrix)[3]; @@ -88,6 +96,8 @@ public: void on_realize(); bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr); bool on_button_press_event (GdkEventButton* event); + void factorChanged (double newFactor); + private: Gtk::SizeRequestMode get_request_mode_vfunc () const; void get_preferred_height_vfunc (int& minimum_height, int& natural_height) const; @@ -104,10 +114,14 @@ public: virtual void toggle_button_mode () {} }; -class HistogramArea : public Gtk::DrawingArea, public BackBuffer +class HistogramArea : public Gtk::DrawingArea, public BackBuffer, private HistogramScaling { +public: + typedef sigc::signal type_signal_factor_changed; + private: IdleRegister idle_register; + type_signal_factor_changed sigFactorChanged; protected: LUTu lhist, rhist, ghist, bhist, chist; @@ -119,7 +133,6 @@ protected: int oldwidth, oldheight; bool needLuma, needRed, needGreen, needBlue, rawMode, needChroma; - double factor; bool isPressed; double movingPosition; @@ -137,6 +150,7 @@ public: bool on_button_press_event (GdkEventButton* event); bool on_button_release_event (GdkEventButton* event); bool on_motion_notify_event (GdkEventMotion* event); + type_signal_factor_changed signal_factor_changed(); private: void drawCurve(Cairo::RefPtr &cr, LUTu & data, double scale, int hsize, int vsize); @@ -146,7 +160,6 @@ private: void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const; void get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const; void get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const; - double scalingFunctionLog (double vsize, double val); }; class HistogramPanel : public Gtk::Grid, public PointerMotionListener, public DrawModeListener From 4fd780c74b350be8a0ee5ee97677abad27b5193d Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Sun, 19 Aug 2018 22:33:21 +0200 Subject: [PATCH 037/115] Removes Noise Reduction settings from Preferences - Noise Reduction settings removed from Preferences > Performance & Quality - Performance & Quality renamed to Performance, container frame renamed to Threads, since it applies to more than just the NR tool. - Localization keys removed. - TP_RETINEX_GAINTRANSMISSION_TOOLTIP key revised, closes #3299 --- rtdata/languages/Catala | 29 ----- rtdata/languages/Chinese (Simplified) | 29 ----- rtdata/languages/Chinese (Traditional) | 29 ----- rtdata/languages/Czech | 30 ----- rtdata/languages/Dansk | 29 ----- rtdata/languages/Deutsch | 29 ----- rtdata/languages/English (UK) | 29 ----- rtdata/languages/English (US) | 29 ----- rtdata/languages/Espanol | 29 ----- rtdata/languages/Euskara | 29 ----- rtdata/languages/Francais | 29 ----- rtdata/languages/Greek | 29 ----- rtdata/languages/Hebrew | 29 ----- rtdata/languages/Italiano | 29 ----- rtdata/languages/Japanese | 29 ----- rtdata/languages/Latvian | 29 ----- rtdata/languages/Magyar | 29 ----- rtdata/languages/Nederlands | 29 ----- rtdata/languages/Norsk BM | 29 ----- rtdata/languages/Polish | 29 ----- rtdata/languages/Polish (Latin Characters) | 29 ----- rtdata/languages/Portugues (Brasil) | 30 ----- rtdata/languages/Russian | 29 ----- rtdata/languages/Serbian (Cyrilic Characters) | 29 ----- rtdata/languages/Serbian (Latin Characters) | 29 ----- rtdata/languages/Slovak | 29 ----- rtdata/languages/Suomi | 29 ----- rtdata/languages/Swedish | 29 ----- rtdata/languages/Turkish | 29 ----- rtdata/languages/default | 36 +----- rtgui/preferences.cc | 107 +++--------------- rtgui/preferences.h | 2 +- 32 files changed, 23 insertions(+), 965 deletions(-) diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index 4c5beefef..9d9fa288a 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -1470,13 +1470,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. !PREFERENCES_BEHSETALL;All to 'Set' @@ -1505,11 +1499,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PREFERENCES_D55;5500K !PREFERENCES_D60;6000K !PREFERENCES_D65;6500K -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FLUOF2;Fluorescent F2 !PREFERENCES_FLUOF7;Fluorescent F7 !PREFERENCES_FLUOF11;Fluorescent F11 @@ -1534,20 +1525,13 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. @@ -1563,34 +1547,21 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !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 !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode -!PREFERENCES_SMA;Small (250x287) -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PROFILEPANEL_GLOBALPROFILES;Bundled profiles !PROFILEPANEL_MODE_TIP;Processing profile fill mode.\n\nButton pressed: partial profiles will be converted to full profiles; the missing values will be replaced with hard-coded defaults.\n\nButton released: profiles will be applied as they are, altering only those values which they contain. !PROFILEPANEL_MYPROFILES;My profiles diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index ecd0473ba..afc2f2b3a 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -488,13 +488,7 @@ PARTIALPASTE_WAVELETGROUP;小波变换等级 PARTIALPASTE_WHITEBALANCE;白平衡 PREFERENCES_ADD;添加 PREFERENCES_APPLNEXTSTARTUP;下次启动生效 -PREFERENCES_AUTLISLOW;低 -PREFERENCES_AUTLISMAX;最大 - 所有块平均值 -PREFERENCES_AUTLISSTD;高 -PREFERENCES_AUTLISVLOW;无 -PREFERENCES_AUTLOW;低 PREFERENCES_AUTOMONPROFILE;使用操作系统主显示器的色彩档案 -PREFERENCES_AUTSTD;标准 PREFERENCES_BATCH_PROCESSING;批处理 PREFERENCES_BEHADDALL;全 '添加' PREFERENCES_BEHAVIOR;行为 @@ -536,8 +530,6 @@ PREFERENCES_DARKFRAMESHOTS;张 PREFERENCES_DARKFRAMETEMPLATES;模板 PREFERENCES_DATEFORMAT;日期格式 PREFERENCES_DATEFORMATHINT;可以使用下列控制符:\n%y : 年\n%m : 月h\n%d : 日\n\n例如, 中文日期格式:\n%y/%m/%d -PREFERENCES_DAUB_LABEL;使用 Daubechies D6 小波变换而不是 D4 -PREFERENCES_DAUB_TOOLTIP;The Noise Reduction and 小波变换等级 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;暗场图像路径 PREFERENCES_DIRHOME;用户文件路径 PREFERENCES_DIRLAST;上次访问路径 @@ -545,7 +537,6 @@ PREFERENCES_DIROTHER;其他 PREFERENCES_DIRSELECTDLG;启动时选择图片路径... PREFERENCES_DIRSOFTWARE;软件安装路径 PREFERENCES_EDITORLAYOUT;编辑器布局 -PREFERENCES_EXPAUT;进阶 PREFERENCES_EXTERNALEDITOR;外部编辑器 PREFERENCES_FBROWSEROPTS;文件浏览选项 PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) @@ -591,12 +582,7 @@ PREFERENCES_INTENT_SATURATION;饱和度 PREFERENCES_INTERNALTHUMBIFUNTOUCHED;如果RAW文件没有修改, 显示内嵌JPEG缩略图 PREFERENCES_LANG;语言 PREFERENCES_LANGAUTODETECT;使用系统语言 -PREFERENCES_LEVAUTDN;降噪等级 -PREFERENCES_LEVDN;单元尺寸 -PREFERENCES_LISS;自动多区域平滑 -PREFERENCES_MAX;最大 (Tile) PREFERENCES_MAXRECENTFOLDERS;最近访问路径历史记录数 -PREFERENCES_MED;中等 (Tile/2) PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -604,7 +590,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Group "Processing profile operations" PREFERENCES_MENUGROUPRANK;组 "评价" PREFERENCES_MENUOPTIONS;子菜单选项 PREFERENCES_METADATA;元数据 -PREFERENCES_MIN;Mini (100x115) PREFERENCES_MONINTENT;默认渲染意图 PREFERENCES_MONITOR;显示器 PREFERENCES_MONPROFILE;默认色彩配置文件 @@ -613,7 +598,6 @@ PREFERENCES_MULTITAB;多编辑器标签模式 PREFERENCES_MULTITABDUALMON;多编辑器标签独立模式 PREFERENCES_NAVGUIDEBRUSH;导航器引导颜色 PREFERENCES_NAVIGATIONFRAME;导航器 -PREFERENCES_NOISE;降噪 PREFERENCES_OUTDIR;输出路径 PREFERENCES_OUTDIRFOLDER;保存至文件夹 PREFERENCES_OUTDIRFOLDERHINT;将已寸图片放至所选文件夹 @@ -649,8 +633,6 @@ PREFERENCES_PRTPROFILE;色彩配置文件 PREFERENCES_PSPATH;Adobe Photoshop安装路径 PREFERENCES_REMEMBERZOOMPAN;记忆缩放和位置 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;降噪和小波变换等级可用的最大线程数 -PREFERENCES_RGBDTL_TOOLTIP;"0"表示自动选择最大可用线程数 线程越多处理越快, 同时消耗更多内存 PREFERENCES_SELECTFONT;设置主要字体 PREFERENCES_SELECTFONT_COLPICKER;设置色彩选择器字体 PREFERENCES_SELECTLANG;选择语言 @@ -664,37 +646,26 @@ PREFERENCES_SHOWDATETIME;显示时间日期 PREFERENCES_SHOWEXPOSURECOMPENSATION;附加曝光补偿 PREFERENCES_SHOWFILMSTRIPTOOLBAR;显示图像胶片栏 PREFERENCES_SHTHRESHOLD;阴影过暗阈值 -PREFERENCES_SIMPLAUT;工具模式 PREFERENCES_SINGLETAB;单编辑器栏模式 PREFERENCES_SINGLETABVERTAB;单编辑器栏模式, 标签栏垂直 -PREFERENCES_SMA;小 (250x287) PREFERENCES_SND_BATCHQUEUEDONE;队列处理完成 PREFERENCES_SND_HELP;输入完整路径来指定声音文件, 或者留空表示无声 \nWindows系统声音可以使用 "SystemDefault", "SystemAsterisk" 等 Linux则可以使用 "complete", "window-attention" 等 PREFERENCES_SND_LNGEDITPROCDONE;编辑器处理完成 PREFERENCES_SND_THRESHOLDSECS;几秒之后 PREFERENCES_STARTUPIMDIR;启动时路径 -PREFERENCES_STDAUT;标准 PREFERENCES_TAB_BROWSER;文件浏览器 PREFERENCES_TAB_COLORMGR;色彩管理 PREFERENCES_TAB_DYNAMICPROFILE;动态预设规则 PREFERENCES_TAB_GENERAL;一般 PREFERENCES_TAB_IMPROC;图片处理 -PREFERENCES_TAB_PERFORMANCE;性能和品质 PREFERENCES_TAB_SOUND;音效 PREFERENCES_THEME;主题 -PREFERENCES_TIMAX;高 -PREFERENCES_TINB;块数量 -PREFERENCES_TISTD;标准 PREFERENCES_TP_LABEL;工具栏 PREFERENCES_TP_USEICONORTEXT;标签使用图标而不是文本 PREFERENCES_TP_VSCROLLBAR;隐藏垂直滚动栏 PREFERENCES_TUNNELMETADATA;无损复制 Exif/IPTC/XMP 到输出文件 PREFERENCES_USEBUNDLEDPROFILES;启用内置预设 PREFERENCES_VIEW;输出设备白平衡 (显示器、电视、投影仪等) -PREFERENCES_WAVLEV;在质量为"高"时增加小波变换等级 -PREFERENCES_WLONE;一级 -PREFERENCES_WLTWO;二级 -PREFERENCES_WLZER;无 PREFERENCES_WORKFLOW;排版 PROFILEPANEL_LABEL;处理参数配置 PROFILEPANEL_LOADDLGLABEL;加载处理参数为... diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional) index d527f8c65..94385640d 100644 --- a/rtdata/languages/Chinese (Traditional) +++ b/rtdata/languages/Chinese (Traditional) @@ -1201,14 +1201,8 @@ TP_WBALANCE_TEMPERATURE;色溫 !PARTIALPASTE_TM_FATTAL;Dynamic range compression !PARTIALPASTE_VIBRANCE;Vibrance !PREFERENCES_ADD;Add -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1246,13 +1240,10 @@ TP_WBALANCE_TEMPERATURE;色溫 !PREFERENCES_DARKFRAMEFOUND;Found !PREFERENCES_DARKFRAMESHOTS;shots !PREFERENCES_DARKFRAMETEMPLATES;templates -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) !PREFERENCES_FLATFIELDFOUND;Found !PREFERENCES_FLATFIELDSDIR;Flat-fields directory @@ -1285,12 +1276,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1298,7 +1284,6 @@ TP_WBALANCE_TEMPERATURE;色溫 !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1307,7 +1292,6 @@ TP_WBALANCE_TEMPERATURE;色溫 !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files @@ -1327,8 +1311,6 @@ TP_WBALANCE_TEMPERATURE;色溫 !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT;Select main font !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font @@ -1338,36 +1320,25 @@ TP_WBALANCE_TEMPERATURE;色溫 !PREFERENCES_SET;Set !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETAB;Single Editor Tab Mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PREFERENCES_WORKFLOW;Layout !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index 8051a6f3b..225970a1a 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -982,14 +982,8 @@ PARTIALPASTE_VIGNETTING;Korekce vinětace PARTIALPASTE_WHITEBALANCE;Nastavení bílé PREFERENCES_ADD;Přidat PREFERENCES_APPLNEXTSTARTUP;vyžaduje restart aplikace -PREFERENCES_AUTLISLOW;Nízké -PREFERENCES_AUTLISMAX;Maximální - průměr všech dlaždic -PREFERENCES_AUTLISSTD;Vysoké -PREFERENCES_AUTLISVLOW;Ne -PREFERENCES_AUTLOW;Nízká PREFERENCES_AUTOMONPROFILE;Použít barevný profil hlavního monitoru z operačního systému PREFERENCES_AUTOSAVE_TP_OPEN;Před ukončením automaticky uložit\nstav sbalení/rozbalení nástrojů. -PREFERENCES_AUTSTD;Běžná PREFERENCES_BATCH_PROCESSING;Dávkové zpracování PREFERENCES_BEHADDALL;Vše do 'Přidat' PREFERENCES_BEHADDALLHINT;Nastaví všechny parametry do módu Přidat.\nZměna parametrů v panelu dávkového zpracování se aplikuje jako rozdíl k uloženým hodnotám. @@ -1036,8 +1030,6 @@ PREFERENCES_DARKFRAMESHOTS;snímků PREFERENCES_DARKFRAMETEMPLATES;šablony PREFERENCES_DATEFORMAT;Formát data PREFERENCES_DATEFORMATHINT;Lze použít následující formátovací řetězce:\n%y\t- rok (year)\n%m\t- měsíc (month)\n%d\t- den (day)\n\nNapříklad český formát data:\n%d. %m. %y -PREFERENCES_DAUB_LABEL;Použít D6 Daubechiesové vlnky namísto D4 -PREFERENCES_DAUB_TOOLTIP;Nástroje Redukce šumu a Úrovně vlnky používají Daubechiesové mateřskou vlnku. Pokud místo D4 vyberete D6 zvýší se počet ortogonálních Daubechiesové koeficientů a pravděpodobně zvýší kvalitu úrovní malého měřítka. Není zde rozdíl ve spotřebě paměti nebo délce zpracování. PREFERENCES_DIRDARKFRAMES;Složka tmavých snímků PREFERENCES_DIRECTORIES;Složky PREFERENCES_DIRHOME;Domovská složka @@ -1047,7 +1039,6 @@ PREFERENCES_DIRSELECTDLG;Zvolte složku s obrázky při spuštění... PREFERENCES_DIRSOFTWARE;Instalační složka PREFERENCES_EDITORCMDLINE;Vlastní příkazová řádka PREFERENCES_EDITORLAYOUT;Rozvržení editoru -PREFERENCES_EXPAUT;Expert PREFERENCES_EXTERNALEDITOR;Externí editor PREFERENCES_FBROWSEROPTS;Volby prohlížeče souborů / náhledů PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Jednořádková lišta nástrojů v prohlížeči souborů\n(vypněte na nízkých rozlišeních) @@ -1093,12 +1084,7 @@ PREFERENCES_INTENT_SATURATION;Nasycení PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Ukázat vložené JPEG náhledy u needitovaných snímků PREFERENCES_LANG;Jazyk PREFERENCES_LANGAUTODETECT;Použít systémový jazyk -PREFERENCES_LEVAUTDN;Úroveň odšumění -PREFERENCES_LEVDN;Velikost buňky -PREFERENCES_LISS;Automatické více zónové vyhlazení -PREFERENCES_MAX;Velká (dlaždice) PREFERENCES_MAXRECENTFOLDERS;Maximální počet nedávných složek -PREFERENCES_MED;Střední (Poloviční dlaždice) PREFERENCES_MENUGROUPEXTPROGS;Skupina "Otevřít pomocí" PREFERENCES_MENUGROUPFILEOPERATIONS;Skupina "Souborové operace" PREFERENCES_MENUGROUPLABEL;Skupina "Barevné štítky" @@ -1106,7 +1092,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Skupina "Operace s profily zpracování" PREFERENCES_MENUGROUPRANK;Skupina "Hodnocení" PREFERENCES_MENUOPTIONS;Volby místní nabídky PREFERENCES_METADATA;Metadata -PREFERENCES_MIN;Velmi malá (100x115) PREFERENCES_MONINTENT;Výchozí reprodukční záměr PREFERENCES_MONITOR;Monitor PREFERENCES_MONPROFILE;Výchozí barevný profil @@ -1115,7 +1100,6 @@ PREFERENCES_MULTITAB;Mód více karet editoru PREFERENCES_MULTITABDUALMON;Mód více karet editoru ve vlastním okně PREFERENCES_NAVGUIDEBRUSH;Barva vodítek navigátoru PREFERENCES_NAVIGATIONFRAME;Navigátor -PREFERENCES_NOISE;Redukce šumu PREFERENCES_OUTDIR;Výstupní složka PREFERENCES_OUTDIRFOLDER;Ulož do souboru PREFERENCES_OUTDIRFOLDERHINT;Uložit obrázky do vybrané složky. @@ -1151,8 +1135,6 @@ PREFERENCES_PRTPROFILE;Barevný profil PREFERENCES_PSPATH;Instalační složka Adobe Photoshop PREFERENCES_REMEMBERZOOMPAN;Zapamatovat si procento přiblížení a posun obrázku PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Zapamatovat si procento přiblížení a posun aktuálního obrázku a použít tyto hodnoty při otevírání nového obrázku.\n\nTato volba funguje pouze v režimu "Mód jedné karty editoru" a volba "Metoda demozajkování pro náhled při přiblížení menším než 100%" je nastavena na "Stejně jako v PP3". -PREFERENCES_RGBDTL_LABEL;Maximální počet vláken pro redukci šumu a úrovně vlnky -PREFERENCES_RGBDTL_TOOLTIP;Pro automatické nastavení maximálního možného počtu vláken ponechte nastaveno na "0". Čím více vláken běží paralelně, tím rychlejší je výpočet. Paměťové nároky najdete na RawPedii. PREFERENCES_SAVE_TP_OPEN_NOW;Uložit stav sbalení/rozbalení nástrojů hned PREFERENCES_SELECTFONT;Vyberte hlavní písmo PREFERENCES_SELECTFONT_COLPICKER;Vybrat písmo pro Průzkumníka barev @@ -1167,41 +1149,30 @@ PREFERENCES_SHOWDATETIME;Zobrazovat datum a čas PREFERENCES_SHOWEXPOSURECOMPENSATION;Přidat kompenzaci expozice PREFERENCES_SHOWFILMSTRIPTOOLBAR;Zobrazit lištu s filmovým pásem PREFERENCES_SHTHRESHOLD;Práh oříznutých stínů -PREFERENCES_SIMPLAUT;Režim nástrojů PREFERENCES_SINGLETAB;Mód jedné karty editoru PREFERENCES_SINGLETABVERTAB;Mód jedné karty editoru, svislé karty -PREFERENCES_SMA;Malá (250x287) PREFERENCES_SND_BATCHQUEUEDONE;Zpracování fronty dokončeno PREFERENCES_SND_HELP;Vložte cestu k souboru pro nastavení zvuku nebo ponechte prázdné (bez zvuku).\nVe Windows zadejte "SystemDefault", "SystemAsterisk" a podobně.\nNa Linuxu použijte "complete", "window-attention" a další. PREFERENCES_SND_LNGEDITPROCDONE;Zpracování v editoru dokončeno PREFERENCES_SND_THRESHOLDSECS;Po sekundách PREFERENCES_STARTUPIMDIR;Složka obrázků při spuštění -PREFERENCES_STDAUT;Běžný PREFERENCES_TAB_BROWSER;Prohlížeč souborů PREFERENCES_TAB_COLORMGR;Správa barev PREFERENCES_TAB_DYNAMICPROFILE;Pravidla dynamických profilů PREFERENCES_TAB_GENERAL;Obecné PREFERENCES_TAB_IMPROC;Zpracování obrázku -PREFERENCES_TAB_PERFORMANCE;Výkon a kvalita PREFERENCES_TAB_SOUND;Zvuky PREFERENCES_THEME;Vzhled PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Vložený JPEG náhled PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Obrázek k zobrazení PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutrální vykreslení raw PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Vložený JPEG náhled pokud je v plné velikosti, jinak neutrální raw -PREFERENCES_TIMAX;Vysoký -PREFERENCES_TINB;Počet dlaždic -PREFERENCES_TISTD;Běžný PREFERENCES_TP_LABEL;Panel nástrojů: PREFERENCES_TP_USEICONORTEXT;V záhlaví karty zobrazit ikonu namísto textu PREFERENCES_TP_VSCROLLBAR;Skrýt svislou posuvnou lištu PREFERENCES_TUNNELMETADATA;Zkopírovat nezměněná Exif/IPTC/XMP metadata do výstupního souboru PREFERENCES_USEBUNDLEDPROFILES;Použít přiložené profily PREFERENCES_VIEW;Nastavení vyvážení bílé výstupních zařízení (monitor, TV, projektor, rámeček a jiné) -PREFERENCES_WAVLEV;Zvýšit úroveň vlnkové transformace v nejvyšší kvalitě -PREFERENCES_WLONE;Jedna úroveň -PREFERENCES_WLTWO;Dvě úrovně -PREFERENCES_WLZER;Ne PREFERENCES_WORKFLOW;Rozvržení PROFILEPANEL_COPYPPASTE;Parametry pro kopírování PROFILEPANEL_GLOBALPROFILES;Přiložené profily @@ -1870,7 +1841,6 @@ TP_RETINEX_FREEGAMMA;Volná gama TP_RETINEX_GAIN;Zisk TP_RETINEX_GAINOFFS;Zisk a posun (jasu) TP_RETINEX_GAINTRANSMISSION;Přenos zisku -TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Zesílí nebo zeslabí mapu přenosu pro dosažení jasu.\nÚsečka: přenos -min od 0. průměr. a hodnot (max).\nPořadnice: zisk. TP_RETINEX_GAIN_TOOLTIP;Působí na obnovený obrázek.\n\nToto je velmi odlišné od ostatních nastavení. Použito pro černé nebo bílé pixely a pro vyvážení histogramu. TP_RETINEX_GAMMA;Gama TP_RETINEX_GAMMA_FREE;Volná diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index 77ae6dc9b..6b9cfd32e 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -1198,14 +1198,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PARTIALPASTE_TM_FATTAL;Dynamic range compression !PARTIALPASTE_VIBRANCE;Vibrance !PREFERENCES_ADD;Add -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1243,13 +1237,10 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_DARKFRAMEFOUND;Found !PREFERENCES_DARKFRAMESHOTS;shots !PREFERENCES_DARKFRAMETEMPLATES;templates -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) !PREFERENCES_FLATFIELDFOUND;Found !PREFERENCES_FLATFIELDSDIR;Flat-fields directory @@ -1282,12 +1273,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1295,7 +1281,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1304,7 +1289,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files @@ -1324,8 +1308,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT;Select main font !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font @@ -1335,36 +1317,25 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_SET;Set !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETAB;Single Editor Tab Mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PREFERENCES_WORKFLOW;Layout !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index e69bd8c57..5acac7841 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -1087,14 +1087,8 @@ PARTIALPASTE_WAVELETGROUP;Wavelet PARTIALPASTE_WHITEBALANCE;Weißabgleich PREFERENCES_ADD;HINZU PREFERENCES_APPLNEXTSTARTUP;erfordert Neustart -PREFERENCES_AUTLISLOW;Niedrig -PREFERENCES_AUTLISMAX;Max.-Durchschnitt aller Kacheln -PREFERENCES_AUTLISSTD;Hoch -PREFERENCES_AUTLISVLOW;Keine -PREFERENCES_AUTLOW;Niedrig PREFERENCES_AUTOMONPROFILE;Automatisch das für den aktuellen Monitor festgelegte Profil verwenden PREFERENCES_AUTOSAVE_TP_OPEN;Werkzeugstatus vor dem Beenden automatisch speichern -PREFERENCES_AUTSTD;Standard PREFERENCES_BATCH_PROCESSING;Stapelverarbeitung PREFERENCES_BEHADDALL;Alle hinzufügen PREFERENCES_BEHADDALLHINT;Setzt alle Parameter auf Hinzufügen.\nAnpassungen der Parameter in der Hintergrundstapelverarbeitung werden als Deltas zu den gespeicherten Werten interpretiert. @@ -1145,8 +1139,6 @@ PREFERENCES_DARKFRAMESHOTS;Aufnahmen PREFERENCES_DARKFRAMETEMPLATES;Vorlagen PREFERENCES_DATEFORMAT;Format PREFERENCES_DATEFORMATHINT;Die folgenden Variablen können verwendet werden:\n%y : Jahr\n%m : Monat\n%d : Tag\n\nBeispiele:\n%d.%m.%y (übliche deutsche Datumsschreibweise)\n%y-%m-%d (Datumsformat nach ISO 8601 und EN 28601) -PREFERENCES_DAUB_LABEL;Benutze Daubechies D6-Wavelets anstatt D4 -PREFERENCES_DAUB_TOOLTIP;Rauschreduzierung und Waveletebenen verwenden ein Debauchies Mutter-Wavelet. Wenn Sie D6 statt D4 wählen, erhöhen Sie die Anzahl der orthogonalen Daubechies-Koeffizienten, was die Qualität bei niedrigen Ebenen verbessern kann. Es gibt keinen Unterschied zwischen D4 und D6 im Speicherverbrauch oder in der Verarbeitungszeit. PREFERENCES_DIRDARKFRAMES;Dunkelbild-Verzeichnis PREFERENCES_DIRECTORIES;Verzeichnisse PREFERENCES_DIRHOME;Benutzer-Verzeichnis @@ -1156,7 +1148,6 @@ PREFERENCES_DIRSELECTDLG;Wähle das Bild-Verzeichnis beim Programmstart... PREFERENCES_DIRSOFTWARE;Installationsverzeichnis PREFERENCES_EDITORCMDLINE;Benutzerdefinierte Befehlszeile PREFERENCES_EDITORLAYOUT;Editor-Layout -PREFERENCES_EXPAUT;Experte PREFERENCES_EXTERNALEDITOR;Externer Editor PREFERENCES_FBROWSEROPTS;Bildinformationen und Miniaturbilder PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Einzeilige Toolbar\n(Bei geringer Bildschirmauflösung deaktivieren) @@ -1202,12 +1193,7 @@ PREFERENCES_INTENT_SATURATION;Sättigung PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Zeige das eingebettete JPEG als Miniaturbild, wenn die RAW-Datei noch nicht editiert wurde PREFERENCES_LANG;Sprache PREFERENCES_LANGAUTODETECT;Systemsprache verwenden -PREFERENCES_LEVAUTDN;Rauschreduzierungsstufe -PREFERENCES_LEVDN;Zellengröße -PREFERENCES_LISS;Automatische Glättung bei Mehrfachzonen -PREFERENCES_MAX;Maxi (Kachel) PREFERENCES_MAXRECENTFOLDERS;Maximale Anzahl der letzten Dateien -PREFERENCES_MED;Medium (Kachel/2) PREFERENCES_MENUGROUPEXTPROGS;Untermenü "Öffnen mit" PREFERENCES_MENUGROUPFILEOPERATIONS;Untermenü Dateioperationen PREFERENCES_MENUGROUPLABEL;Untermenü Farbmarkierung @@ -1215,7 +1201,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Untermenü Profiloperationen PREFERENCES_MENUGROUPRANK;Untermenü Bewertung PREFERENCES_MENUOPTIONS;Menüoptionen PREFERENCES_METADATA;Metadaten -PREFERENCES_MIN;Mini (100x115) PREFERENCES_MONINTENT;Standard-Rendering-Intent PREFERENCES_MONITOR;Monitor PREFERENCES_MONPROFILE;Standardfarbprofil @@ -1224,7 +1209,6 @@ PREFERENCES_MULTITAB;Multi-Reitermodus PREFERENCES_MULTITABDUALMON;Multi-Reitermodus (auf zweitem Monitor, wenn verfügbar) PREFERENCES_NAVGUIDEBRUSH;Farbe der Navigationshilfe PREFERENCES_NAVIGATIONFRAME;Navigation -PREFERENCES_NOISE;Rauschreduzierung PREFERENCES_OUTDIR;Ausgabeverzeichnis PREFERENCES_OUTDIRFOLDER;In dieses Verzeichnis speichern. PREFERENCES_OUTDIRFOLDERHINT;Alle Dateien im ausgewählten Verzeichnis speichern. @@ -1260,8 +1244,6 @@ PREFERENCES_PRTPROFILE;Farbprofil PREFERENCES_PSPATH;Adobe Photoshop Installationsverzeichnis PREFERENCES_REMEMBERZOOMPAN;Zoom und Bildposition merken PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Öffnen eines neuen Bildes mit den Zoom- und Positionswerten\ndes vorangegangenen Bildes.\n\nFunktioniert nur unter folgenden Bedingungen:\nEin-Reitermodus aktiv\n“Demosaikmethode für 100%-Ansicht“ muss auf “Wie im Bild-\nverarbeitungsprofil vorgegeben“ eingestellt sein. -PREFERENCES_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 speichern PREFERENCES_SELECTFONT;Schriftart PREFERENCES_SELECTFONT_COLPICKER;Schriftart für die Farbwähler @@ -1276,41 +1258,30 @@ PREFERENCES_SHOWDATETIME;Datum und Uhrzeit anzeigen PREFERENCES_SHOWEXPOSURECOMPENSATION;Belichtungskorrektur anfügen PREFERENCES_SHOWFILMSTRIPTOOLBAR;Toolbar oberhalb des Filmstreifens anzeigen PREFERENCES_SHTHRESHOLD;Schatten - Schwelle -PREFERENCES_SIMPLAUT;Werkzeugmodus PREFERENCES_SINGLETAB;Ein-Reitermodus PREFERENCES_SINGLETABVERTAB;Ein-Reitermodus (vertikale Reiter) -PREFERENCES_SMA;Klein (250x287) PREFERENCES_SND_BATCHQUEUEDONE;Warteschlange abgearbeitet PREFERENCES_SND_HELP;Geben Sie einen Pfad zu einer Sounddatei oder einen Systemklang ein.\n\nBeispiel Systemklänge:\nWindows: SystemDefault, SystemAsterisk ...\nLinux: complete, window-attention ...\n PREFERENCES_SND_LNGEDITPROCDONE;Bearbeitung abgeschlossen PREFERENCES_SND_THRESHOLDSECS;Verzögerung in Sekunden PREFERENCES_STARTUPIMDIR;Bildverzeichnis beim Programmstart -PREFERENCES_STDAUT;Standard PREFERENCES_TAB_BROWSER;Dateiverwaltung PREFERENCES_TAB_COLORMGR;Farbmanagement PREFERENCES_TAB_DYNAMICPROFILE;Dynamisches Profil PREFERENCES_TAB_GENERAL;Allgemein PREFERENCES_TAB_IMPROC;Bildbearbeitung -PREFERENCES_TAB_PERFORMANCE;Performance & Qualität PREFERENCES_TAB_SOUND;Klänge PREFERENCES_THEME;Oberflächendesign PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Eingebundenes JPEG PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Bildanzeige PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutrales RAW-Bild PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Eingebundenes JPEG wenn in Originalgröße, sonst neutrales RAW-Bild -PREFERENCES_TIMAX;Hoch -PREFERENCES_TINB;Anzahl Kacheln -PREFERENCES_TISTD;Standard PREFERENCES_TP_LABEL;Werkzeugbereich: PREFERENCES_TP_USEICONORTEXT;Symbole statt Text in Karteireitern PREFERENCES_TP_VSCROLLBAR;Keine vertikale Scrollbar PREFERENCES_TUNNELMETADATA;Exif/XMP unverändert in die Ausgabedatei übernehmen. PREFERENCES_USEBUNDLEDPROFILES;Standardprofile verwenden PREFERENCES_VIEW;Weißabgleich-Einstellung des Ausgabegerätes (Monitor, TV, Projektor, usw.) -PREFERENCES_WAVLEV;Die Qualität von Waveletebenen erhöhen -PREFERENCES_WLONE;Eine Ebene -PREFERENCES_WLTWO;Zwei Ebenen -PREFERENCES_WLZER;Nein PREFERENCES_WORKFLOW;Layout PROFILEPANEL_COPYPPASTE;Zu kopierende Parameter PROFILEPANEL_GLOBALPROFILES;Standardprofile diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index 8f08152d5..33df84742 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -1093,13 +1093,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PARTIALPASTE_WHITEBALANCE;White balance !PREFERENCES_ADD;Add !PREFERENCES_APPLNEXTSTARTUP;restart required -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1144,8 +1138,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PREFERENCES_DARKFRAMETEMPLATES;templates !PREFERENCES_DATEFORMAT;Date format !PREFERENCES_DATEFORMATHINT;You can use the following formatting strings:\n%y - year\n%m - month\n%d - day\n\nFor example, the ISO 8601 standard dictates the date format as follows:\n%y-%m-%d -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_DIRHOME;Home directory @@ -1155,7 +1147,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PREFERENCES_DIRSOFTWARE;Installation directory !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_EXPAUT;Expert !PREFERENCES_EXTERNALEDITOR;External Editor !PREFERENCES_FBROWSEROPTS;File Browser / Thumbnail Options !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) @@ -1198,26 +1189,19 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPPROFILEOPERATIONS;Group "Processing profile operations" !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. !PREFERENCES_MULTITAB;Multiple Editor Tabs Mode !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OUTDIR;Output Directory !PREFERENCES_OUTDIRFOLDER;Save to folder !PREFERENCES_OUTDIRFOLDERHINT;Save images to the selected folder. @@ -1252,8 +1236,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PREFERENCES_PSPATH;Adobe Photoshop installation directory !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT;Select main font !PREFERENCES_SELECTLANG;Select language @@ -1267,40 +1249,29 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar !PREFERENCES_SHTHRESHOLD;Threshold for clipped shadows -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETAB;Single Editor Tab Mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_STARTUPIMDIR;Image Directory at Startup -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_BROWSER;File Browser !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_TAB_GENERAL;General !PREFERENCES_TAB_IMPROC;Image Processing -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PREFERENCES_WORKFLOW;Layout !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index 0ab893c07..926931720 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -1016,14 +1016,8 @@ !PARTIALPASTE_WHITEBALANCE;White balance !PREFERENCES_ADD;Add !PREFERENCES_APPLNEXTSTARTUP;restart required -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1070,8 +1064,6 @@ !PREFERENCES_DARKFRAMETEMPLATES;templates !PREFERENCES_DATEFORMAT;Date format !PREFERENCES_DATEFORMATHINT;You can use the following formatting strings:\n%y - year\n%m - month\n%d - day\n\nFor example, the ISO 8601 standard dictates the date format as follows:\n%y-%m-%d -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_DIRHOME;Home directory @@ -1081,7 +1073,6 @@ !PREFERENCES_DIRSOFTWARE;Installation directory !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_EXPAUT;Expert !PREFERENCES_EXTERNALEDITOR;External Editor !PREFERENCES_FBROWSEROPTS;File Browser / Thumbnail Options !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) @@ -1127,12 +1118,7 @@ !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1140,7 +1126,6 @@ !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1149,7 +1134,6 @@ !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OUTDIR;Output Directory !PREFERENCES_OUTDIRFOLDER;Save to folder !PREFERENCES_OUTDIRFOLDERHINT;Save images to the selected folder. @@ -1185,8 +1169,6 @@ !PREFERENCES_PSPATH;Adobe Photoshop installation directory !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT;Select main font !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font @@ -1201,41 +1183,30 @@ !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar !PREFERENCES_SHTHRESHOLD;Threshold for clipped shadows -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETAB;Single Editor Tab Mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_STARTUPIMDIR;Image Directory at Startup -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_BROWSER;File Browser !PREFERENCES_TAB_COLORMGR;Color Management !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_TAB_GENERAL;General !PREFERENCES_TAB_IMPROC;Image Processing -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PREFERENCES_WORKFLOW;Layout !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol index b869ba90c..913a0ac1f 100644 --- a/rtdata/languages/Espanol +++ b/rtdata/languages/Espanol @@ -821,8 +821,6 @@ PREFERENCES_PROFILESAVECACHE;Guardar perfiles de procesamiento en memoria interm PREFERENCES_PROFILESAVEINPUT;Guardar perfiles de procesamiento junto con imagen de entrada PREFERENCES_PROPERTY;Propiedad PREFERENCES_PSPATH;Carpeta de instalación de Adobe Photoshop -PREFERENCES_RGBDTL_LABEL;Número máximo de hilos para reducción de ruido -PREFERENCES_RGBDTL_TOOLTIP;La Reducción de Ruido requiere como base 128MB de RAM para una imagen de 10MPix o 512MB para una imagen de 40MPix; más 128MB RAM por hilo de proceso.\nMientras más hilos corren en paralelo, más rápido es el procesamiento. Coloque “0” para que automáticamente se use tantos hilos como sea posible según la capacidad de su equipo. PREFERENCES_SELECTFONT;Seleccionar fuente PREFERENCES_SELECTLANG;Seleccionar idioma PREFERENCES_SELECTTHEME;Seleccionar tema @@ -842,7 +840,6 @@ PREFERENCES_TAB_BROWSER;Explorador de archivos PREFERENCES_TAB_COLORMGR;Gestión del color PREFERENCES_TAB_GENERAL;General PREFERENCES_TAB_IMPROC;Procesamiento de imágenes -PREFERENCES_TAB_PERFORMANCE;Rendimiento PREFERENCES_TAB_SOUND;Sonidos PREFERENCES_TP_LABEL;Panel de herramientas: PREFERENCES_TP_USEICONORTEXT;Usar iconos de pestaña en lugar de texto @@ -1838,13 +1835,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_CLUTSCACHE;HaldCLUT Cache !PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs !PREFERENCES_CMMBPC;Black point compensation @@ -1860,11 +1851,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !PREFERENCES_CURVEBBOXPOS_LEFT;Left !PREFERENCES_CURVEBBOXPOS_RIGHT;Right !PREFERENCES_D50_OLD;5000K -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. !PREFERENCES_GREY18_OLD;Yb=18 CIE L#50 @@ -1876,19 +1864,12 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. @@ -1910,23 +1891,13 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode -!PREFERENCES_SMA;Small (250x287) -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PROFILEPANEL_PDYNAMIC;Dynamic !QINFO_FRAMECOUNT;%2 frames !QINFO_HDR;HDR / %2 frame(s) diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara index 1c4a170bf..4b821ae94 100644 --- a/rtdata/languages/Euskara +++ b/rtdata/languages/Euskara @@ -1199,14 +1199,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PARTIALPASTE_TM_FATTAL;Dynamic range compression !PARTIALPASTE_VIBRANCE;Vibrance !PREFERENCES_ADD;Add -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1244,13 +1238,10 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PREFERENCES_DARKFRAMEFOUND;Found !PREFERENCES_DARKFRAMESHOTS;shots !PREFERENCES_DARKFRAMETEMPLATES;templates -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) !PREFERENCES_FLATFIELDFOUND;Found !PREFERENCES_FLATFIELDSDIR;Flat-fields directory @@ -1283,12 +1274,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1296,7 +1282,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1305,7 +1290,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files @@ -1325,8 +1309,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT;Select main font !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font @@ -1336,36 +1318,25 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PREFERENCES_SET;Set !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETAB;Single Editor Tab Mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PREFERENCES_WORKFLOW;Layout !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index d9e455778..beda0040a 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -981,14 +981,8 @@ PARTIALPASTE_WAVELETGROUP;Niveaux d'ondelette PARTIALPASTE_WHITEBALANCE;Balance des blancs PREFERENCES_ADD;Ajoute PREFERENCES_APPLNEXTSTARTUP;appliqué au prochain lancement -PREFERENCES_AUTLISLOW;Bas -PREFERENCES_AUTLISMAX;Max - Moyenne de toutes les tuiles -PREFERENCES_AUTLISSTD;Haut -PREFERENCES_AUTLISVLOW;Aucun -PREFERENCES_AUTLOW;Bas PREFERENCES_AUTOMONPROFILE;Utiliser automatiquement le profil de l'écran principal PREFERENCES_AUTOSAVE_TP_OPEN;Sauver automatiquement l'état ouvert/fermé\n des outils avant de fermer -PREFERENCES_AUTSTD;Standard PREFERENCES_BATCH_PROCESSING;Traitement par lot PREFERENCES_BEHADDALL;Tout à 'Ajoute' PREFERENCES_BEHADDALLHINT;Règle tous les paramètres sur le mode Ajoute.\nLa modification des paramètres dans le panneau d'édition en par lot sera des deltas par-rapport aux valeurs existantes @@ -1039,8 +1033,6 @@ PREFERENCES_DARKFRAMESHOTS;image(s) PREFERENCES_DARKFRAMETEMPLATES;modèle(s) PREFERENCES_DATEFORMAT;Format PREFERENCES_DATEFORMATHINT;Vous pouvez utiliser les paramètres de chaînes formatées suivants:\n%y : année\n%m : mois\n%d : jour\n\nPar exemple, le format de date française est:\n%d/%m/%y -PREFERENCES_DAUB_LABEL;Utiliser les ondelettes de Daubechies D6 au lieu de D4 -PREFERENCES_DAUB_TOOLTIP;Les outils de Réduction de Bruit et de Niveaux d'Ondelettes utilisent une ondelette de Debauchie mère. Si vous choisissez D6 au lieu de D4 vous augmentez le nombre de coéf. orthogonaux de Daubechies et augmentez probablement la qualité des niveaux de taille moyenne. Il n'y a pas de différence de consommation mémoire ou de temps de traitement entre les deux. PREFERENCES_DIRDARKFRAMES;Dossier des images de Trame Noire PREFERENCES_DIRECTORIES;Dossiers PREFERENCES_DIRHOME;Racine de mes documents personnels @@ -1050,7 +1042,6 @@ PREFERENCES_DIRSELECTDLG;Choix du dossier Image au lancement... PREFERENCES_DIRSOFTWARE;Dossier d'installation PREFERENCES_EDITORCMDLINE;Ligne de commande personnelle PREFERENCES_EDITORLAYOUT;Disposition de l'éditeur -PREFERENCES_EXPAUT;Expert PREFERENCES_EXTERNALEDITOR;Éditeur externe PREFERENCES_FBROWSEROPTS;Options du navigateur de fichiers et de vignettes PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Barre de menu de l'explorateur de fichiers uni-ligne\n(à désactiver pour les écrans de faible résolution) @@ -1096,12 +1087,7 @@ PREFERENCES_INTENT_SATURATION;Saturation PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Afficher vignette incluse dans fichier RAW si non édité PREFERENCES_LANG;Langage PREFERENCES_LANGAUTODETECT;Utiliser les paramètres linguistiques de l'OS -PREFERENCES_LEVAUTDN;Niveau de débruitage -PREFERENCES_LEVDN;Taille de la cellule -PREFERENCES_LISS;Adoucissement auto multi-zone -PREFERENCES_MAX;Maxi (Tuile) PREFERENCES_MAXRECENTFOLDERS;Nombre maximum de dossiers récents -PREFERENCES_MED;Moyen (Tuile/2) PREFERENCES_MENUGROUPEXTPROGS;Groupe "Ouvrir avec" PREFERENCES_MENUGROUPFILEOPERATIONS;Opérations sur les fichiers PREFERENCES_MENUGROUPLABEL;Label @@ -1109,7 +1095,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Opérations sur les profils PREFERENCES_MENUGROUPRANK;Classement PREFERENCES_MENUOPTIONS;Options du menu PREFERENCES_METADATA;Metadonnées -PREFERENCES_MIN;Mini (100x115) PREFERENCES_MONINTENT;Intention de rendu par défaut PREFERENCES_MONITOR;Moniteur PREFERENCES_MONPROFILE;Profil couleur par défaut @@ -1118,7 +1103,6 @@ PREFERENCES_MULTITAB;Éditeurs multiple PREFERENCES_MULTITABDUALMON;Éditeurs multiple, si possible sur un second moniteur PREFERENCES_NAVGUIDEBRUSH;Couleur du cadre dans le Navigateur PREFERENCES_NAVIGATIONFRAME;Navigation -PREFERENCES_NOISE;Réduction de Bruit PREFERENCES_OUTDIR;Dossier de sortie PREFERENCES_OUTDIRFOLDER;Dossier de sauvegarde PREFERENCES_OUTDIRFOLDERHINT;Place les images traitées dans le dossier selectionné @@ -1154,8 +1138,6 @@ PREFERENCES_PRTPROFILE;Profil couleur PREFERENCES_PSPATH;Dossier d'installation d'Adobe Photoshop PREFERENCES_REMEMBERZOOMPAN;Se souvenir de niveau de zoom et de la position de l'image PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Retient le niveau de zoom et la position de l'image courante lors de l'ouverture d'une nouvelle image.\n\nCette option ne fonctionne que dans le mode "Éditeur unique" et quand "Méthode de dématriçage utilisé pour l'aperçu à un zoom <100%" is set to "Idem PP3". -PREFERENCES_RGBDTL_LABEL;Nombre maximum d'unités de calcul pour la Réduction du bruit -PREFERENCES_RGBDTL_TOOLTIP;La réduction du bruit nécessite un minimum d'à peu près 128Mo de RAM pour une image de 10MPix ou 512Mo pour une image de 40MPix, ainsi que 128Mo de RAM supplémentaire par unité de calcul. Plus il y aura d'unités de calcul travaillant en parallèle, plus ce sera rapide. Laissez la valeur à "0" pour utiliser automatiquement autant d'unités de calcul que possible. PREFERENCES_SAVE_TP_OPEN_NOW;Sauver l'état ouvert/fermé maintenant PREFERENCES_SELECTFONT;Police principale PREFERENCES_SELECTFONT_COLPICKER;Police des pipette à couleur @@ -1170,37 +1152,26 @@ PREFERENCES_SHOWDATETIME;Voir la date et l'heure PREFERENCES_SHOWEXPOSURECOMPENSATION;Ajoute la compensation d'exposition PREFERENCES_SHOWFILMSTRIPTOOLBAR;Montrer la barre d'outil de la pellicule d'image ("filmstrip") PREFERENCES_SHTHRESHOLD;Seuil pour le dépassement de domaine inférieur -PREFERENCES_SIMPLAUT;Mode de l'outil PREFERENCES_SINGLETAB;Éditeur unique PREFERENCES_SINGLETABVERTAB;Éditeur unique, onglets verticaux -PREFERENCES_SMA;Petit (250x287) PREFERENCES_SND_BATCHQUEUEDONE;File de traitement terminée PREFERENCES_SND_HELP;Saisissez un chemin de fichier ou rien du tout (pour ne pas avoir de son). Pour Windows,\nsaisissez "SystemDefault", "SystemAsterisk" etc. pour utiliser les sons systèmes. PREFERENCES_SND_LNGEDITPROCDONE;Traitement de la zone de prévisualisation terminé PREFERENCES_SND_THRESHOLDSECS;après (s) PREFERENCES_STARTUPIMDIR;Répertoire Image au démarrage -PREFERENCES_STDAUT;Standard PREFERENCES_TAB_BROWSER;Navigateur de fichiers PREFERENCES_TAB_COLORMGR;Gestion des couleurs PREFERENCES_TAB_DYNAMICPROFILE;Règles de Profil Dynamique PREFERENCES_TAB_GENERAL;Général PREFERENCES_TAB_IMPROC;Traitement de l'image -PREFERENCES_TAB_PERFORMANCE;Performance PREFERENCES_TAB_SOUND;Sons PREFERENCES_THEME;Thème -PREFERENCES_TIMAX;Haut -PREFERENCES_TINB;Nombre de tuiles -PREFERENCES_TISTD;Standard PREFERENCES_TP_LABEL;Panneau des outils: PREFERENCES_TP_USEICONORTEXT;Utiliser des icônes au lieu de textes PREFERENCES_TP_VSCROLLBAR;Cacher la barre de défilement verticale PREFERENCES_TUNNELMETADATA;Copier les données Exif/IPTC/XMP tel quel dans le fichier de sortie PREFERENCES_USEBUNDLEDPROFILES;Utiliser les profils fournis PREFERENCES_VIEW;Point blanc du périphérique sortie (moniteur, TV, projecteur,...) -PREFERENCES_WAVLEV;Augmenter le nombre de niveau d'ondelette en qualité "haute" -PREFERENCES_WLONE;Un niveau -PREFERENCES_WLTWO;Deux niveaux -PREFERENCES_WLZER;Non PREFERENCES_WORKFLOW;Habitudes de travail PROFILEPANEL_COPYPPASTE;Paramètres à copier PROFILEPANEL_GLOBALPROFILES;Profils fournis diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek index 149ac5345..18f97324b 100644 --- a/rtdata/languages/Greek +++ b/rtdata/languages/Greek @@ -1198,14 +1198,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PARTIALPASTE_TM_FATTAL;Dynamic range compression !PARTIALPASTE_VIBRANCE;Vibrance !PREFERENCES_ADD;Add -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1243,13 +1237,10 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PREFERENCES_DARKFRAMEFOUND;Found !PREFERENCES_DARKFRAMESHOTS;shots !PREFERENCES_DARKFRAMETEMPLATES;templates -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) !PREFERENCES_FLATFIELDFOUND;Found !PREFERENCES_FLATFIELDSDIR;Flat-fields directory @@ -1282,12 +1273,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1295,7 +1281,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1304,7 +1289,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files @@ -1324,8 +1308,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT;Select main font !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font @@ -1335,36 +1317,25 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PREFERENCES_SET;Set !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETAB;Single Editor Tab Mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PREFERENCES_WORKFLOW;Layout !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew index fb8b0d776..5364b3745 100644 --- a/rtdata/languages/Hebrew +++ b/rtdata/languages/Hebrew @@ -1199,14 +1199,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PARTIALPASTE_TM_FATTAL;Dynamic range compression !PARTIALPASTE_VIBRANCE;Vibrance !PREFERENCES_ADD;Add -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1244,13 +1238,10 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PREFERENCES_DARKFRAMEFOUND;Found !PREFERENCES_DARKFRAMESHOTS;shots !PREFERENCES_DARKFRAMETEMPLATES;templates -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) !PREFERENCES_FLATFIELDFOUND;Found !PREFERENCES_FLATFIELDSDIR;Flat-fields directory @@ -1283,12 +1274,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1296,7 +1282,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1305,7 +1290,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files @@ -1325,8 +1309,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT;Select main font !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font @@ -1336,36 +1318,25 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PREFERENCES_SET;Set !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETAB;Single Editor Tab Mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PREFERENCES_WORKFLOW;Layout !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano index 35369cb44..5d22d29c5 100644 --- a/rtdata/languages/Italiano +++ b/rtdata/languages/Italiano @@ -726,8 +726,6 @@ PREFERENCES_PROFILESAVECACHE;Salva il profilo di sviluppo nella memoria PREFERENCES_PROFILESAVEINPUT;Salva il profilo di sviluppo a fianco del file originario PREFERENCES_PROPERTY;Proprietà PREFERENCES_PSPATH;Cartella d'installazione di Adobe Photoshop -PREFERENCES_RGBDTL_LABEL;Numero massimo di thread per la Riduzione Rumore -PREFERENCES_RGBDTL_TOOLTIP;La Riduzione Rumore richiede un minimo di circa 128MB di RAM per un'immagine di 10MPixel o 512MB per una di 40MPixel più 128MB di RAM per ogni thread. Più thread vengono eseguiti in parallelo, più rapida sarà l'elaborazione. Lascia l'impostazione a "0" per usare automaticamente quanti più thread possibili. PREFERENCES_SELECTFONT;Seleziona il carattere PREFERENCES_SELECTLANG;Seleziona la lingua PREFERENCES_SELECTTHEME;Seleziona il tema @@ -747,7 +745,6 @@ PREFERENCES_TAB_BROWSER;Navigatore PREFERENCES_TAB_COLORMGR;Gestione Colore PREFERENCES_TAB_GENERAL;Generale PREFERENCES_TAB_IMPROC;Elaborazione immagine -PREFERENCES_TAB_PERFORMANCE;Prestazioni PREFERENCES_TAB_SOUND;Suoni PREFERENCES_TP_LABEL;Pannello Strumenti: PREFERENCES_TP_USEICONORTEXT;Utilizza le icone delle schede anziché il testo @@ -1709,13 +1706,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_CLUTSCACHE;HaldCLUT Cache !PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs !PREFERENCES_CLUTSDIR;HaldCLUT directory @@ -1732,11 +1723,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PREFERENCES_CURVEBBOXPOS_LEFT;Left !PREFERENCES_CURVEBBOXPOS_RIGHT;Right !PREFERENCES_D50_OLD;5000K -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. !PREFERENCES_GREY18_OLD;Yb=18 CIE L#50 @@ -1748,19 +1736,12 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. @@ -1782,23 +1763,13 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode -!PREFERENCES_SMA;Small (250x287) -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PROFILEPANEL_PDYNAMIC;Dynamic !QINFO_FRAMECOUNT;%2 frames !QINFO_HDR;HDR / %2 frame(s) diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index 475a675bf..e4f12585c 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -1046,14 +1046,8 @@ PARTIALPASTE_VIGNETTING;周辺光量補正 PARTIALPASTE_WHITEBALANCE;ホワイトバランス PREFERENCES_ADD;追加 PREFERENCES_APPLNEXTSTARTUP;要再起動 -PREFERENCES_AUTLISLOW;低 -PREFERENCES_AUTLISMAX;最大 - 全タイルの平均 -PREFERENCES_AUTLISSTD;高 -PREFERENCES_AUTLISVLOW;なし -PREFERENCES_AUTLOW;低 PREFERENCES_AUTOMONPROFILE;OSのメインモニター・プロファイルを使用 PREFERENCES_AUTOSAVE_TP_OPEN;プログラム終了の前に、機能パネルの開閉状態を自動的に保存する -PREFERENCES_AUTSTD;標準 PREFERENCES_BATCH_PROCESSING;バッチ処理 PREFERENCES_BEHADDALL;すべて '追加' PREFERENCES_BEHADDALLHINT;すべてのパラメータを 追加モードにします\nバッチツールパネルで設定される調整値が、各画像の既定値に加算されます @@ -1100,8 +1094,6 @@ PREFERENCES_DARKFRAMESHOTS;ショット PREFERENCES_DARKFRAMETEMPLATES;テンプレート PREFERENCES_DATEFORMAT;日付の形式 PREFERENCES_DATEFORMATHINT;次の書式を使用することができます:\n%y : 年\n%m : 月\n%d : 日\n\n例として, ハンガリアン記法の日付:\n%y/%m/%d -PREFERENCES_DAUB_LABEL;ドビッシー関数のタイプ D4の代わりにD6を使う -PREFERENCES_DAUB_TOOLTIP;ノイズ低減とウェーブレットのレベルツールはマザーウェーブレットにドビッシーを使っています。このタイプでD4の代わりにD6を選択すると、直交系であるドビッシーの係数が増えるので、恐らくスケールの小さいレベルは質が向上するでしょう。タイプを変えても処理時間やメモリー使用量に影響はありません。 PREFERENCES_DIRDARKFRAMES;ダークフレーム・ディレクトリ PREFERENCES_DIRECTORIES;ディレクトリ PREFERENCES_DIRHOME;ホーム・ディレクトリ @@ -1111,7 +1103,6 @@ PREFERENCES_DIRSELECTDLG;起動時の画像ディレクトリ選択... PREFERENCES_DIRSOFTWARE;インストール・ディレクトリ PREFERENCES_EDITORCMDLINE;カスタムコマンドライン PREFERENCES_EDITORLAYOUT;編集 レイアウト -PREFERENCES_EXPAUT;高度 PREFERENCES_EXTERNALEDITOR;外部エディタ PREFERENCES_FBROWSEROPTS;ファイルブラウザ/サムネイルのオプション PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;ファイルブラウザでの一行のツールバー (低解像度表示用に選択解除) @@ -1157,12 +1148,7 @@ PREFERENCES_INTENT_SATURATION;彩度 PREFERENCES_INTERNALTHUMBIFUNTOUCHED;rawファイルが未編集の場合 JPEGのサムネイルを表示 PREFERENCES_LANG;言語 PREFERENCES_LANGAUTODETECT;OSの言語設定を使用 -PREFERENCES_LEVAUTDN;ノイズ低減のレベル -PREFERENCES_LEVDN;セルのサイズ -PREFERENCES_LISS;自動(多分割スムージング) -PREFERENCES_MAX;最大(タイル) PREFERENCES_MAXRECENTFOLDERS;直近のフォルダーの最大数 -PREFERENCES_MED;中 (タイルの半分) PREFERENCES_MENUGROUPEXTPROGS;"..で開く"のグループ PREFERENCES_MENUGROUPFILEOPERATIONS;"ファイル操作"のグループ PREFERENCES_MENUGROUPLABEL;"カラーラベル"のグループ @@ -1170,7 +1156,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;"処理プロファイル操作"のグル PREFERENCES_MENUGROUPRANK;"ランキング"のグループ PREFERENCES_MENUOPTIONS;メニューオプションの状況 PREFERENCES_METADATA;メタデータ -PREFERENCES_MIN;最小 (100x115) PREFERENCES_MONINTENT;デフォルトのモニターインテント PREFERENCES_MONITOR;モニター PREFERENCES_MONPROFILE;デフォルトのモニタープロファイル @@ -1179,7 +1164,6 @@ PREFERENCES_MULTITAB;マルチ編集タブモード PREFERENCES_MULTITABDUALMON;独自のウィンドウモードによるマルチ編集タブ PREFERENCES_NAVGUIDEBRUSH;ナビゲーターのガイドカラー PREFERENCES_NAVIGATIONFRAME;ナビゲーション -PREFERENCES_NOISE;ノイズ低減 PREFERENCES_OUTDIR;出力ディレクトリ PREFERENCES_OUTDIRFOLDER;フォルダに保存 PREFERENCES_OUTDIRFOLDERHINT;選択したフォルダに画像を保存します @@ -1215,8 +1199,6 @@ PREFERENCES_PRTPROFILE;カラープロファイル PREFERENCES_PSPATH;Adobe Photoshop のインストール・ディレクトリ PREFERENCES_REMEMBERZOOMPAN;ズームレベルとパン速度を記憶する PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;現在の画像のズームレベルとパン速度を記憶し、新しく開く画像に適用\n\nこのオプションが使えるのは、編集画面のモードが“シングル編集”で、“プレビューのズームレベルが100%以下の場合に使うデモザイク”が“pp3に従う”と設定されている場合だけです。 -PREFERENCES_RGBDTL_LABEL;ノイズ低減とウェーブレットのための最大スレッド数 -PREFERENCES_RGBDTL_TOOLTIP;ノイズ低減は、10メガピクセル画像では128MB程度、40メガピクセル画像では512MBを必要とします、そして更にスレッドごとに128MBが必要です。複数のスレッドを同時に実行すると演算が速くなります。自動的にできる限り多くのスレッドを使用するには"0"の設定のままにします PREFERENCES_SAVE_TP_OPEN_NOW;機能パネルの今の開閉状態を保存する PREFERENCES_SELECTFONT;フォント選択 PREFERENCES_SELECTFONT_COLPICKER;カラーピッカーのフォントを選択 @@ -1231,41 +1213,30 @@ PREFERENCES_SHOWDATETIME;日付表示 PREFERENCES_SHOWEXPOSURECOMPENSATION;露光補正追加 PREFERENCES_SHOWFILMSTRIPTOOLBAR;画像スライドのツールバーを表示する PREFERENCES_SHTHRESHOLD;シャドウ・クリッピング領域のしきい値 -PREFERENCES_SIMPLAUT;ツールのモード PREFERENCES_SINGLETAB;シングルタブモードモード PREFERENCES_SINGLETABVERTAB;シングル編集タブモード, 垂直タブ -PREFERENCES_SMA;小 (250x287) PREFERENCES_SND_BATCHQUEUEDONE;キュー処理 終了 PREFERENCES_SND_HELP;ファイルパスを入力 または空欄(無音).\nWindowsはシステムサウンドの "SystemDefault", "SystemAsterisk"など..\nLinuxはシステムサウンドの "complete", "window-attention"などを使用します PREFERENCES_SND_LNGEDITPROCDONE;編集処理 終了 PREFERENCES_SND_THRESHOLDSECS;秒後 PREFERENCES_STARTUPIMDIR;起動時の画像・ディレクトリ -PREFERENCES_STDAUT;標準 PREFERENCES_TAB_BROWSER;ファイルブラウザ PREFERENCES_TAB_COLORMGR;カラーマネジメント PREFERENCES_TAB_DYNAMICPROFILE;ダイナミックプロファイルの規定 PREFERENCES_TAB_GENERAL;一般 PREFERENCES_TAB_IMPROC;画像処理 -PREFERENCES_TAB_PERFORMANCE;パフォーマンスとクォリティ PREFERENCES_TAB_SOUND;サウンド PREFERENCES_THEME;テーマ PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;埋め込まれているJPEGのプレビュー PREFERENCES_THUMBNAIL_INSPECTOR_MODE;表示する画像 PREFERENCES_THUMBNAIL_INSPECTOR_RAW;ニュートラルなrawレンダリング PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;埋め込まれているJPEGがフルサイズの場合、指定がなければニュートラルなrawレンダリングで表示 -PREFERENCES_TIMAX;多数 -PREFERENCES_TINB;タイル数 -PREFERENCES_TISTD;標準 PREFERENCES_TP_LABEL;ツール パネル: PREFERENCES_TP_USEICONORTEXT;テキストの代わりにタブアイコンを使用 PREFERENCES_TP_VSCROLLBAR;ツールパネルの垂直スクロールバーを隠す PREFERENCES_TUNNELMETADATA;Exif/IPTC/XMPを変更を加えずに出力ファイルにコピー PREFERENCES_USEBUNDLEDPROFILES;付属のプロファイルを使用 PREFERENCES_VIEW;出力デバイスのホワイトバランス設定 (モニター, TV, プロジェクター,観視...) -PREFERENCES_WAVLEV;’高い’質の場合、ウェーブレット変換のレベルを上げる -PREFERENCES_WLONE;レベル1 -PREFERENCES_WLTWO;レベル2 -PREFERENCES_WLZER;上げない PREFERENCES_WORKFLOW;レイアウト PROFILEPANEL_COPYPPASTE;コピーするパラメータ PROFILEPANEL_GLOBALPROFILES;付属のプロファイル diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian index 1db1390a7..3cfe5ad75 100644 --- a/rtdata/languages/Latvian +++ b/rtdata/languages/Latvian @@ -1199,14 +1199,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PARTIALPASTE_TM_FATTAL;Dynamic range compression !PARTIALPASTE_VIBRANCE;Vibrance !PREFERENCES_ADD;Add -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1244,13 +1238,10 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PREFERENCES_DARKFRAMEFOUND;Found !PREFERENCES_DARKFRAMESHOTS;shots !PREFERENCES_DARKFRAMETEMPLATES;templates -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) !PREFERENCES_FLATFIELDFOUND;Found !PREFERENCES_FLATFIELDSDIR;Flat-fields directory @@ -1283,12 +1274,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1296,7 +1282,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1305,7 +1290,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files @@ -1325,8 +1309,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT;Select main font !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font @@ -1336,36 +1318,25 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PREFERENCES_SET;Set !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETAB;Single Editor Tab Mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PREFERENCES_WORKFLOW;Layout !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index c094ed9a0..df2aecb99 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -1406,13 +1406,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. !PREFERENCES_BEHSETALL;All to 'Set' @@ -1441,11 +1435,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !PREFERENCES_D55;5500K !PREFERENCES_D60;6000K !PREFERENCES_D65;6500K -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FLUOF2;Fluorescent F2 !PREFERENCES_FLUOF7;Fluorescent F7 !PREFERENCES_FLUOF11;Fluorescent F11 @@ -1470,21 +1461,14 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. @@ -1500,34 +1484,21 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !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 !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode -!PREFERENCES_SMA;Small (250x287) -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PROFILEPANEL_GLOBALPROFILES;Bundled profiles !PROFILEPANEL_MODE_TIP;Processing profile fill mode.\n\nButton pressed: partial profiles will be converted to full profiles; the missing values will be replaced with hard-coded defaults.\n\nButton released: profiles will be applied as they are, altering only those values which they contain. !PROFILEPANEL_MYPROFILES;My profiles diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands index 3487c4091..40f0a9b09 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -906,13 +906,7 @@ PARTIALPASTE_WAVELETGROUP;Wavelet verwerking PARTIALPASTE_WHITEBALANCE;Witbalans PREFERENCES_ADD;Toevoegen PREFERENCES_APPLNEXTSTARTUP;herstart vereist -PREFERENCES_AUTLISLOW;Laag -PREFERENCES_AUTLISMAX;Max - Gemiddelde van alle tegels -PREFERENCES_AUTLISSTD;Hoog -PREFERENCES_AUTLISVLOW;Geen -PREFERENCES_AUTLOW;Laag PREFERENCES_AUTOMONPROFILE;Gebruik automatisch het standaard monitorprofiel \nvan het besturingsysteem -PREFERENCES_AUTSTD;Standaard PREFERENCES_BATCH_PROCESSING;Batch-verwerking PREFERENCES_BEHADDALL;Alles op 'Toevoegen' PREFERENCES_BEHADDALLHINT;Zet alle parameters in de Toevoegen mode.\nWijzigingen van parameters in de batch tool zijn deltas op de opgeslagen waarden. @@ -956,8 +950,6 @@ PREFERENCES_DARKFRAMESHOTS;foto's PREFERENCES_DARKFRAMETEMPLATES;sjablonen PREFERENCES_DATEFORMAT;Datumformaat PREFERENCES_DATEFORMATHINT;U kunt de volgende formaten gebruiken:\n%y : jaar\n%m : maand\n%d : dag\n\nHet Nederlandse datumformaat is bijvoorbeeld:\n%d/%m/%y -PREFERENCES_DAUB_LABEL;Gebruik Daubechies D6 wavelets in plaats van D4 -PREFERENCES_DAUB_TOOLTIP;De Ruisonderdrukking en Wavelet niveaus gebruiken de Debauchies moeder wavelet. Als je D6 gebruikt in plaats van D4 vergroot het aantal orthogonale Daubechies coëfficiënten en dit verbeterd waarschijnlijk de kwaliteit van de lage niveaus. PREFERENCES_DIRDARKFRAMES;Map met donkerframes PREFERENCES_DIRHOME;Standaardmap PREFERENCES_DIRLAST;Laatst bezochte map @@ -965,7 +957,6 @@ PREFERENCES_DIROTHER;Anders PREFERENCES_DIRSELECTDLG;Selecteer standaardmap bij opstarten... PREFERENCES_DIRSOFTWARE;Installatiemap PREFERENCES_EDITORLAYOUT;Bewerkingsvenster -PREFERENCES_EXPAUT;Expert PREFERENCES_EXTERNALEDITOR;Externe editor PREFERENCES_FBROWSEROPTS;Opties bestandsnavigator PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Enkele rij navigator werkbalk (de-activeer voor lage resolutie) @@ -1009,12 +1000,7 @@ PREFERENCES_INTENT_RELATIVE;Relatieve colorimetrie PREFERENCES_INTENT_SATURATION;Verzadiging PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Toon interne JPEG-miniatuur indien onbewerkt PREFERENCES_LANGAUTODETECT;Gebruik taalinstellingen pc -PREFERENCES_LEVAUTDN;Ruisonderdrukking niveau -PREFERENCES_LEVDN;Cell grootte -PREFERENCES_LISS;Auto multi-zone verzachten -PREFERENCES_MAX;Maxi (Tegel) PREFERENCES_MAXRECENTFOLDERS;Maximum aantal recente mappen -PREFERENCES_MED;Gemiddeld (Tegel/2) PREFERENCES_MENUGROUPEXTPROGS;Groepeer open met PREFERENCES_MENUGROUPFILEOPERATIONS;Groepeer bestandsbewerkingen PREFERENCES_MENUGROUPLABEL;Groepeer labelen @@ -1022,7 +1008,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Groepeer profielbewerkingen PREFERENCES_MENUGROUPRANK;Groepeer markering PREFERENCES_MENUOPTIONS;Menu-opties PREFERENCES_METADATA;Metadata -PREFERENCES_MIN;Mini (100x115) PREFERENCES_MONINTENT;Standaard monitor weergave PREFERENCES_MONITOR;Monitor PREFERENCES_MONPROFILE;Standaard kleurprofiel @@ -1031,7 +1016,6 @@ PREFERENCES_MULTITAB;Multi-tab: elke foto opent in nieuw tabvenster PREFERENCES_MULTITABDUALMON;Multi-tab, indien beschikbaar op tweede monitor PREFERENCES_NAVGUIDEBRUSH;Navigator randkleur PREFERENCES_NAVIGATIONFRAME;Navigatie -PREFERENCES_NOISE;Ruisonderdrukking PREFERENCES_OUTDIR;Uitvoermap PREFERENCES_OUTDIRFOLDER;Sla op in map PREFERENCES_OUTDIRFOLDERHINT;Sla foto's op in andere map @@ -1065,8 +1049,6 @@ PREFERENCES_PRTPROFILE;Kleurprofiel PREFERENCES_PSPATH;Installatiemap Adobe Photoshop PREFERENCES_REMEMBERZOOMPAN;Onthoud zoom % en pan startpunt PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Onthoud het zoom % en pan startpunt van de huidige afbeelding als er een nieuwe afbeelding wordt geopend.\n\nDeze optie werkt alleen in "Single Editor Tab Mode" en wanneer "Demozaïekmethode van het voorbeeld <100% zoom" hetzelfde is als "Gelijk aan PP3". -PREFERENCES_RGBDTL_LABEL;Maximum aantal 'threads' voor Ruisonderdrukking en Wavelet (gedeeld door 2) -PREFERENCES_RGBDTL_TOOLTIP;Ruisonderdrukking en Wavelet gebruiken ongeveer 128MB RAM voor een 10MPix afbeelding, of 512MB voor een 40MPix afbeelding en additioneel 128MB RAM per thread. Hoe meer threads parallel worden gebruikt, hoe sneller de bewerking. Laat de instelling op "0" staan om automatisch het maximale aantal threads te gebruiken dat mogelijk is. PREFERENCES_SELECTFONT;Kies lettertype PREFERENCES_SELECTFONT_COLPICKER;Font van de Kleurkiezer PREFERENCES_SELECTLANG;Selecteer taal @@ -1080,36 +1062,25 @@ PREFERENCES_SHOWDATETIME;Toon datum en tijd PREFERENCES_SHOWEXPOSURECOMPENSATION;Toon belichtingscompensatie PREFERENCES_SHOWFILMSTRIPTOOLBAR;Toon filmstrip werkbalk PREFERENCES_SHTHRESHOLD;Grenswaarde onderbelichting -PREFERENCES_SIMPLAUT;Gereedschap PREFERENCES_SINGLETAB;Enkel-tab: foto's openen in zelfde tabvenster PREFERENCES_SINGLETABVERTAB;Enkel-tab ('filmstrip') modus met verticale tabs -PREFERENCES_SMA;Klein (250x287) PREFERENCES_SND_BATCHQUEUEDONE;Verwerkingsrij klaar PREFERENCES_SND_HELP;Typ bestandsnaam (of niets: geen geluid).\nWindows: gebruik 'SystemDefault', 'SystemAsterisk', etc. voor systeemgeluiden.\nLinux: gebruik "complete", "window-attention" etc. voor systeemgeluiden PREFERENCES_SND_LNGEDITPROCDONE;Bewerking klaar PREFERENCES_SND_THRESHOLDSECS;na seconden PREFERENCES_STARTUPIMDIR;Standaardmap bij opstarten -PREFERENCES_STDAUT;Standaard PREFERENCES_TAB_BROWSER;Bestandsnavigator PREFERENCES_TAB_COLORMGR;Kleurbeheer PREFERENCES_TAB_DYNAMICPROFILE;Dynamisch Profielregel PREFERENCES_TAB_GENERAL;Algemeen PREFERENCES_TAB_IMPROC;Beeldverwerking -PREFERENCES_TAB_PERFORMANCE;Prestaties en Kwaliteit PREFERENCES_TAB_SOUND;Geluiden -PREFERENCES_TIMAX;Hoog -PREFERENCES_TINB;Aantal tegles -PREFERENCES_TISTD;Standaard PREFERENCES_TP_LABEL;Gereedschapspaneel: PREFERENCES_TP_USEICONORTEXT;Gebruik iconen ipv. tekst voor de tabbladen PREFERENCES_TP_VSCROLLBAR;Verberg de schuifbalk van het gereedschapspaneel PREFERENCES_TUNNELMETADATA;Kopieer Exif/IPTC/XMP-data onveranderd naar uitvoerbestand PREFERENCES_USEBUNDLEDPROFILES;Gebruik gebundelde profielen PREFERENCES_VIEW;Witbalans instelling van het uitvoerapparaat (monitor, TV, projector...) -PREFERENCES_WAVLEV;Vergroot wavelet ninveau voor kwaliteit 'hoog' -PREFERENCES_WLONE;Eén niveau -PREFERENCES_WLTWO;Twee niveaus -PREFERENCES_WLZER;Nee PREFERENCES_WORKFLOW;Layout PROFILEPANEL_COPYPPASTE;Te kopiëren parameters PROFILEPANEL_GLOBALPROFILES;Gebundelde profielen diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM index e2ccb2212..84870d5ab 100644 --- a/rtdata/languages/Norsk BM +++ b/rtdata/languages/Norsk BM @@ -1198,14 +1198,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PARTIALPASTE_TM_FATTAL;Dynamic range compression !PARTIALPASTE_VIBRANCE;Vibrance !PREFERENCES_ADD;Add -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1243,13 +1237,10 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_DARKFRAMEFOUND;Found !PREFERENCES_DARKFRAMESHOTS;shots !PREFERENCES_DARKFRAMETEMPLATES;templates -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) !PREFERENCES_FLATFIELDFOUND;Found !PREFERENCES_FLATFIELDSDIR;Flat-fields directory @@ -1282,12 +1273,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1295,7 +1281,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1304,7 +1289,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files @@ -1324,8 +1308,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT;Select main font !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font @@ -1335,36 +1317,25 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_SET;Set !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETAB;Single Editor Tab Mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PREFERENCES_WORKFLOW;Layout !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index d9e513e34..93d611257 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -776,8 +776,6 @@ PREFERENCES_PROFILESAVECACHE;Zapisz parametry przetwarzania w pamięci podręczn PREFERENCES_PROFILESAVEINPUT;Zapisz parametry przetwarzania obok pliku wejściowego PREFERENCES_PROPERTY;Własność PREFERENCES_PSPATH;Katalog w którym zainstalowany jest Adobe Photoshop -PREFERENCES_RGBDTL_LABEL;Maksymalna ilość wątków redukcji szumów -PREFERENCES_RGBDTL_TOOLTIP;Redukcja szumów potrzebuje około 128MB RAMu dla zdjęcia 10Mpix oraz 512MB dla zdjęcia 40Mpix, i dodatkowo 128MB dla każdego wątku. Im większa liczba równoległych wątków, tym krótszy czas egzekucji. Zostawienie ustawienia na "0" automatycznie użyje tyle wątków, ile możliwe. PREFERENCES_SELECTFONT;Wybierz czcionkę PREFERENCES_SELECTLANG;Wybierz język PREFERENCES_SELECTTHEME;Wybierz temat @@ -797,7 +795,6 @@ PREFERENCES_TAB_BROWSER;Przeglądarka plików PREFERENCES_TAB_COLORMGR;Zarządzanie kolorami PREFERENCES_TAB_GENERAL;Ogólne PREFERENCES_TAB_IMPROC;Przetwarzanie obrazu -PREFERENCES_TAB_PERFORMANCE;Wydajność PREFERENCES_TAB_SOUND;Dźwięki PREFERENCES_TP_LABEL;Panel narzędzi: PREFERENCES_TP_USEICONORTEXT;Uzyj ikon w zakładkach zamiast tekstowych etykiet @@ -1786,13 +1783,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_CLUTSCACHE;HaldCLUT Cache !PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs !PREFERENCES_CMMBPC;Black point compensation @@ -1808,11 +1799,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PREFERENCES_CURVEBBOXPOS_LEFT;Left !PREFERENCES_CURVEBBOXPOS_RIGHT;Right !PREFERENCES_D50_OLD;5000K -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. !PREFERENCES_GREY18_OLD;Yb=18 CIE L#50 @@ -1824,19 +1812,12 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. @@ -1858,23 +1839,13 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode -!PREFERENCES_SMA;Small (250x287) -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PROFILEPANEL_PDYNAMIC;Dynamic !QINFO_FRAMECOUNT;%2 frames !QINFO_HDR;HDR / %2 frame(s) diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters) index fe92b9823..b7cb8a842 100644 --- a/rtdata/languages/Polish (Latin Characters) +++ b/rtdata/languages/Polish (Latin Characters) @@ -776,8 +776,6 @@ PREFERENCES_PROFILESAVECACHE;Zapisz parametry przetwarzania w pamieci podrecznej PREFERENCES_PROFILESAVEINPUT;Zapisz parametry przetwarzania obok pliku wejsciowego PREFERENCES_PROPERTY;Wlasnosc PREFERENCES_PSPATH;Katalog w ktorym zainstalowany jest Adobe Photoshop -PREFERENCES_RGBDTL_LABEL;Maksymalna ilosc watkow redukcji szumow -PREFERENCES_RGBDTL_TOOLTIP;Redukcja szumow potrzebuje okolo 128MB RAMu dla zdjecia 10Mpix oraz 512MB dla zdjecia 40Mpix, i dodatkowo 128MB dla kazdego watku. Im wieksza liczba rownoleglych watkow, tym krotszy czas egzekucji. Zostawienie ustawienia na "0" automatycznie uzyje tyle watkow, ile mozliwe. PREFERENCES_SELECTFONT;Wybierz czcionke PREFERENCES_SELECTLANG;Wybierz jezyk PREFERENCES_SELECTTHEME;Wybierz temat @@ -797,7 +795,6 @@ PREFERENCES_TAB_BROWSER;Przegladarka plikow PREFERENCES_TAB_COLORMGR;Zarzadzanie kolorami PREFERENCES_TAB_GENERAL;Ogolne PREFERENCES_TAB_IMPROC;Przetwarzanie obrazu -PREFERENCES_TAB_PERFORMANCE;Wydajnosc PREFERENCES_TAB_SOUND;Dzwieki PREFERENCES_TP_LABEL;Panel narzedzi: PREFERENCES_TP_USEICONORTEXT;Uzyj ikon w zakladkach zamiast tekstowych etykiet @@ -1786,13 +1783,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_CLUTSCACHE;HaldCLUT Cache !PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs !PREFERENCES_CMMBPC;Black point compensation @@ -1808,11 +1799,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !PREFERENCES_CURVEBBOXPOS_LEFT;Left !PREFERENCES_CURVEBBOXPOS_RIGHT;Right !PREFERENCES_D50_OLD;5000K -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. !PREFERENCES_GREY18_OLD;Yb=18 CIE L#50 @@ -1824,19 +1812,12 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. @@ -1858,23 +1839,13 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode -!PREFERENCES_SMA;Small (250x287) -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PROFILEPANEL_PDYNAMIC;Dynamic !QINFO_FRAMECOUNT;%2 frames !QINFO_HDR;HDR / %2 frame(s) diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index 915cd5fb0..d81457ead 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -1013,14 +1013,8 @@ PARTIALPASTE_VIGNETTING;Correção de vinheta PARTIALPASTE_WHITEBALANCE;Balanço de branco PREFERENCES_ADD;Adicionar PREFERENCES_APPLNEXTSTARTUP;é necessário reiniciar -PREFERENCES_AUTLISLOW;Baixo -PREFERENCES_AUTLISMAX;Max - Média de todos os mosaicos -PREFERENCES_AUTLISSTD;Alto -PREFERENCES_AUTLISVLOW;Nenhum -PREFERENCES_AUTLOW;Baixo PREFERENCES_AUTOMONPROFILE;Usar o perfil de cores do monitor principal do sistema operacional PREFERENCES_AUTOSAVE_TP_OPEN;Salvar automaticamente ferramentas recolhidas/expandidas\nestado antes de sair -PREFERENCES_AUTSTD;Padrão PREFERENCES_BATCH_PROCESSING;Processamento em Lote PREFERENCES_BEHADDALL;Tudo para 'Adicionar' PREFERENCES_BEHADDALLHINT;Definir todos os parâmetros para o Adicionar modo.\nAjustes de parâmetros no painel de ferramentas de lote serão deltas para os valores armazenados. @@ -1067,8 +1061,6 @@ PREFERENCES_DARKFRAMESHOTS;tiros PREFERENCES_DARKFRAMETEMPLATES;modelos PREFERENCES_DATEFORMAT;Formato de data PREFERENCES_DATEFORMATHINT;Podes usar as seguintes sequências de formatação:\n%y - ano\n%m - mês\n%d - dia\n\nPor exemplo, o padrão ISO 8601 dita o formato de data da seguinte forma:\n%y-%m-%d -PREFERENCES_DAUB_LABEL;Use as wavelets Daubechies D6 em vez de D4 -PREFERENCES_DAUB_TOOLTIP;As ferramentas Redução de Ruído e Níveis de Wavelet usam uma wavelet mãe Daubechies. A escolha de D6 em vez de D4, aumentará o número de coeficientes ortogonais Daubechies e a provável melhora da qualidade dos níveis de pequena escala, sem aumento de memória ou tempo de processamento entre os dois. PREFERENCES_DIRDARKFRAMES;Diretório de quadros escuros PREFERENCES_DIRECTORIES;Diretórios PREFERENCES_DIRHOME;Diretório inicial @@ -1078,7 +1070,6 @@ PREFERENCES_DIRSELECTDLG;Selecione Diretório de Imagens na Inicialização... PREFERENCES_DIRSOFTWARE;Diretório de instalação PREFERENCES_EDITORCMDLINE;Linha de comando personalizada PREFERENCES_EDITORLAYOUT;Layout do Editor -PREFERENCES_EXPAUT;Especialista PREFERENCES_EXTERNALEDITOR;Editor Externo PREFERENCES_FBROWSEROPTS;Navegador de Arquivos / Opções de Miniaturas PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Barra de ferramentas do navegador de arquivos de linha única\n(desmarque para exibição de baixa resolução) @@ -1124,12 +1115,7 @@ PREFERENCES_INTENT_SATURATION;Saturação PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Mostrar miniatura JPEG incorporada se raw não estiver editada PREFERENCES_LANG;Linguagem PREFERENCES_LANGAUTODETECT;Use a linguagem do sistema -PREFERENCES_LEVAUTDN;Nível de remoção de ruídos -PREFERENCES_LEVDN;Tamanho da célula -PREFERENCES_LISS;Auto-suavização multizona -PREFERENCES_MAX;Maxi (Mosaico) PREFERENCES_MAXRECENTFOLDERS;Número máximo de pastas recentes -PREFERENCES_MED;Médio (Mosaico/2) PREFERENCES_MENUGROUPEXTPROGS;Grupo "Abrir com" PREFERENCES_MENUGROUPFILEOPERATIONS;Grupo "operações de Arquivo" PREFERENCES_MENUGROUPLABEL;Grupo "Etiqueta de cor" @@ -1137,7 +1123,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Grupo "Operações de perfil de processam PREFERENCES_MENUGROUPRANK;Grupo "Rank" PREFERENCES_MENUOPTIONS;Opções do Menu de Contexto PREFERENCES_METADATA;Metadados -PREFERENCES_MIN;Mini (100x115) PREFERENCES_MONINTENT;Intenção de renderização padrão PREFERENCES_MONITOR;Monitor PREFERENCES_MONPROFILE;Perfil de cor padrão @@ -1146,7 +1131,6 @@ PREFERENCES_MULTITAB;Modo de Mútiplas Abas do Editor PREFERENCES_MULTITABDUALMON;Múltiplas Abas do Editor no Modo de Janela Própria PREFERENCES_NAVGUIDEBRUSH;Cor do guia do navegador PREFERENCES_NAVIGATIONFRAME;Navegação -PREFERENCES_NOISE;Redução de Ruído PREFERENCES_OUTDIR;Diretório de Saída PREFERENCES_OUTDIRFOLDER;Salvar na pasta PREFERENCES_OUTDIRFOLDERHINT;Salvar imagens na pasta selecionada. @@ -1182,8 +1166,6 @@ PREFERENCES_PRTPROFILE;Perfil de cor PREFERENCES_PSPATH;Diretório de instalação do Adobe Photoshop PREFERENCES_REMEMBERZOOMPAN;Lembre-se de zoom % e compensar pan PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Lembre-se do zoom % e de compensar o pan da imagem atual ao abrir uma nova imagem.\n\nEsta opção só funciona em "Modo da Aba do Editor Único" e quando "o método Demosaicing utilizado para a pré-visualização em <100% zoom" está definido como "Como no PP3". -PREFERENCES_RGBDTL_LABEL;Número máximo de threads para Redução de Ruído e Níveis de Wavelet -PREFERENCES_RGBDTL_TOOLTIP;Deixe a configuração em "0" para usar automaticamente o maior número de threads possível. Quanto mais threads rodarem em paralelo, mais rápido será o cálculo. Consulte o RawPedia para requisitos de memória. PREFERENCES_SAVE_TP_OPEN_NOW;Salvar ferramentas no estado recolhidas/expandididas agora PREFERENCES_SELECTFONT;Selecione a fonte principal PREFERENCES_SELECTFONT_COLPICKER;Selecione a fonte do Seletor de Cor @@ -1198,41 +1180,30 @@ PREFERENCES_SHOWDATETIME;Mostrar data e hora PREFERENCES_SHOWEXPOSURECOMPENSATION;Acrescentar compensação de exposição PREFERENCES_SHOWFILMSTRIPTOOLBAR;Mostrar barra de ferramentas de diapositivos PREFERENCES_SHTHRESHOLD;Limite para sombras recortadas -PREFERENCES_SIMPLAUT;Modo de ferramenta PREFERENCES_SINGLETAB;Modo de Aba de Editor Único PREFERENCES_SINGLETABVERTAB;Editor de Aba Única, Abas verticais -PREFERENCES_SMA;Pequeno (250x287) PREFERENCES_SND_BATCHQUEUEDONE;Processamento de fila concluído PREFERENCES_SND_HELP;Digite um endereço de arquivo completo para definir um som ou deixe em branco para não ter som.\nPara sons do sistema no Windows, use "SystemDefault", "SystemAsterisk" etc., e no Linux use "complete", "window-attention" etc. PREFERENCES_SND_LNGEDITPROCDONE;Processamento de Editor concluído PREFERENCES_SND_THRESHOLDSECS;Depois de segundos PREFERENCES_STARTUPIMDIR;Diretório de imagens na inicialização -PREFERENCES_STDAUT;Padrão PREFERENCES_TAB_BROWSER;Navegador de Arquivo PREFERENCES_TAB_COLORMGR;Gerenciamento de Cor PREFERENCES_TAB_DYNAMICPROFILE;Regras de Perfil Dinâmico PREFERENCES_TAB_GENERAL;Geral PREFERENCES_TAB_IMPROC;Processamento de Imagem -PREFERENCES_TAB_PERFORMANCE;Performance & Qualidade PREFERENCES_TAB_SOUND;Sons PREFERENCES_THEME;Tema PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Visualização JPEG incorporada PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Imagem para mostrar PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Renderização raw neutra PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;JPEG incorporado se tamanho completo, raw neutro caso contrário -PREFERENCES_TIMAX;Alto -PREFERENCES_TINB;Número de mosaicos -PREFERENCES_TISTD;Padrão PREFERENCES_TP_LABEL;Painel de ferramentas: PREFERENCES_TP_USEICONORTEXT;Use ícones de guias em vez de texto PREFERENCES_TP_VSCROLLBAR;Ocultar barra de rolagem vertical PREFERENCES_TUNNELMETADATA;Copiar Exif/IPTC/XMP inalterado para o arquivo de saída PREFERENCES_USEBUNDLEDPROFILES;Use perfis agrupados PREFERENCES_VIEW;Balanço de branco do dispositivo de saída (monitor, TV, projetor, visualização, etc.) -PREFERENCES_WAVLEV;Aumentar o nível de wavelet em qualidade 'alta' -PREFERENCES_WLONE;Um nível -PREFERENCES_WLTWO;Dois níveis -PREFERENCES_WLZER;Não PREFERENCES_WORKFLOW;Layout PROFILEPANEL_COPYPPASTE;Parâmetros para copiar PROFILEPANEL_GLOBALPROFILES;Perfis agrupados @@ -1922,7 +1893,6 @@ TP_RETINEX_FREEGAMMA;Gamma livre TP_RETINEX_GAIN;Ganho TP_RETINEX_GAINOFFS;Ganho e Compensação (brilho) TP_RETINEX_GAINTRANSMISSION;Transmissão de ganho -TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplifica ou reduz o mapa de transmissão para obter luminância.\nAbscissa: transmissão -min de 0, média e valores (max).\nOrdenado: ganho. TP_RETINEX_GAIN_TOOLTIP;Atua na imagem restaurada.\n\nIsso é muito diferente das outras configurações. Usado para pixels pretos ou brancos e para ajudar a equilibrar o histograma. TP_RETINEX_GAMMA;Gamma TP_RETINEX_GAMMA_FREE;Livre diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index 81b216cc8..123d9c04b 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -756,7 +756,6 @@ PREFERENCES_METADATA;Метаданные PREFERENCES_MONITOR;Монитор PREFERENCES_MULTITAB;Много вкладок PREFERENCES_MULTITABDUALMON;Много вкладок, на втором мониторе (если возможно) -PREFERENCES_NOISE;Подавление шумов PREFERENCES_OUTDIR;Каталог для сохранения изображений PREFERENCES_OUTDIRFOLDER;Сохранять в каталог PREFERENCES_OUTDIRFOLDERHINT;Сохранение изображений в выбранный каталог @@ -781,8 +780,6 @@ PREFERENCES_PROFILESAVECACHE;Сохранять профиль обработк PREFERENCES_PROFILESAVEINPUT;Сохранять профиль обработки в одном каталоге с исходным файлом PREFERENCES_PROPERTY;Свойство PREFERENCES_PSPATH;Каталог установки Adobe Photoshop -PREFERENCES_RGBDTL_LABEL;Максимальное количество потоков для подавления шума -PREFERENCES_RGBDTL_TOOLTIP;Оставьте 0 чтоб использовать максимально возможное количество потоков. Чем больше потоков будет запущено одновременно, тем быстрее будет расчёт. Требования к памяти указаны в RawPedia PREFERENCES_SELECTFONT;Выбрать шрифт PREFERENCES_SELECTLANG;Выбрать язык PREFERENCES_SELECTTHEME;Выбрать тему @@ -803,7 +800,6 @@ PREFERENCES_TAB_COLORMGR;Управление цветом PREFERENCES_TAB_DYNAMICPROFILE;Динамические профили PREFERENCES_TAB_GENERAL;Основное PREFERENCES_TAB_IMPROC;Обработка изображения -PREFERENCES_TAB_PERFORMANCE;Производительность PREFERENCES_TAB_SOUND;Звуки PREFERENCES_THEME;Тема PREFERENCES_TP_LABEL;Панель инструментов: @@ -1753,13 +1749,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_CLUTSCACHE;HaldCLUT Cache !PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs !PREFERENCES_CLUTSDIR;HaldCLUT directory @@ -1770,11 +1760,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !PREFERENCES_CROP_GUIDES_FRAME;Frame !PREFERENCES_CROP_GUIDES_FULL;Original !PREFERENCES_CROP_GUIDES_NONE;None -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. !PREFERENCES_GREY18_OLD;Yb=18 CIE L#50 @@ -1787,13 +1774,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !PREFERENCES_INSPECT_LABEL;Inspect !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONPROFILE;Default color profile !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. @@ -1816,21 +1797,11 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode -!PREFERENCES_SMA;Small (250x287) -!PREFERENCES_STDAUT;Standard !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PROFILEPANEL_PDYNAMIC;Dynamic !QINFO_FRAMECOUNT;%2 frames !QINFO_HDR;HDR / %2 frame(s) diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters) index d8905c0a8..adbf07ba1 100644 --- a/rtdata/languages/Serbian (Cyrilic Characters) +++ b/rtdata/languages/Serbian (Cyrilic Characters) @@ -693,8 +693,6 @@ PREFERENCES_PROFILESAVECACHE;Сачувај параметре обраде у PREFERENCES_PROFILESAVEINPUT;Сачувај парамтре обраде поред улазне датотеке PREFERENCES_PROPERTY;Особина PREFERENCES_PSPATH;Директоријум са инсталираним Адобе Фотошопом -PREFERENCES_RGBDTL_LABEL;Највећи број нири приликом уклањања шума -PREFERENCES_RGBDTL_TOOLTIP;Уклањање шума захтева око 128MB РАМ меморије за слику од 10 мегапиксела или 512MB за слику од 40 мегапиксела, уз додатних 128MB меморије по свакој нити. Што више нити се извршавају заједно то ће брже бити рачунање. Оставите ову вредност на „0“ како би програм аутоматски доделило што је више нитова могуће. PREFERENCES_SELECTFONT;Изаберите фонт PREFERENCES_SELECTLANG;Језик PREFERENCES_SELECTTHEME;Тема @@ -714,7 +712,6 @@ PREFERENCES_TAB_BROWSER;Преглед датотека PREFERENCES_TAB_COLORMGR;Управљање бојама PREFERENCES_TAB_GENERAL;Опште PREFERENCES_TAB_IMPROC;Обрада сликe -PREFERENCES_TAB_PERFORMANCE;Перформанса PREFERENCES_TAB_SOUND;Звуци PREFERENCES_TP_LABEL;Површ алата: PREFERENCES_TP_USEICONORTEXT;Користи иконице језичка уместо текста @@ -1695,13 +1692,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_CLUTSCACHE;HaldCLUT Cache !PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs !PREFERENCES_CLUTSDIR;HaldCLUT directory @@ -1718,11 +1709,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PREFERENCES_CURVEBBOXPOS_LEFT;Left !PREFERENCES_CURVEBBOXPOS_RIGHT;Right !PREFERENCES_D50_OLD;5000K -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. !PREFERENCES_GREY18_OLD;Yb=18 CIE L#50 @@ -1736,20 +1724,13 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. @@ -1771,22 +1752,12 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode -!PREFERENCES_SMA;Small (250x287) -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PROFILEPANEL_PDYNAMIC;Dynamic !QINFO_FRAMECOUNT;%2 frames !QINFO_HDR;HDR / %2 frame(s) diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters) index 26867400f..e80ae4001 100644 --- a/rtdata/languages/Serbian (Latin Characters) +++ b/rtdata/languages/Serbian (Latin Characters) @@ -693,8 +693,6 @@ PREFERENCES_PROFILESAVECACHE;Sačuvaj parametre obrade u ostavu PREFERENCES_PROFILESAVEINPUT;Sačuvaj paramtre obrade pored ulazne datoteke PREFERENCES_PROPERTY;Osobina PREFERENCES_PSPATH;Direktorijum sa instaliranim Adobe Fotošopom -PREFERENCES_RGBDTL_LABEL;Najveći broj niri prilikom uklanjanja šuma -PREFERENCES_RGBDTL_TOOLTIP;Uklanjanje šuma zahteva oko 128MB RAM memorije za sliku od 10 megapiksela ili 512MB za sliku od 40 megapiksela, uz dodatnih 128MB memorije po svakoj niti. Što više niti se izvršavaju zajedno to će brže biti računanje. Ostavite ovu vrednost na „0“ kako bi program automatski dodelilo što je više nitova moguće. PREFERENCES_SELECTFONT;Izaberite font PREFERENCES_SELECTLANG;Jezik PREFERENCES_SELECTTHEME;Tema @@ -714,7 +712,6 @@ PREFERENCES_TAB_BROWSER;Pregled datoteka PREFERENCES_TAB_COLORMGR;Upravljanje bojama PREFERENCES_TAB_GENERAL;Opšte PREFERENCES_TAB_IMPROC;Obrada slike -PREFERENCES_TAB_PERFORMANCE;Performansa PREFERENCES_TAB_SOUND;Zvuci PREFERENCES_TP_LABEL;Površ alata: PREFERENCES_TP_USEICONORTEXT;Koristi ikonice jezička umesto teksta @@ -1695,13 +1692,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_CLUTSCACHE;HaldCLUT Cache !PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs !PREFERENCES_CLUTSDIR;HaldCLUT directory @@ -1718,11 +1709,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !PREFERENCES_CURVEBBOXPOS_LEFT;Left !PREFERENCES_CURVEBBOXPOS_RIGHT;Right !PREFERENCES_D50_OLD;5000K -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. !PREFERENCES_GREY18_OLD;Yb=18 CIE L#50 @@ -1736,20 +1724,13 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. @@ -1771,22 +1752,12 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode -!PREFERENCES_SMA;Small (250x287) -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PROFILEPANEL_PDYNAMIC;Dynamic !QINFO_FRAMECOUNT;%2 frames !QINFO_HDR;HDR / %2 frame(s) diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak index 87b5ce231..559f4b08d 100644 --- a/rtdata/languages/Slovak +++ b/rtdata/languages/Slovak @@ -1251,14 +1251,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression !PARTIALPASTE_VIBRANCE;Vibrance -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. !PREFERENCES_BEHSETALL;All to 'Set' @@ -1294,12 +1288,9 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PREFERENCES_DARKFRAMEFOUND;Found !PREFERENCES_DARKFRAMESHOTS;shots !PREFERENCES_DARKFRAMETEMPLATES;templates -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) !PREFERENCES_FLATFIELDFOUND;Found !PREFERENCES_FLATFIELDSDIR;Flat-fields directory @@ -1332,12 +1323,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1345,7 +1331,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1353,7 +1338,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files !PREFERENCES_PANFACTORLABEL;Pan rate amplification @@ -1371,8 +1355,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font !PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings @@ -1380,35 +1362,24 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles !PROFILEPANEL_LOADPPASTE;Parameters to load diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi index 63e3c27e3..297512b2d 100644 --- a/rtdata/languages/Suomi +++ b/rtdata/languages/Suomi @@ -1200,14 +1200,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PARTIALPASTE_TM_FATTAL;Dynamic range compression !PARTIALPASTE_VIBRANCE;Vibrance !PREFERENCES_ADD;Add -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1245,13 +1239,10 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PREFERENCES_DARKFRAMEFOUND;Found !PREFERENCES_DARKFRAMESHOTS;shots !PREFERENCES_DARKFRAMETEMPLATES;templates -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) !PREFERENCES_FLATFIELDFOUND;Found !PREFERENCES_FLATFIELDSDIR;Flat-fields directory @@ -1284,12 +1275,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1297,7 +1283,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1306,7 +1291,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files @@ -1326,8 +1310,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT;Select main font !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font @@ -1337,36 +1319,25 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PREFERENCES_SET;Set !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETAB;Single Editor Tab Mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PREFERENCES_WORKFLOW;Layout !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish index c2b779b4a..f7de30334 100644 --- a/rtdata/languages/Swedish +++ b/rtdata/languages/Swedish @@ -811,13 +811,7 @@ PARTIALPASTE_WAVELETGROUP;Wavelet-nivåer PARTIALPASTE_WHITEBALANCE;Vitbalans PREFERENCES_ADD;Lägg till PREFERENCES_APPLNEXTSTARTUP;Kräver omstart av RawTherapee -PREFERENCES_AUTLISLOW;Låg -PREFERENCES_AUTLISMAX;Max - Medel av alla indelningar -PREFERENCES_AUTLISSTD;Hög -PREFERENCES_AUTLISVLOW;Ingen -PREFERENCES_AUTLOW;Låg PREFERENCES_AUTOMONPROFILE;Använd operativsystemets skärmfärgprofil -PREFERENCES_AUTSTD;Standard PREFERENCES_BATCH_PROCESSING;Batchbehandling PREFERENCES_BEHADDALL;Sätt allt till 'Lägg till' PREFERENCES_BEHADDALLHINT;Sätt alla parametrar till Lägg till-läge.\nFörändringar i parametrar batch-verktyget kommer att vara skillnader gentemot de lagrade värdena. @@ -860,8 +854,6 @@ PREFERENCES_DARKFRAMESHOTS;bilder PREFERENCES_DARKFRAMETEMPLATES;mallar PREFERENCES_DATEFORMAT;Datumformat PREFERENCES_DATEFORMATHINT;Du kan använda följande format:\n%y: år\n%m: månad\n%d: dag\n\nTill exempel är det svenska datumformatet:\n%y-%m-%d -PREFERENCES_DAUB_LABEL;Använd Daubechies D6-wavelets istället för D4 -PREFERENCES_DAUB_TOOLTIP;Brusreduceringen och wavelet-verktyget använder en Debauchies moder-wavelet. Om du väljer D6 istället för D4 ökas antalet ortogonala Daubechies-koefficienter och troligtvis ökas också kvaliteten på de småskaliga nivåerna. Det blir ingen skillnad i minnesanvändning eller beräkningstid. PREFERENCES_DIRDARKFRAMES;Katalog för svartbilder PREFERENCES_DIRHOME;Hemkatalog PREFERENCES_DIRLAST;Senaste besökta katalog @@ -869,7 +861,6 @@ PREFERENCES_DIROTHER;Annan PREFERENCES_DIRSELECTDLG;Välj bildkatalog vid uppstart... PREFERENCES_DIRSOFTWARE;Installationskatalog PREFERENCES_EDITORLAYOUT;Layout för redigeringsvyn -PREFERENCES_EXPAUT;Expert PREFERENCES_EXTERNALEDITOR;Externt bildredigeringsprogram PREFERENCES_FBROWSEROPTS;Inställningar för filvyn/miniatyrbilderna PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Filvyns verktygsrad som en rad (avmarkera för lågupplösta skärmar) @@ -912,11 +903,7 @@ PREFERENCES_INTENT_RELATIVE;Relativ kolorimetrisk PREFERENCES_INTENT_SATURATION;Mättnad PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Visa intern råbild om oredigerad PREFERENCES_LANGAUTODETECT;Använd operativsystemets språkinställning -PREFERENCES_LEVAUTDN;Brusreduceringsnivå -PREFERENCES_LEVDN;Cellstorlek -PREFERENCES_MAX;Max (Tile) PREFERENCES_MAXRECENTFOLDERS;Maximalt antal visade kataloger -PREFERENCES_MED;Medium (Tile/2) PREFERENCES_MENUGROUPEXTPROGS;Visa "Öppna med" PREFERENCES_MENUGROUPFILEOPERATIONS;Visa "Filaktiviteter" PREFERENCES_MENUGROUPLABEL;Visa "Etikett" @@ -924,12 +911,10 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Visa "Profilaktiviteter" PREFERENCES_MENUGROUPRANK;Visa "Betygsättning" PREFERENCES_MENUOPTIONS;Menyval för högerklick PREFERENCES_METADATA;Metadata -PREFERENCES_MIN;Mini (100x115) PREFERENCES_MULTITAB;Öppna bilderna i olika flikar PREFERENCES_MULTITABDUALMON;Visa bild på andra skärmen, om möjligt, i flerfliksläge PREFERENCES_NAVGUIDEBRUSH;Översiktsvyns guidefärg PREFERENCES_NAVIGATIONFRAME;Navigering -PREFERENCES_NOISE;Brusreducering PREFERENCES_OUTDIR;Utmatningskatalog PREFERENCES_OUTDIRFOLDER;Spara till katalog PREFERENCES_OUTDIRFOLDERHINT;Spara de behandlade bilderna i den valda katalogen @@ -960,8 +945,6 @@ PREFERENCES_PROPERTY;Egenskaper PREFERENCES_PSPATH;Adobe Photoshops installationskatalog PREFERENCES_REMEMBERZOOMPAN;Kom ihåg förstoringsprocent och panorering PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Kom ihåg förstoringsgraden i % och panoreringen för den aktuella bilden när du öppnar en ny bild.\n\nDet här valet fungerar bara i Enkelfliksläget och när "Demosaicing-metod som ska användas för förstoringsgrader <100 %" är satt til "Som i PP3". -PREFERENCES_RGBDTL_LABEL;Maximalt antal trådar för brusreducering -PREFERENCES_RGBDTL_TOOLTIP;Brusreduceringen kräver ungefär 128MB RAM för en 10MPix bild och 512MB för en 40 MPix, och ytterligare 128MB per tråd. Ju fler trådar som körs parallellt, desto snabbare går beräkningarna. Ange värdet "0" för att automatiskt använda så många trådar som möjligt. PREFERENCES_SELECTFONT;Välj typsnitt PREFERENCES_SELECTFONT_COLPICKER;Välj typsnitt för färgpipetten PREFERENCES_SELECTLANG;Välj språk @@ -974,35 +957,24 @@ PREFERENCES_SHOWDATETIME;Visa datum och tid PREFERENCES_SHOWEXPOSURECOMPENSATION;Lägg till exponeringskompensation PREFERENCES_SHOWFILMSTRIPTOOLBAR;Visa verktygsraden för filmstrip PREFERENCES_SHTHRESHOLD;Tröskelvärde för skuggor -PREFERENCES_SIMPLAUT;Verktygsläge PREFERENCES_SINGLETAB;Öppna en bild åt gången PREFERENCES_SINGLETABVERTAB;Enkelfliksläge, vertikala flikar -PREFERENCES_SMA;Liten (250x287) PREFERENCES_SND_BATCHQUEUEDONE;Batchkön färdig PREFERENCES_SND_HELP;Fyll i en sökväg till ett ljud.\nI Windows kan "SystemDefault", "SystemAsterisk" o.s.v. användas.\nPå Linuxbaserade system kan du prova med "complete", "windows-attention" o.s.v. PREFERENCES_SND_LNGEDITPROCDONE;När behandlingen är klar PREFERENCES_SND_THRESHOLDSECS;Ljudet kommer efter så här många sekunder PREFERENCES_STARTUPIMDIR;Bildkatalog som visas vid uppstart -PREFERENCES_STDAUT;Standard PREFERENCES_TAB_BROWSER;Filbläddrare PREFERENCES_TAB_COLORMGR;Färghantering PREFERENCES_TAB_GENERAL;Allmän PREFERENCES_TAB_IMPROC;Bildbehandling -PREFERENCES_TAB_PERFORMANCE;Prestanda PREFERENCES_TAB_SOUND;Ljud -PREFERENCES_TIMAX;Hög -PREFERENCES_TINB;Antal tiles -PREFERENCES_TISTD;Standard PREFERENCES_TP_LABEL;Verktygspanel: PREFERENCES_TP_USEICONORTEXT;Använd ikoner istället för text PREFERENCES_TP_VSCROLLBAR;Göm verktygpanelens vertikala skrollist PREFERENCES_TUNNELMETADATA;Kopiera Exif/IPTC/XMP till utfilen oförändrat PREFERENCES_USEBUNDLEDPROFILES;Visa förinstallerade profiler PREFERENCES_VIEW;Utenhetens vitbalansvärde (datorskärm, TV, bildkanon, etc.) -PREFERENCES_WAVLEV;Öka waveletnivån vid kvalitet "hög" -PREFERENCES_WLONE;En nivå -PREFERENCES_WLTWO;Två nivåer -PREFERENCES_WLZER;Nej PREFERENCES_WORKFLOW;Arbetsflöde PROFILEPANEL_COPYPPASTE;Parametrar att kopiera PROFILEPANEL_GLOBALPROFILES;Förinstallerade profiler @@ -2076,7 +2048,6 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !PREFERENCES_GREY18_OLD;Yb=18 CIE L#50 !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language -!PREFERENCES_LISS;Auto multi-zone smoothing !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish index 1af509412..e62678791 100644 --- a/rtdata/languages/Turkish +++ b/rtdata/languages/Turkish @@ -1199,14 +1199,8 @@ TP_WBALANCE_TEMPERATURE;Isı !PARTIALPASTE_TM_FATTAL;Dynamic range compression !PARTIALPASTE_VIBRANCE;Vibrance !PREFERENCES_ADD;Add -!PREFERENCES_AUTLISLOW;Low -!PREFERENCES_AUTLISMAX;Max - Average of all tiles -!PREFERENCES_AUTLISSTD;High -!PREFERENCES_AUTLISVLOW;None -!PREFERENCES_AUTLOW;Low !PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile !PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -!PREFERENCES_AUTSTD;Standard !PREFERENCES_BATCH_PROCESSING;Batch Processing !PREFERENCES_BEHADDALL;All to 'Add' !PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1244,13 +1238,10 @@ TP_WBALANCE_TEMPERATURE;Isı !PREFERENCES_DARKFRAMEFOUND;Found !PREFERENCES_DARKFRAMESHOTS;shots !PREFERENCES_DARKFRAMETEMPLATES;templates -!PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -!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_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_EDITORLAYOUT;Editor Layout -!PREFERENCES_EXPAUT;Expert !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) !PREFERENCES_FLATFIELDFOUND;Found !PREFERENCES_FLATFIELDSDIR;Flat-fields directory @@ -1283,12 +1274,7 @@ TP_WBALANCE_TEMPERATURE;Isı !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language -!PREFERENCES_LEVAUTDN;Denoising level -!PREFERENCES_LEVDN;Cell size -!PREFERENCES_LISS;Auto multi-zone smoothing -!PREFERENCES_MAX;Maxi (Tile) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MED;Medium (Tile/2) !PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" !PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" !PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1296,7 +1282,6 @@ TP_WBALANCE_TEMPERATURE;Isı !PREFERENCES_MENUGROUPRANK;Group "Rank" !PREFERENCES_MENUOPTIONS;Context Menu Options !PREFERENCES_METADATA;Metadata -!PREFERENCES_MIN;Mini (100x115) !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1305,7 +1290,6 @@ TP_WBALANCE_TEMPERATURE;Isı !PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode !PREFERENCES_NAVGUIDEBRUSH;Navigator guide color !PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_NOISE;Noise Reduction !PREFERENCES_OVERLAY_FILENAMES;Overlay filenames on thumbnails in the file browser !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_OVERWRITEOUTPUTFILE;Overwrite existing output files @@ -1325,8 +1309,6 @@ TP_WBALANCE_TEMPERATURE;Isı !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SELECTFONT;Select main font !PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font @@ -1336,36 +1318,25 @@ TP_WBALANCE_TEMPERATURE;Isı !PREFERENCES_SET;Set !PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar -!PREFERENCES_SIMPLAUT;Tool mode !PREFERENCES_SINGLETAB;Single Editor Tab Mode !PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -!PREFERENCES_SMA;Small (250x287) !PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done !PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds -!PREFERENCES_STDAUT;Standard !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance & Quality !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TIMAX;High -!PREFERENCES_TINB;Number of tiles -!PREFERENCES_TISTD;Standard !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles !PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -!PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -!PREFERENCES_WLONE;One level -!PREFERENCES_WLTWO;Two levels -!PREFERENCES_WLZER;No !PREFERENCES_WORKFLOW;Layout !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles diff --git a/rtdata/languages/default b/rtdata/languages/default index 237c83ed6..54a1ea80b 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -1015,14 +1015,8 @@ PARTIALPASTE_VIGNETTING;Vignetting correction PARTIALPASTE_WHITEBALANCE;White balance PREFERENCES_ADD;Add PREFERENCES_APPLNEXTSTARTUP;restart required -PREFERENCES_AUTLISLOW;Low -PREFERENCES_AUTLISMAX;Max - Average of all tiles -PREFERENCES_AUTLISSTD;High -PREFERENCES_AUTLISVLOW;None -PREFERENCES_AUTLOW;Low PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor color profile PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting -PREFERENCES_AUTSTD;Standard PREFERENCES_BATCH_PROCESSING;Batch Processing PREFERENCES_BEHADDALL;All to 'Add' PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. @@ -1069,8 +1063,6 @@ PREFERENCES_DARKFRAMESHOTS;shots PREFERENCES_DARKFRAMETEMPLATES;templates PREFERENCES_DATEFORMAT;Date format PREFERENCES_DATEFORMATHINT;You can use the following formatting strings:\n%y - year\n%m - month\n%d - day\n\nFor example, the ISO 8601 standard dictates the date format as follows:\n%y-%m-%d -PREFERENCES_DAUB_LABEL;Use Daubechies D6 wavelets instead of D4 -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_DIRECTORIES;Directories PREFERENCES_DIRHOME;Home directory @@ -1080,7 +1072,6 @@ PREFERENCES_DIRSELECTDLG;Select Image Directory at Startup... PREFERENCES_DIRSOFTWARE;Installation directory PREFERENCES_EDITORCMDLINE;Custom command line PREFERENCES_EDITORLAYOUT;Editor Layout -PREFERENCES_EXPAUT;Expert PREFERENCES_EXTERNALEDITOR;External Editor PREFERENCES_FBROWSEROPTS;File Browser / Thumbnail Options PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Single row file browser toolbar\n(de-select for low resolution display) @@ -1126,12 +1117,7 @@ PREFERENCES_INTENT_SATURATION;Saturation PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited PREFERENCES_LANG;Language PREFERENCES_LANGAUTODETECT;Use system language -PREFERENCES_LEVAUTDN;Denoising level -PREFERENCES_LEVDN;Cell size -PREFERENCES_LISS;Auto multi-zone smoothing -PREFERENCES_MAX;Maxi (Tile) PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -PREFERENCES_MED;Medium (Tile/2) PREFERENCES_MENUGROUPEXTPROGS;Group "Open with" PREFERENCES_MENUGROUPFILEOPERATIONS;Group "File operations" PREFERENCES_MENUGROUPLABEL;Group "Color label" @@ -1139,7 +1125,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Group "Processing profile operations" PREFERENCES_MENUGROUPRANK;Group "Rank" PREFERENCES_MENUOPTIONS;Context Menu Options PREFERENCES_METADATA;Metadata -PREFERENCES_MIN;Mini (100x115) PREFERENCES_MONINTENT;Default rendering intent PREFERENCES_MONITOR;Monitor PREFERENCES_MONPROFILE;Default color profile @@ -1148,7 +1133,6 @@ PREFERENCES_MULTITAB;Multiple Editor Tabs Mode PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode PREFERENCES_NAVGUIDEBRUSH;Navigator guide color PREFERENCES_NAVIGATIONFRAME;Navigation -PREFERENCES_NOISE;Noise Reduction PREFERENCES_OUTDIR;Output Directory PREFERENCES_OUTDIRFOLDER;Save to folder PREFERENCES_OUTDIRFOLDERHINT;Save images to the selected folder. @@ -1184,9 +1168,9 @@ PREFERENCES_PRTPROFILE;Color profile PREFERENCES_PSPATH;Adobe Photoshop installation directory PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset 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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now +PREFERENCES_PERFORMANCE_THREADS;Threads +PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) PREFERENCES_SELECTFONT;Select main font PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font PREFERENCES_SELECTLANG;Select language @@ -1200,41 +1184,31 @@ PREFERENCES_SHOWDATETIME;Show date and time PREFERENCES_SHOWEXPOSURECOMPENSATION;Append exposure compensation PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar PREFERENCES_SHTHRESHOLD;Threshold for clipped shadows -PREFERENCES_SIMPLAUT;Tool mode PREFERENCES_SINGLETAB;Single Editor Tab Mode PREFERENCES_SINGLETABVERTAB;Single Editor Tab Mode, Vertical Tabs -PREFERENCES_SMA;Small (250x287) PREFERENCES_SND_BATCHQUEUEDONE;Queue processing done PREFERENCES_SND_HELP;Enter a full file path to set a sound, or leave blank for no sound.\nFor system sounds on Windows use "SystemDefault", "SystemAsterisk" etc., and on Linux use "complete", "window-attention" etc. PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done PREFERENCES_SND_THRESHOLDSECS;After seconds PREFERENCES_STARTUPIMDIR;Image Directory at Startup -PREFERENCES_STDAUT;Standard PREFERENCES_TAB_BROWSER;File Browser PREFERENCES_TAB_COLORMGR;Color Management PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules PREFERENCES_TAB_GENERAL;General PREFERENCES_TAB_IMPROC;Image Processing -PREFERENCES_TAB_PERFORMANCE;Performance & Quality +PREFERENCES_TAB_PERFORMANCE;Performance PREFERENCES_TAB_SOUND;Sounds PREFERENCES_THEME;Theme PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show -PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -PREFERENCES_TIMAX;High -PREFERENCES_TINB;Number of tiles -PREFERENCES_TISTD;Standard PREFERENCES_TP_LABEL;Tool panel: PREFERENCES_TP_USEICONORTEXT;Use tab icons instead of text PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles PREFERENCES_VIEW;Output device's white balance (monitor, TV, projector, viewing, etc.) -PREFERENCES_WAVLEV;Increase wavelet level in quality 'high' -PREFERENCES_WLONE;One level -PREFERENCES_WLTWO;Two levels -PREFERENCES_WLZER;No PREFERENCES_WORKFLOW;Layout PROFILEPANEL_COPYPPASTE;Parameters to copy PROFILEPANEL_GLOBALPROFILES;Bundled profiles @@ -1918,7 +1892,7 @@ TP_RETINEX_FREEGAMMA;Free gamma TP_RETINEX_GAIN;Gain TP_RETINEX_GAINOFFS;Gain and Offset (brightness) TP_RETINEX_GAINTRANSMISSION;Gain transmission -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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. TP_RETINEX_GAMMA;Gamma TP_RETINEX_GAMMA_FREE;Free diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 48e3b865a..644b34987 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -689,87 +689,31 @@ Gtk::Widget* Preferences::getPerformancePanel () finspect->add (*inspectorvb); vbPerformance->pack_start (*finspect, Gtk::PACK_SHRINK, 4); - Gtk::Frame* fdenoise = Gtk::manage ( new Gtk::Frame (M ("PREFERENCES_NOISE")) ); - Gtk::VBox* vbdenoise = Gtk::manage ( new Gtk::VBox (Gtk::PACK_SHRINK, 4) ); + Gtk::Frame* threadsFrame = Gtk::manage ( new Gtk::Frame (M ("PREFERENCES_PERFORMANCE_THREADS")) ); + Gtk::VBox* threadsVBox = Gtk::manage ( new Gtk::VBox (Gtk::PACK_SHRINK, 4) ); - Gtk::Label* lreloadneeded2 = Gtk::manage (new Gtk::Label (M ("PREFERENCES_IMG_RELOAD_NEEDED"), Gtk::ALIGN_START)); - Gtk::HBox* threadLimitHB = Gtk::manage (new Gtk::HBox (Gtk::PACK_SHRINK, 4)); - threadLimitHB->set_tooltip_text (M ("PREFERENCES_RGBDTL_TOOLTIP")); - Gtk::Label* RGBDTLl = Gtk::manage ( new Gtk::Label (M ("PREFERENCES_RGBDTL_LABEL") + ":", Gtk::ALIGN_START)); - rgbDenoiseTreadLimitSB = Gtk::manage ( new Gtk::SpinButton () ); - rgbDenoiseTreadLimitSB->set_digits (0); - rgbDenoiseTreadLimitSB->set_increments (1, 5); - rgbDenoiseTreadLimitSB->set_max_length (2); // Will this be sufficient? :) + Gtk::HBox* threadsHBox = Gtk::manage (new Gtk::HBox (Gtk::PACK_SHRINK, 4)); + Gtk::Label* threadsLbl = Gtk::manage ( new Gtk::Label (M ("PREFERENCES_PERFORMANCE_THREADS_LABEL") + ":", Gtk::ALIGN_START)); + threadsSpinBtn = Gtk::manage ( new Gtk::SpinButton () ); + threadsSpinBtn->set_digits (0); + threadsSpinBtn->set_increments (1, 5); + threadsSpinBtn->set_max_length (2); // Will this be sufficient? :) #ifdef _OPENMP int maxThreadNumber = omp_get_max_threads(); #else int maxThreadNumber = 10; #endif - rgbDenoiseTreadLimitSB->set_range (0, maxThreadNumber); - threadLimitHB->pack_start (*RGBDTLl, Gtk::PACK_SHRINK, 2); - threadLimitHB->pack_end (*rgbDenoiseTreadLimitSB, Gtk::PACK_SHRINK, 2); + threadsSpinBtn->set_range (0, maxThreadNumber); - Gtk::Label* dnlab = Gtk::manage (new Gtk::Label (M ("PREFERENCES_LEVDN") + ":", Gtk::ALIGN_START)); - Gtk::Label* dnautlab = Gtk::manage (new Gtk::Label (M ("PREFERENCES_LEVAUTDN") + ":", Gtk::ALIGN_START)); - Gtk::Label* dnautsimpllab = Gtk::manage (new Gtk::Label (M ("PREFERENCES_SIMPLAUT") + ":", Gtk::ALIGN_START)); - Gtk::Label* dntilab = Gtk::manage (new Gtk::Label (M ("PREFERENCES_TINB") + ":", Gtk::ALIGN_START)); - Gtk::Label* dnwavlab = Gtk::manage (new Gtk::Label (M ("PREFERENCES_WAVLEV") + ":", Gtk::ALIGN_START)); - Gtk::Label* dnlisslab = Gtk::manage (new Gtk::Label (M ("PREFERENCES_LISS") + ":", Gtk::ALIGN_START)); + threadsHBox->pack_start (*threadsLbl, Gtk::PACK_SHRINK, 2); + threadsHBox->pack_end (*threadsSpinBtn, Gtk::PACK_SHRINK, 2); - dnv = Gtk::manage (new Gtk::ComboBoxText ()); - dnv->append (M ("PREFERENCES_MIN")); - dnv->append (M ("PREFERENCES_SMA")); - dnv->append (M ("PREFERENCES_MED")); - dnv->append (M ("PREFERENCES_MAX")); - dnaut = Gtk::manage (new Gtk::ComboBoxText ()); - dnaut->append (M ("PREFERENCES_AUTLOW")); - dnaut->append (M ("PREFERENCES_AUTSTD")); - - dnautsimpl = Gtk::manage (new Gtk::ComboBoxText ()); - dnautsimpl->append (M ("PREFERENCES_STDAUT")); - dnautsimpl->append (M ("PREFERENCES_EXPAUT")); - - dnliss = Gtk::manage (new Gtk::ComboBoxText ()); - dnliss->append (M ("PREFERENCES_AUTLISVLOW")); //very low - dnliss->append (M ("PREFERENCES_AUTLISLOW")); //low - dnliss->append (M ("PREFERENCES_AUTLISSTD")); //med - dnliss->append (M ("PREFERENCES_AUTLISMAX")); //max - - dnti = Gtk::manage (new Gtk::ComboBoxText ()); - dnti->append (M ("PREFERENCES_TISTD")); - dnti->append (M ("PREFERENCES_TIMAX")); - - dnwavlev = Gtk::manage (new Gtk::ComboBoxText ()); - dnwavlev->append (M ("PREFERENCES_WLZER")); - dnwavlev->append (M ("PREFERENCES_WLONE")); - dnwavlev->append (M ("PREFERENCES_WLTWO")); - - Gtk::Table* colon = Gtk::manage (new Gtk::Table (6, 2)); - colon->attach (*dnlab, 0, 1, 0, 1, Gtk::FILL, Gtk::SHRINK, 2, 2); - colon->attach (*dnv, 1, 2, 0, 1, Gtk::EXPAND | Gtk::FILL | Gtk::SHRINK, Gtk::SHRINK, 2, 2); - colon->attach (*dnautlab, 0, 1, 1, 2, Gtk::FILL, Gtk::SHRINK, 2, 2); - colon->attach (*dnaut, 1, 2, 1, 2, Gtk::EXPAND | Gtk::FILL | Gtk::SHRINK, Gtk::SHRINK, 2, 2); - colon->attach (*dnautsimpllab, 0, 1, 2, 3, Gtk::FILL, Gtk::SHRINK, 2, 2); - colon->attach (*dnautsimpl, 1, 2, 2, 3, Gtk::EXPAND | Gtk::FILL | Gtk::SHRINK, Gtk::SHRINK, 2, 2); - colon->attach (*dnlisslab, 0, 1, 3, 4, Gtk::FILL, Gtk::SHRINK, 2, 2); - colon->attach (*dnliss, 1, 2, 3, 4, Gtk::EXPAND | Gtk::FILL | Gtk::SHRINK, Gtk::SHRINK, 2, 2); - colon->attach (*dntilab, 0, 1, 4, 5, Gtk::FILL, Gtk::SHRINK, 2, 2); - colon->attach (*dnti, 1, 2, 4, 5, Gtk::EXPAND | Gtk::FILL | Gtk::SHRINK, Gtk::SHRINK, 2, 2); - colon->attach (*dnwavlab, 0, 1, 5, 6, Gtk::FILL, Gtk::SHRINK, 2, 2); - colon->attach (*dnwavlev, 1, 2, 5, 6, Gtk::EXPAND | Gtk::FILL | Gtk::SHRINK, Gtk::SHRINK, 2, 2); - - vbdenoise->pack_start (*lreloadneeded2, Gtk::PACK_SHRINK); - vbdenoise->pack_start (*colon, Gtk::PACK_SHRINK); - vbdenoise->pack_start (*threadLimitHB, Gtk::PACK_SHRINK); - // <--- To be hard-coded and removed once tested - cbdaubech = Gtk::manage (new Gtk::CheckButton (M ("PREFERENCES_DAUB_LABEL"), Gtk::ALIGN_START)); - cbdaubech->set_tooltip_markup (M ("PREFERENCES_DAUB_TOOLTIP")); -// vbdenoise->pack_start (*cbdaubech, Gtk::PACK_SHRINK); - // ---> - fdenoise->add (*vbdenoise); - vbPerformance->pack_start (*fdenoise, Gtk::PACK_SHRINK, 4); + threadsVBox->pack_start (*threadsHBox, Gtk::PACK_SHRINK); + threadsFrame->add (*threadsVBox); + vbPerformance->pack_start (*threadsFrame, Gtk::PACK_SHRINK, 4); swPerformance->add(*vbPerformance); + return swPerformance; } @@ -1739,14 +1683,6 @@ void Preferences::storePreferences () moptions.rtSettings.iccDirectory = iccDir->get_filename (); - moptions.rtSettings.leveldnv = dnv->get_active_row_number (); - moptions.rtSettings.leveldnti = dnti->get_active_row_number (); - moptions.rtSettings.leveldnliss = dnliss->get_active_row_number (); - moptions.rtSettings.leveldnaut = dnaut->get_active_row_number (); - moptions.rtSettings.nrwavlevel = dnwavlev->get_active_row_number (); - moptions.rtSettings.leveldnautsimpl = dnautsimpl->get_active_row_number (); - moptions.rtSettings.daubech = cbdaubech->get_active (); - moptions.prevdemo = (prevdemo_t)cprevdemo->get_active_row_number (); moptions.serializeTiffRead = ctiffserialize->get_active(); @@ -1811,7 +1747,7 @@ void Preferences::storePreferences () moptions.autoSaveTpOpen = ckbAutoSaveTpOpen->get_active(); - moptions.rgbDenoiseThreadLimit = rgbDenoiseTreadLimitSB->get_value_as_int(); + moptions.rgbDenoiseThreadLimit = threadsSpinBtn->get_value_as_int(); moptions.clutCacheSize = clutCacheSizeSB->get_value_as_int(); moptions.maxInspectorBuffers = maxInspectorBuffersSB->get_value_as_int(); moptions.rtSettings.thumbnail_inspector_mode = static_cast(thumbnailInspectorMode->get_active_row_number()); @@ -1895,15 +1831,6 @@ void Preferences::fillPreferences () iccDir->set_current_folder (moptions.rtSettings.iccDirectory); } - dnv->set_active (moptions.rtSettings.leveldnv); - dnti->set_active (moptions.rtSettings.leveldnti); - dnliss->set_active (moptions.rtSettings.leveldnliss); - dnaut->set_active (moptions.rtSettings.leveldnaut); - dnautsimpl->set_active (moptions.rtSettings.leveldnautsimpl); - dnwavlev->set_active (moptions.rtSettings.nrwavlevel); - cprevdemo->set_active (moptions.prevdemo); - cbdaubech->set_active (moptions.rtSettings.daubech); - languages->set_active_text (moptions.language); ckbLangAutoDetect->set_active (moptions.languageAutoDetect); int themeNbr = getThemeRowNumber (moptions.theme); @@ -2023,7 +1950,7 @@ void Preferences::fillPreferences () ckbAutoSaveTpOpen->set_active (moptions.autoSaveTpOpen); - rgbDenoiseTreadLimitSB->set_value (moptions.rgbDenoiseThreadLimit); + threadsSpinBtn->set_value (moptions.rgbDenoiseThreadLimit); clutCacheSizeSB->set_value (moptions.clutCacheSize); maxInspectorBuffersSB->set_value (moptions.maxInspectorBuffers); thumbnailInspectorMode->set_active(int(moptions.rtSettings.thumbnail_inspector_mode)); diff --git a/rtgui/preferences.h b/rtgui/preferences.h index d9f61f157..06521ab65 100644 --- a/rtgui/preferences.h +++ b/rtgui/preferences.h @@ -162,7 +162,7 @@ class Preferences : public Gtk::Dialog, public ProfileStoreListener Gtk::CheckButton* filmStripOverlayedFileNames; Gtk::CheckButton* sameThumbSize; - Gtk::SpinButton* rgbDenoiseTreadLimitSB; + Gtk::SpinButton* threadsSpinBtn; Gtk::SpinButton* clutCacheSizeSB; Gtk::SpinButton* maxInspectorBuffersSB; Gtk::ComboBoxText *thumbnailInspectorMode; From af4217d20b922522aa6cfb5a4fa32b57cc9a60e7 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Mon, 20 Aug 2018 08:50:19 +0200 Subject: [PATCH 038/115] Fix for left pane not appearing after closing, thanks to @Hombre57 --- rtgui/editorpanel.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index dbcc6fd50..cb4a58317 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -522,6 +522,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) leftsubbox->show_all (); leftbox->pack2 (*leftsubbox, true, true); + leftbox->show_all (); // build the middle of the screen Gtk::Box* editbox = Gtk::manage (new Gtk::Box (Gtk::ORIENTATION_VERTICAL)); From 871188a1d86290e701bdf4b9940ae9aa6b2bd3c6 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Mon, 20 Aug 2018 10:44:27 +0200 Subject: [PATCH 039/115] Navigator should use a different icon while panning The Navigator uses the same hand icon regardless whether panning the red square or not, this branch tries to fix that, #4738 Includes a cleanup of icon names, i.e. the crosshair should not be called the hand. --- .../themed/png/dark/hand-open-hicontrast.png | Bin 0 -> 772 bytes .../themed/png/light/hand-open-hicontrast.png | Bin 0 -> 772 bytes .../themed/svg/hand-open-hicontrast.svg | 126 ++++++++++++++++++ rtgui/cropwindow.cc | 4 +- rtgui/cursormanager.cc | 24 ++-- rtgui/cursormanager.h | 36 ++++- rtgui/curveeditor.cc | 2 +- rtgui/edit.cc | 2 +- rtgui/edit.h | 2 +- rtgui/gradient.cc | 2 +- rtgui/previewwindow.cc | 7 +- 11 files changed, 179 insertions(+), 26 deletions(-) create mode 100644 rtdata/images/themed/png/dark/hand-open-hicontrast.png create mode 100644 rtdata/images/themed/png/light/hand-open-hicontrast.png create mode 100644 rtdata/images/themed/svg/hand-open-hicontrast.svg diff --git a/rtdata/images/themed/png/dark/hand-open-hicontrast.png b/rtdata/images/themed/png/dark/hand-open-hicontrast.png new file mode 100644 index 0000000000000000000000000000000000000000..2ee26e3751ae13e65e27a7050edf7a877a4b1c82 GIT binary patch literal 772 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaA1(mo)lsM-XR2F5XXOu8FJ1aPr zloVwqm6l}Y=jjG#Bo?JQ=4584DrA(D6jnBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}t=G{7gs)xE$6$OHmzFaRBpFW*Fefsj{%YXm=y?OKIJ9q9}yLN5cwr#oL??5r4SrX(I%)rd~;)CAj zf1kfj{^l|N-xXoo=$y}`%Yu*m+bQ?s$LD+1o&SD(`2FwkwONn9+yJ_i#nZ(xMB{wy zq~}G=1_CXbPOVu{48iO<>h9&9_x@irlAGZ8#{R9j^4nK_lgyT0^tAG_e%;m96ZB2j zm*L~t6@O%y_O6g+ob$fwH@lOe}9&5C&f?}?FL|mSO+g}fj zKNAyGc7&IgzchWoQ1wabw8~c+=dri2cwQ^&G^l?r)l5w z#<|;ESEiiRZkWBbNuW8_?bQLt#B~mV(H;ed{&t?UnJ8JZ;pD$to1%^-Gf&UBZhg+a z?)W$7znBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}t=G{7gs)xE$6$OHmzFaRBpFW*Fefsj{%YXm=y?OKIJ9q9}yLN5cwr#oL??5r4SrX(I%)rd~;)CAj zf1kfj{^l|N-xXoo=$y}`%Yu*m+bQ?s$LD+1o&SD(`2FwkwONn9+yJ_i#nZ(xMB{wy zq~}G=1_CXbPOVu{48iO<>h9&9_x@irlAGZ8#{R9j^4nK_lgyT0^tAG_e%;m96ZB2j zm*L~t6@O%y_O6g+ob$fwH@lOe}9&5C&f?}?FL|mSO+g}fj zKNAyGc7&IgzchWoQ1wabw8~c+=dri2cwQ^&G^l?r)l5w z#<|;ESEiiRZkWBbNuW8_?bQLt#B~mV(H;ed{&t?UnJ8JZ;pD$to1%^-Gf&UBZhg+a z?)W$7z + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 77118277c..2b3e7f342 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -1251,7 +1251,7 @@ void CropWindow::updateCursor (int x, int y) if (onArea (CropObserved, x, y)) { newType = CSMove; } else { - newType = CSOpenHand; + newType = CSHandOpen; } } else if (tm == TMSpotWB) { newType = CSSpotWB; @@ -1284,7 +1284,7 @@ void CropWindow::updateCursor (int x, int y) } else if (state == SCropMove || state == SCropWinMove || state == SObservedMove) { newType = CSMove; } else if (state == SHandMove || state == SCropImgMove) { - newType = CSClosedHand; + newType = CSHandClosed; } else if (state == SResizeW1 || state == SResizeW2) { newType = CSResizeWidth; } else if (state == SResizeH1 || state == SResizeH2) { diff --git a/rtgui/cursormanager.cc b/rtgui/cursormanager.cc index 6c280ee8c..57805939a 100644 --- a/rtgui/cursormanager.cc +++ b/rtgui/cursormanager.cc @@ -51,8 +51,9 @@ void CursorManager::init (Glib::RefPtr mainWindow) cAdd = Gdk::Cursor::create (display, Gdk::PLUS); cWait = Gdk::Cursor::create (display, Gdk::CLOCK); - Glib::RefPtr hand = RTImage::createFromFile ("crosshair-hicontrast.png"); - Glib::RefPtr close_hand = RTImage::createFromFile ("hand-closed-hicontrast.png"); + Glib::RefPtr crosshair = RTImage::createFromFile ("crosshair-hicontrast.png"); + Glib::RefPtr hand_open = RTImage::createFromFile ("hand-open-hicontrast.png"); + Glib::RefPtr hand_closed = RTImage::createFromFile ("hand-closed-hicontrast.png"); Glib::RefPtr wbpick = RTImage::createFromFile ("color-picker-hicontrast.png"); Glib::RefPtr cpick = RTImage::createFromFile ("color-picker-add-hicontrast.png"); Glib::RefPtr empty = RTImage::createFromFile ("empty.png"); @@ -61,8 +62,9 @@ void CursorManager::init (Glib::RefPtr mainWindow) Glib::RefPtr move1DV = RTImage::createFromFile ("node-move-y-hicontrast.png"); Glib::RefPtr moveRotate = RTImage::createFromFile ("rotate-aroundnode-hicontrast.png"); - cHand = hand ? Gdk::Cursor::create (cAdd->get_display(), hand, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cClosedHand = close_hand ? Gdk::Cursor::create (cAdd->get_display(), close_hand, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cCrosshair = crosshair ? Gdk::Cursor::create (cAdd->get_display(), crosshair, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cHandOpen = hand_open ? Gdk::Cursor::create (cAdd->get_display(), hand_open, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cHandClosed = hand_closed ? Gdk::Cursor::create (cAdd->get_display(), hand_closed, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); cWB = wbpick ? Gdk::Cursor::create (cAdd->get_display(), wbpick, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW); cAddPicker = cpick ? Gdk::Cursor::create (cAdd->get_display(), cpick, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW); cHidden = empty ? Gdk::Cursor::create (cAdd->get_display(), empty, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); @@ -82,10 +84,12 @@ void CursorManager::setCursor (Glib::RefPtr window, CursorShape sha // set_cursor without any arguments to select system default { window->set_cursor (); - } else if (shape == CSOpenHand) { - window->set_cursor (cHand); - } else if (shape == CSClosedHand) { - window->set_cursor (cClosedHand); + } else if (shape == CSCrosshair) { + window->set_cursor (cCrosshair); + } else if (shape == CSHandOpen) { + window->set_cursor (cHandOpen); + } else if (shape == CSHandClosed) { + window->set_cursor (cHandClosed); } else if (shape == CSMove) { window->set_cursor (cCropMove); } else if (shape == CSResizeWidth) { @@ -115,13 +119,13 @@ void CursorManager::setCursor (Glib::RefPtr window, CursorShape sha } else if (shape == CSAddColPicker) { window->set_cursor (cAddPicker); } else if (shape == CSCropSelect) { - window->set_cursor (cHand); + window->set_cursor (cCrosshair); } else if (shape == CSMoveLeft) { window->set_cursor (cLeftTanMove); } else if (shape == CSMoveRight) { window->set_cursor (cRightTanMove); } else if (shape == CSStraighten) { - window->set_cursor (cHand); + window->set_cursor (cCrosshair); } else if (shape == CSWait) { window->set_cursor (cWait); } else if (shape == CSPlus) { diff --git a/rtgui/cursormanager.h b/rtgui/cursormanager.h index fcd856509..c48648931 100644 --- a/rtgui/cursormanager.h +++ b/rtgui/cursormanager.h @@ -22,11 +22,32 @@ #include enum CursorShape { - CSUndefined, CSArrow, CSOpenHand, CSClosedHand, CSMove, CSMoveLeft, - CSMoveRight, CSResizeWidth, CSResizeHeight, CSResizeDiagonal, - CSResizeTopLeft, CSResizeTopRight, CSResizeBottomLeft, CSResizeBottomRight, - CSMove2D, CSMove1DH, CSMove1DV, CSMoveRotate, - CSSpotWB, CSAddColPicker, CSCropSelect, CSStraighten, CSPlus, CSWait, CSEmpty + CSUndefined, + CSArrow, + CSCrosshair, + CSHandOpen, + CSHandClosed, + CSMove, + CSMoveLeft, + CSMoveRight, + CSResizeWidth, + CSResizeHeight, + CSResizeDiagonal, + CSResizeTopLeft, + CSResizeTopRight, + CSResizeBottomLeft, + CSResizeBottomRight, + CSMove2D, + CSMove1DH, + CSMove1DV, + CSMoveRotate, + CSSpotWB, + CSAddColPicker, + CSCropSelect, + CSStraighten, + CSPlus, + CSWait, + CSEmpty }; class CursorManager @@ -48,8 +69,9 @@ private: Glib::RefPtr cCropSelection; Glib::RefPtr cAdd; Glib::RefPtr cWait; - Glib::RefPtr cHand; - Glib::RefPtr cClosedHand; + Glib::RefPtr cCrosshair; + Glib::RefPtr cHandOpen; + Glib::RefPtr cHandClosed; Glib::RefPtr cWB; Glib::RefPtr cAddPicker; Glib::RefPtr cHidden; diff --git a/rtgui/curveeditor.cc b/rtgui/curveeditor.cc index 8b319ecbe..a65f8b451 100644 --- a/rtgui/curveeditor.cc +++ b/rtgui/curveeditor.cc @@ -443,5 +443,5 @@ CursorShape CurveEditor::getCursor(const int objectID) return CSResizeHeight; } - return CSOpenHand; + return CSHandOpen; } diff --git a/rtgui/edit.cc b/rtgui/edit.cc index 9ee0d63ba..e68fec15c 100644 --- a/rtgui/edit.cc +++ b/rtgui/edit.cc @@ -1140,7 +1140,7 @@ CursorShape EditDataProvider::getCursor(int objectID) currSubscriber->getCursor(objectID); } - return CSOpenHand; + return CSHandOpen; } EditSubscriber* EditDataProvider::getCurrSubscriber() diff --git a/rtgui/edit.h b/rtgui/edit.h index c6878c54a..611d95e1c 100644 --- a/rtgui/edit.h +++ b/rtgui/edit.h @@ -717,7 +717,7 @@ inline EditDataProvider* EditSubscriber::getEditProvider () { } inline CursorShape EditSubscriber::getCursor (const int objectID) { - return CSOpenHand; + return CSHandOpen; } inline bool EditSubscriber::mouseOver (const int modifierKey) { diff --git a/rtgui/gradient.cc b/rtgui/gradient.cc index 88e67adb3..40c9f01ab 100644 --- a/rtgui/gradient.cc +++ b/rtgui/gradient.cc @@ -346,7 +346,7 @@ CursorShape Gradient::getCursor(const int objectID) return CSMove2D; default: - return CSOpenHand; + return CSHandOpen; } } diff --git a/rtgui/previewwindow.cc b/rtgui/previewwindow.cc index 06ce3ad18..5c7cce997 100644 --- a/rtgui/previewwindow.cc +++ b/rtgui/previewwindow.cc @@ -230,8 +230,9 @@ bool PreviewWindow::on_motion_notify_event (GdkEventMotion* event) mainCropWin->remoteMove ((event->x - press_x) / zoom, (event->y - press_y) / zoom); press_x = event->x; press_y = event->y; + newType = CSHandClosed; } else if (inside) { - newType = CSClosedHand; + newType = CSHandOpen; } else { newType = CSArrow; } @@ -262,8 +263,8 @@ bool PreviewWindow::on_button_press_event (GdkEventButton* event) press_x = event->x; press_y = event->y; - if (cursor_type != CSClosedHand) { - cursor_type = CSClosedHand; + if (cursor_type != CSHandClosed) { + cursor_type = CSHandClosed; CursorManager::setWidgetCursor(get_window(), cursor_type); } } From 8109b17675433872e710069473acaf8769121148 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Wed, 22 Aug 2018 17:37:51 +0200 Subject: [PATCH 040/115] Draw grid below curves, make luminance area transparent --- rtgui/histogrampanel.cc | 230 +++++++++++++++++++--------------------- 1 file changed, 112 insertions(+), 118 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 2d19e82be..c810145e9 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -800,131 +800,16 @@ void HistogramArea::updateBackBuffer () Cairo::RefPtr cr = Cairo::Context::create(surface); const Glib::RefPtr style = get_style_context(); + // Setup drawing cr->set_source_rgba (0., 0., 0., 0.); cr->set_operator (Cairo::OPERATOR_CLEAR); cr->paint (); - cr->set_operator (Cairo::OPERATOR_OVER); - - if (valid) { - // For RAW mode use the other hists - LUTu& rh = rawMode ? rhistRaw : rhist; - LUTu& gh = rawMode ? ghistRaw : ghist; - LUTu& bh = rawMode ? bhistRaw : bhist; - - // make double copies of LUT, one for faster access, another one to scale down the raw histos - LUTu rhchanged(256), ghchanged(256), bhchanged(256); - unsigned int lhisttemp[256] ALIGNED16 {0}, chisttemp[256] ALIGNED16 {0}, rhtemp[256] ALIGNED16 {0}, ghtemp[256] ALIGNED16 {0}, bhtemp[256] ALIGNED16 {0}; - const int scale = (rawMode ? 8 : 1); - - for(int i = 0; i < 256; i++) { - if(needLuma) { - lhisttemp[i] = lhist[i]; - } - - if(needChroma) { - chisttemp[i] = chist[i]; - } - - if(needRed) { - rhchanged[i] = rhtemp[i] = rh[i] / scale; - } - - if(needGreen) { - ghchanged[i] = ghtemp[i] = gh[i] / scale; - } - - if(needBlue) { - bhchanged[i] = bhtemp[i] = bh[i] / scale; - } - } - - // compute height of the full histogram (realheight) and - // does not take into account 0 and 255 values - // them are handled separately - - unsigned int fullhistheight = 0; - - for (int i = 1; i < 255; i++) { - if (needLuma && lhisttemp[i] > fullhistheight) { - fullhistheight = lhisttemp[i]; - } - - if (needChroma && chisttemp[i] > fullhistheight) { - fullhistheight = chisttemp[i]; - } - - if (needRed && rhtemp[i] > fullhistheight) { - fullhistheight = rhtemp[i]; - } - - if (needGreen && ghtemp[i] > fullhistheight) { - fullhistheight = ghtemp[i]; - } - - if (needBlue && bhtemp[i] > fullhistheight) { - fullhistheight = bhtemp[i]; - } - } - - int realhistheight = fullhistheight; - - if (realhistheight < winh - 2) { - realhistheight = winh - 2; - } - - cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); - cr->set_line_width (1.0); - cr->set_operator(Cairo::OPERATOR_SOURCE); - - int ui = 0, oi = 0; - - if (needLuma && !rawMode) { - drawCurve(cr, lhist, realhistheight, w, h); - cr->set_source_rgb (0.65, 0.65, 0.65); - cr->fill (); - - drawMarks(cr, lhist, realhistheight, w, ui, oi); - } - - if (needChroma && !rawMode) { - drawCurve(cr, chist, realhistheight, w, h); - cr->set_source_rgb (0.9, 0.9, 0.); - cr->stroke (); - - drawMarks(cr, chist, realhistheight, w, ui, oi); - } - - if (needRed) { - drawCurve(cr, rhchanged, realhistheight, w, h); - cr->set_source_rgb (1.0, 0.0, 0.0); - cr->stroke (); - - drawMarks(cr, rhchanged, realhistheight, w, ui, oi); - } - - if (needGreen) { - drawCurve(cr, ghchanged, realhistheight, w, h); - cr->set_source_rgb (0.0, 1.0, 0.0); - cr->stroke (); - - drawMarks(cr, ghchanged, realhistheight, w, ui, oi); - } - - if (needBlue) { - drawCurve(cr, bhchanged, realhistheight, w, h); - cr->set_source_rgb (0.0, 0.0, 1.0); - cr->stroke (); - - drawMarks(cr, bhchanged, realhistheight, w, ui, oi); - } - - } + cr->set_operator (Cairo::OPERATOR_SOURCE); + // Prepare drawing gridlines first cr->set_source_rgba (1., 1., 1., 0.25); cr->set_line_width (1.0); cr->set_antialias(Cairo::ANTIALIAS_NONE); - - // Draw the content cr->set_line_join(Cairo::LINE_JOIN_MITER); std::valarray ch_ds (1); ch_ds[0] = 4; @@ -966,6 +851,115 @@ void HistogramArea::updateBackBuffer () cr->unset_dash(); + if (valid) { + // For RAW mode use the other hists + LUTu& rh = rawMode ? rhistRaw : rhist; + LUTu& gh = rawMode ? ghistRaw : ghist; + LUTu& bh = rawMode ? bhistRaw : bhist; + + // make double copies of LUT, one for faster access, another one to scale down the raw histos + LUTu rhchanged(256), ghchanged(256), bhchanged(256); + unsigned int lhisttemp[256] ALIGNED16 {0}, chisttemp[256] ALIGNED16 {0}, rhtemp[256] ALIGNED16 {0}, ghtemp[256] ALIGNED16 {0}, bhtemp[256] ALIGNED16 {0}; + const int scale = (rawMode ? 8 : 1); + + for(int i = 0; i < 256; i++) { + if(needLuma) { + lhisttemp[i] = lhist[i]; + } + + if(needChroma) { + chisttemp[i] = chist[i]; + } + + if(needRed) { + rhchanged[i] = rhtemp[i] = rh[i] / scale; + } + + if(needGreen) { + ghchanged[i] = ghtemp[i] = gh[i] / scale; + } + + if(needBlue) { + bhchanged[i] = bhtemp[i] = bh[i] / scale; + } + } + + // Compute the highest point of the histogram for scaling + // Values at far left and right end (0 and 255) are handled differently + + unsigned int histheight = 0; + + for (int i = 1; i < 255; i++) { + if (needLuma && lhisttemp[i] > histheight) { + histheight = lhisttemp[i]; + } + + if (needChroma && chisttemp[i] > histheight) { + histheight = chisttemp[i]; + } + + if (needRed && rhtemp[i] > histheight) { + histheight = rhtemp[i]; + } + + if (needGreen && ghtemp[i] > histheight) { + histheight = ghtemp[i]; + } + + if (needBlue && bhtemp[i] > histheight) { + histheight = bhtemp[i]; + } + } + + int realhistheight = histheight; + + if (realhistheight < winh - 2) { + realhistheight = winh - 2; + } + + cr->set_antialias (Cairo::ANTIALIAS_SUBPIXEL); + cr->set_line_width (1.0); + cr->set_operator (Cairo::OPERATOR_OVER); + + int ui = 0, oi = 0; + + if (needLuma && !rawMode) { + drawCurve(cr, lhist, realhistheight, w, h); + cr->set_source_rgba (0.65, 0.65, 0.65, 0.65); + cr->fill (); + drawMarks(cr, lhist, realhistheight, w, ui, oi); + } + + if (needChroma && !rawMode) { + drawCurve(cr, chist, realhistheight, w, h); + cr->set_source_rgb (0.9, 0.9, 0.); + cr->stroke (); + drawMarks(cr, chist, realhistheight, w, ui, oi); + } + + if (needRed) { + drawCurve(cr, rhchanged, realhistheight, w, h); + cr->set_source_rgb (1.0, 0.0, 0.0); + cr->stroke (); + drawMarks(cr, rhchanged, realhistheight, w, ui, oi); + } + + if (needGreen) { + drawCurve(cr, ghchanged, realhistheight, w, h); + cr->set_source_rgb (0.0, 1.0, 0.0); + cr->stroke (); + drawMarks(cr, ghchanged, realhistheight, w, ui, oi); + } + + if (needBlue) { + drawCurve(cr, bhchanged, realhistheight, w, h); + cr->set_source_rgb (0.0, 0.0, 1.0); + cr->stroke (); + drawMarks(cr, bhchanged, realhistheight, w, ui, oi); + } + + } + // Draw the frame's border style->render_frame(cr, 0, 0, surface->get_width(), surface->get_height()); From a14285b1a6147cbf7f86d2644af6055c2f12c139 Mon Sep 17 00:00:00 2001 From: TooWaBoo Date: Wed, 22 Aug 2018 18:29:19 +0200 Subject: [PATCH 041/115] Update TooWaBlue theme 2.72 Adjustments for the scaled histogram. --- rtdata/themes/TooWaBlue-GTK3-20_.css | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css index c4179c78a..71733f189 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.71 + Version 2.72 RawTherapee is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -370,7 +370,7 @@ filechooser list row:selected { /*** Histogram *********************************************************************************/ #HistogramPanel { min-height: 0; - margin: -2px 0; + margin: 0; padding: 0; border: none; background-color: transparent; @@ -404,24 +404,23 @@ filechooser list row:selected { background-color: @bg-dark-grey; } -#fullButton, #histButton { padding: 0; margin: 0; - border:none; + border: none; background-color: @bg-dark-grey; background-image: none; box-shadow: none; - min-height: 1.5em; + min-height: 1.41667em; min-width: calc(1.33334em + 6px); border-radius: 0; } #histButton:first-child { - margin-top: 0.16667em; + margin-top: 3px; } #histButton:last-child { - margin-bottom: 0.16667em; + margin-bottom: 3px; } #HistogramPanel image { From 79707ed1ea89bb27bcfe559cfd96568cdd283e85 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 23 Aug 2018 16:11:11 +0200 Subject: [PATCH 042/115] Fix broken RGB indicator bar --- rtgui/histogrampanel.cc | 5 ++--- rtgui/histogrampanel.h | 2 +- rtgui/pointermotionlistener.h | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 471e696fc..a38fb50ae 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -353,18 +353,17 @@ void HistogramPanel::toggleFreeze () return; } -void HistogramPanel::pointerMoved (bool validPos, Glib::ustring profile, Glib::ustring profileW, int x, int y, int r, int g, int b) +void HistogramPanel::pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw) { if (!validPos) { // do something to un-show vertical bars histogramRGBArea->updateBackBuffer(-1, -1, -1); - histogramRGBArea->queue_draw (); } else { // do something to show vertical bars histogramRGBArea->updateBackBuffer(r, g, b, profile, profileW); - histogramRGBArea->queue_draw (); } + histogramRGBArea->queue_draw (); } /* diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index 0ce62956c..7600e2f23 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -197,7 +197,7 @@ public: histogramArea->update (histRed, histGreen, histBlue, histLuma, histRedRaw, histGreenRaw, histBlueRaw, histChroma); } // pointermotionlistener interface - void pointerMoved (bool validPos, Glib::ustring profile, Glib::ustring profileW, int x, int y, int r, int g, int b); + void pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw = false); // added pointermotionlistener interface void toggleFreeze(); // TODO should be protected diff --git a/rtgui/pointermotionlistener.h b/rtgui/pointermotionlistener.h index 7a275972d..6db59b6cf 100644 --- a/rtgui/pointermotionlistener.h +++ b/rtgui/pointermotionlistener.h @@ -27,7 +27,7 @@ protected: public: virtual ~PointerMotionListener() {} - virtual void pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw = false) {} + virtual void pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw = false) = 0; virtual void toggleFreeze () {} virtual void getRGBText (int r, int g, int b, Glib::ustring &sR, Glib::ustring &sG, Glib::ustring &sB, bool isRaw = false) { sR = "--"; sG = "--"; sB = "--"; } virtual void getHSVText (float h, float s, float v, Glib::ustring &sH, Glib::ustring &sS, Glib::ustring &sV) { sH = "--"; sS = "--"; sV = "--"; } From 15468f8ec454adbbc179ed9afe344fc919362212 Mon Sep 17 00:00:00 2001 From: Thanatomanic Date: Thu, 23 Aug 2018 16:37:05 +0200 Subject: [PATCH 043/115] Added myself to AUTORS.txt with permission --- AUTHORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.txt b/AUTHORS.txt index fe3405128..a9f501919 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -5,6 +5,7 @@ Project initiator: Development contributors, in last name alphabetical order: + Roel Baars Martin Burri Javier Celaya Jacques Desmis From 5471b34a312315d45119eff2c23c87981a490bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Thu, 23 Aug 2018 19:04:53 +0200 Subject: [PATCH 044/115] Fix Clang 6 OMP build (fixes #4746) --- rtgui/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rtgui/CMakeLists.txt b/rtgui/CMakeLists.txt index b1c05d3b5..8150fbce3 100644 --- a/rtgui/CMakeLists.txt +++ b/rtgui/CMakeLists.txt @@ -225,6 +225,10 @@ else() ) endif() +if(OPENMP_FOUND AND NOT APPLE) + set(EXTRA_LIB_RTGUI ${EXTRA_LIB_RTGUI} "atomic") +endif() + # Create config.h which defines where data are stored configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h") From 8b57aa4bc82fd80aef1c6d645105d27793821c5e Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 25 Aug 2018 11:27:19 +0200 Subject: [PATCH 045/115] Hasselblad H4D-40 file loads unusually slow, fixes #4748 --- rtengine/dcraw.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index da66bd6d8..32fc99026 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -2080,8 +2080,12 @@ void CLASS hasselblad_correct() ffcols = get2(); ffrows = get2(); fseek(ifp, hbd.flatfield + 16 * 2, SEEK_SET); + unsigned toRead = sizeof(ushort) * 4 * ffcols * ffrows; + if (toRead > ifp->size) { // there must be something wrong, see Issue #4748 + return; + } - ushort *ffmap = (ushort *)malloc(sizeof(*ffmap) * 4 * ffcols * ffrows); + ushort *ffmap = (ushort *)malloc(toRead); for (i = 0; i < 4 * ffcols * ffrows; i++) ffmap[i] = get2(); /* Get reference values from center of field. This seems to be what Phocus does too, From 1437ab98d8368601f83d997ae0413df555650708 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 25 Aug 2018 12:45:46 +0200 Subject: [PATCH 046/115] parse_hasselblad_gain(), additional check for flatfield, #4748 --- rtengine/dcraw.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 32fc99026..87e69c237 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -2010,7 +2010,7 @@ void CLASS parse_hasselblad_gain() hbd.unknown1 = offset ? base + offset : 0; fseek(ifp, 32, SEEK_CUR); offset = get4(); - hbd.flatfield = offset ? base + offset : 0; + hbd.flatfield = (offset && (base + offset < ifp->size)) ? base + offset : 0; } void CLASS hasselblad_correct() From 4ab4e7298dc7c1e8c8cdc9c3e7f3223f9c0b258f Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 26 Aug 2018 19:04:42 +0200 Subject: [PATCH 047/115] nikon NEF decoder: ~20% speedup, #4751 --- rtengine/dcraw.cc | 170 ++++++++++++++++++++++++++++++---------------- rtengine/dcraw.h | 21 ++++++ 2 files changed, 133 insertions(+), 58 deletions(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 87e69c237..51027ecaf 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -27,6 +27,8 @@ #include #include #include "opthelper.h" +#define BENCHMARK +#include "StopWatch.h" /* dcraw.c -- Dave Coffin's raw photo decoder @@ -602,6 +604,36 @@ inline unsigned CLASS getbithuff_t::operator() (int nbits, ushort *huff) #define getbits(n) getbithuff(n,0) #define gethuff(h) getbithuff(*h,h+1) +inline unsigned CLASS nikbithuff_t::operator() (int nbits, ushort *huff) +{ + unsigned c; + + if (UNLIKELY(nbits == 0)) { + return 0; + } + if (vbits < nbits && LIKELY((c = fgetc(ifp)) != EOF)) { + bitbuf = (bitbuf << 8) + (uchar) c; + vbits += 8; + if (vbits < nbits && LIKELY((c = fgetc(ifp)) != EOF)) { + bitbuf = (bitbuf << 8) + (uchar) c; + vbits += 8; + } + } + c = bitbuf << (32-vbits) >> (32-nbits); + if (huff) { + vbits -= huff[c] >> 8; + c = (uchar) huff[c]; + derror(vbits < 0); + } else { + vbits -= nbits; + } + return c; +} + +#define nikinit(n) nikbithuff() +#define nikbits(n) nikbithuff(n,0) +#define nikhuff(h) nikbithuff(*h,h+1) + /* Construct a decode tree according the specification in *source. The first 16 bytes specify how many codes should be 1-bit, 2-bit @@ -1188,67 +1220,89 @@ void CLASS pentax_load_raw() void CLASS nikon_load_raw() { - static const uchar nikon_tree[][32] = { - { 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy */ - 5,4,3,6,2,7,1,0,8,9,11,10,12 }, - { 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy after split */ - 0x39,0x5a,0x38,0x27,0x16,5,4,3,2,1,0,11,12,12 }, - { 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0, /* 12-bit lossless */ - 5,4,6,3,7,2,8,1,9,0,10,11,12 }, - { 0,1,4,3,1,1,1,1,1,2,0,0,0,0,0,0, /* 14-bit lossy */ - 5,6,4,7,8,3,9,2,1,0,10,11,12,13,14 }, - { 0,1,5,1,1,1,1,1,1,1,2,0,0,0,0,0, /* 14-bit lossy after split */ - 8,0x5c,0x4b,0x3a,0x29,7,6,5,4,3,2,1,0,13,14 }, - { 0,1,4,2,2,3,1,2,0,0,0,0,0,0,0,0, /* 14-bit lossless */ - 7,6,8,5,9,4,10,3,11,12,2,0,1,13,14 } }; - ushort *huff, ver0, ver1, vpred[2][2], hpred[2], csize; - int i, min, max, step=0, tree=0, split=0, row, col, len, shl, diff; +BENCHFUN + static const uchar nikon_tree[][32] = { + { 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy */ + 5,4,3,6,2,7,1,0,8,9,11,10,12 }, + { 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy after split */ + 0x39,0x5a,0x38,0x27,0x16,5,4,3,2,1,0,11,12,12 }, + { 0,1,4,2,3,1,2,0,0,0,0,0,0,0,0,0, /* 12-bit lossless */ + 5,4,6,3,7,2,8,1,9,0,10,11,12 }, + { 0,1,4,3,1,1,1,1,1,2,0,0,0,0,0,0, /* 14-bit lossy */ + 5,6,4,7,8,3,9,2,1,0,10,11,12,13,14 }, + { 0,1,5,1,1,1,1,1,1,1,2,0,0,0,0,0, /* 14-bit lossy after split */ + 8,0x5c,0x4b,0x3a,0x29,7,6,5,4,3,2,1,0,13,14 }, + { 0,1,4,2,2,3,1,2,0,0,0,0,0,0,0,0, /* 14-bit lossless */ + 7,6,8,5,9,4,10,3,11,12,2,0,1,13,14 } }; + ushort *huff, ver0, ver1, vpred[2][2], hpred[2], csize; + int max, step=0, tree=0, split=0; - fseek (ifp, meta_offset, SEEK_SET); - ver0 = fgetc(ifp); - ver1 = fgetc(ifp); - if (ver0 == 0x49 || ver1 == 0x58) - fseek (ifp, 2110, SEEK_CUR); - if (ver0 == 0x46) tree = 2; - if (tiff_bps == 14) tree += 3; - read_shorts (vpred[0], 4); - max = 1 << tiff_bps & 0x7fff; - if ((csize = get2()) > 1) - step = max / (csize-1); - if (ver0 == 0x44 && ver1 == 0x20 && step > 0) { - for (i=0; i < csize; i++) - curve[i*step] = get2(); - for (i=0; i < max; i++) - curve[i] = ( curve[i-i%step]*(step-i%step) + - curve[i-i%step+step]*(i%step) ) / step; - fseek (ifp, meta_offset+562, SEEK_SET); - split = get2(); - } else if (ver0 != 0x46 && csize <= 0x4001) - read_shorts (curve, max=csize); - while (curve[max-2] == curve[max-1]) max--; - huff = make_decoder (nikon_tree[tree]); - fseek (ifp, data_offset, SEEK_SET); - getbits(-1); - for (min=row=0; row < height; row++) { - if (split && row == split) { - free (huff); - huff = make_decoder (nikon_tree[tree+1]); - max += (min = 16) << 1; + fseek (ifp, meta_offset, SEEK_SET); + ver0 = fgetc(ifp); + ver1 = fgetc(ifp); + if (ver0 == 0x49 || ver1 == 0x58) + fseek (ifp, 2110, SEEK_CUR); + if (ver0 == 0x46) tree = 2; + if (tiff_bps == 14) tree += 3; + read_shorts (vpred[0], 4); + max = 1 << tiff_bps & 0x7fff; + if ((csize = get2()) > 1) + step = max / (csize-1); + if (ver0 == 0x44 && ver1 == 0x20 && step > 0) { + for (int i=0; i < csize; i++) + curve[i*step] = get2(); + for (int i=0; i < max; i++) + curve[i] = ( curve[i-i%step]*(step-i%step) + + curve[i-i%step+step]*(i%step) ) / step; + fseek (ifp, meta_offset+562, SEEK_SET); + split = get2(); + } else if (ver0 != 0x46 && csize <= 0x4001) + read_shorts (curve, max=csize); + while (curve[max-2] == curve[max-1]) max--; + huff = make_decoder (nikon_tree[tree]); + fseek (ifp, data_offset, SEEK_SET); + nikinit(); + if (split) { + for (int min = 0, row = 0; row < height; row++) { + if (row == split) { + free (huff); + huff = make_decoder (nikon_tree[tree+1]); + max += (min = 16) << 1; + } + for (int col=0; col < raw_width; col++) { + int i = nikhuff(huff); + int len = i & 15; + int shl = i >> 4; + int diff = ((nikbits(len-shl) << 1) + 1) << shl >> 1; + if ((diff & (1 << (len-1))) == 0) + diff -= (1 << len) - !shl; + if (col < 2) hpred[col] = vpred[row & 1][col] += diff; + else hpred[col & 1] += diff; + derror((ushort)(hpred[col & 1] + min) >= max); + RAW(row,col) = curve[LIM((short)hpred[col & 1],0,0x3fff)]; + } + } + } else { + for (int row=0; row < height; row++) { + for (int col=0; col < raw_width; col++) { + int len = nikhuff(huff) & 15; + int diff = ((nikbits(len) << 1) + 1) >> 1; + if ((diff & (1 << (len-1))) == 0) + diff -= (1 << len) - 1; + if (col < 2) hpred[col] = vpred[row & 1][col] += diff; + else hpred[col & 1] += diff; + if((ushort)(hpred[col & 1]) >= max) derror(); +// derror((ushort)(hpred[col & 1]) >= max); + RAW(row,col) = curve[LIM((short)hpred[col & 1],0,0x3fff)]; + } + } } - for (col=0; col < raw_width; col++) { - i = gethuff(huff); - len = i & 15; - shl = i >> 4; - diff = ((getbits(len-shl) << 1) + 1) << shl >> 1; - if ((diff & (1 << (len-1))) == 0) - diff -= (1 << len) - !shl; - if (col < 2) hpred[col] = vpred[row & 1][col] += diff; - else hpred[col & 1] += diff; - if ((ushort)(hpred[col & 1] + min) >= max) derror(); - RAW(row,col) = curve[LIM((short)hpred[col & 1],0,0x3fff)]; + free (huff); + data_error += nikbithuff.errorCount(); + if(data_error) { + std::cerr << nikbithuff.errorCount() << " / " << data_error << std::endl; + std::cerr << ifname << " decoded with " << data_error << " errors. File possibly corrupted" << std::endl; } - } - free (huff); } void CLASS nikon_yuv_load_raw() diff --git a/rtengine/dcraw.h b/rtengine/dcraw.h index 9edc4196b..b17a93c28 100644 --- a/rtengine/dcraw.h +++ b/rtengine/dcraw.h @@ -60,6 +60,7 @@ public: ,RT_matrix_from_constant(0) ,RT_from_adobe_dng_converter(false) ,getbithuff(this,ifp,zero_after_ff) + ,nikbithuff(this,ifp) { memset(&hbd, 0, sizeof(hbd)); aber[0]=aber[1]=aber[2]=aber[3]=1; @@ -214,6 +215,7 @@ protected: int fcol (int row, int col); void merror (void *ptr, const char *where); void derror(); +void derror(bool condition) {data_error += condition;} ushort sget2 (uchar *s); ushort get2(); unsigned sget4 (uchar *s); @@ -252,6 +254,25 @@ private: }; getbithuff_t getbithuff; +class nikbithuff_t +{ +public: + nikbithuff_t(DCraw *p,IMFILE *&i):parent(p),bitbuf(0),errors(0),vbits(0),ifp(i){} + void operator()() {bitbuf = vbits = 0;}; + unsigned operator()(int nbits, ushort *huff); + unsigned errorCount() { return errors; } +private: + bool derror(bool condition){ + errors += condition; + return condition; + } + DCraw *parent; + unsigned bitbuf, errors; + int vbits; + IMFILE *&ifp; +}; +nikbithuff_t nikbithuff; + ushort * make_decoder_ref (const uchar **source); ushort * make_decoder (const uchar *source); void crw_init_tables (unsigned table, ushort *huff[2]); From b189da0b595271094157d87b0df98e62a7be0d76 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 26 Aug 2018 20:46:14 +0200 Subject: [PATCH 048/115] nikon_load_raw(): minor changes, #4751 --- rtengine/dcraw.cc | 3 +-- rtengine/dcraw.h | 13 +++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 51027ecaf..567d52322 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -1291,8 +1291,7 @@ BENCHFUN diff -= (1 << len) - 1; if (col < 2) hpred[col] = vpred[row & 1][col] += diff; else hpred[col & 1] += diff; - if((ushort)(hpred[col & 1]) >= max) derror(); -// derror((ushort)(hpred[col & 1]) >= max); + derror((ushort)(hpred[col & 1]) >= max); RAW(row,col) = curve[LIM((short)hpred[col & 1],0,0x3fff)]; } } diff --git a/rtengine/dcraw.h b/rtengine/dcraw.h index b17a93c28..9c6ac4aec 100644 --- a/rtengine/dcraw.h +++ b/rtengine/dcraw.h @@ -60,7 +60,7 @@ public: ,RT_matrix_from_constant(0) ,RT_from_adobe_dng_converter(false) ,getbithuff(this,ifp,zero_after_ff) - ,nikbithuff(this,ifp) + ,nikbithuff(ifp) { memset(&hbd, 0, sizeof(hbd)); aber[0]=aber[1]=aber[2]=aber[3]=1; @@ -215,7 +215,7 @@ protected: int fcol (int row, int col); void merror (void *ptr, const char *where); void derror(); -void derror(bool condition) {data_error += condition;} +inline void derror(bool condition) {if(UNLIKELY(condition)) ++data_error;} ushort sget2 (uchar *s); ushort get2(); unsigned sget4 (uchar *s); @@ -257,16 +257,17 @@ getbithuff_t getbithuff; class nikbithuff_t { public: - nikbithuff_t(DCraw *p,IMFILE *&i):parent(p),bitbuf(0),errors(0),vbits(0),ifp(i){} + nikbithuff_t(IMFILE *&i):bitbuf(0),errors(0),vbits(0),ifp(i){} void operator()() {bitbuf = vbits = 0;}; unsigned operator()(int nbits, ushort *huff); unsigned errorCount() { return errors; } private: - bool derror(bool condition){ - errors += condition; + inline bool derror(bool condition){ + if (UNLIKELY(condition)) { + ++errors; + } return condition; } - DCraw *parent; unsigned bitbuf, errors; int vbits; IMFILE *&ifp; From 30041e1dc61bac64f4d631cd2005313a23c9be2b Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 26 Aug 2018 21:26:08 +0200 Subject: [PATCH 049/115] nikon_load_raw(): minor changes, #4751 --- rtengine/dcraw.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 567d52322..63d5ebd15 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -1299,8 +1299,7 @@ BENCHFUN free (huff); data_error += nikbithuff.errorCount(); if(data_error) { - std::cerr << nikbithuff.errorCount() << " / " << data_error << std::endl; - std::cerr << ifname << " decoded with " << data_error << " errors. File possibly corrupted" << std::endl; + std::cerr << ifname << " decoded with " << data_error << " errors. File possibly corrupted." << std::endl; } } From 64608e0313f81b16c75061a3674fe2e10d2c9e0e Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 27 Aug 2018 12:10:45 +0200 Subject: [PATCH 050/115] nikon_load_raw(): another small speedup, #4751 --- rtengine/dcraw.cc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 63d5ebd15..970ed2b42 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -1259,6 +1259,13 @@ BENCHFUN } else if (ver0 != 0x46 && csize <= 0x4001) read_shorts (curve, max=csize); while (curve[max-2] == curve[max-1]) max--; + + // instead of accessing curve[LIM((short)hpred[col & 1],0,0x3fff)] in the inner loop, we just fill the curve with the correct values and access curve[hpred[col & 1]] + for(int i = 0x4000; i < 0x8000; ++i) + curve[i] = curve[3fff]; + for(int i = 0x8000; i < 0x10000; ++i) + curve[i] = curve[0]; + huff = make_decoder (nikon_tree[tree]); fseek (ifp, data_offset, SEEK_SET); nikinit(); @@ -1279,7 +1286,7 @@ BENCHFUN if (col < 2) hpred[col] = vpred[row & 1][col] += diff; else hpred[col & 1] += diff; derror((ushort)(hpred[col & 1] + min) >= max); - RAW(row,col) = curve[LIM((short)hpred[col & 1],0,0x3fff)]; + RAW(row,col) = curve[hpred[col & 1]]; } } } else { @@ -1292,7 +1299,7 @@ BENCHFUN if (col < 2) hpred[col] = vpred[row & 1][col] += diff; else hpred[col & 1] += diff; derror((ushort)(hpred[col & 1]) >= max); - RAW(row,col) = curve[LIM((short)hpred[col & 1],0,0x3fff)]; + RAW(row,col) = curve[hpred[col & 1]]; } } } From a2a5ce72ee235f6b58c8dcf170d07e2a366477a7 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 27 Aug 2018 13:57:56 +0200 Subject: [PATCH 051/115] nikon_load_raw(): fix copy/paste bug, #4751 --- rtengine/dcraw.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 970ed2b42..df4f4875c 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -1262,7 +1262,7 @@ BENCHFUN // instead of accessing curve[LIM((short)hpred[col & 1],0,0x3fff)] in the inner loop, we just fill the curve with the correct values and access curve[hpred[col & 1]] for(int i = 0x4000; i < 0x8000; ++i) - curve[i] = curve[3fff]; + curve[i] = curve[0x3fff]; for(int i = 0x8000; i < 0x10000; ++i) curve[i] = curve[0]; From 42e2defd92665cc3eb85310c064f3f5455d0d1bd Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 27 Aug 2018 20:33:23 +0200 Subject: [PATCH 052/115] nikon_load_raw(): another small speedup, #4751 --- rtengine/dcraw.cc | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index df4f4875c..269faf96a 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -612,10 +612,10 @@ inline unsigned CLASS nikbithuff_t::operator() (int nbits, ushort *huff) return 0; } if (vbits < nbits && LIKELY((c = fgetc(ifp)) != EOF)) { - bitbuf = (bitbuf << 8) + (uchar) c; + bitbuf = (bitbuf << 8) | c; vbits += 8; if (vbits < nbits && LIKELY((c = fgetc(ifp)) != EOF)) { - bitbuf = (bitbuf << 8) + (uchar) c; + bitbuf = (bitbuf << 8) | c; vbits += 8; } } @@ -1291,14 +1291,22 @@ BENCHFUN } } else { for (int row=0; row < height; row++) { - for (int col=0; col < raw_width; col++) { - int len = nikhuff(huff) & 15; - int diff = ((nikbits(len) << 1) + 1) >> 1; + for (int col=0; col < 2; col++) { + int len = nikhuff(huff); + int diff = nikbits(len); if ((diff & (1 << (len-1))) == 0) diff -= (1 << len) - 1; - if (col < 2) hpred[col] = vpred[row & 1][col] += diff; - else hpred[col & 1] += diff; - derror((ushort)(hpred[col & 1]) >= max); + hpred[col] = vpred[row & 1][col] += diff; + derror(hpred[col] >= max); + RAW(row,col) = curve[hpred[col]]; + } + for (int col=2; col < raw_width; col++) { + int len = nikhuff(huff); + int diff = nikbits(len); + if ((diff & (1 << (len-1))) == 0) + diff -= (1 << len) - 1; + hpred[col & 1] += diff; + derror(hpred[col & 1] >= max); RAW(row,col) = curve[hpred[col & 1]]; } } From 2f7910e9810e0ef6cc4adf90a41464ee7f458106 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Tue, 28 Aug 2018 13:20:30 +0200 Subject: [PATCH 053/115] Various icon and cursor improvements #4738 - The mouse cursor now is an open hand when hovering over something which can be panned, e.g. the red square in the Navigator panel. It is a crosshair when hovering over the main preview. - When you pan the red square or the main preview, it's a closed hand. - Now the cursor changes to a crop icon when you're in crop mode. - The cursor changes as needed when you want to resize a crop edge or corner. - The cursor changes when you're in straighten mode. - The curve "add adjustment point" and "edit node in/out values" icons now contain a node in the icon and are more representative of what they do. - The small reset/undo icon is made a bit clearer. --- .../png/dark/color-picker-add-hicontrast.png | Bin 639 -> 631 bytes .../themed/png/dark/color-picker-add.png | Bin 525 -> 510 bytes ...-picker-show.png => color-picker-bars.png} | Bin 523 -> 509 bytes .../png/dark/color-picker-hicontrast.png | Bin 628 -> 596 bytes .../themed/png/dark/color-picker-hide.png | Bin 470 -> 463 bytes .../images/themed/png/dark/color-picker.png | Bin 501 -> 513 bytes .../crop-point-hicontrast.png} | Bin 417 -> 445 bytes .../themed/png/dark/crosshair-adjust.png | Bin 475 -> 483 bytes rtdata/images/themed/png/dark/edit-point.png | Bin 528 -> 490 bytes .../png/dark/node-move-nw-se-hicontrast.png | Bin 0 -> 527 bytes .../png/dark/node-move-sw-ne-hicontrast.png | Bin 0 -> 525 bytes .../png/dark/node-move-x-hicontrast.png | Bin 489 -> 495 bytes rtdata/images/themed/png/dark/node-move-x.png | Bin 407 -> 0 bytes .../png/dark/node-move-xy-hicontrast.png | Bin 524 -> 584 bytes .../images/themed/png/dark/node-move-xy.png | Bin 472 -> 0 bytes .../png/dark/node-move-y-hicontrast.png | Bin 469 -> 513 bytes rtdata/images/themed/png/dark/node-move-y.png | Bin 418 -> 0 bytes .../themed/png/dark/star-gold-hollow.png | Bin 564 -> 0 bytes rtdata/images/themed/png/dark/star-gold.png | Bin 569 -> 0 bytes rtdata/images/themed/png/dark/star-hollow.png | Bin 538 -> 0 bytes rtdata/images/themed/png/dark/star.png | Bin 540 -> 0 bytes .../themed/png/dark/template-narrow.png | Bin 0 -> 313 bytes rtdata/images/themed/png/dark/trash-show.png | Bin 700 -> 0 bytes rtdata/images/themed/png/dark/undo-small.png | Bin 436 -> 422 bytes .../png/light/color-picker-add-hicontrast.png | Bin 639 -> 631 bytes .../themed/png/light/color-picker-add.png | Bin 533 -> 513 bytes .../themed/png/light/color-picker-bars.png | Bin 0 -> 512 bytes .../png/light/color-picker-hicontrast.png | Bin 628 -> 596 bytes .../themed/png/light/color-picker-hide.png | Bin 485 -> 467 bytes .../themed/png/light/color-picker-show.png | Bin 531 -> 0 bytes .../images/themed/png/light/color-picker.png | Bin 514 -> 517 bytes .../png/light/crop-point-hicontrast.png | Bin 0 -> 445 bytes .../themed/png/light/crosshair-adjust.png | Bin 473 -> 482 bytes rtdata/images/themed/png/light/edit-point.png | Bin 493 -> 494 bytes .../png/light/node-move-nw-se-hicontrast.png | Bin 0 -> 527 bytes .../png/light/node-move-sw-ne-hicontrast.png | Bin 0 -> 525 bytes .../png/light/node-move-x-hicontrast.png | Bin 489 -> 495 bytes .../png/light/node-move-xy-hicontrast.png | Bin 524 -> 584 bytes .../images/themed/png/light/node-move-xy.png | Bin 469 -> 0 bytes .../png/light/node-move-y-hicontrast.png | Bin 469 -> 513 bytes .../images/themed/png/light/node-move-y.png | Bin 436 -> 0 bytes .../themed/png/light/star-gold-hollow.png | Bin 564 -> 0 bytes rtdata/images/themed/png/light/star-gold.png | Bin 569 -> 0 bytes .../images/themed/png/light/star-hollow.png | Bin 555 -> 0 bytes rtdata/images/themed/png/light/star.png | Bin 537 -> 0 bytes .../themed/png/light/template-narrow.png | Bin 0 -> 313 bytes rtdata/images/themed/png/light/trash-show.png | Bin 701 -> 0 bytes rtdata/images/themed/png/light/undo-small.png | Bin 476 -> 435 bytes .../svg/color-picker-add-hicontrast.svg | 64 +++---- rtdata/images/themed/svg/color-picker-add.svg | 55 +++--- ...-picker-show.svg => color-picker-bars.svg} | 57 +++--- .../themed/svg/color-picker-hicontrast.svg | 58 +++--- .../images/themed/svg/color-picker-hide.svg | 26 +-- rtdata/images/themed/svg/color-picker.svg | 59 +++--- .../themed/svg/crop-point-hicontrast.svg | 176 ++++++++++++++++++ rtdata/images/themed/svg/crosshair-adjust.svg | 38 +++- rtdata/images/themed/svg/edit-point.svg | 62 +++--- ...e-x.svg => node-move-nw-se-hicontrast.svg} | 59 +++--- ...-xy.svg => node-move-sw-ne-hicontrast.svg} | 71 +++---- .../themed/svg/node-move-x-hicontrast.svg | 35 ++-- .../themed/svg/node-move-xy-hicontrast.svg | 99 +++++++--- .../themed/svg/node-move-y-hicontrast.svg | 57 +++--- rtdata/images/themed/svg/node-move-y.svg | 120 ------------ rtdata/images/themed/svg/undo-small.svg | 5 +- rtgui/cropwindow.cc | 2 +- rtgui/cursormanager.cc | 62 +++--- rtgui/cursormanager.h | 10 +- rtgui/toolbar.cc | 2 +- 68 files changed, 651 insertions(+), 466 deletions(-) rename rtdata/images/themed/png/dark/{color-picker-show.png => color-picker-bars.png} (50%) rename rtdata/images/themed/png/{light/node-move-x.png => dark/crop-point-hicontrast.png} (59%) create mode 100644 rtdata/images/themed/png/dark/node-move-nw-se-hicontrast.png create mode 100644 rtdata/images/themed/png/dark/node-move-sw-ne-hicontrast.png delete mode 100644 rtdata/images/themed/png/dark/node-move-x.png delete mode 100644 rtdata/images/themed/png/dark/node-move-xy.png delete mode 100644 rtdata/images/themed/png/dark/node-move-y.png delete mode 100644 rtdata/images/themed/png/dark/star-gold-hollow.png delete mode 100644 rtdata/images/themed/png/dark/star-gold.png delete mode 100644 rtdata/images/themed/png/dark/star-hollow.png delete mode 100644 rtdata/images/themed/png/dark/star.png create mode 100644 rtdata/images/themed/png/dark/template-narrow.png delete mode 100644 rtdata/images/themed/png/dark/trash-show.png create mode 100644 rtdata/images/themed/png/light/color-picker-bars.png delete mode 100644 rtdata/images/themed/png/light/color-picker-show.png create mode 100644 rtdata/images/themed/png/light/crop-point-hicontrast.png create mode 100644 rtdata/images/themed/png/light/node-move-nw-se-hicontrast.png create mode 100644 rtdata/images/themed/png/light/node-move-sw-ne-hicontrast.png delete mode 100644 rtdata/images/themed/png/light/node-move-xy.png delete mode 100644 rtdata/images/themed/png/light/node-move-y.png delete mode 100644 rtdata/images/themed/png/light/star-gold-hollow.png delete mode 100644 rtdata/images/themed/png/light/star-gold.png delete mode 100644 rtdata/images/themed/png/light/star-hollow.png delete mode 100644 rtdata/images/themed/png/light/star.png create mode 100644 rtdata/images/themed/png/light/template-narrow.png delete mode 100644 rtdata/images/themed/png/light/trash-show.png rename rtdata/images/themed/svg/{color-picker-show.svg => color-picker-bars.svg} (50%) create mode 100644 rtdata/images/themed/svg/crop-point-hicontrast.svg rename rtdata/images/themed/svg/{node-move-x.svg => node-move-nw-se-hicontrast.svg} (64%) rename rtdata/images/themed/svg/{node-move-xy.svg => node-move-sw-ne-hicontrast.svg} (64%) delete mode 100644 rtdata/images/themed/svg/node-move-y.svg diff --git a/rtdata/images/themed/png/dark/color-picker-add-hicontrast.png b/rtdata/images/themed/png/dark/color-picker-add-hicontrast.png index 53eaabf6036423321b4c4e9d66920b9c5cf903f9..5dcdacf1fa9b745d4f1e739c00983c69dd7c2ba9 100644 GIT binary patch delta 380 zcmey*@||S^D`S08fKQ04dx1}Lb29@2!~g&Pf#mGjvwX8HjjU%9>{ z$S;^-x8m)~RKRkHpL*>g`XYVwp9q9Agr06sY>UT~4aUwXTFw&^xir)V6OtKIZZGbsjXuwD>(S~h x6PcgPzj&DCjIjj!yZjo{E31}g&an0S!d9szq+zRjLJ;V922WQ%mvv4FO#no9m!<#! delta 388 zcmey)@}Fe`D`S0QfKQ04dw~xF1H<<1+b>_f3}nCoBNza=oSd9Ma_`=~a4BTQq)C&` zojV5+VPazP@%3|bbV^N4{rdIm&6_tlI5>b(|NsBLb^Gr64V!>mM@L6FIl0Eh#)O3W z1fZgnloSE3{{cW%3MD~)!3>ob?#I~ZzkGUs!fA`k9~6Byrb~w$z3a%o{LB3VU+> zT#&es+FW)aK!$}d+~ z^W?uC3(}jit!_Wxs=L2?-P7}mpG77-H~7`<@#Wd-16g;DhAW=r?)e+87s&c%vu$_t niy3kC%U;;LocF`>t1bV0LzbUG-rkpij$-h1^>bP0l+XkKwrqaB delta 269 zcmeyz+{?0oi?RL;5;%MI?74I2fTVkY4^SA$0FtX$uLhDwj~)e*5WsmZ-<^ShL9isq zFZh|x@*rDPDTdAS_A#Y$U#{v}tNParC^_BJ#W6(VeCfsOOw9^BtQU0LBwqcm&vlGC zD)PC4pOgELcO&l~za!lB1tQU%tub4lZ;Y5Q@phjM=eBv-rm|cYTIbx9v33Z`@9WmO z!g$s;Aojy9RWtE7mCR*|=O^4fan$Z){J&O9_8p4a_g<$@NSjR(G{AYb*_(>>$e}7A9Ekl1ZU;he)ds~2RWbkzLV|7{Ql+XkK DRWXCt diff --git a/rtdata/images/themed/png/dark/color-picker-show.png b/rtdata/images/themed/png/dark/color-picker-bars.png similarity index 50% rename from rtdata/images/themed/png/dark/color-picker-show.png rename to rtdata/images/themed/png/dark/color-picker-bars.png index acd3699eb8acb7cc23873313193ef60bfaabe06c..66e74986496bd8fde2321070009d39bb43f0965e 100644 GIT binary patch delta 252 zcmeBX`OCb4i?QClz~>AYoIiga!Z>^OEQE3H+&N@6MDWz9Q;U92Gh<+25G)Du3ub87 z=Pym2|7zg(4Y&UPzqM+mr+CgL z+kRtq!-G4QpY&lWd3a#G2~*gCC!QwjR?iQ*7*iG9^wrw-n1#ixqw5uCJzS{ZyKw&$ zZocc%p?Bv?3tHUx_aNM?`u}4-HTKimwH0@6GQausDqB&M_0vO(J^sbBKe*JH=QZtF i{&?d4qnnr4J>k`T%9?I)KkpIHO$?r{elF{r5}E)%`+=hX delta 267 zcmey%+|9Cqi?RL;5;%MI?74I2fTVkY4^SA$0FtX$uLhDwj~)e*5WsmZ-<^ShL9isq zFZh|x@*rDPDTdAS_A#Y$U#{v}tNParC^^;B#W6(VeCfnUp(6?$tT$r{I(PohbboA- zD%gHLFHV!;p?@RmKEaRmjuu^ek95V9eu!8z;bg9ocT;x3TD64?hbI{KKNgs9W%m0; zT)d5Gd?Dg{;yTYZG?yRLdlH*szVpV^JwL+t{1l12_(}6goJ^SQBKB2h>a=IfvXzc^{ViyuQ8r)0_VVpT(5rg;#91?<%fk$n)Y8oRKIoALv2`Pgg&eb<9o)O#pJx Bg*^ZO diff --git a/rtdata/images/themed/png/dark/color-picker-hicontrast.png b/rtdata/images/themed/png/dark/color-picker-hicontrast.png index c2592a8b79451f3d9dfbce2f4e08ec7d54ab9df4..c7bfb850b7c7523994a19060a5a7f071788ec92d 100644 GIT binary patch delta 345 zcmeyua)o6BD`S0rfKQ04dw~xF5@2LxoH1htT;Tuz|Gd1sKoTwjWQdE4x3skU{rguz zK>^6k&(DX*_Vn~LHa7nJ`4h-pym)a+N{X|yGmsq@7iVH(0%QQq*?Hul3Xr8-669AO z%y4eLBInorJcrl*{`iS;pQzxAUC$nN?tfUhckivVy?f8TJ$BRPW#bK?`U##cjv*T7 z&z?UmbVz}R^#VhZ_d@=ttoW?ZPyg?0q^2K`oPO`=$+JF8ABz1RtAx(}c&vTJk?hhP z)33O`sXp%!YqO@WSv&GUoR-oP!TjzpAX5FIf20 zxN=>`z3HsAJN`WK{gCA=bLHXmE3Ioc@x5w$Hm`8P?M0Qx5~sx+kblZ6{gs=&OXl`v QpyL=kUHx3vIVCg!0P3`pdjJ3c delta 377 zcmcb@@`YssD`S02fKQ04dw~xF1H;v;SAir1Ff%hVf&q}befxGG>FVkVB=_#!3nYOu zKoS#t{rdIXxpNS4M@OgB)Knl_OiZk&r)S2D89?^`|NmF7S%3HLeGU$eq@<)P*XnP| z$;kmNXl!is?^pc`RH9T8gvUSV)ZcX8o2z8_i7#FbR$@y|7S=4)Y-@Yddf zrOv>5U&7;^Tk_bqev9FLuEZ-RR(;Fzt^4-+rUQ{Sm-6_3SwCFUs(r`gV&fVk&$4BD qx{+yS{;HN5^MalERNgCXvyER{$m7jxkfscDD1)b~pUXO@geCxc4~|^` diff --git a/rtdata/images/themed/png/dark/color-picker-hide.png b/rtdata/images/themed/png/dark/color-picker-hide.png index 992ee235458c68988f8034be9a34c92fbc13fb2a..0bd4fafba93b3218f720f816fdd2ae2d854d59a2 100644 GIT binary patch delta 211 zcmcb{e4cp&D`UNMfKQ04dx6hcFgODSCr_S)Fo2}5?B)^%1_sWOAirP+Z+jz6j(X7? z)8g&Zfr6EuE{-7*my;6?aLs99evqT)=*VnwJRl%|;TWHoh)77orbtyOR#xr>GS9Y| zI3~_mwP4#8H})A?q8qoQ?bylZD7&h_o0BbVGQ$p*X5l+dqHJQUJ6cZ&sqvgC;0$AB zQ{KU{nc1nS(U9e&x{k*irBapmtHd8ZTA<;~#Nc?6f7&kHOBp~{FnGH9xvXEak7aXC5R0Gp8$?}MCe4vvZz>aGC+OvlprL_|c|3U#zu zS(y`LzJGEGWYw6hxo3|NkJ`elh&Ybv97)|lb9kl)Bow=O7%VxoHaswayKVOoPR}M* z&!&S+o=u7!l8OffWEL`{8%HYK;91G%@h?}z=^2M|VaS~gYy!*-SEmZ@ki6#kALtMU MPgg&ebxsLQ0A(CgN&o-= diff --git a/rtdata/images/themed/png/dark/color-picker.png b/rtdata/images/themed/png/dark/color-picker.png index 1a39d857a55b13812d9c4e6188a727c7a8a0e02b..f0174fd44e604bf60773164956e9107b98f5d976 100644 GIT binary patch delta 273 zcmey$+{iLPf|G-pfq~)r%Cn~?Dn6;V4DbnYbuaKa0|RHzo`o^boI7_8!ajfgJcI!e z0jdFl)2C10y&2F9G)%Z8$S;`TO1A#|(r24FdXo58M@qK1Z`&64N+bv<-R$Y&7@~20 z>O^lo7DWzLN5?-4jf?*u?)xV6rgq8f*6vl)#W@-J)wN6W*zHnzs}Iih-d+(?IWeiy z{ZHP?0-;a`-3)AKu z4mt6rn&B6Rt&GKsk0ui}NWQNt$7Am_zb6NP-+7GC5v;1vC~ zXKn!}`?s1Id}5+)O3X7_W;5?Lx}&P;A(X?*!O5nr!pYWq8p!a~Ww)4}9LDUlNQ3d@ oe&N=M7Tl^6EplH*Fn2IAbh(ICeb=6Q7w8@aPgg&ebxsLQ06pYwV*mgE diff --git a/rtdata/images/themed/png/light/node-move-x.png b/rtdata/images/themed/png/dark/crop-point-hicontrast.png similarity index 59% rename from rtdata/images/themed/png/light/node-move-x.png rename to rtdata/images/themed/png/dark/crop-point-hicontrast.png index 7687ad6e955917528f3f15c7d3bec8a0ac27f266..65aa29856ddda1cd9410cd5fb299b6e1bbe86568 100644 GIT binary patch delta 185 zcmZ3;yq9?cFJrxcfB-8iD+2>VOG`^rQxlNU*473jf#CoD|DQj9w%Jj89mwG<3GxeO zIPp{d&mV=qa=%l5gaZZRJY5_^BrYc>II!h79pd0i-m2VmcuThMq@Hqxro%ca2MvnV zCMj+XOL|^#ZqC-CXFe-}&V_CcTNkx8OI3_7LNZ3)u*1=cJ>|d|P656PDGNSESSTDn iF!f=vCG#qFM+S!Na#o4UwAQ49T;u8L=d#Wzp$P!kUPZY8 delta 157 zcmdnXypVYVFJrwb45+E885zy{C&~h{WaOgay(G%>kSWO{GfAs~3APG$$}j*nD?FqpRo1M#mjp zjg5zIOlS=B^lWgvaf5Mc^CF(B3?hqPGK(@4>vBy$d*X&0&@2W|S3j3^P6De`qLbDFKh?ORC>BNhDcmaPEg>mSg(BJOzR_qXF=QDCUP41 zEm)8s9y4+A0tqMgMGH9QoPDaH!4?0!pks&2LCeOIJUm_ozghSdEZ9{gAIRh#XJBb( zej|{~k)CA6Jb98)^TbI^0ilmrSlXSN7#F@tFq_dNQDDf>8N837lbO}4f|-@!4U>@U UJ=c_%Kvyt$y85}Sb4q9e0P@>o9RL6T delta 223 zcmaFNe4BX#D`UNSfKQ0)sZ*!UoH^rO-~%Kf;QaaXXTjj~>C-?FAQQ;&Xg>6Zfq{Xy zB*-t=V>83kMFu=^s{;;Cn6b@asx(ld)YHW=MB;LCfD;psm)GPeQ=DQJ%9IwXs(u&J zP`_c};n^T~C@?x_56`)aW@g(Oiw~&eh4;BA3$^Pq9ttcK5fKRpN&=FcNdcM(2^qmb zrxFqp%AKA%O!Z~aZkCwPc{*c_9)r~tsomlMHp`dfbw0_R!r;inU>T{iP;+yw2+#!# Mp00i_>zopr0C$OASO5S3 diff --git a/rtdata/images/themed/png/dark/edit-point.png b/rtdata/images/themed/png/dark/edit-point.png index 1c3317f8604d1a57632cb74820cf813735a292d2..8ead1ea6609264b86887cfe22b1109c70288905f 100644 GIT binary patch delta 250 zcmbQh@``za1SbnK0|SFlq{8Wmicjj*1AIbU&zw2qUf=^HuV23oB!S@k`SYhvor18> zo;?d;NVFJ60k!g$1o;JTW_ZRjzdk{*!ahvB>5$R!T|kKzPZ!4!iOb0XE=)WTmeGC6 zg;Eh*4`ogZwKW^`6&xsHcb7OmrEztV@)Tv60|yKQ(;76>n3-2APGO$J(RP!0DnoIC zP(q(b2-BIFcMb^TJe$PxtfM$$gOr-VhDOUEp0nMovJw#oWQ5uL94*qDq8Bbu@QGAA pp)!NfV((fOmM$j+p}Ea03`av14ZVEx!+;KA@O1TaS?83{1OSomW90w< delta 289 zcmaFGJb`6`1SbbG0|UeLm1j>)RD4oz7T^=&dIk)hJb40PoI7{!?Af#K1wIfikPQSU zPo6w|`ZPoYLMmqpSprQGED7=p-W<#}`W5Ukc;# ztBM}EvLCm9StZnZM^!80ko!pnZx)`J3!bv5itl;a7VN>e{qUi?*Esc*+|<*Z>RW4> z?#=X!Th969Q1+fnsW-1G+AR20BT_Qy701(yMcqqtiY%Y?ybGLr``i7Zuk{g+xnq6! WG+n~)@MZ!X$>8bg=d#Wzp$Pyu?2S_Z diff --git a/rtdata/images/themed/png/dark/node-move-nw-se-hicontrast.png b/rtdata/images/themed/png/dark/node-move-nw-se-hicontrast.png new file mode 100644 index 0000000000000000000000000000000000000000..b802c5849ba6ee52b44dac499f95cff8cb5bc282 GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaA1(mo)lsM-XR2F5XXOu8FJ1aPr zloVwqm6l}Y=jjG#Bo?JQ=4584DrA(D6jnBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}ub8sHP+>R#Xz5)uOBv9Pdka&iJ0 zKp-I@!N$f0VFO8JWn~~YAt6CnSQw~=gM)*Qk1sel`2YX^PoF+rxpL)Rw>_Cabs{A} ze!&c1v+7>(r+q7C)v^5e{riEinmu0&)6W_KZ%5edjEGt^P_XkY)2zS-*}zZ4Zs9CFl0OoU?R|H}jfU3-wg? jl4(7Dd;L7}{(o1#BXfe)#K!QOCCGQ4u6{1-oD!M<6>qY9 literal 0 HcmV?d00001 diff --git a/rtdata/images/themed/png/dark/node-move-sw-ne-hicontrast.png b/rtdata/images/themed/png/dark/node-move-sw-ne-hicontrast.png new file mode 100644 index 0000000000000000000000000000000000000000..2e51e88a33c86edd6264f6d119918bd06953f03a GIT binary patch literal 525 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaA1(mo)lsM-XR2F5XXOu8FJ1aPr zloVwqm6l}Y=jjG#Bo?JQ=4584DrA(D6jnBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}ub8sHP+>R#Xz5)#773UU)CCnt~u z0tpETHa0dOLs?llAt3?C78VwU%kuH@{r~^};lqcoU%y_lV#TUet7bTveg&!)Dhcun zX82lb`GP;~TQTd$Z{H7wY3uGTXOv9=%C>mAIEHAP-#XD#s8xZ-MN)}#vNOy3`jFJb zTD!z-{okoCyr%pLxHl_wm$aPsV8^!p-Oa$hgQLQvpH9a3@uX5>u?m6Aw2X;Re zn3^y-H(x$;YimyJIk_)Pzj|M7RlcV$JHLD4=^7JYD@<);T3K0RUfYwax$l literal 0 HcmV?d00001 diff --git a/rtdata/images/themed/png/dark/node-move-x-hicontrast.png b/rtdata/images/themed/png/dark/node-move-x-hicontrast.png index 92a1c49e2befb702f3c3555f7946b337c2d7b8bf..1cc871dbbb5bea54e877414f9b633b0dd0d2c5c8 100644 GIT binary patch delta 243 zcmaFK{GNFOD`UNDfKQ04dw~xF0|Or)9~T!_NJt1LCnq;IH&6ru7#SI-O`8T}^Yioj z`}+eKs;a6$#oF51a&mJ2|NlRD@Zg_6f8NVJ5CqDJlmz(&Go(##{rd3*Bk#Y^e|l%W zYJ5KY>C4|G>7_vV6i*k&5RLP9`(pVT6nL_me@YrS2$mN7Uu@N(a?FL_Vg9T-&uB$8 zp{&Pk%FGEUv2=cFO5ZK}}7k-{9ZIPiYM>T~5+ mFRuDkQPp?Y_Fr*1TkO&MEN>3(YMKqSkipZ{&t;ucLK6UOB|(0{43CpEzomU+ERK!`}5n0T@z;^_M8K-LVNdpDt0(?ST-3xrqz`*(Q=TDzLeHILW zVn90Rm8T3)C09w1UogYm%}?Sr4n#DoTt3zJ5h!Zw>Eak7aXC3*fpkJ^0As?YiH!#X zTN)h&j?7CtabVGsCkGVfoH}qIFXzO86-!hODCER6oN^3o%VJn{v4oMKM1|w??|Bln QK!X@OUHx3vIVCg!03^befdBvi diff --git a/rtdata/images/themed/png/dark/node-move-xy-hicontrast.png b/rtdata/images/themed/png/dark/node-move-xy-hicontrast.png index 3984385af62db139089bf71ffcdc7c0a7d2f9f74..8b843958d04f8b6fa8876bc891c9ddfd5fbdff35 100644 GIT binary patch delta 333 zcmeBSIl;1lm9ai5z$e7jy}(CRRdwprsSFGZjEs!Dyu3gL2L}fqA0H({ThG``j!*5lR>-kKK!RJ6p?#W6(VeD9=4zC#8)E}N~R z#RJ8bxBiY7p04CEmBq?_+9#!I6SL&_$kVG{ZF#p!fkQCseV1}k=)US1g7O8r4YMbR z#4;-EWqC7U&uP1+&+_&H!lKGc7fw>Uv1jhN8b>C!UyL0pb1HWP@Q~^MuP) zpmkfdfboWHv$lsh--)_gxnoaz|IZH`ujb#qpXK)Gk<_CXuQuvG=+|Gh_trPVH|L*o XhEL(D7FfhE9pqzAS3j3^P6-3x|H=9>srbQ#%wLOxF8!8J&Z=Fd7!u?# zd*<_H5w)ci7eQN8zeLfzg^txGDJDpm!4j%Bb^cYgZrwxM*G1k(xz5upusT6U>S zn;F>8JYX?sk3GlI72ERK!`}5n0T@z;^_M8K-LVNdpDd1AIbU&zw2qUf=^Hf#Cf4^FZ?K z*|R_fkOZ<%pFRy?tO$3%1JuG>666;=hhh6OcI7+q>J!3Zn+uNEi2)^wJY5_^BrYcl zxG?b~1Z61-sp~Kw6bv*gYAIIf?NvWy$;-nd!(pqjOwmF}AWXSKxyT`4NyFX136}*= za2g4Sga>Jfq+An7nc!t6AQBLiB$8rwyW^B#4wLq6j?L zm%m|Ozov)&V^~lQlrHgfaSYKozjl&0Uqh_|4{J9^F01R2^MCWTb{V!!$~dHRUxjy% z*n@)-0)es1T^1e>^#1vz|E_;(-{EPO%n}se%rQ#gzPR4pb_+wYi(z@=oRp*!{Yj1m zz6+EqMHGz9e!6ZI@(%CZ{5S6R))j~K>%*e$+rIytV|$P_u+MMSLZAZ}JYD@<);T3K F0RWcSWQhO( delta 217 zcmZoP3BqRjLU}R)uVq#(dgT;#%^TNRY|Nntv z-@bjTiN5^;$l@yr@(X78^7Y%-XWvrzwEwNRzu}1X?QWn5*v@|Xj^#+|wny4-ulKBw zs&kle^eT7YM;SHaN3zU)O%HcJ@CxWGf6Hz$Wxt-4Ze5$Yy7e>W852#G#eFVdQ I&MBb@0D}Nl2LJ#7 diff --git a/rtdata/images/themed/png/dark/node-move-y.png b/rtdata/images/themed/png/dark/node-move-y.png deleted file mode 100644 index 137c79039f7cb5c174757bbbea6231a6a3f78d3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1=Gpc2=J66gGa%A(Blj1mTCX9dTS zlA_F{(vr;lJl)`o#G+KkoXqT0g^ZGt0xNy}ERK!`}5n0T@z;^_M8K-LVNdpDt0(?ST-3xrqoH=v$>{%dr{`~n1 z7cQIz1E2_yp5|x+)WX13666=muyxLpc(w5Uex(^q1r9(_4^J1z5Q)pl2?rQ*I6dZ^ zT;?H@=*%+v@Qode=Qx9cf>ISkEmkVr&}nMoE8v^FU;$GZUzd>xa|eqCA8XY@hTYEt f_Vx-X1TZiN6mYozX!CXfn#thl>gTe~DWM4fbeWJn diff --git a/rtdata/images/themed/png/dark/star-gold-hollow.png b/rtdata/images/themed/png/dark/star-gold-hollow.png deleted file mode 100644 index 44bf29d1226749f782d91fc5e129e2e2472f1070..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1=Gpc2=J66gGa%A(Blj1mTCX9dTS zlA_F{(vr;lJl)`o#G+KkoXqT0g^ZGt0xNy}ERK!`}5n0T@z;^_M8K-LVNdpB90(?ST|Ic7>FYx(4li`0g1Bjf3 zL{4Y;4@5x0*$hBs5GlqBZ{vY_1xkYaf;ThFVon$6a$ccm6wn}{8MQP!RTn6C$kW9! zMB;L?fD02(LeLF?PUX0cBZfh4k3=>oTO8u@X)EZnnCzrDC;3R+0-mQF_lp9|k|Mc7 zPAI%veBeNU#<>FrN|sD;+|=lJ{B}UaX+^faPM#*?8wb=R)k~PZp3qv-WRWH#?8p|A z#4REs;(LL0w%Y0k8X6jhN(7Vo54$-!W{Ry?%E|4@y!6I`Ic)*`(*pQ7+^0QeXLhb< zcIg*kK77)Whll&1OlF&n4P$pbtWu5FLO}FGjW5t`k_6%tPIO7wM!$prt|=P O!{F)a=d#Wzp$P!>y2b?n diff --git a/rtdata/images/themed/png/dark/star-gold.png b/rtdata/images/themed/png/dark/star-gold.png deleted file mode 100644 index 5e38050052c6eca005a09f2a42db0300cb6ddd64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaA1(mo)lsM-XR2F5XXOu8FJ1aPr zloVwqm6l}Y=jjG#Bo?JQ=4584DrA(D6jnBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}s_7T^=&`u_~W|FdAUmf`foctlpn@Hv55qa8a~Ec9ZZH*bZDOI!FB$gZ#B+u3l3jVHnO zW>W#P=!{a1q_$TFS4q8Dc=Ec$ver4xPais%+%#)@#IN8b!7X=wUULlJnHO~~|9!ERK!`}5n0T@z;^_M8K-LVNdpBH1AIbUPoF;RUf^@)%$c)b0AW0O z^av;pVRJi4PXa3DE(!7rZeYkuF!tnO7AsfEoWHLQD7?qh#W6(UvhVqgd`$)-tQTf8 zIUk>NOK6!IpM{WcZ{nh6Yd3Lsu`-i72CJ7xk{)?Q{P9^Ba>?Ap()0e_%7k+V_G~IU zu(jEsaKdjsk(KEMi@x++I4{ioQ)`m<2U)u&dC>)y4rWq;-A`9e`)!)R{Oya+Bp>_3 zeoM9~uiGNY{4Va~43BU%-xbWs+(CY}M=zXUj-FMvsK>T@n^seopTHNMJ-0K}*~<7A v7(X~6@p>U|-pzyIiI$L>^6bTD|j`njxgN@xNAuKdha diff --git a/rtdata/images/themed/png/dark/star.png b/rtdata/images/themed/png/dark/star.png deleted file mode 100644 index 6dde0fbe34e0b57944dd30b34d5e0db5558f94a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1=Gpc2=J66gGa%A(Blj1mTCX9dTS zlA_F{(vr;lJl)`o#G+KkoXqT0g^ZGt0xNy}ERK!`}5n0T@z;^_M8K-LVNdpB{0(?ST&z(DW=FA!Q0v{lG76wk8 zIt66HMP8KaJOrxeDGBlmc5PtDFN;bRmS-}s`kIo+1Qg%p>Eak7aoP9$ZoVc15w-`- zUB>lMk}{q=BFoj(+Io*26g78`xv}zH%vd%+9u3v$GcN5zvh^{Z?qCbba=$XHx%ITzC4{xOB*TFns26;3wl1w&*F2 v7artp(ENJjY|fd?uW5^Zty`O1@snYXoc?y-t!nRqzF_cl^>bP0l+XkK5DU}4 diff --git a/rtdata/images/themed/png/dark/template-narrow.png b/rtdata/images/themed/png/dark/template-narrow.png new file mode 100644 index 0000000000000000000000000000000000000000..78c37450359f234006e18ffbb3752bad5c3c1586 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^AhrMp8<5nmf9C+CSc;uILpXq-h9ji|$mcBZh%9Dc z;5!1sj8nDwq=ABxC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6dzfD}2F zmSp4?G597XXQpN;xRmD?C1xAvFZKn>%Yx)xQj3#|G7CyF^Ya*j63as}Qj375q$*@4 z=jZ9&Sk*NLs4xhm&^f=LvM4h>qlCfPS;4WSq$o3~6r@WxI0NVg$DGXURE3O^k^(Dz z{p6z5#FEUi)a3l!-2A*^kdyRtGLuvDic^dAlPYzK6ZK8>4D=6&B(VZb=l67R4AGdF hoFKuvIN<{W1JeWsM#WuA_X4FDJYD@<);T3K0RWs4UKs!Y literal 0 HcmV?d00001 diff --git a/rtdata/images/themed/png/dark/trash-show.png b/rtdata/images/themed/png/dark/trash-show.png deleted file mode 100644 index 983979634a1345cf1e28983cc98df25e565a1620..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaA1(mo)lsM-XR2F5XXOu8FJ1aPr zloVwqm6l}Y=jjG#Bo?JQ=4584DrA(D6jnBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}s#7vK}(>R#Y;=FFK>M~<97fBwv= zQ)hwb>{*})5S%`J8c3czdGa6=(*Z`tgA5E{;WG!-)F4s^IXMsV@a*K~hKQf&=r|D( zagc)ps2(T+)N+7<;Sek90Zz^X?Cd~ef!u?JhCmXCj_BwB$+R`cuP`t$XqE)|1v9XV z#!K<#Y%UL(YI5?{kJ@#XR?Ur5*wtKBP1e5hao?7wwqW5pztH7jW!wJE0&05f>Ealo zalZA^&7x)nk%q*cc2_Q!BdU2f-;~|^&$>EExa0E6`iC6%A8>e`*l&2Q^4z!2p1Y>G z6sw!5Pn#xfmN(1d-=xn0A7YPk`EFbN(R)S3%kR8=2c17Xb(%lnbfwKsrUfTcIMkIY z{qp}Nl-%6JaPP##{`tpN#4Ud3!E#6{w{ep8DyybN=3;3cS~l(s%}UxO5v>XbYAQ26 z%B{`V^6f+8Q?`=UjfY+{g)HoK*e135U4p38rqmBpD3|YVZ48J@0I|& yGNtXpb6m`p%zodc4mPoD;If#hNrTYd%x2Huh&zhH*V z?rVhE)p8T{XIQi{yxW)wlyLBLaSY+Oo}8e-#$sS$YS|#+<7c^EAhKjV$DTSt)<&RV44$rjF6*2U FngE|0KzjfH delta 170 zcmZ3+yoGs#Fk}6>bLY+=fwO1No(2O5>@9x7J? z8ygSbyphYy{F{kQEtOkygW5I`rKLxh1e&W|C){RYd&Iy{!_MPX8HjjU%9>{ z$S;^-x8m)~RKRkHpL*>g`XYVwp9q9Agr06sY>UT~4aUwXTFw&^xir)V6OtKIZZGbsjXuwD>(S~h x6PcgPzj&DCjIjj!yZjo{E31}g&an0S!d9szq+zRjLJ;V922WQ%mvv4FO#no9m!<#! delta 388 zcmey)@}Fe`D`S0QfKQ04dw~xF1H<<1+b>_f3}nCoBNza=oSd9Ma_`=~a4BTQq)C&` zojV5+VPazP@%3|bbV^N4{rdIm&6_tlI5>b(|NsBLb^Gr64V!>mM@L6FIl0Eh#)O3W z1fZgnloSE3{{cW%3MD~)!3>ob?#I~ZzkGUs!fA`k9~6Byrb~w$z3a%o{LB3VU+>UogY7&7AW~6MEb9v&2_lzZk$Ilwb>#>-ThV43W5;oN$0` zMsT0h0ZTD2FUA7D36m}{N>sN`niRx1lZc&2B$Q11=`Uj??ue%*;K;M}>9x1D{#4inF^)3NbL){g?N?xjoSe=r#sVS3j3^ HP6) znwpvdMIaz7=erirB%zWZzu;#w`oU`Uix@V~6I!{ihB@`}6vs_}Rsm&ad%8G=Xq+#d z7|qn8z~LI$cqIL8{pQ7%rfz)mpC1UV7ujadDm6pqrY?)y{Zso~CY-Ci+Qjz#i%6@` zo4MWr!b}%<7hBzt^L0pCye@lYl6ctL#Av4pww7BHp3fF+&nliWd2-z(ars3vI+=Z( z-mI?|n|QFYxw{G diff --git a/rtdata/images/themed/png/light/color-picker-bars.png b/rtdata/images/themed/png/light/color-picker-bars.png new file mode 100644 index 0000000000000000000000000000000000000000..a7a9b0f07a561c04c64886b709a6c129323dbf49 GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaA1(mo)lsM-XR2F5XXOu8FJ1aPr zloVwqm6l}Y=jjG#Bo?JQ=4584DrA(D6jnBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}s_7T^=&>R#ZZs;Vk4FApRY6ckjz z0LVrLYHDggVW5b*x;l^npBIEHAPpE@y;@2~<7E8}KKX3p>Xa~jODl7%%Z=NreRM6O)EQI7LW)AAe4K?fd8 zv^clf&h4z_RU_BrLstcyp7#|_Zqv9}yv~-7aguiP)`V$$@*C5p#Y7i=uwIw&Nu}bL zK7V>0Z`rwrO`DX{#m{Fxu?vs2GCT5i%?^$`^6k&(DX*_Vn~LHa7nJ`4h-pym)a+N{X|yGmsq@7iVH(0%QQq*?Hul3Xr8-669AO z%y4eLBInorJcrl*{`iS;pQzxAUC$nN?tfUhckivVy?f8TJ$BRPW#bK?`U##cjv*T7 z&z?UmbVz}R^#VhZ_d@=ttoW?ZPyg?0q^2K`oPO`=$+JF8ABz1RtAx(}c&vTJk?hhP z)33O`sXp%!YqO@WSv&GUoR-oP!TjzpAX5FIf20 zxN=>`z3HsAJN`WK{gCA=bLHXmE3Ioc@x5w$Hm`8P?M0Qx5~sx+kblZ6{gs=&OXl`v QpyL=kUHx3vIVCg!0P3`pdjJ3c delta 377 zcmcb@@`YssD`S02fKQ04dw~xF1H;v;SAir1Ff%hVf&q}befxGG>FVkVB=_#!3nYOu zKoS#t{rdIXxpNS4M@OgB)Knl_OiZk&r)S2D89?^`|NmF7S%3HLeGU$eq@<)P*XnP| z$;kmNXl!is?^pc`RH9T8gvUSV)ZcX8o2z8_i7#FbR$@y|7S=4)Y-@Yddf zrOv>5U&7;^Tk_bqev9FLuEZ-RR(;Fzt^4-+rUQ{Sm-6_3SwCFUs(r`gV&fVk&$4BD qx{+yS{;HN5^MalERNgCXvyER{$m7jxkfscDD1)b~pUXO@geCxc4~|^` diff --git a/rtdata/images/themed/png/light/color-picker-hide.png b/rtdata/images/themed/png/light/color-picker-hide.png index 2a0ae672a687fa7548d1036dee59ac3861a616d1..418b5b929fab4d9f5ce57a0f85e78fdc400305b6 100644 GIT binary patch delta 215 zcmaFLe3^LzD`UN4fKQ04dx4Lts;Y*Dh6)$}*=lNP5E3W=WK8V1-O9kgz+DpL7tG+z zYG9@AELfkJ|NgX)B2c*0)5S4F;&O7r0j@(Wq7QOJ9UYl1jt2w;FnBr{FrG@AK1)MG zg5jyb`WFHsZL6a$8Vaf%d@}2zp`@Om|AK8soO%ZjyjjICJ%J<8VN!w9iv)wl-KRx7 zn`{|9n=Bn9fwB=gJs(81C#^qqY2u#Qac$kri+DI07~FRVyW~7Rd>7~f22WQ%mvv4F FO#n{rNQ3|Y delta 233 zcmcc2{FHeED`UNSfKQ04dx4Lts;Y{L3WQWsQv)*K03xoetX%s2tS|!u18+%?UoeA@ zpsSPMa1D@d<2QaP+D(G(#d#3MG1i(`I?(hVLnBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}s_7T^=&stN`wDk?x)O-&8La4+xy za)E512t)ypG&MB^iajt}=goFl enW+8kE7LS~K2y{16Kz08GI+ZBxvX0f~{}= zeUEw@@Zxmxg9nu{Nl7d}s=d?`^DE94N3h4uOMU+B-E*08@gv!-8(G^mmqy-swr^d7 zEaloaenGWZ$1`94we8B5tr!S#s7ErEh|5< zX!*3V^-ha48`g6!=d!BPIDh5rVx8xSd-t6?S&?;pZ_FaiB~ywFUnkD_rQwR_?te0CWt4r>mdKI;Vst0J+>?YybcN diff --git a/rtdata/images/themed/png/light/crop-point-hicontrast.png b/rtdata/images/themed/png/light/crop-point-hicontrast.png new file mode 100644 index 0000000000000000000000000000000000000000..65aa29856ddda1cd9410cd5fb299b6e1bbe86568 GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1=Gpc2=J66gGa%A(Blj1mTCX9dTS zlA_F{(vr;lJl)`o#G+KkoXqT0g^ZGt0xNy}ERK!`}5n0T@z;^_M8K-LVNdpB{0(?ST-3xpK1O!-FL2hbkX=!R| z0y5g#+JGbw{Qv*|^XJbtJ8G{3Ih-Xye!&bUe#-y(qwrVmcj}LDpkSP*i(`ny<>Ukh zwj8HJ9DK=Jm75N4$rhf}Q?Af-SV!fcL9yB-#m!+!&kN4Y*;@3>XGPGt(9L1%qPAwK zit$BA#>jU#TCt}bIKwHxcOhlL#|R6B;|HcbEVg7`#qP+!uwBk7ahcYdbdX~_UHx3v IIVCg!0Gvsce*gdg literal 0 HcmV?d00001 diff --git a/rtdata/images/themed/png/light/crosshair-adjust.png b/rtdata/images/themed/png/light/crosshair-adjust.png index d0a11b7533409a2035e2be85bb3b2ee7922eb83d..0af7379c24aefb2914034148d0ccebc9187e0af5 100644 GIT binary patch delta 225 zcmcb~{D^r27h}D9fsZN}XlQ7tsHi~LYHDgghPJjgkW^P!hlt1gWO&5Dz`$1$U*X1?ULk{LA=_J(SPlFZEJ#p^ znYeg?gp>QC1srqEzSPj*dS1}ELm_eti<+^4#=$qjHVqGCMA93IcgQje$mnfw?opg` zD2Gi=HI+?Sm36_YBTOvq-d&6f-z1pLXp$({$k2J&kg=1Q)vJP;m0`_e!3%%u-Nb>8 OVDNPHb6Mw<&;$TsZ%Kjx delta 216 zcmaFFe3N+t7h}Dus;YZ|kFv5dkfElg1|&5!G~jF{B_$vm0``mQU1MNi;42C83*OA& z@pMrfkFUvU&BGIBEHb@o1eD45ba4!kxSTBD!o<_m)Y{afD;LnWV&#Gb*&I_g->6uq zFqx@EdE3nj={d^DIXT?V8$9pG1f1jan6s&b!~IZWV`FT{GA*7ijv*44lLcIu zcp@yr?@qK3j^KVM)1AfUF5!M7@n@TZ#POEK)t?lmD8D&y;6fIM@qw1c#-jqK7(Fcx zziISpur%N_aOcuud}d;8U@^N@t=aO?oM}33oIE)ReIkdS9BpFcS(DJG$=t3m=dwVU vh6YFQG)5!NGzPzXZN|n$0v#^T6&M*rL=-C4Zggu0I*7s3)z4*}Q$iB}B8pLG delta 253 zcmaFI{FZrw1SbbG0|UeLm1j>)RD4oz9N-h;>R#ZZqN1XzstP34)YO0s2!IFz*+2#a zK-fU?>xJ|8fW`=v1o;IsEIObUe`EUQh`Zv>8{c#lrG~g&0m@Z)x;TbtoIg9!o9}=E z2dk*)LI1aZ{i97xHgdjPw0c*uTcF&z%)M(GB6Q-S&$XAvRj4^Xc;qroATLJi_@gvS zFB@NzBR|WNw<){r;x+HM=Wd$0%wU_yR-?5gv;5i}Tkc=J_}wyBNum4#?>Cm)>fS6X ivSxg=eDlz54L8?JR+~vT{j`9NVDNPHb6Mw<&;$Ue%3Q?& diff --git a/rtdata/images/themed/png/light/node-move-nw-se-hicontrast.png b/rtdata/images/themed/png/light/node-move-nw-se-hicontrast.png new file mode 100644 index 0000000000000000000000000000000000000000..b802c5849ba6ee52b44dac499f95cff8cb5bc282 GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaA1(mo)lsM-XR2F5XXOu8FJ1aPr zloVwqm6l}Y=jjG#Bo?JQ=4584DrA(D6jnBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}ub8sHP+>R#Xz5)uOBv9Pdka&iJ0 zKp-I@!N$f0VFO8JWn~~YAt6CnSQw~=gM)*Qk1sel`2YX^PoF+rxpL)Rw>_Cabs{A} ze!&c1v+7>(r+q7C)v^5e{riEinmu0&)6W_KZ%5edjEGt^P_XkY)2zS-*}zZ4Zs9CFl0OoU?R|H}jfU3-wg? jl4(7Dd;L7}{(o1#BXfe)#K!QOCCGQ4u6{1-oD!M<6>qY9 literal 0 HcmV?d00001 diff --git a/rtdata/images/themed/png/light/node-move-sw-ne-hicontrast.png b/rtdata/images/themed/png/light/node-move-sw-ne-hicontrast.png new file mode 100644 index 0000000000000000000000000000000000000000..2e51e88a33c86edd6264f6d119918bd06953f03a GIT binary patch literal 525 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaA1(mo)lsM-XR2F5XXOu8FJ1aPr zloVwqm6l}Y=jjG#Bo?JQ=4584DrA(D6jnBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}ub8sHP+>R#Xz5)#773UU)CCnt~u z0tpETHa0dOLs?llAt3?C78VwU%kuH@{r~^};lqcoU%y_lV#TUet7bTveg&!)Dhcun zX82lb`GP;~TQTd$Z{H7wY3uGTXOv9=%C>mAIEHAP-#XD#s8xZ-MN)}#vNOy3`jFJb zTD!z-{okoCyr%pLxHl_wm$aPsV8^!p-Oa$hgQLQvpH9a3@uX5>u?m6Aw2X;Re zn3^y-H(x$;YimyJIk_)Pzj|M7RlcV$JHLD4=^7JYD@<);T3K0RUfYwax$l literal 0 HcmV?d00001 diff --git a/rtdata/images/themed/png/light/node-move-x-hicontrast.png b/rtdata/images/themed/png/light/node-move-x-hicontrast.png index 92a1c49e2befb702f3c3555f7946b337c2d7b8bf..1cc871dbbb5bea54e877414f9b633b0dd0d2c5c8 100644 GIT binary patch delta 243 zcmaFK{GNFOD`UNDfKQ04dw~xF0|Or)9~T!_NJt1LCnq;IH&6ru7#SI-O`8T}^Yioj z`}+eKs;a6$#oF51a&mJ2|NlRD@Zg_6f8NVJ5CqDJlmz(&Go(##{rd3*Bk#Y^e|l%W zYJ5KY>C4|G>7_vV6i*k&5RLP9`(pVT6nL_me@YrS2$mN7Uu@N(a?FL_Vg9T-&uB$8 zp{&Pk%FGEUv2=cFO5ZK}}7k-{9ZIPiYM>T~5+ mFRuDkQPp?Y_Fr*1TkO&MEN>3(YMKqSkipZ{&t;ucLK6UOB|(0{43CpEzomU+({ThG``j!*5lR>-kKK!RJ6p?#W6(VeD9=4zC#8)E}N~R z#RJ8bxBiY7p04CEmBq?_+9#!I6SL&_$kVG{ZF#p!fkQCseV1}k=)US1g7O8r4YMbR z#4;-EWqC7U&uP1+&+_&H!lKGc7fw>Uv1jhN8b>C!UyL0pb1HWP@Q~^MuP) zpmkfdfboWHv$lsh--)_gxnoaz|IZH`ujb#qpXK)Gk<_CXuQuvG=+|Gh_trPVH|L*o XhEL(D7FfhE9pqzAS3j3^P6-3x|H=9>srbQ#%wLOxF8!8J&Z=Fd7!u?# zd*<_H5w)ci7eQN8zeLfzg^txGDJDpm!4j%Bb^cYgZrwxM*G1k(xz5upusT6U>S zn;F>8JYX?sk3GlI72ERK!`}5n0T@z;^_M8K-LVNdpCS1AIbU-3xqFVL(YqNli@+!c$RE z0kVO>*w|QIT^%AgWm3^ppho_ZAirRSInOq$#ow8*FOrir^icB*(F4?L zm%m|Ozov)&V^~lQlrHgfaSYKozjl&0Uqh_|4{J9^F01R2^MCWTb{V!!$~dHRUxjy% z*n@)-0)es1T^1e>^#1vz|E_;(-{EPO%n}se%rQ#gzPR4pb_+wYi(z@=oRp*!{Yj1m zz6+EqMHGz9e!6ZI@(%CZ{5S6R))j~K>%*e$+rIytV|$P_u+MMSLZAZ}JYD@<);T3K F0RWcSWQhO( delta 217 zcmZoP3BqRjLU}R)uVq#(dgT;#%^TNRY|Nntv z-@bjTiN5^;$l@yr@(X78^7Y%-XWvrzwEwNRzu}1X?QWn5*v@|Xj^#+|wny4-ulKBw zs&kle^eT7YM;SHaN3zU)O%HcJ@CxWGf6Hz$Wxt-4Ze5$Yy7e>W852#G#eFVdQ I&MBb@0D}Nl2LJ#7 diff --git a/rtdata/images/themed/png/light/node-move-y.png b/rtdata/images/themed/png/light/node-move-y.png deleted file mode 100644 index 2fbf0b7a332bfaaba4bd2f981d9ce7e680cb6373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1=Gpc2=J66gGa%A(Blj1mTCX9dTS zlA_F{(vr;lJl)`o#G+KkoXqT0g^ZGt0xNy}ERK!`}5n0T@z;^_M8K-LVNdpDd1AIbU-3xqFVL($;Q(0MAO-&6Z zpbBBDtE+pTx_u6)g|{TgFPLG@=4WiG@%{U5hbM#uL|-=nO89xYIEF}EPEI($5W_yf zVq&mh&a^acc8m7AH+C?b;}j7QNmUTskR#$ee!zJTcq`yi5$iv$^leD$P>`n#|zo>gTe~DWM4fOBsb- diff --git a/rtdata/images/themed/png/light/star-gold-hollow.png b/rtdata/images/themed/png/light/star-gold-hollow.png deleted file mode 100644 index 44bf29d1226749f782d91fc5e129e2e2472f1070..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1=Gpc2=J66gGa%A(Blj1mTCX9dTS zlA_F{(vr;lJl)`o#G+KkoXqT0g^ZGt0xNy}ERK!`}5n0T@z;^_M8K-LVNdpB90(?ST|Ic7>FYx(4li`0g1Bjf3 zL{4Y;4@5x0*$hBs5GlqBZ{vY_1xkYaf;ThFVon$6a$ccm6wn}{8MQP!RTn6C$kW9! zMB;L?fD02(LeLF?PUX0cBZfh4k3=>oTO8u@X)EZnnCzrDC;3R+0-mQF_lp9|k|Mc7 zPAI%veBeNU#<>FrN|sD;+|=lJ{B}UaX+^faPM#*?8wb=R)k~PZp3qv-WRWH#?8p|A z#4REs;(LL0w%Y0k8X6jhN(7Vo54$-!W{Ry?%E|4@y!6I`Ic)*`(*pQ7+^0QeXLhb< zcIg*kK77)Whll&1OlF&n4P$pbtWu5FLO}FGjW5t`k_6%tPIO7wM!$prt|=P O!{F)a=d#Wzp$P!>y2b?n diff --git a/rtdata/images/themed/png/light/star-gold.png b/rtdata/images/themed/png/light/star-gold.png deleted file mode 100644 index 5e38050052c6eca005a09f2a42db0300cb6ddd64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaA1(mo)lsM-XR2F5XXOu8FJ1aPr zloVwqm6l}Y=jjG#Bo?JQ=4584DrA(D6jnBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}s_7T^=&`u_~W|FdAUmf`foctlpn@Hv55qa8a~Ec9ZZH*bZDOI!FB$gZ#B+u3l3jVHnO zW>W#P=!{a1q_$TFS4q8Dc=Ec$ver4xPais%+%#)@#IN8b!7X=wUULlJnHO~~|9!ERK!`}5n0T@z;^_M8K-LVNdpD70(?ST)zsA73w%_;KvPrG+uIvR zLbyN@D668P0%5GrbeIX$#a9yK7u>**8_&xm>1j}Dtx_B?>w$1GQ0Abgi(`nyK6M;_UiycQegIph(6ew6M;__)M=wq4eq&!FX$i)R*Pdlo_SFml&XVglWpb?gk zkTE48A;Bm=MPT-U1u>!;yY6%}8c%dIXqU{HwBn%Q0=bRMY6^Y^{z@kp)YaS_9R-_} z6E3@maIvx;byQNQ<`U!L^4jREYkEWDk;Yk`r#=NM=e#?_`LLs4T}r|XQ^rN^vlGm diff --git a/rtdata/images/themed/png/light/star.png b/rtdata/images/themed/png/light/star.png deleted file mode 100644 index f29ccfdcdcce445aebcf033cf59f6e3f4609d65a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1=Gpc2=J66gGa%A(Blj1mTCX9dTS zlA_F{(vr;lJl)`o#G+KkoXqT0g^ZGt0xNy}ERK!`}5n0T@z;^_M8K-LVNdpB{0(?ST)zsA73w(g2s;a7nh6a#? z02LJ#h@iTTk^HjcXe9%yL-7R$K=JLKE{-7*my-otn0RK$ ztZem=x#*yBj!93&k3qXh`RKF_0_OyuW^l9=+VD=gGGlpzMUWUH509@D56_yj+>$Or z5<%KirrbI#aYIIuFL=lndR>|dDBET>nW2HVh-e;VSCtNAYx#!!Pw!8hmpaS3IhWlmf|InTCA+g tjdNIvTeKbZ=H+o*Wai{`-*SPG!QqhV-;Ap{hCnYcc)I$ztaD0e0svhfr;h*t diff --git a/rtdata/images/themed/png/light/template-narrow.png b/rtdata/images/themed/png/light/template-narrow.png new file mode 100644 index 0000000000000000000000000000000000000000..78c37450359f234006e18ffbb3752bad5c3c1586 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^AhrMp8<5nmf9C+CSc;uILpXq-h9ji|$mcBZh%9Dc z;5!1sj8nDwq=ABxC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6dzfD}2F zmSp4?G597XXQpN;xRmD?C1xAvFZKn>%Yx)xQj3#|G7CyF^Ya*j63as}Qj375q$*@4 z=jZ9&Sk*NLs4xhm&^f=LvM4h>qlCfPS;4WSq$o3~6r@WxI0NVg$DGXURE3O^k^(Dz z{p6z5#FEUi)a3l!-2A*^kdyRtGLuvDic^dAlPYzK6ZK8>4D=6&B(VZb=l67R4AGdF hoFKuvIN<{W1JeWsM#WuA_X4FDJYD@<);T3K0RWs4UKs!Y literal 0 HcmV?d00001 diff --git a/rtdata/images/themed/png/light/trash-show.png b/rtdata/images/themed/png/light/trash-show.png deleted file mode 100644 index 9e4ade318d5979eb831973a7c32dcd1818b12079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 701 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaA1(mo)lsM-XR2F5XXOu8FJ1aPr zloVwqm6l}Y=jjG#Bo?JQ=4584DrA(D6jnBy}7ANYP=o#oA4oPAKnl1}6-6gd+xhS&$WFSLOVtGhLYEfcAYN|qJa(lV!_B$IXpd!u!kH}&M2EHR8%s5q>PZ}s#9pDq|=E{-7@ z=Swej_BAVrI0SOJF6`*w-Vwcf-~a!Iy0*x!ndzORpx(&h^3i_bdmSf^)QfT-GI`q@ zPG@xPyrZ&dW&0L4`>QFfLT|0sEa=-k#lCsd{13kiqMF3y?6EfTGveY4mvImaP?fi(9fC+=swR~R2} z`c%+b&Cw|(#V`CsdIOstUk2k}wic-aTVli&JUL8f%{MRTov=J!;B%4Zn%QS;^DFtx z-^>rI$(tbic4b}6`GRj3IzLQh@zs|7qw1IuYX0~nzg~f`Ejg5&`6ABv|6+Ht~^(Q!9XgJ8VCSp#bqTm^US!WKgnySZi dFAxo2V92@5x5n#D+BTqx44$rjF6*2UngE(4I%)s_ delta 236 zcmdnYe20001SbbG0|SGGE`RVu#V7S<0X`wF?gc(7V4w;H5Vo?iGBQ_2Mh3`LQ&R)V z0!ejsb=N)rl7S`(l?3?(GxR7mFP}0iVRLELdLF0XXfw9|L9S1MvPqsUjv*44*Y+Od zJ8Zz=%*>cGX<6p~|LN27g38ywYK~y#=UHlVZQ1SE=NeinuRp#%f6wv!v~xE43wXj7 zgqr`FD&5Ai#QoVUoeNA2x4$>MJMD7K?)!h|%>{;+rF(9!a+&|sww9r=g{gkS#&k`f Obqt=aelF{r5}E)}Bvae~ diff --git a/rtdata/images/themed/svg/color-picker-add-hicontrast.svg b/rtdata/images/themed/svg/color-picker-add-hicontrast.svg index 3d51dd31f..09870ff48 100644 --- a/rtdata/images/themed/svg/color-picker-add-hicontrast.svg +++ b/rtdata/images/themed/svg/color-picker-add-hicontrast.svg @@ -26,7 +26,7 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="34.25" + inkscape:zoom="33.75" inkscape:cx="12" inkscape:cy="12" inkscape:document-units="px" @@ -65,7 +65,7 @@ image/svg+xml - + Maciej Dworak @@ -101,42 +101,36 @@ id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> - - - - - - + sodipodi:nodetypes="ccccccccccccc" /> + + + + + diff --git a/rtdata/images/themed/svg/color-picker-add.svg b/rtdata/images/themed/svg/color-picker-add.svg index 1535ca260..b42b8371d 100644 --- a/rtdata/images/themed/svg/color-picker-add.svg +++ b/rtdata/images/themed/svg/color-picker-add.svg @@ -26,9 +26,9 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="8" - inkscape:cx="-35.100971" - inkscape:cy="6.1695344" + inkscape:zoom="33.75" + inkscape:cx="12" + inkscape:cy="12" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -101,31 +101,36 @@ id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> - - - - + + + + + + diff --git a/rtdata/images/themed/svg/color-picker-show.svg b/rtdata/images/themed/svg/color-picker-bars.svg similarity index 50% rename from rtdata/images/themed/svg/color-picker-show.svg rename to rtdata/images/themed/svg/color-picker-bars.svg index 351c51011..f6c57ea40 100644 --- a/rtdata/images/themed/svg/color-picker-show.svg +++ b/rtdata/images/themed/svg/color-picker-bars.svg @@ -18,7 +18,7 @@ inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="0.92.2 2405546, 2018-03-11" - sodipodi:docname="color-picker-show.svg"> + sodipodi:docname="color-picker-bars.svg"> - - - - + + + + + + diff --git a/rtdata/images/themed/svg/color-picker-hicontrast.svg b/rtdata/images/themed/svg/color-picker-hicontrast.svg index 867f9730b..20ece03b7 100644 --- a/rtdata/images/themed/svg/color-picker-hicontrast.svg +++ b/rtdata/images/themed/svg/color-picker-hicontrast.svg @@ -26,8 +26,8 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="34.25" - inkscape:cx="12" + inkscape:zoom="33.75" + inkscape:cx="7.6740741" inkscape:cy="12" inkscape:document-units="px" inkscape:current-layer="layer1" @@ -42,9 +42,9 @@ inkscape:snap-bbox="true" inkscape:bbox-nodes="true" inkscape:snap-others="false" - inkscape:object-nodes="false" + inkscape:object-nodes="true" inkscape:snap-grids="true" - inkscape:snap-bbox-midpoints="false" + inkscape:snap-bbox-midpoints="true" showguides="true" inkscape:snap-global="true"> image/svg+xml - + Maciej Dworak @@ -101,37 +101,25 @@ id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> - - - - - + style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3266921" + d="m 19.925781,1.0039062 c -1.58641,0.1326355 -2.759269,1.3658728 -3.638672,2.5839844 -0.30321,0.4144601 -0.688746,0.7937159 -1.207031,0.8945313 -0.630431,0.360278 -1.152864,0.9161911 -1.572266,1.5019531 -0.547003,0.8984348 0.0482,1.9358775 0.640626,2.640625 0.817234,0.9044466 1.820357,1.880312 3.107421,1.943359 0.889563,-0.02811 1.502887,-0.8099611 2.082032,-1.396484 C 19.575097,8.6352599 19.779974,8.0379511 20.316406,7.7265625 21.40338,6.7821111 22.639686,5.7804332 22.919922,4.2832031 23.243079,3.0583515 22.571361,1.6511303 21.359375,1.21875 20.905795,1.0309215 20.412996,0.98294526 19.925781,1.0039062 Z m -4.11914,4.7363282 c 0.723717,-0.019419 2.332675,1.2432107 2.392578,2.4648437 -0.03984,0.2570324 -0.552186,0.6690001 -0.884766,0.9023438 C 17.04034,9.327167 16.877887,9.2353204 16.628906,9.1621094 15.922112,8.8485353 15.342642,8.3120018 14.8125,7.4042969 14.667763,7.0628521 14.490162,6.9461703 14.888672,6.484375 c 0.656089,-0.6665108 -0.25284,0.2482286 0.667969,-0.6542969 0.06015,-0.05896 0.146611,-0.08707 0.25,-0.089844 z" + id="path9921-9-3-9-8-3" /> + + + diff --git a/rtdata/images/themed/svg/color-picker-hide.svg b/rtdata/images/themed/svg/color-picker-hide.svg index 9fa9203cf..be180885e 100644 --- a/rtdata/images/themed/svg/color-picker-hide.svg +++ b/rtdata/images/themed/svg/color-picker-hide.svg @@ -18,7 +18,7 @@ inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="0.92.2 2405546, 2018-03-11" - sodipodi:docname="colorPickers-hide.svg"> + sodipodi:docname="color-picker-hide.svg"> image/svg+xml - + Maciej Dworak @@ -102,26 +102,26 @@ inkscape:groupmode="layer" inkscape:label="Layer 1"> + style="opacity:0.3;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" + d="m 5.5,21 c 0,0.828427 -0.6715729,1.5 -1.5,1.5 -0.8284271,0 -1.5,-0.671573 -1.5,-1.5 0,-0.828427 0.6715729,-1.5 1.5,-1.5 0.8284271,0 1.5,0.671573 1.5,1.5 z" + id="path822" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssscs" /> diff --git a/rtdata/images/themed/svg/color-picker.svg b/rtdata/images/themed/svg/color-picker.svg index bff4a0edc..d52d96633 100644 --- a/rtdata/images/themed/svg/color-picker.svg +++ b/rtdata/images/themed/svg/color-picker.svg @@ -26,9 +26,9 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="8" - inkscape:cx="-16.850971" - inkscape:cy="6.1695344" + inkscape:zoom="33.833333" + inkscape:cx="12" + inkscape:cy="12" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -42,9 +42,9 @@ inkscape:snap-bbox="true" inkscape:bbox-nodes="true" inkscape:snap-others="false" - inkscape:object-nodes="false" + inkscape:object-nodes="true" inkscape:snap-grids="true" - inkscape:snap-bbox-midpoints="false" + inkscape:snap-bbox-midpoints="true" showguides="true" inkscape:snap-global="true"> image/svg+xml - + Maciej Dworak @@ -101,27 +101,32 @@ id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> + + + + + - - - + style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a7fff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" + d="m 5.5,21 c 0,0.828427 -0.6715729,1.5 -1.5,1.5 -0.8284271,0 -1.5,-0.671573 -1.5,-1.5 0,-0.828427 0.6715729,-1.5 1.5,-1.5 0.8284271,0 1.5,0.671573 1.5,1.5 z" + id="path822" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssscs" /> diff --git a/rtdata/images/themed/svg/crop-point-hicontrast.svg b/rtdata/images/themed/svg/crop-point-hicontrast.svg new file mode 100644 index 000000000..4a06bfcba --- /dev/null +++ b/rtdata/images/themed/svg/crop-point-hicontrast.svg @@ -0,0 +1,176 @@ + + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/themed/svg/crosshair-adjust.svg b/rtdata/images/themed/svg/crosshair-adjust.svg index 16ff954ac..21862c970 100644 --- a/rtdata/images/themed/svg/crosshair-adjust.svg +++ b/rtdata/images/themed/svg/crosshair-adjust.svg @@ -101,18 +101,48 @@ inkscape:label="Layer 1"> + + + + + + + diff --git a/rtdata/images/themed/svg/edit-point.svg b/rtdata/images/themed/svg/edit-point.svg index b3e16abdf..9f686d6e9 100644 --- a/rtdata/images/themed/svg/edit-point.svg +++ b/rtdata/images/themed/svg/edit-point.svg @@ -26,12 +26,12 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="33.833333" + inkscape:zoom="34.25" inkscape:cx="12" inkscape:cy="12" inkscape:document-units="px" inkscape:current-layer="layer1" - showgrid="false" + showgrid="true" inkscape:window-width="1920" inkscape:window-height="1019" inkscape:window-x="0" @@ -44,8 +44,7 @@ inkscape:snap-others="false" inkscape:object-nodes="false" inkscape:snap-grids="true" - inkscape:snap-bbox-midpoints="false" - showborder="false"> + inkscape:snap-bbox-midpoints="false"> - - - - - + id="defs815" /> @@ -112,31 +99,58 @@ id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> + + + + diff --git a/rtdata/images/themed/svg/node-move-x.svg b/rtdata/images/themed/svg/node-move-nw-se-hicontrast.svg similarity index 64% rename from rtdata/images/themed/svg/node-move-x.svg rename to rtdata/images/themed/svg/node-move-nw-se-hicontrast.svg index 3215ce9f4..375c8ea27 100644 --- a/rtdata/images/themed/svg/node-move-x.svg +++ b/rtdata/images/themed/svg/node-move-nw-se-hicontrast.svg @@ -18,7 +18,7 @@ inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="0.92.2 2405546, 2018-03-11" - sodipodi:docname="node-move-x.svg"> + sodipodi:docname="node-move-nw-se-hicontrast.svg"> + inkscape:snap-bbox-midpoints="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-center="true"> + empspacing="2" + dotted="false" + spacingx="0.5" + spacingy="0.5" /> @@ -64,7 +67,7 @@ image/svg+xml - + Maciej Dworak @@ -100,21 +103,29 @@ id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> - - - + + + + + diff --git a/rtdata/images/themed/svg/node-move-xy.svg b/rtdata/images/themed/svg/node-move-sw-ne-hicontrast.svg similarity index 64% rename from rtdata/images/themed/svg/node-move-xy.svg rename to rtdata/images/themed/svg/node-move-sw-ne-hicontrast.svg index 47c25e81f..fdda47505 100644 --- a/rtdata/images/themed/svg/node-move-xy.svg +++ b/rtdata/images/themed/svg/node-move-sw-ne-hicontrast.svg @@ -18,7 +18,7 @@ inkscape:export-xdpi="96" inkscape:export-ydpi="96" inkscape:version="0.92.2 2405546, 2018-03-11" - sodipodi:docname="node-move-xy.svg"> + sodipodi:docname="node-move-sw-ne-hicontrast.svg"> + inkscape:snap-bbox-midpoints="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-center="true"> + empspacing="2" + dotted="false" + spacingx="0.5" + spacingy="0.5" /> @@ -64,7 +67,7 @@ image/svg+xml - + Maciej Dworak @@ -100,31 +103,29 @@ id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> - - - - - + + + + + diff --git a/rtdata/images/themed/svg/node-move-x-hicontrast.svg b/rtdata/images/themed/svg/node-move-x-hicontrast.svg index 6e6079901..a24af10ef 100644 --- a/rtdata/images/themed/svg/node-move-x-hicontrast.svg +++ b/rtdata/images/themed/svg/node-move-x-hicontrast.svg @@ -41,18 +41,21 @@ inkscape:pagecheckerboard="false" inkscape:snap-bbox="true" inkscape:bbox-nodes="true" - inkscape:snap-others="false" - inkscape:object-nodes="false" + inkscape:snap-others="true" + inkscape:object-nodes="true" inkscape:snap-grids="true" - inkscape:snap-bbox-midpoints="false" - inkscape:snap-bbox-edge-midpoints="true"> + inkscape:snap-bbox-midpoints="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-center="true"> + empspacing="2" + dotted="false" + spacingx="0.5" + spacingy="0.5" /> @@ -64,7 +67,7 @@ image/svg+xml - + Maciej Dworak @@ -101,20 +104,24 @@ inkscape:groupmode="layer" inkscape:label="Layer 1"> - + sodipodi:nodetypes="cccc" /> + diff --git a/rtdata/images/themed/svg/node-move-xy-hicontrast.svg b/rtdata/images/themed/svg/node-move-xy-hicontrast.svg index 9c3915804..05d291870 100644 --- a/rtdata/images/themed/svg/node-move-xy-hicontrast.svg +++ b/rtdata/images/themed/svg/node-move-xy-hicontrast.svg @@ -26,9 +26,9 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="34.25" - inkscape:cx="12" - inkscape:cy="12" + inkscape:zoom="24.218407" + inkscape:cx="6.3691263" + inkscape:cy="12.072563" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" @@ -41,18 +41,21 @@ inkscape:pagecheckerboard="false" inkscape:snap-bbox="true" inkscape:bbox-nodes="true" - inkscape:snap-others="false" - inkscape:object-nodes="false" + inkscape:snap-others="true" + inkscape:object-nodes="true" inkscape:snap-grids="true" - inkscape:snap-bbox-midpoints="false" - inkscape:snap-bbox-edge-midpoints="true"> + inkscape:snap-bbox-midpoints="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-center="true"> + empspacing="2" + dotted="false" + spacingx="0.5" + spacingy="0.5" /> @@ -100,31 +103,69 @@ id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> + + + + + + + - - + id="path5657" + d="M -31.508539,18.321948 -28.000003,23 l 3.508542,-4.678052 z" + style="display:inline;opacity:0.9;fill:#2a7fff;fill-opacity:1;stroke:none;stroke-width:0.0348262" /> + r="3" /> + + diff --git a/rtdata/images/themed/svg/node-move-y-hicontrast.svg b/rtdata/images/themed/svg/node-move-y-hicontrast.svg index fe7b285e7..615f3f94a 100644 --- a/rtdata/images/themed/svg/node-move-y-hicontrast.svg +++ b/rtdata/images/themed/svg/node-move-y-hicontrast.svg @@ -41,18 +41,21 @@ inkscape:pagecheckerboard="false" inkscape:snap-bbox="true" inkscape:bbox-nodes="true" - inkscape:snap-others="false" - inkscape:object-nodes="false" + inkscape:snap-others="true" + inkscape:object-nodes="true" inkscape:snap-grids="true" - inkscape:snap-bbox-midpoints="false" - inkscape:snap-bbox-edge-midpoints="true"> + inkscape:snap-bbox-midpoints="true" + inkscape:snap-bbox-edge-midpoints="true" + inkscape:snap-center="true"> + empspacing="2" + dotted="false" + spacingx="0.5" + spacingy="0.5" /> @@ -64,7 +67,7 @@ image/svg+xml - + Maciej Dworak @@ -100,21 +103,29 @@ id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1"> - - - + + + + + diff --git a/rtdata/images/themed/svg/node-move-y.svg b/rtdata/images/themed/svg/node-move-y.svg deleted file mode 100644 index 3c6e5cfd7..000000000 --- a/rtdata/images/themed/svg/node-move-y.svg +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Maciej Dworak - - - - - - - - RawTherapee icon. - - - - - - - - - - - - - - - - - - diff --git a/rtdata/images/themed/svg/undo-small.svg b/rtdata/images/themed/svg/undo-small.svg index 137c343e6..83b4663a0 100644 --- a/rtdata/images/themed/svg/undo-small.svg +++ b/rtdata/images/themed/svg/undo-small.svg @@ -44,7 +44,8 @@ inkscape:snap-others="false" inkscape:object-nodes="false" inkscape:snap-grids="true" - inkscape:snap-bbox-midpoints="false"> + inkscape:snap-bbox-midpoints="false" + inkscape:snap-global="false"> mainWindow) cResizeWidth = Gdk::Cursor::create (display, Gdk::SB_H_DOUBLE_ARROW); cResizeHeight = Gdk::Cursor::create (display, Gdk::SB_V_DOUBLE_ARROW); - cResizeDiag = Gdk::Cursor::create (display, Gdk::BOTTOM_RIGHT_CORNER); + //cResizeDiag = Gdk::Cursor::create (display, Gdk::BOTTOM_RIGHT_CORNER); cResizeTopLeft = Gdk::Cursor::create (display, Gdk::TOP_LEFT_CORNER); cResizeTopRight = Gdk::Cursor::create (display, Gdk::TOP_RIGHT_CORNER); cResizeBottomLeft = Gdk::Cursor::create (display, Gdk::BOTTOM_LEFT_CORNER); cResizeBottomRight = Gdk::Cursor::create (display, Gdk::BOTTOM_RIGHT_CORNER); - cCropMove = Gdk::Cursor::create (display, Gdk::FLEUR); - cCropMoving = Gdk::Cursor::create (display, Gdk::HAND2); + cCropDraw = Gdk::Cursor::create (display, Gdk::CROSSHAIR); + cCropMove = Gdk::Cursor::create (display, Gdk::CROSSHAIR); cCropSelection = Gdk::Cursor::create (display, Gdk::CROSSHAIR); cLeftTanMove = Gdk::Cursor::create (display, Gdk::SB_LEFT_ARROW); cRightTanMove = Gdk::Cursor::create (display, Gdk::SB_RIGHT_ARROW); @@ -52,26 +52,41 @@ void CursorManager::init (Glib::RefPtr mainWindow) cWait = Gdk::Cursor::create (display, Gdk::CLOCK); Glib::RefPtr crosshair = RTImage::createFromFile ("crosshair-hicontrast.png"); - Glib::RefPtr hand_open = RTImage::createFromFile ("hand-open-hicontrast.png"); - Glib::RefPtr hand_closed = RTImage::createFromFile ("hand-closed-hicontrast.png"); - Glib::RefPtr wbpick = RTImage::createFromFile ("color-picker-hicontrast.png"); - Glib::RefPtr cpick = RTImage::createFromFile ("color-picker-add-hicontrast.png"); + Glib::RefPtr handOpen = RTImage::createFromFile ("hand-open-hicontrast.png"); + Glib::RefPtr handClosed = RTImage::createFromFile ("hand-closed-hicontrast.png"); + Glib::RefPtr cropDraw = RTImage::createFromFile ("crop-point-hicontrast.png"); + Glib::RefPtr resizeWidth = RTImage::createFromFile ("node-move-x-hicontrast.png"); + Glib::RefPtr resizeHeight = RTImage::createFromFile ("node-move-y-hicontrast.png"); + //Glib::RefPtr resizeDiag = RTImage::createFromFile ("node-move-diag-hicontrast.png"); + Glib::RefPtr resizeTopLeft = RTImage::createFromFile ("node-move-nw-se-hicontrast.png"); + Glib::RefPtr resizeTopRight = RTImage::createFromFile ("node-move-sw-ne-hicontrast.png"); + Glib::RefPtr resizeBottomLeft = RTImage::createFromFile ("node-move-sw-ne-hicontrast.png"); + Glib::RefPtr resizeBottomRight = RTImage::createFromFile ("node-move-nw-se-hicontrast.png"); + Glib::RefPtr colPick = RTImage::createFromFile ("color-picker-hicontrast.png"); + Glib::RefPtr colPickAdd = RTImage::createFromFile ("color-picker-add-hicontrast.png"); Glib::RefPtr empty = RTImage::createFromFile ("empty.png"); Glib::RefPtr move2D = RTImage::createFromFile ("node-move-xy-hicontrast.png"); - Glib::RefPtr move1DH = RTImage::createFromFile ("node-move-x-hicontrast.png"); - Glib::RefPtr move1DV = RTImage::createFromFile ("node-move-y-hicontrast.png"); - Glib::RefPtr moveRotate = RTImage::createFromFile ("rotate-aroundnode-hicontrast.png"); + //Glib::RefPtr move1DH = RTImage::createFromFile ("node-move-x-hicontrast.png"); + //Glib::RefPtr move1DV = RTImage::createFromFile ("node-move-y-hicontrast.png"); + Glib::RefPtr rotate = RTImage::createFromFile ("rotate-aroundnode-hicontrast.png"); cCrosshair = crosshair ? Gdk::Cursor::create (cAdd->get_display(), crosshair, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cHandOpen = hand_open ? Gdk::Cursor::create (cAdd->get_display(), hand_open, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cHandClosed = hand_closed ? Gdk::Cursor::create (cAdd->get_display(), hand_closed, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cWB = wbpick ? Gdk::Cursor::create (cAdd->get_display(), wbpick, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW); - cAddPicker = cpick ? Gdk::Cursor::create (cAdd->get_display(), cpick, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW); + cHandOpen = handOpen ? Gdk::Cursor::create (cAdd->get_display(), handOpen, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cHandClosed = handClosed ? Gdk::Cursor::create (cAdd->get_display(), handClosed, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cCropDraw = cropDraw ? Gdk::Cursor::create (cAdd->get_display(), cropDraw, 3, 3) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cResizeWidth = resizeWidth ? Gdk::Cursor::create (cAdd->get_display(), resizeWidth, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cResizeHeight = resizeHeight ? Gdk::Cursor::create (cAdd->get_display(), resizeHeight, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cResizeTopLeft = resizeTopLeft ? Gdk::Cursor::create (cAdd->get_display(), resizeTopLeft, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cResizeTopRight = resizeTopRight ? Gdk::Cursor::create (cAdd->get_display(), resizeTopRight, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cResizeBottomLeft = resizeBottomLeft ? Gdk::Cursor::create (cAdd->get_display(), resizeBottomLeft, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cResizeBottomRight = resizeBottomRight ? Gdk::Cursor::create (cAdd->get_display(), resizeBottomRight, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); + cWB = colPick ? Gdk::Cursor::create (cAdd->get_display(), colPick, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW); + cAddPicker = colPickAdd ? Gdk::Cursor::create (cAdd->get_display(), colPickAdd, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW); cHidden = empty ? Gdk::Cursor::create (cAdd->get_display(), empty, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); cMove2D = move2D ? Gdk::Cursor::create (cAdd->get_display(), move2D, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); - cMove1DH = move1DH ? Gdk::Cursor::create (cAdd->get_display(), move1DH, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); - cMove1DV = move1DV ? Gdk::Cursor::create (cAdd->get_display(), move1DV, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); - cMoveRotate = moveRotate ? Gdk::Cursor::create (cAdd->get_display(), moveRotate, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::CIRCLE); + //cMove1DH = move1DH ? Gdk::Cursor::create (cAdd->get_display(), move1DH, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); + //cMove1DV = move1DV ? Gdk::Cursor::create (cAdd->get_display(), move1DV, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); + cRotate = rotate ? Gdk::Cursor::create (cAdd->get_display(), rotate, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::CIRCLE); window = mainWindow; } @@ -97,7 +112,8 @@ void CursorManager::setCursor (Glib::RefPtr window, CursorShape sha } else if (shape == CSResizeHeight) { window->set_cursor (cResizeHeight); } else if (shape == CSResizeDiagonal) { - window->set_cursor (cResizeDiag); + //window->set_cursor (cResizeDiag); + window->set_cursor (cMove2D); } else if (shape == CSResizeTopLeft) { window->set_cursor (cResizeTopLeft); } else if (shape == CSResizeTopRight) { @@ -109,23 +125,23 @@ void CursorManager::setCursor (Glib::RefPtr window, CursorShape sha } else if (shape == CSMove2D) { window->set_cursor (cMove2D); } else if (shape == CSMove1DH) { - window->set_cursor (cMove1DH); + window->set_cursor (cResizeWidth); } else if (shape == CSMove1DV) { - window->set_cursor (cMove1DV); + window->set_cursor (cResizeHeight); } else if (shape == CSMoveRotate) { - window->set_cursor (cMoveRotate); + window->set_cursor (cRotate); } else if (shape == CSSpotWB) { window->set_cursor (cWB); } else if (shape == CSAddColPicker) { window->set_cursor (cAddPicker); } else if (shape == CSCropSelect) { - window->set_cursor (cCrosshair); + window->set_cursor (cCropDraw); } else if (shape == CSMoveLeft) { window->set_cursor (cLeftTanMove); } else if (shape == CSMoveRight) { window->set_cursor (cRightTanMove); } else if (shape == CSStraighten) { - window->set_cursor (cCrosshair); + window->set_cursor (cRotate); } else if (shape == CSWait) { window->set_cursor (cWait); } else if (shape == CSPlus) { diff --git a/rtgui/cursormanager.h b/rtgui/cursormanager.h index c48648931..2622aead2 100644 --- a/rtgui/cursormanager.h +++ b/rtgui/cursormanager.h @@ -56,13 +56,13 @@ class CursorManager private: Glib::RefPtr cResizeWidth; Glib::RefPtr cResizeHeight; - Glib::RefPtr cResizeDiag; + //Glib::RefPtr cResizeDiag; Glib::RefPtr cResizeTopLeft; Glib::RefPtr cResizeTopRight; Glib::RefPtr cResizeBottomLeft; Glib::RefPtr cResizeBottomRight; + Glib::RefPtr cCropDraw; Glib::RefPtr cCropMove; - Glib::RefPtr cCropMoving; Glib::RefPtr cLeftTanMove; Glib::RefPtr cRightTanMove; Glib::RefPtr cNormal; @@ -76,9 +76,9 @@ private: Glib::RefPtr cAddPicker; Glib::RefPtr cHidden; Glib::RefPtr cMove2D; - Glib::RefPtr cMove1DH; - Glib::RefPtr cMove1DV; - Glib::RefPtr cMoveRotate; + //Glib::RefPtr cMove1DH; + //Glib::RefPtr cMove1DV; + Glib::RefPtr cRotate; Glib::RefPtr display; Glib::RefPtr window; diff --git a/rtgui/toolbar.cc b/rtgui/toolbar.cc index f82911e80..9bed78768 100644 --- a/rtgui/toolbar.cc +++ b/rtgui/toolbar.cc @@ -46,7 +46,7 @@ ToolBar::ToolBar () : showColPickers(true), listener (nullptr), pickerListener(n pack_start (*wbTool); - showcolpickersimg.reset(new RTImage("color-picker-show.png")); + showcolpickersimg.reset(new RTImage("color-picker-bars.png")); hidecolpickersimg.reset(new RTImage("color-picker-hide.png")); colPickerTool = Gtk::manage (new Gtk::ToggleButton ()); From 68378c202880fc6715236d49329f63687677ef0d Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Tue, 28 Aug 2018 13:50:16 +0200 Subject: [PATCH 054/115] Cleanup of unused cursor code --- rtgui/cursormanager.cc | 7 ------- rtgui/cursormanager.h | 3 --- 2 files changed, 10 deletions(-) diff --git a/rtgui/cursormanager.cc b/rtgui/cursormanager.cc index 7db77a2d1..d0e57ba61 100644 --- a/rtgui/cursormanager.cc +++ b/rtgui/cursormanager.cc @@ -38,7 +38,6 @@ void CursorManager::init (Glib::RefPtr mainWindow) cResizeWidth = Gdk::Cursor::create (display, Gdk::SB_H_DOUBLE_ARROW); cResizeHeight = Gdk::Cursor::create (display, Gdk::SB_V_DOUBLE_ARROW); - //cResizeDiag = Gdk::Cursor::create (display, Gdk::BOTTOM_RIGHT_CORNER); cResizeTopLeft = Gdk::Cursor::create (display, Gdk::TOP_LEFT_CORNER); cResizeTopRight = Gdk::Cursor::create (display, Gdk::TOP_RIGHT_CORNER); cResizeBottomLeft = Gdk::Cursor::create (display, Gdk::BOTTOM_LEFT_CORNER); @@ -57,7 +56,6 @@ void CursorManager::init (Glib::RefPtr mainWindow) Glib::RefPtr cropDraw = RTImage::createFromFile ("crop-point-hicontrast.png"); Glib::RefPtr resizeWidth = RTImage::createFromFile ("node-move-x-hicontrast.png"); Glib::RefPtr resizeHeight = RTImage::createFromFile ("node-move-y-hicontrast.png"); - //Glib::RefPtr resizeDiag = RTImage::createFromFile ("node-move-diag-hicontrast.png"); Glib::RefPtr resizeTopLeft = RTImage::createFromFile ("node-move-nw-se-hicontrast.png"); Glib::RefPtr resizeTopRight = RTImage::createFromFile ("node-move-sw-ne-hicontrast.png"); Glib::RefPtr resizeBottomLeft = RTImage::createFromFile ("node-move-sw-ne-hicontrast.png"); @@ -66,8 +64,6 @@ void CursorManager::init (Glib::RefPtr mainWindow) Glib::RefPtr colPickAdd = RTImage::createFromFile ("color-picker-add-hicontrast.png"); Glib::RefPtr empty = RTImage::createFromFile ("empty.png"); Glib::RefPtr move2D = RTImage::createFromFile ("node-move-xy-hicontrast.png"); - //Glib::RefPtr move1DH = RTImage::createFromFile ("node-move-x-hicontrast.png"); - //Glib::RefPtr move1DV = RTImage::createFromFile ("node-move-y-hicontrast.png"); Glib::RefPtr rotate = RTImage::createFromFile ("rotate-aroundnode-hicontrast.png"); cCrosshair = crosshair ? Gdk::Cursor::create (cAdd->get_display(), crosshair, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); @@ -84,8 +80,6 @@ void CursorManager::init (Glib::RefPtr mainWindow) cAddPicker = colPickAdd ? Gdk::Cursor::create (cAdd->get_display(), colPickAdd, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW); cHidden = empty ? Gdk::Cursor::create (cAdd->get_display(), empty, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); cMove2D = move2D ? Gdk::Cursor::create (cAdd->get_display(), move2D, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); - //cMove1DH = move1DH ? Gdk::Cursor::create (cAdd->get_display(), move1DH, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); - //cMove1DV = move1DV ? Gdk::Cursor::create (cAdd->get_display(), move1DV, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); cRotate = rotate ? Gdk::Cursor::create (cAdd->get_display(), rotate, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::CIRCLE); window = mainWindow; @@ -112,7 +106,6 @@ void CursorManager::setCursor (Glib::RefPtr window, CursorShape sha } else if (shape == CSResizeHeight) { window->set_cursor (cResizeHeight); } else if (shape == CSResizeDiagonal) { - //window->set_cursor (cResizeDiag); window->set_cursor (cMove2D); } else if (shape == CSResizeTopLeft) { window->set_cursor (cResizeTopLeft); diff --git a/rtgui/cursormanager.h b/rtgui/cursormanager.h index 2622aead2..e98202ae7 100644 --- a/rtgui/cursormanager.h +++ b/rtgui/cursormanager.h @@ -56,7 +56,6 @@ class CursorManager private: Glib::RefPtr cResizeWidth; Glib::RefPtr cResizeHeight; - //Glib::RefPtr cResizeDiag; Glib::RefPtr cResizeTopLeft; Glib::RefPtr cResizeTopRight; Glib::RefPtr cResizeBottomLeft; @@ -76,8 +75,6 @@ private: Glib::RefPtr cAddPicker; Glib::RefPtr cHidden; Glib::RefPtr cMove2D; - //Glib::RefPtr cMove1DH; - //Glib::RefPtr cMove1DV; Glib::RefPtr cRotate; Glib::RefPtr display; From 3c543d2efe44f985d16fc40aac84a2ee0e0c62ab Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 28 Aug 2018 14:25:31 +0200 Subject: [PATCH 055/115] defined raw crop for Hasselblad H6D-100cMS --- rtengine/camconst.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index 23d3f4df6..b3758a326 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -2496,6 +2496,11 @@ Camera constants: "dcraw_matrix": [ 4932, -835, 141, -4878, 11868, 3437, -1138, 1961, 7067 ] }, + { // Quality C + "make_model": [ "Hasselblad H6D-100cMS" ], + "raw_crop": [ 64, 108, 11608, 8708 ] + }, + // Dummy test entry to test the parser and show the format with all entries active { "make_model": "DummyMake DummyModel", From 54ff8788e69aaa770dc17dea899adf258161cdb0 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Tue, 28 Aug 2018 18:01:25 +0200 Subject: [PATCH 056/115] More icon and cursor fixes - The Graduated Filter on-canvas widget button now has its own icon, does not use the curve's "add adjustment point" icon anymore. - When dragging a crop, a closed hand cursor is shown. - The hand icon had the outline removed to improve separation between the fingers. --- .../themed/png/dark/crosshair-adjust.png | Bin 483 -> 478 bytes .../themed/png/dark/crosshair-node-curve.png | Bin 0 -> 483 bytes rtdata/images/themed/png/dark/hand-open.png | Bin 564 -> 533 bytes .../themed/png/light/crosshair-adjust.png | Bin 482 -> 468 bytes .../themed/png/light/crosshair-node-curve.png | Bin 0 -> 482 bytes rtdata/images/themed/png/light/hand-open.png | Bin 574 -> 549 bytes rtdata/images/themed/svg/crosshair-adjust.svg | 40 +----- .../themed/svg/crosshair-node-curve.svg | 134 ++++++++++++++++++ rtdata/images/themed/svg/hand-open.svg | 9 +- rtgui/cursormanager.cc | 5 +- rtgui/diagonalcurveeditorsubgroup.cc | 6 +- rtgui/flatcurveeditorsubgroup.cc | 2 +- 12 files changed, 150 insertions(+), 46 deletions(-) create mode 100644 rtdata/images/themed/png/dark/crosshair-node-curve.png create mode 100644 rtdata/images/themed/png/light/crosshair-node-curve.png create mode 100644 rtdata/images/themed/svg/crosshair-node-curve.svg diff --git a/rtdata/images/themed/png/dark/crosshair-adjust.png b/rtdata/images/themed/png/dark/crosshair-adjust.png index 08d6e00ff5c6dfa9b098e8f80d49d448b400ffb1..8536e8f0921f759767191dbf7bbea1e91acd41b6 100644 GIT binary patch delta 226 zcmaFNe2;kpD`UM%fKQ04dx6gxFgSbmERa5T?%e6qr~m)|4-o{C$B!TP*qLa{z`(#$ z666=mu=%NDR8lbG;Ypg@>{Ft%f#NluE{-7*my;75SUGukjy?-8>*iu^UT837vqvUl z^J0#cvv-$V;eB49rI~ri(&0egnM8-DGuV`)3c0uzNS(QKiAO?W#^pgQu&X%Q~loCIE#hUL^nk delta 231 zcmcb|{Fr$ID`UM@fKQ04dx6gxFgSkvIFLSj_AG=8VLyBJ3@8Ewr%#_&e`r|Dz`(#) z666=mu=$zXg4pGql}>De`qLbDFKh?ORC>BNhDcmaPEg>mSg(BJOzR_qXF=QDCUP41 zEm)8s9y4+A0tqMgMGH9QoPDaH!4?0!pks&2LCeOIJUm_ozghSdEZ9{gAIRh#XJBb( zej|{~k)CA6Jb98)^TbI^0ilmrSlXSN7#F@tFq_dNQDDf>8N837lbO}4f|-@!4U>@U UJ=c_%Kvyt$y85}Sb4q9e0QHb#AOHXW diff --git a/rtdata/images/themed/png/dark/crosshair-node-curve.png b/rtdata/images/themed/png/dark/crosshair-node-curve.png new file mode 100644 index 0000000000000000000000000000000000000000..08d6e00ff5c6dfa9b098e8f80d49d448b400ffb1 GIT binary patch literal 483 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1=Gpc2=J66gGa%A(Blj1mTCX9dTS zlA_F{(vr;lJl)`o#G+KkoXqT0g^ZGt0xNy}ERK!`}5n0T@z;^_M8K-LVNdpD70(?ST-3xrqfWh(O$AR?Ovu7b( z2>aQyXFw4kIDPuG`a?sY5e$4KL4Lsuo1e)oh+W=U>BJ_eKh1IX!giocrKgKyh{WaO z1O*O@^~yKSv_3L;7PQ@MBBz1hf&~fUF%uUrkZ^Kew18vI*{2#BT+a(ScDNk0Y&^-s z<7M!hgb51SbnK0|SFlq{8Wmicjj*1AIbU&zw2qUf=^HFI>0)Bu}3{efI2GAOnq^ zwvwF_sFk-Q$S-&^!z{iPetP!x@-dxd^J0SBffDOIT^vIsF8f~C$k${b!1loYYM0}* z)e1u5v2$b^uCjLOCp=<4@T?>Mz@xr=h1sj~HOjZtAM>7dXZn`w`&s{rwoOgBIM1j% zPn<37*#pU`S=|MB7cAElx-4G5RpFSl{@%UZ(<~Nz{U{Q!I$*`iiZ&@8QG-wOtlEyR zFj?Bed3eFJTzNO1qqcfR3#Q7=RG408c+8WlEq`+;&-a$zxjG#Z>fKZKrum!|uHxP` h_jLR3x$(7(@4AGfpMTF{b_P10!PC{xWt~$(697)RD4oz9N-h;dIkp0pFe;4^y#x_&jJP93w$8LTeofn zid?>Y87>9n?%gwa9?%%Uk|4j}%{8l)4(t#ZyGWGFEx=*v&j9+OtYP zM`JhZB&I_b(oSUa^Yb=b zb_>^;@K0Oc$o}E#BkqYS&dZfBY~k@>>kfL!W>fv;VekBwjlYi0``Fed&gI+iQ{~{j z_s3Z@kE$OxytbM9THKcY(Po9+fDc5X(eqr!* L^>bP0l+XkKjI5uC diff --git a/rtdata/images/themed/png/light/crosshair-adjust.png b/rtdata/images/themed/png/light/crosshair-adjust.png index 0af7379c24aefb2914034148d0ccebc9187e0af5..b8b17dfa1a76be046ffc2ad3f056f92f845c5598 100644 GIT binary patch delta 216 zcmaFFe1&-fD`UNSfKQ04dx4KC45)yCnwlC!Kv!26$W~BL01E$mY5ReJfq}Oq$S;^7 zdh=6MKADC707~R}x;TbNTux4KVC9yOh>%&36XwjurY@?HzWE~~o1!bn z?9DfJ2%URqV79HH_yB|XaoyGcM(zS$Ue>6SLQ+ypDpRLS5t5L&(J+NstNmbLfWQkY zJx52uoVEoLy;oT^_*_3Sbv>7m@SV7)S4hEwfkAnf@a)aLD-Qy#X7F_Nb6Mw<&;$TX CoI-2> delta 230 zcmcb@{D^r2D`UM@fKQ04dx4KC7-(o{sHmtw*lKEOK!&!qHjq?TSBHql{A75)phGj$rU~^>bP0l+XkKmC;Jv diff --git a/rtdata/images/themed/png/light/crosshair-node-curve.png b/rtdata/images/themed/png/light/crosshair-node-curve.png new file mode 100644 index 0000000000000000000000000000000000000000..0af7379c24aefb2914034148d0ccebc9187e0af5 GIT binary patch literal 482 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1=Gpc2=J66gGa%A(Blj1mTCX9dTS zlA_F{(vr;lJl)`o#G+KkoXqT0g^ZGt0xNy}ERK!`}5n0T@z;^_M8K-LVNdpD70(?ST-3xqF!9YVpLq$ae!d6pL z12VL=wSlC%x;jKW<|o4=pf0|WAirRS&Clc(BrbR9WUCg`pT>IN^KGC^g{O;Sh{WaO z1O<*8`3g7A^a>d~3)$YP#A@KTU_pXP%*4eDB%ItAE#R1Q_N9gf*YkqT9SU1m)Qk-@ z4!#k#X?P$blHO3fLzY=UMsI_2kK&v|Ic#dGscg!stP55hVPa|b?qXc{Cc$h*lSIKr lhR(}|jGfG^UKPx&3~L?>Uie$@CJuB1gQu&X%Q~loCIEdCm&pJC literal 0 HcmV?d00001 diff --git a/rtdata/images/themed/png/light/hand-open.png b/rtdata/images/themed/png/light/hand-open.png index 8a180934f24afda377a0f3efcfb4426801ee9542..bb01eac88a0e150354fb20761b03cc5e22c13229 100644 GIT binary patch delta 310 zcmdnTvXo_l1SbnK0|SFlq{8Wmicjhd0(?STRaI5p3w)H6lz_M5pwwyMW zYi*qgeFDz%huO{8I(iF6g(5izWJu&xrv4hg$a4guiGmf#j=d9EObcVc-rBx swsD74ijtGk6y+EBIr~Z#dzhISq=e*8?&hEW59k2~Pgg&ebxsLQ05Qp5xc~qF delta 335 zcmZ3=vX5ng1SbbG0|UeLm1j>)RD4oz8Q>G*stN{bYHAP$gmf?PfiQG+byZYUfU+_& zGC&b^b#-NBWr&ol?a7ru!-PwM{DL=!DKzffzlPz+Db^Af@m}Ms8P}Gto1hJpKH%x% z7@~2$^kO4lvjPvx1?H$7O0VwxuYYsnNPX|DHHH&^2vx1ssONfo_gc`TwxGrBX<^(G zwbxqSSlPcQ!Nikqm7;i~Y0_s~BORt~B_3jG5iZ+!^K(fMNgu diff --git a/rtdata/images/themed/svg/crosshair-adjust.svg b/rtdata/images/themed/svg/crosshair-adjust.svg index 21862c970..4cde3415a 100644 --- a/rtdata/images/themed/svg/crosshair-adjust.svg +++ b/rtdata/images/themed/svg/crosshair-adjust.svg @@ -26,7 +26,7 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="34.25" + inkscape:zoom="33.833333" inkscape:cx="12" inkscape:cy="12" inkscape:document-units="px" @@ -63,7 +63,7 @@ image/svg+xml - + Maciej Dworak @@ -101,48 +101,18 @@ inkscape:label="Layer 1"> - - - - - - - diff --git a/rtdata/images/themed/svg/crosshair-node-curve.svg b/rtdata/images/themed/svg/crosshair-node-curve.svg new file mode 100644 index 000000000..d72c2a929 --- /dev/null +++ b/rtdata/images/themed/svg/crosshair-node-curve.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/themed/svg/hand-open.svg b/rtdata/images/themed/svg/hand-open.svg index d49d10d5f..a7597b482 100644 --- a/rtdata/images/themed/svg/hand-open.svg +++ b/rtdata/images/themed/svg/hand-open.svg @@ -26,12 +26,12 @@ borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:zoom="34.25" + inkscape:zoom="33.833333" inkscape:cx="12" inkscape:cy="12" inkscape:document-units="px" inkscape:current-layer="layer1" - showgrid="true" + showgrid="false" inkscape:window-width="1920" inkscape:window-height="1019" inkscape:window-x="0" @@ -119,7 +119,8 @@ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + d="m 36.455078,1.1015625 c -0.657515,-0.025842 -1.353006,0.4514359 -1.388672,1.2167969 0.02103,2.1794281 0.362572,4.3446075 0.34375,6.5253906 C 34.704462,6.7462413 33.696458,4.7625164 33.007812,2.6601562 32.699764,1.4053767 30.686393,1.3462201 30.712891,2.7910156 c 0.148468,1.5137205 0.593614,2.9947661 1.144531,4.4121094 0.579646,1.5250885 1.19498,3.114871 1.074219,4.777344 -0.211465,1.328048 -1.80517,1.750258 -2.697266,0.580078 -0.416475,-0.393564 -0.544424,-0.651727 -0.960938,-1.238281 -0.416513,-0.586553 -1.122246,-1.5013905 -1.86914,-1.220704 -1.49767,0.876327 -0.29335,2.450372 0.320312,3.476563 0.529141,1.049899 1.266424,1.94363 2.097657,2.765625 1.139405,1.210646 2.00714,2.79189 1.927734,4.496094 0.04404,1.388514 1.55807,2.053559 2.763672,2.126953 1.546216,0.08721 3.126794,0.01908 4.630859,-0.367188 0.822251,-0.241424 1.611734,-0.89878 1.595703,-1.824218 C 40.98435,16.701293 42.787358,12.966248 43.802734,9.0625 44.093836,8.0059864 44.448353,6.9326448 44.445312,5.828125 44.177193,4.6456298 42.537354,4.6959782 42.236328,6.0273438 41.967568,6.973985 41.870664,7.9687737 41.496094,8.8847656 41.242569,6.9262668 41.683518,4.9338681 41.367188,2.9785156 41.412433,1.450498 39.214266,1.5287748 38.957031,2.8378906 38.705507,4.763864 38.797888,6.7201513 38.556641,8.6484375 37.992758,6.3776292 38.26795,3.9551294 37.447266,1.7402344 37.23158,1.3141238 36.849587,1.1170679 36.455078,1.1015625 Z m -0.03125,0.4941406 c 0.22785,2.006e-4 0.425241,0.1051019 0.5625,0.3632813 0.747739,2.0597572 0.494913,4.4363486 1.083984,6.8085937 l 0.982422,-0.056641 C 39.29984,6.7358274 39.21188,4.7904773 39.451172,2.9316406 39.530361,2.5430223 39.900196,2.3387264 40.269531,2.34375 c 0.185458,0.00252 0.342359,0.063217 0.439453,0.1523438 0.09709,0.089127 0.167925,0.206397 0.160157,0.46875 l -0.002,0.046875 0.0078,0.046875 C 41.171104,4.8885486 40.731427,6.8744709 41,8.9492188 l 0.242188,1.8750002 0.716796,-1.7500002 c 0.411093,-1.0053067 0.505532,-2.0215571 0.757813,-2.9101563 l 0.0039,-0.013672 0.0039,-0.013672 c 0.107736,-0.4764885 0.395184,-0.6352244 0.660157,-0.6523438 0.251375,-0.016241 0.449106,0.1022573 0.542968,0.4316406 -0.01505,0.9710696 -0.318057,1.9705536 -0.605468,3.0136719 l -0.002,0.00391 v 0.00195 C 42.321624,12.774915 40.493948,16.543442 40.24213,20.746094 l -0.002,0.01953 v 0.01953 c 0.0055,0.318516 -0.117945,0.577694 -0.34375,0.8125 -0.223319,0.232223 -0.551559,0.418326 -0.882812,0.517578 -1.43352,0.367311 -2.960591,0.436603 -4.470703,0.351563 C 34.01895,22.434887 33.408681,22.263531 32.96875,21.976562 32.528819,21.689595 32.264389,21.339493 32.248047,20.824219 32.321056,18.952282 31.378689,17.267743 30.185547,16 l -0.0059,-0.0059 -0.0059,-0.0059 C 29.366435,15.189941 28.66843,14.338759 28.171875,13.353516 l -0.0078,-0.01758 -0.0098,-0.01563 c -0.322956,-0.540054 -0.748063,-1.170179 -0.902342,-1.681634 -0.07714,-0.255727 -0.08634,-0.461023 -0.03711,-0.621094 0.04425,-0.143897 0.168741,-0.284663 0.398437,-0.435547 0.148566,-0.04428 0.2911,-0.0095 0.53125,0.189453 0.254362,0.210719 0.520624,0.555332 0.722657,0.839844 0.388512,0.547122 0.564085,0.853027 0.984375,1.261719 0.550791,0.711482 1.379594,0.989291 2.101562,0.820312 0.726883,-0.170128 1.337556,-0.786297 1.472656,-1.634765 l 0.002,-0.02149 0.0019,-0.02148 C 33.56099,10.207825 32.903082,8.5484755 32.324198,7.0253906 v -0.00195 -0.00195 c -0.537613,-1.3831218 -0.962413,-2.8116317 -1.107422,-4.25 -7.18e-4,-0.2313914 0.05782,-0.3441971 0.140625,-0.421875 0.0851,-0.079836 0.22003,-0.1338908 0.384765,-0.1367188 0.329471,-0.00566 0.684997,0.1822887 0.779297,0.5664063 l 0.0059,0.017578 0.0059,0.017578 c 0.704593,2.151049 1.712136,4.1379729 2.402344,6.1894531 l 0.974609,-0.15625 C 35.929397,6.6206215 35.591319,4.4623326 35.56836,2.33985 c 0.01905,-0.3764264 0.286845,-0.6247291 0.619141,-0.7109376 0.08191,-0.021249 0.160378,-0.03327 0.236328,-0.033203 z" + id="path825" + inkscape:connector-curvature="0" /> diff --git a/rtgui/cursormanager.cc b/rtgui/cursormanager.cc index d0e57ba61..9864a5da2 100644 --- a/rtgui/cursormanager.cc +++ b/rtgui/cursormanager.cc @@ -43,8 +43,7 @@ void CursorManager::init (Glib::RefPtr mainWindow) cResizeBottomLeft = Gdk::Cursor::create (display, Gdk::BOTTOM_LEFT_CORNER); cResizeBottomRight = Gdk::Cursor::create (display, Gdk::BOTTOM_RIGHT_CORNER); cCropDraw = Gdk::Cursor::create (display, Gdk::CROSSHAIR); - cCropMove = Gdk::Cursor::create (display, Gdk::CROSSHAIR); - cCropSelection = Gdk::Cursor::create (display, Gdk::CROSSHAIR); + cCropSelection = Gdk::Cursor::create (display, Gdk::STAR); // ? cLeftTanMove = Gdk::Cursor::create (display, Gdk::SB_LEFT_ARROW); cRightTanMove = Gdk::Cursor::create (display, Gdk::SB_RIGHT_ARROW); cAdd = Gdk::Cursor::create (display, Gdk::PLUS); @@ -100,7 +99,7 @@ void CursorManager::setCursor (Glib::RefPtr window, CursorShape sha } else if (shape == CSHandClosed) { window->set_cursor (cHandClosed); } else if (shape == CSMove) { - window->set_cursor (cCropMove); + window->set_cursor (cHandClosed); } else if (shape == CSResizeWidth) { window->set_cursor (cResizeWidth); } else if (shape == CSResizeHeight) { diff --git a/rtgui/diagonalcurveeditorsubgroup.cc b/rtgui/diagonalcurveeditorsubgroup.cc index e7599b502..6455f6cb9 100644 --- a/rtgui/diagonalcurveeditorsubgroup.cc +++ b/rtgui/diagonalcurveeditorsubgroup.cc @@ -69,7 +69,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt, editPointCustom = Gtk::manage (new Gtk::ToggleButton ()); initButton(*editPointCustom, Glib::ustring("edit-point.png"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT"); editCustom = Gtk::manage (new Gtk::ToggleButton()); - initButton(*editCustom, Glib::ustring("crosshair-adjust.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); + initButton(*editCustom, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); editCustom->hide(); copyCustom = Gtk::manage (new Gtk::Button ()); initButton(*copyCustom, Glib::ustring("copy.png"), Gtk::ALIGN_END, true); @@ -146,7 +146,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt, editPointNURBS = Gtk::manage (new Gtk::ToggleButton ()); initButton(*editPointNURBS, Glib::ustring("edit-point.png"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT"); editNURBS = Gtk::manage (new Gtk::ToggleButton()); - initButton(*editNURBS, Glib::ustring("crosshair-adjust.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); + initButton(*editNURBS, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); editNURBS->hide(); copyNURBS = Gtk::manage (new Gtk::Button ()); initButton(*copyNURBS, Glib::ustring("copy.png"), Gtk::ALIGN_END, true); @@ -224,7 +224,7 @@ DiagonalCurveEditorSubGroup::DiagonalCurveEditorSubGroup (CurveEditorGroup* prt, shcSelector->set_name("CurveSHCSelector"); // To handle the 4px gap between the SHCSelector and the curve through CSS editParam = Gtk::manage (new Gtk::ToggleButton()); - initButton(*editParam, Glib::ustring("crosshair-adjust.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); + initButton(*editParam, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); editParam->hide(); copyParam = Gtk::manage (new Gtk::Button ()); initButton(*copyParam, Glib::ustring("copy.png"), Gtk::ALIGN_END, true); diff --git a/rtgui/flatcurveeditorsubgroup.cc b/rtgui/flatcurveeditorsubgroup.cc index 055a8a92f..2cc96a184 100644 --- a/rtgui/flatcurveeditorsubgroup.cc +++ b/rtgui/flatcurveeditorsubgroup.cc @@ -63,7 +63,7 @@ FlatCurveEditorSubGroup::FlatCurveEditorSubGroup (CurveEditorGroup* prt, Glib::u } editCPoints = Gtk::manage (new Gtk::ToggleButton()); - initButton(*editCPoints, Glib::ustring("crosshair-adjust.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); + initButton(*editCPoints, Glib::ustring("crosshair-node-curve.png"), Gtk::ALIGN_START, false, "EDIT_PIPETTE_TOOLTIP"); editPointCPoints = Gtk::manage (new Gtk::ToggleButton ()); initButton(*editPointCPoints, Glib::ustring("edit-point.png"), Gtk::ALIGN_START, false, "CURVEEDITOR_EDITPOINT_HINT"); copyCPoints = Gtk::manage (new Gtk::Button ()); From 8bc0df571eb5182c6e30a012a00fd305f368c41b Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Tue, 28 Aug 2018 23:45:48 +0200 Subject: [PATCH 057/115] Cursor tweaks and code cleanup - CursorManager code cleanup. - Diagonal and flat curve cursors now use our bundled cursor icons. Icons are now less intrusive, allowing you to see what's going on under them as you manipulate the nodes. - New small crosshair icon for curves. --- .../themed/png/dark/crosshair-small.png | Bin 0 -> 382 bytes .../themed/png/light/crosshair-small.png | Bin 0 -> 387 bytes rtdata/images/themed/svg/crosshair-small.svg | 172 ++++++++++++++ rtgui/cursormanager.cc | 213 ++++++++++-------- rtgui/cursormanager.h | 71 +++--- rtgui/mydiagonalcurve.cc | 6 +- rtgui/myflatcurve.cc | 12 +- 7 files changed, 333 insertions(+), 141 deletions(-) create mode 100644 rtdata/images/themed/png/dark/crosshair-small.png create mode 100644 rtdata/images/themed/png/light/crosshair-small.png create mode 100644 rtdata/images/themed/svg/crosshair-small.svg diff --git a/rtdata/images/themed/png/dark/crosshair-small.png b/rtdata/images/themed/png/dark/crosshair-small.png new file mode 100644 index 0000000000000000000000000000000000000000..66db0bd42d97a0ac086e4b1e1940c0210addfaff GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ z@ErkR#;MwT(m+AU64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1STsl~}fnFS@8`FRXMiRB>~sYO6jQWY|j z^Yip>tm>KrR2T$O=$v0rS(KTcQNrNttl(HuQk0og3eu$;oB?!$V@_svszOFdNr9EV zesWQ2Vo7FMYI1&VZhl@d$VvJ+naQbn#i_;mNtL?AiTWmb2Kt9Xl30PJhj_X;hFJ6_ zCoE94D1PSieWr2xu8%7d6%*Rn6uoD76bY@=`|4nJ z@ErkR#;MwT(m+AU64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1STsl~}fnFS@8`FRXMiRB>~sYO6jQWY|j z^Yip>tm>KrR2T$O=$v0rS(KTcQNrNttl(HuQk0og3eu$;oB?!$V@_svszOFdNr9EV zesWQ2Vo7FMYI1&VZhl@d$VvJ+naQbn#i_;mNtL?AiTWmb2Kt9Xl30PJM|!$AhFJ6_ zCoE762n~H32E@mfx3xA%O10=DDxLI9+3`SWsn`WM10w?igB2@RZvFfJfBf`DAecDu z + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rtgui/cursormanager.cc b/rtgui/cursormanager.cc index 9864a5da2..34efbcac8 100644 --- a/rtgui/cursormanager.cc +++ b/rtgui/cursormanager.cc @@ -36,50 +36,45 @@ void CursorManager::init (Glib::RefPtr mainWindow) #endif - cResizeWidth = Gdk::Cursor::create (display, Gdk::SB_H_DOUBLE_ARROW); - cResizeHeight = Gdk::Cursor::create (display, Gdk::SB_V_DOUBLE_ARROW); - cResizeTopLeft = Gdk::Cursor::create (display, Gdk::TOP_LEFT_CORNER); - cResizeTopRight = Gdk::Cursor::create (display, Gdk::TOP_RIGHT_CORNER); - cResizeBottomLeft = Gdk::Cursor::create (display, Gdk::BOTTOM_LEFT_CORNER); - cResizeBottomRight = Gdk::Cursor::create (display, Gdk::BOTTOM_RIGHT_CORNER); - cCropDraw = Gdk::Cursor::create (display, Gdk::CROSSHAIR); - cCropSelection = Gdk::Cursor::create (display, Gdk::STAR); // ? - cLeftTanMove = Gdk::Cursor::create (display, Gdk::SB_LEFT_ARROW); - cRightTanMove = Gdk::Cursor::create (display, Gdk::SB_RIGHT_ARROW); - cAdd = Gdk::Cursor::create (display, Gdk::PLUS); - cWait = Gdk::Cursor::create (display, Gdk::CLOCK); + Glib::RefPtr add = RTImage::createFromFile("crosshair-small.png"); + Glib::RefPtr colPick = RTImage::createFromFile("color-picker-hicontrast.png"); + Glib::RefPtr colPickAdd = RTImage::createFromFile("color-picker-add-hicontrast.png"); + Glib::RefPtr cropDraw = RTImage::createFromFile("crop-point-hicontrast.png"); + Glib::RefPtr crosshair = RTImage::createFromFile("crosshair-hicontrast.png"); + Glib::RefPtr empty = RTImage::createFromFile("empty.png"); + Glib::RefPtr handClosed = RTImage::createFromFile("hand-closed-hicontrast.png"); + Glib::RefPtr handOpen = RTImage::createFromFile("hand-open-hicontrast.png"); + Glib::RefPtr moveBL = RTImage::createFromFile("node-move-sw-ne-hicontrast.png"); + Glib::RefPtr moveBR = RTImage::createFromFile("node-move-nw-se-hicontrast.png"); + Glib::RefPtr moveL = RTImage::createFromFile("node-move-x-hicontrast.png"); + Glib::RefPtr moveR = RTImage::createFromFile("node-move-x-hicontrast.png"); + Glib::RefPtr moveTL = RTImage::createFromFile("node-move-nw-se-hicontrast.png"); + Glib::RefPtr moveTR = RTImage::createFromFile("node-move-sw-ne-hicontrast.png"); + Glib::RefPtr moveX = RTImage::createFromFile("node-move-x-hicontrast.png"); + Glib::RefPtr moveXY = RTImage::createFromFile("node-move-xy-hicontrast.png"); + Glib::RefPtr moveY = RTImage::createFromFile("node-move-y-hicontrast.png"); + Glib::RefPtr rotate = RTImage::createFromFile("rotate-aroundnode-hicontrast.png"); + Glib::RefPtr wait = RTImage::createFromFile("gears.png"); // Currently unused, create *-hicontrast once used. - Glib::RefPtr crosshair = RTImage::createFromFile ("crosshair-hicontrast.png"); - Glib::RefPtr handOpen = RTImage::createFromFile ("hand-open-hicontrast.png"); - Glib::RefPtr handClosed = RTImage::createFromFile ("hand-closed-hicontrast.png"); - Glib::RefPtr cropDraw = RTImage::createFromFile ("crop-point-hicontrast.png"); - Glib::RefPtr resizeWidth = RTImage::createFromFile ("node-move-x-hicontrast.png"); - Glib::RefPtr resizeHeight = RTImage::createFromFile ("node-move-y-hicontrast.png"); - Glib::RefPtr resizeTopLeft = RTImage::createFromFile ("node-move-nw-se-hicontrast.png"); - Glib::RefPtr resizeTopRight = RTImage::createFromFile ("node-move-sw-ne-hicontrast.png"); - Glib::RefPtr resizeBottomLeft = RTImage::createFromFile ("node-move-sw-ne-hicontrast.png"); - Glib::RefPtr resizeBottomRight = RTImage::createFromFile ("node-move-nw-se-hicontrast.png"); - Glib::RefPtr colPick = RTImage::createFromFile ("color-picker-hicontrast.png"); - Glib::RefPtr colPickAdd = RTImage::createFromFile ("color-picker-add-hicontrast.png"); - Glib::RefPtr empty = RTImage::createFromFile ("empty.png"); - Glib::RefPtr move2D = RTImage::createFromFile ("node-move-xy-hicontrast.png"); - Glib::RefPtr rotate = RTImage::createFromFile ("rotate-aroundnode-hicontrast.png"); - - cCrosshair = crosshair ? Gdk::Cursor::create (cAdd->get_display(), crosshair, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cHandOpen = handOpen ? Gdk::Cursor::create (cAdd->get_display(), handOpen, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cHandClosed = handClosed ? Gdk::Cursor::create (cAdd->get_display(), handClosed, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cCropDraw = cropDraw ? Gdk::Cursor::create (cAdd->get_display(), cropDraw, 3, 3) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cResizeWidth = resizeWidth ? Gdk::Cursor::create (cAdd->get_display(), resizeWidth, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cResizeHeight = resizeHeight ? Gdk::Cursor::create (cAdd->get_display(), resizeHeight, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cResizeTopLeft = resizeTopLeft ? Gdk::Cursor::create (cAdd->get_display(), resizeTopLeft, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cResizeTopRight = resizeTopRight ? Gdk::Cursor::create (cAdd->get_display(), resizeTopRight, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cResizeBottomLeft = resizeBottomLeft ? Gdk::Cursor::create (cAdd->get_display(), resizeBottomLeft, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cResizeBottomRight = resizeBottomRight ? Gdk::Cursor::create (cAdd->get_display(), resizeBottomRight, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2); - cWB = colPick ? Gdk::Cursor::create (cAdd->get_display(), colPick, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW); - cAddPicker = colPickAdd ? Gdk::Cursor::create (cAdd->get_display(), colPickAdd, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW); - cHidden = empty ? Gdk::Cursor::create (cAdd->get_display(), empty, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); - cMove2D = move2D ? Gdk::Cursor::create (cAdd->get_display(), move2D, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR); - cRotate = rotate ? Gdk::Cursor::create (cAdd->get_display(), rotate, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::CIRCLE); + cAdd = add ? Gdk::Cursor::create(display, add, 8, 8) : Gdk::Cursor::create(display, Gdk::PLUS); + cAddPicker = colPickAdd ? Gdk::Cursor::create(display, colPickAdd, 4, 21) : Gdk::Cursor::create(display, Gdk::PLUS); + cCropDraw = cropDraw ? Gdk::Cursor::create(display, cropDraw, 3, 3) : Gdk::Cursor::create(display, Gdk::DIAMOND_CROSS); + cCrosshair = crosshair ? Gdk::Cursor::create(display, crosshair, 12, 12) : Gdk::Cursor::create(display, Gdk::CROSSHAIR); + cEmpty = empty ? Gdk::Cursor::create(display, empty, 12, 12) : Gdk::Cursor::create(display, Gdk::BLANK_CURSOR); + cHandClosed = handClosed ? Gdk::Cursor::create(display, handClosed, 12, 12) : Gdk::Cursor::create(display, Gdk::HAND1); + cHandOpen = handOpen ? Gdk::Cursor::create(display, handOpen, 12, 12) : Gdk::Cursor::create(display, Gdk::HAND2); + cMoveBL = moveBL ? Gdk::Cursor::create(display, moveBL, 12, 12) : Gdk::Cursor::create(display, Gdk::BOTTOM_LEFT_CORNER); + cMoveBR = moveBR ? Gdk::Cursor::create(display, moveBR, 12, 12) : Gdk::Cursor::create(display, Gdk::BOTTOM_RIGHT_CORNER); + cMoveL = moveL ? Gdk::Cursor::create(display, moveL, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_LEFT_ARROW); + cMoveR = moveR ? Gdk::Cursor::create(display, moveR, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_RIGHT_ARROW); + cMoveTL = moveTL ? Gdk::Cursor::create(display, moveTL, 12, 12) : Gdk::Cursor::create(display, Gdk::TOP_LEFT_CORNER); + cMoveTR = moveTR ? Gdk::Cursor::create(display, moveTR, 12, 12) : Gdk::Cursor::create(display, Gdk::TOP_RIGHT_CORNER); + cMoveX = moveX ? Gdk::Cursor::create(display, moveX, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_H_DOUBLE_ARROW); + cMoveXY = moveXY ? Gdk::Cursor::create(display, moveXY, 12, 12) : Gdk::Cursor::create(display, Gdk::FLEUR); + cMoveY = moveY ? Gdk::Cursor::create(display, moveY, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_V_DOUBLE_ARROW); + cRotate = rotate ? Gdk::Cursor::create(display, rotate, 12, 12) : Gdk::Cursor::create(display, Gdk::EXCHANGE); + cWB = colPick ? Gdk::Cursor::create(display, colPick, 4, 21) : Gdk::Cursor::create(display, Gdk::TARGET); + cWait = wait ? Gdk::Cursor::create(display, wait, 12, 12) : Gdk::Cursor::create(display, Gdk::CLOCK); window = mainWindow; } @@ -87,59 +82,87 @@ void CursorManager::init (Glib::RefPtr mainWindow) /* Set the cursor of the given window */ void CursorManager::setCursor (Glib::RefPtr window, CursorShape shape) { - - if (shape == CSArrow) - // set_cursor without any arguments to select system default + switch (shape) { - window->set_cursor (); - } else if (shape == CSCrosshair) { - window->set_cursor (cCrosshair); - } else if (shape == CSHandOpen) { - window->set_cursor (cHandOpen); - } else if (shape == CSHandClosed) { - window->set_cursor (cHandClosed); - } else if (shape == CSMove) { - window->set_cursor (cHandClosed); - } else if (shape == CSResizeWidth) { - window->set_cursor (cResizeWidth); - } else if (shape == CSResizeHeight) { - window->set_cursor (cResizeHeight); - } else if (shape == CSResizeDiagonal) { - window->set_cursor (cMove2D); - } else if (shape == CSResizeTopLeft) { - window->set_cursor (cResizeTopLeft); - } else if (shape == CSResizeTopRight) { - window->set_cursor (cResizeTopRight); - } else if (shape == CSResizeBottomLeft) { - window->set_cursor (cResizeBottomLeft); - } else if (shape == CSResizeBottomRight) { - window->set_cursor (cResizeBottomRight); - } else if (shape == CSMove2D) { - window->set_cursor (cMove2D); - } else if (shape == CSMove1DH) { - window->set_cursor (cResizeWidth); - } else if (shape == CSMove1DV) { - window->set_cursor (cResizeHeight); - } else if (shape == CSMoveRotate) { - window->set_cursor (cRotate); - } else if (shape == CSSpotWB) { - window->set_cursor (cWB); - } else if (shape == CSAddColPicker) { - window->set_cursor (cAddPicker); - } else if (shape == CSCropSelect) { - window->set_cursor (cCropDraw); - } else if (shape == CSMoveLeft) { - window->set_cursor (cLeftTanMove); - } else if (shape == CSMoveRight) { - window->set_cursor (cRightTanMove); - } else if (shape == CSStraighten) { - window->set_cursor (cRotate); - } else if (shape == CSWait) { - window->set_cursor (cWait); - } else if (shape == CSPlus) { - window->set_cursor (cAdd); - } else if (shape == CSEmpty) { - window->set_cursor (cHidden); + case CursorShape::CSAddColPicker: + window->set_cursor(cAddPicker); + break; + case CursorShape::CSArrow: + window->set_cursor(); // set_cursor without any arguments to select system default + break; + case CursorShape::CSCropSelect: + window->set_cursor(cCropDraw); + break; + case CursorShape::CSCrosshair: + window->set_cursor(cCrosshair); + break; + case CursorShape::CSEmpty: + window->set_cursor(cEmpty); + break; + case CursorShape::CSHandClosed: + window->set_cursor(cHandClosed); + break; + case CursorShape::CSHandOpen: + window->set_cursor(cHandOpen); + break; + case CursorShape::CSMove: + window->set_cursor(cHandClosed); + break; + case CursorShape::CSMove1DH: + window->set_cursor(cMoveX); + break; + case CursorShape::CSMove1DV: + window->set_cursor(cMoveY); + break; + case CursorShape::CSMove2D: + window->set_cursor(cMoveXY); + break; + case CursorShape::CSMoveLeft: + window->set_cursor(cMoveL); + break; + case CursorShape::CSMoveRight: + window->set_cursor(cMoveR); + break; + case CursorShape::CSMoveRotate: + window->set_cursor(cRotate); + break; + case CursorShape::CSPlus: + window->set_cursor(cAdd); + break; + case CursorShape::CSResizeBottomLeft: + window->set_cursor(cMoveBL); + break; + case CursorShape::CSResizeBottomRight: + window->set_cursor(cMoveBR); + break; + case CursorShape::CSResizeDiagonal: + window->set_cursor(cMoveXY); + break; + case CursorShape::CSResizeHeight: + window->set_cursor(cMoveY); + break; + case CursorShape::CSResizeTopLeft: + window->set_cursor(cMoveTL); + break; + case CursorShape::CSResizeTopRight: + window->set_cursor(cMoveTR); + break; + case CursorShape::CSResizeWidth: + window->set_cursor(cMoveX); + break; + case CursorShape::CSSpotWB: + window->set_cursor(cWB); + break; + case CursorShape::CSStraighten: + window->set_cursor(cRotate); + break; + case CursorShape::CSUndefined: + break; + case CursorShape::CSWait: + window->set_cursor(cWait); + break; + default: + window->set_cursor(cCrosshair); } } diff --git a/rtgui/cursormanager.h b/rtgui/cursormanager.h index e98202ae7..7d3f068b2 100644 --- a/rtgui/cursormanager.h +++ b/rtgui/cursormanager.h @@ -22,60 +22,57 @@ #include enum CursorShape { - CSUndefined, + CSAddColPicker, CSArrow, + CSCropSelect, CSCrosshair, - CSHandOpen, + CSEmpty, CSHandClosed, + CSHandOpen, CSMove, - CSMoveLeft, - CSMoveRight, - CSResizeWidth, - CSResizeHeight, - CSResizeDiagonal, - CSResizeTopLeft, - CSResizeTopRight, - CSResizeBottomLeft, - CSResizeBottomRight, - CSMove2D, CSMove1DH, CSMove1DV, + CSMove2D, + CSMoveLeft, + CSMoveRight, CSMoveRotate, - CSSpotWB, - CSAddColPicker, - CSCropSelect, - CSStraighten, CSPlus, - CSWait, - CSEmpty + CSResizeBottomLeft, + CSResizeBottomRight, + CSResizeDiagonal, + CSResizeHeight, + CSResizeTopLeft, + CSResizeTopRight, + CSResizeWidth, + CSSpotWB, + CSStraighten, + CSUndefined, + CSWait }; class CursorManager { private: - Glib::RefPtr cResizeWidth; - Glib::RefPtr cResizeHeight; - Glib::RefPtr cResizeTopLeft; - Glib::RefPtr cResizeTopRight; - Glib::RefPtr cResizeBottomLeft; - Glib::RefPtr cResizeBottomRight; - Glib::RefPtr cCropDraw; - Glib::RefPtr cCropMove; - Glib::RefPtr cLeftTanMove; - Glib::RefPtr cRightTanMove; - Glib::RefPtr cNormal; - Glib::RefPtr cCropSelection; Glib::RefPtr cAdd; - Glib::RefPtr cWait; - Glib::RefPtr cCrosshair; - Glib::RefPtr cHandOpen; - Glib::RefPtr cHandClosed; - Glib::RefPtr cWB; Glib::RefPtr cAddPicker; - Glib::RefPtr cHidden; - Glib::RefPtr cMove2D; + Glib::RefPtr cCropDraw; + Glib::RefPtr cCrosshair; + Glib::RefPtr cHandClosed; + Glib::RefPtr cHandOpen; + Glib::RefPtr cEmpty; + Glib::RefPtr cMoveBL; + Glib::RefPtr cMoveBR; + Glib::RefPtr cMoveL; + Glib::RefPtr cMoveR; + Glib::RefPtr cMoveTL; + Glib::RefPtr cMoveTR; + Glib::RefPtr cMoveX; + Glib::RefPtr cMoveY; + Glib::RefPtr cMoveXY; Glib::RefPtr cRotate; + Glib::RefPtr cWB; + Glib::RefPtr cWait; Glib::RefPtr display; Glib::RefPtr window; diff --git a/rtgui/mydiagonalcurve.cc b/rtgui/mydiagonalcurve.cc index e7874dad2..0bc58f28e 100644 --- a/rtgui/mydiagonalcurve.cc +++ b/rtgui/mydiagonalcurve.cc @@ -559,7 +559,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) getCursorPosition(Gdk::EventType(event->type), event->motion.is_hint != 0, int(event->button.x), int(event->button.y), Gdk::ModifierType(event->button.state)); findClosestPoint(); - new_type = CSMove; + new_type = CSMove2D; // Shown when dragging a node. if (distanceX > minDistanceX) { if (mod_type & GDK_CONTROL_MASK) { @@ -735,7 +735,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) } if (distanceX <= minDistanceX) { - new_type = CSMove; + new_type = CSMove2D; // Shown on node release. lit_point = closest_point; } else { new_type = CSPlus; @@ -799,7 +799,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event) lit_point = -1; } else if (distanceX <= minDistanceX) { // the cursor is close to an existing point - new_type = CSMove; + new_type = CSPlus; // Shown when hovering over node snapping distance (not necessarily over node). lit_point = closest_point; } else { // the cursor is inside the graph but away from existing points diff --git a/rtgui/myflatcurve.cc b/rtgui/myflatcurve.cc index 4da683b0c..70fc0c7d7 100644 --- a/rtgui/myflatcurve.cc +++ b/rtgui/myflatcurve.cc @@ -630,7 +630,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) switch (area) { case (FCT_Area_Insertion): - new_type = CSMove; + new_type = CSMove2D; // Shown when adding a new node in a blank area, both click and drag. /* insert a new control point */ if (num > 0) { @@ -681,7 +681,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) break; case (FCT_Area_Point): - new_type = CSMove; + new_type = CSMove2D; // Shown when node clicked and dragged. editedHandle = FCT_EditedHandle_CPoint; ugpX = curve.x.at(lit_point); ugpY = curve.y.at(lit_point); @@ -689,7 +689,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) case (FCT_Area_H): case (FCT_Area_V): - new_type = CSMove; + new_type = CSMove2D; // Shown when vertical line clicked, not dragged. editedHandle = FCT_EditedHandle_CPointUD; ugpX = curve.x.at(lit_point); ugpY = curve.y.at(lit_point); @@ -876,7 +876,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) break; case (FCT_Area_Point): - new_type = CSMove; + new_type = CSMove2D; // Shown when node released. break; case (FCT_Area_H): @@ -884,7 +884,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) break; case (FCT_Area_V): - new_type = CSMove; + new_type = CSMove2D; // Shown when line released. break; case (FCT_Area_LeftTan): @@ -1008,7 +1008,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event) //new_type = CSMove; //break; case (FCT_Area_V): - new_type = CSMove; + new_type = CSPlus; // Shown when hovering over vertical line. break; case (FCT_Area_H): From 9000c1800174a0d4d2a4e0659efa3c465cbcbc03 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 30 Aug 2018 21:02:44 +0200 Subject: [PATCH 058/115] removed timing code in nikon_load_raw() --- rtengine/dcraw.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 269faf96a..ccfd16187 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -27,7 +27,7 @@ #include #include #include "opthelper.h" -#define BENCHMARK +//#define BENCHMARK #include "StopWatch.h" /* @@ -1220,7 +1220,6 @@ void CLASS pentax_load_raw() void CLASS nikon_load_raw() { -BENCHFUN static const uchar nikon_tree[][32] = { { 0,1,5,1,1,1,1,1,1,2,0,0,0,0,0,0, /* 12-bit lossy */ 5,4,3,6,2,7,1,0,8,9,11,10,12 }, From 258dfc2275e0e337e279313b0528e58ef1328fd0 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Fri, 31 Aug 2018 13:01:27 +0200 Subject: [PATCH 059/115] Fix segfault when loading 16-bit float tiff --- rtengine/imagefloat.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rtengine/imagefloat.h b/rtengine/imagefloat.h index ee719a352..65c291775 100644 --- a/rtengine/imagefloat.h +++ b/rtengine/imagefloat.h @@ -153,7 +153,8 @@ public: if (exponent == 0) { if (mantissa == 0) { // Plus or minus zero - return (uint32_t) (sign << 31); + tmp.i = (uint32_t) (sign << 31); + return tmp.f; } else { // Denormalized number -- renormalize it while (!(mantissa & 0x00000400)) { @@ -165,8 +166,9 @@ public: } } else if (exponent == 31) { if (mantissa == 0) { - // Positive or negative infinity, convert to maximum (16 bit) values. - return (uint32_t) ((sign << 31) | ((0x1eL + 127 - 15) << 23) | (0x3ffL << 13)); + // Positive or negative infinity, convert to maximum (16 bit) values. + tmp.i = (uint32_t)((sign << 31) | ((0x1eL + 127 - 15) << 23) | (0x3ffL << 13)); + return tmp.f; } else { // Nan -- Just set to zero. return 0; From 1d78aa4c3a0a0b9ab6f4c45c0fb6854cae406fdd Mon Sep 17 00:00:00 2001 From: heckflosse Date: Fri, 31 Aug 2018 13:44:38 +0200 Subject: [PATCH 060/115] Change position of contrast threshold adjuster in demosaic and microcontrast tool for consistency with sharpening tool --- rtgui/bayerprocess.cc | 28 ++++++++++++++-------------- rtgui/sharpenmicro.cc | 8 ++++---- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc index 1770dcbb0..d68f5c2d3 100644 --- a/rtgui/bayerprocess.cc +++ b/rtgui/bayerprocess.cc @@ -46,6 +46,20 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA hb1->pack_end (*method, Gtk::PACK_EXPAND_WIDGET, 4); pack_start( *hb1, Gtk::PACK_SHRINK, 4); + + dualDemosaicOptions = Gtk::manage (new Gtk::VBox ()); + + dualDemosaicContrast = Gtk::manage(new Adjuster (M("TP_RAW_DUALDEMOSAICCONTRAST"), 0, 100, 1, 20)); + dualDemosaicContrast->setAdjusterListener (this); + + if (dualDemosaicContrast->delay < options.adjusterMaxDelay) { + dualDemosaicContrast->delay = options.adjusterMaxDelay; + } + + dualDemosaicContrast->show(); + dualDemosaicOptions->pack_start(*dualDemosaicContrast); + pack_start( *dualDemosaicOptions, Gtk::PACK_SHRINK, 4); + borderbox = Gtk::manage(new Gtk::HBox()); border = Gtk::manage(new Adjuster(M("TP_RAW_BORDER"), 0, 16, 1, 4)); border->setAdjusterListener (this); @@ -112,20 +126,6 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA lmmseOptions->pack_start(*lmmseIterations); pack_start( *lmmseOptions, Gtk::PACK_SHRINK, 4); - dualDemosaicOptions = Gtk::manage (new Gtk::VBox ()); - - dualDemosaicContrast = Gtk::manage(new Adjuster (M("TP_RAW_DUALDEMOSAICCONTRAST"), 0, 100, 1, 20)); - dualDemosaicContrast->setAdjusterListener (this); - - if (dualDemosaicContrast->delay < options.adjusterMaxDelay) { - dualDemosaicContrast->delay = options.adjusterMaxDelay; - } - - dualDemosaicContrast->show(); - dualDemosaicOptions->pack_start(*dualDemosaicContrast); - pack_start( *dualDemosaicOptions, Gtk::PACK_SHRINK, 4); - - // -------------------- PixelShift ---------------------- diff --git a/rtgui/sharpenmicro.cc b/rtgui/sharpenmicro.cc index 7c2b4d9fb..9beb5a340 100644 --- a/rtgui/sharpenmicro.cc +++ b/rtgui/sharpenmicro.cc @@ -44,15 +44,15 @@ SharpenMicro::SharpenMicro () : FoldableToolPanel(this, "sharpenmicro", M("TP_SH uniformity->setAdjusterListener (this); uniformity->show(); + pack_start( *contrast, Gtk::PACK_SHRINK, 0); + pack_start( *amount, Gtk::PACK_SHRINK, 0); + pack_start( *uniformity, Gtk::PACK_SHRINK, 0); + matrix = Gtk::manage (new Gtk::CheckButton (M("TP_SHARPENMICRO_MATRIX"))); matrix->set_active (true); pack_start(*matrix, Gtk::PACK_SHRINK, 0); matrix->show (); - pack_start( *contrast, Gtk::PACK_SHRINK, 0); - pack_start( *amount, Gtk::PACK_SHRINK, 0); - pack_start( *uniformity, Gtk::PACK_SHRINK, 0); - matrixconn = matrix->signal_toggled().connect( sigc::mem_fun(*this, &SharpenMicro::matrix_toggled) ); } From 7e1d6a3c675332bc9fcf43700d69aa98f39764ca Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Sat, 1 Sep 2018 14:40:32 +0200 Subject: [PATCH 061/115] Revision of CLI --help info --- rtgui/main-cli.cc | 54 +++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/rtgui/main-cli.cc b/rtgui/main-cli.cc index c480c7213..f1c5c2b50 100644 --- a/rtgui/main-cli.cc +++ b/rtgui/main-cli.cc @@ -211,7 +211,7 @@ int main (int argc, char **argv) int ret = 0; // printing RT's version in all case, particularly useful for the 'verbose' mode, but also for the batch processing - std::cout << "RawTherapee, version " << RTVERSION << ", command line" << std::endl; + std::cout << "RawTherapee, version " << RTVERSION << ", command line." << std::endl; if (argc > 1) { ret = processLineParams (argc, argv); @@ -315,7 +315,7 @@ int processLineParams ( int argc, char **argv ) #endif if (fname.at (0) == '-') { - std::cerr << "Error: filename missing next to the -p switch" << std::endl; + std::cerr << "Error: filename missing next to the -p switch." << std::endl; deleteProcParams (processingParams); return -3; } @@ -325,7 +325,7 @@ int processLineParams ( int argc, char **argv ) if (! (currentParams->load ( fname ))) { processingParams.push_back (currentParams); } else { - std::cerr << "Error: \"" << fname << "\" not found" << std::endl; + std::cerr << "Error: \"" << fname << "\" not found." << std::endl; deleteProcParams (processingParams); return -3; } @@ -393,13 +393,13 @@ int processLineParams ( int argc, char **argv ) bits = atoi (currParam.substr (2).c_str()); if (bits != 8 && bits != 16 && bits != 32) { - std::cerr << "Error: specify -b8 for 8-bit/integer or -b16 for 16-bit/integer or -b16f for 16-bit/float or -b32 for 32-bit/float output." << std::endl; + std::cerr << "Error: specify output bit depth per channel as -b8 for 8-bit integer, -b16 for 16-bit integer, -b16f for 16-bit float or -b32 for 32-bit float." << std::endl; deleteProcParams (processingParams); return -3; } isFloat = (bits == 16 && currParam.length() == 3 && currParam.at(2) == 'f') || bits == 32; - printf("Float output detected (%d bits)!\n", bits); + printf("Float output detected (%d-bit)!\n", bits); break; @@ -426,7 +426,7 @@ int processLineParams ( int argc, char **argv ) #endif if (!Glib::file_test (argument, Glib::FILE_TEST_EXISTS)) { - std::cout << "\"" << argument << "\" doesn't exist !" << std::endl; + std::cout << "\"" << argument << "\" doesn't exist!" << std::endl; continue; } @@ -436,9 +436,9 @@ int processLineParams ( int argc, char **argv ) if (notAll || notRetained) { if (notAll) { - std::cout << "\"" << argument << "\" is not one of the file format to process: skipped" << std::endl; + std::cout << "\"" << argument << "\" is not one of the parsed extensions. Image skipped." << std::endl; } else if (notRetained) { - std::cout << "\"" << argument << "\" is not one of the retained file format to process: skipped" << std::endl; + std::cout << "\"" << argument << "\" is not one of the selected parsed extensions. Image skipped." << std::endl; } } else { inputFiles.emplace_back (argument); @@ -469,11 +469,11 @@ int processLineParams ( int argc, char **argv ) if (isDir || notAll || notRetained) { if (isDir) { - std::cout << "\"" << fileName << "\" is a directory: skipped" << std::endl; + std::cout << "\"" << fileName << "\" is a folder. Folder skipped" << std::endl; } else if (notAll) { - std::cout << "\"" << fileName << "\" is not one of the file format to process: skipped" << std::endl; + std::cout << "\"" << fileName << "\" is not one of the parsed extensions. Image skipped." << std::endl; } else if (notRetained) { - std::cout << "\"" << fileName << "\" is not one of the retained file format to process: skipped" << std::endl; + std::cout << "\"" << fileName << "\" is not one of the selected parsed extensions. Image skipped." << std::endl; } continue; @@ -483,7 +483,7 @@ int processLineParams ( int argc, char **argv ) if (sideProcParams && skipIfNoSidecar) { // look for the sidecar proc params if (!Glib::file_test (fileName + paramFileExtension, Glib::FILE_TEST_EXISTS)) { - std::cout << "\"" << fileName << "\" has no side-car file: image skipped" << std::endl; + std::cout << "\"" << fileName << "\" has no side-car file. Image skipped." << std::endl; continue; } } @@ -523,11 +523,11 @@ int processLineParams ( int argc, char **argv ) std::cout << " " << Glib::path_get_basename (argv[0]) << " -c | Convert files in batch with your own settings." << std::endl; std::cout << std::endl; std::cout << "Options:" << std::endl; - std::cout << " " << Glib::path_get_basename (argv[0]) << "[-o |-O ] [-q] [-a] [-s|-S] [-p [-p ...] ] [-d] [ -j[1-100] [-js<1-3>] | [-b<8|16>] [-t[z] | [-n]] ] [-Y] [-f] -c " << std::endl; + std::cout << " " << Glib::path_get_basename (argv[0]) << "[-o |-O ] [-q] [-a] [-s|-S] [-p [-p ...] ] [-d] [ -j[1-100] -js<1-3> | -t[z] -b<8|16|16f|32> | -n -b<8|16> ] [-Y] [-f] -c " << std::endl; std::cout << std::endl; - std::cout << " -c Specify one or more input files or directory." << std::endl; - std::cout << " When specifying directories, Rawtherapee will look for images files that comply with the" << std::endl; - std::cout << " selected extensions (see also '-a')." << std::endl; + std::cout << " -c Specify one or more input files or folders." << std::endl; + std::cout << " When specifying folders, Rawtherapee will look for image file types which comply" << std::endl; + std::cout << " with the selected extensions (see also '-a')." << std::endl; std::cout << " -c must be the last option." << std::endl; std::cout << " -o | Set output file or folder." << std::endl; std::cout << " Saves output file alongside input file if -o is not specified." << std::endl; @@ -554,15 +554,15 @@ int processLineParams ( int argc, char **argv ) std::cout << " Chroma halved horizontally." << std::endl; std::cout << " 3 = Best quality: 1x1, 1x1, 1x1 (4:4:4)" << std::endl; std::cout << " No chroma subsampling." << std::endl; - std::cout << " -b<8|16|16f|32> Specify bit depth per channel (default value: 16 for TIFF, 8 for PNG and JPEG)." << std::endl; - std::cout << " 8 = 8 bits integer, applies to JPEG, PNG and TIFF" << std::endl; - std::cout << " 16 = 16 bits integer, applies to PNG and TIFF" << std::endl; - std::cout << " 16f = 16 bits float, applies to TIFF" << std::endl; - std::cout << " 32 = 32 bits float, applies to TIFF" << std::endl; + std::cout << " -b<8|16|16f|32> Specify bit depth per channel." << std::endl; + std::cout << " 8 = 8-bit integer. Applies to JPEG, PNG and TIFF. Default for JPEG and PNG." << std::endl; + std::cout << " 16 = 16-bit integer. Applies to TIFF and PNG. Default for TIFF." << std::endl; + std::cout << " 16f = 16-bit float. Applies to TIFF." << std::endl; + std::cout << " 32 = 32-bit float. Applies to TIFF." << std::endl; std::cout << " -t[z] Specify output to be TIFF." << std::endl; std::cout << " Uncompressed by default, or deflate compression with 'z'." << std::endl; std::cout << " -n Specify output to be compressed PNG." << std::endl; - std::cout << " Compression is hard-coded to PNG_FILTER_PAETH, Z_RLE" << std::endl; + std::cout << " Compression is hard-coded to PNG_FILTER_PAETH, Z_RLE." << std::endl; std::cout << " -Y Overwrite output if present." << std::endl; std::cout << " -f Use the custom fast-export processing pipeline." << std::endl; std::cout << std::endl; @@ -624,7 +624,7 @@ int processLineParams ( int argc, char **argv ) Glib::ustring profPath = options.findProfilePath (options.defProfRaw); if (options.is_defProfRawMissing() || profPath.empty() || (profPath != DEFPROFILE_DYNAMIC && rawParams->load (profPath == DEFPROFILE_INTERNAL ? DEFPROFILE_INTERNAL : Glib::build_filename (profPath, Glib::path_get_basename (options.defProfRaw) + paramFileExtension)))) { - std::cerr << "Error: default raw processing profile not found" << std::endl; + std::cerr << "Error: default raw processing profile not found." << std::endl; rawParams->deleteInstance(); delete rawParams; deleteProcParams (processingParams); @@ -635,7 +635,7 @@ int processLineParams ( int argc, char **argv ) profPath = options.findProfilePath (options.defProfImg); if (options.is_defProfImgMissing() || profPath.empty() || (profPath != DEFPROFILE_DYNAMIC && imgParams->load (profPath == DEFPROFILE_INTERNAL ? DEFPROFILE_INTERNAL : Glib::build_filename (profPath, Glib::path_get_basename (options.defProfImg) + paramFileExtension)))) { - std::cerr << "Error: default non-raw processing profile not found" << std::endl; + std::cerr << "Error: default non-raw processing profile not found." << std::endl; imgParams->deleteInstance(); delete imgParams; rawParams->deleteInstance(); @@ -716,7 +716,7 @@ int processLineParams ( int argc, char **argv ) rawParams = ProfileStore::getInstance()->loadDynamicProfile (ii->getMetaData()); } - std::cout << " Merging default raw processing profile" << std::endl; + std::cout << " Merging default raw processing profile." << std::endl; rawParams->applyTo (¤tParams); } else { if (options.defProfImg == DEFPROFILE_DYNAMIC) { @@ -725,7 +725,7 @@ int processLineParams ( int argc, char **argv ) imgParams = ProfileStore::getInstance()->loadDynamicProfile (ii->getMetaData()); } - std::cout << " Merging default non-raw processing profile" << std::endl; + std::cout << " Merging default non-raw processing profile." << std::endl; imgParams->applyTo (¤tParams); } } @@ -744,7 +744,7 @@ int processLineParams ( int argc, char **argv ) std::cerr << "Warning: sidecar file requested but not found for: " << sideProcessingParams << std::endl; } else { sideCarFound = true; - std::cout << " Merging sidecar procparams" << std::endl; + std::cout << " Merging sidecar procparams." << std::endl; } } From 5c10e1954126ac3baa1c5300a5c0be22cae52d3b Mon Sep 17 00:00:00 2001 From: Hombre Date: Sat, 1 Sep 2018 19:02:00 +0200 Subject: [PATCH 062/115] Fix wrong bit-depth detection from RT-cli (see #2357) --- rtgui/main-cli.cc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/rtgui/main-cli.cc b/rtgui/main-cli.cc index f1c5c2b50..df8e99379 100644 --- a/rtgui/main-cli.cc +++ b/rtgui/main-cli.cc @@ -391,6 +391,17 @@ int processLineParams ( int argc, char **argv ) case 'b': bits = atoi (currParam.substr (2).c_str()); + if (currParam.length() >=3 && currParam.at(2) == '8') { + bits = 8; + } else if (currParam.length() >= 4 && currParam.at(2) == '1' && currParam.at(3) == '6') { + bits = 16; + if (currParam.length() == 5 && currParam.at(4) == 'f') { + isFloat = true; + } + } else if (currParam.length() == 4 && currParam.at(2) == '3' && currParam.at(3) == '2') { + bits = 32; + isFloat = true; + } if (bits != 8 && bits != 16 && bits != 32) { std::cerr << "Error: specify output bit depth per channel as -b8 for 8-bit integer, -b16 for 16-bit integer, -b16f for 16-bit float or -b32 for 32-bit float." << std::endl; @@ -398,8 +409,7 @@ int processLineParams ( int argc, char **argv ) return -3; } - isFloat = (bits == 16 && currParam.length() == 3 && currParam.at(2) == 'f') || bits == 32; - printf("Float output detected (%d-bit)!\n", bits); + std::cout << "Output is " << bits << "-bit, " << (isFloat ? "floating point" : "integer") << std::endl; break; From 5cc53a421e9f87aa55e1e71350cbb4ea2465543d Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Sat, 1 Sep 2018 22:59:28 +0200 Subject: [PATCH 063/115] Use hard-coded NR default settings #4327 Now the hard-coded default values of the Noise Reduction settings which were removed from Preferences are used, instead of reading them from the options file. Reverted accidentally-deleted "preview demosaicing method" setting. --- rtgui/options.cc | 73 ++++++-------------------------------------- rtgui/preferences.cc | 2 ++ 2 files changed, 12 insertions(+), 63 deletions(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index ea82c80e0..a28a29789 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -535,11 +535,6 @@ void Options::setDefaults() // rtSettings.viewingdevice = 0; // rtSettings.viewingdevicegrey = 3; // rtSettings.viewinggreySc = 1; - rtSettings.leveldnv = 2; - rtSettings.leveldnti = 0; - rtSettings.leveldnaut = 0; - rtSettings.leveldnliss = 0; - rtSettings.leveldnautsimpl = 0; rtSettings.printerProfile = Glib::ustring(); rtSettings.printerIntent = rtengine::RI_RELATIVE; @@ -574,10 +569,16 @@ void Options::setDefaults() rtSettings.daubech = false; - rtSettings.nrauto = 10;//between 2 and 20 - rtSettings.nrautomax = 40;//between 5 and 100 - rtSettings.nrhigh = 0.45;//between 0.1 and 0.9 - rtSettings.nrwavlevel = 1;//integer between 0 and 2 + // #4327 - Noise Reduction settings removed from Preferences + rtSettings.nrauto = 10; // between 2 and 20 + rtSettings.nrautomax = 40; // between 5 and 100 + rtSettings.nrhigh = 0.45; // between 0.1 and 0.9 + rtSettings.nrwavlevel = 1; // integer between 0 and 2 + rtSettings.leveldnv = 2; + rtSettings.leveldnti = 0; + rtSettings.leveldnaut = 0; + rtSettings.leveldnliss = 0; + rtSettings.leveldnautsimpl = 0; // rtSettings.colortoningab =0.7; //rtSettings.decaction =0.3; @@ -1026,46 +1027,6 @@ void Options::readFromFile(Glib::ustring fname) rgbDenoiseThreadLimit = keyFile.get_integer("Performance", "RgbDenoiseThreadLimit"); } - if (keyFile.has_key("Performance", "NRauto")) { - rtSettings.nrauto = keyFile.get_double("Performance", "NRauto"); - } - - if (keyFile.has_key("Performance", "NRautomax")) { - rtSettings.nrautomax = keyFile.get_double("Performance", "NRautomax"); - } - - if (keyFile.has_key("Performance", "NRhigh")) { - rtSettings.nrhigh = keyFile.get_double("Performance", "NRhigh"); - } - - if (rtSettings.nrhigh == 0.0) { //avoid crash by division by zero in noise reduction - rtSettings.nrhigh = 0.45; - } - - if (keyFile.has_key("Performance", "NRWavlevel")) { - rtSettings.nrwavlevel = keyFile.get_integer("Performance", "NRWavlevel"); - } - - if (keyFile.has_key("Performance", "LevNR")) { - rtSettings.leveldnv = keyFile.get_integer("Performance", "LevNR"); - } - - if (keyFile.has_key("Performance", "LevNRTI")) { - rtSettings.leveldnti = keyFile.get_integer("Performance", "LevNRTI"); - } - - if (keyFile.has_key("Performance", "LevNRAUT")) { - rtSettings.leveldnaut = keyFile.get_integer("Performance", "LevNRAUT"); - } - - if (keyFile.has_key("Performance", "LevNRLISS")) { - rtSettings.leveldnliss = keyFile.get_integer("Performance", "LevNRLISS"); - } - - if (keyFile.has_key("Performance", "SIMPLNRAUT")) { - rtSettings.leveldnautsimpl = keyFile.get_integer("Performance", "SIMPLNRAUT"); - } - if (keyFile.has_key("Performance", "ClutCacheSize")) { clutCacheSize = keyFile.get_integer("Performance", "ClutCacheSize"); } @@ -1082,10 +1043,6 @@ void Options::readFromFile(Glib::ustring fname) prevdemo = (prevdemo_t)keyFile.get_integer("Performance", "PreviewDemosaicFromSidecar"); } - if (keyFile.has_key("Performance", "Daubechies")) { - rtSettings.daubech = keyFile.get_boolean("Performance", "Daubechies"); - } - if (keyFile.has_key("Performance", "SerializeTiffRead")) { serializeTiffRead = keyFile.get_boolean("Performance", "SerializeTiffRead"); } @@ -1923,20 +1880,10 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_boolean("Clipping Indication", "BlinkClipped", blinkClipped); keyFile.set_integer("Performance", "RgbDenoiseThreadLimit", rgbDenoiseThreadLimit); - keyFile.set_double("Performance", "NRauto", rtSettings.nrauto); - keyFile.set_double("Performance", "NRautomax", rtSettings.nrautomax); - keyFile.set_double("Performance", "NRhigh", rtSettings.nrhigh); - keyFile.set_integer("Performance", "NRWavlevel", rtSettings.nrwavlevel); - keyFile.set_integer("Performance", "LevNR", rtSettings.leveldnv); - keyFile.set_integer("Performance", "LevNRTI", rtSettings.leveldnti); - keyFile.set_integer("Performance", "LevNRAUT", rtSettings.leveldnaut); - keyFile.set_integer("Performance", "LevNRLISS", rtSettings.leveldnliss); - keyFile.set_integer("Performance", "SIMPLNRAUT", rtSettings.leveldnautsimpl); keyFile.set_integer("Performance", "ClutCacheSize", clutCacheSize); keyFile.set_integer("Performance", "MaxInspectorBuffers", maxInspectorBuffers); keyFile.set_integer("Performance", "InspectorDelay", inspectorDelay); keyFile.set_integer("Performance", "PreviewDemosaicFromSidecar", prevdemo); - keyFile.set_boolean("Performance", "Daubechies", rtSettings.daubech); keyFile.set_boolean("Performance", "SerializeTiffRead", serializeTiffRead); keyFile.set_integer("Performance", "ThumbnailInspectorMode", int(rtSettings.thumbnail_inspector_mode)); diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 644b34987..dd7e4a681 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -1831,6 +1831,8 @@ void Preferences::fillPreferences () iccDir->set_current_folder (moptions.rtSettings.iccDirectory); } + cprevdemo->set_active (moptions.prevdemo); + languages->set_active_text (moptions.language); ckbLangAutoDetect->set_active (moptions.languageAutoDetect); int themeNbr = getThemeRowNumber (moptions.theme); From b26ea95c92df4681fc2ad3ceed2bb838cce10db6 Mon Sep 17 00:00:00 2001 From: Hombre Date: Sat, 1 Sep 2018 23:04:49 +0200 Subject: [PATCH 064/115] Bit-depth detection from RT-cli now more bulletproof (see #2357) Thanks to Beep6581 for the fix --- rtgui/main-cli.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/rtgui/main-cli.cc b/rtgui/main-cli.cc index df8e99379..347161cd5 100644 --- a/rtgui/main-cli.cc +++ b/rtgui/main-cli.cc @@ -391,14 +391,15 @@ int processLineParams ( int argc, char **argv ) case 'b': bits = atoi (currParam.substr (2).c_str()); - if (currParam.length() >=3 && currParam.at(2) == '8') { + + if (currParam.length() >= 3 && currParam.at(2) == '8') { // -b8 bits = 8; - } else if (currParam.length() >= 4 && currParam.at(2) == '1' && currParam.at(3) == '6') { + } else if (currParam.length() >= 4 && currParam.length() <= 5 && currParam.at(2) == '1' && currParam.at(3) == '6') { // -b16, -b16f bits = 16; if (currParam.length() == 5 && currParam.at(4) == 'f') { isFloat = true; } - } else if (currParam.length() == 4 && currParam.at(2) == '3' && currParam.at(3) == '2') { + } else if (currParam.length() >= 4 && currParam.length() <= 5 && currParam.at(2) == '3' && currParam.at(3) == '2') { // -b32 == -b32f bits = 32; isFloat = true; } @@ -409,7 +410,7 @@ int processLineParams ( int argc, char **argv ) return -3; } - std::cout << "Output is " << bits << "-bit, " << (isFloat ? "floating point" : "integer") << std::endl; + std::cout << "Output is " << bits << "-bit " << (isFloat ? "floating-point" : "integer") << "." << std::endl; break; From 09e97051ed7d20a189fa05932cf1f38e0a3c2a47 Mon Sep 17 00:00:00 2001 From: TooWaBoo Date: Sun, 2 Sep 2018 05:26:26 +0200 Subject: [PATCH 065/115] Update TooWaBlue theme v2.73 Some fine tuning --- rtdata/themes/TooWaBlue-GTK3-20_.css | 61 ++++++++++++++-------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css index 71733f189..d54db7f86 100644 --- a/rtdata/themes/TooWaBlue-GTK3-20_.css +++ b/rtdata/themes/TooWaBlue-GTK3-20_.css @@ -1,8 +1,8 @@ /* This file is part of RawTherapee. - Copyright (c) 2016-2017 TooWaBoo - Version 2.72 + Copyright (c) 2016-2018 TooWaBoo + Version 2.73 RawTherapee is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -79,7 +79,8 @@ #EditorTopPanel button:not(.narrowbutton) image, #IopsPanel button:not(.Right) image, #ProfilePanel button image, -#MainNotebook > header :not(#CloseButton) > image { +#MainNotebook > stack > :nth-child(2) > box:nth-child(3) image, +#MainNotebook > header button:not(#CloseButton) image { -gtk-icon-transform: scale(calc(22/24)); } @@ -777,13 +778,13 @@ notebook header.left tab { notebook header tab > grid > image { min-height: 2.5em; min-width: 0; - padding: 0 0.16667em 0 0; + padding: 0 0.25em 0 0; margin: 0; } notebook header.left tab > grid > image { min-height: 0; min-width: 2.5em; - padding: 0.16667em 0 0; + padding: 0.25em 0 0; } notebook header tab label { margin: 0.08334em; @@ -982,7 +983,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { #MetaPanelNotebook > stack > box > grid > button { margin-top: 0.08334em; margin-bottom: 0.08334em; - min-height: 2.33334em; + min-height: 2.16667em; } #MetaPanelNotebook label { @@ -1024,8 +1025,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { padding: 0; margin: 0; } -#ToolBarPanelFileBrowser .smallbuttonbox:nth-child(1) { - margin: 0 0 2px 0; +#ToolBarPanelFileBrowser .smallbuttonbox:nth-child(2) { + margin: 1px 0 -1px 0; } #ToolBarPanelFileBrowser .smallbuttonbox button.smallbutton { min-height: 0; @@ -1042,7 +1043,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { background-color: @bg-dark-grey; } #ToolBarPanelFileBrowser .smallbuttonbox button.smallbutton image{ - -gtk-icon-transform: scale(calc(14/16)); + -gtk-icon-transform: scale(calc(13/16)); margin: -2px } @@ -1114,8 +1115,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { } #EditorTopPanel button { margin: 0 0.08334em; - min-height: 2.33334em; - min-width: 2.33334em; + min-height: 2.16667em; + min-width: 2.16667em; } /* Removes margin from the last button. Otherwise the filmstrip will cut of the right border. */ #EditorTopPanel :last-child > button:last-child { @@ -1305,7 +1306,7 @@ popover.background modelbutton:hover { /*** Switch ***********************************************************************************/ switch { - min-height: 2.33334em; + min-height: 2.16667em; min-width: 11em; margin: 0; padding: 0; @@ -1350,8 +1351,8 @@ switch:disabled:not(:checked) { /*** Buttons ***********************************************************************************/ button { - min-height: 2.33334em; - min-width: 2.33334em; + min-height: 2.16667em; + min-width: 2.16667em; margin: 0; padding: 0; /* x */ border-radius: 0.2em; @@ -1391,28 +1392,26 @@ button.flat { } /* Resetbutton */ -#MyExpander button.flat, +#MyExpander button:last-child.flat, +#MyExpander scale + button.flat, dialog scale + button.flat, -scale + button.flat, -dialog entry + button.flat { +#MainNotebook > stack > :nth-child(2) > box:nth-child(1) scale + button.flat, +entry + button.flat { min-height: 1.16667em; - min-width: 1.66667em; + min-width: 1.5em; margin: 0.08334em 0 0.08334em 0.16667em; - padding: 0; + padding: 0 0 0 0.16667em; } -dialog entry + button.flat { +dialog entry + button:last-child.flat { min-height: 1.66667em; } -#MyExpander scale + button.flat { +#MyExpander scale + button:last-child.flat, +#MyExpander spinbutton + button:last-child.flat { margin: 0 0 0 0.16667em; } -#MyExpander image + button.flat { - margin: 0 0 0 0.41667em; -} -#MyExpander spinbutton + button.flat { - margin: 0 0 0 0.16667em; - padding-top: 0.08334em; +#MyExpander image + button:last-child.flat { + margin: 0 0 0 0.25em; } /**/ @@ -1426,7 +1425,7 @@ dialog entry + button.flat { } #MyExpander button.flat + button.flat image, #MyExpander button.flat:first-child image{ - -gtk-icon-transform: scale(calc(20/24)); + -gtk-icon-transform: scale(calc(20/24)); margin: -2px; } /**/ @@ -1573,7 +1572,7 @@ buttonbox:not(.dialog-action-area) button{ #MyExpander .image-combo button.Left { border-top-right-radius: 0; border-bottom-right-radius: 0; - min-width: 2.33334em; + min-width: 2.16667em; } /**/ @@ -1606,7 +1605,7 @@ button.color { /* Save, Cancel, OK ... buttons */ .dialog-action-area button { - min-height: 2.33334em; + min-height: 2.16667em; margin-top: 0.33334em; } messagedialog .dialog-action-area button { @@ -1752,7 +1751,7 @@ messagedialog headerbar button.titlebutton { #MainNotebook tab #CloseButton { padding: 0; - margin: 0.41667em -2px 0.5em 0.25em; + margin: 0.33334em -2px 0.5em 0.25em; min-width: 1.5em; min-height: 1.5em; } From 20118c401928cb0fc73d9b9cdd154938c627d7c9 Mon Sep 17 00:00:00 2001 From: Hombre Date: Sun, 2 Sep 2018 10:47:44 +0200 Subject: [PATCH 066/115] Partially hidden toolbars can now be scrolled with the mouse wheel ...thanks to the new MyScrolledToolbar class (guiutils.h/cc). This is valid for the FileBrowser tab (first and second line can be scrolled individually) and the top and bottom bar of the Editor(s) tab. see #4035 --- rtgui/editorpanel.cc | 9 ++++++-- rtgui/filecatalog.cc | 39 ++++++++++++++++++++------------ rtgui/filecatalog.h | 1 + rtgui/guiutils.cc | 53 +++++++++++++++++++++++++++++++++++++++++++- rtgui/guiutils.h | 12 ++++++++++ 5 files changed, 97 insertions(+), 17 deletions(-) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index c99ed2dbd..ff57ecace 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -630,7 +630,9 @@ EditorPanel::EditorPanel (FilePanel* filePanel) beforeAfterBox->set_name ("BeforeAfterContainer"); beforeAfterBox->pack_start (*afterBox); - editbox->pack_start (*toolBarPanel, Gtk::PACK_SHRINK, 2); + MyScrolledToolbar *stb1 = Gtk::manage(new MyScrolledToolbar()); + stb1->add(*toolBarPanel); + editbox->pack_start (*stb1, Gtk::PACK_SHRINK, 2); editbox->pack_start (*beforeAfterBox); // build right side panel @@ -763,7 +765,10 @@ EditorPanel::EditorPanel (FilePanel* filePanel) iops->attach_next_to (*tbShowHideSidePanels, Gtk::POS_RIGHT, 1, 1); iops->attach_next_to (*tbRightPanel_1, Gtk::POS_RIGHT, 1, 1); - editbox->pack_start (*iops, Gtk::PACK_SHRINK, 0); + MyScrolledToolbar *stb2 = Gtk::manage(new MyScrolledToolbar()); + stb2->add(*iops); + + editbox->pack_start (*stb2, Gtk::PACK_SHRINK, 0); editbox->show_all (); // build screen diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index a0d767d79..ae332754f 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -48,6 +48,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : listener(nullptr), fslistener(nullptr), iatlistener(nullptr), + hbToolBar1STB(nullptr), hasValidCurrentEFS(false), filterPanel(nullptr), exportPanel(nullptr), @@ -127,13 +128,17 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : // if NOT a single row toolbar if (!options.FileBrowserToolbarSingleRow) { - pack_start (*hbToolBar1, Gtk::PACK_SHRINK, 0); + hbToolBar1STB = Gtk::manage(new MyScrolledToolbar()); + hbToolBar1STB->add(*hbToolBar1); + pack_start (*hbToolBar1STB, Gtk::PACK_SHRINK, 0); } // setup button bar buttonBar = Gtk::manage( new Gtk::HBox () ); buttonBar->set_name ("ToolBarPanelFileBrowser"); - pack_start (*buttonBar, Gtk::PACK_SHRINK); + MyScrolledToolbar *stb = Gtk::manage(new MyScrolledToolbar()); + stb->add(*buttonBar); + pack_start (*stb, Gtk::PACK_SHRINK); tbLeftPanel_1 = new Gtk::ToggleButton (); iLeftPanel_1_Show = new RTImage("panel-to-right.png"); @@ -692,6 +697,9 @@ void FileCatalog::enableTabMode(bool enable) } else { buttonBar->show(); hbToolBar1->show(); + if (hbToolBar1STB) { + hbToolBar1STB->show(); + } exifInfo->set_active( options.showFileNames ); } @@ -910,8 +918,8 @@ void FileCatalog::refreshHeight () newHeight = h; } - if (hbToolBar1->is_visible() && !options.FileBrowserToolbarSingleRow) { - newHeight += hbToolBar1->get_height(); + if (hbToolBar1STB && hbToolBar1STB->is_visible()) { + newHeight += hbToolBar1STB->get_height(); } if (buttonBar->is_visible()) { @@ -2039,17 +2047,20 @@ void FileCatalog::updateFBQueryTB (bool singleRow) hbToolBar1->reference(); if (singleRow) { - bool removed = removeIfThere(this, hbToolBar1, false); - - if (removed) { + if (hbToolBar1STB) { + hbToolBar1STB->remove_with_viewport(); + removeIfThere(this, hbToolBar1STB, false); buttonBar->pack_start(*hbToolBar1, Gtk::PACK_EXPAND_WIDGET, 0); + hbToolBar1STB = nullptr; } } else { - bool removed = removeIfThere(buttonBar, hbToolBar1, false); - - if (removed) { - pack_start(*hbToolBar1, Gtk::PACK_SHRINK, 0); - reorder_child(*hbToolBar1, 0); + if (!hbToolBar1STB) { + removeIfThere(buttonBar, hbToolBar1, false); + hbToolBar1STB = Gtk::manage(new MyScrolledToolbar()); + hbToolBar1STB->add(*hbToolBar1); + hbToolBar1STB->show(); + pack_start (*hbToolBar1STB, Gtk::PACK_SHRINK, 0); + reorder_child(*hbToolBar1STB, 0); } } @@ -2592,7 +2603,7 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) void FileCatalog::showToolBar() { if (!options.FileBrowserToolbarSingleRow) { - hbToolBar1->show(); + hbToolBar1STB->show(); } buttonBar->show(); @@ -2601,7 +2612,7 @@ void FileCatalog::showToolBar() void FileCatalog::hideToolBar() { if (!options.FileBrowserToolbarSingleRow) { - hbToolBar1->hide(); + hbToolBar1STB->hide(); } buttonBar->hide(); diff --git a/rtgui/filecatalog.h b/rtgui/filecatalog.h index 66f14b6b2..af16fc8ae 100644 --- a/rtgui/filecatalog.h +++ b/rtgui/filecatalog.h @@ -73,6 +73,7 @@ private: Gtk::HBox* buttonBar; Gtk::HBox* hbToolBar1; + MyScrolledToolbar* hbToolBar1STB; Gtk::HBox* fltrRankbox; Gtk::HBox* fltrLabelbox; diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 28d3f6324..f957a90a0 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -955,7 +955,7 @@ bool MyScrolledWindow::on_scroll_event (GdkEventScroll* event) if (value2 != value) { scroll->set_value(value2); } - } else { + } else if (event->direction == GDK_SCROLL_UP) { value2 = value - step; if (value2 < lower) { @@ -981,6 +981,57 @@ void MyScrolledWindow::get_preferred_height_for_width_vfunc (int width, int &min natural_height = minimum_height = 50; } +/* + * + * Derived class of some widgets to properly handle the scroll wheel ; + * the user has to use the Shift key to be able to change the widget's value, + * otherwise the mouse wheel will scroll the toolbar. + * + */ +MyScrolledToolbar::MyScrolledToolbar () +{ + set_policy (Gtk::POLICY_EXTERNAL, Gtk::POLICY_NEVER); + set_propagate_natural_height(true); +} + +bool MyScrolledToolbar::on_scroll_event (GdkEventScroll* event) +{ + Glib::RefPtr adjust = get_hadjustment(); + Gtk::Scrollbar *scroll = get_hscrollbar(); + + if (adjust && scroll) { + double upper = adjust->get_upper(); + double lower = adjust->get_lower(); + double value = adjust->get_value(); + double step = adjust->get_step_increment() * 2; + double value2 = 0.; + + if (event->direction == GDK_SCROLL_DOWN) { + value2 = value + step; + + if (value2 > upper) { + value2 = upper; + } + + if (value2 != value) { + scroll->set_value(value2); + } + } else if (event->direction == GDK_SCROLL_UP) { + value2 = value - step; + + if (value2 < lower) { + value2 = lower; + } + + if (value2 != value) { + scroll->set_value(value2); + } + } + } + + return true; +} + MyComboBoxText::MyComboBoxText (bool has_entry) : Gtk::ComboBoxText(has_entry) { minimumWidth = naturalWidth = 70; diff --git a/rtgui/guiutils.h b/rtgui/guiutils.h index 2861b4913..89d05bfce 100644 --- a/rtgui/guiutils.h +++ b/rtgui/guiutils.h @@ -293,6 +293,18 @@ public: MyScrolledWindow(); }; +/** + * @brief subclass of Gtk::ScrolledWindow in order to handle the large toolbars (wider than available space) + */ +class MyScrolledToolbar : public Gtk::ScrolledWindow +{ + + bool on_scroll_event (GdkEventScroll* event); + +public: + MyScrolledToolbar(); +}; + /** * @brief subclass of Gtk::ComboBox in order to handle the scrollwheel */ From f59e7c31e4cce25c0d26c913dba64cdd85b1420d Mon Sep 17 00:00:00 2001 From: Thanatomanic <6567747+Thanatomanic@users.noreply.github.com> Date: Sun, 2 Sep 2018 13:39:55 +0200 Subject: [PATCH 067/115] Modifications to store histogram settings across sessions --- rtgui/editorpanel.cc | 2 +- rtgui/histogrampanel.cc | 85 ++++++++++++++++++++--------------------- rtgui/histogrampanel.h | 21 +++++----- rtgui/options.cc | 33 ++++++++++++++++ rtgui/options.h | 3 +- 5 files changed, 89 insertions(+), 55 deletions(-) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index cb4a58317..3b717abe7 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -2241,7 +2241,7 @@ void EditorPanel::histogramChanged (LUTu & histRed, LUTu & histGreen, LUTu & his { if (histogramPanel) { - histogramPanel->histogramChanged (histRed, histGreen, histBlue, histLuma, histRedRaw, histGreenRaw, histBlueRaw, histChroma); + histogramPanel->histogramChanged (histRed, histGreen, histBlue, histLuma, histChroma, histRedRaw, histGreenRaw, histBlueRaw); } tpc->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve,/*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 1d8ce89db..5293c6c00 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -129,14 +129,14 @@ HistogramPanel::HistogramPanel () buttonGrid = Gtk::manage (new Gtk::Grid ()); buttonGrid->set_orientation(Gtk::ORIENTATION_VERTICAL); - showRed->set_active (true); - showGreen->set_active (true); - showBlue->set_active (true); - showValue->set_active (false);//unactive by default - showChro->set_active (false);//unactive by default - showRAW->set_active (false); + showRed->set_active (options.histogramRed); + showGreen->set_active (options.histogramGreen); + showBlue->set_active (options.histogramBlue); + showValue->set_active (options.histogramLuma); + showChro->set_active (options.histogramChroma); + showRAW->set_active (options.histogramRAW); // no showMode->set_active(), as it's not a ToggleButton - showBAR->set_active (options.histogramBar); + showBAR->set_active (options.histogramBar); showRed->set_image (showRed->get_active() ? *redImage : *redImage_g); showGreen->set_image (showGreen->get_active() ? *greenImage : *greenImage_g); @@ -297,12 +297,12 @@ void HistogramPanel::bar_toggled () void HistogramPanel::rgbv_toggled () { // Update Display - histogramArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), showChro->get_active(), options.histogramDrawMode); + histogramArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showChro->get_active(), showRAW->get_active(), options.histogramDrawMode); histogramArea->queue_draw (); - histogramRGBArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), showBAR->get_active(), showChro->get_active()); + histogramRGBArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showChro->get_active(), showRAW->get_active(), showBAR->get_active()); histogramRGBArea->updateBackBuffer (0, 0, 0); - histogramArea->queue_draw (); + histogramRGBArea->queue_draw (); } void HistogramPanel::setHistRGBInvalid () @@ -369,8 +369,11 @@ double HistogramScaling::log(double vsize, double val) // // // HistogramRGBArea -HistogramRGBArea::HistogramRGBArea () ://needChroma unactive by default, luma too - val(0), r(0), g(0), b(0), valid(false), needRed(true), needGreen(true), needBlue(true), needLuma(false), rawMode(false), showMode(options.histogramBar), barDisplayed(options.histogramBar), needChroma(false), parent(nullptr) +HistogramRGBArea::HistogramRGBArea () : + val(0), r(0), g(0), b(0), valid(false), + needRed(options.histogramRed), needGreen(options.histogramGreen), needBlue(options.histogramBlue), + needLuma(options.histogramLuma), needChroma(options.histogramChroma), rawMode(options.histogramRAW), + showMode(options.histogramBar), barDisplayed(options.histogramBar), parent(nullptr) { get_style_context()->add_class("drawingarea"); @@ -583,28 +586,23 @@ void HistogramRGBArea::update (int valh, int rh, int gh, int bh) idle_register.add(func, harih); } -void HistogramRGBArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, bool bar, bool c) +void HistogramRGBArea::updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, bool bar) { - needRed = r; - needGreen = g; - needBlue = b; - needLuma = l; - rawMode = raw; - showMode = bar; - needChroma = c; - - // Histogram RGB BAR button logic goes here + options.histogramRed = needRed = r; + options.histogramGreen = needGreen = g; + options.histogramBlue = needBlue = b; + options.histogramLuma = needLuma = l; + options.histogramChroma = needChroma = c; + options.histogramRAW = rawMode = raw; + options.histogramBar = showMode = bar; + // Show/hide the RGB bar widget if (bar && !barDisplayed) { - // Toggled on, add (show) the widget parent->add(*this); - options.histogramBar = true; barDisplayed = true; } else if (!bar && barDisplayed) { - // Toggled off, remove (hide) the widget removeIfThere(parent, this, false); - options.histogramBar = false; barDisplayed = false; } @@ -661,16 +659,18 @@ void HistogramRGBArea::factorChanged (double newFactor) // // // HistogramArea -HistogramArea::HistogramArea (DrawModeListener *fml) : //needChroma unactive by default, luma too +HistogramArea::HistogramArea (DrawModeListener *fml) : valid(false), drawMode(options.histogramDrawMode), myDrawModeListener(fml), - oldwidth(-1), oldheight(-1), needLuma(false), needRed(true), needGreen(true), needBlue(true), - rawMode(false), needChroma(false), isPressed(false), movingPosition(0.0) + oldwidth(-1), oldheight(-1), + needRed(options.histogramRed), needGreen(options.histogramGreen), needBlue(options.histogramBlue), + needLuma(options.histogramLuma), needChroma(options.histogramChroma), rawMode(options.histogramRAW), + isPressed(false), movingPosition(0.0) { - lhist(256); rhist(256); ghist(256); bhist(256); + lhist(256); chist(256); get_style_context()->add_class("drawingarea"); @@ -724,32 +724,31 @@ void HistogramArea::get_preferred_width_for_height_vfunc (int height, int &minim get_preferred_width_vfunc (minimum_width, natural_width); } -void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, bool c, int mode) +void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, int mode) { - - needRed = r; - needGreen = g; - needBlue = b; - needLuma = l; - rawMode = raw; - needChroma = c; - drawMode = mode; + + options.histogramRed = needRed = r; + options.histogramGreen = needGreen = g; + options.histogramBlue = needBlue = b; + options.histogramLuma = needLuma = l; + options.histogramChroma = needChroma = c; + options.histogramRAW = rawMode = raw; + options.histogramDrawMode = drawMode = mode; updateBackBuffer (); } -void HistogramArea::update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw, LUTu &histChroma) +void HistogramArea::update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw) { if (histRed) { - lhist = histLuma; - chist = histChroma; rhist = histRed; ghist = histGreen; bhist = histBlue; + lhist = histLuma; + chist = histChroma; rhistRaw = histRedRaw; ghistRaw = histGreenRaw; bhistRaw = histBlueRaw; - valid = true; } else { valid = false; diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index d3788d057..7c2e11162 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -70,10 +70,10 @@ protected: bool needGreen; bool needBlue; bool needLuma; + bool needChroma; bool rawMode; bool showMode; bool barDisplayed; - bool needChroma; Gtk::Grid* parent; @@ -91,7 +91,7 @@ public: }; void update (int val, int rh, int gh, int bh); - void updateOptions (bool r, bool g, bool b, bool l, bool raw, bool show, bool c); + void updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, bool show); void on_realize(); bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr); @@ -104,7 +104,7 @@ private: void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const; void get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const; void get_preferred_width_for_height_vfunc (int h, int &minimum_width, int &natural_width) const; - // Some ... + }; class DrawModeListener @@ -124,15 +124,16 @@ private: type_signal_factor_changed sigFactorChanged; protected: - LUTu lhist, rhist, ghist, bhist, chist; - LUTu lhistRaw, rhistRaw, ghistRaw, bhistRaw; + LUTu rhist, ghist, bhist, lhist, chist; + LUTu rhistRaw, ghistRaw, bhistRaw, lhistRaw; //lhistRaw is unused? bool valid; int drawMode; DrawModeListener *myDrawModeListener; int oldwidth, oldheight; - bool needLuma, needRed, needGreen, needBlue, rawMode, needChroma; + bool needRed, needGreen, needBlue, needLuma, needChroma; + bool rawMode; bool isPressed; double movingPosition; @@ -143,8 +144,8 @@ public: ~HistogramArea(); void updateBackBuffer (); - void update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw, LUTu &histChroma); - void updateOptions (bool r, bool g, bool b, bool l, bool raw, bool c, int mode); + void update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw); + void updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, int mode); void on_realize(); bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr); bool on_button_press_event (GdkEventButton* event); @@ -208,9 +209,9 @@ public: HistogramPanel (); ~HistogramPanel (); - void histogramChanged (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw, LUTu &histChroma) + void histogramChanged (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw) { - histogramArea->update (histRed, histGreen, histBlue, histLuma, histRedRaw, histGreenRaw, histBlueRaw, histChroma); + histogramArea->update (histRed, histGreen, histBlue, histLuma, histChroma, histRedRaw, histGreenRaw, histBlueRaw); } // pointermotionlistener interface void pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw = false); diff --git a/rtgui/options.cc b/rtgui/options.cc index eb920a7d6..9c7e0baf9 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -417,6 +417,9 @@ void Options::setDefaults() mainNBVertical = true; multiDisplayMode = 0; histogramPosition = 1; + histogramRed = true; + histogramGreen = true; + histogramBlue = true; histogramBar = true; histogramHeight = 200; histogramDrawMode = 0; @@ -1305,6 +1308,30 @@ void Options::readFromFile(Glib::ustring fname) if (keyFile.has_key("GUI", "HistogramPosition")) { histogramPosition = keyFile.get_integer("GUI", "HistogramPosition"); } + + if (keyFile.has_key("GUI", "HistogramRed")) { + histogramRed = keyFile.get_boolean("GUI", "HistogramRed"); + } + + if (keyFile.has_key("GUI", "HistogramGreen")) { + histogramGreen = keyFile.get_boolean("GUI", "HistogramGreen"); + } + + if (keyFile.has_key("GUI", "HistogramBlue")) { + histogramBlue = keyFile.get_boolean("GUI", "HistogramBlue"); + } + + if (keyFile.has_key("GUI", "HistogramLuma")) { + histogramLuma = keyFile.get_boolean("GUI", "HistogramLuma"); + } + + if (keyFile.has_key("GUI", "HistogramChroma")) { + histogramChroma = keyFile.get_boolean("GUI", "HistogramChroma"); + } + + if (keyFile.has_key("GUI", "HistogramRAW")) { + histogramRAW = keyFile.get_boolean("GUI", "HistogramRAW"); + } if (keyFile.has_key("GUI", "HistogramBar")) { histogramBar = keyFile.get_boolean("GUI", "HistogramBar"); @@ -2035,6 +2062,12 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_double_list ("GUI", "CutOverlayBrush", cutOverlayBrush); keyFile.set_double_list ("GUI", "NavGuideBrush", navGuideBrush); keyFile.set_integer ("GUI", "HistogramPosition", histogramPosition); + keyFile.set_boolean ("GUI", "HistogramRed", histogramRed); + keyFile.set_boolean ("GUI", "HistogramGreen", histogramGreen); + keyFile.set_boolean ("GUI", "HistogramBlue", histogramBlue); + keyFile.set_boolean ("GUI", "HistogramLuma", histogramLuma); + keyFile.set_boolean ("GUI", "HistogramChroma", histogramChroma); + keyFile.set_boolean ("GUI", "HistogramRAW", histogramRAW); keyFile.set_boolean ("GUI", "HistogramBar", histogramBar); keyFile.set_integer ("GUI", "HistogramHeight", histogramHeight); keyFile.set_integer ("GUI", "HistogramDrawMode", histogramDrawMode); diff --git a/rtgui/options.h b/rtgui/options.h index 93f29b7ac..149fa2135 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -254,7 +254,8 @@ public: bool sndEnable; int histogramPosition; // 0=disabled, 1=left pane, 2=right pane - //int histogramWorking; // 0=disabled, 1=left pane, 2=right pane + bool histogramRed, histogramGreen, histogramBlue; + bool histogramLuma, histogramChroma, histogramRAW; bool histogramBar; int histogramHeight; int histogramDrawMode; From 59ca037fd75ab97a6127b7d528004661e915d970 Mon Sep 17 00:00:00 2001 From: Thanatomanic <6567747+Thanatomanic@users.noreply.github.com> Date: Sun, 2 Sep 2018 16:58:20 +0200 Subject: [PATCH 068/115] Disable highlight recovery threshold when highlight recovery = 0 and set threshold default to 0 --- rtengine/improcfun.cc | 2 +- rtengine/procparams.cc | 2 +- rtgui/tonecurve.cc | 14 +++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 945eaf29f..7d9d080e2 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -5466,7 +5466,7 @@ void ImProcFunctions::getAutoExp (const LUTu &histogram, int histcompr, double //now tune hlcompr to bring back rawmax to 65535 - hlcomprthresh = 33; + hlcomprthresh = 0; //this is a series approximation of the actual formula for comp, //which is a transcendental equation float comp = (gain * ((float)whiteclip) / scale - 1.f) * 2.3f; // 2.3 instead of 2 to increase slightly comp diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index e7225e993..90c472290 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -330,7 +330,7 @@ ToneCurveParams::ToneCurveParams() : saturation(0), shcompr(50), hlcompr(0), - hlcomprthresh(33), + hlcomprthresh(0), histmatching(false), fromHistMatching(false), clampOOG(true) diff --git a/rtgui/tonecurve.cc b/rtgui/tonecurve.cc index 30c9dadee..1354dd81b 100644 --- a/rtgui/tonecurve.cc +++ b/rtgui/tonecurve.cc @@ -111,7 +111,7 @@ ToneCurve::ToneCurve () : FoldableToolPanel(this, "tonecurve", M("TP_EXPOSURE_LA //----------- Highlight recovery & threshold ------------- hlcompr = Gtk::manage (new Adjuster (M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 0)); pack_start (*hlcompr); - hlcomprthresh = Gtk::manage (new Adjuster (M("TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD"), 0, 100, 1, 33)); + hlcomprthresh = Gtk::manage (new Adjuster (M("TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD"), 0, 100, 1, 0)); pack_start (*hlcomprthresh); //----------- Black Level & Compression ------------------- @@ -232,6 +232,10 @@ void ToneCurve::read (const ProcParams* pp, const ParamsEdited* pedited) if (!black->getAddMode()) { shcompr->set_sensitive(!((int)black->getValue () == 0)); //at black=0 shcompr value has no effect } + + if (!hlcompr->getAddMode()) { + hlcomprthresh->set_sensitive(!((int)hlcompr->getValue () == 0)); //at hlcompr=0 hlcomprthresh value has no effect + } brightness->setValue (pp->toneCurve.brightness); contrast->setValue (pp->toneCurve.contrast); @@ -620,6 +624,10 @@ void ToneCurve::adjusterChanged (Adjuster* a, double newval) listener->panelChanged (EvSaturation, costr); } else if (a == hlcompr) { listener->panelChanged (EvHLCompr, costr); + + if (!hlcompr->getAddMode()) { + hlcomprthresh->set_sensitive(!((int)hlcompr->getValue () == 0)); //at hlcompr=0 hlcomprthresh value has no effect + } } else if (a == hlcomprthresh) { listener->panelChanged (EvHLComprThreshold, costr); } else if (a == shcompr) { @@ -663,6 +671,10 @@ void ToneCurve::neutral_pressed () if (!black->getAddMode()) { shcompr->set_sensitive(!((int)black->getValue () == 0)); //at black=0 shcompr value has no effect } + + if (!hlcompr->getAddMode()) { + hlcomprthresh->set_sensitive(!((int)hlcompr->getValue () == 0)); //at hlcompr=0 hlcomprthresh value has no effect + } contrast->setValue(0); //saturation->setValue(0); From 30b36e63712f651c0f3ada6e233f8fed8352602f Mon Sep 17 00:00:00 2001 From: Thanatomanic <6567747+Thanatomanic@users.noreply.github.com> Date: Sun, 2 Sep 2018 17:04:17 +0200 Subject: [PATCH 069/115] Revert "Modifications to store histogram settings across sessions" This reverts commit f59e7c31e4cce25c0d26c913dba64cdd85b1420d. --- rtgui/editorpanel.cc | 2 +- rtgui/histogrampanel.cc | 85 +++++++++++++++++++++-------------------- rtgui/histogrampanel.h | 21 +++++----- rtgui/options.cc | 33 ---------------- rtgui/options.h | 3 +- 5 files changed, 55 insertions(+), 89 deletions(-) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 3f0909d88..c99ed2dbd 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -2242,7 +2242,7 @@ void EditorPanel::histogramChanged (LUTu & histRed, LUTu & histGreen, LUTu & his { if (histogramPanel) { - histogramPanel->histogramChanged (histRed, histGreen, histBlue, histLuma, histChroma, histRedRaw, histGreenRaw, histBlueRaw); + histogramPanel->histogramChanged (histRed, histGreen, histBlue, histLuma, histRedRaw, histGreenRaw, histBlueRaw, histChroma); } tpc->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve,/*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 5293c6c00..1d8ce89db 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -129,14 +129,14 @@ HistogramPanel::HistogramPanel () buttonGrid = Gtk::manage (new Gtk::Grid ()); buttonGrid->set_orientation(Gtk::ORIENTATION_VERTICAL); - showRed->set_active (options.histogramRed); - showGreen->set_active (options.histogramGreen); - showBlue->set_active (options.histogramBlue); - showValue->set_active (options.histogramLuma); - showChro->set_active (options.histogramChroma); - showRAW->set_active (options.histogramRAW); + showRed->set_active (true); + showGreen->set_active (true); + showBlue->set_active (true); + showValue->set_active (false);//unactive by default + showChro->set_active (false);//unactive by default + showRAW->set_active (false); // no showMode->set_active(), as it's not a ToggleButton - showBAR->set_active (options.histogramBar); + showBAR->set_active (options.histogramBar); showRed->set_image (showRed->get_active() ? *redImage : *redImage_g); showGreen->set_image (showGreen->get_active() ? *greenImage : *greenImage_g); @@ -297,12 +297,12 @@ void HistogramPanel::bar_toggled () void HistogramPanel::rgbv_toggled () { // Update Display - histogramArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showChro->get_active(), showRAW->get_active(), options.histogramDrawMode); + histogramArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), showChro->get_active(), options.histogramDrawMode); histogramArea->queue_draw (); - histogramRGBArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showChro->get_active(), showRAW->get_active(), showBAR->get_active()); + histogramRGBArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), showBAR->get_active(), showChro->get_active()); histogramRGBArea->updateBackBuffer (0, 0, 0); - histogramRGBArea->queue_draw (); + histogramArea->queue_draw (); } void HistogramPanel::setHistRGBInvalid () @@ -369,11 +369,8 @@ double HistogramScaling::log(double vsize, double val) // // // HistogramRGBArea -HistogramRGBArea::HistogramRGBArea () : - val(0), r(0), g(0), b(0), valid(false), - needRed(options.histogramRed), needGreen(options.histogramGreen), needBlue(options.histogramBlue), - needLuma(options.histogramLuma), needChroma(options.histogramChroma), rawMode(options.histogramRAW), - showMode(options.histogramBar), barDisplayed(options.histogramBar), parent(nullptr) +HistogramRGBArea::HistogramRGBArea () ://needChroma unactive by default, luma too + val(0), r(0), g(0), b(0), valid(false), needRed(true), needGreen(true), needBlue(true), needLuma(false), rawMode(false), showMode(options.histogramBar), barDisplayed(options.histogramBar), needChroma(false), parent(nullptr) { get_style_context()->add_class("drawingarea"); @@ -586,23 +583,28 @@ void HistogramRGBArea::update (int valh, int rh, int gh, int bh) idle_register.add(func, harih); } -void HistogramRGBArea::updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, bool bar) +void HistogramRGBArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, bool bar, bool c) { - options.histogramRed = needRed = r; - options.histogramGreen = needGreen = g; - options.histogramBlue = needBlue = b; - options.histogramLuma = needLuma = l; - options.histogramChroma = needChroma = c; - options.histogramRAW = rawMode = raw; - options.histogramBar = showMode = bar; + needRed = r; + needGreen = g; + needBlue = b; + needLuma = l; + rawMode = raw; + showMode = bar; + needChroma = c; + + // Histogram RGB BAR button logic goes here - // Show/hide the RGB bar widget if (bar && !barDisplayed) { + // Toggled on, add (show) the widget parent->add(*this); + options.histogramBar = true; barDisplayed = true; } else if (!bar && barDisplayed) { + // Toggled off, remove (hide) the widget removeIfThere(parent, this, false); + options.histogramBar = false; barDisplayed = false; } @@ -659,18 +661,16 @@ void HistogramRGBArea::factorChanged (double newFactor) // // // HistogramArea -HistogramArea::HistogramArea (DrawModeListener *fml) : +HistogramArea::HistogramArea (DrawModeListener *fml) : //needChroma unactive by default, luma too valid(false), drawMode(options.histogramDrawMode), myDrawModeListener(fml), - oldwidth(-1), oldheight(-1), - needRed(options.histogramRed), needGreen(options.histogramGreen), needBlue(options.histogramBlue), - needLuma(options.histogramLuma), needChroma(options.histogramChroma), rawMode(options.histogramRAW), - isPressed(false), movingPosition(0.0) + oldwidth(-1), oldheight(-1), needLuma(false), needRed(true), needGreen(true), needBlue(true), + rawMode(false), needChroma(false), isPressed(false), movingPosition(0.0) { + lhist(256); rhist(256); ghist(256); bhist(256); - lhist(256); chist(256); get_style_context()->add_class("drawingarea"); @@ -724,31 +724,32 @@ void HistogramArea::get_preferred_width_for_height_vfunc (int height, int &minim get_preferred_width_vfunc (minimum_width, natural_width); } -void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, int mode) +void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, bool c, int mode) { - - options.histogramRed = needRed = r; - options.histogramGreen = needGreen = g; - options.histogramBlue = needBlue = b; - options.histogramLuma = needLuma = l; - options.histogramChroma = needChroma = c; - options.histogramRAW = rawMode = raw; - options.histogramDrawMode = drawMode = mode; + + needRed = r; + needGreen = g; + needBlue = b; + needLuma = l; + rawMode = raw; + needChroma = c; + drawMode = mode; updateBackBuffer (); } -void HistogramArea::update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw) +void HistogramArea::update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw, LUTu &histChroma) { if (histRed) { + lhist = histLuma; + chist = histChroma; rhist = histRed; ghist = histGreen; bhist = histBlue; - lhist = histLuma; - chist = histChroma; rhistRaw = histRedRaw; ghistRaw = histGreenRaw; bhistRaw = histBlueRaw; + valid = true; } else { valid = false; diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index 7c2e11162..d3788d057 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -70,10 +70,10 @@ protected: bool needGreen; bool needBlue; bool needLuma; - bool needChroma; bool rawMode; bool showMode; bool barDisplayed; + bool needChroma; Gtk::Grid* parent; @@ -91,7 +91,7 @@ public: }; void update (int val, int rh, int gh, int bh); - void updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, bool show); + void updateOptions (bool r, bool g, bool b, bool l, bool raw, bool show, bool c); void on_realize(); bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr); @@ -104,7 +104,7 @@ private: void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const; void get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const; void get_preferred_width_for_height_vfunc (int h, int &minimum_width, int &natural_width) const; - + // Some ... }; class DrawModeListener @@ -124,16 +124,15 @@ private: type_signal_factor_changed sigFactorChanged; protected: - LUTu rhist, ghist, bhist, lhist, chist; - LUTu rhistRaw, ghistRaw, bhistRaw, lhistRaw; //lhistRaw is unused? + LUTu lhist, rhist, ghist, bhist, chist; + LUTu lhistRaw, rhistRaw, ghistRaw, bhistRaw; bool valid; int drawMode; DrawModeListener *myDrawModeListener; int oldwidth, oldheight; - bool needRed, needGreen, needBlue, needLuma, needChroma; - bool rawMode; + bool needLuma, needRed, needGreen, needBlue, rawMode, needChroma; bool isPressed; double movingPosition; @@ -144,8 +143,8 @@ public: ~HistogramArea(); void updateBackBuffer (); - void update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw); - void updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, int mode); + void update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw, LUTu &histChroma); + void updateOptions (bool r, bool g, bool b, bool l, bool raw, bool c, int mode); void on_realize(); bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr); bool on_button_press_event (GdkEventButton* event); @@ -209,9 +208,9 @@ public: HistogramPanel (); ~HistogramPanel (); - void histogramChanged (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw) + void histogramChanged (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw, LUTu &histChroma) { - histogramArea->update (histRed, histGreen, histBlue, histLuma, histChroma, histRedRaw, histGreenRaw, histBlueRaw); + histogramArea->update (histRed, histGreen, histBlue, histLuma, histRedRaw, histGreenRaw, histBlueRaw, histChroma); } // pointermotionlistener interface void pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw = false); diff --git a/rtgui/options.cc b/rtgui/options.cc index 8107b43f0..0190b7d40 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -419,9 +419,6 @@ void Options::setDefaults() mainNBVertical = true; multiDisplayMode = 0; histogramPosition = 1; - histogramRed = true; - histogramGreen = true; - histogramBlue = true; histogramBar = true; histogramHeight = 200; histogramDrawMode = 0; @@ -1318,30 +1315,6 @@ void Options::readFromFile(Glib::ustring fname) if (keyFile.has_key("GUI", "HistogramPosition")) { histogramPosition = keyFile.get_integer("GUI", "HistogramPosition"); } - - if (keyFile.has_key("GUI", "HistogramRed")) { - histogramRed = keyFile.get_boolean("GUI", "HistogramRed"); - } - - if (keyFile.has_key("GUI", "HistogramGreen")) { - histogramGreen = keyFile.get_boolean("GUI", "HistogramGreen"); - } - - if (keyFile.has_key("GUI", "HistogramBlue")) { - histogramBlue = keyFile.get_boolean("GUI", "HistogramBlue"); - } - - if (keyFile.has_key("GUI", "HistogramLuma")) { - histogramLuma = keyFile.get_boolean("GUI", "HistogramLuma"); - } - - if (keyFile.has_key("GUI", "HistogramChroma")) { - histogramChroma = keyFile.get_boolean("GUI", "HistogramChroma"); - } - - if (keyFile.has_key("GUI", "HistogramRAW")) { - histogramRAW = keyFile.get_boolean("GUI", "HistogramRAW"); - } if (keyFile.has_key("GUI", "HistogramBar")) { histogramBar = keyFile.get_boolean("GUI", "HistogramBar"); @@ -2074,12 +2047,6 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_double_list ("GUI", "CutOverlayBrush", cutOverlayBrush); keyFile.set_double_list ("GUI", "NavGuideBrush", navGuideBrush); keyFile.set_integer ("GUI", "HistogramPosition", histogramPosition); - keyFile.set_boolean ("GUI", "HistogramRed", histogramRed); - keyFile.set_boolean ("GUI", "HistogramGreen", histogramGreen); - keyFile.set_boolean ("GUI", "HistogramBlue", histogramBlue); - keyFile.set_boolean ("GUI", "HistogramLuma", histogramLuma); - keyFile.set_boolean ("GUI", "HistogramChroma", histogramChroma); - keyFile.set_boolean ("GUI", "HistogramRAW", histogramRAW); keyFile.set_boolean ("GUI", "HistogramBar", histogramBar); keyFile.set_integer ("GUI", "HistogramHeight", histogramHeight); keyFile.set_integer ("GUI", "HistogramDrawMode", histogramDrawMode); diff --git a/rtgui/options.h b/rtgui/options.h index 6c473949b..ee95d5cb3 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -256,8 +256,7 @@ public: bool sndEnable; int histogramPosition; // 0=disabled, 1=left pane, 2=right pane - bool histogramRed, histogramGreen, histogramBlue; - bool histogramLuma, histogramChroma, histogramRAW; + //int histogramWorking; // 0=disabled, 1=left pane, 2=right pane bool histogramBar; int histogramHeight; int histogramDrawMode; From a7b7f20b837a49d1496a636e3da6f24e32e75a70 Mon Sep 17 00:00:00 2001 From: Roel Baars <6567747+Thanatomanic@users.noreply.github.com> Date: Sun, 2 Sep 2018 17:53:52 +0200 Subject: [PATCH 070/115] Fix for #4743: flashing background --- rtgui/cropwindow.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index db5b5ca91..69d7a98b4 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -1377,7 +1377,7 @@ void CropWindow::expose (Cairo::RefPtr cr) break; } } - bool useBgColor = (state == SNormal || state == SDragPicker || state == SDeletePicker); + bool useBgColor = (state == SNormal || state == SDragPicker || state == SDeletePicker || state == SEditDrag1); if (cropHandler.cropPixbuf) { imgW = cropHandler.cropPixbuf->get_width (); From 7b0a9c01c5832d74a1e7d2b4bf1bd44ca7ddb36f Mon Sep 17 00:00:00 2001 From: Thanatomanic <6567747+Thanatomanic@users.noreply.github.com> Date: Sun, 2 Sep 2018 20:40:11 +0200 Subject: [PATCH 071/115] Fix for usability of highlight threshold slider and shadow compression in batch mode --- rtgui/tonecurve.cc | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/rtgui/tonecurve.cc b/rtgui/tonecurve.cc index 1354dd81b..5205d6f18 100644 --- a/rtgui/tonecurve.cc +++ b/rtgui/tonecurve.cc @@ -229,11 +229,11 @@ void ToneCurve::read (const ProcParams* pp, const ParamsEdited* pedited) hlcomprthresh->setValue (pp->toneCurve.hlcomprthresh); shcompr->setValue (pp->toneCurve.shcompr); - if (!black->getAddMode()) { + if (!black->getAddMode() && !batchMode) { shcompr->set_sensitive(!((int)black->getValue () == 0)); //at black=0 shcompr value has no effect } - if (!hlcompr->getAddMode()) { + if (!hlcompr->getAddMode() && !batchMode) { hlcomprthresh->set_sensitive(!((int)hlcompr->getValue () == 0)); //at hlcompr=0 hlcomprthresh value has no effect } @@ -615,7 +615,7 @@ void ToneCurve::adjusterChanged (Adjuster* a, double newval) } else if (a == black) { listener->panelChanged (EvBlack, costr); - if (!black->getAddMode()) { + if (!black->getAddMode() && !batchMode) { shcompr->set_sensitive(!((int)black->getValue () == 0)); //at black=0 shcompr value has no effect } } else if (a == contrast) { @@ -625,7 +625,7 @@ void ToneCurve::adjusterChanged (Adjuster* a, double newval) } else if (a == hlcompr) { listener->panelChanged (EvHLCompr, costr); - if (!hlcompr->getAddMode()) { + if (!hlcompr->getAddMode() && !batchMode) { hlcomprthresh->set_sensitive(!((int)hlcompr->getValue () == 0)); //at hlcompr=0 hlcomprthresh value has no effect } } else if (a == hlcomprthresh) { @@ -668,11 +668,11 @@ void ToneCurve::neutral_pressed () hlrbox->hide(); } - if (!black->getAddMode()) { + if (!black->getAddMode() && !batchMode) { shcompr->set_sensitive(!((int)black->getValue () == 0)); //at black=0 shcompr value has no effect } - if (!hlcompr->getAddMode()) { + if (!hlcompr->getAddMode() && !batchMode) { hlcomprthresh->set_sensitive(!((int)hlcompr->getValue () == 0)); //at hlcompr=0 hlcomprthresh value has no effect } @@ -745,6 +745,11 @@ void ToneCurve::autolevels_toggled () if (!black->getAddMode()) { shcompr->set_sensitive(!((int)black->getValue () == 0)); //at black=0 shcompr value has no effect } + + if (!hlcompr->getAddMode() && !batchMode) { + hlcomprthresh->set_sensitive(!((int)hlcompr->getValue () == 0)); //at hlcompr=0 hlcomprthresh value has no effect + } + } else { listener->panelChanged (EvFixedExp, M("GENERAL_DISABLED")); } @@ -859,9 +864,13 @@ bool ToneCurve::autoExpComputed_ () hlrbox->hide(); } - if (!black->getAddMode()) { + if (!black->getAddMode() && !batchMode) { shcompr->set_sensitive(!((int)black->getValue () == 0)); //at black=0 shcompr value has no effect } + + if (!hlcompr->getAddMode() && !batchMode) { + hlcomprthresh->set_sensitive(!((int)hlcompr->getValue () == 0)); //at hlcompr=0 hlcomprthresh value has no effect + } enableListener (); @@ -983,9 +992,13 @@ bool ToneCurve::histmatchingComputed() contrast->setValue(0); black->setValue(0); - if (!black->getAddMode()) { + if (!black->getAddMode() && !batchMode) { shcompr->set_sensitive(!((int)black->getValue() == 0)); } + + if (!hlcompr->getAddMode() && !batchMode) { + hlcomprthresh->set_sensitive(!((int)hlcompr->getValue () == 0)); //at hlcompr=0 hlcomprthresh value has no effect + } if (autolevels->get_active() ) { expcomp->setValue(0); From 758299aa2c7c6fd5acd67124fb4e93efdb111b2e Mon Sep 17 00:00:00 2001 From: Hombre Date: Mon, 3 Sep 2018 00:18:03 +0200 Subject: [PATCH 072/115] Support of GDK_SCROLL_SMOOTH sent by some devices. See #4035. --- rtgui/guiutils.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index f957a90a0..27e385b23 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -1026,6 +1026,27 @@ bool MyScrolledToolbar::on_scroll_event (GdkEventScroll* event) if (value2 != value) { scroll->set_value(value2); } + } else if (event->direction == GDK_SCROLL_SMOOTH) { + step = 0.; + if (event->delta_x) { // if the user use a pad, it can scroll horizontally + step = event->delta_x; + } else if (event->delta_y) { + step = event->delta_y; + } + + if (step != 0.) { + value2 = value + step /* * 2 */; // we could use a multiplicator here + + if (value2 < lower) { + value2 = lower; + } else if (value2 > upper) { + value2 = upper; + } + + if (value2 != value) { + scroll->set_value(value2); + } + } } } From b226c125ce833ce41d0a8fa6fad062e695594506 Mon Sep 17 00:00:00 2001 From: Hombre Date: Mon, 3 Sep 2018 23:19:37 +0200 Subject: [PATCH 073/115] Scrollable toolbars has been named, and 'scrollableToolbar' class added see #4035 --- rtgui/editorpanel.cc | 2 ++ rtgui/filecatalog.cc | 3 +++ rtgui/guiutils.cc | 1 + 3 files changed, 6 insertions(+) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index ff57ecace..7f7dfd148 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -631,6 +631,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) beforeAfterBox->pack_start (*afterBox); MyScrolledToolbar *stb1 = Gtk::manage(new MyScrolledToolbar()); + stb1->set_name("EditorToolbarTop"); stb1->add(*toolBarPanel); editbox->pack_start (*stb1, Gtk::PACK_SHRINK, 2); editbox->pack_start (*beforeAfterBox); @@ -766,6 +767,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) iops->attach_next_to (*tbRightPanel_1, Gtk::POS_RIGHT, 1, 1); MyScrolledToolbar *stb2 = Gtk::manage(new MyScrolledToolbar()); + stb2->set_name("EditorToolbarBottom"); stb2->add(*iops); editbox->pack_start (*stb2, Gtk::PACK_SHRINK, 0); diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index ae332754f..ae471dea5 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -129,6 +129,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : // if NOT a single row toolbar if (!options.FileBrowserToolbarSingleRow) { hbToolBar1STB = Gtk::manage(new MyScrolledToolbar()); + hbToolBar1STB->set_name("FileBrowserQueryToolbar"); hbToolBar1STB->add(*hbToolBar1); pack_start (*hbToolBar1STB, Gtk::PACK_SHRINK, 0); } @@ -137,6 +138,7 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : buttonBar = Gtk::manage( new Gtk::HBox () ); buttonBar->set_name ("ToolBarPanelFileBrowser"); MyScrolledToolbar *stb = Gtk::manage(new MyScrolledToolbar()); + stb->set_name("FileBrowserIconToolbar"); stb->add(*buttonBar); pack_start (*stb, Gtk::PACK_SHRINK); @@ -2057,6 +2059,7 @@ void FileCatalog::updateFBQueryTB (bool singleRow) if (!hbToolBar1STB) { removeIfThere(buttonBar, hbToolBar1, false); hbToolBar1STB = Gtk::manage(new MyScrolledToolbar()); + hbToolBar1STB->set_name("FileBrowserQueryToolbar"); hbToolBar1STB->add(*hbToolBar1); hbToolBar1STB->show(); pack_start (*hbToolBar1STB, Gtk::PACK_SHRINK, 0); diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 27e385b23..76484ceba 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -992,6 +992,7 @@ MyScrolledToolbar::MyScrolledToolbar () { set_policy (Gtk::POLICY_EXTERNAL, Gtk::POLICY_NEVER); set_propagate_natural_height(true); + get_style_context()->add_class("scrollableToolbar"); } bool MyScrolledToolbar::on_scroll_event (GdkEventScroll* event) From 3643e151554f173ae28e9661370756db5f2d6b2b Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 4 Sep 2018 13:29:26 +0200 Subject: [PATCH 074/115] DJI FC2103 black level --- rtengine/camconst.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rtengine/camconst.json b/rtengine/camconst.json index b3758a326..fd7b4bf0f 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -1213,6 +1213,13 @@ Camera constants: "ranges": { "white": 4050 } // nominal 4080-4093 }, + { // Quality C + "make_model": [ "DJI FC2103" ], + "ranges": { + "black": 4080 + } + }, + { // Quality B "make_model": "FUJIFILM GFX 50S", "dcraw_matrix": [ 11756,-4754,-874,-3056,11045,2305,-381,1457,6006 ], // DNGv9.9 D65 From 98fc85b68d4fd637ae5ceeb8c88e2d70c92ce318 Mon Sep 17 00:00:00 2001 From: Hombre Date: Tue, 4 Sep 2018 23:06:17 +0200 Subject: [PATCH 075/115] Revert GDK_SCROLL_SMOOTH scrolling of Toolbars to a fixed step also remove GUI space in "FileBrowser" widget see #4035 --- rtgui/filecatalog.cc | 1 - rtgui/guiutils.cc | 34 ++++++---------------------------- 2 files changed, 6 insertions(+), 29 deletions(-) diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index ae471dea5..2271c05c7 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -62,7 +62,6 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) : inTabMode = false; set_name ("FileBrowser"); - set_spacing (2); // construct and initialize thumbnail browsers fileBrowser = Gtk::manage( new FileBrowser() ); diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 76484ceba..447c9d8af 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -1008,45 +1008,23 @@ bool MyScrolledToolbar::on_scroll_event (GdkEventScroll* event) double value2 = 0.; if (event->direction == GDK_SCROLL_DOWN) { - value2 = value + step; - - if (value2 > upper) { - value2 = upper; - } - + value2 = rtengine::min(value + step, upper); if (value2 != value) { scroll->set_value(value2); } } else if (event->direction == GDK_SCROLL_UP) { - value2 = value - step; - - if (value2 < lower) { - value2 = lower; - } - + value2 = rtengine::max(value - step, lower); if (value2 != value) { scroll->set_value(value2); } } else if (event->direction == GDK_SCROLL_SMOOTH) { - step = 0.; if (event->delta_x) { // if the user use a pad, it can scroll horizontally - step = event->delta_x; + value2 = rtengine::LIM(value + (event->delta_x > 0 ? 30 : -30), lower, upper); } else if (event->delta_y) { - step = event->delta_y; + value2 = rtengine::LIM(value + (event->delta_y > 0 ? 30 : -30), lower, upper); } - - if (step != 0.) { - value2 = value + step /* * 2 */; // we could use a multiplicator here - - if (value2 < lower) { - value2 = lower; - } else if (value2 > upper) { - value2 = upper; - } - - if (value2 != value) { - scroll->set_value(value2); - } + if (value2 != value) { + scroll->set_value(value2); } } } From 157ee86bfaed30eca3ed605b1bb223dfd130187e Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Wed, 5 Sep 2018 10:50:31 +0200 Subject: [PATCH 076/115] Initial Preferences window height set to 600px PR #4716 --- rtgui/options.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/options.cc b/rtgui/options.cc index dcba775b6..205dae821 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -331,7 +331,7 @@ void Options::setDefaults() dirBrowserHeight = 350; dirBrowserSortType = Gtk::SORT_ASCENDING; preferencesWidth = 800; - preferencesHeight = 0; + preferencesHeight = 600; toolPanelWidth = 400; browserToolPanelWidth = 465; browserToolPanelHeight = 600; From 6f6cdd113d4e54f4d5ea11861dda8f711e8e7fb2 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 5 Sep 2018 11:44:46 +0200 Subject: [PATCH 077/115] Increase range of raw ca correction adusters, #4774 --- rtgui/rawcacorrection.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 7e263a19a..2f3c54522 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -33,7 +33,7 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM caAutocorrect = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AUTO"), multiImage)); caAutocorrect->setCheckBoxListener (this); - caRed = Gtk::manage(new Adjuster (M("TP_RAWCACORR_CARED"), -4.0, 4.0, 0.1, 0, icaredL, icaredR)); + caRed = Gtk::manage(new Adjuster (M("TP_RAWCACORR_CARED"), -8.0, 8.0, 0.1, 0, icaredL, icaredR)); caRed->setAdjusterListener (this); if (caRed->delay < options.adjusterMaxDelay) { @@ -41,7 +41,7 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM } caRed->show(); - caBlue = Gtk::manage(new Adjuster (M("TP_RAWCACORR_CABLUE"), -4.0, 4.0, 0.1, 0, icablueL, icablueR)); + caBlue = Gtk::manage(new Adjuster (M("TP_RAWCACORR_CABLUE"), -8.0, 8.0, 0.1, 0, icablueL, icablueR)); caBlue->setAdjusterListener (this); if (caBlue->delay < options.adjusterMaxDelay) { From 9ecc7e687659b86941c817a1f46c09b39dfbffa0 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 5 Sep 2018 13:30:15 +0200 Subject: [PATCH 078/115] iterative raw auto ca correction, #4774 --- rtdata/languages/default | 2 + rtengine/CA_correct_RT.cc | 1903 ++++++++++++++++++------------------ rtengine/procparams.cc | 4 + rtengine/procparams.h | 1 + rtengine/rawimagesource.cc | 8 +- rtengine/rawimagesource.h | 2 +- rtgui/paramsedited.cc | 8 +- rtgui/paramsedited.h | 1 + rtgui/partialpastedlg.cc | 1 + rtgui/rawcacorrection.cc | 27 +- rtgui/rawcacorrection.h | 3 + 11 files changed, 1002 insertions(+), 958 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index b1fafc48e..05498985f 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -748,6 +748,7 @@ HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold HISTORY_MSG_RAW_BORDER;Raw border +HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1780,6 +1781,7 @@ TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by o TP_PRSHARPENING_LABEL;Post-Resize Sharpening TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. TP_RAWCACORR_AUTO;Auto-correction +TP_RAWCACORR_AUTOIT;Iterations TP_RAWCACORR_CABLUE;Blue TP_RAWCACORR_CARED;Red TP_RAWCACORR_CASTR;Strength diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index a2f34584f..35e36ce05 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -111,7 +111,7 @@ bool LinEqSolve(int nDim, double* pfMatr, double* pfVect, double* pfSolution) using namespace std; using namespace rtengine; -float* RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer, bool fitParamsIn, bool fitParamsOut, float *buffer, bool freeBuffer) +float* RawImageSource::CA_correct_RT(const bool autoCA, const size_t autoIterations, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer, bool fitParamsIn, bool fitParamsOut, float *buffer, bool freeBuffer) { // multithreaded and vectorized by Ingo Weyrich constexpr int ts = 128; @@ -155,1038 +155,1039 @@ float* RawImageSource::CA_correct_RT(const bool autoCA, const double cared, cons memset(blockwt, 0, vblsz * hblsz * (2 * 2 + 1) * sizeof(float)); float (*blockshifts)[2][2] = (float (*)[2][2])(blockwt + vblsz * hblsz); - float blockave[2][2] = {{0, 0}, {0, 0}}, blocksqave[2][2] = {{0, 0}, {0, 0}}, blockdenom[2][2] = {{0, 0}, {0, 0}}, blockvar[2][2]; - // Because we can't break parallel processing, we need a switch do handle the errors bool processpasstwo = true; - double fitparams[2][2][16]; - const bool fitParamsSet = fitParamsTransfer && fitParamsIn; - if(autoCA && fitParamsSet) { - // use stored parameters - int index = 0; - for(int c = 0; c < 2; ++c) { - for(int d = 0; d < 2; ++d) { - for(int e = 0; e < 16; ++e) { - fitparams[c][d][e] = fitParamsTransfer[index++]; + + const size_t iterations = autoCA ? std::max(autoIterations, static_cast(1)) : 1; + for (size_t it = 0; it < iterations && processpasstwo; ++it) { + float blockave[2][2] = {{0, 0}, {0, 0}}, blocksqave[2][2] = {{0, 0}, {0, 0}}, blockdenom[2][2] = {{0, 0}, {0, 0}}, blockvar[2][2]; + const bool fitParamsSet = fitParamsTransfer && fitParamsIn; + if(autoCA && fitParamsSet && iterations < 2) { + // use stored parameters + int index = 0; + for(int c = 0; c < 2; ++c) { + for(int d = 0; d < 2; ++d) { + for(int e = 0; e < 16; ++e) { + fitparams[c][d][e] = fitParamsTransfer[index++]; + } } } } - } - //order of 2d polynomial fit (polyord), and numpar=polyord^2 - int polyord = 4, numpar = 16; + //order of 2d polynomial fit (polyord), and numpar=polyord^2 + int polyord = 4, numpar = 16; - constexpr float eps = 1e-5f, eps2 = 1e-10f; //tolerance to avoid dividing by zero + constexpr float eps = 1e-5f, eps2 = 1e-10f; //tolerance to avoid dividing by zero - #pragma omp parallel - { - int progresscounter = 0; + #pragma omp parallel + { + int progresscounter = 0; - //direction of the CA shift in a tile - int GRBdir[2][3]; + //direction of the CA shift in a tile + int GRBdir[2][3]; - int shifthfloor[3], shiftvfloor[3], shifthceil[3], shiftvceil[3]; + int shifthfloor[3], shiftvfloor[3], shifthceil[3], shiftvceil[3]; - //polynomial fit coefficients - //residual CA shift amount within a plaquette - float shifthfrac[3], shiftvfrac[3]; + //polynomial fit coefficients + //residual CA shift amount within a plaquette + float shifthfrac[3], shiftvfrac[3]; - // assign working space - constexpr int buffersize = sizeof(float) * ts * ts + 8 * sizeof(float) * ts * tsh + 8 * 64 + 63; - constexpr int buffersizePassTwo = sizeof(float) * ts * ts + 4 * sizeof(float) * ts * tsh + 4 * 64 + 63; - char * const bufferThr = (char *) malloc((autoCA && !fitParamsSet) ? buffersize : buffersizePassTwo); + // assign working space + constexpr int buffersize = sizeof(float) * ts * ts + 8 * sizeof(float) * ts * tsh + 8 * 64 + 63; + constexpr int buffersizePassTwo = sizeof(float) * ts * ts + 4 * sizeof(float) * ts * tsh + 4 * 64 + 63; + char * const bufferThr = (char *) malloc((autoCA && !fitParamsSet) ? buffersize : buffersizePassTwo); - char * const data = (char*)( ( uintptr_t(bufferThr) + uintptr_t(63)) / 64 * 64); + char * const data = (char*)( ( uintptr_t(bufferThr) + uintptr_t(63)) / 64 * 64); - // shift the beginning of all arrays but the first by 64 bytes to avoid cache miss conflicts on CPUs which have <= 4-way associative L1-Cache + // shift the beginning of all arrays but the first by 64 bytes to avoid cache miss conflicts on CPUs which have <= 4-way associative L1-Cache - //rgb data in a tile - float* rgb[3]; - rgb[0] = (float (*)) data; - rgb[1] = (float (*)) (data + sizeof(float) * ts * tsh + 1 * 64); - rgb[2] = (float (*)) (data + sizeof(float) * (ts * ts + ts * tsh) + 2 * 64); + //rgb data in a tile + float* rgb[3]; + rgb[0] = (float (*)) data; + rgb[1] = (float (*)) (data + sizeof(float) * ts * tsh + 1 * 64); + rgb[2] = (float (*)) (data + sizeof(float) * (ts * ts + ts * tsh) + 2 * 64); - if (autoCA && !fitParamsSet) { - //high pass filter for R/B in vertical direction - float *rbhpfh = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); - //high pass filter for R/B in horizontal direction - float *rbhpfv = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); - //low pass filter for R/B in horizontal direction - float *rblpfh = (float (*)) (data + 3 * sizeof(float) * ts * ts + 5 * 64); - //low pass filter for R/B in vertical direction - float *rblpfv = (float (*)) (data + 3 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 6 * 64); - //low pass filter for colour differences in horizontal direction - float *grblpfh = (float (*)) (data + 4 * sizeof(float) * ts * ts + 7 * 64); - //low pass filter for colour differences in vertical direction - float *grblpfv = (float (*)) (data + 4 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 8 * 64); - // Main algorithm: Tile loop calculating correction parameters per tile + if (autoCA && !fitParamsSet) { + //high pass filter for R/B in vertical direction + float *rbhpfh = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); + //high pass filter for R/B in horizontal direction + float *rbhpfv = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); + //low pass filter for R/B in horizontal direction + float *rblpfh = (float (*)) (data + 3 * sizeof(float) * ts * ts + 5 * 64); + //low pass filter for R/B in vertical direction + float *rblpfv = (float (*)) (data + 3 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 6 * 64); + //low pass filter for colour differences in horizontal direction + float *grblpfh = (float (*)) (data + 4 * sizeof(float) * ts * ts + 7 * 64); + //low pass filter for colour differences in vertical direction + float *grblpfv = (float (*)) (data + 4 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 8 * 64); + // Main algorithm: Tile loop calculating correction parameters per tile - //local quadratic fit to shift data within a tile - float coeff[2][3][2]; - //measured CA shift parameters for a tile - float CAshift[2][2]; + //local quadratic fit to shift data within a tile + float coeff[2][3][2]; + //measured CA shift parameters for a tile + float CAshift[2][2]; - //per thread data for evaluation of block CA shift variance - float blockavethr[2][2] = {{0, 0}, {0, 0}}, blocksqavethr[2][2] = {{0, 0}, {0, 0}}, blockdenomthr[2][2] = {{0, 0}, {0, 0}}; + //per thread data for evaluation of block CA shift variance + float blockavethr[2][2] = {{0, 0}, {0, 0}}, blocksqavethr[2][2] = {{0, 0}, {0, 0}}, blockdenomthr[2][2] = {{0, 0}, {0, 0}}; - #pragma omp for collapse(2) schedule(dynamic) nowait - for (int top = -border ; top < height; top += ts - border2) - for (int left = -border; left < width - (W & 1); left += ts - border2) { - memset(bufferThr, 0, buffersize); - const int vblock = ((top + border) / (ts - border2)) + 1; - const int hblock = ((left + border) / (ts - border2)) + 1; - const int bottom = min(top + ts, height + border); - const int right = min(left + ts, width - (W & 1) + border); - const int rr1 = bottom - top; - const int cc1 = right - left; - const int rrmin = top < 0 ? border : 0; - const int rrmax = bottom > height ? height - top : rr1; - const int ccmin = left < 0 ? border : 0; - const int ccmax = (right > width - (W & 1)) ? width - (W & 1) - left : cc1; + #pragma omp for collapse(2) schedule(dynamic) nowait + for (int top = -border ; top < height; top += ts - border2) + for (int left = -border; left < width - (W & 1); left += ts - border2) { + memset(bufferThr, 0, buffersize); + const int vblock = ((top + border) / (ts - border2)) + 1; + const int hblock = ((left + border) / (ts - border2)) + 1; + const int bottom = min(top + ts, height + border); + const int right = min(left + ts, width - (W & 1) + border); + const int rr1 = bottom - top; + const int cc1 = right - left; + const int rrmin = top < 0 ? border : 0; + const int rrmax = bottom > height ? height - top : rr1; + const int ccmin = left < 0 ? border : 0; + const int ccmax = (right > width - (W & 1)) ? width - (W & 1) - left : cc1; - // rgb from input CFA data - // rgb values should be floating point numbers between 0 and 1 - // after white balance multipliers are applied + // rgb from input CFA data + // rgb values should be floating point numbers between 0 and 1 + // after white balance multipliers are applied -#ifdef __SSE2__ - vfloat c65535v = F2V(65535.f); -#endif + #ifdef __SSE2__ + vfloat c65535v = F2V(65535.f); + #endif - for (int rr = rrmin; rr < rrmax; rr++) { - int row = rr + top; - int cc = ccmin; - int col = cc + left; -#ifdef __SSE2__ - int c0 = FC(rr, cc); - if(c0 == 1) { - rgb[c0][rr * ts + cc] = rawData[row][col] / 65535.f; - cc++; - col++; - c0 = FC(rr, cc); - } - int indx1 = rr * ts + cc; - for (; cc < ccmax - 7; cc+=8, col+=8, indx1 += 8) { - vfloat val1 = LVFU(rawData[row][col]) / c65535v; - vfloat val2 = LVFU(rawData[row][col + 4]) / c65535v; - vfloat nonGreenv = _mm_shuffle_ps(val1,val2,_MM_SHUFFLE( 2,0,2,0 )); - STVFU(rgb[c0][indx1 >> 1], nonGreenv); - STVFU(rgb[1][indx1], val1); - STVFU(rgb[1][indx1 + 4], val2); - } -#endif - for (; cc < ccmax; cc++, col++) { - int c = FC(rr, cc); + for (int rr = rrmin; rr < rrmax; rr++) { + int row = rr + top; + int cc = ccmin; + int col = cc + left; + #ifdef __SSE2__ + int c0 = FC(rr, cc); + if(c0 == 1) { + rgb[c0][rr * ts + cc] = rawData[row][col] / 65535.f; + cc++; + col++; + c0 = FC(rr, cc); + } int indx1 = rr * ts + cc; - rgb[c][indx1 >> ((c & 1) ^ 1)] = rawData[row][col] / 65535.f; - } - } - - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - //fill borders - if (rrmin > 0) { - for (int rr = 0; rr < border; rr++) - for (int cc = ccmin; cc < ccmax; cc++) { + for (; cc < ccmax - 7; cc+=8, col+=8, indx1 += 8) { + vfloat val1 = LVFU(rawData[row][col]) / c65535v; + vfloat val2 = LVFU(rawData[row][col + 4]) / c65535v; + vfloat nonGreenv = _mm_shuffle_ps(val1,val2,_MM_SHUFFLE( 2,0,2,0 )); + STVFU(rgb[c0][indx1 >> 1], nonGreenv); + STVFU(rgb[1][indx1], val1); + STVFU(rgb[1][indx1 + 4], val2); + } + #endif + for (; cc < ccmax; cc++, col++) { int c = FC(rr, cc); - rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][((border2 - rr) * ts + cc) >> ((c & 1) ^ 1)]; - } - } - - if (rrmax < rr1) { - for (int rr = 0; rr < border; rr++) - for (int cc = ccmin; cc < ccmax; cc++) { - int c = FC(rr, cc); - rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = rawData[(height - rr - 2)][left + cc] / 65535.f; - } - } - - if (ccmin > 0) { - for (int rr = rrmin; rr < rrmax; rr++) - for (int cc = 0; cc < border; cc++) { - int c = FC(rr, cc); - rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][(rr * ts + border2 - cc) >> ((c & 1) ^ 1)]; - } - } - - if (ccmax < cc1) { - for (int rr = rrmin; rr < rrmax; rr++) - for (int cc = 0; cc < border; cc++) { - int c = FC(rr, cc); - rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = rawData[(top + rr)][(width - cc - 2)] / 65535.f; - } - } - - //also, fill the image corners - if (rrmin > 0 && ccmin > 0) { - for (int rr = 0; rr < border; rr++) - for (int cc = 0; cc < border; cc++) { - int c = FC(rr, cc); - rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rawData[border2 - rr][border2 - cc] / 65535.f; - } - } - - if (rrmax < rr1 && ccmax < cc1) { - for (int rr = 0; rr < border; rr++) - for (int cc = 0; cc < border; cc++) { - int c = FC(rr, cc); - rgb[c][((rrmax + rr)*ts + ccmax + cc) >> ((c & 1) ^ 1)] = rawData[(height - rr - 2)][(width - cc - 2)] / 65535.f; - } - } - - if (rrmin > 0 && ccmax < cc1) { - for (int rr = 0; rr < border; rr++) - for (int cc = 0; cc < border; cc++) { - int c = FC(rr, cc); - rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = rawData[(border2 - rr)][(width - cc - 2)] / 65535.f; - } - } - - if (rrmax < rr1 && ccmin > 0) { - for (int rr = 0; rr < border; rr++) - for (int cc = 0; cc < border; cc++) { - int c = FC(rr, cc); - rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = rawData[(height - rr - 2)][(border2 - cc)] / 65535.f; - } - } - - //end of border fill - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - //end of initialization - - -#ifdef __SSE2__ - vfloat onev = F2V(1.f); - vfloat epsv = F2V(eps); -#endif - for (int rr = 3; rr < rr1 - 3; rr++) { - int row = rr + top; - int cc = 3 + (FC(rr,3) & 1); - int indx = rr * ts + cc; - int c = FC(rr,cc); -#ifdef __SSE2__ - for (; cc < cc1 - 9; cc+=8, indx+=8) { - //compute directional weights using image gradients - vfloat rgb1mv1v = LC2VFU(rgb[1][indx - v1]); - vfloat rgb1pv1v = LC2VFU(rgb[1][indx + v1]); - vfloat rgbcv = LVFU(rgb[c][indx >> 1]); - vfloat temp1v = epsv + vabsf(rgb1mv1v - rgb1pv1v); - vfloat wtuv = onev / SQRV(temp1v + vabsf(rgbcv - LVFU(rgb[c][(indx - v2) >> 1])) + vabsf(rgb1mv1v - LC2VFU(rgb[1][indx - v3]))); - vfloat wtdv = onev / SQRV(temp1v + vabsf(rgbcv - LVFU(rgb[c][(indx + v2) >> 1])) + vabsf(rgb1pv1v - LC2VFU(rgb[1][indx + v3]))); - vfloat rgb1m1v = LC2VFU(rgb[1][indx - 1]); - vfloat rgb1p1v = LC2VFU(rgb[1][indx + 1]); - vfloat temp2v = epsv + vabsf(rgb1m1v - rgb1p1v); - vfloat wtlv = onev / SQRV(temp2v + vabsf(rgbcv - LVFU(rgb[c][(indx - 2) >> 1])) + vabsf(rgb1m1v - LC2VFU(rgb[1][indx - 3]))); - vfloat wtrv = onev / SQRV(temp2v + vabsf(rgbcv - LVFU(rgb[c][(indx + 2) >> 1])) + vabsf(rgb1p1v - LC2VFU(rgb[1][indx + 3]))); - - //store in rgb array the interpolated G value at R/B grid points using directional weighted average - STC2VFU(rgb[1][indx], (wtuv * rgb1mv1v + wtdv * rgb1pv1v + wtlv * rgb1m1v + wtrv * rgb1p1v) / (wtuv + wtdv + wtlv + wtrv)); - } - -#endif - for (; cc < cc1 - 3; cc+=2, indx+=2) { - //compute directional weights using image gradients - float wtu = 1.f / SQR(eps + fabsf(rgb[1][indx + v1] - rgb[1][indx - v1]) + fabsf(rgb[c][indx >> 1] - rgb[c][(indx - v2) >> 1]) + fabsf(rgb[1][indx - v1] - rgb[1][indx - v3])); - float wtd = 1.f / SQR(eps + fabsf(rgb[1][indx - v1] - rgb[1][indx + v1]) + fabsf(rgb[c][indx >> 1] - rgb[c][(indx + v2) >> 1]) + fabsf(rgb[1][indx + v1] - rgb[1][indx + v3])); - float wtl = 1.f / SQR(eps + fabsf(rgb[1][indx + 1] - rgb[1][indx - 1]) + fabsf(rgb[c][indx >> 1] - rgb[c][(indx - 2) >> 1]) + fabsf(rgb[1][indx - 1] - rgb[1][indx - 3])); - float wtr = 1.f / SQR(eps + fabsf(rgb[1][indx - 1] - rgb[1][indx + 1]) + fabsf(rgb[c][indx >> 1] - rgb[c][(indx + 2) >> 1]) + fabsf(rgb[1][indx + 1] - rgb[1][indx + 3])); - - //store in rgb array the interpolated G value at R/B grid points using directional weighted average - rgb[1][indx] = (wtu * rgb[1][indx - v1] + wtd * rgb[1][indx + v1] + wtl * rgb[1][indx - 1] + wtr * rgb[1][indx + 1]) / (wtu + wtd + wtl + wtr); - } - - if (row > -1 && row < height) { - int offset = (FC(row,max(left + 3, 0)) & 1); - int col = max(left + 3, 0) + offset; - int indx = rr * ts + 3 - (left < 0 ? (left+3) : 0) + offset; -#ifdef __SSE2__ - for(; col < min(cc1 + left - 3, width) - 7; col+=8, indx+=8) { - STVFU(Gtmp[(row * width + col) >> 1], LC2VFU(rgb[1][indx])); - } -#endif - for(; col < min(cc1 + left - 3, width); col+=2, indx+=2) { - Gtmp[(row * width + col) >> 1] = rgb[1][indx]; + int indx1 = rr * ts + cc; + rgb[c][indx1 >> ((c & 1) ^ 1)] = rawData[row][col] / 65535.f; } } - } - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#ifdef __SSE2__ - vfloat zd25v = F2V(0.25f); -#endif - for (int rr = 4; rr < rr1 - 4; rr++) { - int cc = 4 + (FC(rr, 2) & 1); - int indx = rr * ts + cc; - int c = FC(rr, cc); -#ifdef __SSE2__ - for (; cc < cc1 - 10; cc += 8, indx += 8) { - vfloat rgb1v = LC2VFU(rgb[1][indx]); - vfloat rgbcv = LVFU(rgb[c][indx >> 1]); - vfloat rgb1mv4 = LC2VFU(rgb[1][indx - v4]); - vfloat rgb1pv4 = LC2VFU(rgb[1][indx + v4]); - vfloat temp1v = vabsf(vabsf((rgb1v - rgbcv) - (rgb1pv4 - LVFU(rgb[c][(indx + v4) >> 1]))) + - vabsf(rgb1mv4 - LVFU(rgb[c][(indx - v4) >> 1]) - rgb1v + rgbcv) - - vabsf(rgb1mv4 - LVFU(rgb[c][(indx - v4) >> 1]) - rgb1pv4 + LVFU(rgb[c][(indx + v4) >> 1]))); - STVFU(rbhpfv[indx >> 1], temp1v); - vfloat rgb1m4 = LC2VFU(rgb[1][indx - 4]); - vfloat rgb1p4 = LC2VFU(rgb[1][indx + 4]); - vfloat temp2v = vabsf(vabsf((rgb1v - rgbcv) - (rgb1p4 - LVFU(rgb[c][(indx + 4) >> 1]))) + - vabsf(rgb1m4 - LVFU(rgb[c][(indx - 4) >> 1]) - rgb1v + rgbcv) - - vabsf(rgb1m4 - LVFU(rgb[c][(indx - 4) >> 1]) - rgb1p4 + LVFU(rgb[c][(indx + 4) >> 1]))); - STVFU(rbhpfh[indx >> 1], temp2v); - - //low and high pass 1D filters of G in vertical/horizontal directions - rgb1v = vmul2f(rgb1v); - vfloat glpfvv = (rgb1v + LC2VFU(rgb[1][indx + v2]) + LC2VFU(rgb[1][indx - v2])); - vfloat glpfhv = (rgb1v + LC2VFU(rgb[1][indx + 2]) + LC2VFU(rgb[1][indx - 2])); - rgbcv = vmul2f(rgbcv); - STVFU(rblpfv[indx >> 1], zd25v * vabsf(glpfvv - (rgbcv + LVFU(rgb[c][(indx + v2) >> 1]) + LVFU(rgb[c][(indx - v2) >> 1])))); - STVFU(rblpfh[indx >> 1], zd25v * vabsf(glpfhv - (rgbcv + LVFU(rgb[c][(indx + 2) >> 1]) + LVFU(rgb[c][(indx - 2) >> 1])))); - STVFU(grblpfv[indx >> 1], zd25v * (glpfvv + (rgbcv + LVFU(rgb[c][(indx + v2) >> 1]) + LVFU(rgb[c][(indx - v2) >> 1])))); - STVFU(grblpfh[indx >> 1], zd25v * (glpfhv + (rgbcv + LVFU(rgb[c][(indx + 2) >> 1]) + LVFU(rgb[c][(indx - 2) >> 1])))); - } - -#endif - for (; cc < cc1 - 4; cc += 2, indx += 2) { - rbhpfv[indx >> 1] = fabsf(fabsf((rgb[1][indx] - rgb[c][indx >> 1]) - (rgb[1][indx + v4] - rgb[c][(indx + v4) >> 1])) + - fabsf((rgb[1][indx - v4] - rgb[c][(indx - v4) >> 1]) - (rgb[1][indx] - rgb[c][indx >> 1])) - - fabsf((rgb[1][indx - v4] - rgb[c][(indx - v4) >> 1]) - (rgb[1][indx + v4] - rgb[c][(indx + v4) >> 1]))); - rbhpfh[indx >> 1] = fabsf(fabsf((rgb[1][indx] - rgb[c][indx >> 1]) - (rgb[1][indx + 4] - rgb[c][(indx + 4) >> 1])) + - fabsf((rgb[1][indx - 4] - rgb[c][(indx - 4) >> 1]) - (rgb[1][indx] - rgb[c][indx >> 1])) - - fabsf((rgb[1][indx - 4] - rgb[c][(indx - 4) >> 1]) - (rgb[1][indx + 4] - rgb[c][(indx + 4) >> 1]))); - - //low and high pass 1D filters of G in vertical/horizontal directions - float glpfv = (2.f * rgb[1][indx] + rgb[1][indx + v2] + rgb[1][indx - v2]); - float glpfh = (2.f * rgb[1][indx] + rgb[1][indx + 2] + rgb[1][indx - 2]); - rblpfv[indx >> 1] = 0.25f * fabsf(glpfv - (2.f * rgb[c][indx >> 1] + rgb[c][(indx + v2) >> 1] + rgb[c][(indx - v2) >> 1])); - rblpfh[indx >> 1] = 0.25f * fabsf(glpfh - (2.f * rgb[c][indx >> 1] + rgb[c][(indx + 2) >> 1] + rgb[c][(indx - 2) >> 1])); - grblpfv[indx >> 1] = 0.25f * (glpfv + (2.f * rgb[c][indx >> 1] + rgb[c][(indx + v2) >> 1] + rgb[c][(indx - v2) >> 1])); - grblpfh[indx >> 1] = 0.25f * (glpfh + (2.f * rgb[c][indx >> 1] + rgb[c][(indx + 2) >> 1] + rgb[c][(indx - 2) >> 1])); - } - } - - for (int dir = 0; dir < 2; dir++) { - for (int k = 0; k < 3; k++) { - for (int c = 0; c < 2; c++) { - coeff[dir][k][c] = 0; - } - } - } - -#ifdef __SSE2__ - vfloat zd3v = F2V(0.3f); - vfloat zd1v = F2V(0.1f); - vfloat zd5v = F2V(0.5f); -#endif - - // along line segments, find the point along each segment that minimizes the colour variance - // averaged over the tile; evaluate for up/down and left/right away from R/B grid point - for (int rr = 8; rr < rr1 - 8; rr++) { - int cc = 8 + (FC(rr, 2) & 1); - int indx = rr * ts + cc; - int c = FC(rr, cc); -#ifdef __SSE2__ - vfloat coeff00v = ZEROV; - vfloat coeff01v = ZEROV; - vfloat coeff02v = ZEROV; - vfloat coeff10v = ZEROV; - vfloat coeff11v = ZEROV; - vfloat coeff12v = ZEROV; - for (; cc < cc1 - 14; cc += 8, indx += 8) { - - //in linear interpolation, colour differences are a quadratic function of interpolation position; - //solve for the interpolation position that minimizes colour difference variance over the tile - - //vertical - vfloat temp1 = zd3v * (LC2VFU(rgb[1][indx + ts + 1]) - LC2VFU(rgb[1][indx - ts - 1])); - vfloat temp2 = zd3v * (LC2VFU(rgb[1][indx - ts + 1]) - LC2VFU(rgb[1][indx + ts - 1])); - vfloat gdiffvv = (LC2VFU(rgb[1][indx + ts]) - LC2VFU(rgb[1][indx - ts])) + (temp1 - temp2); - vfloat deltgrbv = LVFU(rgb[c][indx >> 1]) - LC2VFU(rgb[1][indx]); - - vfloat gradwtvv = (LVFU(rbhpfv[indx >> 1]) + zd5v * (LVFU(rbhpfv[(indx >> 1) + 1]) + LVFU(rbhpfv[(indx >> 1) - 1]))) * (LVFU(grblpfv[(indx >> 1) - v1]) + LVFU(grblpfv[(indx >> 1) + v1])) / (epsv + zd1v * (LVFU(grblpfv[(indx >> 1) - v1]) + LVFU(grblpfv[(indx >> 1) + v1])) + LVFU(rblpfv[(indx >> 1) - v1]) + LVFU(rblpfv[(indx >> 1) + v1])); - - coeff00v += gradwtvv * deltgrbv * deltgrbv; - coeff01v += gradwtvv * gdiffvv * deltgrbv; - coeff02v += gradwtvv * gdiffvv * gdiffvv; - - //horizontal - vfloat gdiffhv = (LC2VFU(rgb[1][indx + 1]) - LC2VFU(rgb[1][indx - 1])) + (temp1 + temp2); - - vfloat gradwthv = (LVFU(rbhpfh[indx >> 1]) + zd5v * (LVFU(rbhpfh[(indx >> 1) + v1]) + LVFU(rbhpfh[(indx >> 1) - v1]))) * (LVFU(grblpfh[(indx >> 1) - 1]) + LVFU(grblpfh[(indx >> 1) + 1])) / (epsv + zd1v * (LVFU(grblpfh[(indx >> 1) - 1]) + LVFU(grblpfh[(indx >> 1) + 1])) + LVFU(rblpfh[(indx >> 1) - 1]) + LVFU(rblpfh[(indx >> 1) + 1])); - - coeff10v += gradwthv * deltgrbv * deltgrbv; - coeff11v += gradwthv * gdiffhv * deltgrbv; - coeff12v += gradwthv * gdiffhv * gdiffhv; - } - - coeff[0][0][c>>1] += vhadd(coeff00v); - coeff[0][1][c>>1] += vhadd(coeff01v); - coeff[0][2][c>>1] += vhadd(coeff02v); - coeff[1][0][c>>1] += vhadd(coeff10v); - coeff[1][1][c>>1] += vhadd(coeff11v); - coeff[1][2][c>>1] += vhadd(coeff12v); - -#endif - for (; cc < cc1 - 8; cc += 2, indx += 2) { - - //in linear interpolation, colour differences are a quadratic function of interpolation position; - //solve for the interpolation position that minimizes colour difference variance over the tile - - //vertical - float gdiff = (rgb[1][indx + ts] - rgb[1][indx - ts]) + 0.3f * (rgb[1][indx + ts + 1] - rgb[1][indx - ts + 1] + rgb[1][indx + ts - 1] - rgb[1][indx - ts - 1]); - float deltgrb = (rgb[c][indx >> 1] - rgb[1][indx]); - - float gradwt = (rbhpfv[indx >> 1] + 0.5f * (rbhpfv[(indx >> 1) + 1] + rbhpfv[(indx >> 1) - 1]) ) * (grblpfv[(indx >> 1) - v1] + grblpfv[(indx >> 1) + v1]) / (eps + 0.1f * (grblpfv[(indx >> 1) - v1] + grblpfv[(indx >> 1) + v1]) + rblpfv[(indx >> 1) - v1] + rblpfv[(indx >> 1) + v1]); - - coeff[0][0][c>>1] += gradwt * deltgrb * deltgrb; - coeff[0][1][c>>1] += gradwt * gdiff * deltgrb; - coeff[0][2][c>>1] += gradwt * gdiff * gdiff; - - //horizontal - gdiff = (rgb[1][indx + 1] - rgb[1][indx - 1]) + 0.3f * (rgb[1][indx + 1 + ts] - rgb[1][indx - 1 + ts] + rgb[1][indx + 1 - ts] - rgb[1][indx - 1 - ts]); - - gradwt = (rbhpfh[indx >> 1] + 0.5f * (rbhpfh[(indx >> 1) + v1] + rbhpfh[(indx >> 1) - v1]) ) * (grblpfh[(indx >> 1) - 1] + grblpfh[(indx >> 1) + 1]) / (eps + 0.1f * (grblpfh[(indx >> 1) - 1] + grblpfh[(indx >> 1) + 1]) + rblpfh[(indx >> 1) - 1] + rblpfh[(indx >> 1) + 1]); - - coeff[1][0][c>>1] += gradwt * deltgrb * deltgrb; - coeff[1][1][c>>1] += gradwt * gdiff * deltgrb; - coeff[1][2][c>>1] += gradwt * gdiff * gdiff; - - // In Mathematica, - // f[x_]=Expand[Total[Flatten[ - // ((1-x) RotateLeft[Gint,shift1]+x RotateLeft[Gint,shift2]-cfapad)^2[[dv;;-1;;2,dh;;-1;;2]]]]]; - // extremum = -.5Coefficient[f[x],x]/Coefficient[f[x],x^2] - } - } - - for (int dir = 0; dir < 2; dir++) { - for (int k = 0; k < 3; k++) { - for (int c = 0; c < 2; c++) { - coeff[dir][k][c] *= 0.25f; - if(k == 1) { - coeff[dir][k][c] *= 0.3125f; - } else if(k == 2) { - coeff[dir][k][c] *= SQR(0.3125f); + // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + //fill borders + if (rrmin > 0) { + for (int rr = 0; rr < border; rr++) + for (int cc = ccmin; cc < ccmax; cc++) { + int c = FC(rr, cc); + rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][((border2 - rr) * ts + cc) >> ((c & 1) ^ 1)]; } - } } - } - for (int c = 0; c < 2; c++) { - for (int dir = 0; dir < 2; dir++) { // vert/hor - - // CAshift[dir][c] are the locations - // that minimize colour difference variances; - // This is the approximate _optical_ location of the R/B pixels - if (coeff[dir][2][c] > eps2) { - CAshift[dir][c] = coeff[dir][1][c] / coeff[dir][2][c]; - blockwt[vblock * hblsz + hblock] = coeff[dir][2][c] / (eps + coeff[dir][0][c]) ; - } else { - CAshift[dir][c] = 17.0; - blockwt[vblock * hblsz + hblock] = 0; - } - - //data structure = CAshift[vert/hor][colour] - //dir : 0=vert, 1=hor - - //offset gives NW corner of square containing the min; dir : 0=vert, 1=hor - if (fabsf(CAshift[dir][c]) < 2.0f) { - blockavethr[dir][c] += CAshift[dir][c]; - blocksqavethr[dir][c] += SQR(CAshift[dir][c]); - blockdenomthr[dir][c] += 1; - } - //evaluate the shifts to the location that minimizes CA within the tile - blockshifts[vblock * hblsz + hblock][c][dir] = CAshift[dir][c]; //vert/hor CA shift for R/B - - }//vert/hor - }//colour - - if(plistener) { - progresscounter++; - - if(progresscounter % 8 == 0) - #pragma omp critical (cadetectpass1) - { - progress += (double)(8.0 * (ts - border2) * (ts - border2)) / (2 * height * width); - - if (progress > 1.0) { - progress = 1.0; - } - - plistener->setProgress(progress); + if (rrmax < rr1) { + for (int rr = 0; rr < border; rr++) + for (int cc = ccmin; cc < ccmax; cc++) { + int c = FC(rr, cc); + rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = rawData[(height - rr - 2)][left + cc] / 65535.f; + } } - } - } - - //end of diagnostic pass - #pragma omp critical (cadetectpass2) - { - for (int dir = 0; dir < 2; dir++) - for (int c = 0; c < 2; c++) { - blockdenom[dir][c] += blockdenomthr[dir][c]; - blocksqave[dir][c] += blocksqavethr[dir][c]; - blockave[dir][c] += blockavethr[dir][c]; - } - } - #pragma omp barrier - - #pragma omp single - { - for (int dir = 0; dir < 2; dir++) - for (int c = 0; c < 2; c++) { - if (blockdenom[dir][c]) { - blockvar[dir][c] = blocksqave[dir][c] / blockdenom[dir][c] - SQR(blockave[dir][c] / blockdenom[dir][c]); - } else { - processpasstwo = false; - printf ("blockdenom vanishes \n"); - break; + if (ccmin > 0) { + for (int rr = rrmin; rr < rrmax; rr++) + for (int cc = 0; cc < border; cc++) { + int c = FC(rr, cc); + rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][(rr * ts + border2 - cc) >> ((c & 1) ^ 1)]; + } } - } - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - //now prepare for CA correction pass - //first, fill border blocks of blockshift array - if(processpasstwo) { - for (int vblock = 1; vblock < vblsz - 1; vblock++) { //left and right sides - for (int c = 0; c < 2; c++) { - for (int i = 0; i < 2; i++) { - blockshifts[vblock * hblsz][c][i] = blockshifts[(vblock) * hblsz + 2][c][i]; - blockshifts[vblock * hblsz + hblsz - 1][c][i] = blockshifts[(vblock) * hblsz + hblsz - 3][c][i]; - } + if (ccmax < cc1) { + for (int rr = rrmin; rr < rrmax; rr++) + for (int cc = 0; cc < border; cc++) { + int c = FC(rr, cc); + rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = rawData[(top + rr)][(width - cc - 2)] / 65535.f; + } } - } - for (int hblock = 0; hblock < hblsz; hblock++) { //top and bottom sides - for (int c = 0; c < 2; c++) { - for (int i = 0; i < 2; i++) { - blockshifts[hblock][c][i] = blockshifts[2 * hblsz + hblock][c][i]; - blockshifts[(vblsz - 1)*hblsz + hblock][c][i] = blockshifts[(vblsz - 3) * hblsz + hblock][c][i]; - } + //also, fill the image corners + if (rrmin > 0 && ccmin > 0) { + for (int rr = 0; rr < border; rr++) + for (int cc = 0; cc < border; cc++) { + int c = FC(rr, cc); + rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rawData[border2 - rr][border2 - cc] / 65535.f; + } } - } - //end of filling border pixels of blockshift array - - //initialize fit arrays - double polymat[2][2][256], shiftmat[2][2][16]; - - for (int i = 0; i < 256; i++) { - polymat[0][0][i] = polymat[0][1][i] = polymat[1][0][i] = polymat[1][1][i] = 0; - } - - for (int i = 0; i < 16; i++) { - shiftmat[0][0][i] = shiftmat[0][1][i] = shiftmat[1][0][i] = shiftmat[1][1][i] = 0; - } - - int numblox[2] = {0, 0}; - - for (int vblock = 1; vblock < vblsz - 1; vblock++) - for (int hblock = 1; hblock < hblsz - 1; hblock++) { - // block 3x3 median of blockshifts for robustness - for (int c = 0; c < 2; c ++) { - float bstemp[2]; - for (int dir = 0; dir < 2; dir++) { - //temporary storage for median filter - const std::array p = { - blockshifts[(vblock - 1) * hblsz + hblock - 1][c][dir], - blockshifts[(vblock - 1) * hblsz + hblock][c][dir], - blockshifts[(vblock - 1) * hblsz + hblock + 1][c][dir], - blockshifts[(vblock) * hblsz + hblock - 1][c][dir], - blockshifts[(vblock) * hblsz + hblock][c][dir], - blockshifts[(vblock) * hblsz + hblock + 1][c][dir], - blockshifts[(vblock + 1) * hblsz + hblock - 1][c][dir], - blockshifts[(vblock + 1) * hblsz + hblock][c][dir], - blockshifts[(vblock + 1) * hblsz + hblock + 1][c][dir] - }; - bstemp[dir] = median(p); + if (rrmax < rr1 && ccmax < cc1) { + for (int rr = 0; rr < border; rr++) + for (int cc = 0; cc < border; cc++) { + int c = FC(rr, cc); + rgb[c][((rrmax + rr)*ts + ccmax + cc) >> ((c & 1) ^ 1)] = rawData[(height - rr - 2)][(width - cc - 2)] / 65535.f; } - - //now prepare coefficient matrix; use only data points within caautostrength/2 std devs of zero - if (SQR(bstemp[0]) > caautostrength * blockvar[0][c] || SQR(bstemp[1]) > caautostrength * blockvar[1][c]) { - continue; - } - - numblox[c]++; - - for (int dir = 0; dir < 2; dir++) { - double powVblockInit = 1.0; - for (int i = 0; i < polyord; i++) { - double powHblockInit = 1.0; - for (int j = 0; j < polyord; j++) { - double powVblock = powVblockInit; - for (int m = 0; m < polyord; m++) { - double powHblock = powHblockInit; - for (int n = 0; n < polyord; n++) { - polymat[c][dir][numpar * (polyord * i + j) + (polyord * m + n)] += powVblock * powHblock * blockwt[vblock * hblsz + hblock]; - powHblock *= hblock; - } - powVblock *= vblock; - } - shiftmat[c][dir][(polyord * i + j)] += powVblockInit * powHblockInit * bstemp[dir] * blockwt[vblock * hblsz + hblock]; - powHblockInit *= hblock; - } - powVblockInit *= vblock; - }//monomials - }//dir - }//c - }//blocks - - numblox[1] = min(numblox[0], numblox[1]); - - //if too few data points, restrict the order of the fit to linear - if (numblox[1] < 32) { - polyord = 2; - numpar = 4; - - if (numblox[1] < 10) { - - printf ("numblox = %d \n", numblox[1]); - processpasstwo = false; } - } - if(processpasstwo) - - //fit parameters to blockshifts - for (int c = 0; c < 2; c++) - for (int dir = 0; dir < 2; dir++) { - if (!LinEqSolve(numpar, polymat[c][dir], shiftmat[c][dir], fitparams[c][dir])) { - printf("CA correction pass failed -- can't solve linear equations for colour %d direction %d...\n", c, dir); - processpasstwo = false; + if (rrmin > 0 && ccmax < cc1) { + for (int rr = 0; rr < border; rr++) + for (int cc = 0; cc < border; cc++) { + int c = FC(rr, cc); + rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = rawData[(border2 - rr)][(width - cc - 2)] / 65535.f; } - } - } - - //fitparams[polyord*i+j] gives the coefficients of (vblock^i hblock^j) in a polynomial fit for i,j<=4 - } - //end of initialization for CA correction pass - //only executed if autoCA is true - } - - // Main algorithm: Tile loop - if(processpasstwo) { - float *grbdiff = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); // there is no overlap in buffer usage => share - //green interpolated to optical sample points for R/B - float *gshift = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); // there is no overlap in buffer usage => share - #pragma omp for schedule(dynamic) collapse(2) nowait - - for (int top = -border; top < height; top += ts - border2) - for (int left = -border; left < width - (W & 1); left += ts - border2) { - memset(bufferThr, 0, buffersizePassTwo); - float lblockshifts[2][2]; - const int vblock = ((top + border) / (ts - border2)) + 1; - const int hblock = ((left + border) / (ts - border2)) + 1; - const int bottom = min(top + ts, height + border); - const int right = min(left + ts, width - (W & 1) + border); - const int rr1 = bottom - top; - const int cc1 = right - left; - - const int rrmin = top < 0 ? border : 0; - const int rrmax = bottom > height ? height - top : rr1; - const int ccmin = left < 0 ? border : 0; - const int ccmax = (right > width - (W & 1)) ? width - (W & 1) - left : cc1; - - // rgb from input CFA data - // rgb values should be floating point number between 0 and 1 - // after white balance multipliers are applied - -#ifdef __SSE2__ - vfloat c65535v = F2V(65535.f); - vmask gmask = _mm_set_epi32(0, 0xffffffff, 0, 0xffffffff); -#endif - for (int rr = rrmin; rr < rrmax; rr++) { - int row = rr + top; - int cc = ccmin; - int col = cc + left; - int indx = row * width + col; - int indx1 = rr * ts + cc; -#ifdef __SSE2__ - int c = FC(rr, cc); - if(c & 1) { - rgb[1][indx1] = rawData[row][col] / 65535.f; - indx++; - indx1++; - cc++; - col++; - c = FC(rr, cc); } - for (; cc < ccmax - 7; cc += 8, col += 8, indx += 8, indx1 += 8) { - vfloat val1v = LVFU(rawData[row][col]) / c65535v; - vfloat val2v = LVFU(rawData[row][col + 4]) / c65535v; - STVFU(rgb[c][indx1 >> 1], _mm_shuffle_ps(val1v, val2v, _MM_SHUFFLE(2, 0, 2, 0))); - vfloat gtmpv = LVFU(Gtmp[indx >> 1]); - STVFU(rgb[1][indx1], vself(gmask, PERMUTEPS(gtmpv, _MM_SHUFFLE(1, 1, 0, 0)), val1v)); - STVFU(rgb[1][indx1 + 4], vself(gmask, PERMUTEPS(gtmpv, _MM_SHUFFLE(3, 3, 2, 2)), val2v)); + + if (rrmax < rr1 && ccmin > 0) { + for (int rr = 0; rr < border; rr++) + for (int cc = 0; cc < border; cc++) { + int c = FC(rr, cc); + rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = rawData[(height - rr - 2)][(border2 - cc)] / 65535.f; + } } -#endif - for (; cc < ccmax; cc++, col++, indx++, indx1++) { - int c = FC(rr, cc); - rgb[c][indx1 >> ((c & 1) ^ 1)] = rawData[row][col] / 65535.f; - if ((c & 1) == 0) { - rgb[1][indx1] = Gtmp[indx >> 1]; - } - } - } - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - //fill borders - if (rrmin > 0) { - for (int rr = 0; rr < border; rr++) - for (int cc = ccmin; cc < ccmax; cc++) { - int c = FC(rr, cc); - rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][((border2 - rr) * ts + cc) >> ((c & 1) ^ 1)]; - rgb[1][rr * ts + cc] = rgb[1][(border2 - rr) * ts + cc]; - } - } + //end of border fill + // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + //end of initialization - if (rrmax < rr1) { - for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) - for (int cc = ccmin; cc < ccmax; cc++) { - int c = FC(rr, cc); - rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = (rawData[(height - rr - 2)][left + cc]) / 65535.f; - if ((c & 1) == 0) { - rgb[1][(rrmax + rr)*ts + cc] = Gtmp[((height - rr - 2) * width + left + cc) >> 1]; - } - } - } - if (ccmin > 0) { - for (int rr = rrmin; rr < rrmax; rr++) - for (int cc = 0; cc < border; cc++) { - int c = FC(rr, cc); - rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][(rr * ts + border2 - cc) >> ((c & 1) ^ 1)]; - rgb[1][rr * ts + cc] = rgb[1][rr * ts + border2 - cc]; - } - } - - if (ccmax < cc1) { - for (int rr = rrmin; rr < rrmax; rr++) - for (int cc = 0; cc < std::min(border, cc1 - ccmax); cc++) { - int c = FC(rr, cc); - rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = (rawData[(top + rr)][(width - cc - 2)]) / 65535.f; - if ((c & 1) == 0) { - rgb[1][rr * ts + ccmax + cc] = Gtmp[((top + rr) * width + (width - cc - 2)) >> 1]; - } - } - } - - //also, fill the image corners - if (rrmin > 0 && ccmin > 0) { - for (int rr = 0; rr < border; rr++) - for (int cc = 0; cc < border; cc++) { - int c = FC(rr, cc); - rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = (rawData[border2 - rr][border2 - cc]) / 65535.f; - if ((c & 1) == 0) { - rgb[1][rr * ts + cc] = Gtmp[((border2 - rr) * width + border2 - cc) >> 1]; - } - } - } - - if (rrmax < rr1 && ccmax < cc1) { - for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) - for (int cc = 0; cc < std::min(border, cc1 - ccmax); cc++) { - int c = FC(rr, cc); - rgb[c][((rrmax + rr)*ts + ccmax + cc) >> ((c & 1) ^ 1)] = (rawData[(height - rr - 2)][(width - cc - 2)]) / 65535.f; - if ((c & 1) == 0) { - rgb[1][(rrmax + rr)*ts + ccmax + cc] = Gtmp[((height - rr - 2) * width + (width - cc - 2)) >> 1]; - } - } - } - - if (rrmin > 0 && ccmax < cc1) { - for (int rr = 0; rr < border; rr++) - for (int cc = 0; cc < std::min(border, cc1 - ccmax); cc++) { - int c = FC(rr, cc); - rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = (rawData[(border2 - rr)][(width - cc - 2)]) / 65535.f; - if ((c & 1) == 0) { - rgb[1][rr * ts + ccmax + cc] = Gtmp[((border2 - rr) * width + (width - cc - 2)) >> 1]; - } - } - } - - if (rrmax < rr1 && ccmin > 0) { - for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) - for (int cc = 0; cc < border; cc++) { - int c = FC(rr, cc); - rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = (rawData[(height - rr - 2)][(border2 - cc)]) / 65535.f; - if ((c & 1) == 0) { - rgb[1][(rrmax + rr)*ts + cc] = Gtmp[((height - rr - 2) * width + (border2 - cc)) >> 1]; - } - } - } - - //end of border fill - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - if (!autoCA || fitParamsIn) { -#ifdef __SSE2__ - const vfloat onev = F2V(1.f); - const vfloat epsv = F2V(eps); -#endif - - //manual CA correction; use red/blue slider values to set CA shift parameters + #ifdef __SSE2__ + vfloat onev = F2V(1.f); + vfloat epsv = F2V(eps); + #endif for (int rr = 3; rr < rr1 - 3; rr++) { - int cc = 3 + FC(rr, 1), c = FC(rr,cc), indx = rr * ts + cc; -#ifdef __SSE2__ - for (; cc < cc1 - 10; cc += 8, indx += 8) { + int row = rr + top; + int cc = 3 + (FC(rr,3) & 1); + int indx = rr * ts + cc; + int c = FC(rr,cc); + #ifdef __SSE2__ + for (; cc < cc1 - 9; cc+=8, indx+=8) { //compute directional weights using image gradients - vfloat val1v = epsv + vabsf(LC2VFU(rgb[1][(rr + 1) * ts + cc]) - LC2VFU(rgb[1][(rr - 1) * ts + cc])); - vfloat val2v = epsv + vabsf(LC2VFU(rgb[1][indx + 1]) - LC2VFU(rgb[1][indx - 1])); - vfloat wtuv = onev / SQRV(val1v + vabsf(LVFU(rgb[c][(rr * ts + cc) >> 1]) - LVFU(rgb[c][((rr - 2) * ts + cc) >> 1])) + vabsf(LC2VFU(rgb[1][(rr - 1) * ts + cc]) - LC2VFU(rgb[1][(rr - 3) * ts + cc]))); - vfloat wtdv = onev / SQRV(val1v + vabsf(LVFU(rgb[c][(rr * ts + cc) >> 1]) - LVFU(rgb[c][((rr + 2) * ts + cc) >> 1])) + vabsf(LC2VFU(rgb[1][(rr + 1) * ts + cc]) - LC2VFU(rgb[1][(rr + 3) * ts + cc]))); - vfloat wtlv = onev / SQRV(val2v + vabsf(LVFU(rgb[c][indx >> 1]) - LVFU(rgb[c][(indx - 2) >> 1])) + vabsf(LC2VFU(rgb[1][indx - 1]) - LC2VFU(rgb[1][indx - 3]))); - vfloat wtrv = onev / SQRV(val2v + vabsf(LVFU(rgb[c][indx >> 1]) - LVFU(rgb[c][(indx + 2) >> 1])) + vabsf(LC2VFU(rgb[1][indx + 1]) - LC2VFU(rgb[1][indx + 3]))); + vfloat rgb1mv1v = LC2VFU(rgb[1][indx - v1]); + vfloat rgb1pv1v = LC2VFU(rgb[1][indx + v1]); + vfloat rgbcv = LVFU(rgb[c][indx >> 1]); + vfloat temp1v = epsv + vabsf(rgb1mv1v - rgb1pv1v); + vfloat wtuv = onev / SQRV(temp1v + vabsf(rgbcv - LVFU(rgb[c][(indx - v2) >> 1])) + vabsf(rgb1mv1v - LC2VFU(rgb[1][indx - v3]))); + vfloat wtdv = onev / SQRV(temp1v + vabsf(rgbcv - LVFU(rgb[c][(indx + v2) >> 1])) + vabsf(rgb1pv1v - LC2VFU(rgb[1][indx + v3]))); + vfloat rgb1m1v = LC2VFU(rgb[1][indx - 1]); + vfloat rgb1p1v = LC2VFU(rgb[1][indx + 1]); + vfloat temp2v = epsv + vabsf(rgb1m1v - rgb1p1v); + vfloat wtlv = onev / SQRV(temp2v + vabsf(rgbcv - LVFU(rgb[c][(indx - 2) >> 1])) + vabsf(rgb1m1v - LC2VFU(rgb[1][indx - 3]))); + vfloat wtrv = onev / SQRV(temp2v + vabsf(rgbcv - LVFU(rgb[c][(indx + 2) >> 1])) + vabsf(rgb1p1v - LC2VFU(rgb[1][indx + 3]))); //store in rgb array the interpolated G value at R/B grid points using directional weighted average - STC2VFU(rgb[1][indx], (wtuv * LC2VFU(rgb[1][indx - v1]) + wtdv * LC2VFU(rgb[1][indx + v1]) + wtlv * LC2VFU(rgb[1][indx - 1]) + wtrv * LC2VFU(rgb[1][indx + 1])) / (wtuv + wtdv + wtlv + wtrv)); + STC2VFU(rgb[1][indx], (wtuv * rgb1mv1v + wtdv * rgb1pv1v + wtlv * rgb1m1v + wtrv * rgb1p1v) / (wtuv + wtdv + wtlv + wtrv)); } -#endif - for (; cc < cc1 - 3; cc += 2, indx += 2) { + + #endif + for (; cc < cc1 - 3; cc+=2, indx+=2) { //compute directional weights using image gradients - float wtu = 1.f / SQR(eps + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr - 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr - 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr - 1) * ts + cc] - rgb[1][(rr - 3) * ts + cc])); - float wtd = 1.f / SQR(eps + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr - 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr + 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr + 3) * ts + cc])); - float wtl = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc - 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc - 2) >> 1]) + fabsf(rgb[1][rr * ts + cc - 1] - rgb[1][rr * ts + cc - 3])); - float wtr = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc - 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc + 2) >> 1]) + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc + 3])); + float wtu = 1.f / SQR(eps + fabsf(rgb[1][indx + v1] - rgb[1][indx - v1]) + fabsf(rgb[c][indx >> 1] - rgb[c][(indx - v2) >> 1]) + fabsf(rgb[1][indx - v1] - rgb[1][indx - v3])); + float wtd = 1.f / SQR(eps + fabsf(rgb[1][indx - v1] - rgb[1][indx + v1]) + fabsf(rgb[c][indx >> 1] - rgb[c][(indx + v2) >> 1]) + fabsf(rgb[1][indx + v1] - rgb[1][indx + v3])); + float wtl = 1.f / SQR(eps + fabsf(rgb[1][indx + 1] - rgb[1][indx - 1]) + fabsf(rgb[c][indx >> 1] - rgb[c][(indx - 2) >> 1]) + fabsf(rgb[1][indx - 1] - rgb[1][indx - 3])); + float wtr = 1.f / SQR(eps + fabsf(rgb[1][indx - 1] - rgb[1][indx + 1]) + fabsf(rgb[c][indx >> 1] - rgb[c][(indx + 2) >> 1]) + fabsf(rgb[1][indx + 1] - rgb[1][indx + 3])); //store in rgb array the interpolated G value at R/B grid points using directional weighted average rgb[1][indx] = (wtu * rgb[1][indx - v1] + wtd * rgb[1][indx + v1] + wtl * rgb[1][indx - 1] + wtr * rgb[1][indx + 1]) / (wtu + wtd + wtl + wtr); } - } - } - if (!autoCA) { - float hfrac = -((float)(hblock - 0.5) / (hblsz - 2) - 0.5); - float vfrac = -((float)(vblock - 0.5) / (vblsz - 2) - 0.5) * height / width; - lblockshifts[0][0] = 2 * vfrac * cared; - lblockshifts[0][1] = 2 * hfrac * cared; - lblockshifts[1][0] = 2 * vfrac * cablue; - lblockshifts[1][1] = 2 * hfrac * cablue; - } else { - //CA auto correction; use CA diagnostic pass to set shift parameters - lblockshifts[0][0] = lblockshifts[0][1] = 0; - lblockshifts[1][0] = lblockshifts[1][1] = 0; - double powVblock = 1.0; - for (int i = 0; i < polyord; i++) { - double powHblock = powVblock; - for (int j = 0; j < polyord; j++) { - lblockshifts[0][0] += powHblock * fitparams[0][0][polyord * i + j]; - lblockshifts[0][1] += powHblock * fitparams[0][1][polyord * i + j]; - lblockshifts[1][0] += powHblock * fitparams[1][0][polyord * i + j]; - lblockshifts[1][1] += powHblock * fitparams[1][1][polyord * i + j]; - powHblock *= hblock; - } - powVblock *= vblock; - } - constexpr float bslim = 3.99; //max allowed CA shift - lblockshifts[0][0] = LIM(lblockshifts[0][0], -bslim, bslim); - lblockshifts[0][1] = LIM(lblockshifts[0][1], -bslim, bslim); - lblockshifts[1][0] = LIM(lblockshifts[1][0], -bslim, bslim); - lblockshifts[1][1] = LIM(lblockshifts[1][1], -bslim, bslim); - }//end of setting CA shift parameters - - for (int c = 0; c < 3; c += 2) { - - //some parameters for the bilinear interpolation - shiftvfloor[c] = floor((float)lblockshifts[c>>1][0]); - shiftvceil[c] = ceil((float)lblockshifts[c>>1][0]); - shiftvfrac[c] = lblockshifts[c>>1][0] - shiftvfloor[c]; - - shifthfloor[c] = floor((float)lblockshifts[c>>1][1]); - shifthceil[c] = ceil((float)lblockshifts[c>>1][1]); - shifthfrac[c] = lblockshifts[c>>1][1] - shifthfloor[c]; - - GRBdir[0][c] = lblockshifts[c>>1][0] > 0 ? 2 : -2; - GRBdir[1][c] = lblockshifts[c>>1][1] > 0 ? 2 : -2; - - } - - - for (int rr = 4; rr < rr1 - 4; rr++) { - int cc = 4 + (FC(rr, 2) & 1); - int c = FC(rr, cc); - int indx = (rr * ts + cc) >> 1; - int indxfc = (rr + shiftvfloor[c]) * ts + cc + shifthceil[c]; - int indxff = (rr + shiftvfloor[c]) * ts + cc + shifthfloor[c]; - int indxcc = (rr + shiftvceil[c]) * ts + cc + shifthceil[c]; - int indxcf = (rr + shiftvceil[c]) * ts + cc + shifthfloor[c]; -#ifdef __SSE2__ - vfloat shifthfracv = F2V(shifthfrac[c]); - vfloat shiftvfracv = F2V(shiftvfrac[c]); - for (; cc < cc1 - 10; cc += 8, indxfc += 8, indxff += 8, indxcc += 8, indxcf += 8, indx += 4) { - //perform CA correction using colour ratios or colour differences - vfloat Ginthfloorv = vintpf(shifthfracv, LC2VFU(rgb[1][indxfc]), LC2VFU(rgb[1][indxff])); - vfloat Ginthceilv = vintpf(shifthfracv, LC2VFU(rgb[1][indxcc]), LC2VFU(rgb[1][indxcf])); - //Gint is bilinear interpolation of G at CA shift point - vfloat Gintv = vintpf(shiftvfracv, Ginthceilv, Ginthfloorv); - - //determine R/B at grid points using colour differences at shift point plus interpolated G value at grid point - //but first we need to interpolate G-R/G-B to grid points... - STVFU(grbdiff[indx], Gintv - LVFU(rgb[c][indx])); - STVFU(gshift[indx], Gintv); - } - -#endif - for (; cc < cc1 - 4; cc += 2, indxfc += 2, indxff += 2, indxcc += 2, indxcf += 2, ++indx) { - //perform CA correction using colour ratios or colour differences - float Ginthfloor = intp(shifthfrac[c], rgb[1][indxfc], rgb[1][indxff]); - float Ginthceil = intp(shifthfrac[c], rgb[1][indxcc], rgb[1][indxcf]); - //Gint is bilinear interpolation of G at CA shift point - float Gint = intp(shiftvfrac[c], Ginthceil, Ginthfloor); - - //determine R/B at grid points using colour differences at shift point plus interpolated G value at grid point - //but first we need to interpolate G-R/G-B to grid points... - grbdiff[indx] = Gint - rgb[c][indx]; - gshift[indx] = Gint; - } - } - - shifthfrac[0] /= 2.f; - shifthfrac[2] /= 2.f; - shiftvfrac[0] /= 2.f; - shiftvfrac[2] /= 2.f; - -#ifdef __SSE2__ - vfloat zd25v = F2V(0.25f); - vfloat onev = F2V(1.f); - vfloat zd5v = F2V(0.5f); - vfloat epsv = F2V(eps); -#endif - for (int rr = 8; rr < rr1 - 8; rr++) { - int cc = 8 + (FC(rr, 2) & 1); - int c = FC(rr, cc); - int GRBdir0 = GRBdir[0][c]; - int GRBdir1 = GRBdir[1][c]; -#ifdef __SSE2__ - vfloat shifthfracc = F2V(shifthfrac[c]); - vfloat shiftvfracc = F2V(shiftvfrac[c]); - for (int indx = rr * ts + cc; cc < cc1 - 14; cc += 8, indx += 8) { - //interpolate colour difference from optical R/B locations to grid locations - vfloat grbdiffinthfloor = vintpf(shifthfracc, LVFU(grbdiff[(indx - GRBdir1) >> 1]), LVFU(grbdiff[indx >> 1])); - vfloat grbdiffinthceil = vintpf(shifthfracc, LVFU(grbdiff[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1]), LVFU(grbdiff[((rr - GRBdir0) * ts + cc) >> 1])); - //grbdiffint is bilinear interpolation of G-R/G-B at grid point - vfloat grbdiffint = vintpf(shiftvfracc, grbdiffinthceil, grbdiffinthfloor); - - //now determine R/B at grid points using interpolated colour differences and interpolated G value at grid point - vfloat cinv = LVFU(rgb[c][indx >> 1]); - vfloat rinv = LC2VFU(rgb[1][indx]); - vfloat RBint = rinv - grbdiffint; - vmask cmask = vmaskf_ge(vabsf(RBint - cinv), zd25v * (RBint + cinv)); - if(_mm_movemask_ps((vfloat)cmask)) { - // if for any of the 4 pixels the condition is true, do the math for all 4 pixels and mask the unused out at the end - //gradient weights using difference from G at CA shift points and G at grid points - vfloat p0 = onev / (epsv + vabsf(rinv - LVFU(gshift[indx >> 1]))); - vfloat p1 = onev / (epsv + vabsf(rinv - LVFU(gshift[(indx - GRBdir1) >> 1]))); - vfloat p2 = onev / (epsv + vabsf(rinv - LVFU(gshift[((rr - GRBdir0) * ts + cc) >> 1]))); - vfloat p3 = onev / (epsv + vabsf(rinv - LVFU(gshift[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1]))); - - grbdiffint = vself(cmask, (p0 * LVFU(grbdiff[indx >> 1]) + p1 * LVFU(grbdiff[(indx - GRBdir1) >> 1]) + - p2 * LVFU(grbdiff[((rr - GRBdir0) * ts + cc) >> 1]) + p3 * LVFU(grbdiff[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1])) / (p0 + p1 + p2 + p3), grbdiffint); - - } - vfloat grbdiffold = rinv - cinv; - RBint = rinv - grbdiffint; - RBint = vself(vmaskf_gt(vabsf(grbdiffold), vabsf(grbdiffint)), RBint, cinv); - RBint = vself(vmaskf_lt(grbdiffold * grbdiffint, ZEROV), rinv - zd5v * (grbdiffold + grbdiffint), RBint); - STVFU(rgb[c][indx >> 1], RBint); - } -#endif - for (int c = FC(rr, cc), indx = rr * ts + cc; cc < cc1 - 8; cc += 2, indx += 2) { - float grbdiffold = rgb[1][indx] - rgb[c][indx >> 1]; - - //interpolate colour difference from optical R/B locations to grid locations - float grbdiffinthfloor = intp(shifthfrac[c], grbdiff[(indx - GRBdir1) >> 1], grbdiff[indx >> 1]); - float grbdiffinthceil = intp(shifthfrac[c], grbdiff[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1], grbdiff[((rr - GRBdir0) * ts + cc) >> 1]); - //grbdiffint is bilinear interpolation of G-R/G-B at grid point - float grbdiffint = intp(shiftvfrac[c], grbdiffinthceil, grbdiffinthfloor); - - //now determine R/B at grid points using interpolated colour differences and interpolated G value at grid point - float RBint = rgb[1][indx] - grbdiffint; - - if (fabsf(RBint - rgb[c][indx >> 1]) < 0.25f * (RBint + rgb[c][indx >> 1])) { - if (fabsf(grbdiffold) > fabsf(grbdiffint) ) { - rgb[c][indx >> 1] = RBint; + if (row > -1 && row < height) { + int offset = (FC(row,max(left + 3, 0)) & 1); + int col = max(left + 3, 0) + offset; + int indx = rr * ts + 3 - (left < 0 ? (left+3) : 0) + offset; + #ifdef __SSE2__ + for(; col < min(cc1 + left - 3, width) - 7; col+=8, indx+=8) { + STVFU(Gtmp[(row * width + col) >> 1], LC2VFU(rgb[1][indx])); } + #endif + for(; col < min(cc1 + left - 3, width); col+=2, indx+=2) { + Gtmp[(row * width + col) >> 1] = rgb[1][indx]; + } + } + + } + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + #ifdef __SSE2__ + vfloat zd25v = F2V(0.25f); + #endif + for (int rr = 4; rr < rr1 - 4; rr++) { + int cc = 4 + (FC(rr, 2) & 1); + int indx = rr * ts + cc; + int c = FC(rr, cc); + #ifdef __SSE2__ + for (; cc < cc1 - 10; cc += 8, indx += 8) { + vfloat rgb1v = LC2VFU(rgb[1][indx]); + vfloat rgbcv = LVFU(rgb[c][indx >> 1]); + vfloat rgb1mv4 = LC2VFU(rgb[1][indx - v4]); + vfloat rgb1pv4 = LC2VFU(rgb[1][indx + v4]); + vfloat temp1v = vabsf(vabsf((rgb1v - rgbcv) - (rgb1pv4 - LVFU(rgb[c][(indx + v4) >> 1]))) + + vabsf(rgb1mv4 - LVFU(rgb[c][(indx - v4) >> 1]) - rgb1v + rgbcv) - + vabsf(rgb1mv4 - LVFU(rgb[c][(indx - v4) >> 1]) - rgb1pv4 + LVFU(rgb[c][(indx + v4) >> 1]))); + STVFU(rbhpfv[indx >> 1], temp1v); + vfloat rgb1m4 = LC2VFU(rgb[1][indx - 4]); + vfloat rgb1p4 = LC2VFU(rgb[1][indx + 4]); + vfloat temp2v = vabsf(vabsf((rgb1v - rgbcv) - (rgb1p4 - LVFU(rgb[c][(indx + 4) >> 1]))) + + vabsf(rgb1m4 - LVFU(rgb[c][(indx - 4) >> 1]) - rgb1v + rgbcv) - + vabsf(rgb1m4 - LVFU(rgb[c][(indx - 4) >> 1]) - rgb1p4 + LVFU(rgb[c][(indx + 4) >> 1]))); + STVFU(rbhpfh[indx >> 1], temp2v); + + //low and high pass 1D filters of G in vertical/horizontal directions + rgb1v = vmul2f(rgb1v); + vfloat glpfvv = (rgb1v + LC2VFU(rgb[1][indx + v2]) + LC2VFU(rgb[1][indx - v2])); + vfloat glpfhv = (rgb1v + LC2VFU(rgb[1][indx + 2]) + LC2VFU(rgb[1][indx - 2])); + rgbcv = vmul2f(rgbcv); + STVFU(rblpfv[indx >> 1], zd25v * vabsf(glpfvv - (rgbcv + LVFU(rgb[c][(indx + v2) >> 1]) + LVFU(rgb[c][(indx - v2) >> 1])))); + STVFU(rblpfh[indx >> 1], zd25v * vabsf(glpfhv - (rgbcv + LVFU(rgb[c][(indx + 2) >> 1]) + LVFU(rgb[c][(indx - 2) >> 1])))); + STVFU(grblpfv[indx >> 1], zd25v * (glpfvv + (rgbcv + LVFU(rgb[c][(indx + v2) >> 1]) + LVFU(rgb[c][(indx - v2) >> 1])))); + STVFU(grblpfh[indx >> 1], zd25v * (glpfhv + (rgbcv + LVFU(rgb[c][(indx + 2) >> 1]) + LVFU(rgb[c][(indx - 2) >> 1])))); + } + + #endif + for (; cc < cc1 - 4; cc += 2, indx += 2) { + rbhpfv[indx >> 1] = fabsf(fabsf((rgb[1][indx] - rgb[c][indx >> 1]) - (rgb[1][indx + v4] - rgb[c][(indx + v4) >> 1])) + + fabsf((rgb[1][indx - v4] - rgb[c][(indx - v4) >> 1]) - (rgb[1][indx] - rgb[c][indx >> 1])) - + fabsf((rgb[1][indx - v4] - rgb[c][(indx - v4) >> 1]) - (rgb[1][indx + v4] - rgb[c][(indx + v4) >> 1]))); + rbhpfh[indx >> 1] = fabsf(fabsf((rgb[1][indx] - rgb[c][indx >> 1]) - (rgb[1][indx + 4] - rgb[c][(indx + 4) >> 1])) + + fabsf((rgb[1][indx - 4] - rgb[c][(indx - 4) >> 1]) - (rgb[1][indx] - rgb[c][indx >> 1])) - + fabsf((rgb[1][indx - 4] - rgb[c][(indx - 4) >> 1]) - (rgb[1][indx + 4] - rgb[c][(indx + 4) >> 1]))); + + //low and high pass 1D filters of G in vertical/horizontal directions + float glpfv = (2.f * rgb[1][indx] + rgb[1][indx + v2] + rgb[1][indx - v2]); + float glpfh = (2.f * rgb[1][indx] + rgb[1][indx + 2] + rgb[1][indx - 2]); + rblpfv[indx >> 1] = 0.25f * fabsf(glpfv - (2.f * rgb[c][indx >> 1] + rgb[c][(indx + v2) >> 1] + rgb[c][(indx - v2) >> 1])); + rblpfh[indx >> 1] = 0.25f * fabsf(glpfh - (2.f * rgb[c][indx >> 1] + rgb[c][(indx + 2) >> 1] + rgb[c][(indx - 2) >> 1])); + grblpfv[indx >> 1] = 0.25f * (glpfv + (2.f * rgb[c][indx >> 1] + rgb[c][(indx + v2) >> 1] + rgb[c][(indx - v2) >> 1])); + grblpfh[indx >> 1] = 0.25f * (glpfh + (2.f * rgb[c][indx >> 1] + rgb[c][(indx + 2) >> 1] + rgb[c][(indx - 2) >> 1])); + } + } + + for (int dir = 0; dir < 2; dir++) { + for (int k = 0; k < 3; k++) { + for (int c = 0; c < 2; c++) { + coeff[dir][k][c] = 0; + } + } + } + + #ifdef __SSE2__ + vfloat zd3v = F2V(0.3f); + vfloat zd1v = F2V(0.1f); + vfloat zd5v = F2V(0.5f); + #endif + + // along line segments, find the point along each segment that minimizes the colour variance + // averaged over the tile; evaluate for up/down and left/right away from R/B grid point + for (int rr = 8; rr < rr1 - 8; rr++) { + int cc = 8 + (FC(rr, 2) & 1); + int indx = rr * ts + cc; + int c = FC(rr, cc); + #ifdef __SSE2__ + vfloat coeff00v = ZEROV; + vfloat coeff01v = ZEROV; + vfloat coeff02v = ZEROV; + vfloat coeff10v = ZEROV; + vfloat coeff11v = ZEROV; + vfloat coeff12v = ZEROV; + for (; cc < cc1 - 14; cc += 8, indx += 8) { + + //in linear interpolation, colour differences are a quadratic function of interpolation position; + //solve for the interpolation position that minimizes colour difference variance over the tile + + //vertical + vfloat temp1 = zd3v * (LC2VFU(rgb[1][indx + ts + 1]) - LC2VFU(rgb[1][indx - ts - 1])); + vfloat temp2 = zd3v * (LC2VFU(rgb[1][indx - ts + 1]) - LC2VFU(rgb[1][indx + ts - 1])); + vfloat gdiffvv = (LC2VFU(rgb[1][indx + ts]) - LC2VFU(rgb[1][indx - ts])) + (temp1 - temp2); + vfloat deltgrbv = LVFU(rgb[c][indx >> 1]) - LC2VFU(rgb[1][indx]); + + vfloat gradwtvv = (LVFU(rbhpfv[indx >> 1]) + zd5v * (LVFU(rbhpfv[(indx >> 1) + 1]) + LVFU(rbhpfv[(indx >> 1) - 1]))) * (LVFU(grblpfv[(indx >> 1) - v1]) + LVFU(grblpfv[(indx >> 1) + v1])) / (epsv + zd1v * (LVFU(grblpfv[(indx >> 1) - v1]) + LVFU(grblpfv[(indx >> 1) + v1])) + LVFU(rblpfv[(indx >> 1) - v1]) + LVFU(rblpfv[(indx >> 1) + v1])); + + coeff00v += gradwtvv * deltgrbv * deltgrbv; + coeff01v += gradwtvv * gdiffvv * deltgrbv; + coeff02v += gradwtvv * gdiffvv * gdiffvv; + + //horizontal + vfloat gdiffhv = (LC2VFU(rgb[1][indx + 1]) - LC2VFU(rgb[1][indx - 1])) + (temp1 + temp2); + + vfloat gradwthv = (LVFU(rbhpfh[indx >> 1]) + zd5v * (LVFU(rbhpfh[(indx >> 1) + v1]) + LVFU(rbhpfh[(indx >> 1) - v1]))) * (LVFU(grblpfh[(indx >> 1) - 1]) + LVFU(grblpfh[(indx >> 1) + 1])) / (epsv + zd1v * (LVFU(grblpfh[(indx >> 1) - 1]) + LVFU(grblpfh[(indx >> 1) + 1])) + LVFU(rblpfh[(indx >> 1) - 1]) + LVFU(rblpfh[(indx >> 1) + 1])); + + coeff10v += gradwthv * deltgrbv * deltgrbv; + coeff11v += gradwthv * gdiffhv * deltgrbv; + coeff12v += gradwthv * gdiffhv * gdiffhv; + } + + coeff[0][0][c>>1] += vhadd(coeff00v); + coeff[0][1][c>>1] += vhadd(coeff01v); + coeff[0][2][c>>1] += vhadd(coeff02v); + coeff[1][0][c>>1] += vhadd(coeff10v); + coeff[1][1][c>>1] += vhadd(coeff11v); + coeff[1][2][c>>1] += vhadd(coeff12v); + + #endif + for (; cc < cc1 - 8; cc += 2, indx += 2) { + + //in linear interpolation, colour differences are a quadratic function of interpolation position; + //solve for the interpolation position that minimizes colour difference variance over the tile + + //vertical + float gdiff = (rgb[1][indx + ts] - rgb[1][indx - ts]) + 0.3f * (rgb[1][indx + ts + 1] - rgb[1][indx - ts + 1] + rgb[1][indx + ts - 1] - rgb[1][indx - ts - 1]); + float deltgrb = (rgb[c][indx >> 1] - rgb[1][indx]); + + float gradwt = (rbhpfv[indx >> 1] + 0.5f * (rbhpfv[(indx >> 1) + 1] + rbhpfv[(indx >> 1) - 1]) ) * (grblpfv[(indx >> 1) - v1] + grblpfv[(indx >> 1) + v1]) / (eps + 0.1f * (grblpfv[(indx >> 1) - v1] + grblpfv[(indx >> 1) + v1]) + rblpfv[(indx >> 1) - v1] + rblpfv[(indx >> 1) + v1]); + + coeff[0][0][c>>1] += gradwt * deltgrb * deltgrb; + coeff[0][1][c>>1] += gradwt * gdiff * deltgrb; + coeff[0][2][c>>1] += gradwt * gdiff * gdiff; + + //horizontal + gdiff = (rgb[1][indx + 1] - rgb[1][indx - 1]) + 0.3f * (rgb[1][indx + 1 + ts] - rgb[1][indx - 1 + ts] + rgb[1][indx + 1 - ts] - rgb[1][indx - 1 - ts]); + + gradwt = (rbhpfh[indx >> 1] + 0.5f * (rbhpfh[(indx >> 1) + v1] + rbhpfh[(indx >> 1) - v1]) ) * (grblpfh[(indx >> 1) - 1] + grblpfh[(indx >> 1) + 1]) / (eps + 0.1f * (grblpfh[(indx >> 1) - 1] + grblpfh[(indx >> 1) + 1]) + rblpfh[(indx >> 1) - 1] + rblpfh[(indx >> 1) + 1]); + + coeff[1][0][c>>1] += gradwt * deltgrb * deltgrb; + coeff[1][1][c>>1] += gradwt * gdiff * deltgrb; + coeff[1][2][c>>1] += gradwt * gdiff * gdiff; + + // In Mathematica, + // f[x_]=Expand[Total[Flatten[ + // ((1-x) RotateLeft[Gint,shift1]+x RotateLeft[Gint,shift2]-cfapad)^2[[dv;;-1;;2,dh;;-1;;2]]]]]; + // extremum = -.5Coefficient[f[x],x]/Coefficient[f[x],x^2] + } + } + + for (int dir = 0; dir < 2; dir++) { + for (int k = 0; k < 3; k++) { + for (int c = 0; c < 2; c++) { + coeff[dir][k][c] *= 0.25f; + if(k == 1) { + coeff[dir][k][c] *= 0.3125f; + } else if(k == 2) { + coeff[dir][k][c] *= SQR(0.3125f); + } + } + } + } + + for (int c = 0; c < 2; c++) { + for (int dir = 0; dir < 2; dir++) { // vert/hor + + // CAshift[dir][c] are the locations + // that minimize colour difference variances; + // This is the approximate _optical_ location of the R/B pixels + if (coeff[dir][2][c] > eps2) { + CAshift[dir][c] = coeff[dir][1][c] / coeff[dir][2][c]; + blockwt[vblock * hblsz + hblock] = coeff[dir][2][c] / (eps + coeff[dir][0][c]) ; + } else { + CAshift[dir][c] = 17.0; + blockwt[vblock * hblsz + hblock] = 0; + } + + //data structure = CAshift[vert/hor][colour] + //dir : 0=vert, 1=hor + + //offset gives NW corner of square containing the min; dir : 0=vert, 1=hor + if (fabsf(CAshift[dir][c]) < 2.0f) { + blockavethr[dir][c] += CAshift[dir][c]; + blocksqavethr[dir][c] += SQR(CAshift[dir][c]); + blockdenomthr[dir][c] += 1; + } + //evaluate the shifts to the location that minimizes CA within the tile + blockshifts[vblock * hblsz + hblock][c][dir] = CAshift[dir][c]; //vert/hor CA shift for R/B + + }//vert/hor + }//colour + + if(plistener) { + progresscounter++; + + if(progresscounter % 8 == 0) + #pragma omp critical (cadetectpass1) + { + progress += (double)(8.0 * (ts - border2) * (ts - border2)) / (2 * height * width); + + if (progress > 1.0) { + progress = 1.0; + } + + plistener->setProgress(progress); + } + } + + } + + //end of diagnostic pass + #pragma omp critical (cadetectpass2) + { + for (int dir = 0; dir < 2; dir++) + for (int c = 0; c < 2; c++) { + blockdenom[dir][c] += blockdenomthr[dir][c]; + blocksqave[dir][c] += blocksqavethr[dir][c]; + blockave[dir][c] += blockavethr[dir][c]; + } + } + #pragma omp barrier + + #pragma omp single + { + for (int dir = 0; dir < 2; dir++) + for (int c = 0; c < 2; c++) { + if (blockdenom[dir][c]) { + blockvar[dir][c] = blocksqave[dir][c] / blockdenom[dir][c] - SQR(blockave[dir][c] / blockdenom[dir][c]); } else { + processpasstwo = false; + printf ("blockdenom vanishes \n"); + break; + } + } - //gradient weights using difference from G at CA shift points and G at grid points - float p0 = 1.f / (eps + fabsf(rgb[1][indx] - gshift[indx >> 1])); - float p1 = 1.f / (eps + fabsf(rgb[1][indx] - gshift[(indx - GRBdir1) >> 1])); - float p2 = 1.f / (eps + fabsf(rgb[1][indx] - gshift[((rr - GRBdir0) * ts + cc) >> 1])); - float p3 = 1.f / (eps + fabsf(rgb[1][indx] - gshift[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1])); + // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - grbdiffint = (p0 * grbdiff[indx >> 1] + p1 * grbdiff[(indx - GRBdir1) >> 1] + - p2 * grbdiff[((rr - GRBdir0) * ts + cc) >> 1] + p3 * grbdiff[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1]) / (p0 + p1 + p2 + p3) ; - - //now determine R/B at grid points using interpolated colour differences and interpolated G value at grid point - if (fabsf(grbdiffold) > fabsf(grbdiffint) ) { - rgb[c][indx >> 1] = rgb[1][indx] - grbdiffint; + //now prepare for CA correction pass + //first, fill border blocks of blockshift array + if(processpasstwo) { + for (int vblock = 1; vblock < vblsz - 1; vblock++) { //left and right sides + for (int c = 0; c < 2; c++) { + for (int i = 0; i < 2; i++) { + blockshifts[vblock * hblsz][c][i] = blockshifts[(vblock) * hblsz + 2][c][i]; + blockshifts[vblock * hblsz + hblsz - 1][c][i] = blockshifts[(vblock) * hblsz + hblsz - 3][c][i]; } } + } - //if colour difference interpolation overshot the correction, just desaturate - if (grbdiffold * grbdiffint < 0) { - rgb[c][indx >> 1] = rgb[1][indx] - 0.5f * (grbdiffold + grbdiffint); + for (int hblock = 0; hblock < hblsz; hblock++) { //top and bottom sides + for (int c = 0; c < 2; c++) { + for (int i = 0; i < 2; i++) { + blockshifts[hblock][c][i] = blockshifts[2 * hblsz + hblock][c][i]; + blockshifts[(vblsz - 1)*hblsz + hblock][c][i] = blockshifts[(vblsz - 3) * hblsz + hblock][c][i]; + } } } - } - // copy CA corrected results to temporary image matrix - for (int rr = border; rr < rr1 - border; rr++) { - int c = FC(rr + top, left + border + (FC(rr + top, 2) & 1)); - int row = rr + top; - int cc = border + (FC(rr, 2) & 1); - int indx = (row * width + cc + left) >> 1; - int indx1 = (rr * ts + cc) >> 1; -#ifdef __SSE2__ - for (; indx < (row * width + cc1 - border - 7 + left) >> 1; indx+=4, indx1 += 4) { - STVFU(RawDataTmp[indx], c65535v * LVFU(rgb[c][indx1])); + //end of filling border pixels of blockshift array + + //initialize fit arrays + double polymat[2][2][256], shiftmat[2][2][16]; + + for (int i = 0; i < 256; i++) { + polymat[0][0][i] = polymat[0][1][i] = polymat[1][0][i] = polymat[1][1][i] = 0; } -#endif - for (; indx < (row * width + cc1 - border + left) >> 1; indx++, indx1++) { - RawDataTmp[indx] = 65535.f * rgb[c][indx1]; + + for (int i = 0; i < 16; i++) { + shiftmat[0][0][i] = shiftmat[0][1][i] = shiftmat[1][0][i] = shiftmat[1][1][i] = 0; } - } - if(plistener) { - progresscounter++; + int numblox[2] = {0, 0}; - if(progresscounter % 8 == 0) - #pragma omp critical (cacorrect) - { - progress += (double)(8.0 * (ts - border2) * (ts - border2)) / (2 * height * width); + for (int vblock = 1; vblock < vblsz - 1; vblock++) + for (int hblock = 1; hblock < hblsz - 1; hblock++) { + // block 3x3 median of blockshifts for robustness + for (int c = 0; c < 2; c ++) { + float bstemp[2]; + for (int dir = 0; dir < 2; dir++) { + //temporary storage for median filter + const std::array p = { + blockshifts[(vblock - 1) * hblsz + hblock - 1][c][dir], + blockshifts[(vblock - 1) * hblsz + hblock][c][dir], + blockshifts[(vblock - 1) * hblsz + hblock + 1][c][dir], + blockshifts[(vblock) * hblsz + hblock - 1][c][dir], + blockshifts[(vblock) * hblsz + hblock][c][dir], + blockshifts[(vblock) * hblsz + hblock + 1][c][dir], + blockshifts[(vblock + 1) * hblsz + hblock - 1][c][dir], + blockshifts[(vblock + 1) * hblsz + hblock][c][dir], + blockshifts[(vblock + 1) * hblsz + hblock + 1][c][dir] + }; + bstemp[dir] = median(p); + } - if (progress > 1.0) { - progress = 1.0; + //now prepare coefficient matrix; use only data points within caautostrength/2 std devs of zero + if (SQR(bstemp[0]) > caautostrength * blockvar[0][c] || SQR(bstemp[1]) > caautostrength * blockvar[1][c]) { + continue; + } + + numblox[c]++; + + for (int dir = 0; dir < 2; dir++) { + double powVblockInit = 1.0; + for (int i = 0; i < polyord; i++) { + double powHblockInit = 1.0; + for (int j = 0; j < polyord; j++) { + double powVblock = powVblockInit; + for (int m = 0; m < polyord; m++) { + double powHblock = powHblockInit; + for (int n = 0; n < polyord; n++) { + polymat[c][dir][numpar * (polyord * i + j) + (polyord * m + n)] += powVblock * powHblock * blockwt[vblock * hblsz + hblock]; + powHblock *= hblock; + } + powVblock *= vblock; + } + shiftmat[c][dir][(polyord * i + j)] += powVblockInit * powHblockInit * bstemp[dir] * blockwt[vblock * hblsz + hblock]; + powHblockInit *= hblock; + } + powVblockInit *= vblock; + }//monomials + }//dir + }//c + }//blocks + + numblox[1] = min(numblox[0], numblox[1]); + + //if too few data points, restrict the order of the fit to linear + if (numblox[1] < 32) { + polyord = 2; + numpar = 4; + + if (numblox[1] < 10) { + + printf ("numblox = %d \n", numblox[1]); + processpasstwo = false; } - - plistener->setProgress(progress); } + + if(processpasstwo) + + //fit parameters to blockshifts + for (int c = 0; c < 2; c++) + for (int dir = 0; dir < 2; dir++) { + if (!LinEqSolve(numpar, polymat[c][dir], shiftmat[c][dir], fitparams[c][dir])) { + printf("CA correction pass failed -- can't solve linear equations for colour %d direction %d...\n", c, dir); + processpasstwo = false; + } + } } + //fitparams[polyord*i+j] gives the coefficients of (vblock^i hblock^j) in a polynomial fit for i,j<=4 } - - #pragma omp barrier -// copy temporary image matrix back to image matrix - #pragma omp for - - for(int row = 0; row < height; row++) { - int col = FC(row, 0) & 1; - int indx = (row * width + col) >> 1; -#ifdef __SSE2__ - for(; col < width - 7; col += 8, indx += 4) { - STC2VFU(rawData[row][col], LVFU(RawDataTmp[indx])); - } -#endif - for(; col < width - (W & 1); col += 2, indx++) { - rawData[row][col] = RawDataTmp[indx]; - } + //end of initialization for CA correction pass + //only executed if autoCA is true } + // Main algorithm: Tile loop + if(processpasstwo) { + float *grbdiff = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); // there is no overlap in buffer usage => share + //green interpolated to optical sample points for R/B + float *gshift = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); // there is no overlap in buffer usage => share + #pragma omp for schedule(dynamic) collapse(2) nowait + + for (int top = -border; top < height; top += ts - border2) + for (int left = -border; left < width - (W & 1); left += ts - border2) { + memset(bufferThr, 0, buffersizePassTwo); + float lblockshifts[2][2]; + const int vblock = ((top + border) / (ts - border2)) + 1; + const int hblock = ((left + border) / (ts - border2)) + 1; + const int bottom = min(top + ts, height + border); + const int right = min(left + ts, width - (W & 1) + border); + const int rr1 = bottom - top; + const int cc1 = right - left; + + const int rrmin = top < 0 ? border : 0; + const int rrmax = bottom > height ? height - top : rr1; + const int ccmin = left < 0 ? border : 0; + const int ccmax = (right > width - (W & 1)) ? width - (W & 1) - left : cc1; + + // rgb from input CFA data + // rgb values should be floating point number between 0 and 1 + // after white balance multipliers are applied + + #ifdef __SSE2__ + vfloat c65535v = F2V(65535.f); + vmask gmask = _mm_set_epi32(0, 0xffffffff, 0, 0xffffffff); + #endif + for (int rr = rrmin; rr < rrmax; rr++) { + int row = rr + top; + int cc = ccmin; + int col = cc + left; + int indx = row * width + col; + int indx1 = rr * ts + cc; + #ifdef __SSE2__ + int c = FC(rr, cc); + if(c & 1) { + rgb[1][indx1] = rawData[row][col] / 65535.f; + indx++; + indx1++; + cc++; + col++; + c = FC(rr, cc); + } + for (; cc < ccmax - 7; cc += 8, col += 8, indx += 8, indx1 += 8) { + vfloat val1v = LVFU(rawData[row][col]) / c65535v; + vfloat val2v = LVFU(rawData[row][col + 4]) / c65535v; + STVFU(rgb[c][indx1 >> 1], _mm_shuffle_ps(val1v, val2v, _MM_SHUFFLE(2, 0, 2, 0))); + vfloat gtmpv = LVFU(Gtmp[indx >> 1]); + STVFU(rgb[1][indx1], vself(gmask, PERMUTEPS(gtmpv, _MM_SHUFFLE(1, 1, 0, 0)), val1v)); + STVFU(rgb[1][indx1 + 4], vself(gmask, PERMUTEPS(gtmpv, _MM_SHUFFLE(3, 3, 2, 2)), val2v)); + } + #endif + for (; cc < ccmax; cc++, col++, indx++, indx1++) { + int c = FC(rr, cc); + rgb[c][indx1 >> ((c & 1) ^ 1)] = rawData[row][col] / 65535.f; + + if ((c & 1) == 0) { + rgb[1][indx1] = Gtmp[indx >> 1]; + } + } + } + // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + //fill borders + if (rrmin > 0) { + for (int rr = 0; rr < border; rr++) + for (int cc = ccmin; cc < ccmax; cc++) { + int c = FC(rr, cc); + rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][((border2 - rr) * ts + cc) >> ((c & 1) ^ 1)]; + rgb[1][rr * ts + cc] = rgb[1][(border2 - rr) * ts + cc]; + } + } + + if (rrmax < rr1) { + for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) + for (int cc = ccmin; cc < ccmax; cc++) { + int c = FC(rr, cc); + rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = (rawData[(height - rr - 2)][left + cc]) / 65535.f; + if ((c & 1) == 0) { + rgb[1][(rrmax + rr)*ts + cc] = Gtmp[((height - rr - 2) * width + left + cc) >> 1]; + } + } + } + + if (ccmin > 0) { + for (int rr = rrmin; rr < rrmax; rr++) + for (int cc = 0; cc < border; cc++) { + int c = FC(rr, cc); + rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][(rr * ts + border2 - cc) >> ((c & 1) ^ 1)]; + rgb[1][rr * ts + cc] = rgb[1][rr * ts + border2 - cc]; + } + } + + if (ccmax < cc1) { + for (int rr = rrmin; rr < rrmax; rr++) + for (int cc = 0; cc < std::min(border, cc1 - ccmax); cc++) { + int c = FC(rr, cc); + rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = (rawData[(top + rr)][(width - cc - 2)]) / 65535.f; + if ((c & 1) == 0) { + rgb[1][rr * ts + ccmax + cc] = Gtmp[((top + rr) * width + (width - cc - 2)) >> 1]; + } + } + } + + //also, fill the image corners + if (rrmin > 0 && ccmin > 0) { + for (int rr = 0; rr < border; rr++) + for (int cc = 0; cc < border; cc++) { + int c = FC(rr, cc); + rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = (rawData[border2 - rr][border2 - cc]) / 65535.f; + if ((c & 1) == 0) { + rgb[1][rr * ts + cc] = Gtmp[((border2 - rr) * width + border2 - cc) >> 1]; + } + } + } + + if (rrmax < rr1 && ccmax < cc1) { + for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) + for (int cc = 0; cc < std::min(border, cc1 - ccmax); cc++) { + int c = FC(rr, cc); + rgb[c][((rrmax + rr)*ts + ccmax + cc) >> ((c & 1) ^ 1)] = (rawData[(height - rr - 2)][(width - cc - 2)]) / 65535.f; + if ((c & 1) == 0) { + rgb[1][(rrmax + rr)*ts + ccmax + cc] = Gtmp[((height - rr - 2) * width + (width - cc - 2)) >> 1]; + } + } + } + + if (rrmin > 0 && ccmax < cc1) { + for (int rr = 0; rr < border; rr++) + for (int cc = 0; cc < std::min(border, cc1 - ccmax); cc++) { + int c = FC(rr, cc); + rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = (rawData[(border2 - rr)][(width - cc - 2)]) / 65535.f; + if ((c & 1) == 0) { + rgb[1][rr * ts + ccmax + cc] = Gtmp[((border2 - rr) * width + (width - cc - 2)) >> 1]; + } + } + } + + if (rrmax < rr1 && ccmin > 0) { + for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) + for (int cc = 0; cc < border; cc++) { + int c = FC(rr, cc); + rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = (rawData[(height - rr - 2)][(border2 - cc)]) / 65535.f; + if ((c & 1) == 0) { + rgb[1][(rrmax + rr)*ts + cc] = Gtmp[((height - rr - 2) * width + (border2 - cc)) >> 1]; + } + } + } + + //end of border fill + // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + if (!autoCA || fitParamsIn) { + #ifdef __SSE2__ + const vfloat onev = F2V(1.f); + const vfloat epsv = F2V(eps); + #endif + + //manual CA correction; use red/blue slider values to set CA shift parameters + for (int rr = 3; rr < rr1 - 3; rr++) { + int cc = 3 + FC(rr, 1), c = FC(rr,cc), indx = rr * ts + cc; + #ifdef __SSE2__ + for (; cc < cc1 - 10; cc += 8, indx += 8) { + //compute directional weights using image gradients + vfloat val1v = epsv + vabsf(LC2VFU(rgb[1][(rr + 1) * ts + cc]) - LC2VFU(rgb[1][(rr - 1) * ts + cc])); + vfloat val2v = epsv + vabsf(LC2VFU(rgb[1][indx + 1]) - LC2VFU(rgb[1][indx - 1])); + vfloat wtuv = onev / SQRV(val1v + vabsf(LVFU(rgb[c][(rr * ts + cc) >> 1]) - LVFU(rgb[c][((rr - 2) * ts + cc) >> 1])) + vabsf(LC2VFU(rgb[1][(rr - 1) * ts + cc]) - LC2VFU(rgb[1][(rr - 3) * ts + cc]))); + vfloat wtdv = onev / SQRV(val1v + vabsf(LVFU(rgb[c][(rr * ts + cc) >> 1]) - LVFU(rgb[c][((rr + 2) * ts + cc) >> 1])) + vabsf(LC2VFU(rgb[1][(rr + 1) * ts + cc]) - LC2VFU(rgb[1][(rr + 3) * ts + cc]))); + vfloat wtlv = onev / SQRV(val2v + vabsf(LVFU(rgb[c][indx >> 1]) - LVFU(rgb[c][(indx - 2) >> 1])) + vabsf(LC2VFU(rgb[1][indx - 1]) - LC2VFU(rgb[1][indx - 3]))); + vfloat wtrv = onev / SQRV(val2v + vabsf(LVFU(rgb[c][indx >> 1]) - LVFU(rgb[c][(indx + 2) >> 1])) + vabsf(LC2VFU(rgb[1][indx + 1]) - LC2VFU(rgb[1][indx + 3]))); + + //store in rgb array the interpolated G value at R/B grid points using directional weighted average + STC2VFU(rgb[1][indx], (wtuv * LC2VFU(rgb[1][indx - v1]) + wtdv * LC2VFU(rgb[1][indx + v1]) + wtlv * LC2VFU(rgb[1][indx - 1]) + wtrv * LC2VFU(rgb[1][indx + 1])) / (wtuv + wtdv + wtlv + wtrv)); + } + #endif + for (; cc < cc1 - 3; cc += 2, indx += 2) { + //compute directional weights using image gradients + float wtu = 1.f / SQR(eps + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr - 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr - 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr - 1) * ts + cc] - rgb[1][(rr - 3) * ts + cc])); + float wtd = 1.f / SQR(eps + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr - 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr + 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr + 3) * ts + cc])); + float wtl = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc - 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc - 2) >> 1]) + fabsf(rgb[1][rr * ts + cc - 1] - rgb[1][rr * ts + cc - 3])); + float wtr = 1.f / SQR(eps + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc - 1]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][(rr * ts + cc + 2) >> 1]) + fabsf(rgb[1][rr * ts + cc + 1] - rgb[1][rr * ts + cc + 3])); + + //store in rgb array the interpolated G value at R/B grid points using directional weighted average + rgb[1][indx] = (wtu * rgb[1][indx - v1] + wtd * rgb[1][indx + v1] + wtl * rgb[1][indx - 1] + wtr * rgb[1][indx + 1]) / (wtu + wtd + wtl + wtr); + } + } + } + if (!autoCA) { + float hfrac = -((float)(hblock - 0.5) / (hblsz - 2) - 0.5); + float vfrac = -((float)(vblock - 0.5) / (vblsz - 2) - 0.5) * height / width; + lblockshifts[0][0] = 2 * vfrac * cared; + lblockshifts[0][1] = 2 * hfrac * cared; + lblockshifts[1][0] = 2 * vfrac * cablue; + lblockshifts[1][1] = 2 * hfrac * cablue; + } else { + //CA auto correction; use CA diagnostic pass to set shift parameters + lblockshifts[0][0] = lblockshifts[0][1] = 0; + lblockshifts[1][0] = lblockshifts[1][1] = 0; + double powVblock = 1.0; + for (int i = 0; i < polyord; i++) { + double powHblock = powVblock; + for (int j = 0; j < polyord; j++) { + lblockshifts[0][0] += powHblock * fitparams[0][0][polyord * i + j]; + lblockshifts[0][1] += powHblock * fitparams[0][1][polyord * i + j]; + lblockshifts[1][0] += powHblock * fitparams[1][0][polyord * i + j]; + lblockshifts[1][1] += powHblock * fitparams[1][1][polyord * i + j]; + powHblock *= hblock; + } + powVblock *= vblock; + } + constexpr float bslim = 3.99; //max allowed CA shift + lblockshifts[0][0] = LIM(lblockshifts[0][0], -bslim, bslim); + lblockshifts[0][1] = LIM(lblockshifts[0][1], -bslim, bslim); + lblockshifts[1][0] = LIM(lblockshifts[1][0], -bslim, bslim); + lblockshifts[1][1] = LIM(lblockshifts[1][1], -bslim, bslim); + }//end of setting CA shift parameters + + + for (int c = 0; c < 3; c += 2) { + + //some parameters for the bilinear interpolation + shiftvfloor[c] = floor((float)lblockshifts[c>>1][0]); + shiftvceil[c] = ceil((float)lblockshifts[c>>1][0]); + shiftvfrac[c] = lblockshifts[c>>1][0] - shiftvfloor[c]; + + shifthfloor[c] = floor((float)lblockshifts[c>>1][1]); + shifthceil[c] = ceil((float)lblockshifts[c>>1][1]); + shifthfrac[c] = lblockshifts[c>>1][1] - shifthfloor[c]; + + GRBdir[0][c] = lblockshifts[c>>1][0] > 0 ? 2 : -2; + GRBdir[1][c] = lblockshifts[c>>1][1] > 0 ? 2 : -2; + + } + + + for (int rr = 4; rr < rr1 - 4; rr++) { + int cc = 4 + (FC(rr, 2) & 1); + int c = FC(rr, cc); + int indx = (rr * ts + cc) >> 1; + int indxfc = (rr + shiftvfloor[c]) * ts + cc + shifthceil[c]; + int indxff = (rr + shiftvfloor[c]) * ts + cc + shifthfloor[c]; + int indxcc = (rr + shiftvceil[c]) * ts + cc + shifthceil[c]; + int indxcf = (rr + shiftvceil[c]) * ts + cc + shifthfloor[c]; + #ifdef __SSE2__ + vfloat shifthfracv = F2V(shifthfrac[c]); + vfloat shiftvfracv = F2V(shiftvfrac[c]); + for (; cc < cc1 - 10; cc += 8, indxfc += 8, indxff += 8, indxcc += 8, indxcf += 8, indx += 4) { + //perform CA correction using colour ratios or colour differences + vfloat Ginthfloorv = vintpf(shifthfracv, LC2VFU(rgb[1][indxfc]), LC2VFU(rgb[1][indxff])); + vfloat Ginthceilv = vintpf(shifthfracv, LC2VFU(rgb[1][indxcc]), LC2VFU(rgb[1][indxcf])); + //Gint is bilinear interpolation of G at CA shift point + vfloat Gintv = vintpf(shiftvfracv, Ginthceilv, Ginthfloorv); + + //determine R/B at grid points using colour differences at shift point plus interpolated G value at grid point + //but first we need to interpolate G-R/G-B to grid points... + STVFU(grbdiff[indx], Gintv - LVFU(rgb[c][indx])); + STVFU(gshift[indx], Gintv); + } + + #endif + for (; cc < cc1 - 4; cc += 2, indxfc += 2, indxff += 2, indxcc += 2, indxcf += 2, ++indx) { + //perform CA correction using colour ratios or colour differences + float Ginthfloor = intp(shifthfrac[c], rgb[1][indxfc], rgb[1][indxff]); + float Ginthceil = intp(shifthfrac[c], rgb[1][indxcc], rgb[1][indxcf]); + //Gint is bilinear interpolation of G at CA shift point + float Gint = intp(shiftvfrac[c], Ginthceil, Ginthfloor); + + //determine R/B at grid points using colour differences at shift point plus interpolated G value at grid point + //but first we need to interpolate G-R/G-B to grid points... + grbdiff[indx] = Gint - rgb[c][indx]; + gshift[indx] = Gint; + } + } + + shifthfrac[0] /= 2.f; + shifthfrac[2] /= 2.f; + shiftvfrac[0] /= 2.f; + shiftvfrac[2] /= 2.f; + + #ifdef __SSE2__ + vfloat zd25v = F2V(0.25f); + vfloat onev = F2V(1.f); + vfloat zd5v = F2V(0.5f); + vfloat epsv = F2V(eps); + #endif + for (int rr = 8; rr < rr1 - 8; rr++) { + int cc = 8 + (FC(rr, 2) & 1); + int c = FC(rr, cc); + int GRBdir0 = GRBdir[0][c]; + int GRBdir1 = GRBdir[1][c]; + #ifdef __SSE2__ + vfloat shifthfracc = F2V(shifthfrac[c]); + vfloat shiftvfracc = F2V(shiftvfrac[c]); + for (int indx = rr * ts + cc; cc < cc1 - 14; cc += 8, indx += 8) { + //interpolate colour difference from optical R/B locations to grid locations + vfloat grbdiffinthfloor = vintpf(shifthfracc, LVFU(grbdiff[(indx - GRBdir1) >> 1]), LVFU(grbdiff[indx >> 1])); + vfloat grbdiffinthceil = vintpf(shifthfracc, LVFU(grbdiff[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1]), LVFU(grbdiff[((rr - GRBdir0) * ts + cc) >> 1])); + //grbdiffint is bilinear interpolation of G-R/G-B at grid point + vfloat grbdiffint = vintpf(shiftvfracc, grbdiffinthceil, grbdiffinthfloor); + + //now determine R/B at grid points using interpolated colour differences and interpolated G value at grid point + vfloat cinv = LVFU(rgb[c][indx >> 1]); + vfloat rinv = LC2VFU(rgb[1][indx]); + vfloat RBint = rinv - grbdiffint; + vmask cmask = vmaskf_ge(vabsf(RBint - cinv), zd25v * (RBint + cinv)); + if(_mm_movemask_ps((vfloat)cmask)) { + // if for any of the 4 pixels the condition is true, do the math for all 4 pixels and mask the unused out at the end + //gradient weights using difference from G at CA shift points and G at grid points + vfloat p0 = onev / (epsv + vabsf(rinv - LVFU(gshift[indx >> 1]))); + vfloat p1 = onev / (epsv + vabsf(rinv - LVFU(gshift[(indx - GRBdir1) >> 1]))); + vfloat p2 = onev / (epsv + vabsf(rinv - LVFU(gshift[((rr - GRBdir0) * ts + cc) >> 1]))); + vfloat p3 = onev / (epsv + vabsf(rinv - LVFU(gshift[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1]))); + + grbdiffint = vself(cmask, (p0 * LVFU(grbdiff[indx >> 1]) + p1 * LVFU(grbdiff[(indx - GRBdir1) >> 1]) + + p2 * LVFU(grbdiff[((rr - GRBdir0) * ts + cc) >> 1]) + p3 * LVFU(grbdiff[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1])) / (p0 + p1 + p2 + p3), grbdiffint); + + } + vfloat grbdiffold = rinv - cinv; + RBint = rinv - grbdiffint; + RBint = vself(vmaskf_gt(vabsf(grbdiffold), vabsf(grbdiffint)), RBint, cinv); + RBint = vself(vmaskf_lt(grbdiffold * grbdiffint, ZEROV), rinv - zd5v * (grbdiffold + grbdiffint), RBint); + STVFU(rgb[c][indx >> 1], RBint); + } + #endif + for (int c = FC(rr, cc), indx = rr * ts + cc; cc < cc1 - 8; cc += 2, indx += 2) { + float grbdiffold = rgb[1][indx] - rgb[c][indx >> 1]; + + //interpolate colour difference from optical R/B locations to grid locations + float grbdiffinthfloor = intp(shifthfrac[c], grbdiff[(indx - GRBdir1) >> 1], grbdiff[indx >> 1]); + float grbdiffinthceil = intp(shifthfrac[c], grbdiff[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1], grbdiff[((rr - GRBdir0) * ts + cc) >> 1]); + //grbdiffint is bilinear interpolation of G-R/G-B at grid point + float grbdiffint = intp(shiftvfrac[c], grbdiffinthceil, grbdiffinthfloor); + + //now determine R/B at grid points using interpolated colour differences and interpolated G value at grid point + float RBint = rgb[1][indx] - grbdiffint; + + if (fabsf(RBint - rgb[c][indx >> 1]) < 0.25f * (RBint + rgb[c][indx >> 1])) { + if (fabsf(grbdiffold) > fabsf(grbdiffint) ) { + rgb[c][indx >> 1] = RBint; + } + } else { + + //gradient weights using difference from G at CA shift points and G at grid points + float p0 = 1.f / (eps + fabsf(rgb[1][indx] - gshift[indx >> 1])); + float p1 = 1.f / (eps + fabsf(rgb[1][indx] - gshift[(indx - GRBdir1) >> 1])); + float p2 = 1.f / (eps + fabsf(rgb[1][indx] - gshift[((rr - GRBdir0) * ts + cc) >> 1])); + float p3 = 1.f / (eps + fabsf(rgb[1][indx] - gshift[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1])); + + grbdiffint = (p0 * grbdiff[indx >> 1] + p1 * grbdiff[(indx - GRBdir1) >> 1] + + p2 * grbdiff[((rr - GRBdir0) * ts + cc) >> 1] + p3 * grbdiff[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1]) / (p0 + p1 + p2 + p3) ; + + //now determine R/B at grid points using interpolated colour differences and interpolated G value at grid point + if (fabsf(grbdiffold) > fabsf(grbdiffint) ) { + rgb[c][indx >> 1] = rgb[1][indx] - grbdiffint; + } + } + + //if colour difference interpolation overshot the correction, just desaturate + if (grbdiffold * grbdiffint < 0) { + rgb[c][indx >> 1] = rgb[1][indx] - 0.5f * (grbdiffold + grbdiffint); + } + } + } + + // copy CA corrected results to temporary image matrix + for (int rr = border; rr < rr1 - border; rr++) { + int c = FC(rr + top, left + border + (FC(rr + top, 2) & 1)); + int row = rr + top; + int cc = border + (FC(rr, 2) & 1); + int indx = (row * width + cc + left) >> 1; + int indx1 = (rr * ts + cc) >> 1; + #ifdef __SSE2__ + for (; indx < (row * width + cc1 - border - 7 + left) >> 1; indx+=4, indx1 += 4) { + STVFU(RawDataTmp[indx], c65535v * LVFU(rgb[c][indx1])); + } + #endif + for (; indx < (row * width + cc1 - border + left) >> 1; indx++, indx1++) { + RawDataTmp[indx] = 65535.f * rgb[c][indx1]; + } + } + + if(plistener) { + progresscounter++; + + if(progresscounter % 8 == 0) + #pragma omp critical (cacorrect) + { + progress += (double)(8.0 * (ts - border2) * (ts - border2)) / (2 * height * width); + + if (progress > 1.0) { + progress = 1.0; + } + + plistener->setProgress(progress); + } + } + + } + + #pragma omp barrier + // copy temporary image matrix back to image matrix + #pragma omp for + + for(int row = 0; row < height; row++) { + int col = FC(row, 0) & 1; + int indx = (row * width + col) >> 1; + #ifdef __SSE2__ + for(; col < width - 7; col += 8, indx += 4) { + STC2VFU(rawData[row][col], LVFU(RawDataTmp[indx])); + } + #endif + for(; col < width - (W & 1); col += 2, indx++) { + rawData[row][col] = RawDataTmp[indx]; + } + } + + } + + // clean up + free(bufferThr); } - - // clean up - free(bufferThr); } - if(autoCA && fitParamsTransfer && fitParamsOut) { // store calculated parameters int index = 0; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index e7225e993..29e52b905 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2561,6 +2561,7 @@ RAWParams::RAWParams() : ff_AutoClipControl(false), ff_clipControl(0), ca_autocorrect(false), + caautoiterations(1), cared(0.0), cablue(0.0), expos(1.0), @@ -2585,6 +2586,7 @@ bool RAWParams::operator ==(const RAWParams& other) const && ff_AutoClipControl == other.ff_AutoClipControl && ff_clipControl == other.ff_clipControl && ca_autocorrect == other.ca_autocorrect + && caautoiterations == other.caautoiterations && cared == other.cared && cablue == other.cablue && expos == other.expos @@ -3381,6 +3383,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->raw.ff_AutoClipControl, "RAW", "FlatFieldAutoClipControl", raw.ff_AutoClipControl, keyFile); saveToKeyfile(!pedited || pedited->raw.ff_clipControl, "RAW", "FlatFieldClipControl", raw.ff_clipControl, keyFile); saveToKeyfile(!pedited || pedited->raw.ca_autocorrect, "RAW", "CA", raw.ca_autocorrect, keyFile); + saveToKeyfile(!pedited || pedited->raw.caautoiterations, "RAW", "CAAutoIterations", raw.caautoiterations, keyFile); saveToKeyfile(!pedited || pedited->raw.cared, "RAW", "CARed", raw.cared, keyFile); saveToKeyfile(!pedited || pedited->raw.cablue, "RAW", "CABlue", raw.cablue, keyFile); saveToKeyfile(!pedited || pedited->raw.hotPixelFilter, "RAW", "HotPixelFilter", raw.hotPixelFilter, keyFile); @@ -4753,6 +4756,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } assignFromKeyfile(keyFile, "RAW", "CA", pedited, raw.ca_autocorrect, pedited->raw.ca_autocorrect); + assignFromKeyfile(keyFile, "RAW", "CAAutoIterations", pedited, raw.caautoiterations, pedited->raw.caautoiterations); assignFromKeyfile(keyFile, "RAW", "CARed", pedited, raw.cared, pedited->raw.cared); assignFromKeyfile(keyFile, "RAW", "CABlue", pedited, raw.cablue, pedited->raw.cablue); // For compatibility to elder pp3 versions diff --git a/rtengine/procparams.h b/rtengine/procparams.h index bbc9763cf..8e8978601 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1368,6 +1368,7 @@ struct RAWParams { int ff_clipControl; bool ca_autocorrect; + int caautoiterations; double cared; double cablue; diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 85a02c85e..a4a68cc17 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2009,13 +2009,13 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } if(numFrames == 4) { double fitParams[64]; - float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[0], fitParams, false, true, nullptr, false); + float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, *rawDataFrames[0], fitParams, false, true, nullptr, false); for(int i = 1; i < 3; ++i) { - CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[i], fitParams, true, false, buffer, false); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, *rawDataFrames[i], fitParams, true, false, buffer, false); } - CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, *rawDataFrames[3], fitParams, true, false, buffer, true); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, *rawDataFrames[3], fitParams, true, false, buffer, true); } else { - CA_correct_RT(raw.ca_autocorrect, raw.cared, raw.cablue, 8.0, rawData, nullptr, false, false, nullptr, true); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, rawData, nullptr, false, false, nullptr, true); } } diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 95c4dbe22..47fc756a9 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -239,7 +239,7 @@ protected: inline void interpolate_row_rb (float* ar, float* ab, float* pg, float* cg, float* ng, int i); inline void interpolate_row_rb_mul_pp (const array2D &rawData, float* ar, float* ab, float* pg, float* cg, float* ng, int i, float r_mul, float g_mul, float b_mul, int x1, int width, int skip); - float* CA_correct_RT (const bool autoCA, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer, bool fitParamsIn, bool fitParamsOut, float * buffer, bool freeBuffer); + float* CA_correct_RT (const bool autoCA, const size_t autoIterations, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer, bool fitParamsIn, bool fitParamsOut, float * buffer, bool freeBuffer); void ddct8x8s(int isgn, float a[8][8]); void processRawWhitepoint (float expos, float preser, array2D &rawData); // exposure before interpolation diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 400568203..c9ce7affc 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -431,6 +431,7 @@ void ParamsEdited::set(bool v) raw.xtranssensor.exBlackGreen = v; raw.xtranssensor.exBlackBlue = v; raw.ca_autocorrect = v; + raw.caautoiterations = v; raw.cablue = v; raw.cared = v; raw.hotPixelFilter = v; @@ -986,6 +987,7 @@ void ParamsEdited::initFrom(const std::vector& raw.xtranssensor.exBlackGreen = raw.xtranssensor.exBlackGreen && p.raw.xtranssensor.blackgreen == other.raw.xtranssensor.blackgreen; raw.xtranssensor.exBlackBlue = raw.xtranssensor.exBlackBlue && p.raw.xtranssensor.blackblue == other.raw.xtranssensor.blackblue; raw.ca_autocorrect = raw.ca_autocorrect && p.raw.ca_autocorrect == other.raw.ca_autocorrect; + raw.caautoiterations = raw.caautoiterations && p.raw.caautoiterations == other.raw.caautoiterations; raw.cared = raw.cared && p.raw.cared == other.raw.cared; raw.cablue = raw.cablue && p.raw.cablue == other.raw.cablue; raw.hotPixelFilter = raw.hotPixelFilter && p.raw.hotPixelFilter == other.raw.hotPixelFilter; @@ -2626,6 +2628,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.raw.ca_autocorrect = mods.raw.ca_autocorrect; } + if (raw.caautoiterations) { + toEdit.raw.caautoiterations = dontforceSet && options.baBehav[ADDSET_RAWCACORR] ? toEdit.raw.caautoiterations + mods.raw.caautoiterations : mods.raw.caautoiterations; + } + if (raw.cared) { toEdit.raw.cared = dontforceSet && options.baBehav[ADDSET_RAWCACORR] ? toEdit.raw.cared + mods.raw.cared : mods.raw.cared; } @@ -3127,7 +3133,7 @@ bool RAWParamsEdited::XTransSensor::isUnchanged() const bool RAWParamsEdited::isUnchanged() const { - return bayersensor.isUnchanged() && xtranssensor.isUnchanged() && ca_autocorrect && cared && cablue && hotPixelFilter && deadPixelFilter && hotdeadpix_thresh && darkFrame + return bayersensor.isUnchanged() && xtranssensor.isUnchanged() && ca_autocorrect && caautoiterations && cared && cablue && hotPixelFilter && deadPixelFilter && hotdeadpix_thresh && darkFrame && df_autoselect && ff_file && ff_AutoSelect && ff_BlurRadius && ff_BlurType && exPos && exPreser && ff_AutoClipControl && ff_clipControl; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index c4c36ce61..1cd16290c 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -787,6 +787,7 @@ public: XTransSensor xtranssensor; bool ca_autocorrect; + bool caautoiterations; bool cared; bool cablue; bool hotPixelFilter; diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc index eb1bbbfee..556360bda 100644 --- a/rtgui/partialpastedlg.cc +++ b/rtgui/partialpastedlg.cc @@ -901,6 +901,7 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param if (!raw_ca_autocorrect->get_active ()) { filterPE.raw.ca_autocorrect = falsePE.raw.ca_autocorrect; + filterPE.raw.caautoiterations = falsePE.raw.caautoiterations; } if (!raw_caredblue->get_active ()) { diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 2f3c54522..7e75682e0 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -17,6 +17,7 @@ * along with RawTherapee. If not, see . */ #include "rawcacorrection.h" +#include "eventmapper.h" #include "guiutils.h" #include "rtimage.h" @@ -25,6 +26,9 @@ using namespace rtengine::procparams; RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROMATABERR_LABEL")) { + auto m = ProcEventMapper::getInstance(); + EvPreProcessCAAutoiterations = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_AUTOIT"); + Gtk::Image* icaredL = Gtk::manage (new RTImage ("circle-red-cyan-small.png")); Gtk::Image* icaredR = Gtk::manage (new RTImage ("circle-cyan-red-small.png")); Gtk::Image* icablueL = Gtk::manage (new RTImage ("circle-blue-yellow-small.png")); @@ -33,6 +37,13 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM caAutocorrect = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AUTO"), multiImage)); caAutocorrect->setCheckBoxListener (this); + caAutoiterations = Gtk::manage(new Adjuster (M("TP_RAWCACORR_AUTOIT"), 1, 3, 1, 1)); + caAutoiterations->setAdjusterListener (this); + + if (caAutoiterations->delay < options.adjusterMaxDelay) { + caAutoiterations->delay = options.adjusterMaxDelay; + } + caRed = Gtk::manage(new Adjuster (M("TP_RAWCACORR_CARED"), -8.0, 8.0, 0.1, 0, icaredL, icaredR)); caRed->setAdjusterListener (this); @@ -51,6 +62,7 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM caBlue->show(); pack_start( *caAutocorrect, Gtk::PACK_SHRINK, 4); + pack_start( *caAutoiterations, Gtk::PACK_SHRINK, 4); pack_start( *caRed, Gtk::PACK_SHRINK, 4); pack_start( *caBlue, Gtk::PACK_SHRINK, 4); @@ -62,15 +74,18 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi if(pedited ) { caAutocorrect->setEdited(pedited->raw.ca_autocorrect); + caAutoiterations->setEditedState( pedited->raw.cared ? Edited : UnEdited ); caRed->setEditedState( pedited->raw.cared ? Edited : UnEdited ); caBlue->setEditedState( pedited->raw.cablue ? Edited : UnEdited ); } // disable Red and Blue sliders when caAutocorrect is enabled + caAutoiterations->set_sensitive(pp->raw.ca_autocorrect); caRed->set_sensitive(!pp->raw.ca_autocorrect); caBlue->set_sensitive(!pp->raw.ca_autocorrect); caAutocorrect->setValue(pp->raw.ca_autocorrect); + caAutoiterations->setValue (pp->raw.caautoiterations); caRed->setValue (pp->raw.cared); caBlue->setValue (pp->raw.cablue); @@ -80,11 +95,13 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi void RAWCACorr::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited) { pp->raw.ca_autocorrect = caAutocorrect->getLastActive(); + pp->raw.caautoiterations = caAutoiterations->getValue(); pp->raw.cared = caRed->getValue(); pp->raw.cablue = caBlue->getValue(); if (pedited) { pedited->raw.ca_autocorrect = !caAutocorrect->get_inconsistent(); + pedited->raw.caautoiterations = caAutoiterations->getEditedState (); pedited->raw.cared = caRed->getEditedState (); pedited->raw.cablue = caBlue->getEditedState (); } @@ -97,7 +114,9 @@ void RAWCACorr::adjusterChanged (Adjuster* a, double newval) Glib::ustring value = a->getTextValue(); - if (a == caRed) { + if (a == caAutoiterations) { + listener->panelChanged (EvPreProcessCAAutoiterations, value ); + } else if (a == caRed) { listener->panelChanged (EvPreProcessCARed, value ); } else if (a == caBlue) { listener->panelChanged (EvPreProcessCABlue, value ); @@ -110,6 +129,7 @@ void RAWCACorr::checkBoxToggled (CheckBox* c, CheckValue newval) if (c == caAutocorrect) { if (!batchMode) { // disable Red and Blue sliders when caAutocorrect is enabled + caAutoiterations->set_sensitive(caAutocorrect->getLastActive ()); caRed->set_sensitive(!caAutocorrect->getLastActive ()); caBlue->set_sensitive(!caAutocorrect->getLastActive ()); } @@ -122,19 +142,23 @@ void RAWCACorr::checkBoxToggled (CheckBox* c, CheckValue newval) void RAWCACorr::setBatchMode(bool batchMode) { ToolPanel::setBatchMode (batchMode); + caAutoiterations->showEditedCB (); caRed->showEditedCB (); caBlue->showEditedCB (); } void RAWCACorr::setDefaults(const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited) { + caAutoiterations->setDefault( defParams->raw.caautoiterations); caRed->setDefault( defParams->raw.cared); caBlue->setDefault( defParams->raw.cablue); if (pedited) { + caAutoiterations->setDefaultEditedState( pedited->raw.caautoiterations ? Edited : UnEdited); caRed->setDefaultEditedState( pedited->raw.cared ? Edited : UnEdited); caBlue->setDefaultEditedState( pedited->raw.cablue ? Edited : UnEdited); } else { + caAutoiterations->setDefaultEditedState( Irrelevant ); caRed->setDefaultEditedState( Irrelevant ); caBlue->setDefaultEditedState( Irrelevant ); } @@ -150,6 +174,7 @@ void RAWCACorr::setAdjusterBehavior (bool caadd) void RAWCACorr::trimValues (rtengine::procparams::ProcParams* pp) { + caAutoiterations->trimValue(pp->raw.caautoiterations); caRed->trimValue(pp->raw.cared); caBlue->trimValue(pp->raw.cablue); } diff --git a/rtgui/rawcacorrection.h b/rtgui/rawcacorrection.h index 69292b1aa..27e486247 100644 --- a/rtgui/rawcacorrection.h +++ b/rtgui/rawcacorrection.h @@ -29,9 +29,12 @@ class RAWCACorr : public ToolParamBlock, public AdjusterListener, public CheckBo protected: CheckBox* caAutocorrect; + Adjuster* caAutoiterations; Adjuster* caRed; Adjuster* caBlue; + rtengine::ProcEvent EvPreProcessCAAutoiterations; + public: RAWCACorr (); From ac1db9922086339847bce6658f146dcfb9d714f7 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 5 Sep 2018 17:54:11 +0200 Subject: [PATCH 079/115] CA_correct_RT(): readability changes suggested by @Floessie; increased range of iterations adjuster to 5, #4774 --- rtengine/CA_correct_RT.cc | 33 +++++++++++++++++++++++++++------ rtengine/rawimagesource.h | 14 +++++++++++++- rtgui/rawcacorrection.cc | 2 +- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 35e36ce05..0a53ba469 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -111,7 +111,19 @@ bool LinEqSolve(int nDim, double* pfMatr, double* pfVect, double* pfSolution) using namespace std; using namespace rtengine; -float* RawImageSource::CA_correct_RT(const bool autoCA, const size_t autoIterations, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer, bool fitParamsIn, bool fitParamsOut, float *buffer, bool freeBuffer) +float* RawImageSource::CA_correct_RT( + bool autoCA, + size_t autoIterations, + double cared, + double cablue, + double caautostrength, + const array2D &rawData, + double* fitParamsTransfer, + bool fitParamsIn, + bool fitParamsOut, + float* buffer, + bool freeBuffer +) { // multithreaded and vectorized by Ingo Weyrich constexpr int ts = 128; @@ -120,14 +132,16 @@ float* RawImageSource::CA_correct_RT(const bool autoCA, const size_t autoIterati constexpr int v1 = ts, v2 = 2 * ts, v3 = 3 * ts, v4 = 4 * ts; //, p1=-ts+1, p2=-2*ts+2, p3=-3*ts+3, m1=ts+1, m2=2*ts+2, m3=3*ts+3; // Test for RGB cfa - for(int i = 0; i < 2; i++) - for(int j = 0; j < 2; j++) + for(int i = 0; i < 2; i++) { + for(int j = 0; j < 2; j++) { if(FC(i, j) == 3) { printf("CA correction supports only RGB Colour filter arrays\n"); return buffer; } + } + } - volatile double progress = 0.0; + double progress = 0.0; if(plistener) { plistener->setProgress (progress); @@ -159,9 +173,16 @@ float* RawImageSource::CA_correct_RT(const bool autoCA, const size_t autoIterati bool processpasstwo = true; double fitparams[2][2][16]; - const size_t iterations = autoCA ? std::max(autoIterations, static_cast(1)) : 1; + const size_t iterations = + autoCA + ? std::max(autoIterations, 1) + : 1; + for (size_t it = 0; it < iterations && processpasstwo; ++it) { - float blockave[2][2] = {{0, 0}, {0, 0}}, blocksqave[2][2] = {{0, 0}, {0, 0}}, blockdenom[2][2] = {{0, 0}, {0, 0}}, blockvar[2][2]; + float blockave[2][2] = {}; + float blocksqave[2][2] = {}; + float blockdenom[2][2] = {}; + float blockvar[2][2]; const bool fitParamsSet = fitParamsTransfer && fitParamsIn; if(autoCA && fitParamsSet && iterations < 2) { // use stored parameters diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 47fc756a9..b9729555b 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -239,7 +239,19 @@ protected: inline void interpolate_row_rb (float* ar, float* ab, float* pg, float* cg, float* ng, int i); inline void interpolate_row_rb_mul_pp (const array2D &rawData, float* ar, float* ab, float* pg, float* cg, float* ng, int i, float r_mul, float g_mul, float b_mul, int x1, int width, int skip); - float* CA_correct_RT (const bool autoCA, const size_t autoIterations, const double cared, const double cablue, const double caautostrength, array2D &rawData, double *fitParamsTransfer, bool fitParamsIn, bool fitParamsOut, float * buffer, bool freeBuffer); + float* CA_correct_RT( + bool autoCA, + size_t autoIterations, + double cared, + double cablue, + double caautostrength, + const array2D &rawData, + double* fitParamsTransfer, + bool fitParamsIn, + bool fitParamsOut, + float* buffer, + bool freeBuffer + ); void ddct8x8s(int isgn, float a[8][8]); void processRawWhitepoint (float expos, float preser, array2D &rawData); // exposure before interpolation diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 7e75682e0..8c917c910 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -37,7 +37,7 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM caAutocorrect = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AUTO"), multiImage)); caAutocorrect->setCheckBoxListener (this); - caAutoiterations = Gtk::manage(new Adjuster (M("TP_RAWCACORR_AUTOIT"), 1, 3, 1, 1)); + caAutoiterations = Gtk::manage(new Adjuster (M("TP_RAWCACORR_AUTOIT"), 1, 5, 1, 1)); caAutoiterations->setAdjusterListener (this); if (caAutoiterations->delay < options.adjusterMaxDelay) { From 5fcb64634dfe2c960ff856f15569b432401e0eb9 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 5 Sep 2018 20:33:48 +0200 Subject: [PATCH 080/115] CA_correct_RT(), minor change --- rtengine/CA_correct_RT.cc | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 0a53ba469..f8fc9b39e 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -27,6 +27,7 @@ #include "rawimagesource.h" #include "rt_math.h" #include "median.h" +//#define BENCHMARK #include "StopWatch.h" namespace { @@ -125,6 +126,7 @@ float* RawImageSource::CA_correct_RT( bool freeBuffer ) { + BENCHFUN // multithreaded and vectorized by Ingo Weyrich constexpr int ts = 128; constexpr int tsh = ts / 2; @@ -178,23 +180,25 @@ float* RawImageSource::CA_correct_RT( ? std::max(autoIterations, 1) : 1; + const bool fitParamsSet = fitParamsTransfer && fitParamsIn && iterations < 2; + if(autoCA && fitParamsSet) { + // use stored parameters + int index = 0; + for(int c = 0; c < 2; ++c) { + for(int d = 0; d < 2; ++d) { + for(int e = 0; e < 16; ++e) { + fitparams[c][d][e] = fitParamsTransfer[index++]; + } + } + } + } + for (size_t it = 0; it < iterations && processpasstwo; ++it) { float blockave[2][2] = {}; float blocksqave[2][2] = {}; float blockdenom[2][2] = {}; float blockvar[2][2]; - const bool fitParamsSet = fitParamsTransfer && fitParamsIn; - if(autoCA && fitParamsSet && iterations < 2) { - // use stored parameters - int index = 0; - for(int c = 0; c < 2; ++c) { - for(int d = 0; d < 2; ++d) { - for(int e = 0; e < 16; ++e) { - fitparams[c][d][e] = fitParamsTransfer[index++]; - } - } - } - } + //order of 2d polynomial fit (polyord), and numpar=polyord^2 int polyord = 4, numpar = 16; From 01618e1b7f06b6c04ef13852d81df49be8c03c4d Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 5 Sep 2018 21:47:16 +0200 Subject: [PATCH 081/115] Set default value for raw auto ca correction iterations to 2 while keeping backwars compatibility, #4774 --- rtengine/procparams.cc | 8 ++++++-- rtgui/ppversion.h | 4 +++- rtgui/rawcacorrection.cc | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 29e52b905..eb06e5b16 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2561,7 +2561,7 @@ RAWParams::RAWParams() : ff_AutoClipControl(false), ff_clipControl(0), ca_autocorrect(false), - caautoiterations(1), + caautoiterations(2), cared(0.0), cablue(0.0), expos(1.0), @@ -4756,7 +4756,11 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } assignFromKeyfile(keyFile, "RAW", "CA", pedited, raw.ca_autocorrect, pedited->raw.ca_autocorrect); - assignFromKeyfile(keyFile, "RAW", "CAAutoIterations", pedited, raw.caautoiterations, pedited->raw.caautoiterations); + if (ppVersion >= 342) { + assignFromKeyfile(keyFile, "RAW", "CAAutoIterations", pedited, raw.caautoiterations, pedited->raw.caautoiterations); + } else { + raw.caautoiterations = 1; + } assignFromKeyfile(keyFile, "RAW", "CARed", pedited, raw.cared, pedited->raw.cared); assignFromKeyfile(keyFile, "RAW", "CABlue", pedited, raw.cablue, pedited->raw.cablue); // For compatibility to elder pp3 versions diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index f4ca1f360..dd89c9f99 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,11 +1,13 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 340 +#define PPVERSION 341 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* Log of version changes + 342 2018-09-05 + raw auto ca correction iterations 341 2018-07-22 [ICM] enhanced custom output profile 340 2018-07-08 diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 8c917c910..9957ca9be 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -37,7 +37,7 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM caAutocorrect = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AUTO"), multiImage)); caAutocorrect->setCheckBoxListener (this); - caAutoiterations = Gtk::manage(new Adjuster (M("TP_RAWCACORR_AUTOIT"), 1, 5, 1, 1)); + caAutoiterations = Gtk::manage(new Adjuster (M("TP_RAWCACORR_AUTOIT"), 1, 5, 1, 2)); caAutoiterations->setAdjusterListener (this); if (caAutoiterations->delay < options.adjusterMaxDelay) { From f6195877e54a205a7b4a2092dfd8bcecc0c05b59 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 5 Sep 2018 21:51:36 +0200 Subject: [PATCH 082/115] Fix wrong ppversion --- rtgui/ppversion.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index dd89c9f99..5380943bf 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,7 +1,7 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 341 +#define PPVERSION 342 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* From 2a3e777b96eaa70e845f4da0e27343cd3ff19d2d Mon Sep 17 00:00:00 2001 From: TooWaBoo Date: Thu, 6 Sep 2018 00:53:23 +0200 Subject: [PATCH 083/115] Update TooWaBlue theme v2.74 Fix for Gtk3.24 and Scrolled Tootlbar. --- rtdata/themes/TooWaBlue-GTK3-20_.css | 504 ++++++++++++++------------- 1 file changed, 257 insertions(+), 247 deletions(-) diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css index d54db7f86..af0173441 100644 --- a/rtdata/themes/TooWaBlue-GTK3-20_.css +++ b/rtdata/themes/TooWaBlue-GTK3-20_.css @@ -2,7 +2,7 @@ This file is part of RawTherapee. Copyright (c) 2016-2018 TooWaBoo - Version 2.73 + Version 2.74 RawTherapee is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -99,9 +99,11 @@ window.background { background-color: @bg-light-grey; } +/* Single Window */ window > box { - padding: 0.41667em; + padding: 0.4167em; } +/**/ dialog { background-color: @bg-grey; border-radius: 0; @@ -111,7 +113,7 @@ dialog { -GtkDialog-action-area-border: 0; } dialog > box { - padding: 0.66667em; + padding: 0.6667em; } messagedialog { background-color: @bg-light-grey; @@ -119,8 +121,8 @@ messagedialog { } tooltip { background-color: @bg-tooltip; - border: 0.08334em solid @border-tooltip; - border-radius: 0.33334em; + border: 0.0834em solid @border-tooltip; + border-radius: 0.3334em; padding: 0; margin: 0; box-shadow: none; @@ -162,7 +164,7 @@ frame { #BatchQueueButtonsMainContainer frame, #MyExpander frame, dialog frame { - margin: 0.16667em 0.5em; + margin: 0.1667em 0.5em; } /* affects selection list*/ entry > window > frame, @@ -190,7 +192,7 @@ frame > border { dialog frame > border { padding: 0.5em; border-radius: 0; - border: 0.08334em solid @border-color; + border: 0.0834em solid @border-color; background-color: transparent; margin: 0 -0.5em; } @@ -211,18 +213,18 @@ filechooser > frame > border { #ToolPanelNotebook frame > label, dialog frame > label { margin: 0; - padding: 0.16667em 0.5em; + padding: 0.1667em 0.5em; } #BatchQueueButtonsMainContainer frame > border { - margin-bottom: 0.83334em; + margin-bottom: 0.8334em; } #BatchQueueButtonsMainContainer frame:nth-child(3) > border { - padding-left: 0.91667em; + padding-left: 0.9167em; } frame > label { margin: 0; - padding: 0.41667em 0 0.33334em 0.08334em; + padding: 0.4167em 0 0.3334em 0.0834em; color: @headline-frame; } frame > checkbutton label{ @@ -234,7 +236,7 @@ frame > checkbutton label{ textview.view, treeview.view { background-color: @bg-dark-grey; border-color: @view-grid-border; - padding: 0.16667em; + padding: 0.1667em; margin: 0; } textview:hover, treeview:hover { @@ -247,12 +249,12 @@ textview:selected, treeview:selected { } #RightNotebook > stack > :nth-child(1) treeview { - border: 0.08334em solid @bg-dark-grey; + border: 0.0834em solid @bg-dark-grey; border-bottom: none; } #PlacesPaned > box:nth-child(1) treeview { - padding: 0.08334em 0 0.08334em 0.416667em; + padding: 0.0834em 0 0.0834em 0.41667em; -gtk-icon-style: symbolic; } @@ -260,14 +262,14 @@ textview:selected, treeview:selected { margin-top: 0.25em; } #RightNotebook #HistoryPanel { - margin-top: 0.33334em; + margin-top: 0.3334em; } #HistoryPanel > border { margin-top: 1.75em; } #HistoryPanel > label { margin: 0 0 -1.5em 0; - padding: 0 0 0 0.08334em; + padding: 0 0 0 0.0834em; } #Snapshots > border { @@ -285,7 +287,7 @@ textview:selected, treeview:selected { min-width: 24px; } #Snapshots > box > :nth-child(1) { - margin-bottom: 0.41667em; + margin-bottom: 0.4167em; } #PlacesPaned > box:nth-child(3) > box:nth-child(2), @@ -293,12 +295,12 @@ textview:selected, treeview:selected { #HistoryPanel > border, #Snapshots > box > :nth-child(1) { background-color: @bg-dark-grey; - border: 0.08334em solid @bg-dark-grey; + border: 0.0834em solid @bg-dark-grey; } /*Corrects the space of the snapshot view to the paned separator*/ #Snapshots { - margin-top: 0.16667em; + margin-top: 0.1667em; } /**/ @@ -311,7 +313,7 @@ textview:selected, treeview:selected { background-color: @bg-dark-grey; } #Navigator box label { - padding: 0.16667em 0; + padding: 0.1667em 0; } #Navigator > label:nth-child(2) { margin-top: 0.5em; @@ -334,11 +336,11 @@ filechooser box { } filechooser > box > paned > box { - border: 0.08334em solid @bg-dark-grey; + border: 0.0834em solid @bg-dark-grey; background-color: @bg-dark-grey; } filechooser placessidebar { - padding: 0 0.08334em; + padding: 0 0.0834em; background-color: @bg-dark-grey; } @@ -352,7 +354,7 @@ filechooser list { filechooser list row { margin: 0; padding: 0; - min-height: calc(1.41667em + 8px); + min-height: calc(1.4166em + 8px); } filechooser list row label{ margin: 0; @@ -379,7 +381,7 @@ filechooser list row:selected { #HistogramPanel > :nth-child(2) { border: none; - border-left: 0.08334em solid @bg-light-grey; + border-left: 0.0834em solid @bg-light-grey; background-color: @bg-dark-grey; } @@ -390,7 +392,7 @@ filechooser list row:selected { #EditorLeftPaned #HistogramPanel > :nth-child(1) { border: none; - border-right: 0.08334em solid @bg-light-grey; + border-right: 0.0834em solid @bg-light-grey; background-color: @bg-dark-grey; } @@ -401,7 +403,7 @@ filechooser list row:selected { #HistogramArea, #HistogramRGBArea { - border: 0.08334em solid @bg-dark-grey; + border: 0.0834em solid @bg-dark-grey; background-color: @bg-dark-grey; } @@ -412,8 +414,8 @@ filechooser list row:selected { background-color: @bg-dark-grey; background-image: none; box-shadow: none; - min-height: 1.41667em; - min-width: calc(1.33334em + 6px); + min-height: 1.4166em; + min-width: calc(1.3333em + 6px); border-radius: 0; } @@ -434,7 +436,7 @@ separator { background-color: transparent; } grid separator.horizontal, box separator.horizontal { - margin: 0.16667em 0; + margin: 0.1667em 0; padding: 0; } grid separator.vertical, box separator.vertical { @@ -455,11 +457,10 @@ popover separator:not(:only-child) { paned.horizontal > separator { background-color: transparent; background-image: none; - min-width: 0.41667em; - border-left: 0.25em solid @bg-light-grey; - border-right: 0.25em solid @bg-light-grey; + min-width: 0.4166em; + border: none; margin: 0 -0.25em; - padding: 0; + padding: 0 0.25em; } paned.vertical > separator { @@ -474,15 +475,13 @@ paned.vertical > separator { /*Filmstrip*/ #EditorRightPaned > paned.horizontal > paned.vertical > separator { margin-bottom: 0; -} -#EditorRightPaned > paned.horizontal:nth-child(1) > paned.vertical:nth-child(1) > separator { - margin-bottom: -0.5em; + min-height: 0.4167em; } dialog paned.horizontal > separator { background-color: @bg-grey; border-color: @bg-grey; - min-width: 0.33334em; + min-width: 0.3333em; } menu separator { @@ -500,13 +499,13 @@ menu separator { #IopsPanel separator, #FileBrowser separator { background-color: shade(@bg-light-grey,.75); - margin-top: 0.16667em; - margin-bottom: 0.16667em; + margin-top: 0.1667em; + margin-bottom: 0.1667em; } #MyExpander separator { background-color: @view-grid-border; - margin: 0.33334em 0; + margin: 0.3334em 0; } #MyFileChooserButton separator { background-color: transparent; @@ -519,24 +518,24 @@ menu separator { /*** PartialPaste ******************************************************************************/ #PartialPaste { - border-bottom: 0.08334em solid @border-color; - border-top: 0.08334em solid @border-color; + border-bottom: 0.0834em solid @border-color; + border-top: 0.0834em solid @border-color; padding-top: 0.5em; padding-bottom: 0.5em; } #PartialPaste separator.vertical { - margin: 0 0.33334em; + margin: 0 0.3334em; padding: 0; } #PartialPaste separator { /* Struggles with #PartialPasteHeaderSep */ background-color: @border-color; - margin: 0.16667em 0.5em 0.16667em 1.16667em; + margin: 0.1667em 0.5em 0.1667em 1.1667em; } #PartialPasteHeaderSep.horizontal { background-color: rgb(192,192,192); - margin: 0.16667em 0.5em; + margin: 0.1667em 0.5em; } #PartialPasteHeader label { @@ -571,10 +570,10 @@ scrollbar:not(.overlay-indicator) { background-color: rgba(0,0,0,.30); } scrollbar:not(.overlay-indicator).horizontal { - border-width: 0 0.08334em 0.08334em 0.08334em; + border-width: 0 0.0834em 0.0834em 0.0834em; } scrollbar:not(.overlay-indicator).vertical { - border-width: 0.08334em 0.08334em 0.08334em 0; + border-width: 0.0834em 0.0834em 0.0834em 0; } scrollbar:not(.overlay-indicator) slider { background-color: shade(@text-color, .9); @@ -595,9 +594,9 @@ scrollbar.horizontal.hovering.fine-tune slider { scrollbar.horizontal.overlay-indicator:not(.hovering) slider { min-width: 2em; min-height: 0.25em; - border-width: 0.08334em; + border-width: 0.0834em; border-radius: 0.25em; - margin: 0 0.16667em; + margin: 0 0.1667em; } scrollbar:not(.overlay-indicator).vertical slider, @@ -615,9 +614,9 @@ scrollbar.vertical.hovering.fine-tune slider { scrollbar.vertical.overlay-indicator:not(.hovering) slider { min-width: 0.25em; min-height: 2em; - border-width: 0.08334em; + border-width: 0.0834em; border-radius: 0.5em; - margin: 0.16667em 0; + margin: 0.1667em 0; } scrollbar:not(.overlay-indicator) slider:hover, @@ -635,7 +634,7 @@ scrollbar:not(.overlay-indicator):hover { /*** Scale**************************************************************************************/ scale { padding: 0; - min-height: 1.83334em; + min-height: 1.8333em; margin: 0 0.25em; } @@ -643,10 +642,10 @@ scale slider { /* Slider size is min-width x min-height; margin have to be half of those values, but negative */ min-width: 1em; min-height: 1em; - margin: calc(-0.33334em - 1px); - border-radius: 0.83334em; + margin: calc(-0.166em - 4px); + border-radius: 0.8334em; background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85)); - border: 0.08334em solid @bg-button-border; + border: 0.0834em solid @bg-button-border; box-shadow: none; } scale slider:hover { @@ -656,14 +655,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: 0.08334em solid @bg-button-border; - box-shadow: inset 0 0.08334em rgba(255, 255, 255, 0.11), 0 0.08334em rgba(242, 242, 242, 0.11); + border: 0.0834em solid @bg-button-border; + box-shadow: inset 0 0.0834em rgba(255, 255, 255, 0.11), 0 0.0834em rgba(242, 242, 242, 0.11); border-radius: 0.5em; } scale:not(:disabled) trough highlight { background-color: @accent-color2; - border: 0.08334em solid @bg-dark-grey; - box-shadow: inset 0 0.08334em shade(@accent-color2, 1.25); + border: 0.0834em solid @bg-dark-grey; + box-shadow: inset 0 0.1667em shade(@accent-color2, 1.25); border-radius: 0.5em; } @@ -712,14 +711,14 @@ progressbar.vertical trough progress { } progressbar.horizontal trough { - min-height: 0.41667em; + min-height: 0.4166em; background-color: transparent; border: none; border-radius: 0.5em; - margin-top: 0.58334em; + margin-top: 0.5834em; } progressbar.horizontal trough progress { - min-height: 0.41667em; + min-height: 0.4166em; margin: -1px 0; background-color: @accent-color2; border: none; @@ -729,7 +728,7 @@ progressbar.horizontal trough progress { #IopsPanel progressbar.horizontal trough { min-height: 0.5em; background-color: @bg-scale-entry; - border: 0.08334em solid @bg-button-border; + border: 0.0834em solid @bg-button-border; margin-top: 0.25em; } #IopsPanel progressbar.horizontal trough progress { @@ -758,22 +757,22 @@ notebook stack { } notebook header { background-color: @bg-dark-grey; - padding: 0 0.41667em; + padding: 0 0.4167em; } notebook header.left { - padding: 0.41667em 0; + padding: 0.4167em 0; } notebook tabs { background-color: transparent; } notebook header tab { background-color: transparent; - margin: 0.41667em 0.25em; - padding: 0 0.33334em; + margin: 0.4167em 0.25em; + padding: 0 0.3334em; } notebook header.left tab { - margin: 0.25em 0.41667em; - padding: 0.33334em 0; + margin: 0.25em 0.4167em; + padding: 0.3334em 0; } notebook header tab > grid > image { min-height: 2.5em; @@ -787,7 +786,7 @@ notebook header.left tab > grid > image { padding: 0.25em 0 0; } notebook header tab label { - margin: 0.08334em; + margin: 0.0834em; } notebook header tab:hover label { color: @headline-hl; @@ -803,11 +802,11 @@ notebook > header > tabs > arrow { border-radius: 0.2em; min-width: 0; min-height: 0; - padding: 0 0.16667em; + padding: 0 0.1667em; margin: 0.5em 0; } notebook > header.left > tabs > arrow { - padding: 0.16667em 0; + padding: 0.1667em 0; margin: 0 0.5em; } notebook > header > tabs > arrow:hover { @@ -826,11 +825,11 @@ dialog notebook stack { /*?win*/ #MainNotebook > stack { - padding: 0.41667em; + padding: 0.4167em; } #MainNotebook > stack > :nth-child(2) > box:nth-child(3) { - margin-top: 0.41667em; + margin-top: 0.4167em; } @@ -838,58 +837,58 @@ dialog notebook stack { dialog.csd #PrefNotebook > header, dialog.csd #AboutNotebook > header, window.csd:not(.fullscreen) #MainNotebook > header.top { - border-top: 0.083334em solid rgba(200,200,200,.18); + border-top: 0.08334em solid rgba(200,200,200,.18); } /**/ #ToolPanelNotebook > header tabs { - margin-bottom: 0.33334em; + margin-bottom: 0.3334em; } #ToolPanelNotebook > header tab { margin-left: 0; margin-right: 0; - padding: 0 0.33334em; + padding: 0 0.3334em; } #ToolPanelNotebook > header tab + tab { margin-left: 0.25em; } #ToolPanelNotebook > header tab #TextOrIcon image{ - min-height: 2.33334em; + min-height: 2.3333em; min-width: calc(2em + 4px); padding: 2px 0; margin: 0; } #RightNotebook > header { - margin: 0 0.41667em 0 0; + margin: 0 0.4167em 0 0; } #RightNotebook > stack { background-color: @bg-grey; padding: 0; } #RightNotebook header tab label { - padding-left: 0.16667em; - padding-right: 0.16667em; + padding-left: 0.1667em; + padding-right: 0.1667em; } #RightNotebook > stack > :nth-child(1) > * > box, #RightNotebook > stack > :nth-child(4) > * > box { padding: 0.5em; - border: 0.08334em solid @bg-entry-border; + border: 0.0834em solid @bg-entry-border; } #PrefNotebook header { - margin: -0.66667em -0.66667em 0.33334em; + margin: -0.6667em -0.6667em 0.3334em; } #PrefNotebook header tab label { - padding-top: 0.16667em; - padding-bottom: 0.16667em; + padding-top: 0.1667em; + padding-bottom: 0.1667em; } #AboutNotebook header { - margin: -0.66667em -0.66667em 0.66667em; + margin: -0.6667em -0.6667em 0.6667em; } #AboutNotebook stack text { @@ -901,15 +900,15 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { #MetaPanelNotebook header { background-color: @bg-grey; - padding: 0.33334em; + padding: 0.3334em; margin: 0 0.5em 0; } #MetaPanelNotebook > header > tabs { background-color: @bg-dark-grey; - padding-left: 0.33334em; + padding-left: 0.3334em; } #MetaPanelNotebook > header tab label{ - margin: 0.08334em; + margin: 0.0834em; } #MetaPanelNotebook > stack > box { @@ -917,11 +916,11 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { background-color: @bg-grey; border-radius: 0; border-top-style: none; - padding: 0 0.33334em 0.25em; + padding: 0 0.3334em 0.25em; margin: 0 0.5em -0.5em; } #MetaPanelNotebook > stack > box:nth-child(1) > scrolledwindow { - margin: 0 0 0.33334em; + margin: 0 0 0.3334em; padding: 0; } @@ -931,23 +930,23 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { #MetaPanelNotebook separator { background-color: @border-color; - margin: 0.16667em 0; + margin: 0.1667em 0; } #MetaPanelNotebook entry, #MetaPanelNotebook button, #MetaPanelNotebook combobox button { margin-top: 0; margin-bottom: 0; - min-height: 1.66667em; - min-width: 0.83334em; + min-height: 1.6666em; + min-width: 0.8333em; } #MetaPanelNotebook entry { - padding: 0 0.33334em; + padding: 0 0.3334em; background-color: @bg-dark-grey; margin: 0; border-radius: 0; } #MetaPanelNotebook > stack > box:nth-child(1) > :nth-child(1) { - border: 0.08334em solid @bg-dark-grey; + border: 0.0834em solid @bg-dark-grey; } #MetaPanelNotebook > stack > box:nth-child(2) > scrolledwindow scrolledwindow { background-color: @bg-dark-grey; @@ -955,13 +954,13 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { margin: 0; } #MetaPanelNotebook > stack > box:nth-child(2) .view { - border: 0.08334em solid @bg-dark-grey; - padding: 0.16667em; + border: 0.0834em solid @bg-dark-grey; + padding: 0.1667em; margin: 0; } #MetaPanelNotebook textview.view { background-color: @bg-dark-grey; - padding: 0.08334em 0.33334em; + padding: 0.0834em 0.3334em; margin: 0; } #MetaPanelNotebook text { @@ -977,17 +976,17 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { } #MetaPanelNotebook combobox + button, #MetaPanelNotebook combobox + button + button { - margin-left: 0.16667em; - min-width: 1.66667em; + margin-left: 0.1667em; + min-width: 1.6666em; } #MetaPanelNotebook > stack > box > grid > button { - margin-top: 0.08334em; - margin-bottom: 0.08334em; - min-height: 2.16667em; + margin-top: 0.0834em; + margin-bottom: 0.0834em; + min-height: 2.1666em; } #MetaPanelNotebook label { - padding: 0.08334em 0; + padding: 0.0834em 0; } /*** end ***************************************************************************************/ @@ -995,7 +994,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { /*** File Browser ******************************************************************************/ #FileCatalog { background-color: @bg-image; - border: 0.08334em solid @bg-dark-grey; + border: 0.0834em solid @bg-dark-grey; } #FileCatalog:selected { background-color: @accent-color3; @@ -1009,19 +1008,19 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { } #ToolBarPanelFileBrowser { - margin: -2px -1px; + margin: 0.4167em -1px; min-height: 0; min-width: 0; - padding: 0.41667em 0; + padding: 0; } #ToolBarPanelFileBrowser > box > button, #ToolBarPanelFileBrowser > button { - margin: 0 0.08334em; + margin: 0 0.0834em; } /* Filter */ #ToolBarPanelFileBrowser .smallbuttonbox { - min-height: 1.16667em; + min-height: 1.0834em; padding: 0; margin: 0; } @@ -1030,7 +1029,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { } #ToolBarPanelFileBrowser .smallbuttonbox button.smallbutton { min-height: 0; - min-width: 1.16667em; + min-width: 1.0834em; padding: 0; margin: 0 2px; border: none; @@ -1043,29 +1042,30 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { background-color: @bg-dark-grey; } #ToolBarPanelFileBrowser .smallbuttonbox button.smallbutton image{ - -gtk-icon-transform: scale(calc(13/16)); + -gtk-icon-transform: scale(calc(14/16)); margin: -2px } +/**/ #ToolBarPanelFileBrowser entry + button.flat, #FileBrowser entry + button.flat { - min-height: 1.66667em; - min-width: 1.66667em; - margin: 0 0 0 -1.66667em; + min-height: 1.6666em; + min-width: 1.6666em; + margin: 0 0 0 -1.6667em; border-radius: 0 0.2em 0.2em 0; - border: 0.08334em solid transparent; + border: 0.0834em solid transparent; padding: 0; } #ToolBarPanelFileBrowser entry, #FileBrowser entry { - min-height: 1.66667em; + min-height: 1.6666em; min-width: 12em; margin: 0 -2px 0 0; - padding: 0 2em 0 0.33334em; + padding: 0 2em 0 0.3334em; } #ToolBarPanelFileBrowser label, #FileBrowser label { - margin: 0 0.33334em 0 0.5em; + margin: 0 0.3334em 0 0.5em; } /*** end ***************************************************************************************/ @@ -1076,21 +1076,21 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { #BeforeAfterContainer { background-color: @bg-grey; - border: 0.08334em solid @bg-dark-grey; + border: 0.0834em solid @bg-dark-grey; border-radius: 0; padding: 0; - margin: 0.41667em 0; + margin: -2px 0 0.4167em; } #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; + border-top: 0.0834em solid @bg-dark-grey; } #BeforeAfterContainer > box:nth-child(2){ - border-left: 0.08334em solid @bg-dark-grey; + border-left: 0.0834em solid @bg-dark-grey; } #BeforeAfterContainer label { - min-height: 2.66667em; + min-height: 2.6666em; padding: 0 0.5em; } /* Small Lock Button */ @@ -1108,15 +1108,25 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { } /**/ -#EditorTopPanel { - margin: -2px -2px; +#EditorToolbarTop { + margin: -2px -2px 0.4167em; padding: 0; min-height: 0; } +/* Single Window */ +window > box > #EditorRightPaned > paned > paned > box { + margin-top: -2px; + padding: 0; +} +window > box > #EditorRightPaned > paned > paned > box > #EditorToolbarTop { + margin-top: 0; +} +/**/ + #EditorTopPanel button { - margin: 0 0.08334em; - min-height: 2.16667em; - min-width: 2.16667em; + margin: 0 0.0834em; + min-height: 2.1666em; + min-width: 2.1666em; } /* Removes margin from the last button. Otherwise the filmstrip will cut of the right border. */ #EditorTopPanel :last-child > button:last-child { @@ -1124,7 +1134,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { } #EditorTopPanel button.narrowbutton { - min-width: 1.05em; + min-width: 1em; padding: 0; } @@ -1137,8 +1147,8 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { padding: 0 2px 0 3px; } #EditorZoomPanel button { - margin-left: 0.08334em; - margin-right: 0.08334em; + margin-left: 0.0834em; + margin-right: 0.0834em; } /*** end ***************************************************************************************/ @@ -1153,14 +1163,14 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { } /**/ #MyExpander .drawingarea:not(.slider) { - border: 0.08334em solid @bg-light-grey; + border: 0.0834em solid @bg-light-grey; background-color: @bg-dark-grey; } #MyExpander .slider, #MyExpander #CurveSHCSelector { background-image: linear-gradient(to bottom, shade (@accent-color4,1.15), shade (@accent-color4,.85)); background-color: @accent-color4; - border: 0.08334em solid rgb(15,15,15); + border: 0.0834em solid rgb(15,15,15); } #MyExpander .drawingarea:disabled { background-color: shade(@bg-grey,.85); @@ -1168,7 +1178,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { background-image: none; } #ThresholdAdjuster { - margin: 0.08334em 0 0.16667em 0; + margin: 0.0834em 0 0.1667em 0; } #ToolPanelNotebook scrolledwindow viewport.frame { @@ -1190,7 +1200,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { /* Sub-tool (MyExpander) */ #ExpanderBox2 > box, #ExpanderBox2 > grid { background-color: transparent; - border: 0.08334em solid @border-color; + border: 0.0834em solid @border-color; border-radius: 0; margin: 0; padding: 0.5em; @@ -1204,7 +1214,7 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { #MyExpanderTitle label { color: @headline-big; padding: 0; - margin: 0.08334em 0.25em 0 0.5em; + margin: 0.0834em 0.25em 0 0.5em; } #MyExpanderTitle:hover label { @@ -1219,13 +1229,13 @@ window.csd:not(.fullscreen) #MainNotebook > header.top { border: none; padding: 0; margin: 0; - box-shadow: 0 0.25em 0.75em 0.08334em rgba(0, 0, 0, 0.50), 0 0 0 0.08334em @bg-dark-grey; + box-shadow: 0 0.25em 0.75em 0.0834em rgba(0, 0, 0, 0.50), 0 0 0 0.0834em @bg-dark-grey; } menu { background-color: @bg-dark-grey; - border: 0.08334em solid @accent-color; - padding: 0.08334em; + border: 0.0834em solid @accent-color; + padding: 0.0834em; margin: 0; } menu > .top, @@ -1239,8 +1249,8 @@ menu > .bottom:hover { } menuitem { - padding: 0 0.33334em; - margin: 0.08334em; + padding: 0 0.3334em; + margin: 0.0834em; min-height: 2em; } menuitem:hover { @@ -1254,7 +1264,7 @@ menuitem:hover > * { menu image { min-height: 2em; padding: 0; - margin: 0 0.33334em 0 0; + margin: 0 0.3334em 0 0; } /*** Selection popup list (used in filechooser) ***/ @@ -1263,11 +1273,11 @@ entry > window > frame { } entry > window > frame > border { background-color: @bg-dark-grey; - padding: 0.08334em; - border: 0.08334em solid @accent-color; + padding: 0.0834em; + border: 0.0834em solid @accent-color; } entry > window > frame > border { - margin: 0.08334em; + margin: 0.0834em; } /* end */ @@ -1277,7 +1287,7 @@ entry > window > frame > border { popover.background { background-color: @bg-dark-grey; - border: 0.08334em solid @accent-color; + border: 0.0834em solid @accent-color; border-radius: 0; padding: 0; margin: 0; @@ -1289,7 +1299,7 @@ popover.background > box { } popover.background modelbutton { min-height: 2em; - padding: 0 0.41667em; + padding: 0 0.4167em; margin: 0; border-radius: 0; } @@ -1306,24 +1316,24 @@ popover.background modelbutton:hover { /*** Switch ***********************************************************************************/ switch { - min-height: 2.16667em; + min-height: 2.1666em; 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; + box-shadow: inset 0.0834em 0.0834em rgba(0, 0, 0, 0.08), 0 0.0834em rgba(242, 242, 242, 0.1); + border: 0.0834em solid @bg-entry-border; background-color: @bg-scale-entry; margin-bottom: 0.5em; } switch slider { - border: 0.08334em solid @bg-entry-border; + border: 0.0834em solid @bg-entry-border; background-color: shade (@bg-light-grey, .85); background-image: linear-gradient(to bottom, rgba(125,125,125,.4), rgba(60,60,60,.4)); - border: 0.08334em solid @bg-entry-border; - box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.1); + border: 0.0834em solid @bg-entry-border; + box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.1); border-radius: 0.2em 0 0 0.2em; } switch:checked slider{ @@ -1351,14 +1361,14 @@ switch:disabled:not(:checked) { /*** Buttons ***********************************************************************************/ button { - min-height: 2.16667em; - min-width: 2.16667em; + min-height: 2.1666em; + min-width: 2.1666em; margin: 0; padding: 0; /* x */ border-radius: 0.2em; - border: 0.08334em solid @bg-button-border; + border: 0.0834em solid @bg-button-border; background-color: transparent; - box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.1); + box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.1); background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3)); } button.flat { @@ -1369,11 +1379,11 @@ button.text-button label { } #PrefNotebook > stack > :nth-child(5) combobox { - /* margin: 0.16667em 0; */ + /* margin: 0.1667em 0; */ margin: 2px 0; } #PrefNotebook > stack > :nth-child(2) #MyFileChooserButton { - /* margin: 0.25em 0.33334em; */ + /* margin: 0.25em 0.3334em; */ margin: 3px 5px; } @@ -1385,7 +1395,7 @@ filechooser button image, #MainNotebook > header > grid > button, button.flat { - border: 0.08334em solid transparent; + border: 0.0834em solid transparent; box-shadow: none; background-image: none; background-color: transparent; @@ -1397,18 +1407,18 @@ button.flat { dialog scale + button.flat, #MainNotebook > stack > :nth-child(2) > box:nth-child(1) scale + button.flat, entry + button.flat { - min-height: 1.16667em; + min-height: 1.1666em; min-width: 1.5em; - margin: 0.08334em 0 0.08334em 0.16667em; - padding: 0 0 0 0.16667em; + margin: 0.0834em 0 0.0834em 0.1667em; + padding: 0 0 0 0.1667em; } dialog entry + button:last-child.flat { - min-height: 1.66667em; + min-height: 1.6666em; } #MyExpander scale + button:last-child.flat, #MyExpander spinbutton + button:last-child.flat { - margin: 0 0 0 0.16667em; + margin: 0 0 0 0.1667em; } #MyExpander image + button:last-child.flat { margin: 0 0 0 0.25em; @@ -1420,7 +1430,7 @@ dialog entry + button:last-child.flat { #MyExpander button.flat:first-child { min-height: 2em; min-width: 2em; - margin: 0.16667em 0.16667em 0 0; + margin: 0.1667em 0.1667em 0 0; padding: 0; } #MyExpander button.flat + button.flat image, @@ -1435,7 +1445,7 @@ dialog entry + button:last-child.flat { button.flat:hover, button:hover { border-color: @bg-button-border; - box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.1); + box-shadow: inset 0 0.0834em 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; } @@ -1447,7 +1457,7 @@ button.flat:checked, button:active, button:checked { border-color: @bg-button-border; - box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.08); + box-shadow: inset 0 0.0834em 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; } @@ -1455,22 +1465,22 @@ button:checked { /* Add space between connected buttons */ button.Right, button.MiddleH { - margin-left: 0.16667em; - border: 0.08334em solid @bg-button-border; + margin-left: 0.1667em; + border: 0.0834em solid @bg-button-border; } /**/ /* Applies special styles in main notebook */ #ProfilePanel { margin-bottom: -2px; - padding-bottom: 0.41667em; + padding-bottom: 0.4167em; } #ProfilePanel > label { - margin-bottom: 0.08334em; + margin-bottom: 0.0834em; } #ProfilePanel combobox { - margin-left: 0.16667em; - margin-right: 0.16667em; + margin-left: 0.1667em; + margin-right: 0.1667em; } #ProfilePanel button.Left { margin-left: -2px; @@ -1490,13 +1500,13 @@ button.MiddleH { dialog button, #MyExpander button, #BatchQueueButtonsMainContainer button { - min-height: 1.66667em; + min-height: 1.6666em; min-width: 0; padding: 0 0.375em; - margin: 0.08334em 0; + margin: 0.0834em 0; } #MyExpander #MyFileChooserButton + button.image-button{ - min-width: 1.66667em; + min-width: 1.6666em; padding: 0; } @@ -1510,10 +1520,10 @@ dialog button.combo, margin-right: 0.25em; } combobox button cellview { - padding: 0 0 0 0.16667em; + padding: 0 0 0 0.1667em; } combobox arrow { - padding: 0 0.16667em 0 0; + padding: 0 0.1667em 0 0; margin: 0; } #MetaPanelNotebook combobox arrow { @@ -1537,17 +1547,17 @@ combobox arrow { #MyExpander combobox + combobox, #MyExpander button + label, #MyExpander combobox + label { - margin-left: 0.16667em; + margin-left: 0.1667em; } #MyExpander label + * > button:not(.flat).Left, #MyExpander label + combobox:not(:first-child):not(:only-child), #MyExpander label + button:not(.flat):not(spinbutton) { - margin-left: 0.33334em; + margin-left: 0.3334em; } buttonbox:not(.dialog-action-area) button{ - margin: 0.08334em 0 0.33334em 0.16667em; + margin: 0.0834em 0 0.3334em 0.1667em; } #PrefNotebook buttonbox:not(.dialog-action-area) { margin-right: -5px; @@ -1566,13 +1576,13 @@ buttonbox:not(.dialog-action-area) button{ padding-right: 0; border-top-left-radius: 0; border-bottom-left-radius: 0; - min-width: 1.33334em; + min-width: 1.3333em; } #IopsPanel .image-combo button.Left, #MyExpander .image-combo button.Left { border-top-right-radius: 0; border-bottom-right-radius: 0; - min-width: 2.16667em; + min-width: 2.1666em; } /**/ @@ -1585,7 +1595,7 @@ buttonbox:not(.dialog-action-area) button{ min-height: 2em; min-width: 2em; padding: 0; - margin: 0 0 0.33334em; + margin: 0 0 0.3334em; } #MyExpander button:not(.image-button).independent:first-child:not(.flat):only-child image { -gtk-icon-transform: scale(calc(20/24)); @@ -1599,18 +1609,18 @@ buttonbox:not(.dialog-action-area) button{ /**/ button.color { - min-height: 1.16667em; + min-height: 1.1666em; padding: 0.25em; } /* Save, Cancel, OK ... buttons */ .dialog-action-area button { - min-height: 2.16667em; - margin-top: 0.33334em; + min-height: 2.1666em; + margin-top: 0.3334em; } messagedialog .dialog-action-area button { - margin: 0 0.66667em 0.66667em 0.66667em; - min-height: 1.83334em; + margin: 0 0.6667em 0.6667em 0.6667em; + min-height: 1.8333em; } messagedialog .dialog-action-area button:not(:only-child):nth-child(1) { margin-right: 0.25em; @@ -1627,8 +1637,8 @@ window .view button { background-image: none; box-shadow: none; min-height: 2em; - min-width: 1.33334em; - padding: 0 0.33334em; + min-width: 1.3333em; + padding: 0 0.3334em; margin: 0; } dialog .view button.text-button label, @@ -1637,10 +1647,10 @@ window .view button.text-button label { } window .view button { border: none; - border-bottom: 0.08334em solid @border-color; + border-bottom: 0.0834em solid @border-color; } dialog .view button { - border: 0.08334em solid @border-color; + border: 0.0834em solid @border-color; } .view button:checked, @@ -1686,7 +1696,7 @@ window .view header button, } .path-bar button label { margin: 0; - padding: 0 0.33334em; + padding: 0 0.3334em; } /**/ @@ -1694,12 +1704,12 @@ window .view header button, popover button.text-button { background-color: @bg-dark-grey; background-image: none; - border: 0.08334em solid @border-color; + border: 0.0834em solid @border-color; box-shadow: none; background-image: none; - margin: 0.083334em 0; - min-height: 1.66667em; - padding: 0 0.66667em; + margin: 0.08334em 0; + min-height: 1.6666em; + padding: 0 0.6667em; } popover button.text-button label { padding: 0; @@ -1723,10 +1733,10 @@ popover button.text-button:active { /* Titlebar & Notebook buttons */ #MainNotebook > header.top > grid > button { - margin: 0 0 0 0.41667em; + margin: 0 0 0 0.4167em; } #MainNotebook > header.left > grid > button { - margin: 0.41667em 0 0; + margin: 0.4167em 0 0; } headerbar button.titlebutton image { @@ -1734,9 +1744,9 @@ headerbar button.titlebutton image { margin: 0; } headerbar button.titlebutton { - margin: 0 0 0 0.33334em; + margin: 0 0 0 0.3334em; background-image: none; - border: 0.08334em solid transparent; + border: 0.0834em solid transparent; background-color: transparent; box-shadow: none; min-width: 1.55em; @@ -1751,7 +1761,7 @@ messagedialog headerbar button.titlebutton { #MainNotebook tab #CloseButton { padding: 0; - margin: 0.33334em -2px 0.5em 0.25em; + margin: 0.3334em -2px 0.5em 0.25em; min-width: 1.5em; min-height: 1.5em; } @@ -1759,14 +1769,14 @@ messagedialog headerbar button.titlebutton { #MainNotebook tab #CloseButton:hover, headerbar button.titlebutton:hover{ border-color: rgba(0,0,0,.8); - box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.11); + box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.11); background-image: linear-gradient(to bottom, rgba(100,100,100,.3), rgba(30,30,30,.3)); background-color: rgba(128, 128, 128,.20); } #MainNotebook > header > grid > button:active, headerbar button.titlebutton:active{ border-color: rgba(0,0,0,.8); - box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.15); + box-shadow: inset 0 0.0834em 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); } @@ -1774,13 +1784,13 @@ headerbar button.titlebutton:active{ headerbar button.titlebutton.close:hover{ border-color: rgba(0,0,0,.8); background-image: linear-gradient(to bottom, rgb(180,0,0), rgb(160,0,0) 40%, rgb(130,0,0)); - box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.32); + box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.32); } #MainNotebook tab #CloseButton:active, headerbar button.titlebutton.close:active{ border-color: rgba(0,0,0,.8); background-image: linear-gradient(to bottom, rgb(215,0,0), rgb(185,0,0) 40%, rgb(150,0,0)); - box-shadow: inset 0 0.08334em rgba(242, 242, 242, 0.4); + box-shadow: inset 0 0.0834em rgba(242, 242, 242, 0.4); } /**/ @@ -1796,21 +1806,21 @@ radiobutton { } #PrefNotebook checkbox, #PrefNotebook checkbutton { - min-height: 1.6667em; + min-height: 1.6666em; } check, radio { - border: calc(0.083334em + 0.18px) solid @text-color; + border: calc(0.08334em + 0.18px) solid shade(@text-color, 0.95); background-image: none; background-color: transparent; margin: 0; padding: 0; - min-height: 1.16667em; - min-width: 1.16667em; + min-height: 1.1666em; + min-width: 1.1666em; box-shadow: none; background-repeat: no-repeat; - color: @text-color; + color: shade(@text-color, 0.95); } radiobutton label, checkbutton label { @@ -1818,11 +1828,11 @@ checkbutton label { padding: 0; } check { - border-radius: 0.16667em; + border-radius: 0.1667em; } radio{ - border-radius: 1.16667em; + border-radius: 1.1667em; } check:disabled, radio:disabled { @@ -1835,7 +1845,7 @@ frame > checkbutton check{ #PartialPaste checkbutton:not(#PartialPasteHeader) { min-height: 1.4em; - margin-left: 1.16667em; + margin-left: 1.1667em; } #PartialPasteHeader { min-height: 1.4em; @@ -1843,7 +1853,7 @@ frame > checkbutton check{ } #MyExpander button + checkbutton:last-child { - margin-left: 0.33334em; + margin-left: 0.3334em; } /*** end ***************************************************************************************/ @@ -1851,44 +1861,44 @@ frame > checkbutton check{ /*** Entry & Spinbutton ************************************************************************/ #MyExpander entry, entry { - margin: 0.08334em 0; - padding: 0 0.33334em; - min-height: 1.66667em; + margin: 0.0834em 0; + padding: 0 0.3334em; + min-height: 1.6666em; min-width: 0; border-radius: 0.2em; - 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; + box-shadow: inset 0.0834em 0.0834em rgba(0, 0, 0, 0.08), 0 0.0834em rgba(242, 242, 242, 0.1); + border: 0.0834em solid @bg-entry-border; background-color: @bg-scale-entry; } spinbutton { - margin: 0.08334em 0; + margin: 0.0834em 0; padding: 0; - min-height: 1.66667em; + min-height: 1.6666em; min-width: 0; border-radius: 0.2em; background-color: @bg-scale-entry; - 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); + border: 0.0834em solid @bg-entry-border; + box-shadow: inset 0.0834em 0.0834em rgba(0, 0, 0, 0.08), 0 0.0834em rgba(242, 242, 242, 0.1); } #MyExpander spinbutton { - margin: 0.16667em 0; + margin: 0.1667em 0; padding: 0; - min-height: 1.33334em; + min-height: 1.3333em; min-width: 0; - border-top-left-radius: 1.83334em; - border-bottom-left-radius: 1.83334em; + border-top-left-radius: 1.8334em; + border-bottom-left-radius: 1.8334em; background-color: @bg-tb-spinbutton; - border: 0.08334em solid @bg-button-border; + border: 0.0834em solid @bg-button-border; color: @text-tbEntry; - box-shadow: inset 0.08334em 0.08334em rgba(0, 0, 0, .12), 0 0.08334em rgba(255, 255, 255, 0.12); + box-shadow: inset 0.0834em 0.0834em rgba(0, 0, 0, .12), 0 0.0834em rgba(255, 255, 255, 0.12); } #MyExpander button + label + spinbutton { margin: 0.25em 0; /* Needed for Reset & and Auto button height*/ } #MyExpander checkbutton + label + spinbutton { - margin: 0.33334em 0; /* Needed for Reset & and Auto checkbox button height*/ + margin: 0.3334em 0; /* Needed for Reset & and Auto checkbox button height*/ } #MyExpander image + spinbutton { @@ -1901,7 +1911,7 @@ spinbutton button { padding: 0; margin: 0; min-height: 0; - min-width: 1.33334em; + min-width: 1.3333em; background-image: none; background-color: transparent; border: none; @@ -1910,7 +1920,7 @@ spinbutton button { } #MyExpander spinbutton entry, spinbutton entry { - padding: 0 0.33334em; + padding: 0 0.3334em; margin: 0; min-height: 0; min-width: 0; @@ -1919,7 +1929,7 @@ spinbutton entry { background-color: transparent; } #MyExpander spinbutton entry { - padding: 0 0.33334em 0 0.83334em; + padding: 0 0.3334em 0 0.8334em; } #BatchQueueButtonsMainContainer spinbutton button:hover, @@ -1967,7 +1977,7 @@ entry:focus > selection { .view entry { background-color: @bg-dark-grey; margin: 0 -2px; - border: 0.08334em solid @accent-color; + border: 0.0834em solid @accent-color; box-shadow: none; } /* end*/ @@ -1978,20 +1988,20 @@ entry:focus > selection { :not(.popup):not(tooltip) > decoration { background-color: @winHeaderbar; background-image: none; - border-radius: 0.41667em 0.41667em 0 0; + border-radius: 0.4167em 0.4167em 0 0; border: none; padding: 0; - 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; + box-shadow: 0 0.25em 0.75em 0.0834em rgba(0, 0, 0, 0.5), 0 0 0 0.0834em @bg-dark-grey; + margin: 0.8334em; } headerbar { background-color: shade(@winHeaderbar,1.12); - box-shadow: inset 0 0.08334em rgba(200,200,200,.13); + box-shadow: inset 0 0.0834em rgba(200,200,200,.13); background-image: linear-gradient(shade(@winHeaderbar,1.14), shade(@winHeaderbar,.86)); - 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; + border-bottom: 0.0834em solid @bg-dark-grey; + border-radius: 0.4167em 0.4167em 0 0; + min-height: 2.1666em; + padding: 0.0834em 0.4167em 0; margin: 0; } messagedialog headerbar { @@ -2010,7 +2020,7 @@ headerbar .title{ /* Window in background */ :not(.popup):not(tooltip) > decoration:backdrop { - box-shadow: 0 0.25em 0.75em 0.08334em rgba(0, 0, 0, 0.3), 0 0 0 0.08334em @bg-dark-grey; + box-shadow: 0 0.25em 0.75em 0.0834em rgba(0, 0, 0, 0.3), 0 0 0 0.0834em @bg-dark-grey; } headerbar:backdrop { box-shadow: none; From 9cd10a319689af2872a5192c979148c786562df9 Mon Sep 17 00:00:00 2001 From: "U-PC-BUREAU\\jacques" Date: Thu, 6 Sep 2018 10:24:13 +0200 Subject: [PATCH 084/115] fixed several bug with ACES-P0 matrix GUI ICC --- rtdata/iccprofiles/output/RTv2_ACES-AP0.icc | Bin 25460 -> 25336 bytes rtdata/iccprofiles/output/RTv4_ACES-AP0.icc | Bin 764 -> 744 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/rtdata/iccprofiles/output/RTv2_ACES-AP0.icc b/rtdata/iccprofiles/output/RTv2_ACES-AP0.icc index 81818789851fe1861314b182408f07ba6613cfe5..34363781fa091909250c3ed101e06b24df93b335 100644 GIT binary patch literal 25336 zcmeI5RajL`!}n*c-3=Qy-M#7V?r!OB=@z5~6a-NTK|(}AL{LCb6eR5e0R zU={!hFaaD82Gah439&X#rp`NE{!3YZ44}V{reyxk^n;pL-W5mFf2X_fB@&6{vtt9(L3`8r0nGEf8S>(0e~|wGI5eIu-}>I z-+}`MzzCQCCm^$v?7{zi@ShI1F*TVz5QokdwWZBXFV1H znD}RZ{~f>C3V_$??d@&b|IE2F4!OPkerG=(j{T<%0E8p}ed{~pc>Ay5L2fTN%klz|Fx3{-+DPz`E8EvN(a z;3Q}Or$7^E1})$;Xa#NHENBNE;5_IAU7#EEfL?GBTmqND70?d`z#td`!(arAf@|P9 zxB+g0+u#nk3+{mjU>r<<}l! z1@S<<5I-aU2|>b;C?p0+Ky*k7l7VC)c}M|Lf|MauNFCCEv>+Ww7t)6eAS1{GGKI_` zOUMecf$SiA$Psdec0sO?JLCy@K|YWlbIs02C!l|tpvF{lbU4%I+)P(9QDHA2nMY3K}e7V3b`L7h-H z)B|0F`k*V&05k{S=my@Fmti_jAE4*CFn zf<8m5&^Kru`T_ld{yt3Vz2}(2}{Fr zumY?EtHA28CaewX!UnJrYyz9ZmasK!2Rpz{unX)4d%)hXFB|{|!6EQ&I0BA>W8ru> z3El(mh120oI0w#!_rnEn5qtz5ri@``~`~ zDm)C2!q?$j@E!O*JPuF7kKh^jDf}FshZo>QcnN+Fe}X^5U*R=)1O5eX!rKTKfkI#r zcmxT-gkV9?5F7|@1Rp{WA&d}1&=JxIIfMd28KH*IMCc&&5rzm8ggL?rVT*7;I3rvU z?g%f0FCqXDj0i(SAfgd*h(yF5#9l-OA{&v5*pDbg6eA8JN)Z)^Dnt$91fl`aggA|8 zLv$cI5f=~_5tk7Ih#|x%;s)Y2;vQlgF^PDDm_^JX<`D~sMZ_}V1L8B{D`E}t1MwTN zjf9aXBo;|PQjk<64atGzLGmMokYY$WQW`0TR6?pEHIO<;eWVf63~7n9K{_Cvk*-Kj zqz^Ix8H@}=Mj~U73CLvRUStL`8<~eZfGk3mAWM-I$m7UbB@-(syc@Eiy>_zq= z2arR^G2~6;9pnS#L*ygm6XYE7CGs_L3HbrJg8YhHL;gf=q5uks!lDQ$3W^2Aj^aY` zp@dMPC^||8rGQdKsiU+}`Y0om8OjP}hjK!>pgd4Mr~p(5DjXGsibEx#Qc)SG98^B4 z09A}Sf+|N`yQp#06lwgIY#?M14Vh zNBuzkK?5`rjYSjDOlVd#2bvcxh!#cD(K2WSvCwM;l}V|L@*K<8H@r(6{CsK!x&@CF*XjOdnXZ7iJra#Nx1IEEUU+<-rPK#jsLXd8`Un1FMTQ!kS}ku#Q+)tQXcF z8-k6%#$uDOd$C#AJZvGh1Y3r!!q#C=VNYY*v0d1U*naFV_B!?sb{zW%`xHBmeS>|6 zUBQ0C{=jbG5I8K3grnlvalAMooH$Mzr-)O-Y2yrVW;kn{1I`8Kh4aUS;39BwxMW-! zE(fx1a}j65BCr^gPX%G;FfToa9?phaGQ7p9*ZaA zS@4{AKD-E?j+etL<2CX6coV!8-X8CQ_r&|-L-CRLczg;z1D}g8#Fya9@zwZxd^7$m zz7u~DKY$;>-^Aa?PvK|rFYs^h@9|&oYxv&;h=3uG2vhdF!30% zmUxPIhIpRXOB^7M5^oX5iI0fShzrDJ;tFw%_?rZiup}~xM&c$3kt9fRBo&et$&h4D zvLo#xd65E0yGb#mWKudQmvoSHgj7kYBQ=rQNL{2p(je(N=`LxK^n^4|dQ195`bPRi zhR7H)nM@;dlZD81vOHOptV1>?Tag{eZe(9_2sw(JK;BEvAs3JjlaG;W$&KVTau>Oe zJVd@hzDJ%SKPA5+FOxr$*U6g{B!xhsQaC9B6mg0yMTMeGF``&f94KxSUrGoiijqi4 zqwJ#`q#UJGQR*ozlnzP{rJpiJxkGtKnWfBA-cnX5Ym`4s2qpp(m5Gx{fJuT$j!BhC zhslJ=n#qaDlPQ2{H&Yx_3R4!-0j3hB3Z^=yCZ=|#3rts-MwxCiJ!G0?ddalJw8FH` zw8@NOCNi@!b2AGwOEN1mYcLxyTQJ)*yD|GRhcZVqCo^X<=QAH-u3)ZZZel*me1W;2 zd6fAM^Ca^V=2y(`m{*y9PyrQ7WumfE`KjVmIjSmEmugD2rMghPsln7JY7#Yrnom7M zEvME}o2c#79_j$~8ucD^nmR{)L;XnoPW{7zWFfM!vhc8out>8gvuLvzvskk@vv{!t zu|%>YvZS-*u@tjZu+*_MvvjcZvRq}k!SaCRG0O{g2WtRp1Zx6o8fzYFF>5(%9cwdd2kS-FLDrkBcsr zLgS{1(4=W9G##2L&6eg$^QDE+Vri+geYAtLGFlC-iPk~ur47<<(8g)Aw3oDZw6C<^ zYzQ_Y8;y;ZO^i*BO`T1j&4SI5&66#VEs`yXEtBm4+hMjUwg$E~whL?nY}eWDvpr^; zXIo}lW&6dBU?;NE*!kGS+2z?a*bUjO*qzzE*+bZ4*i+bZ*blOovDdOUv!7$X#6HY^ zn|+e~8T%sp3i}2J;J|TEIk-7QIb=E1IP^IzIGi}VID$E%IZ`-sI1X}@any0NaGdA3 z%rVMwm*Ww~3yvj@RgPbr2u>0w8>av#ol}uho705Tj?;}ZfHQ(Kku#I?0OwK8YR)Fk z4$e!Q!<=_Gr#YWE32;erDRJp=nQ_^3d2j`BMRD!n%HcZ5RnB#S ztCg#ZtDoyS*ErWK*8o)MnAJdb$hdEWDU=h@=L@=|$udBu4Zc(r&Uc!POkcvE@vcuRPzcpG^; zcrWpe^4{Zp%=?P>1MfN?;KTFL`1tuG`IPze_$>IG`F!|x^Cj?Q@)huv@zwFQ@^$lF z<-5f<$@iRZiSH}lCO?Ls%Fn|u&acR?&2Pr<$nVV`${)|4!GD0il)sL@mA{++D*rA1 zDgNjD%lzN?w*+tktO9%jbOB`nJpoIBT>^dr5duj9*#boZ#{?P#+668Nj0)Trm=$;} zup;nN5GhCz=hglyeBv#xFGmR@TU+` zh$6%#Br2pJq%CA73atul3S)&?g!zRf zg;j+Ogl&Y~goA`*gwurg3zrJl37-+}5gr!4D?B5-AiN^{O9UmtEW#rqA)+jzCt@Yy zA`&1HEs`pdFLG3*PNY?&M`T#!uE>nYYmv_)zeUlaR8c-rNl{f%15q1MchO+cIMEEz z0?~5OlcMdSeWKSyCq(B&mqove0WqQ&hnR?%yqLC_xtOztXS_r;%xFN&{< zZ%N=K*d&A{bO*k)CH+wsryn- zrIw_=OGDCRX>Mr=X%%ThX*+2z>D|)F(s|NHrB6tomF|qhFByystBjD0 zoQ$@Ng^a6AkW8FRrcANSahVpG9+?rD2QqUq?_}0xk+RIP{Ib%r8nR}x&awfrF|rx5 z2W6{dn`OIYhh^`}K9hYXyDo>6W0vEWla|wzGn3mT7bq7imnl~)cUQ)+7dZ6@N>4VZwWvnur zvZ%6>vVpR_vX63thKF8*5=ce)z;Cr(e~Dk)K1qf)~?Y$tKF}CSNo~So|Gxfn{T2N!1F`|Xft-P!fxUsBL7YL3L8-whgKmQ{gDHbI2Hy=)hBQMl zLsdgFLpQ@P!&JjU!)n7e!+yhihI59W47ZHPM*K$dM*2n$Mgd0gM!81iM$JaOMmLOR zjFydl8sm()jHQgVjcts*jiZgTjE@*M7#gUGq8f74vNi zW(y$;WeXDvSBo%hAk#7UR$hLVk|igPob;zpTs>^E3>XFrw)lX}JHLtatwSl#hb+Gjw>q6@q z>kjK7>xb5_t=DWYHk>w6Haa$THvTpVHu*MHHf=ToHVD+upZ*Y5Uawezz}u*~)up75~W%u14ZO>^hWv^>* zZy#u%WM5!kZQo%(WIt)YXusirci?f5b1-ypb_jLY>rm`a@6hdV&0)sjy~Cy>#Zkyn z#nIf+!!gP++p)~C#j(%vuHy^GRVSnqyOX4owv(MxfK!rFfm4msIj0e)X{RNpU(O_F z0cRy=Q)hSQNarl)Qs-vp%g*mGP-RD~2dd79Yb;9+v z>xLWNjn7Td&BV>!Ez&L9t<3GTTff@_w*|L#cbq$~yMnv1yPJEYdzO2d`)T)n_Xq9^ z?&}_S4_*%i4-*e}k0_5Ek8+Pzj{%Pfk2fAaJc*tHp30u)o?f0Yp1Gcto@YIWJf}RD zJb!yJd5L(bds%z=c_n%kc-4A!dR_B+;`PZJ@}_yyy>+}Dy+geBdY5>g^1kGK*L&Xk zyARff$4B1B#K+wy%4eU?F`u(OLq1bJ%RYa6nSDilHGFM-1AO=R7Wtm^?eV?s``q`d zAKH)GPu|bi&)qM|Z=YYK-&wz5ziGdBep~)je{p|pe|!I6|GoZ){Tu!J{O|iO_^$^L z0t5n70xSc30}=uX0_p;~18xS)1*`_51Gxg_0*wRR1ET|T1FHf%0!IU90zU>pL2N-% zLHa>1K@maOK@~x5K|?{)LGOaLgIR;=!Medt!C}Ff!DYd%!B>N)f|r9gL#QDVAvz(B zAz>jIA*CU$Ay-4DLY6}|Ls>#4LUlu(Lc>BcL(4+Xgbs#IhrSEl4r2|I4AT$W6&4Ye z9d<12Y}iQHOxVZW@NSOXGP{j-yYG(PowvJs_xat|cR$;`8jcR<30Dj^5BCXA2rmq; z5AO}X8~!SMBZ3$q6rmnr8xa(-H{wV{OT<9LWW;jBRwQerWTbwiOJro^zR0S`bCK5~ zpGK}mVWN1Wl%g!6e4~=0ila_N^+i31dK2|KnmJlLS|{2$Iy^c%x-z;WdMx^B^p_ZP z3~!85j75xJOmfVjn8uhZF%vOwV>V-1VkKksV_jpTV)J6FW4mH+#lDDLizCDd#c9OZ z#f8MB$Cbsk#SO>J#I3}m;<@7$<1OO-;*;YK#W%(G$3Ki;j^9pTOOQ!0PVh*GODIUF zPq>(HKjBTn??h@MJyAc=H8DCdKe0CPLgJmoSBXE8C`n>TI!Vq+5lQ=!jwf{{-AbBI zT2Ce=izI6$J0*uF=OkApcP8IVev!PkhqOmzkJcWiJ>h$D_8i~Sx##Ad`913?Xh!3+bOS7exx#`il^$Ox}-*@=BL)B_NLxTeUtioFUwx3y@q=|_Qvlm z+}p7C^4^KP%V{8uBTX*NEX_A*>$a z*D^>Mq8U0FyE39O@-yl(dNb~4EM{zG(lTW-O)|YRlQK&(TQUbTA7`#)p|kk2)Uxcd zLbI~6sZe_j7`kBp~P0u#W_Q;OUF3N7q?$4gi{+NTx;muLavCRp|$;zqB>CCy6 z^D5`(KI%TneMb8{_a*K-w6A&J;J(NEKIdX{1#&fV9dpBTb8~BRdvfpRzRlgrW6zV% zv&aj`+nZOG*PeGh??v8vJ|$lw-yq*3KOw(3zd8SE{^R`5`?324_iOHV+8?<;fB%X7 zm-bKWe|G>rz;i(5fbD_M1K9_TALu@C_rRM2TLtU|@&y(J0R`y=6$R%CZWg>M_*KYK zC|zh;=v$alSXy|t@LJ)E!i|H>2PF?09rQk!eDKJ@GY7{G&K+DYq7>1K42!&ql8O!& zwHA#QJu6x(rW8vQ8y0&OClwzqZY>@yo-1BIL^(u1WOT^uQ1YQ8huRKZJM{d}MhSC? zREbH6Pf1EiX-Rv@jgprozYen=mOX5KIN)&F;fllO58pog`tarvjw6aktdE2o$v#qj zr02+kBg;qOqdZ5|jyfETIGTU7{^;eS(??fIv86(#I;F0qaivA2Ev3VyPfORzC}s3A z<1(MJ)UvX&j23uT+-?B$B(*5x7PIpsCw7t0@(f2crL2vlfQ?5c>ZD5_|#7_N9) zv3889;-OkdF<}7#Y#}gU8!1WUl~!kzp|lnpz?9$Y8A0cyvnf3yDFus ztm<6Vt*X~mTgN$%D<8Kz9)3Lk_{rn_#~&YGttM4VR2x1#8&S*qErIj}jaxu&_VdAj*a3#o

eh>`Q>|al z5YN!hn4AeXlXa%%Oy8O5GplXnHpw=#wxG70wz{?}Z8L4(&oZ5rIcs?~^laYQlV`7< zeR_7IowZ$|-L^fv{XlzD`$+qX_TL>G9V#7;9Wfon9cMajbi6(X&hehpJm+>U>0If# z^XKlJdv_jvUiiGhd7txX=c~^5o}W7ZrIXYt*=gPx+_|swWarh+r=35#XkCh3_FYk3 zMP033*SlVKgKoZVt#0@3ABJKrWfuN=+)`<>`m>h?Ct5D?EP|)d{O$M<;Adz`4<~6j$E9-xOs{DlEx+1 zOG%f?E_GcRzx1h(&`0kx>kID7?Q7^8>U-Yz`!d&M^~)}o6EBxu?z}vH`O_7`75Wvk zDT@;yYR%QlS7)!T57Gve2OS6F1`iLO8@xaGVF*7&A2J^b8Ok4O8X6mVH4KLNhjoX& zhSP?thc6G$4sVRGjVO;ejl_=}9qAkyA6XeCjY^MNjfRgFj<$~89DO^68WR~a8VeZ9 z8EY6D9-ANAy2g7=`>Hv&fnd>$A3@np6|V^ zdnfJ<-g|Lx>ptIo-TOZGGw+|cKX`xs{`Ld@2YL^DA7nkKe=zi5ejJPojO&m4jc1Ra z93L5fH33ZsP8d!EOzfLzoEV#U{Sf(3Vo;>>X znESETW3R^|&eCTsXCr2dXFFye%zl2t^hDu_ zoV)I+Oqp{`tph8;pNxwQ12w(S-y*UclcfR zyXkiu?>XOVzxREg^SUSTr<0$?J}s_bSEN>KSK?O6S1zqQUD^CB@Y(2d$mhb(?Vra#fBi!HqW;D6 zOXin`FW0{;uM$>eR~=RpSF2Y0S6_UEzKVP`{~GbN`F zef#pA<-6*4kM9}Z8@^xrzPv_QlUs9KOI|y^c6IILI&xin-D*8%y>$KJ`jhp|4Z#iL zjj)a4jn0j!jg24NKXiWt{Mi4a?Z<;3t3PQ!HGX>k%=y{;^Y+h=znFe0|8o14{_Etg zYrmF%6MxJ9cK)66yY~0+?>B$2f29A||4I6D{Lj@tuQpMe^i7-1_|0RRS2ka4!CT^6 zR$DP!JXF0x(zr1`EJo0T?U*g9Tu)01Os@ z!2&Q?0EQQU;RRrL0T^BYh8KY01z>mq7+wH|7l7dfV0Zx-UI2y{fZ+vTcmWt*0EQQU z;RRrL0T^BYh8KY01z>mq7+wH|7l7dfV0Zx-UI2y{fZ+vTcme)D_5%EKufopl0EoX= z1Psu2ZZ!DtH|^XO@V8*Lw?A6`k2@BK|KpZ}e>&{^5O=)({yTnt=N)%{@Q$zFAH?p| L!T)*uzpwufP<;#C literal 25460 zcmeI5S5y?+wy;-K=L`)^&bi4s=Nu#>IY>rw4gvxK3WBHvL4t^qBq$&tiUOiwMg#>^ z1Qiu9Aflk6;LqNBod2Ac^K|dSedy{jdd)Fw)~eZEuU~x=0RQ-K|A;sk01y!wAM0Rd zDB$YmE`WInkbn))00{{B`o~3EJDNJ}l>C=tV+ufjotl*SYp?%O^xx7%|LE9w03g<# z0*R#f=)Yp^otV`x?C;p_uQ+z6shxblUvcn1aq{0a|HOrV*El&C?bMtGK!6zhcP!ZU zSM2w9Y|!^t91sz?vxo1^o%+mxz&L*Z{ETi07g;KDY1Kl zL*fM-e3P6)0%Lun0|NyVF2D_V03YB70zeQ50}&t!#DD~#14$qSWPmJ?1M)x-C;?@l z0#t!I&;Xi13+Mn{pa=AUAus~Qzyz29b6^21!7gA8Y=AAW0}j9uIDy^31-Jq?;0`>2 z7w`r?z!&%de-HqIKrjdadqEfo2N56=M1dF(3*taLNCZhB8Ki(zkOtDhevk>WzyXjA za=}4x2;_l$Pyh<|aU1#v^X5I-aU2|>b;C?p0+ zKy*k7l7VC)c}M|Lf|MauNFCCEv>HWi7#If=U=mD$sW2!qTuTtN<&)DzG}N32Vc;umNlY zo51F4z7nA;d5{+d>-zAFTy==AKVXLgNNW@cm%!;--RE*58(;; z2|NuygI~b&@N4)Dya>OCKf<5kHFzEV4sXI+@E-(>Kq0UQJc5K^La-oc2o3}{f)62p z5Jre0=m=?qEJ6XHj8H>pB6JXX2t$Mk!W?0RutC@(oDj|kH-sm`2jPbZM1&y15Rr%& zL_8u1u@8}s$V41KR{%BVi;8iA55S6eJZ%LvkQ_ zko-s?q$rY(lt#)Sm5{1P4WtfIA8CX%Ls}xOk@iR@qzlpm>5cS51|ma{;m9at95NA^ zf=owdB6E<3kOjyhWHGV~c@kNTJdHeyY(lmm&m%jLJ;*-fRpcP@267a67deJ}gnWXW zLCzvyA{UU0$oI$<9hOiVMYu5<-ch=qMSK0!kUBj?zZy zql{2yC@YjL$^qq!az}Zi{7^xty{HIO3@QPYf=Wkap>j}ps6x~+R4J+gRgF50sz)`W z+E5oz7g3i`{is3I4b&~vJ=8!J^mEqubD(=pOWC^Z^57;B6@#u?*|@xl0GLNF1S7)&B26_bI< z!Q^9(V2Uy2m@3R^OatZ|<~-&i<`U*A<~n8+a~Jav^BD6K^8)i4vxxbK`GQ%;Y-0Xk zkysp-gr#EHu{>BotQb}bD~DCaYG8G-Mp$#KHP!*^g7w7uVuP?@*l275b{{qan}f~A z7GX=U71$c=8Eg}_4cm$B#r9)|up`*J*oWB1*r(We>>KPdb_M$t`vbd$L*TGD5{`;v z$MNEXaN;;=oB~b_r;Rhfnc{Zg>~YRG51cP92p5Kn!6o8Saap*7xB}d9+zDJ2t`66T zYsGcqdU02A*Kwn``?yEAY1}OCHEt323Acv(f!o5vcr2cTXTfvg`S2omI$jR1jMv2L z;Z5+Ccssl^-UIK855|Y%WARD&bbK~G4_|~Y#h=92;v4WS_zrw8{wn@D{ucfLeiA=} zpTobwzsG;Zuj79aAOeO!Bv1()1U`ZYL6RUxP$6g$3 z!T~}ap@>jQs3e>wG!ohfU4%Zu0O2O#E@7N7MVKYLCM**^6V?g8h!7D&BoSGNoJ0Yl z7*U$2NK_~45>1F!M0=tO(Tf;B3?)Vr6N%}>Y+^p~DDecbns|oTOuRtsA@&o8iMNSk z#3#h(#8<>6;tFw{_=^OQup}~xM&c$3k|ap7Bo&et$&h4DvL)>%d6N7{dr48GL{b_l zo0LyFMk*)Okm^Y-q)yT$(g10MbdNMadPyVAfmSlUfE7^w}L=Gp%k@u0a$a&- zX3AhX$W+8s##F;p&(z9vk?9K4Fw-5Tai$rjd8S3C6{ZcQEoKxmk(rg5n^~Ayl39^i zgV})DoY{`qh1rKWm^qR;kvW|?m-z^DDRVV*J##DbMdp6yVdlHc6Uwsw!2NYD%@C?xuQC1E~?z1Zp}pms&_IrB+kxscqD5>Q(AZ>V4{C z>MV7E`hohD`ilj@LSSKG;bswLkz!F|(PA-X*~Q|-;>i-g63!COlE#w5Qpi%uQp3`~ z($3Pua*bt#A9YaDAT zYc^{kYbk3rYXfULYcJ~n>nQ6()@jz4tV^t4Sbx$W8lFa_anpop(llk74$XvSLvx|| z&_Za@v=mwv?J%u`Rz<6)wb6QL1GG`vL)r}OC2g6uM%!dVuo2l<*?8H+*yPyM*!0;f z*c{m0+5FkU*%H|HvmInR%2vTv$JWAjk*%NYCfftHDYkjGCAKeYo9qa7B0DQPFS{7K z9J@NZ0lOu;BfBSiAbTWx5_=|lK6?p!HG2d5dG<@}L+p3hC)l5}zhVEx{+$DG;5eup z+#DhtvK(q0`WzM<4ji5wfgF(>NgP=mhdD|(syP}tE^zd540GJ$c+4@!vB@SNdkC@Lr~s3mAB zXfNm~7%UhoxL+_|uvD;Cutl&(a7ggJ;I!at!B2uegpfiMAub_NA$cKfAu}NdA#b6* zLh(WwLIpx6gzALah5CeU2t5>fCiG6|i_mXjtT2l(zp$jRim-w3E@4+;f8i+MeZmKY zj|~4HS(QO%u%%Efqa2+9uj3dQ)^C4rY;FHs~;&Lg%JS(3R;1bZfdhJ(wOx&!iX9PtqId zUGzcvefkXjEq#r?ElH5%kQ9+rkkpm5lys2{kc^Q`mpm+4E?F}j8_6${ z+fsNbb}11l1u0!AD=Am0K&e=%45>n?lTr;*T~dQm_obdny_5PX4M~%wxuqqfRiq82 zZKXY>_ev*9XGrRGS6j}Wj17yvdpr4veL2|vSzYQvc9rWvT3r1Wy@t7WV>XCWFN>rmtB(G zkVD8Z%kjxc%W2A)$?cZ&lZ%$yFIOOUQm#p^TW(lxT<(S32f3f}Xn9t7A$fUu9eFEx zH~C=sc=-eJ$K+4Rx5;0Yza{@fenI|={2v990+)h>f~tbCf`h^yg-C@og~JLJ3XKZg z3d0KH3Udk{6*d*IifoD^ii(Q*iZ+U#ilK@riiZ@-6wfMlDh?_>P@GkKulPd=t;DJ% ztfZi%r(~_|z%&07?tg9kb zSyTm8=!qRw|+j4r#bxUQP6nXZd&ux^s>A>DG_Cf!TAw{)j<7j?huVf5Jb#P!tl%=BFJ zg7uR1^7Jb7n)UkhZtFeOTh{xjkJIPWm(+gX0Eg47v<%7)%& z81@_9Gn_U2WVmHSHsUvuGtxJ*H}W-#HOe+BHL5r2F&Z_RHd-|LVT?28GL|ydHr{3I zWgKaoVSLQE&bZ5X*m%zUh``{pmEn5BDh2O=qOLmw3E{9zKyApTh?W)|>wrgP5_^#KxzFDKK zIjyCvb*yczeXZlHbFIs*&skr!9Kc+hTjwcFgvb?N>Xr9fzHiosONIou6HT-66Y5yLP)l zy9v8DcHixB_B{4-_6GJ&_QCck_J#Jf_MP@O?WgUR?SDH^9E2Q{9n2iu9U>eu9f}-`91|S#9IG79J6?Bu?6~N-=|pl8a8hzIb#ikGcgk=o zc4~0ybGqj==d`vPwVPwN)Nb9~_PYajC+{xUeQI~-?vdRyyFcvScBVRuI;%TdIr})r zI_El{bZ&DVa-MX4=e+4cauIM*b}@7DaEWv|;8Nyt&gH7hxXXgecUQbCpR0naiL0w? zxND|siEESV71uG>*RJbsI5%E5c{gJ>SGO>?47U=uCbuhYV{WhAHr#RUyzUC_Chl(T z;qIC4rS8q{SKY_m-?;zqAb9Y5D0!H9cz8s4WP6l*w0aDBOnNMO{PLuD3VW(~T6ymA zjQ7m*toH2iyy-dP`OypVqIuE1biC}ng1q*56?vWU>h-$kHShJ+8|%&EE$?mO?dBcf zeZc#KcZ>I+_oVlt_irC2A5k9-9~&P(pCq3GpVL0wK6iXx_^jz;@` z2lkxU)4FGH&*MGId$xS3zT&=GzIMKWzWaQOe9!v!`9AP{<-6fW@DuP;@w4#r_KWk& z^Q-ae^1J2t+;7z%<IAA$oJCG%i9;h4W7#I?m9#|6C9C$5oB5)~iD~K8-9;6fG5ELAg9#kCE6m%_U zB4{aSE0`KA5v&vJ7#tG3Ke#0LT<}2fmdvo@l+LrY{CM<_Jth_YYe*@HW9WIwjItIE*Y*L?i?N-ejvOe{CxP$@Mqzx5$Fh>2&D*% z2%m_Ah=PbS5q%M35pN6O|ZM z7JKB;87yOWH^#C5t9&Cp#sFB_BwxOzup+ zll(IIM+zlHJViIfIVCbBH>D<}JLP`LLdvgwEc+z)8SZo67qc&aU){dGedGIOksL>Pi|ajW0A40`(^fZ*ZhW!Kkr}nR8pfmU~)G}-{f-^EQ$}>7LZfCsA z_?gL^NzXLMbkB^E})TX`?@HuG8XrSnbmee#p@kLS1M z-^`!O|9+V1u;gK*!(N9I4<9{z?(p#8*~9AvlmdwY!vc?jgo2`i=7QmZ=LPG9ry=yC}J+xTvjY zwCH8g=24cTGDpph`W{U^T6Xlp(K|;Mj&2=eKc;ZZ>R8~hjANC@x{r+=TRILO=Q*x= z-0pbT@!aFJ$1fkBJibzlEfy-)E_Nx7DK02(EFLO;R{X7mQbI2=F7Yl&E-5K#FS%Xv zy5x5$d#OU{uF{~=tkSB|-qP{X4`rw_fikVK-DS~bhszquhRU9mt)HNrkUU{>!so=k z6J;klPTW25wj7jmm#dW9m4}rdEUzo?FP|#^QbDW`uQ06esz|CRu4u2gU9nKHeUkH} z@=4p1p(k@so<7-sa_Z!lN@AsWrBS7KWlCjf<%P<-m2ay+6;G8~l|xlTRbEwn)nL`L zs`YB-YUygTYX9o})hDZas>iE8)L?3aYIJJcYT|2-)wI@(*1WFSI>mWP`IOzMuv3Rl zojEmd>e;FFTIO2mTJu`}+Kk$&+TPlU+LhC|)1s#hPJ5nCK3#gc^;hbr>em{`4U!FJ4gL)o4OI<&4UZdE8;OndMw3S0#{G?zjlGSN zjh~wcO%hGUO?#Tsn@%?MHcd2rZYDHKG#fYjHm5gNHupA9Hh(@xJV!rga?bDE{&Q95 z`p!K*_oap0BH3cr63~*_Qqyv!WxC~SD^sgXt7U6&Yj*4D)@!ZLTEDlkw#m0yw}rMH zYO8O%-Zt0vtDU1=rQM-Ds=cuNT>EJI!g+9>_q^tLm-F%Gi_c#;fB*dQ1@r~s3;Gwl zFQi_mxX^Q9^1^BdsY9~Eyd$vVKu2xIwT@>U-#clYik)_y5uJxSn>$B37rH*4P@fXD}nq2g|n0fKk#r}&=FK%?Rb}M$m*X!NU+%a(cKOp4!WH@zvnxSYa;}`YGIVAB%2q#j zzh=K{e`0@G|Hb}C{i|2WS7okRT@AgOceU~A$kl~w@HK&Jde^+JrCqDKcKO=OwT%JV zfYN}&K+M3=f%5|o20jep2kC=mgF%D2gY|>MgRh3b5dVJ=!|z7cjng-VZp`1Q>mT!?#*)-MO`V8+%*gw%P6A+Xrtq-X6LA_73Wf$Q|Q50e7-L1Pjbob>wa8KZ#{ym?28TV@M4c?o-_vb$UeZBkM_xImFb${Ug-2Lqbd=GRV zct6Kp1CdcoVf&-tN8^t{AM-!9eSG+F?Gx)KwNLJ!(m$R4bmP<8 z73_-Cip@&QO6kg_m1iqkp9MY}eGdAZ|GDk+!_RB0v{m(0kJbIFb*m$*OJ4|IWWU&d ziT_gZrT@#^8nh;|X1*4-R1Z zx21K$y4emu~lM&;9{_ME_X) ziTG3er}xkEKYti30D}c!umB7efWZPVSO5kKz+eFwEC7QAV6XrT7J$J5FjxQv3&3Cj z7%TvT1z@lM3>JXF0x(zr1`EJo0T?U*g9Tu)01Os@!2&Q?00s-dU;!9j0EQQU;RRrL z0T^BYh8KY01z>mq7+wH|7l7dfV0Zx-UI2y{fZ+vTcmWt*0EQQU;RRrL0T^BYh8KY0 z1z>mq7+wH|7l7dfV0Zx-UI2y{fZ+xBzv~6~XO6+&Qv!(pF{$96u>oLbLV&}Loj+;E z+8+V}cU=6wAbMvF{MYIK`T8ICXEE>(jEk1{5eU{%lvNgp(@{|R*ZwTPU}r!;;La$3 z=$+96K0AX6f_KIZDDI3RP~M5-c4CE{aRmQc$A9!h3*KpE=j{-A`8WkdSq()c1$lYF of8B?+)5SkM$nSLZ&nIrDlfQBre-B7d_&fXmFZkDm|AY1a0lYH+ssI20 diff --git a/rtdata/iccprofiles/output/RTv4_ACES-AP0.icc b/rtdata/iccprofiles/output/RTv4_ACES-AP0.icc index 5dbe25a6906feedfdf8aae2977d544db2f0e7c8a..30df95eac32c139e238238d4a74b4166903b38d7 100644 GIT binary patch delta 234 zcmeyv`hr!5fr05oPI7KBiva^eZeB@Ikh_yYL}Zi#`y&QU1~vu`23`i~#N^@v-(a_p ziHTAZ-8}1ck_(DT7#J8G7#J9$%1a7B>^VTTNODGE3Xr`4$kr(W8UkeB0f{F;*dIXb zbTFHV1;j22333M7F9Bq0q(j&aAa)XjodIGeXB6cE)l2}gRZ?>EfaWtXZJ8{D1We8@_1+oGd3?_##erCKdxqwL>PR?LT0RSi?GK>HK delta 254 zcmaFC`iE7Afr05yPI7KBiva^eZeB@Ikh_yYL}Zi#`y&Qc1_1_624x1F#N^@v-(a_p ziHTAZ-8}0Zk_(DT7#J8s7#J9$%1a7B>QkVb_4z$r(ktKs8H%Y?YMUJfQhZOeZD_FiLBx z0EJ{292t@sQW=UF3K$F+;u#be(iv Date: Thu, 6 Sep 2018 10:39:35 +0200 Subject: [PATCH 085/115] Change matrix ACES-P0 and limit slider blue --- rtengine/iccmatrices.h | 12 ++++++------ rtengine/iplab2rgb.cc | 4 ++++ rtgui/iccprofilecreator.cc | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/rtengine/iccmatrices.h b/rtengine/iccmatrices.h index d20cb70c3..29426c62d 100644 --- a/rtengine/iccmatrices.h +++ b/rtengine/iccmatrices.h @@ -80,15 +80,15 @@ constexpr double xyz_sRGB[3][3] = { }; constexpr double xyz_ACESp0[3][3] = { - {0.9525523959, 0.0, 0.0000936786}, - {0.3439664498, 0.7281660966 , -0.0721325464}, - {0.0, -0.0, 1.0088251844} + {0.9908526, 0.0122334, -0.0388654}, + {0.3618807, 0.72255045 , -0.0843859}, + {-0.0027093, 0.0082323, 0.8196880} }; constexpr double ACESp0_xyz[3][3] = { - {1.0498110175, 0.0, -0.0000974845}, - {-0.4959030231, 1.3733130458 , 0.0982400361}, - {0.0, 0.0, 0.9912520182} + {1.01583320, -0.01772807, 0.04634052}, + {-0.50781231, 1.39131494 , 0.11915641}, + {0.00845768, -0.01403193, 1.21893277} }; constexpr double xyz_ACESp1[3][3] = { diff --git a/rtengine/iplab2rgb.cc b/rtengine/iplab2rgb.cc index cab77c8ab..c4707f16f 100644 --- a/rtengine/iplab2rgb.cc +++ b/rtengine/iplab2rgb.cc @@ -602,6 +602,10 @@ Imagefloat* ImProcFunctions::workingtrc(Imagefloat* working, int cw, int ch, int // 7 parameters for smoother curves cmsWhitePointFromTemp(&xyD, (double)temp); + if (profile == "ACESp0") { + xyD = {0.32168, 0.33767, 1.0};//refine white point to avoid differences + } + GammaTRC[0] = GammaTRC[1] = GammaTRC[2] = cmsBuildParametricToneCurve(NULL, five, gammaParams);//5 = more smoother than 4 oprofdef = cmsCreateRGBProfile(&xyD, &Primaries, GammaTRC); cmsFreeToneCurve(GammaTRC[0]); diff --git a/rtgui/iccprofilecreator.cc b/rtgui/iccprofilecreator.cc index a61f0e80d..8ae8d4ab9 100644 --- a/rtgui/iccprofilecreator.cc +++ b/rtgui/iccprofilecreator.cc @@ -117,7 +117,7 @@ ICCProfileCreator::ICCProfileCreator(RTWindow *rtwindow) setExpandAlignProperties(aPrimariesGreenY, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); aPrimariesBlueX = Gtk::manage(new Adjuster(M("ICCPROFCREATOR_PRIM_BLUX"), 0.0001, 0.1600, 0.0001, 0.1500/*, gamutl4, gamuts4*/)); setExpandAlignProperties(aPrimariesBlueX, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - aPrimariesBlueY = Gtk::manage(new Adjuster(M("ICCPROFCREATOR_PRIM_BLUY"), -0.0700, 0.0700, 0.0001, 0.060/*, gamutl5, gamuts5*/)); + aPrimariesBlueY = Gtk::manage(new Adjuster(M("ICCPROFCREATOR_PRIM_BLUY"), -0.0800, 0.0700, 0.0001, 0.060/*, gamutl5, gamuts5*/)); setExpandAlignProperties(aPrimariesBlueY, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); primariesGrid->attach(*aPrimariesRedX, 0, 0, 1, 1); From bcc7a3fb855de67366ba295eeec6fd88b8a983b4 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 6 Sep 2018 13:52:48 +0200 Subject: [PATCH 086/115] raw ca correction: first try to avoid colour shift, #4777 --- rtdata/languages/default | 2 ++ rtengine/CA_correct_RT.cc | 39 ++++++++++++++++++++++++++++++++++++++ rtengine/procparams.cc | 9 +++++++++ rtengine/procparams.h | 1 + rtengine/rawimagesource.cc | 8 ++++---- rtengine/rawimagesource.h | 1 + rtgui/paramsedited.cc | 8 +++++++- rtgui/paramsedited.h | 1 + rtgui/ppversion.h | 4 +++- rtgui/rawcacorrection.cc | 16 +++++++++++++++- rtgui/rawcacorrection.h | 2 ++ 11 files changed, 84 insertions(+), 7 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 05498985f..e786b5355 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -749,6 +749,7 @@ HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold HISTORY_MSG_RAW_BORDER;Raw border HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1782,6 +1783,7 @@ TP_PRSHARPENING_LABEL;Post-Resize Sharpening TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. TP_RAWCACORR_AUTO;Auto-correction TP_RAWCACORR_AUTOIT;Iterations +TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift TP_RAWCACORR_CABLUE;Blue TP_RAWCACORR_CARED;Red TP_RAWCACORR_CASTR;Strength diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index f8fc9b39e..7e05c856c 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -26,6 +26,7 @@ #include "rtengine.h" #include "rawimagesource.h" #include "rt_math.h" +#include "gauss.h" #include "median.h" //#define BENCHMARK #include "StopWatch.h" @@ -118,6 +119,7 @@ float* RawImageSource::CA_correct_RT( double cared, double cablue, double caautostrength, + bool avoidColourshift, const array2D &rawData, double* fitParamsTransfer, bool fitParamsIn, @@ -142,6 +144,14 @@ float* RawImageSource::CA_correct_RT( } } } + array2D oldraw(W,H); + if (avoidColourshift) { + for(int i = 0; i < H; ++i) { + for(int j = 0; j < W; ++j) { + oldraw[i][j] = rawData[i][j]; + } + } + } double progress = 0.0; @@ -1230,6 +1240,35 @@ float* RawImageSource::CA_correct_RT( buffer = nullptr; } + + if (avoidColourshift) { + array2D redFactor((W+1)/2, (H+1)/2); + array2D blueFactor((W+1)/2, (H+1)/2); + + for(int i = 0; i < H; ++i) { + for(int j = 0; j < W; ++j) { + float factor = (rawData[i][j] * oldraw[i][j] == 0.0 ? 1.0 : oldraw[i][j] / rawData[i][j]); + if(FC(i,j) == 0) { + redFactor[i/2][j/2] = factor; + } else if(FC(i,j) == 2) { + blueFactor[i/2][j/2] = factor; + } + } + } + gaussianBlur(redFactor, redFactor, (W+1)/2, (H+1)/2, 30.0); + gaussianBlur(blueFactor, blueFactor, (W+1)/2, (H+1)/2, 30.0); + + for(int i = 0; i < H; ++i) { + for(int j = 0; j < W; ++j) { + if(FC(i,j) == 0) { + rawData[i][j] *= redFactor[i/2][j/2]; + } else if(FC(i,j) == 2) { + rawData[i][j] *= blueFactor[i/2][j/2]; + } + } + } + } + if(plistener) { plistener->setProgress(1.0); } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index eb06e5b16..af89f99a1 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2561,6 +2561,7 @@ RAWParams::RAWParams() : ff_AutoClipControl(false), ff_clipControl(0), ca_autocorrect(false), + ca_avoidcolourshift(true), caautoiterations(2), cared(0.0), cablue(0.0), @@ -2586,6 +2587,7 @@ bool RAWParams::operator ==(const RAWParams& other) const && ff_AutoClipControl == other.ff_AutoClipControl && ff_clipControl == other.ff_clipControl && ca_autocorrect == other.ca_autocorrect + && ca_avoidcolourshift == other.ca_avoidcolourshift && caautoiterations == other.caautoiterations && cared == other.cared && cablue == other.cablue @@ -3383,6 +3385,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->raw.ff_AutoClipControl, "RAW", "FlatFieldAutoClipControl", raw.ff_AutoClipControl, keyFile); saveToKeyfile(!pedited || pedited->raw.ff_clipControl, "RAW", "FlatFieldClipControl", raw.ff_clipControl, keyFile); saveToKeyfile(!pedited || pedited->raw.ca_autocorrect, "RAW", "CA", raw.ca_autocorrect, keyFile); + saveToKeyfile(!pedited || pedited->raw.ca_avoidcolourshift, "RAW", "CAAvoidColourshift", raw.ca_avoidcolourshift, keyFile); saveToKeyfile(!pedited || pedited->raw.caautoiterations, "RAW", "CAAutoIterations", raw.caautoiterations, keyFile); saveToKeyfile(!pedited || pedited->raw.cared, "RAW", "CARed", raw.cared, keyFile); saveToKeyfile(!pedited || pedited->raw.cablue, "RAW", "CABlue", raw.cablue, keyFile); @@ -4761,6 +4764,12 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } else { raw.caautoiterations = 1; } + + if (ppVersion >= 343) { + assignFromKeyfile(keyFile, "RAW", "CAAvoidColourshift", pedited, raw.ca_avoidcolourshift, pedited->raw.ca_avoidcolourshift); + } else { + raw.ca_avoidcolourshift = false; + } assignFromKeyfile(keyFile, "RAW", "CARed", pedited, raw.cared, pedited->raw.cared); assignFromKeyfile(keyFile, "RAW", "CABlue", pedited, raw.cablue, pedited->raw.cablue); // For compatibility to elder pp3 versions diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 8e8978601..0b8b5ba56 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1368,6 +1368,7 @@ struct RAWParams { int ff_clipControl; bool ca_autocorrect; + bool ca_avoidcolourshift; int caautoiterations; double cared; double cablue; diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index a4a68cc17..77c6285be 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2009,13 +2009,13 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } if(numFrames == 4) { double fitParams[64]; - float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, *rawDataFrames[0], fitParams, false, true, nullptr, false); + float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, raw.ca_avoidcolourshift, *rawDataFrames[0], fitParams, false, true, nullptr, false); for(int i = 1; i < 3; ++i) { - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, *rawDataFrames[i], fitParams, true, false, buffer, false); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, raw.ca_avoidcolourshift, *rawDataFrames[i], fitParams, true, false, buffer, false); } - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, *rawDataFrames[3], fitParams, true, false, buffer, true); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, raw.ca_avoidcolourshift, *rawDataFrames[3], fitParams, true, false, buffer, true); } else { - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, rawData, nullptr, false, false, nullptr, true); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, raw.ca_avoidcolourshift, rawData, nullptr, false, false, nullptr, true); } } diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index b9729555b..972e1fe64 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -245,6 +245,7 @@ protected: double cared, double cablue, double caautostrength, + bool avoidColourshift, const array2D &rawData, double* fitParamsTransfer, bool fitParamsIn, diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index c9ce7affc..2ccb62f65 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -431,6 +431,7 @@ void ParamsEdited::set(bool v) raw.xtranssensor.exBlackGreen = v; raw.xtranssensor.exBlackBlue = v; raw.ca_autocorrect = v; + raw.ca_avoidcolourshift = v; raw.caautoiterations = v; raw.cablue = v; raw.cared = v; @@ -987,6 +988,7 @@ void ParamsEdited::initFrom(const std::vector& raw.xtranssensor.exBlackGreen = raw.xtranssensor.exBlackGreen && p.raw.xtranssensor.blackgreen == other.raw.xtranssensor.blackgreen; raw.xtranssensor.exBlackBlue = raw.xtranssensor.exBlackBlue && p.raw.xtranssensor.blackblue == other.raw.xtranssensor.blackblue; raw.ca_autocorrect = raw.ca_autocorrect && p.raw.ca_autocorrect == other.raw.ca_autocorrect; + raw.ca_avoidcolourshift = raw.ca_avoidcolourshift && p.raw.ca_avoidcolourshift == other.raw.ca_avoidcolourshift; raw.caautoiterations = raw.caautoiterations && p.raw.caautoiterations == other.raw.caautoiterations; raw.cared = raw.cared && p.raw.cared == other.raw.cared; raw.cablue = raw.cablue && p.raw.cablue == other.raw.cablue; @@ -2628,6 +2630,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.raw.ca_autocorrect = mods.raw.ca_autocorrect; } + if (raw.ca_avoidcolourshift) { + toEdit.raw.ca_avoidcolourshift = mods.raw.ca_avoidcolourshift; + } + if (raw.caautoiterations) { toEdit.raw.caautoiterations = dontforceSet && options.baBehav[ADDSET_RAWCACORR] ? toEdit.raw.caautoiterations + mods.raw.caautoiterations : mods.raw.caautoiterations; } @@ -3133,7 +3139,7 @@ bool RAWParamsEdited::XTransSensor::isUnchanged() const bool RAWParamsEdited::isUnchanged() const { - return bayersensor.isUnchanged() && xtranssensor.isUnchanged() && ca_autocorrect && caautoiterations && cared && cablue && hotPixelFilter && deadPixelFilter && hotdeadpix_thresh && darkFrame + return bayersensor.isUnchanged() && xtranssensor.isUnchanged() && ca_autocorrect && ca_avoidcolourshift && caautoiterations && cared && cablue && hotPixelFilter && deadPixelFilter && hotdeadpix_thresh && darkFrame && df_autoselect && ff_file && ff_AutoSelect && ff_BlurRadius && ff_BlurType && exPos && exPreser && ff_AutoClipControl && ff_clipControl; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 1cd16290c..0a795696c 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -787,6 +787,7 @@ public: XTransSensor xtranssensor; bool ca_autocorrect; + bool ca_avoidcolourshift; bool caautoiterations; bool cared; bool cablue; diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index 5380943bf..050c4c653 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,11 +1,13 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 342 +#define PPVERSION 343 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* Log of version changes + 343 2018-09-06 + raw auto ca correction avoid colour shift 342 2018-09-05 raw auto ca correction iterations 341 2018-07-22 diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 9957ca9be..9a1001f74 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -28,6 +28,7 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM { auto m = ProcEventMapper::getInstance(); EvPreProcessCAAutoiterations = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_AUTOIT"); + EvPreProcessCAColourshift = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_COLOURSHIFT"); Gtk::Image* icaredL = Gtk::manage (new RTImage ("circle-red-cyan-small.png")); Gtk::Image* icaredR = Gtk::manage (new RTImage ("circle-cyan-red-small.png")); @@ -66,6 +67,11 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM pack_start( *caRed, Gtk::PACK_SHRINK, 4); pack_start( *caBlue, Gtk::PACK_SHRINK, 4); + caAvoidcolourshift = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AVOIDCOLORSHIFT"), multiImage)); + caAvoidcolourshift->setCheckBoxListener (this); + pack_start( *caAvoidcolourshift, Gtk::PACK_SHRINK, 4); + + } void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited) @@ -74,7 +80,8 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi if(pedited ) { caAutocorrect->setEdited(pedited->raw.ca_autocorrect); - caAutoiterations->setEditedState( pedited->raw.cared ? Edited : UnEdited ); + caAvoidcolourshift->setEdited(pedited->raw.ca_avoidcolourshift); + caAutoiterations->setEditedState( pedited->raw.caautoiterations ? Edited : UnEdited ); caRed->setEditedState( pedited->raw.cared ? Edited : UnEdited ); caBlue->setEditedState( pedited->raw.cablue ? Edited : UnEdited ); } @@ -85,6 +92,7 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi caBlue->set_sensitive(!pp->raw.ca_autocorrect); caAutocorrect->setValue(pp->raw.ca_autocorrect); + caAvoidcolourshift->setValue(pp->raw.ca_avoidcolourshift); caAutoiterations->setValue (pp->raw.caautoiterations); caRed->setValue (pp->raw.cared); caBlue->setValue (pp->raw.cablue); @@ -95,12 +103,14 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi void RAWCACorr::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited) { pp->raw.ca_autocorrect = caAutocorrect->getLastActive(); + pp->raw.ca_avoidcolourshift = caAvoidcolourshift->getLastActive(); pp->raw.caautoiterations = caAutoiterations->getValue(); pp->raw.cared = caRed->getValue(); pp->raw.cablue = caBlue->getValue(); if (pedited) { pedited->raw.ca_autocorrect = !caAutocorrect->get_inconsistent(); + pedited->raw.ca_avoidcolourshift = !caAvoidcolourshift->get_inconsistent(); pedited->raw.caautoiterations = caAutoiterations->getEditedState (); pedited->raw.cared = caRed->getEditedState (); pedited->raw.cablue = caBlue->getEditedState (); @@ -136,6 +146,10 @@ void RAWCACorr::checkBoxToggled (CheckBox* c, CheckValue newval) if (listener) { listener->panelChanged (EvPreProcessAutoCA, caAutocorrect->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); } + } else if (c == caAvoidcolourshift) { + if (listener) { + listener->panelChanged (EvPreProcessCAColourshift, caAvoidcolourshift->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); + } } } diff --git a/rtgui/rawcacorrection.h b/rtgui/rawcacorrection.h index 27e486247..614bd4b90 100644 --- a/rtgui/rawcacorrection.h +++ b/rtgui/rawcacorrection.h @@ -32,8 +32,10 @@ protected: Adjuster* caAutoiterations; Adjuster* caRed; Adjuster* caBlue; + CheckBox* caAvoidcolourshift; rtengine::ProcEvent EvPreProcessCAAutoiterations; + rtengine::ProcEvent EvPreProcessCAColourshift; public: From 68ee9d422ba679e5fcb3a37af43d923f546ae9e7 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 6 Sep 2018 16:05:06 +0200 Subject: [PATCH 087/115] raw ca correction: optimized avoid colour shift, #4777 --- rtengine/CA_correct_RT.cc | 137 ++++++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 59 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 7e05c856c..b6c4b0375 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -144,11 +144,17 @@ float* RawImageSource::CA_correct_RT( } } } - array2D oldraw(W,H); + array2D* oldraw = nullptr; if (avoidColourshift) { + oldraw = new array2D((W + 1) / 2, H); + #pragma omp parallel for for(int i = 0; i < H; ++i) { - for(int j = 0; j < W; ++j) { - oldraw[i][j] = rawData[i][j]; + int j = FC(i, 0) & 1; + for(; j < W - 1; j += 2) { + (*oldraw)[i][j / 2] = rawData[i][j]; + } + if(j < W) { + (*oldraw)[i][j / 2] = rawData[i][j]; } } } @@ -284,15 +290,15 @@ float* RawImageSource::CA_correct_RT( // rgb values should be floating point numbers between 0 and 1 // after white balance multipliers are applied - #ifdef __SSE2__ +#ifdef __SSE2__ vfloat c65535v = F2V(65535.f); - #endif +#endif for (int rr = rrmin; rr < rrmax; rr++) { int row = rr + top; int cc = ccmin; int col = cc + left; - #ifdef __SSE2__ +#ifdef __SSE2__ int c0 = FC(rr, cc); if(c0 == 1) { rgb[c0][rr * ts + cc] = rawData[row][col] / 65535.f; @@ -309,7 +315,7 @@ float* RawImageSource::CA_correct_RT( STVFU(rgb[1][indx1], val1); STVFU(rgb[1][indx1 + 4], val2); } - #endif +#endif for (; cc < ccmax; cc++, col++) { int c = FC(rr, cc); int indx1 = rr * ts + cc; @@ -389,16 +395,16 @@ float* RawImageSource::CA_correct_RT( //end of initialization - #ifdef __SSE2__ +#ifdef __SSE2__ vfloat onev = F2V(1.f); vfloat epsv = F2V(eps); - #endif +#endif for (int rr = 3; rr < rr1 - 3; rr++) { int row = rr + top; int cc = 3 + (FC(rr,3) & 1); int indx = rr * ts + cc; int c = FC(rr,cc); - #ifdef __SSE2__ +#ifdef __SSE2__ for (; cc < cc1 - 9; cc+=8, indx+=8) { //compute directional weights using image gradients vfloat rgb1mv1v = LC2VFU(rgb[1][indx - v1]); @@ -417,7 +423,7 @@ float* RawImageSource::CA_correct_RT( STC2VFU(rgb[1][indx], (wtuv * rgb1mv1v + wtdv * rgb1pv1v + wtlv * rgb1m1v + wtrv * rgb1p1v) / (wtuv + wtdv + wtlv + wtrv)); } - #endif +#endif for (; cc < cc1 - 3; cc+=2, indx+=2) { //compute directional weights using image gradients float wtu = 1.f / SQR(eps + fabsf(rgb[1][indx + v1] - rgb[1][indx - v1]) + fabsf(rgb[c][indx >> 1] - rgb[c][(indx - v2) >> 1]) + fabsf(rgb[1][indx - v1] - rgb[1][indx - v3])); @@ -433,11 +439,11 @@ float* RawImageSource::CA_correct_RT( int offset = (FC(row,max(left + 3, 0)) & 1); int col = max(left + 3, 0) + offset; int indx = rr * ts + 3 - (left < 0 ? (left+3) : 0) + offset; - #ifdef __SSE2__ +#ifdef __SSE2__ for(; col < min(cc1 + left - 3, width) - 7; col+=8, indx+=8) { STVFU(Gtmp[(row * width + col) >> 1], LC2VFU(rgb[1][indx])); } - #endif +#endif for(; col < min(cc1 + left - 3, width); col+=2, indx+=2) { Gtmp[(row * width + col) >> 1] = rgb[1][indx]; } @@ -445,14 +451,14 @@ float* RawImageSource::CA_correct_RT( } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - #ifdef __SSE2__ +#ifdef __SSE2__ vfloat zd25v = F2V(0.25f); - #endif +#endif for (int rr = 4; rr < rr1 - 4; rr++) { int cc = 4 + (FC(rr, 2) & 1); int indx = rr * ts + cc; int c = FC(rr, cc); - #ifdef __SSE2__ +#ifdef __SSE2__ for (; cc < cc1 - 10; cc += 8, indx += 8) { vfloat rgb1v = LC2VFU(rgb[1][indx]); vfloat rgbcv = LVFU(rgb[c][indx >> 1]); @@ -480,7 +486,7 @@ float* RawImageSource::CA_correct_RT( STVFU(grblpfh[indx >> 1], zd25v * (glpfhv + (rgbcv + LVFU(rgb[c][(indx + 2) >> 1]) + LVFU(rgb[c][(indx - 2) >> 1])))); } - #endif +#endif for (; cc < cc1 - 4; cc += 2, indx += 2) { rbhpfv[indx >> 1] = fabsf(fabsf((rgb[1][indx] - rgb[c][indx >> 1]) - (rgb[1][indx + v4] - rgb[c][(indx + v4) >> 1])) + fabsf((rgb[1][indx - v4] - rgb[c][(indx - v4) >> 1]) - (rgb[1][indx] - rgb[c][indx >> 1])) - @@ -507,11 +513,11 @@ float* RawImageSource::CA_correct_RT( } } - #ifdef __SSE2__ +#ifdef __SSE2__ vfloat zd3v = F2V(0.3f); vfloat zd1v = F2V(0.1f); vfloat zd5v = F2V(0.5f); - #endif +#endif // along line segments, find the point along each segment that minimizes the colour variance // averaged over the tile; evaluate for up/down and left/right away from R/B grid point @@ -519,7 +525,7 @@ float* RawImageSource::CA_correct_RT( int cc = 8 + (FC(rr, 2) & 1); int indx = rr * ts + cc; int c = FC(rr, cc); - #ifdef __SSE2__ +#ifdef __SSE2__ vfloat coeff00v = ZEROV; vfloat coeff01v = ZEROV; vfloat coeff02v = ZEROV; @@ -560,7 +566,7 @@ float* RawImageSource::CA_correct_RT( coeff[1][1][c>>1] += vhadd(coeff11v); coeff[1][2][c>>1] += vhadd(coeff12v); - #endif +#endif for (; cc < cc1 - 8; cc += 2, indx += 2) { //in linear interpolation, colour differences are a quadratic function of interpolation position; @@ -825,17 +831,17 @@ float* RawImageSource::CA_correct_RT( // rgb values should be floating point number between 0 and 1 // after white balance multipliers are applied - #ifdef __SSE2__ +#ifdef __SSE2__ vfloat c65535v = F2V(65535.f); vmask gmask = _mm_set_epi32(0, 0xffffffff, 0, 0xffffffff); - #endif +#endif for (int rr = rrmin; rr < rrmax; rr++) { int row = rr + top; int cc = ccmin; int col = cc + left; int indx = row * width + col; int indx1 = rr * ts + cc; - #ifdef __SSE2__ +#ifdef __SSE2__ int c = FC(rr, cc); if(c & 1) { rgb[1][indx1] = rawData[row][col] / 65535.f; @@ -853,7 +859,7 @@ float* RawImageSource::CA_correct_RT( STVFU(rgb[1][indx1], vself(gmask, PERMUTEPS(gtmpv, _MM_SHUFFLE(1, 1, 0, 0)), val1v)); STVFU(rgb[1][indx1 + 4], vself(gmask, PERMUTEPS(gtmpv, _MM_SHUFFLE(3, 3, 2, 2)), val2v)); } - #endif +#endif for (; cc < ccmax; cc++, col++, indx++, indx1++) { int c = FC(rr, cc); rgb[c][indx1 >> ((c & 1) ^ 1)] = rawData[row][col] / 65535.f; @@ -954,15 +960,15 @@ float* RawImageSource::CA_correct_RT( // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if (!autoCA || fitParamsIn) { - #ifdef __SSE2__ +#ifdef __SSE2__ const vfloat onev = F2V(1.f); const vfloat epsv = F2V(eps); - #endif +#endif //manual CA correction; use red/blue slider values to set CA shift parameters for (int rr = 3; rr < rr1 - 3; rr++) { int cc = 3 + FC(rr, 1), c = FC(rr,cc), indx = rr * ts + cc; - #ifdef __SSE2__ +#ifdef __SSE2__ for (; cc < cc1 - 10; cc += 8, indx += 8) { //compute directional weights using image gradients vfloat val1v = epsv + vabsf(LC2VFU(rgb[1][(rr + 1) * ts + cc]) - LC2VFU(rgb[1][(rr - 1) * ts + cc])); @@ -975,7 +981,7 @@ float* RawImageSource::CA_correct_RT( //store in rgb array the interpolated G value at R/B grid points using directional weighted average STC2VFU(rgb[1][indx], (wtuv * LC2VFU(rgb[1][indx - v1]) + wtdv * LC2VFU(rgb[1][indx + v1]) + wtlv * LC2VFU(rgb[1][indx - 1]) + wtrv * LC2VFU(rgb[1][indx + 1])) / (wtuv + wtdv + wtlv + wtrv)); } - #endif +#endif for (; cc < cc1 - 3; cc += 2, indx += 2) { //compute directional weights using image gradients float wtu = 1.f / SQR(eps + fabsf(rgb[1][(rr + 1) * ts + cc] - rgb[1][(rr - 1) * ts + cc]) + fabsf(rgb[c][(rr * ts + cc) >> 1] - rgb[c][((rr - 2) * ts + cc) >> 1]) + fabsf(rgb[1][(rr - 1) * ts + cc] - rgb[1][(rr - 3) * ts + cc])); @@ -1044,7 +1050,7 @@ float* RawImageSource::CA_correct_RT( int indxff = (rr + shiftvfloor[c]) * ts + cc + shifthfloor[c]; int indxcc = (rr + shiftvceil[c]) * ts + cc + shifthceil[c]; int indxcf = (rr + shiftvceil[c]) * ts + cc + shifthfloor[c]; - #ifdef __SSE2__ +#ifdef __SSE2__ vfloat shifthfracv = F2V(shifthfrac[c]); vfloat shiftvfracv = F2V(shiftvfrac[c]); for (; cc < cc1 - 10; cc += 8, indxfc += 8, indxff += 8, indxcc += 8, indxcf += 8, indx += 4) { @@ -1060,7 +1066,7 @@ float* RawImageSource::CA_correct_RT( STVFU(gshift[indx], Gintv); } - #endif +#endif for (; cc < cc1 - 4; cc += 2, indxfc += 2, indxff += 2, indxcc += 2, indxcf += 2, ++indx) { //perform CA correction using colour ratios or colour differences float Ginthfloor = intp(shifthfrac[c], rgb[1][indxfc], rgb[1][indxff]); @@ -1080,18 +1086,18 @@ float* RawImageSource::CA_correct_RT( shiftvfrac[0] /= 2.f; shiftvfrac[2] /= 2.f; - #ifdef __SSE2__ +#ifdef __SSE2__ vfloat zd25v = F2V(0.25f); vfloat onev = F2V(1.f); vfloat zd5v = F2V(0.5f); vfloat epsv = F2V(eps); - #endif +#endif for (int rr = 8; rr < rr1 - 8; rr++) { int cc = 8 + (FC(rr, 2) & 1); int c = FC(rr, cc); int GRBdir0 = GRBdir[0][c]; int GRBdir1 = GRBdir[1][c]; - #ifdef __SSE2__ +#ifdef __SSE2__ vfloat shifthfracc = F2V(shifthfrac[c]); vfloat shiftvfracc = F2V(shiftvfrac[c]); for (int indx = rr * ts + cc; cc < cc1 - 14; cc += 8, indx += 8) { @@ -1124,7 +1130,7 @@ float* RawImageSource::CA_correct_RT( RBint = vself(vmaskf_lt(grbdiffold * grbdiffint, ZEROV), rinv - zd5v * (grbdiffold + grbdiffint), RBint); STVFU(rgb[c][indx >> 1], RBint); } - #endif +#endif for (int c = FC(rr, cc), indx = rr * ts + cc; cc < cc1 - 8; cc += 2, indx += 2) { float grbdiffold = rgb[1][indx] - rgb[c][indx >> 1]; @@ -1172,11 +1178,11 @@ float* RawImageSource::CA_correct_RT( int cc = border + (FC(rr, 2) & 1); int indx = (row * width + cc + left) >> 1; int indx1 = (rr * ts + cc) >> 1; - #ifdef __SSE2__ +#ifdef __SSE2__ for (; indx < (row * width + cc1 - border - 7 + left) >> 1; indx+=4, indx1 += 4) { STVFU(RawDataTmp[indx], c65535v * LVFU(rgb[c][indx1])); } - #endif +#endif for (; indx < (row * width + cc1 - border + left) >> 1; indx++, indx1++) { RawDataTmp[indx] = 65535.f * rgb[c][indx1]; } @@ -1201,17 +1207,17 @@ float* RawImageSource::CA_correct_RT( } #pragma omp barrier - // copy temporary image matrix back to image matrix + // copy temporary image matrix back to image matrix #pragma omp for for(int row = 0; row < height; row++) { int col = FC(row, 0) & 1; int indx = (row * width + col) >> 1; - #ifdef __SSE2__ +#ifdef __SSE2__ for(; col < width - 7; col += 8, indx += 4) { STC2VFU(rawData[row][col], LVFU(RawDataTmp[indx])); } - #endif +#endif for(; col < width - (W & 1); col += 2, indx++) { rawData[row][col] = RawDataTmp[indx]; } @@ -1244,29 +1250,42 @@ float* RawImageSource::CA_correct_RT( if (avoidColourshift) { array2D redFactor((W+1)/2, (H+1)/2); array2D blueFactor((W+1)/2, (H+1)/2); + array2D* nonGreen; - for(int i = 0; i < H; ++i) { - for(int j = 0; j < W; ++j) { - float factor = (rawData[i][j] * oldraw[i][j] == 0.0 ? 1.0 : oldraw[i][j] / rawData[i][j]); - if(FC(i,j) == 0) { - redFactor[i/2][j/2] = factor; - } else if(FC(i,j) == 2) { - blueFactor[i/2][j/2] = factor; - } - } - } - gaussianBlur(redFactor, redFactor, (W+1)/2, (H+1)/2, 30.0); - gaussianBlur(blueFactor, blueFactor, (W+1)/2, (H+1)/2, 30.0); - - for(int i = 0; i < H; ++i) { - for(int j = 0; j < W; ++j) { - if(FC(i,j) == 0) { - rawData[i][j] *= redFactor[i/2][j/2]; - } else if(FC(i,j) == 2) { - rawData[i][j] *= blueFactor[i/2][j/2]; + #pragma omp parallel + { + #pragma omp for + for(int i = 0; i < H; ++i) { + int firstCol = FC(i, 0) & 1; + int colour = FC(i, firstCol); + nonGreen = colour == 0 ? &redFactor : &blueFactor; + int j = firstCol; + for(; j < W - 1; j += 2) { + (*nonGreen)[i/2][j/2] = (rawData[i][j] * (*oldraw)[i][j / 2] == 0.0 ? 1.0 : (*oldraw)[i][j / 2] / rawData[i][j]); + } + if (j < W) { + (*nonGreen)[i/2][j/2] = (rawData[i][j] * (*oldraw)[i][j / 2] == 0.0 ? 1.0 : (*oldraw)[i][j / 2] / rawData[i][j]); + } + } + + gaussianBlur(redFactor, redFactor, (W+1)/2, (H+1)/2, 30.0); + gaussianBlur(blueFactor, blueFactor, (W+1)/2, (H+1)/2, 30.0); + + #pragma omp for + for(int i = 0; i < H; ++i) { + int firstCol = FC(i, 0) & 1; + int colour = FC(i, firstCol); + nonGreen = colour == 0 ? &redFactor : &blueFactor; + int j = firstCol; + for(; j < W - 1; j += 2) { + rawData[i][j] *= (*nonGreen)[i/2][j/2]; + } + if (j < W) { + rawData[i][j] *= (*nonGreen)[i/2][j/2]; } } } + delete oldraw; } if(plistener) { From fac0e8ee789a9c7852bc2e869f217c2f96712919 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 6 Sep 2018 17:59:08 +0200 Subject: [PATCH 088/115] raw ca correction: fix blob artifacts when avoid colourshift is enabled, #4777 --- rtengine/CA_correct_RT.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index b6c4b0375..be85fff47 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -1252,6 +1252,12 @@ float* RawImageSource::CA_correct_RT( array2D blueFactor((W+1)/2, (H+1)/2); array2D* nonGreen; + for(int i = 0; i < (H+1)/2; ++i) { + for(int j = 0; j < (W+1)/2; ++j) { + redFactor[i][j] = blueFactor[i][j] = 1.f; + } + } + #pragma omp parallel { #pragma omp for @@ -1261,10 +1267,10 @@ float* RawImageSource::CA_correct_RT( nonGreen = colour == 0 ? &redFactor : &blueFactor; int j = firstCol; for(; j < W - 1; j += 2) { - (*nonGreen)[i/2][j/2] = (rawData[i][j] * (*oldraw)[i][j / 2] == 0.0 ? 1.0 : (*oldraw)[i][j / 2] / rawData[i][j]); + (*nonGreen)[i/2][j/2] = rtengine::LIM((rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : (*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 1.5f); } if (j < W) { - (*nonGreen)[i/2][j/2] = (rawData[i][j] * (*oldraw)[i][j / 2] == 0.0 ? 1.0 : (*oldraw)[i][j / 2] / rawData[i][j]); + (*nonGreen)[i/2][j/2] = rtengine::LIM((rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : (*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 1.5f); } } From c9d89c9b1b4a497b9a5769ab998c79d43af4654a Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 6 Sep 2018 19:31:01 +0200 Subject: [PATCH 089/115] raw ca correction. Be less restrictive during test phase --- rtengine/CA_correct_RT.cc | 4 ++-- rtgui/rawcacorrection.cc | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index be85fff47..7abd9bfcc 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -1267,10 +1267,10 @@ float* RawImageSource::CA_correct_RT( nonGreen = colour == 0 ? &redFactor : &blueFactor; int j = firstCol; for(; j < W - 1; j += 2) { - (*nonGreen)[i/2][j/2] = rtengine::LIM((rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : (*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 1.5f); + (*nonGreen)[i/2][j/2] = rtengine::LIM((rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : (*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 2.f); } if (j < W) { - (*nonGreen)[i/2][j/2] = rtengine::LIM((rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : (*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 1.5f); + (*nonGreen)[i/2][j/2] = rtengine::LIM((rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : (*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 2.f); } } diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 9a1001f74..fd69ab063 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -38,7 +38,7 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM caAutocorrect = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AUTO"), multiImage)); caAutocorrect->setCheckBoxListener (this); - caAutoiterations = Gtk::manage(new Adjuster (M("TP_RAWCACORR_AUTOIT"), 1, 5, 1, 2)); + caAutoiterations = Gtk::manage(new Adjuster (M("TP_RAWCACORR_AUTOIT"), 1, 10, 1, 2)); caAutoiterations->setAdjusterListener (this); if (caAutoiterations->delay < options.adjusterMaxDelay) { From caffc3a23dea682c6706fb5728a16c16c5f4b2c0 Mon Sep 17 00:00:00 2001 From: Hombre Date: Thu, 6 Sep 2018 23:10:16 +0200 Subject: [PATCH 090/115] Bugfix: the scrollable toolbars was freezing under some circumstances --- rtgui/guiutils.cc | 22 +++++++++++++++++++++- rtgui/guiutils.h | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 447c9d8af..1e4f4eac8 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -991,8 +991,11 @@ void MyScrolledWindow::get_preferred_height_for_width_vfunc (int width, int &min MyScrolledToolbar::MyScrolledToolbar () { set_policy (Gtk::POLICY_EXTERNAL, Gtk::POLICY_NEVER); - set_propagate_natural_height(true); get_style_context()->add_class("scrollableToolbar"); + + // Works fine with Gtk 3.22, but a a custom made get_preferred_height had to be created as a workaround + // taken from the official Gtk3.22 source code + //set_propagate_natural_height(true); } bool MyScrolledToolbar::on_scroll_event (GdkEventScroll* event) @@ -1032,6 +1035,23 @@ bool MyScrolledToolbar::on_scroll_event (GdkEventScroll* event) return true; } +void MyScrolledToolbar::get_preferred_height (int &minimumHeight, int &naturalHeight) +{ + int currMinHeight = 0; + int currNatHeight = 0; + std::vector childs = get_children(); + minimumHeight = naturalHeight = 0; + + for (auto child : childs) + { + if(child->is_visible()) { + child->get_preferred_height(currMinHeight, currNatHeight); + minimumHeight = rtengine::max(currMinHeight, minimumHeight); + naturalHeight = rtengine::max(currNatHeight, naturalHeight); + } + } +} + MyComboBoxText::MyComboBoxText (bool has_entry) : Gtk::ComboBoxText(has_entry) { minimumWidth = naturalWidth = 70; diff --git a/rtgui/guiutils.h b/rtgui/guiutils.h index 89d05bfce..fb627a78a 100644 --- a/rtgui/guiutils.h +++ b/rtgui/guiutils.h @@ -300,6 +300,7 @@ class MyScrolledToolbar : public Gtk::ScrolledWindow { bool on_scroll_event (GdkEventScroll* event); + void get_preferred_height (int &minimumHeight, int &naturalHeight); public: MyScrolledToolbar(); From 198989d5983beccc58da4ae4924149130898dcac Mon Sep 17 00:00:00 2001 From: heckflosse Date: Fri, 7 Sep 2018 13:50:42 +0200 Subject: [PATCH 091/115] raw ca correction/avoid colour shift: fix colour cast when (height % 2) == 1, #4777 --- rtengine/CA_correct_RT.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 7abd9bfcc..3d5f806de 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -1274,6 +1274,20 @@ float* RawImageSource::CA_correct_RT( } } + #pragma omp single + { + if (H % 2) { + int firstCol = FC(H - 1, 0) & 1; + int colour = FC(H - 1, firstCol); + nonGreen = colour == 0 ? &redFactor : &blueFactor; + for (int j = 0; j < (W + 1) / 2; ++j) { + (*nonGreen)[(H + 1) / 2 - 1][j] = (*nonGreen)[(H + 1) / 2 - 2][j]; + } + } + } + + #pragma omp barrier + gaussianBlur(redFactor, redFactor, (W+1)/2, (H+1)/2, 30.0); gaussianBlur(blueFactor, blueFactor, (W+1)/2, (H+1)/2, 30.0); From c7ab5ff288dcd33dff9563ba98c11e297681f98e Mon Sep 17 00:00:00 2001 From: heckflosse Date: Fri, 7 Sep 2018 16:20:30 +0200 Subject: [PATCH 092/115] raw ca correction/avoid colour shift: further bugfixes, #4777 --- rtengine/CA_correct_RT.cc | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 3d5f806de..322bf23f7 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -1214,11 +1214,11 @@ float* RawImageSource::CA_correct_RT( int col = FC(row, 0) & 1; int indx = (row * width + col) >> 1; #ifdef __SSE2__ - for(; col < width - 7; col += 8, indx += 4) { + for(; col < width - 7 - (3 * (W & 1)); col += 8, indx += 4) { STC2VFU(rawData[row][col], LVFU(RawDataTmp[indx])); } #endif - for(; col < width - (W & 1); col += 2, indx++) { + for(; col < width - (3 * (W & 1)); col += 2, indx++) { rawData[row][col] = RawDataTmp[indx]; } } @@ -1250,13 +1250,6 @@ float* RawImageSource::CA_correct_RT( if (avoidColourshift) { array2D redFactor((W+1)/2, (H+1)/2); array2D blueFactor((W+1)/2, (H+1)/2); - array2D* nonGreen; - - for(int i = 0; i < (H+1)/2; ++i) { - for(int j = 0; j < (W+1)/2; ++j) { - redFactor[i][j] = blueFactor[i][j] = 1.f; - } - } #pragma omp parallel { @@ -1264,7 +1257,7 @@ float* RawImageSource::CA_correct_RT( for(int i = 0; i < H; ++i) { int firstCol = FC(i, 0) & 1; int colour = FC(i, firstCol); - nonGreen = colour == 0 ? &redFactor : &blueFactor; + array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; int j = firstCol; for(; j < W - 1; j += 2) { (*nonGreen)[i/2][j/2] = rtengine::LIM((rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : (*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 2.f); @@ -1279,11 +1272,21 @@ float* RawImageSource::CA_correct_RT( if (H % 2) { int firstCol = FC(H - 1, 0) & 1; int colour = FC(H - 1, firstCol); - nonGreen = colour == 0 ? &redFactor : &blueFactor; + array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; for (int j = 0; j < (W + 1) / 2; ++j) { (*nonGreen)[(H + 1) / 2 - 1][j] = (*nonGreen)[(H + 1) / 2 - 2][j]; } } + + if (W % 2) { + int ngRow = 1 - (FC(0, 0) & 1); + int ngCol = FC(ngRow, 0) & 1; + int colour = FC(ngRow, ngCol); + array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; + for (int i = 0; i < (H + 1) / 2; ++i) { + (*nonGreen)[i][(W + 1) / 2 - 1] = redFactor[i][(W + 1) / 2 - 2]; + } + } } #pragma omp barrier @@ -1295,7 +1298,7 @@ float* RawImageSource::CA_correct_RT( for(int i = 0; i < H; ++i) { int firstCol = FC(i, 0) & 1; int colour = FC(i, firstCol); - nonGreen = colour == 0 ? &redFactor : &blueFactor; + array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; int j = firstCol; for(; j < W - 1; j += 2) { rawData[i][j] *= (*nonGreen)[i/2][j/2]; From 910b5165539fe63a8f33e386e5c91252ccd73110 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Fri, 7 Sep 2018 17:56:55 +0200 Subject: [PATCH 093/115] raw ca correction/avoid colour shift: bugfix, #4777 --- rtengine/CA_correct_RT.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 322bf23f7..90fb3932b 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -1270,9 +1270,9 @@ float* RawImageSource::CA_correct_RT( #pragma omp single { if (H % 2) { - int firstCol = FC(H - 1, 0) & 1; - int colour = FC(H - 1, firstCol); - array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; + int firstCol = FC(0, 0) & 1; + int colour = FC(0, firstCol); + array2D* nonGreen = colour == 0 ? &blueFactor : &redFactor; for (int j = 0; j < (W + 1) / 2; ++j) { (*nonGreen)[(H + 1) / 2 - 1][j] = (*nonGreen)[(H + 1) / 2 - 2][j]; } From becfc1a9fdf38a985a7141d12a4221cde2825ac8 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Fri, 7 Sep 2018 18:46:39 +0200 Subject: [PATCH 094/115] raw ca correction: smooth progress bar also for > 1 iterations, #4774 --- rtengine/CA_correct_RT.cc | 43 ++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 90fb3932b..7dd140328 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -146,6 +146,7 @@ float* RawImageSource::CA_correct_RT( } array2D* oldraw = nullptr; if (avoidColourshift) { + // copy raw values before ca correction oldraw = new array2D((W + 1) / 2, H); #pragma omp parallel for for(int i = 0; i < H; ++i) { @@ -646,12 +647,8 @@ float* RawImageSource::CA_correct_RT( if(progresscounter % 8 == 0) #pragma omp critical (cadetectpass1) { - progress += (double)(8.0 * (ts - border2) * (ts - border2)) / (2 * height * width); - - if (progress > 1.0) { - progress = 1.0; - } - + progress += 4.0 * SQR(ts - border2) / (iterations * height * width); + progress = std::min(progress, 1.0); plistener->setProgress(progress); } } @@ -1194,12 +1191,8 @@ float* RawImageSource::CA_correct_RT( if(progresscounter % 8 == 0) #pragma omp critical (cacorrect) { - progress += (double)(8.0 * (ts - border2) * (ts - border2)) / (2 * height * width); - - if (progress > 1.0) { - progress = 1.0; - } - + progress += 4.0 * SQR(ts - border2) / (iterations * height * width); + progress = std::min(progress, 1.0); plistener->setProgress(progress); } } @@ -1255,9 +1248,9 @@ float* RawImageSource::CA_correct_RT( { #pragma omp for for(int i = 0; i < H; ++i) { - int firstCol = FC(i, 0) & 1; - int colour = FC(i, firstCol); - array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; + const int firstCol = FC(i, 0) & 1; + const int colour = FC(i, firstCol); + const array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; int j = firstCol; for(; j < W - 1; j += 2) { (*nonGreen)[i/2][j/2] = rtengine::LIM((rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : (*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 2.f); @@ -1270,19 +1263,19 @@ float* RawImageSource::CA_correct_RT( #pragma omp single { if (H % 2) { - int firstCol = FC(0, 0) & 1; - int colour = FC(0, firstCol); - array2D* nonGreen = colour == 0 ? &blueFactor : &redFactor; + const int firstCol = FC(0, 0) & 1; + const int colour = FC(0, firstCol); + const array2D* nonGreen = colour == 0 ? &blueFactor : &redFactor; for (int j = 0; j < (W + 1) / 2; ++j) { (*nonGreen)[(H + 1) / 2 - 1][j] = (*nonGreen)[(H + 1) / 2 - 2][j]; } } if (W % 2) { - int ngRow = 1 - (FC(0, 0) & 1); - int ngCol = FC(ngRow, 0) & 1; - int colour = FC(ngRow, ngCol); - array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; + const int ngRow = 1 - (FC(0, 0) & 1); + const int ngCol = FC(ngRow, 0) & 1; + const int colour = FC(ngRow, ngCol); + const array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; for (int i = 0; i < (H + 1) / 2; ++i) { (*nonGreen)[i][(W + 1) / 2 - 1] = redFactor[i][(W + 1) / 2 - 2]; } @@ -1296,9 +1289,9 @@ float* RawImageSource::CA_correct_RT( #pragma omp for for(int i = 0; i < H; ++i) { - int firstCol = FC(i, 0) & 1; - int colour = FC(i, firstCol); - array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; + const int firstCol = FC(i, 0) & 1; + const int colour = FC(i, firstCol); + const array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; int j = firstCol; for(; j < W - 1; j += 2) { rawData[i][j] *= (*nonGreen)[i/2][j/2]; From 09796f06942d3a08b0b940656b599fae6ee3c67e Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 8 Sep 2018 00:52:39 +0200 Subject: [PATCH 095/115] raw ca correction: beautified code --- rtengine/CA_correct_RT.cc | 287 +++++++++++++++++++------------------ rtengine/rawimagesource.cc | 8 +- rtengine/rawimagesource.h | 1 - 3 files changed, 152 insertions(+), 144 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 7dd140328..ef1e534c0 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -1,11 +1,11 @@ //////////////////////////////////////////////////////////////// // -// Chromatic Aberration Auto-correction +// Chromatic Aberration correction on raw bayer cfa data // -// copyright (c) 2008-2010 Emil Martinec +// copyright (c) 2008-2010 Emil Martinec +// copyright (c) for improvements (speedups, iterated correction and avoid colour shift) 2018 Ingo Weyrich // -// -// code dated: November 26, 2010 +// code dated: September 8, 2018 // // CA_correct_RT.cc is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -14,14 +14,13 @@ // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //////////////////////////////////////////////////////////////// -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #include "rtengine.h" #include "rawimagesource.h" @@ -51,22 +50,22 @@ bool LinEqSolve(int nDim, double* pfMatr, double* pfVect, double* pfSolution) int i, j, k; - for(k = 0; k < (nDim - 1); k++) { // base row of matrix + for (k = 0; k < (nDim - 1); k++) { // base row of matrix // search of line with max element - double fMaxElem = fabs( pfMatr[k * nDim + k] ); + double fMaxElem = fabs(pfMatr[k * nDim + k]); int m = k; for (i = k + 1; i < nDim; i++) { - if(fMaxElem < fabs(pfMatr[i * nDim + k]) ) { + if (fMaxElem < fabs(pfMatr[i * nDim + k])) { fMaxElem = pfMatr[i * nDim + k]; m = i; } } // permutation of base line (index k) and max element line(index m) - if(m != k) { - for(i = k; i < nDim; i++) { - fAcc = pfMatr[k * nDim + i]; + if (m != k) { + for (i = k; i < nDim; i++) { + fAcc = pfMatr[k * nDim + i]; pfMatr[k * nDim + i] = pfMatr[m * nDim + i]; pfMatr[m * nDim + i] = fAcc; } @@ -76,16 +75,16 @@ bool LinEqSolve(int nDim, double* pfMatr, double* pfVect, double* pfSolution) pfVect[m] = fAcc; } - if( pfMatr[k * nDim + k] == 0.) { + if (pfMatr[k * nDim + k] == 0.) { //linear system has no solution return false; // needs improvement !!! } // triangulation of matrix with coefficients - for(j = (k + 1); j < nDim; j++) { // current row of matrix + for (j = (k + 1); j < nDim; j++) { // current row of matrix fAcc = - pfMatr[j * nDim + k] / pfMatr[k * nDim + k]; - for(i = k; i < nDim; i++) { + for (i = k; i < nDim; i++) { pfMatr[j * nDim + i] = pfMatr[j * nDim + i] + fAcc * pfMatr[k * nDim + i]; } @@ -93,10 +92,10 @@ bool LinEqSolve(int nDim, double* pfMatr, double* pfVect, double* pfSolution) } } - for(k = (nDim - 1); k >= 0; k--) { + for (k = (nDim - 1); k >= 0; k--) { pfSolution[k] = pfVect[k]; - for(i = (k + 1); i < nDim; i++) { + for (i = (k + 1); i < nDim; i++) { pfSolution[k] -= (pfMatr[k * nDim + i] * pfSolution[i]); } @@ -106,8 +105,6 @@ bool LinEqSolve(int nDim, double* pfMatr, double* pfVect, double* pfSolution) return true; } //end of linear equation solver -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - } using namespace std; @@ -118,7 +115,6 @@ float* RawImageSource::CA_correct_RT( size_t autoIterations, double cared, double cablue, - double caautostrength, bool avoidColourshift, const array2D &rawData, double* fitParamsTransfer, @@ -132,29 +128,30 @@ float* RawImageSource::CA_correct_RT( // multithreaded and vectorized by Ingo Weyrich constexpr int ts = 128; constexpr int tsh = ts / 2; - //shifts to location of vertical and diagonal neighbors + //shifts to location of vertical and diagonal neighbours constexpr int v1 = ts, v2 = 2 * ts, v3 = 3 * ts, v4 = 4 * ts; //, p1=-ts+1, p2=-2*ts+2, p3=-3*ts+3, m1=ts+1, m2=2*ts+2, m3=3*ts+3; // Test for RGB cfa - for(int i = 0; i < 2; i++) { - for(int j = 0; j < 2; j++) { - if(FC(i, j) == 3) { - printf("CA correction supports only RGB Colour filter arrays\n"); + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + if (FC(i, j) == 3) { + std::cout << "CA correction supports only RGB Colour filter arrays" << std::endl; return buffer; } } } + array2D* oldraw = nullptr; if (avoidColourshift) { // copy raw values before ca correction oldraw = new array2D((W + 1) / 2, H); #pragma omp parallel for - for(int i = 0; i < H; ++i) { + for (int i = 0; i < H; ++i) { int j = FC(i, 0) & 1; - for(; j < W - 1; j += 2) { + for (; j < W - 1; j += 2) { (*oldraw)[i][j / 2] = rawData[i][j]; } - if(j < W) { + if (j < W) { (*oldraw)[i][j / 2] = rawData[i][j]; } } @@ -162,7 +159,7 @@ float* RawImageSource::CA_correct_RT( double progress = 0.0; - if(plistener) { + if (plistener) { plistener->setProgress (progress); } @@ -180,11 +177,11 @@ float* RawImageSource::CA_correct_RT( if (!buffer) { buffer = static_cast(malloc ((height * width + vblsz * hblsz * (2 * 2 + 1)) * sizeof(float))); } - float *Gtmp = buffer; - float *RawDataTmp = buffer + (height * width) / 2; + float* Gtmp = buffer; + float* RawDataTmp = buffer + (height * width) / 2; //block CA shift values and weight assigned to block - float *const blockwt = buffer + (height * width); + float* const blockwt = buffer + (height * width); memset(blockwt, 0, vblsz * hblsz * (2 * 2 + 1) * sizeof(float)); float (*blockshifts)[2][2] = (float (*)[2][2])(blockwt + vblsz * hblsz); @@ -198,12 +195,12 @@ float* RawImageSource::CA_correct_RT( : 1; const bool fitParamsSet = fitParamsTransfer && fitParamsIn && iterations < 2; - if(autoCA && fitParamsSet) { + if (autoCA && fitParamsSet) { // use stored parameters int index = 0; - for(int c = 0; c < 2; ++c) { - for(int d = 0; d < 2; ++d) { - for(int e = 0; e < 16; ++e) { + for (int c = 0; c < 2; ++c) { + for (int d = 0; d < 2; ++d) { + for (int e = 0; e < 16; ++e) { fitparams[c][d][e] = fitParamsTransfer[index++]; } } @@ -232,36 +229,37 @@ float* RawImageSource::CA_correct_RT( //polynomial fit coefficients //residual CA shift amount within a plaquette - float shifthfrac[3], shiftvfrac[3]; + float shifthfrac[3], shiftvfrac[3]; // assign working space constexpr int buffersize = sizeof(float) * ts * ts + 8 * sizeof(float) * ts * tsh + 8 * 64 + 63; constexpr int buffersizePassTwo = sizeof(float) * ts * ts + 4 * sizeof(float) * ts * tsh + 4 * 64 + 63; char * const bufferThr = (char *) malloc((autoCA && !fitParamsSet) ? buffersize : buffersizePassTwo); - char * const data = (char*)( ( uintptr_t(bufferThr) + uintptr_t(63)) / 64 * 64); + char * const data = (char*)((uintptr_t(bufferThr) + uintptr_t(63)) / 64 * 64); // shift the beginning of all arrays but the first by 64 bytes to avoid cache miss conflicts on CPUs which have <= 4-way associative L1-Cache //rgb data in a tile float* rgb[3]; - rgb[0] = (float (*)) data; - rgb[1] = (float (*)) (data + sizeof(float) * ts * tsh + 1 * 64); - rgb[2] = (float (*)) (data + sizeof(float) * (ts * ts + ts * tsh) + 2 * 64); + rgb[0] = (float*) data; + rgb[1] = (float*) (data + sizeof(float) * ts * tsh + 1 * 64); + rgb[2] = (float*) (data + sizeof(float) * (ts * ts + ts * tsh) + 2 * 64); if (autoCA && !fitParamsSet) { + constexpr float caAutostrength = 8.f; //high pass filter for R/B in vertical direction - float *rbhpfh = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); + float* rbhpfh = (float*) (data + 2 * sizeof(float) * ts * ts + 3 * 64); //high pass filter for R/B in horizontal direction - float *rbhpfv = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); + float* rbhpfv = (float*) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); //low pass filter for R/B in horizontal direction - float *rblpfh = (float (*)) (data + 3 * sizeof(float) * ts * ts + 5 * 64); + float* rblpfh = (float*) (data + 3 * sizeof(float) * ts * ts + 5 * 64); //low pass filter for R/B in vertical direction - float *rblpfv = (float (*)) (data + 3 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 6 * 64); + float* rblpfv = (float*) (data + 3 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 6 * 64); //low pass filter for colour differences in horizontal direction - float *grblpfh = (float (*)) (data + 4 * sizeof(float) * ts * ts + 7 * 64); + float* grblpfh = (float*) (data + 4 * sizeof(float) * ts * ts + 7 * 64); //low pass filter for colour differences in vertical direction - float *grblpfv = (float (*)) (data + 4 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 8 * 64); + float* grblpfv = (float*) (data + 4 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 8 * 64); // Main algorithm: Tile loop calculating correction parameters per tile //local quadratic fit to shift data within a tile @@ -270,14 +268,16 @@ float* RawImageSource::CA_correct_RT( float CAshift[2][2]; //per thread data for evaluation of block CA shift variance - float blockavethr[2][2] = {{0, 0}, {0, 0}}, blocksqavethr[2][2] = {{0, 0}, {0, 0}}, blockdenomthr[2][2] = {{0, 0}, {0, 0}}; + float blockavethr[2][2] = {}; + float blocksqavethr[2][2] = {}; + float blockdenomthr[2][2] = {}; #pragma omp for collapse(2) schedule(dynamic) nowait - for (int top = -border ; top < height; top += ts - border2) + for (int top = -border ; top < height; top += ts - border2) { for (int left = -border; left < width - (W & 1); left += ts - border2) { memset(bufferThr, 0, buffersize); - const int vblock = ((top + border) / (ts - border2)) + 1; - const int hblock = ((left + border) / (ts - border2)) + 1; + const int vblock = (top + border) / (ts - border2) + 1; + const int hblock = (left + border) / (ts - border2) + 1; const int bottom = min(top + ts, height + border); const int right = min(left + ts, width - (W & 1) + border); const int rr1 = bottom - top; @@ -301,7 +301,7 @@ float* RawImageSource::CA_correct_RT( int col = cc + left; #ifdef __SSE2__ int c0 = FC(rr, cc); - if(c0 == 1) { + if (c0 == 1) { rgb[c0][rr * ts + cc] = rawData[row][col] / 65535.f; cc++; col++; @@ -311,7 +311,7 @@ float* RawImageSource::CA_correct_RT( for (; cc < ccmax - 7; cc+=8, col+=8, indx1 += 8) { vfloat val1 = LVFU(rawData[row][col]) / c65535v; vfloat val2 = LVFU(rawData[row][col + 4]) / c65535v; - vfloat nonGreenv = _mm_shuffle_ps(val1,val2,_MM_SHUFFLE( 2,0,2,0 )); + vfloat nonGreenv = _mm_shuffle_ps(val1,val2,_MM_SHUFFLE(2,0,2,0)); STVFU(rgb[c0][indx1 >> 1], nonGreenv); STVFU(rgb[1][indx1], val1); STVFU(rgb[1][indx1 + 4], val2); @@ -324,78 +324,83 @@ float* RawImageSource::CA_correct_RT( } } - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //fill borders if (rrmin > 0) { - for (int rr = 0; rr < border; rr++) + for (int rr = 0; rr < border; rr++) { for (int cc = ccmin; cc < ccmax; cc++) { int c = FC(rr, cc); rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][((border2 - rr) * ts + cc) >> ((c & 1) ^ 1)]; } + } } if (rrmax < rr1) { - for (int rr = 0; rr < border; rr++) + for (int rr = 0; rr < border; rr++) { for (int cc = ccmin; cc < ccmax; cc++) { int c = FC(rr, cc); rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = rawData[(height - rr - 2)][left + cc] / 65535.f; } + } } if (ccmin > 0) { - for (int rr = rrmin; rr < rrmax; rr++) + for (int rr = rrmin; rr < rrmax; rr++) { for (int cc = 0; cc < border; cc++) { int c = FC(rr, cc); rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][(rr * ts + border2 - cc) >> ((c & 1) ^ 1)]; } + } } if (ccmax < cc1) { - for (int rr = rrmin; rr < rrmax; rr++) + for (int rr = rrmin; rr < rrmax; rr++) { for (int cc = 0; cc < border; cc++) { int c = FC(rr, cc); rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = rawData[(top + rr)][(width - cc - 2)] / 65535.f; } + } } //also, fill the image corners if (rrmin > 0 && ccmin > 0) { - for (int rr = 0; rr < border; rr++) + for (int rr = 0; rr < border; rr++) { for (int cc = 0; cc < border; cc++) { int c = FC(rr, cc); rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rawData[border2 - rr][border2 - cc] / 65535.f; } + } } if (rrmax < rr1 && ccmax < cc1) { - for (int rr = 0; rr < border; rr++) + for (int rr = 0; rr < border; rr++) { for (int cc = 0; cc < border; cc++) { int c = FC(rr, cc); rgb[c][((rrmax + rr)*ts + ccmax + cc) >> ((c & 1) ^ 1)] = rawData[(height - rr - 2)][(width - cc - 2)] / 65535.f; } + } } if (rrmin > 0 && ccmax < cc1) { - for (int rr = 0; rr < border; rr++) + for (int rr = 0; rr < border; rr++) { for (int cc = 0; cc < border; cc++) { int c = FC(rr, cc); rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = rawData[(border2 - rr)][(width - cc - 2)] / 65535.f; } + } } if (rrmax < rr1 && ccmin > 0) { - for (int rr = 0; rr < border; rr++) + for (int rr = 0; rr < border; rr++) { for (int cc = 0; cc < border; cc++) { int c = FC(rr, cc); rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = rawData[(height - rr - 2)][(border2 - cc)] / 65535.f; } + } } //end of border fill - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //end of initialization - #ifdef __SSE2__ vfloat onev = F2V(1.f); vfloat epsv = F2V(eps); @@ -441,17 +446,16 @@ float* RawImageSource::CA_correct_RT( int col = max(left + 3, 0) + offset; int indx = rr * ts + 3 - (left < 0 ? (left+3) : 0) + offset; #ifdef __SSE2__ - for(; col < min(cc1 + left - 3, width) - 7; col+=8, indx+=8) { + for (; col < min(cc1 + left - 3, width) - 7; col+=8, indx+=8) { STVFU(Gtmp[(row * width + col) >> 1], LC2VFU(rgb[1][indx])); } #endif - for(; col < min(cc1 + left - 3, width); col+=2, indx+=2) { + for (; col < min(cc1 + left - 3, width); col+=2, indx+=2) { Gtmp[(row * width + col) >> 1] = rgb[1][indx]; } } - } - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + #ifdef __SSE2__ vfloat zd25v = F2V(0.25f); #endif @@ -486,7 +490,6 @@ float* RawImageSource::CA_correct_RT( STVFU(grblpfv[indx >> 1], zd25v * (glpfvv + (rgbcv + LVFU(rgb[c][(indx + v2) >> 1]) + LVFU(rgb[c][(indx - v2) >> 1])))); STVFU(grblpfh[indx >> 1], zd25v * (glpfhv + (rgbcv + LVFU(rgb[c][(indx + 2) >> 1]) + LVFU(rgb[c][(indx - 2) >> 1])))); } - #endif for (; cc < cc1 - 4; cc += 2, indx += 2) { rbhpfv[indx >> 1] = fabsf(fabsf((rgb[1][indx] - rgb[c][indx >> 1]) - (rgb[1][indx + v4] - rgb[c][(indx + v4) >> 1])) + @@ -534,7 +537,6 @@ float* RawImageSource::CA_correct_RT( vfloat coeff11v = ZEROV; vfloat coeff12v = ZEROV; for (; cc < cc1 - 14; cc += 8, indx += 8) { - //in linear interpolation, colour differences are a quadratic function of interpolation position; //solve for the interpolation position that minimizes colour difference variance over the tile @@ -569,7 +571,6 @@ float* RawImageSource::CA_correct_RT( #endif for (; cc < cc1 - 8; cc += 2, indx += 2) { - //in linear interpolation, colour differences are a quadratic function of interpolation position; //solve for the interpolation position that minimizes colour difference variance over the tile @@ -577,7 +578,7 @@ float* RawImageSource::CA_correct_RT( float gdiff = (rgb[1][indx + ts] - rgb[1][indx - ts]) + 0.3f * (rgb[1][indx + ts + 1] - rgb[1][indx - ts + 1] + rgb[1][indx + ts - 1] - rgb[1][indx - ts - 1]); float deltgrb = (rgb[c][indx >> 1] - rgb[1][indx]); - float gradwt = (rbhpfv[indx >> 1] + 0.5f * (rbhpfv[(indx >> 1) + 1] + rbhpfv[(indx >> 1) - 1]) ) * (grblpfv[(indx >> 1) - v1] + grblpfv[(indx >> 1) + v1]) / (eps + 0.1f * (grblpfv[(indx >> 1) - v1] + grblpfv[(indx >> 1) + v1]) + rblpfv[(indx >> 1) - v1] + rblpfv[(indx >> 1) + v1]); + float gradwt = (rbhpfv[indx >> 1] + 0.5f * (rbhpfv[(indx >> 1) + 1] + rbhpfv[(indx >> 1) - 1])) * (grblpfv[(indx >> 1) - v1] + grblpfv[(indx >> 1) + v1]) / (eps + 0.1f * (grblpfv[(indx >> 1) - v1] + grblpfv[(indx >> 1) + v1]) + rblpfv[(indx >> 1) - v1] + rblpfv[(indx >> 1) + v1]); coeff[0][0][c>>1] += gradwt * deltgrb * deltgrb; coeff[0][1][c>>1] += gradwt * gdiff * deltgrb; @@ -586,7 +587,7 @@ float* RawImageSource::CA_correct_RT( //horizontal gdiff = (rgb[1][indx + 1] - rgb[1][indx - 1]) + 0.3f * (rgb[1][indx + 1 + ts] - rgb[1][indx - 1 + ts] + rgb[1][indx + 1 - ts] - rgb[1][indx - 1 - ts]); - gradwt = (rbhpfh[indx >> 1] + 0.5f * (rbhpfh[(indx >> 1) + v1] + rbhpfh[(indx >> 1) - v1]) ) * (grblpfh[(indx >> 1) - 1] + grblpfh[(indx >> 1) + 1]) / (eps + 0.1f * (grblpfh[(indx >> 1) - 1] + grblpfh[(indx >> 1) + 1]) + rblpfh[(indx >> 1) - 1] + rblpfh[(indx >> 1) + 1]); + gradwt = (rbhpfh[indx >> 1] + 0.5f * (rbhpfh[(indx >> 1) + v1] + rbhpfh[(indx >> 1) - v1])) * (grblpfh[(indx >> 1) - 1] + grblpfh[(indx >> 1) + 1]) / (eps + 0.1f * (grblpfh[(indx >> 1) - 1] + grblpfh[(indx >> 1) + 1]) + rblpfh[(indx >> 1) - 1] + rblpfh[(indx >> 1) + 1]); coeff[1][0][c>>1] += gradwt * deltgrb * deltgrb; coeff[1][1][c>>1] += gradwt * gdiff * deltgrb; @@ -603,9 +604,9 @@ float* RawImageSource::CA_correct_RT( for (int k = 0; k < 3; k++) { for (int c = 0; c < 2; c++) { coeff[dir][k][c] *= 0.25f; - if(k == 1) { + if (k == 1) { coeff[dir][k][c] *= 0.3125f; - } else if(k == 2) { + } else if (k == 2) { coeff[dir][k][c] *= SQR(0.3125f); } } @@ -637,33 +638,33 @@ float* RawImageSource::CA_correct_RT( } //evaluate the shifts to the location that minimizes CA within the tile blockshifts[vblock * hblsz + hblock][c][dir] = CAshift[dir][c]; //vert/hor CA shift for R/B - }//vert/hor }//colour - if(plistener) { + if (plistener) { progresscounter++; - if(progresscounter % 8 == 0) + if (progresscounter % 8 == 0) { #pragma omp critical (cadetectpass1) - { - progress += 4.0 * SQR(ts - border2) / (iterations * height * width); - progress = std::min(progress, 1.0); - plistener->setProgress(progress); + { + progress += 4.0 * SQR(ts - border2) / (iterations * height * width); + progress = std::min(progress, 1.0); + plistener->setProgress(progress); + } } } - } - + } //end of diagnostic pass #pragma omp critical (cadetectpass2) { - for (int dir = 0; dir < 2; dir++) + for (int dir = 0; dir < 2; dir++) { for (int c = 0; c < 2; c++) { blockdenom[dir][c] += blockdenomthr[dir][c]; blocksqave[dir][c] += blocksqavethr[dir][c]; blockave[dir][c] += blockavethr[dir][c]; } + } } #pragma omp barrier @@ -675,16 +676,14 @@ float* RawImageSource::CA_correct_RT( blockvar[dir][c] = blocksqave[dir][c] / blockdenom[dir][c] - SQR(blockave[dir][c] / blockdenom[dir][c]); } else { processpasstwo = false; - printf ("blockdenom vanishes \n"); + std::cout << "blockdenom vanishes" << std::endl; break; } } - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - //now prepare for CA correction pass //first, fill border blocks of blockshift array - if(processpasstwo) { + if (processpasstwo) { for (int vblock = 1; vblock < vblsz - 1; vblock++) { //left and right sides for (int c = 0; c < 2; c++) { for (int i = 0; i < 2; i++) { @@ -718,7 +717,7 @@ float* RawImageSource::CA_correct_RT( int numblox[2] = {0, 0}; - for (int vblock = 1; vblock < vblsz - 1; vblock++) + for (int vblock = 1; vblock < vblsz - 1; vblock++) { for (int hblock = 1; hblock < hblsz - 1; hblock++) { // block 3x3 median of blockshifts for robustness for (int c = 0; c < 2; c ++) { @@ -739,8 +738,8 @@ float* RawImageSource::CA_correct_RT( bstemp[dir] = median(p); } - //now prepare coefficient matrix; use only data points within caautostrength/2 std devs of zero - if (SQR(bstemp[0]) > caautostrength * blockvar[0][c] || SQR(bstemp[1]) > caautostrength * blockvar[1][c]) { + //now prepare coefficient matrix; use only data points within caAutostrength/2 std devs of zero + if (SQR(bstemp[0]) > caAutostrength * blockvar[0][c] || SQR(bstemp[1]) > caAutostrength * blockvar[1][c]) { continue; } @@ -768,7 +767,7 @@ float* RawImageSource::CA_correct_RT( }//dir }//c }//blocks - + } numblox[1] = min(numblox[0], numblox[1]); //if too few data points, restrict the order of the fit to linear @@ -777,24 +776,23 @@ float* RawImageSource::CA_correct_RT( numpar = 4; if (numblox[1] < 10) { - - printf ("numblox = %d \n", numblox[1]); + std::cout << "numblox = " << numblox[1] << std::endl; processpasstwo = false; } } - if(processpasstwo) - + if (processpasstwo) { //fit parameters to blockshifts - for (int c = 0; c < 2; c++) + for (int c = 0; c < 2; c++) { for (int dir = 0; dir < 2; dir++) { if (!LinEqSolve(numpar, polymat[c][dir], shiftmat[c][dir], fitparams[c][dir])) { - printf("CA correction pass failed -- can't solve linear equations for colour %d direction %d...\n", c, dir); + std::cout << "CA correction pass failed -- can't solve linear equations for colour %d direction " << c << std::endl; processpasstwo = false; } } + } + } } - //fitparams[polyord*i+j] gives the coefficients of (vblock^i hblock^j) in a polynomial fit for i,j<=4 } //end of initialization for CA correction pass @@ -802,13 +800,13 @@ float* RawImageSource::CA_correct_RT( } // Main algorithm: Tile loop - if(processpasstwo) { - float *grbdiff = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); // there is no overlap in buffer usage => share + if (processpasstwo) { + float* grbdiff = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); // there is no overlap in buffer usage => share //green interpolated to optical sample points for R/B - float *gshift = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); // there is no overlap in buffer usage => share + float* gshift = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); // there is no overlap in buffer usage => share #pragma omp for schedule(dynamic) collapse(2) nowait - for (int top = -border; top < height; top += ts - border2) + for (int top = -border; top < height; top += ts - border2) { for (int left = -border; left < width - (W & 1); left += ts - border2) { memset(bufferThr, 0, buffersizePassTwo); float lblockshifts[2][2]; @@ -840,7 +838,7 @@ float* RawImageSource::CA_correct_RT( int indx1 = rr * ts + cc; #ifdef __SSE2__ int c = FC(rr, cc); - if(c & 1) { + if (c & 1) { rgb[1][indx1] = rawData[row][col] / 65535.f; indx++; indx1++; @@ -866,19 +864,20 @@ float* RawImageSource::CA_correct_RT( } } } - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + //fill borders if (rrmin > 0) { - for (int rr = 0; rr < border; rr++) + for (int rr = 0; rr < border; rr++) { for (int cc = ccmin; cc < ccmax; cc++) { int c = FC(rr, cc); rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][((border2 - rr) * ts + cc) >> ((c & 1) ^ 1)]; rgb[1][rr * ts + cc] = rgb[1][(border2 - rr) * ts + cc]; } + } } if (rrmax < rr1) { - for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) + for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) { for (int cc = ccmin; cc < ccmax; cc++) { int c = FC(rr, cc); rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = (rawData[(height - rr - 2)][left + cc]) / 65535.f; @@ -886,19 +885,21 @@ float* RawImageSource::CA_correct_RT( rgb[1][(rrmax + rr)*ts + cc] = Gtmp[((height - rr - 2) * width + left + cc) >> 1]; } } + } } if (ccmin > 0) { - for (int rr = rrmin; rr < rrmax; rr++) + for (int rr = rrmin; rr < rrmax; rr++) { for (int cc = 0; cc < border; cc++) { int c = FC(rr, cc); rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = rgb[c][(rr * ts + border2 - cc) >> ((c & 1) ^ 1)]; rgb[1][rr * ts + cc] = rgb[1][rr * ts + border2 - cc]; } + } } if (ccmax < cc1) { - for (int rr = rrmin; rr < rrmax; rr++) + for (int rr = rrmin; rr < rrmax; rr++) { for (int cc = 0; cc < std::min(border, cc1 - ccmax); cc++) { int c = FC(rr, cc); rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = (rawData[(top + rr)][(width - cc - 2)]) / 65535.f; @@ -906,11 +907,12 @@ float* RawImageSource::CA_correct_RT( rgb[1][rr * ts + ccmax + cc] = Gtmp[((top + rr) * width + (width - cc - 2)) >> 1]; } } + } } //also, fill the image corners if (rrmin > 0 && ccmin > 0) { - for (int rr = 0; rr < border; rr++) + for (int rr = 0; rr < border; rr++) { for (int cc = 0; cc < border; cc++) { int c = FC(rr, cc); rgb[c][(rr * ts + cc) >> ((c & 1) ^ 1)] = (rawData[border2 - rr][border2 - cc]) / 65535.f; @@ -918,10 +920,11 @@ float* RawImageSource::CA_correct_RT( rgb[1][rr * ts + cc] = Gtmp[((border2 - rr) * width + border2 - cc) >> 1]; } } + } } if (rrmax < rr1 && ccmax < cc1) { - for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) + for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) { for (int cc = 0; cc < std::min(border, cc1 - ccmax); cc++) { int c = FC(rr, cc); rgb[c][((rrmax + rr)*ts + ccmax + cc) >> ((c & 1) ^ 1)] = (rawData[(height - rr - 2)][(width - cc - 2)]) / 65535.f; @@ -929,10 +932,11 @@ float* RawImageSource::CA_correct_RT( rgb[1][(rrmax + rr)*ts + ccmax + cc] = Gtmp[((height - rr - 2) * width + (width - cc - 2)) >> 1]; } } + } } if (rrmin > 0 && ccmax < cc1) { - for (int rr = 0; rr < border; rr++) + for (int rr = 0; rr < border; rr++) { for (int cc = 0; cc < std::min(border, cc1 - ccmax); cc++) { int c = FC(rr, cc); rgb[c][(rr * ts + ccmax + cc) >> ((c & 1) ^ 1)] = (rawData[(border2 - rr)][(width - cc - 2)]) / 65535.f; @@ -940,10 +944,11 @@ float* RawImageSource::CA_correct_RT( rgb[1][rr * ts + ccmax + cc] = Gtmp[((border2 - rr) * width + (width - cc - 2)) >> 1]; } } + } } if (rrmax < rr1 && ccmin > 0) { - for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) + for (int rr = 0; rr < std::min(border, rr1 - rrmax); rr++) { for (int cc = 0; cc < border; cc++) { int c = FC(rr, cc); rgb[c][((rrmax + rr)*ts + cc) >> ((c & 1) ^ 1)] = (rawData[(height - rr - 2)][(border2 - cc)]) / 65535.f; @@ -951,17 +956,16 @@ float* RawImageSource::CA_correct_RT( rgb[1][(rrmax + rr)*ts + cc] = Gtmp[((height - rr - 2) * width + (border2 - cc)) >> 1]; } } + } } //end of border fill - // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if (!autoCA || fitParamsIn) { #ifdef __SSE2__ const vfloat onev = F2V(1.f); const vfloat epsv = F2V(eps); #endif - //manual CA correction; use red/blue slider values to set CA shift parameters for (int rr = 3; rr < rr1 - 3; rr++) { int cc = 3 + FC(rr, 1), c = FC(rr,cc), indx = rr * ts + cc; @@ -991,6 +995,7 @@ float* RawImageSource::CA_correct_RT( } } } + if (!autoCA) { float hfrac = -((float)(hblock - 0.5) / (hblsz - 2) - 0.5); float vfrac = -((float)(vblock - 0.5) / (vblsz - 2) - 0.5) * height / width; @@ -1035,7 +1040,6 @@ float* RawImageSource::CA_correct_RT( GRBdir[0][c] = lblockshifts[c>>1][0] > 0 ? 2 : -2; GRBdir[1][c] = lblockshifts[c>>1][1] > 0 ? 2 : -2; - } @@ -1109,7 +1113,7 @@ float* RawImageSource::CA_correct_RT( vfloat rinv = LC2VFU(rgb[1][indx]); vfloat RBint = rinv - grbdiffint; vmask cmask = vmaskf_ge(vabsf(RBint - cinv), zd25v * (RBint + cinv)); - if(_mm_movemask_ps((vfloat)cmask)) { + if (_mm_movemask_ps((vfloat)cmask)) { // if for any of the 4 pixels the condition is true, do the math for all 4 pixels and mask the unused out at the end //gradient weights using difference from G at CA shift points and G at grid points vfloat p0 = onev / (epsv + vabsf(rinv - LVFU(gshift[indx >> 1]))); @@ -1141,7 +1145,7 @@ float* RawImageSource::CA_correct_RT( float RBint = rgb[1][indx] - grbdiffint; if (fabsf(RBint - rgb[c][indx >> 1]) < 0.25f * (RBint + rgb[c][indx >> 1])) { - if (fabsf(grbdiffold) > fabsf(grbdiffint) ) { + if (fabsf(grbdiffold) > fabsf(grbdiffint)) { rgb[c][indx >> 1] = RBint; } } else { @@ -1156,7 +1160,7 @@ float* RawImageSource::CA_correct_RT( p2 * grbdiff[((rr - GRBdir0) * ts + cc) >> 1] + p3 * grbdiff[((rr - GRBdir0) * ts + cc - GRBdir1) >> 1]) / (p0 + p1 + p2 + p3) ; //now determine R/B at grid points using interpolated colour differences and interpolated G value at grid point - if (fabsf(grbdiffold) > fabsf(grbdiffint) ) { + if (fabsf(grbdiffold) > fabsf(grbdiffint)) { rgb[c][indx >> 1] = rgb[1][indx] - grbdiffint; } } @@ -1185,10 +1189,10 @@ float* RawImageSource::CA_correct_RT( } } - if(plistener) { + if (plistener) { progresscounter++; - if(progresscounter % 8 == 0) + if (progresscounter % 8 == 0) #pragma omp critical (cacorrect) { progress += 4.0 * SQR(ts - border2) / (iterations * height * width); @@ -1196,63 +1200,66 @@ float* RawImageSource::CA_correct_RT( plistener->setProgress(progress); } } - } + } #pragma omp barrier // copy temporary image matrix back to image matrix #pragma omp for - for(int row = 0; row < height; row++) { + for (int row = 0; row < height; row++) { int col = FC(row, 0) & 1; int indx = (row * width + col) >> 1; #ifdef __SSE2__ - for(; col < width - 7 - (3 * (W & 1)); col += 8, indx += 4) { + for (; col < width - 7 - (3 * (W & 1)); col += 8, indx += 4) { STC2VFU(rawData[row][col], LVFU(RawDataTmp[indx])); } #endif - for(; col < width - (3 * (W & 1)); col += 2, indx++) { + for (; col < width - (3 * (W & 1)); col += 2, indx++) { rawData[row][col] = RawDataTmp[indx]; } } } - // clean up free(bufferThr); } } - if(autoCA && fitParamsTransfer && fitParamsOut) { + if (autoCA && fitParamsTransfer && fitParamsOut) { // store calculated parameters int index = 0; - for(int c = 0; c < 2; ++c) { - for(int d = 0; d < 2; ++d) { - for(int e = 0; e < 16; ++e) { + for (int c = 0; c < 2; ++c) { + for (int d = 0; d < 2; ++d) { + for (int e = 0; e < 16; ++e) { fitParamsTransfer[index++] = fitparams[c][d][e]; } } } } - if(freeBuffer) { + if (freeBuffer) { free(buffer); buffer = nullptr; } if (avoidColourshift) { + // to avoid or at least reduce the colour shift caused by raw ca correction we compute the per pixel difference factors + // of red and blue channel and apply a gaussian blur on them. + // Then we apply the resulting factors per pixel on the result of raw ca correction + array2D redFactor((W+1)/2, (H+1)/2); array2D blueFactor((W+1)/2, (H+1)/2); #pragma omp parallel { #pragma omp for - for(int i = 0; i < H; ++i) { + for (int i = 0; i < H; ++i) { const int firstCol = FC(i, 0) & 1; const int colour = FC(i, firstCol); const array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; int j = firstCol; - for(; j < W - 1; j += 2) { + for (; j < W - 1; j += 2) { (*nonGreen)[i/2][j/2] = rtengine::LIM((rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : (*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 2.f); } if (j < W) { @@ -1263,6 +1270,7 @@ float* RawImageSource::CA_correct_RT( #pragma omp single { if (H % 2) { + // odd height => factors for one one channel are not set in last row => use values of preceding row const int firstCol = FC(0, 0) & 1; const int colour = FC(0, firstCol); const array2D* nonGreen = colour == 0 ? &blueFactor : &redFactor; @@ -1272,6 +1280,7 @@ float* RawImageSource::CA_correct_RT( } if (W % 2) { + // odd width => factors for one one channel are not set in last column => use value of preceding column const int ngRow = 1 - (FC(0, 0) & 1); const int ngCol = FC(ngRow, 0) & 1; const int colour = FC(ngRow, ngCol); @@ -1282,18 +1291,18 @@ float* RawImageSource::CA_correct_RT( } } - #pragma omp barrier - + // blur correction factors gaussianBlur(redFactor, redFactor, (W+1)/2, (H+1)/2, 30.0); gaussianBlur(blueFactor, blueFactor, (W+1)/2, (H+1)/2, 30.0); + // apply correction factors to avoid (reduce) colour shift #pragma omp for - for(int i = 0; i < H; ++i) { + for (int i = 0; i < H; ++i) { const int firstCol = FC(i, 0) & 1; const int colour = FC(i, firstCol); const array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; int j = firstCol; - for(; j < W - 1; j += 2) { + for (; j < W - 1; j += 2) { rawData[i][j] *= (*nonGreen)[i/2][j/2]; } if (j < W) { @@ -1304,7 +1313,7 @@ float* RawImageSource::CA_correct_RT( delete oldraw; } - if(plistener) { + if (plistener) { plistener->setProgress(1.0); } return buffer; diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 77c6285be..1396ae245 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2009,13 +2009,13 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } if(numFrames == 4) { double fitParams[64]; - float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, raw.ca_avoidcolourshift, *rawDataFrames[0], fitParams, false, true, nullptr, false); + float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[0], fitParams, false, true, nullptr, false); for(int i = 1; i < 3; ++i) { - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, raw.ca_avoidcolourshift, *rawDataFrames[i], fitParams, true, false, buffer, false); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[i], fitParams, true, false, buffer, false); } - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, raw.ca_avoidcolourshift, *rawDataFrames[3], fitParams, true, false, buffer, true); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[3], fitParams, true, false, buffer, true); } else { - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, 8.0, raw.ca_avoidcolourshift, rawData, nullptr, false, false, nullptr, true); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, rawData, nullptr, false, false, nullptr, true); } } diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 972e1fe64..ad7807a44 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -244,7 +244,6 @@ protected: size_t autoIterations, double cared, double cablue, - double caautostrength, bool avoidColourshift, const array2D &rawData, double* fitParamsTransfer, From ec4115512a3779b07ee1bc6398d069cde58ce40a Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 8 Sep 2018 13:08:44 +0200 Subject: [PATCH 096/115] raw ca correction/avoid colour shift: Vectorized one loop, #4777 --- rtengine/CA_correct_RT.cc | 45 +++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index ef1e534c0..9cf1af145 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -147,11 +147,7 @@ float* RawImageSource::CA_correct_RT( oldraw = new array2D((W + 1) / 2, H); #pragma omp parallel for for (int i = 0; i < H; ++i) { - int j = FC(i, 0) & 1; - for (; j < W - 1; j += 2) { - (*oldraw)[i][j / 2] = rawData[i][j]; - } - if (j < W) { + for (int j = FC(i, 0) & 1; j < W; j += 2) { (*oldraw)[i][j / 2] = rawData[i][j]; } } @@ -804,8 +800,7 @@ float* RawImageSource::CA_correct_RT( float* grbdiff = (float (*)) (data + 2 * sizeof(float) * ts * ts + 3 * 64); // there is no overlap in buffer usage => share //green interpolated to optical sample points for R/B float* gshift = (float (*)) (data + 2 * sizeof(float) * ts * ts + sizeof(float) * ts * tsh + 4 * 64); // there is no overlap in buffer usage => share - #pragma omp for schedule(dynamic) collapse(2) nowait - + #pragma omp for schedule(dynamic) collapse(2) for (int top = -border; top < height; top += ts - border2) { for (int left = -border; left < width - (W & 1); left += ts - border2) { memset(bufferThr, 0, buffersizePassTwo); @@ -958,7 +953,6 @@ float* RawImageSource::CA_correct_RT( } } } - //end of border fill if (!autoCA || fitParamsIn) { @@ -1026,7 +1020,6 @@ float* RawImageSource::CA_correct_RT( lblockshifts[1][1] = LIM(lblockshifts[1][1], -bslim, bslim); }//end of setting CA shift parameters - for (int c = 0; c < 3; c += 2) { //some parameters for the bilinear interpolation @@ -1042,7 +1035,6 @@ float* RawImageSource::CA_correct_RT( GRBdir[1][c] = lblockshifts[c>>1][1] > 0 ? 2 : -2; } - for (int rr = 4; rr < rr1 - 4; rr++) { int cc = 4 + (FC(rr, 2) & 1); int c = FC(rr, cc); @@ -1203,7 +1195,6 @@ float* RawImageSource::CA_correct_RT( } } - #pragma omp barrier // copy temporary image matrix back to image matrix #pragma omp for @@ -1245,7 +1236,7 @@ float* RawImageSource::CA_correct_RT( if (avoidColourshift) { // to avoid or at least reduce the colour shift caused by raw ca correction we compute the per pixel difference factors - // of red and blue channel and apply a gaussian blur on them. + // of red and blue channel and apply a gaussian blur to them. // Then we apply the resulting factors per pixel on the result of raw ca correction array2D redFactor((W+1)/2, (H+1)/2); @@ -1253,24 +1244,36 @@ float* RawImageSource::CA_correct_RT( #pragma omp parallel { +#ifdef __SSE2__ + const vfloat onev = F2V(1.f); + const vfloat twov = F2V(2.f); + const vfloat zd5v = F2V(0.5f); +#endif #pragma omp for for (int i = 0; i < H; ++i) { const int firstCol = FC(i, 0) & 1; const int colour = FC(i, firstCol); const array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; int j = firstCol; - for (; j < W - 1; j += 2) { - (*nonGreen)[i/2][j/2] = rtengine::LIM((rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : (*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 2.f); +#ifdef __SSE2__ + for (; j < W - 7; j += 8) { + const vfloat newvals = LC2VFU(rawData[i][j]); + const vfloat oldvals = LVFU((*oldraw)[i][j / 2]); + vfloat factors = oldvals / newvals; + factors = vself(vmaskf_le(newvals, onev), onev, factors); + factors = vself(vmaskf_le(oldvals, onev), onev, factors); + STVFU((*nonGreen)[i/2][j/2], LIMV(factors, zd5v, twov)); } - if (j < W) { - (*nonGreen)[i/2][j/2] = rtengine::LIM((rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : (*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 2.f); +#endif + for (; j < W; j += 2) { + (*nonGreen)[i/2][j/2] = (rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : rtengine::LIM((*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 2.f); } } #pragma omp single { if (H % 2) { - // odd height => factors for one one channel are not set in last row => use values of preceding row + // odd height => factors for one channel are not set in last row => use values of preceding row const int firstCol = FC(0, 0) & 1; const int colour = FC(0, firstCol); const array2D* nonGreen = colour == 0 ? &blueFactor : &redFactor; @@ -1280,7 +1283,7 @@ float* RawImageSource::CA_correct_RT( } if (W % 2) { - // odd width => factors for one one channel are not set in last column => use value of preceding column + // odd width => factors for one channel are not set in last column => use value of preceding column const int ngRow = 1 - (FC(0, 0) & 1); const int ngCol = FC(ngRow, 0) & 1; const int colour = FC(ngRow, ngCol); @@ -1301,11 +1304,7 @@ float* RawImageSource::CA_correct_RT( const int firstCol = FC(i, 0) & 1; const int colour = FC(i, firstCol); const array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; - int j = firstCol; - for (; j < W - 1; j += 2) { - rawData[i][j] *= (*nonGreen)[i/2][j/2]; - } - if (j < W) { + for (int j = firstCol; j < W; j += 2) { rawData[i][j] *= (*nonGreen)[i/2][j/2]; } } From 88d0f60d6bb3e561d1f498f456786afaa3b98b19 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 8 Sep 2018 13:09:55 +0200 Subject: [PATCH 097/115] raw ca correction/avoid colour shift: fire event only if raw ca correction is active, #4777 --- rtgui/rawcacorrection.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index fd69ab063..02b7a65e3 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -147,7 +147,7 @@ void RAWCACorr::checkBoxToggled (CheckBox* c, CheckValue newval) listener->panelChanged (EvPreProcessAutoCA, caAutocorrect->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); } } else if (c == caAvoidcolourshift) { - if (listener) { + if (listener && (caAutocorrect->getLastActive() || caRed->getValue() != 0 || caBlue->getValue() != 0)) { listener->panelChanged (EvPreProcessCAColourshift, caAvoidcolourshift->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); } } From ddbf94e94099f953811baaf1bfaaa11ac2e2dd2b Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 8 Sep 2018 13:26:23 +0200 Subject: [PATCH 098/115] raw ca correction: generate history entry but don't reprocess when changing 'avoid colour shift' while ca correction is disabled, #4777 --- rtgui/rawcacorrection.cc | 5 +++-- rtgui/rawcacorrection.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 02b7a65e3..dc5657ece 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -29,6 +29,7 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM auto m = ProcEventMapper::getInstance(); EvPreProcessCAAutoiterations = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_AUTOIT"); EvPreProcessCAColourshift = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_COLOURSHIFT"); + EvPreProcessCAColourshiftHistory = m->newEvent(M_VOID, "HISTORY_MSG_RAWCACORR_COLOURSHIFT"); Gtk::Image* icaredL = Gtk::manage (new RTImage ("circle-red-cyan-small.png")); Gtk::Image* icaredR = Gtk::manage (new RTImage ("circle-cyan-red-small.png")); @@ -147,8 +148,8 @@ void RAWCACorr::checkBoxToggled (CheckBox* c, CheckValue newval) listener->panelChanged (EvPreProcessAutoCA, caAutocorrect->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); } } else if (c == caAvoidcolourshift) { - if (listener && (caAutocorrect->getLastActive() || caRed->getValue() != 0 || caBlue->getValue() != 0)) { - listener->panelChanged (EvPreProcessCAColourshift, caAvoidcolourshift->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); + if (listener) { + listener->panelChanged ((caAutocorrect->getLastActive() || caRed->getValue() != 0 || caBlue->getValue() != 0) ? EvPreProcessCAColourshift : EvPreProcessCAColourshiftHistory, caAvoidcolourshift->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); } } } diff --git a/rtgui/rawcacorrection.h b/rtgui/rawcacorrection.h index 614bd4b90..dea9ef738 100644 --- a/rtgui/rawcacorrection.h +++ b/rtgui/rawcacorrection.h @@ -36,6 +36,7 @@ protected: rtengine::ProcEvent EvPreProcessCAAutoiterations; rtengine::ProcEvent EvPreProcessCAColourshift; + rtengine::ProcEvent EvPreProcessCAColourshiftHistory; public: From f85ec677ffc8b29831c66add0665fbd8da20e275 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sun, 9 Sep 2018 12:53:44 +0200 Subject: [PATCH 099/115] raw ca correction: avoid colour shift per iteration, #4777 --- rtengine/CA_correct_RT.cc | 157 ++++++++++++++++++++------------------ 1 file changed, 81 insertions(+), 76 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 9cf1af145..81fd8d593 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -141,10 +141,14 @@ float* RawImageSource::CA_correct_RT( } } + array2D* redFactor = nullptr; + array2D* blueFactor = nullptr; array2D* oldraw = nullptr; if (avoidColourshift) { - // copy raw values before ca correction + redFactor = new array2D((W+1)/2, (H+1)/2); + blueFactor = new array2D((W+1)/2, (H+1)/2); oldraw = new array2D((W + 1) / 2, H); + // copy raw values before ca correction #pragma omp parallel for for (int i = 0; i < H; ++i) { for (int j = FC(i, 0) & 1; j < W; j += 2) { @@ -1215,7 +1219,81 @@ float* RawImageSource::CA_correct_RT( // clean up free(bufferThr); } + if (avoidColourshift) { + // to avoid or at least reduce the colour shift caused by raw ca correction we compute the per pixel difference factors + // of red and blue channel and apply a gaussian blur to them. + // Then we apply the resulting factors per pixel on the result of raw ca correction + + #pragma omp parallel + { + #ifdef __SSE2__ + const vfloat onev = F2V(1.f); + const vfloat twov = F2V(2.f); + const vfloat zd5v = F2V(0.5f); + #endif + #pragma omp for + for (int i = 0; i < H; ++i) { + const int firstCol = FC(i, 0) & 1; + const int colour = FC(i, firstCol); + const array2D* nonGreen = colour == 0 ? redFactor : blueFactor; + int j = firstCol; + #ifdef __SSE2__ + for (; j < W - 7; j += 8) { + const vfloat newvals = LC2VFU(rawData[i][j]); + const vfloat oldvals = LVFU((*oldraw)[i][j / 2]); + vfloat factors = oldvals / newvals; + factors = vself(vmaskf_le(newvals, onev), onev, factors); + factors = vself(vmaskf_le(oldvals, onev), onev, factors); + STVFU((*nonGreen)[i/2][j/2], LIMV(factors, zd5v, twov)); + } + #endif + for (; j < W; j += 2) { + (*nonGreen)[i/2][j/2] = (rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : rtengine::LIM((*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 2.f); + } + } + + #pragma omp single + { + if (H % 2) { + // odd height => factors for one channel are not set in last row => use values of preceding row + const int firstCol = FC(0, 0) & 1; + const int colour = FC(0, firstCol); + const array2D* nonGreen = colour == 0 ? blueFactor : redFactor; + for (int j = 0; j < (W + 1) / 2; ++j) { + (*nonGreen)[(H + 1) / 2 - 1][j] = (*nonGreen)[(H + 1) / 2 - 2][j]; + } + } + + if (W % 2) { + // odd width => factors for one channel are not set in last column => use value of preceding column + const int ngRow = 1 - (FC(0, 0) & 1); + const int ngCol = FC(ngRow, 0) & 1; + const int colour = FC(ngRow, ngCol); + const array2D* nonGreen = colour == 0 ? redFactor : blueFactor; + for (int i = 0; i < (H + 1) / 2; ++i) { + (*nonGreen)[i][(W + 1) / 2 - 1] = (*nonGreen)[i][(W + 1) / 2 - 2]; + } + } + } + + // blur correction factors + gaussianBlur(*redFactor, *redFactor, (W+1)/2, (H+1)/2, 30.0); + gaussianBlur(*blueFactor, *blueFactor, (W+1)/2, (H+1)/2, 30.0); + + // apply correction factors to avoid (reduce) colour shift + #pragma omp for + for (int i = 0; i < H; ++i) { + const int firstCol = FC(i, 0) & 1; + const int colour = FC(i, firstCol); + const array2D* nonGreen = colour == 0 ? redFactor : blueFactor; + for (int j = firstCol; j < W; j += 2) { + rawData[i][j] *= (*nonGreen)[i/2][j/2]; + } + } + } + } } + if (autoCA && fitParamsTransfer && fitParamsOut) { // store calculated parameters int index = 0; @@ -1233,83 +1311,10 @@ float* RawImageSource::CA_correct_RT( buffer = nullptr; } - if (avoidColourshift) { - // to avoid or at least reduce the colour shift caused by raw ca correction we compute the per pixel difference factors - // of red and blue channel and apply a gaussian blur to them. - // Then we apply the resulting factors per pixel on the result of raw ca correction - - array2D redFactor((W+1)/2, (H+1)/2); - array2D blueFactor((W+1)/2, (H+1)/2); - - #pragma omp parallel - { -#ifdef __SSE2__ - const vfloat onev = F2V(1.f); - const vfloat twov = F2V(2.f); - const vfloat zd5v = F2V(0.5f); -#endif - #pragma omp for - for (int i = 0; i < H; ++i) { - const int firstCol = FC(i, 0) & 1; - const int colour = FC(i, firstCol); - const array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; - int j = firstCol; -#ifdef __SSE2__ - for (; j < W - 7; j += 8) { - const vfloat newvals = LC2VFU(rawData[i][j]); - const vfloat oldvals = LVFU((*oldraw)[i][j / 2]); - vfloat factors = oldvals / newvals; - factors = vself(vmaskf_le(newvals, onev), onev, factors); - factors = vself(vmaskf_le(oldvals, onev), onev, factors); - STVFU((*nonGreen)[i/2][j/2], LIMV(factors, zd5v, twov)); - } -#endif - for (; j < W; j += 2) { - (*nonGreen)[i/2][j/2] = (rawData[i][j] <= 1.f || (*oldraw)[i][j / 2] <= 1.f) ? 1.f : rtengine::LIM((*oldraw)[i][j / 2] / rawData[i][j], 0.5f, 2.f); - } - } - - #pragma omp single - { - if (H % 2) { - // odd height => factors for one channel are not set in last row => use values of preceding row - const int firstCol = FC(0, 0) & 1; - const int colour = FC(0, firstCol); - const array2D* nonGreen = colour == 0 ? &blueFactor : &redFactor; - for (int j = 0; j < (W + 1) / 2; ++j) { - (*nonGreen)[(H + 1) / 2 - 1][j] = (*nonGreen)[(H + 1) / 2 - 2][j]; - } - } - - if (W % 2) { - // odd width => factors for one channel are not set in last column => use value of preceding column - const int ngRow = 1 - (FC(0, 0) & 1); - const int ngCol = FC(ngRow, 0) & 1; - const int colour = FC(ngRow, ngCol); - const array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; - for (int i = 0; i < (H + 1) / 2; ++i) { - (*nonGreen)[i][(W + 1) / 2 - 1] = redFactor[i][(W + 1) / 2 - 2]; - } - } - } - - // blur correction factors - gaussianBlur(redFactor, redFactor, (W+1)/2, (H+1)/2, 30.0); - gaussianBlur(blueFactor, blueFactor, (W+1)/2, (H+1)/2, 30.0); - - // apply correction factors to avoid (reduce) colour shift - #pragma omp for - for (int i = 0; i < H; ++i) { - const int firstCol = FC(i, 0) & 1; - const int colour = FC(i, firstCol); - const array2D* nonGreen = colour == 0 ? &redFactor : &blueFactor; - for (int j = firstCol; j < W; j += 2) { - rawData[i][j] *= (*nonGreen)[i/2][j/2]; - } - } - } delete oldraw; + delete redFactor; + delete blueFactor; } if (plistener) { From 8e678c285a4bb241f5ebbbac546c30153dd78660 Mon Sep 17 00:00:00 2001 From: Benitoite Date: Mon, 10 Sep 2018 02:33:20 -0700 Subject: [PATCH 100/115] support camera dng LEICA M MONOCHROM (Typ 246) Patch by @heckflosse https://github.com/Beep6581/RawTherapee/issues/4785#issuecomment-419713993 --- rtengine/dcraw.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index ccfd16187..bd9fa4b47 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -1136,7 +1136,7 @@ void CLASS lossless_dng_load_raw() fseek (ifp, get4(), SEEK_SET); if (!ljpeg_start (&jh, 0)) break; jwide = jh.wide; - if (filters) jwide *= jh.clrs; + if (filters || (colors == 1 && jh.clrs > 1)) jwide *= jh.clrs; jwide /= MIN (is_raw, tiff_samples); switch (jh.algo) { case 0xc1: From a42b2236d977ee4071c285396e82d29bb5c4fbbc Mon Sep 17 00:00:00 2001 From: Benitoite Date: Mon, 10 Sep 2018 11:43:31 -0700 Subject: [PATCH 101/115] save format panel PNG options fix Patch by @heckflosse https://github.com/Beep6581/RawTherapee/issues/4789 --- rtgui/saveformatpanel.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/saveformatpanel.cc b/rtgui/saveformatpanel.cc index 2a6d5cad1..755cb9239 100644 --- a/rtgui/saveformatpanel.cc +++ b/rtgui/saveformatpanel.cc @@ -182,7 +182,7 @@ void SaveFormatPanel::formatChanged () int act = format->get_active_row_number(); - if (act < 0 || act > 5) { + if (act < 0 || act > 6) { return; } From 6969303878bc84f231318ee92b74db7caca7cbfa Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 11 Sep 2018 17:11:38 +0200 Subject: [PATCH 102/115] Compressed 16-bit TIFF output broken, fixes #4792 --- rtengine/imageio.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index 8bfe81504..08922e436 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -1471,7 +1471,7 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, float isFloat, bool uncompr getScanline (row, linebuffer, bps, isFloat); if (bps == 16) { - if(needsReverse && !uncompressed) { + if(needsReverse && !uncompressed && isFloat) { for(int i = 0; i < lineWidth; i += 2) { char temp = linebuffer[i]; linebuffer[i] = linebuffer[i + 1]; From dc34658683c226b5667d36433d854dc37d7522a1 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Tue, 11 Sep 2018 20:08:01 +0200 Subject: [PATCH 103/115] Gray-out Retinex tool when editing non-raw image Closes #4795 --- rtgui/guiutils.cc | 5 +++++ rtgui/guiutils.h | 3 +++ rtgui/toolpanel.cc | 11 ++++++++++- rtgui/toolpanel.h | 1 + rtgui/toolpanelcoord.cc | 5 +++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 1e4f4eac8..23c006d3b 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -917,6 +917,11 @@ bool MyExpander::on_enabled_change(GdkEventButton* event) return false; } +void MyExpander::setSensitive(bool makeSensitive) +{ + set_sensitive(makeSensitive); +} + /* * * Derived class of some widgets to properly handle the scroll wheel ; diff --git a/rtgui/guiutils.h b/rtgui/guiutils.h index fb627a78a..fbc2ef999 100644 --- a/rtgui/guiutils.h +++ b/rtgui/guiutils.h @@ -268,6 +268,9 @@ public: /// Set the collapsed/expanded state of the expander void set_expanded( bool expanded ); + // Set whether the expander should be grayed-out. + void setSensitive(bool makeSensitive); + /// Get the collapsed/expanded state of the expander bool get_expanded(); diff --git a/rtgui/toolpanel.cc b/rtgui/toolpanel.cc index 0d441e01f..515fb60ef 100644 --- a/rtgui/toolpanel.cc +++ b/rtgui/toolpanel.cc @@ -146,5 +146,14 @@ void FoldableToolPanel::setEnabledTooltipText(Glib::ustring tooltipText) } } - +void FoldableToolPanel::setGrayedOut(bool doGrayOut) +{ + if (doGrayOut) { + exp->setEnabled(false); + exp->set_expanded(false); + exp->setSensitive(false); + } else { + exp->setSensitive(true); + } +} diff --git a/rtgui/toolpanel.h b/rtgui/toolpanel.h index d3d7439a9..fd7d27fbe 100644 --- a/rtgui/toolpanel.h +++ b/rtgui/toolpanel.h @@ -205,6 +205,7 @@ public: void setEnabledTooltipText(Glib::ustring tooltipText); bool get_inconsistent(); // related to the enabled/disabled state void set_inconsistent(bool isInconsistent); // related to the enabled/disabled state + void setGrayedOut(bool doGrayOut); // Set whether the tool should be disabled, collapsed and grayed-out. void setLevel (int level); diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index 5a69119c2..5d35a9ad5 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -275,6 +275,7 @@ void ToolPanelCoordinator::imageTypeChanged (bool isRaw, bool isBayer, bool isXt self->sensorbayer->FoldableToolPanel::show(); self->preprocess->FoldableToolPanel::show(); self->flatfield->FoldableToolPanel::show(); + self->retinex->FoldableToolPanel::setGrayedOut(false); return FALSE; }; @@ -289,6 +290,7 @@ void ToolPanelCoordinator::imageTypeChanged (bool isRaw, bool isBayer, bool isXt self->sensorbayer->FoldableToolPanel::hide(); self->preprocess->FoldableToolPanel::show(); self->flatfield->FoldableToolPanel::show(); + self->retinex->FoldableToolPanel::setGrayedOut(false); return FALSE; }; @@ -303,6 +305,7 @@ void ToolPanelCoordinator::imageTypeChanged (bool isRaw, bool isBayer, bool isXt self->sensorxtrans->FoldableToolPanel::hide(); self->preprocess->FoldableToolPanel::hide(); self->flatfield->FoldableToolPanel::show(); + self->retinex->FoldableToolPanel::setGrayedOut(false); return FALSE; }; @@ -316,6 +319,7 @@ void ToolPanelCoordinator::imageTypeChanged (bool isRaw, bool isBayer, bool isXt self->sensorxtrans->FoldableToolPanel::hide(); self->preprocess->FoldableToolPanel::hide(); self->flatfield->FoldableToolPanel::hide(); + self->retinex->FoldableToolPanel::setGrayedOut(false); return FALSE; }; @@ -326,6 +330,7 @@ void ToolPanelCoordinator::imageTypeChanged (bool isRaw, bool isBayer, bool isXt ToolPanelCoordinator* const self = static_cast(data); self->rawPanelSW->set_sensitive (false); + self->retinex->FoldableToolPanel::setGrayedOut(true); return FALSE; }; From 2062555e47965f729dde07418abab540880d7561 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 11 Sep 2018 23:43:39 +0200 Subject: [PATCH 104/115] remove raw ca correction 'avoid colour shift' from gui, #4777 --- rtgui/rawcacorrection.cc | 25 +++++++++++++------------ rtgui/rawcacorrection.h | 2 +- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index dc5657ece..5ad5d30a3 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -39,7 +39,7 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM caAutocorrect = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AUTO"), multiImage)); caAutocorrect->setCheckBoxListener (this); - caAutoiterations = Gtk::manage(new Adjuster (M("TP_RAWCACORR_AUTOIT"), 1, 10, 1, 2)); + caAutoiterations = Gtk::manage(new Adjuster (M("TP_RAWCACORR_AUTOIT"), 1, 5, 1, 2)); caAutoiterations->setAdjusterListener (this); if (caAutoiterations->delay < options.adjusterMaxDelay) { @@ -68,9 +68,9 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM pack_start( *caRed, Gtk::PACK_SHRINK, 4); pack_start( *caBlue, Gtk::PACK_SHRINK, 4); - caAvoidcolourshift = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AVOIDCOLORSHIFT"), multiImage)); - caAvoidcolourshift->setCheckBoxListener (this); - pack_start( *caAvoidcolourshift, Gtk::PACK_SHRINK, 4); +// caAvoidcolourshift = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AVOIDCOLORSHIFT"), multiImage)); +// caAvoidcolourshift->setCheckBoxListener (this); +// pack_start( *caAvoidcolourshift, Gtk::PACK_SHRINK, 4); } @@ -81,7 +81,7 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi if(pedited ) { caAutocorrect->setEdited(pedited->raw.ca_autocorrect); - caAvoidcolourshift->setEdited(pedited->raw.ca_avoidcolourshift); +// caAvoidcolourshift->setEdited(pedited->raw.ca_avoidcolourshift); caAutoiterations->setEditedState( pedited->raw.caautoiterations ? Edited : UnEdited ); caRed->setEditedState( pedited->raw.cared ? Edited : UnEdited ); caBlue->setEditedState( pedited->raw.cablue ? Edited : UnEdited ); @@ -93,7 +93,7 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi caBlue->set_sensitive(!pp->raw.ca_autocorrect); caAutocorrect->setValue(pp->raw.ca_autocorrect); - caAvoidcolourshift->setValue(pp->raw.ca_avoidcolourshift); +// caAvoidcolourshift->setValue(pp->raw.ca_avoidcolourshift); caAutoiterations->setValue (pp->raw.caautoiterations); caRed->setValue (pp->raw.cared); caBlue->setValue (pp->raw.cablue); @@ -104,14 +104,14 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi void RAWCACorr::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited) { pp->raw.ca_autocorrect = caAutocorrect->getLastActive(); - pp->raw.ca_avoidcolourshift = caAvoidcolourshift->getLastActive(); +// pp->raw.ca_avoidcolourshift = caAvoidcolourshift->getLastActive(); pp->raw.caautoiterations = caAutoiterations->getValue(); pp->raw.cared = caRed->getValue(); pp->raw.cablue = caBlue->getValue(); if (pedited) { pedited->raw.ca_autocorrect = !caAutocorrect->get_inconsistent(); - pedited->raw.ca_avoidcolourshift = !caAvoidcolourshift->get_inconsistent(); +// pedited->raw.ca_avoidcolourshift = !caAvoidcolourshift->get_inconsistent(); pedited->raw.caautoiterations = caAutoiterations->getEditedState (); pedited->raw.cared = caRed->getEditedState (); pedited->raw.cablue = caBlue->getEditedState (); @@ -147,11 +147,12 @@ void RAWCACorr::checkBoxToggled (CheckBox* c, CheckValue newval) if (listener) { listener->panelChanged (EvPreProcessAutoCA, caAutocorrect->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); } - } else if (c == caAvoidcolourshift) { - if (listener) { - listener->panelChanged ((caAutocorrect->getLastActive() || caRed->getValue() != 0 || caBlue->getValue() != 0) ? EvPreProcessCAColourshift : EvPreProcessCAColourshiftHistory, caAvoidcolourshift->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); - } } +// else if (c == caAvoidcolourshift) { +// if (listener) { +// listener->panelChanged ((caAutocorrect->getLastActive() || caRed->getValue() != 0 || caBlue->getValue() != 0) ? EvPreProcessCAColourshift : EvPreProcessCAColourshiftHistory, caAvoidcolourshift->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); +// } +// } } void RAWCACorr::setBatchMode(bool batchMode) diff --git a/rtgui/rawcacorrection.h b/rtgui/rawcacorrection.h index dea9ef738..1c1ced53b 100644 --- a/rtgui/rawcacorrection.h +++ b/rtgui/rawcacorrection.h @@ -32,7 +32,7 @@ protected: Adjuster* caAutoiterations; Adjuster* caRed; Adjuster* caBlue; - CheckBox* caAvoidcolourshift; +// CheckBox* caAvoidcolourshift; rtengine::ProcEvent EvPreProcessCAAutoiterations; rtengine::ProcEvent EvPreProcessCAColourshift; From adddd5aafa11c3d039a64d34cfd9a706242335f9 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 11 Sep 2018 23:44:42 +0200 Subject: [PATCH 105/115] set raw ca correction 'avoid colour shift' as default, #4777 --- rtengine/rawimagesource.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 1396ae245..0f6d7cc93 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2009,13 +2009,13 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } if(numFrames == 4) { double fitParams[64]; - float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[0], fitParams, false, true, nullptr, false); + float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, true, *rawDataFrames[0], fitParams, false, true, nullptr, false); for(int i = 1; i < 3; ++i) { - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[i], fitParams, true, false, buffer, false); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, true, *rawDataFrames[i], fitParams, true, false, buffer, false); } - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[3], fitParams, true, false, buffer, true); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, true, *rawDataFrames[3], fitParams, true, false, buffer, true); } else { - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, rawData, nullptr, false, false, nullptr, true); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, true, rawData, nullptr, false, false, nullptr, true); } } From ef0d9fac99985a3c6adaa5ff720500784b084f4f Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Wed, 12 Sep 2018 13:16:17 +0200 Subject: [PATCH 106/115] Removed unnecessary method, PR #4796 --- rtgui/guiutils.cc | 5 ----- rtgui/guiutils.h | 3 --- rtgui/toolpanel.cc | 4 ++-- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 23c006d3b..1e4f4eac8 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -917,11 +917,6 @@ bool MyExpander::on_enabled_change(GdkEventButton* event) return false; } -void MyExpander::setSensitive(bool makeSensitive) -{ - set_sensitive(makeSensitive); -} - /* * * Derived class of some widgets to properly handle the scroll wheel ; diff --git a/rtgui/guiutils.h b/rtgui/guiutils.h index fbc2ef999..fb627a78a 100644 --- a/rtgui/guiutils.h +++ b/rtgui/guiutils.h @@ -268,9 +268,6 @@ public: /// Set the collapsed/expanded state of the expander void set_expanded( bool expanded ); - // Set whether the expander should be grayed-out. - void setSensitive(bool makeSensitive); - /// Get the collapsed/expanded state of the expander bool get_expanded(); diff --git a/rtgui/toolpanel.cc b/rtgui/toolpanel.cc index 515fb60ef..c9c4f823c 100644 --- a/rtgui/toolpanel.cc +++ b/rtgui/toolpanel.cc @@ -151,9 +151,9 @@ void FoldableToolPanel::setGrayedOut(bool doGrayOut) if (doGrayOut) { exp->setEnabled(false); exp->set_expanded(false); - exp->setSensitive(false); + exp->set_sensitive(false); } else { - exp->setSensitive(true); + exp->set_sensitive(true); } } From 7cbf1f6d8d1053e82a876932f47b39e4629764b8 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Wed, 12 Sep 2018 14:24:41 +0200 Subject: [PATCH 107/115] Fix calculation of interpolation parameters for negative block shifts, #4774, #4777 --- rtengine/CA_correct_RT.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index 81fd8d593..a27ee7998 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -1029,11 +1029,17 @@ float* RawImageSource::CA_correct_RT( //some parameters for the bilinear interpolation shiftvfloor[c] = floor((float)lblockshifts[c>>1][0]); shiftvceil[c] = ceil((float)lblockshifts[c>>1][0]); - shiftvfrac[c] = lblockshifts[c>>1][0] - shiftvfloor[c]; + if (lblockshifts[c>>1][0] < 0.f) { + std::swap(shiftvfloor[c], shiftvceil[c]); + } + shiftvfrac[c] = fabs(lblockshifts[c>>1][0] - shiftvfloor[c]); shifthfloor[c] = floor((float)lblockshifts[c>>1][1]); shifthceil[c] = ceil((float)lblockshifts[c>>1][1]); - shifthfrac[c] = lblockshifts[c>>1][1] - shifthfloor[c]; + if (lblockshifts[c>>1][1] < 0.f) { + std::swap(shifthfloor[c], shifthceil[c]); + } + shifthfrac[c] = fabs(lblockshifts[c>>1][1] - shifthfloor[c]); GRBdir[0][c] = lblockshifts[c>>1][0] > 0 ? 2 : -2; GRBdir[1][c] = lblockshifts[c>>1][1] > 0 ? 2 : -2; From 85d55ebeb64eed29a8325d4f5b4e9bfa627a8aea Mon Sep 17 00:00:00 2001 From: Thanatomanic <6567747+Thanatomanic@users.noreply.github.com> Date: Sun, 2 Sep 2018 13:39:55 +0200 Subject: [PATCH 108/115] Modifications to store histogram settings across sessions --- rtgui/editorpanel.cc | 2 +- rtgui/histogrampanel.cc | 85 ++++++++++++++++++++--------------------- rtgui/histogrampanel.h | 21 +++++----- rtgui/options.cc | 33 ++++++++++++++++ rtgui/options.h | 3 +- 5 files changed, 89 insertions(+), 55 deletions(-) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index c99ed2dbd..3f0909d88 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -2242,7 +2242,7 @@ void EditorPanel::histogramChanged (LUTu & histRed, LUTu & histGreen, LUTu & his { if (histogramPanel) { - histogramPanel->histogramChanged (histRed, histGreen, histBlue, histLuma, histRedRaw, histGreenRaw, histBlueRaw, histChroma); + histogramPanel->histogramChanged (histRed, histGreen, histBlue, histLuma, histChroma, histRedRaw, histGreenRaw, histBlueRaw); } tpc->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve,/*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 1d8ce89db..5293c6c00 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -129,14 +129,14 @@ HistogramPanel::HistogramPanel () buttonGrid = Gtk::manage (new Gtk::Grid ()); buttonGrid->set_orientation(Gtk::ORIENTATION_VERTICAL); - showRed->set_active (true); - showGreen->set_active (true); - showBlue->set_active (true); - showValue->set_active (false);//unactive by default - showChro->set_active (false);//unactive by default - showRAW->set_active (false); + showRed->set_active (options.histogramRed); + showGreen->set_active (options.histogramGreen); + showBlue->set_active (options.histogramBlue); + showValue->set_active (options.histogramLuma); + showChro->set_active (options.histogramChroma); + showRAW->set_active (options.histogramRAW); // no showMode->set_active(), as it's not a ToggleButton - showBAR->set_active (options.histogramBar); + showBAR->set_active (options.histogramBar); showRed->set_image (showRed->get_active() ? *redImage : *redImage_g); showGreen->set_image (showGreen->get_active() ? *greenImage : *greenImage_g); @@ -297,12 +297,12 @@ void HistogramPanel::bar_toggled () void HistogramPanel::rgbv_toggled () { // Update Display - histogramArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), showChro->get_active(), options.histogramDrawMode); + histogramArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showChro->get_active(), showRAW->get_active(), options.histogramDrawMode); histogramArea->queue_draw (); - histogramRGBArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showRAW->get_active(), showBAR->get_active(), showChro->get_active()); + histogramRGBArea->updateOptions (showRed->get_active(), showGreen->get_active(), showBlue->get_active(), showValue->get_active(), showChro->get_active(), showRAW->get_active(), showBAR->get_active()); histogramRGBArea->updateBackBuffer (0, 0, 0); - histogramArea->queue_draw (); + histogramRGBArea->queue_draw (); } void HistogramPanel::setHistRGBInvalid () @@ -369,8 +369,11 @@ double HistogramScaling::log(double vsize, double val) // // // HistogramRGBArea -HistogramRGBArea::HistogramRGBArea () ://needChroma unactive by default, luma too - val(0), r(0), g(0), b(0), valid(false), needRed(true), needGreen(true), needBlue(true), needLuma(false), rawMode(false), showMode(options.histogramBar), barDisplayed(options.histogramBar), needChroma(false), parent(nullptr) +HistogramRGBArea::HistogramRGBArea () : + val(0), r(0), g(0), b(0), valid(false), + needRed(options.histogramRed), needGreen(options.histogramGreen), needBlue(options.histogramBlue), + needLuma(options.histogramLuma), needChroma(options.histogramChroma), rawMode(options.histogramRAW), + showMode(options.histogramBar), barDisplayed(options.histogramBar), parent(nullptr) { get_style_context()->add_class("drawingarea"); @@ -583,28 +586,23 @@ void HistogramRGBArea::update (int valh, int rh, int gh, int bh) idle_register.add(func, harih); } -void HistogramRGBArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, bool bar, bool c) +void HistogramRGBArea::updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, bool bar) { - needRed = r; - needGreen = g; - needBlue = b; - needLuma = l; - rawMode = raw; - showMode = bar; - needChroma = c; - - // Histogram RGB BAR button logic goes here + options.histogramRed = needRed = r; + options.histogramGreen = needGreen = g; + options.histogramBlue = needBlue = b; + options.histogramLuma = needLuma = l; + options.histogramChroma = needChroma = c; + options.histogramRAW = rawMode = raw; + options.histogramBar = showMode = bar; + // Show/hide the RGB bar widget if (bar && !barDisplayed) { - // Toggled on, add (show) the widget parent->add(*this); - options.histogramBar = true; barDisplayed = true; } else if (!bar && barDisplayed) { - // Toggled off, remove (hide) the widget removeIfThere(parent, this, false); - options.histogramBar = false; barDisplayed = false; } @@ -661,16 +659,18 @@ void HistogramRGBArea::factorChanged (double newFactor) // // // HistogramArea -HistogramArea::HistogramArea (DrawModeListener *fml) : //needChroma unactive by default, luma too +HistogramArea::HistogramArea (DrawModeListener *fml) : valid(false), drawMode(options.histogramDrawMode), myDrawModeListener(fml), - oldwidth(-1), oldheight(-1), needLuma(false), needRed(true), needGreen(true), needBlue(true), - rawMode(false), needChroma(false), isPressed(false), movingPosition(0.0) + oldwidth(-1), oldheight(-1), + needRed(options.histogramRed), needGreen(options.histogramGreen), needBlue(options.histogramBlue), + needLuma(options.histogramLuma), needChroma(options.histogramChroma), rawMode(options.histogramRAW), + isPressed(false), movingPosition(0.0) { - lhist(256); rhist(256); ghist(256); bhist(256); + lhist(256); chist(256); get_style_context()->add_class("drawingarea"); @@ -724,32 +724,31 @@ void HistogramArea::get_preferred_width_for_height_vfunc (int height, int &minim get_preferred_width_vfunc (minimum_width, natural_width); } -void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool raw, bool c, int mode) +void HistogramArea::updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, int mode) { - - needRed = r; - needGreen = g; - needBlue = b; - needLuma = l; - rawMode = raw; - needChroma = c; - drawMode = mode; + + options.histogramRed = needRed = r; + options.histogramGreen = needGreen = g; + options.histogramBlue = needBlue = b; + options.histogramLuma = needLuma = l; + options.histogramChroma = needChroma = c; + options.histogramRAW = rawMode = raw; + options.histogramDrawMode = drawMode = mode; updateBackBuffer (); } -void HistogramArea::update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw, LUTu &histChroma) +void HistogramArea::update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw) { if (histRed) { - lhist = histLuma; - chist = histChroma; rhist = histRed; ghist = histGreen; bhist = histBlue; + lhist = histLuma; + chist = histChroma; rhistRaw = histRedRaw; ghistRaw = histGreenRaw; bhistRaw = histBlueRaw; - valid = true; } else { valid = false; diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index d3788d057..7c2e11162 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -70,10 +70,10 @@ protected: bool needGreen; bool needBlue; bool needLuma; + bool needChroma; bool rawMode; bool showMode; bool barDisplayed; - bool needChroma; Gtk::Grid* parent; @@ -91,7 +91,7 @@ public: }; void update (int val, int rh, int gh, int bh); - void updateOptions (bool r, bool g, bool b, bool l, bool raw, bool show, bool c); + void updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, bool show); void on_realize(); bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr); @@ -104,7 +104,7 @@ private: void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const; void get_preferred_height_for_width_vfunc (int width, int &minimum_height, int &natural_height) const; void get_preferred_width_for_height_vfunc (int h, int &minimum_width, int &natural_width) const; - // Some ... + }; class DrawModeListener @@ -124,15 +124,16 @@ private: type_signal_factor_changed sigFactorChanged; protected: - LUTu lhist, rhist, ghist, bhist, chist; - LUTu lhistRaw, rhistRaw, ghistRaw, bhistRaw; + LUTu rhist, ghist, bhist, lhist, chist; + LUTu rhistRaw, ghistRaw, bhistRaw, lhistRaw; //lhistRaw is unused? bool valid; int drawMode; DrawModeListener *myDrawModeListener; int oldwidth, oldheight; - bool needLuma, needRed, needGreen, needBlue, rawMode, needChroma; + bool needRed, needGreen, needBlue, needLuma, needChroma; + bool rawMode; bool isPressed; double movingPosition; @@ -143,8 +144,8 @@ public: ~HistogramArea(); void updateBackBuffer (); - void update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw, LUTu &histChroma); - void updateOptions (bool r, bool g, bool b, bool l, bool raw, bool c, int mode); + void update (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw); + void updateOptions (bool r, bool g, bool b, bool l, bool c, bool raw, int mode); void on_realize(); bool on_draw(const ::Cairo::RefPtr< Cairo::Context> &cr); bool on_button_press_event (GdkEventButton* event); @@ -208,9 +209,9 @@ public: HistogramPanel (); ~HistogramPanel (); - void histogramChanged (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw, LUTu &histChroma) + void histogramChanged (LUTu &histRed, LUTu &histGreen, LUTu &histBlue, LUTu &histLuma, LUTu &histChroma, LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw) { - histogramArea->update (histRed, histGreen, histBlue, histLuma, histRedRaw, histGreenRaw, histBlueRaw, histChroma); + histogramArea->update (histRed, histGreen, histBlue, histLuma, histChroma, histRedRaw, histGreenRaw, histBlueRaw); } // pointermotionlistener interface void pointerMoved (bool validPos, const Glib::ustring &profile, const Glib::ustring &profileW, int x, int y, int r, int g, int b, bool isRaw = false); diff --git a/rtgui/options.cc b/rtgui/options.cc index dcba775b6..dcd0d8b43 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -419,6 +419,9 @@ void Options::setDefaults() mainNBVertical = true; multiDisplayMode = 0; histogramPosition = 1; + histogramRed = true; + histogramGreen = true; + histogramBlue = true; histogramBar = true; histogramHeight = 200; histogramDrawMode = 0; @@ -1272,6 +1275,30 @@ void Options::readFromFile(Glib::ustring fname) if (keyFile.has_key("GUI", "HistogramPosition")) { histogramPosition = keyFile.get_integer("GUI", "HistogramPosition"); } + + if (keyFile.has_key("GUI", "HistogramRed")) { + histogramRed = keyFile.get_boolean("GUI", "HistogramRed"); + } + + if (keyFile.has_key("GUI", "HistogramGreen")) { + histogramGreen = keyFile.get_boolean("GUI", "HistogramGreen"); + } + + if (keyFile.has_key("GUI", "HistogramBlue")) { + histogramBlue = keyFile.get_boolean("GUI", "HistogramBlue"); + } + + if (keyFile.has_key("GUI", "HistogramLuma")) { + histogramLuma = keyFile.get_boolean("GUI", "HistogramLuma"); + } + + if (keyFile.has_key("GUI", "HistogramChroma")) { + histogramChroma = keyFile.get_boolean("GUI", "HistogramChroma"); + } + + if (keyFile.has_key("GUI", "HistogramRAW")) { + histogramRAW = keyFile.get_boolean("GUI", "HistogramRAW"); + } if (keyFile.has_key("GUI", "HistogramBar")) { histogramBar = keyFile.get_boolean("GUI", "HistogramBar"); @@ -1994,6 +2021,12 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_double_list ("GUI", "CutOverlayBrush", cutOverlayBrush); keyFile.set_double_list ("GUI", "NavGuideBrush", navGuideBrush); keyFile.set_integer ("GUI", "HistogramPosition", histogramPosition); + keyFile.set_boolean ("GUI", "HistogramRed", histogramRed); + keyFile.set_boolean ("GUI", "HistogramGreen", histogramGreen); + keyFile.set_boolean ("GUI", "HistogramBlue", histogramBlue); + keyFile.set_boolean ("GUI", "HistogramLuma", histogramLuma); + keyFile.set_boolean ("GUI", "HistogramChroma", histogramChroma); + keyFile.set_boolean ("GUI", "HistogramRAW", histogramRAW); keyFile.set_boolean ("GUI", "HistogramBar", histogramBar); keyFile.set_integer ("GUI", "HistogramHeight", histogramHeight); keyFile.set_integer ("GUI", "HistogramDrawMode", histogramDrawMode); diff --git a/rtgui/options.h b/rtgui/options.h index ee95d5cb3..6c473949b 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -256,7 +256,8 @@ public: bool sndEnable; int histogramPosition; // 0=disabled, 1=left pane, 2=right pane - //int histogramWorking; // 0=disabled, 1=left pane, 2=right pane + bool histogramRed, histogramGreen, histogramBlue; + bool histogramLuma, histogramChroma, histogramRAW; bool histogramBar; int histogramHeight; int histogramDrawMode; From 9be449fc1ea04d29439eaedf90f5ab595ca158c5 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 15 Sep 2018 00:14:22 +0200 Subject: [PATCH 109/115] Cleanup for unused raw ca corrtection avoid colour shift stuff --- rtgui/rawcacorrection.cc | 4 ++-- rtgui/rawcacorrection.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 5ad5d30a3..8dd96e3a4 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -28,8 +28,8 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM { auto m = ProcEventMapper::getInstance(); EvPreProcessCAAutoiterations = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_AUTOIT"); - EvPreProcessCAColourshift = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_COLOURSHIFT"); - EvPreProcessCAColourshiftHistory = m->newEvent(M_VOID, "HISTORY_MSG_RAWCACORR_COLOURSHIFT"); +// EvPreProcessCAColourshift = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_COLOURSHIFT"); +// EvPreProcessCAColourshiftHistory = m->newEvent(M_VOID, "HISTORY_MSG_RAWCACORR_COLOURSHIFT"); Gtk::Image* icaredL = Gtk::manage (new RTImage ("circle-red-cyan-small.png")); Gtk::Image* icaredR = Gtk::manage (new RTImage ("circle-cyan-red-small.png")); diff --git a/rtgui/rawcacorrection.h b/rtgui/rawcacorrection.h index 1c1ced53b..566f93e03 100644 --- a/rtgui/rawcacorrection.h +++ b/rtgui/rawcacorrection.h @@ -35,8 +35,8 @@ protected: // CheckBox* caAvoidcolourshift; rtengine::ProcEvent EvPreProcessCAAutoiterations; - rtengine::ProcEvent EvPreProcessCAColourshift; - rtengine::ProcEvent EvPreProcessCAColourshiftHistory; +// rtengine::ProcEvent EvPreProcessCAColourshift; +// rtengine::ProcEvent EvPreProcessCAColourshiftHistory; public: From 80acf0f5e28d59e8ff56c142f3fa9103e548a4e5 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Sat, 15 Sep 2018 00:21:31 +0200 Subject: [PATCH 110/115] generateTranslationDiffs --- rtdata/languages/Catala | 11 ++++++++++- rtdata/languages/Chinese (Simplified) | 14 +++++++++++--- rtdata/languages/Chinese (Traditional) | 16 ++++++++++++---- rtdata/languages/Czech | 10 ++++++++++ rtdata/languages/Dansk | 16 ++++++++++++---- rtdata/languages/Deutsch | 15 ++++++++++++++- rtdata/languages/English (UK) | 16 ++++++++++++---- rtdata/languages/English (US) | 16 ++++++++++++---- rtdata/languages/Espanol | 11 ++++++++++- rtdata/languages/Euskara | 16 ++++++++++++---- rtdata/languages/Francais | 8 ++++++++ rtdata/languages/Greek | 16 ++++++++++++---- rtdata/languages/Hebrew | 16 ++++++++++++---- rtdata/languages/Italiano | 11 ++++++++++- rtdata/languages/Japanese | 13 +++++++++++++ rtdata/languages/Latvian | 16 ++++++++++++---- rtdata/languages/Magyar | 12 ++++++++++-- rtdata/languages/Nederlands | 11 ++++++++++- rtdata/languages/Norsk BM | 16 ++++++++++++---- rtdata/languages/Polish | 11 ++++++++++- rtdata/languages/Polish (Latin Characters) | 11 ++++++++++- rtdata/languages/Portugues (Brasil) | 10 ++++++++++ rtdata/languages/Russian | 11 ++++++++++- rtdata/languages/Serbian (Cyrilic Characters) | 11 ++++++++++- rtdata/languages/Serbian (Latin Characters) | 11 ++++++++++- rtdata/languages/Slovak | 14 +++++++++++--- rtdata/languages/Suomi | 16 ++++++++++++---- rtdata/languages/Swedish | 11 ++++++++++- rtdata/languages/Turkish | 16 ++++++++++++---- rtdata/languages/default | 8 ++++---- 30 files changed, 323 insertions(+), 67 deletions(-) diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index 9d9fa288a..a8d381a8e 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -1015,6 +1015,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_166;Exposure - Reset !HISTORY_MSG_173;NR - Detail recovery !HISTORY_MSG_174;CIECAM02 @@ -1341,6 +1342,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1535,6 +1538,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1554,6 +1559,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show @@ -1580,6 +1586,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. @@ -1919,6 +1926,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CASTR;Strength !TP_RAWEXPOS_BLACK_0;Green 1 (lead) !TP_RAWEXPOS_BLACK_1;Red @@ -2007,7 +2016,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index afc2f2b3a..78667ee02 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -1034,9 +1034,9 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_MSG_82;Profile changed !HISTORY_MSG_86;RGB Curves - Luminosity mode @@ -1419,6 +1419,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1539,7 +1541,10 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !PREFERENCES_CUSTPROFBUILDHINT;Executable (or script) file called when a new initial processing profile should be generated for an image.\n\nThe path of the communication file (*.ini style, a.k.a. "Keyfile") is added as a command line parameter. It contains various parameters required for the scripts and image Exif to allow a rules-based processing profile generation.\n\nWARNING: You are responsible for using double quotes where necessary if you're using paths containing spaces. !PREFERENCES_DIRECTORIES;Directories !PREFERENCES_EDITORCMDLINE;Custom command line +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering @@ -1566,6 +1571,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SHCSELECTOR_TOOLTIP;Click right mouse button to reset the position of those 3 sliders. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. @@ -1888,6 +1894,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CASTR;Strength !TP_RAWEXPOS_BLACKS;Black Levels !TP_RAWEXPOS_BLACK_0;Green 1 (lead) @@ -1986,7 +1994,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional) index 94385640d..6e7698f9a 100644 --- a/rtdata/languages/Chinese (Traditional) +++ b/rtdata/languages/Chinese (Traditional) @@ -583,9 +583,9 @@ TP_WBALANCE_TEMPERATURE;色溫 !GENERAL_SLIDER;Slider !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_MSG_82;Profile changed !HISTORY_MSG_83;S/H - Sharp mask @@ -1003,6 +1003,8 @@ TP_WBALANCE_TEMPERATURE;色溫 !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1086,7 +1088,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen @@ -1298,6 +1300,8 @@ TP_WBALANCE_TEMPERATURE;色溫 !PREFERENCES_PANFACTORLABEL;Pan rate amplification !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1327,6 +1331,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1366,6 +1371,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP;Subsampling !SAVEDLG_SUBSAMP_1;Best compression @@ -1830,6 +1836,8 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTO;Auto-correction +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1934,7 +1942,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index 225970a1a..671fde250 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -2197,6 +2197,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !ADJUSTER_RESET_TO_DEFAULT;Click - reset to default value.\nCtrl+click - reset to initial value. !GENERAL_RESET;Reset !GENERAL_SAVE_AS;Save as... +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_235;B&W - CM - Auto !HISTORY_MSG_237;B&W - CM !HISTORY_MSG_273;CT - Color Balance SMH @@ -2214,6 +2215,8 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - Demosaic method for motion !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -2267,8 +2270,12 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) +!PREFERENCES_TAB_PERFORMANCE;Performance !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !TP_BWMIX_MIXC;Channel Mixer !TP_BWMIX_NEUTRAL;Reset !TP_ICM_WORKING_TRC;Tone response curve: @@ -2277,6 +2284,8 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_ICM_WORKING_TRC_NONE;None !TP_ICM_WORKING_TRC_SLOPE;Slope !TP_ICM_WORKING_TRC_TOOLTIP;Only for built-in profiles. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAW_2PASS;1-pass+fast !TP_RAW_4PASS;3-pass+fast !TP_RAW_AMAZEVNG4;AMaZE+VNG4 @@ -2286,6 +2295,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion !TP_RAW_RCDVNG4;RCD+VNG4 !TP_RESIZE_ALLOW_UPSCALING;Allow Upscaling +!TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index 6b9cfd32e..9e1d79191 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -578,9 +578,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur !GENERAL_UNCHANGED;(Unchanged) !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_MSG_82;Profile changed !HISTORY_MSG_83;S/H - Sharp mask @@ -998,6 +998,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1081,7 +1083,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen @@ -1295,6 +1297,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_PANFACTORLABEL;Pan rate amplification !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1324,6 +1328,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1363,6 +1368,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP;Subsampling !SAVEDLG_SUBSAMP_1;Best compression @@ -1827,6 +1833,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTO;Auto-correction +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1932,7 +1940,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index 5acac7841..d9488295e 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -310,9 +310,9 @@ HISTOGRAM_TOOLTIP_B;Blau-Histogramm ein-/ausblenden. HISTOGRAM_TOOLTIP_BAR;RGB-Anzeigeleiste ein-/ausblenden. HISTOGRAM_TOOLTIP_CHRO;Chromatizität-Histogramm ein/ausblenden. HISTOGRAM_TOOLTIP_FULL;Skaliertes Histogramm ein/ausschalten. -HISTOGRAM_TOOLTIP_MODE;Schaltet zwischen linearer, logarithmischer-linearer und\nlogarithmischer-logarithmischer Skalierung um. HISTOGRAM_TOOLTIP_G;Grün-Histogramm ein-/ausblenden. HISTOGRAM_TOOLTIP_L;CIELab-Luminanz-Histogramm ein-/ausblenden. +HISTOGRAM_TOOLTIP_MODE;Schaltet zwischen linearer, logarithmischer-linearer und\nlogarithmischer-logarithmischer Skalierung um. HISTOGRAM_TOOLTIP_R;Rot-Histogramm ein-/ausblenden. HISTOGRAM_TOOLTIP_RAW;Zwischen normalen Histogrammen und\nRAW-Histogrammen umschalten. HISTORY_CHANGED;Geändert @@ -2347,3 +2347,16 @@ ZOOMPANEL_ZOOMFITCROPSCREEN;Ausschnitt an Bildschirm anpassen\nTaste: f ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen\nTaste: Alt + f ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: + ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - + +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) +!PREFERENCES_TAB_PERFORMANCE;Performance +!SAVEDLG_FILEFORMAT_FLOAT; floating-point +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index 33df84742..9fdef1914 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -26,6 +26,7 @@ HISTORY_MSG_392;W - Residual - Colour Balance HISTORY_MSG_419;Retinex - Colour space HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colours HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Colour correction +HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid colour shift MAIN_TAB_COLOR;Colour MAIN_TOOLTIP_BACKCOLOR0;Background colour of the preview: Theme-based\nShortcut: 9 MAIN_TOOLTIP_BACKCOLOR1;Background colour of the preview: Black\nShortcut: 9 @@ -99,6 +100,7 @@ TP_LABCURVE_AVOIDCOLORSHIFT;Avoid colour shift TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;Fit colours into gamut of the working colour space and apply Munsell correction. TP_PCVIGNETTE_FEATHER_TOOLTIP;Feathering:\n0 = corners only,\n50 = halfway to centre,\n100 = to centre. TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;Controls defringe strength by colour.\nHigher = more,\nLower = less. +TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid colour shift TP_RAW_FALSECOLOR;False colour suppression steps TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction. TP_RGBCURVES_LUMAMODE_TOOLTIP;Luminosity mode allows to vary the contribution of R, G and B channels to the luminosity of the image, without altering image colour. @@ -349,11 +351,11 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. !HISTOGRAM_TOOLTIP_B;Show/Hide blue histogram. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. !HISTOGRAM_TOOLTIP_G;Show/Hide green histogram. !HISTOGRAM_TOOLTIP_L;Show/Hide CIELab luminance histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_R;Show/Hide red histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_CHANGED;Changed @@ -834,6 +836,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -938,7 +941,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_BUTTON_PREFERENCES;Preferences !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m @@ -1217,6 +1220,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PREFERENCES_PARSEDEXTDELHINT;Delete selected extension from the list. !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1260,6 +1265,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_TAB_GENERAL;General !PREFERENCES_TAB_IMPROC;Image Processing +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1321,6 +1327,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists !SAVEDLG_FILEFORMAT;File format +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_JPEGQUAL;JPEG quality !SAVEDLG_PUTTOQUEUE;Put into processing queue @@ -1790,6 +1797,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTO;Auto-correction +!TP_RAWCACORR_AUTOIT;Iterations !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1901,7 +1909,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index 926931720..944457486 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -240,11 +240,11 @@ !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. !HISTOGRAM_TOOLTIP_B;Show/Hide blue histogram. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. !HISTOGRAM_TOOLTIP_G;Show/Hide green histogram. !HISTOGRAM_TOOLTIP_L;Show/Hide CIELab luminance histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_R;Show/Hide red histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_CHANGED;Changed @@ -748,6 +748,8 @@ !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -852,7 +854,7 @@ !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_BUTTON_PREFERENCES;Preferences !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m @@ -1149,6 +1151,8 @@ !PREFERENCES_PARSEDEXTDELHINT;Delete selected extension from the list. !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1195,6 +1199,7 @@ !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_TAB_GENERAL;General !PREFERENCES_TAB_IMPROC;Image Processing +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1256,6 +1261,7 @@ !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists !SAVEDLG_FILEFORMAT;File format +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_JPEGQUAL;JPEG quality !SAVEDLG_PUTTOQUEUE;Put into processing queue @@ -1777,6 +1783,8 @@ !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTO;Auto-correction +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1890,7 +1898,7 @@ !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol index 913a0ac1f..8560fd93c 100644 --- a/rtdata/languages/Espanol +++ b/rtdata/languages/Espanol @@ -1517,6 +1517,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_166;Exposure - Reset !HISTORY_MSG_173;NR - Detail recovery !HISTORY_MSG_203;NR - Color space @@ -1725,6 +1726,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1873,6 +1876,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1892,6 +1897,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show @@ -1910,6 +1916,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. @@ -2010,6 +2017,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CASTR;Strength !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_2PASS;1-pass+fast @@ -2082,7 +2091,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara index 4b821ae94..e3559ff98 100644 --- a/rtdata/languages/Euskara +++ b/rtdata/languages/Euskara @@ -579,9 +579,9 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !GENERAL_UNCHANGED;(Unchanged) !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_MSG_82;Profile changed !HISTORY_MSG_83;S/H - Sharp mask @@ -999,6 +999,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1082,7 +1084,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen @@ -1296,6 +1298,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PREFERENCES_PANFACTORLABEL;Pan rate amplification !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1325,6 +1329,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1364,6 +1369,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP;Subsampling !SAVEDLG_SUBSAMP_1;Best compression @@ -1828,6 +1834,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTO;Auto-correction +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1933,7 +1941,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 9b076abee..a20f9251d 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -2217,6 +2217,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !ADJUSTER_RESET_TO_DEFAULT;Click - reset to default value.\nCtrl+click - reset to initial value. !EXIFFILTER_IMAGETYPE;Image type !GENERAL_RESET;Reset +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_235;B&W - CM - Auto !HISTORY_MSG_237;B&W - CM !HISTORY_MSG_273;CT - Color Balance SMH @@ -2237,6 +2238,8 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -2250,6 +2253,9 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !PARTIALPASTE_RAW_BORDER;Raw border !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering @@ -2264,6 +2270,8 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical !TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAW_2PASS;1-pass+fast !TP_RAW_4PASS;3-pass+fast !TP_RAW_AMAZEVNG4;AMaZE+VNG4 diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek index 18f97324b..9c7c024f9 100644 --- a/rtdata/languages/Greek +++ b/rtdata/languages/Greek @@ -578,9 +578,9 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !GENERAL_UNCHANGED;(Unchanged) !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_MSG_82;Profile changed !HISTORY_MSG_83;S/H - Sharp mask @@ -998,6 +998,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1081,7 +1083,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen @@ -1295,6 +1297,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PREFERENCES_PANFACTORLABEL;Pan rate amplification !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1324,6 +1328,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1363,6 +1368,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP;Subsampling !SAVEDLG_SUBSAMP_1;Best compression @@ -1827,6 +1833,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTO;Auto-correction +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1932,7 +1940,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew index 5364b3745..85bc43c05 100644 --- a/rtdata/languages/Hebrew +++ b/rtdata/languages/Hebrew @@ -579,9 +579,9 @@ TP_WBALANCE_TEMPERATURE;מידת חום !GENERAL_UNCHANGED;(Unchanged) !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_MSG_82;Profile changed !HISTORY_MSG_83;S/H - Sharp mask @@ -999,6 +999,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1082,7 +1084,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen @@ -1296,6 +1298,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PREFERENCES_PANFACTORLABEL;Pan rate amplification !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1325,6 +1329,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1364,6 +1369,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP;Subsampling !SAVEDLG_SUBSAMP_1;Best compression @@ -1828,6 +1834,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTO;Auto-correction +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1933,7 +1941,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano index 5d22d29c5..9ee5e607a 100644 --- a/rtdata/languages/Italiano +++ b/rtdata/languages/Italiano @@ -1352,6 +1352,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_166;Exposure - Reset !HISTORY_MSG_173;NR - Detail recovery !HISTORY_MSG_203;NR - Color space @@ -1600,6 +1601,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1745,6 +1748,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1764,6 +1769,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show @@ -1782,6 +1788,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. @@ -1940,6 +1947,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CASTR;Strength !TP_RAWEXPOS_BLACK_0;Green 1 (lead) !TP_RAWEXPOS_BLACK_1;Red @@ -2023,7 +2032,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index e4f12585c..44b2a39fb 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -2278,3 +2278,16 @@ ZOOMPANEL_ZOOMFITSCREEN;画像全体を画面に合わせる\nショートカッ ZOOMPANEL_ZOOMIN;ズームイン\nショートカット: + ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) +!PREFERENCES_TAB_PERFORMANCE;Performance +!SAVEDLG_FILEFORMAT_FLOAT; floating-point +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian index 3cfe5ad75..212330c9c 100644 --- a/rtdata/languages/Latvian +++ b/rtdata/languages/Latvian @@ -579,9 +579,9 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !GENERAL_UNCHANGED;(Unchanged) !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_MSG_82;Profile changed !HISTORY_MSG_83;S/H - Sharp mask @@ -999,6 +999,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1082,7 +1084,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen @@ -1296,6 +1298,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PREFERENCES_PANFACTORLABEL;Pan rate amplification !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1325,6 +1329,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1364,6 +1369,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP;Subsampling !SAVEDLG_SUBSAMP_1;Best compression @@ -1828,6 +1834,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTO;Auto-correction +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1933,7 +1941,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index df2aecb99..00dc4d800 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -939,7 +939,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_166;Exposure - Reset !HISTORY_MSG_167;Demosaicing method !HISTORY_MSG_168;L*a*b* - CC curve @@ -1272,6 +1272,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1472,6 +1474,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1491,6 +1495,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show @@ -1518,6 +1523,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP;Subsampling !SAVEDLG_SUBSAMP_1;Best compression @@ -1912,6 +1918,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CASTR;Strength !TP_RAWEXPOS_BLACK_0;Green 1 (lead) !TP_RAWEXPOS_BLACK_1;Red @@ -2000,7 +2008,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands index 40f0a9b09..d002263bc 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -2085,6 +2085,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_173;NR - Detail recovery !HISTORY_MSG_203;NR - Color space !HISTORY_MSG_235;B&W - CM - Auto @@ -2134,6 +2135,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -2213,9 +2216,12 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !PREFERENCES_EDITORCMDLINE;Custom command line !PREFERENCES_GREY18_OLD;Yb=18 CIE L#50 !PREFERENCES_LANG;Language +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PROFILESAVEBOTH;Save processing profile both to the cache and next to the input file !PREFERENCES_PROFILESAVELOCATION;Processing profile saving location !PREFERENCES_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show @@ -2232,6 +2238,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. !TP_BWMIX_MIXC;Channel Mixer @@ -2272,6 +2279,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical !TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAW_2PASS;1-pass+fast !TP_RAW_4PASS;3-pass+fast !TP_RAW_AMAZEVNG4;AMaZE+VNG4 @@ -2290,7 +2299,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_RESIZE_ALLOW_UPSCALING;Allow Upscaling !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM index 84870d5ab..f61fa7a88 100644 --- a/rtdata/languages/Norsk BM +++ b/rtdata/languages/Norsk BM @@ -578,9 +578,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur !GENERAL_UNCHANGED;(Unchanged) !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_MSG_82;Profile changed !HISTORY_MSG_83;S/H - Sharp mask @@ -998,6 +998,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1081,7 +1083,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen @@ -1295,6 +1297,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_PANFACTORLABEL;Pan rate amplification !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1324,6 +1328,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1363,6 +1368,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP;Subsampling !SAVEDLG_SUBSAMP_1;Best compression @@ -1827,6 +1833,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTO;Auto-correction +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1932,7 +1940,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index 93d611257..3558870b8 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -1474,6 +1474,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_166;Exposure - Reset !HISTORY_MSG_173;NR - Detail recovery !HISTORY_MSG_203;NR - Color space @@ -1682,6 +1683,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1821,6 +1824,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1840,6 +1845,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show @@ -1858,6 +1864,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. @@ -1957,6 +1964,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CASTR;Strength !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_2PASS;1-pass+fast @@ -2029,7 +2038,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters) index b7cb8a842..27740a48c 100644 --- a/rtdata/languages/Polish (Latin Characters) +++ b/rtdata/languages/Polish (Latin Characters) @@ -1474,6 +1474,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_166;Exposure - Reset !HISTORY_MSG_173;NR - Detail recovery !HISTORY_MSG_203;NR - Color space @@ -1682,6 +1683,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1821,6 +1824,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1840,6 +1845,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show @@ -1858,6 +1864,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. @@ -1957,6 +1964,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CASTR;Strength !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_2PASS;1-pass+fast @@ -2029,7 +2038,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index d81457ead..ba33f8228 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -2254,5 +2254,15 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Append gamma and slope values to the description +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) +!PREFERENCES_TAB_PERFORMANCE;Performance +!SAVEDLG_FILEFORMAT_FLOAT; floating-point +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift +!TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index 123d9c04b..774e2d580 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -1417,6 +1417,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !GENERAL_RESET;Reset !GENERAL_SAVE_AS;Save as... !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_235;B&W - CM - Auto !HISTORY_MSG_237;B&W - CM !HISTORY_MSG_252;CbDL - Skin tar/prot @@ -1654,6 +1655,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1783,6 +1786,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PRINTER;Printer (Soft-Proofing) !PREFERENCES_PROFILESAVEBOTH;Save processing profile both to the cache and next to the input file !PREFERENCES_PROFILESAVELOCATION;Processing profile saving location @@ -1797,6 +1802,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering @@ -1814,6 +1820,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. @@ -1967,6 +1974,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CASTR;Strength !TP_RAWEXPOS_BLACK_0;Green 1 (lead) !TP_RAWEXPOS_BLACK_1;Red @@ -2029,7 +2038,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters) index adbf07ba1..675e710aa 100644 --- a/rtdata/languages/Serbian (Cyrilic Characters) +++ b/rtdata/languages/Serbian (Cyrilic Characters) @@ -1325,6 +1325,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_173;NR - Detail recovery !HISTORY_MSG_203;NR - Color space !HISTORY_MSG_235;B&W - CM - Auto @@ -1576,6 +1577,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1734,6 +1737,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1753,6 +1758,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show @@ -1770,6 +1776,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. !THRESHOLDSELECTOR_BL;Bottom-left @@ -1941,6 +1948,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CASTR;Strength !TP_RAWEXPOS_BLACK_0;Green 1 (lead) !TP_RAWEXPOS_BLACK_1;Red @@ -2024,7 +2033,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters) index e80ae4001..f41d7e36e 100644 --- a/rtdata/languages/Serbian (Latin Characters) +++ b/rtdata/languages/Serbian (Latin Characters) @@ -1325,6 +1325,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_173;NR - Detail recovery !HISTORY_MSG_203;NR - Color space !HISTORY_MSG_235;B&W - CM - Auto @@ -1576,6 +1577,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1734,6 +1737,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1753,6 +1758,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show @@ -1770,6 +1776,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. !THRESHOLDSELECTOR_BL;Bottom-left @@ -1941,6 +1948,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CASTR;Strength !TP_RAWEXPOS_BLACK_0;Green 1 (lead) !TP_RAWEXPOS_BLACK_1;Red @@ -2024,7 +2033,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak index 559f4b08d..b5ff03253 100644 --- a/rtdata/languages/Slovak +++ b/rtdata/languages/Slovak @@ -651,9 +651,9 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !GENERAL_SLIDER;Slider !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_MSG_88;Impulse NR threshold !HISTORY_MSG_93;CbDL - Value @@ -1061,6 +1061,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1343,6 +1345,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PREFERENCES_PANFACTORLABEL;Pan rate amplification !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1368,6 +1372,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1404,6 +1409,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP;Subsampling !SAVEDLG_SUBSAMP_1;Best compression @@ -1842,6 +1848,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1942,7 +1950,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi index 297512b2d..e0ca416d0 100644 --- a/rtdata/languages/Suomi +++ b/rtdata/languages/Suomi @@ -580,9 +580,9 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !GENERAL_UNCHANGED;(Unchanged) !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_MSG_82;Profile changed !HISTORY_MSG_83;S/H - Sharp mask @@ -1000,6 +1000,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1083,7 +1085,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen @@ -1297,6 +1299,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PREFERENCES_PANFACTORLABEL;Pan rate amplification !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1326,6 +1330,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1365,6 +1370,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP;Subsampling !SAVEDLG_SUBSAMP_1;Best compression @@ -1828,6 +1834,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTO;Auto-correction +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1933,7 +1941,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish index f7de30334..049162e68 100644 --- a/rtdata/languages/Swedish +++ b/rtdata/languages/Swedish @@ -1851,6 +1851,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTORY_MSG_173;NR - Detail recovery !HISTORY_MSG_203;NR - Color space !HISTORY_MSG_235;B&W - CM - Auto @@ -1937,6 +1938,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -2052,6 +2055,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PRINTER;Printer (Soft-Proofing) !PREFERENCES_PROFILESAVEBOTH;Save processing profile both to the cache and next to the input file !PREFERENCES_PROFILESAVELOCATION;Processing profile saving location @@ -2060,6 +2065,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !PREFERENCES_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now !PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show @@ -2077,6 +2083,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. !TP_BWMIX_MIXC;Channel Mixer @@ -2142,6 +2149,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical !TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) !TP_RAW_2PASS;1-pass+fast !TP_RAW_3PASSBEST;3-pass (Markesteijn) @@ -2199,7 +2208,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_RETINEX_CONTEDIT_MAP;Mask equalizer !TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. !TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts! -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). !TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish index e62678791..bae5f69de 100644 --- a/rtdata/languages/Turkish +++ b/rtdata/languages/Turkish @@ -579,9 +579,9 @@ TP_WBALANCE_TEMPERATURE;Isı !GENERAL_UNCHANGED;(Unchanged) !GENERAL_WARNING;Warning !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar.\nRight-click on image preview to freeze/unfreeze. +!HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. !HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_FULL;Toggle full (off) or scaled (on) histogram. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. !HISTORY_MSG_82;Profile changed !HISTORY_MSG_83;S/H - Sharp mask @@ -999,6 +999,8 @@ TP_WBALANCE_TEMPERATURE;Isı !HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction !HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter !HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold @@ -1082,7 +1084,7 @@ TP_WBALANCE_TEMPERATURE;Isı !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b -!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s +!MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen @@ -1296,6 +1298,8 @@ TP_WBALANCE_TEMPERATURE;Isı !PREFERENCES_PANFACTORLABEL;Pan rate amplification !PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. !PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) !PREFERENCES_PREVDEMO;Preview Demosaic Method !PREFERENCES_PREVDEMO_FAST;Fast !PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1325,6 +1329,7 @@ TP_WBALANCE_TEMPERATURE;Isı !PREFERENCES_SND_LNGEDITPROCDONE;Editor processing done !PREFERENCES_SND_THRESHOLDSECS;After seconds !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_TAB_SOUND;Sounds !PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview @@ -1364,6 +1369,7 @@ TP_WBALANCE_TEMPERATURE;Isı !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists +!SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP;Subsampling !SAVEDLG_SUBSAMP_1;Best compression @@ -1827,6 +1833,8 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTO;Auto-correction +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CABLUE;Blue !TP_RAWCACORR_CARED;Red !TP_RAWCACORR_CASTR;Strength @@ -1932,7 +1940,7 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_RETINEX_GAIN;Gain !TP_RETINEX_GAINOFFS;Gain and Offset (brightness) !TP_RETINEX_GAINTRANSMISSION;Gain transmission -!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_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. !TP_RETINEX_GAMMA;Gamma !TP_RETINEX_GAMMA_FREE;Free diff --git a/rtdata/languages/default b/rtdata/languages/default index e786b5355..7cf0a48cb 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -241,9 +241,9 @@ GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done edit HISTOGRAM_TOOLTIP_B;Show/Hide blue histogram. HISTOGRAM_TOOLTIP_BAR;Show/Hide RGB indicator bar. HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. HISTOGRAM_TOOLTIP_G;Show/Hide green histogram. HISTOGRAM_TOOLTIP_L;Show/Hide CIELab luminance histogram. +HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. HISTOGRAM_TOOLTIP_R;Show/Hide red histogram. HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram. HISTORY_CHANGED;Changed @@ -747,9 +747,9 @@ HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - Demosaic method for motion HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold -HISTORY_MSG_RAW_BORDER;Raw border HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift +HISTORY_MSG_RAW_BORDER;Raw border HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1150,6 +1150,8 @@ PREFERENCES_PARSEDEXTADDHINT;Add entered extension to the list. PREFERENCES_PARSEDEXTDELHINT;Delete selected extension from the list. PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +PREFERENCES_PERFORMANCE_THREADS;Threads +PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) PREFERENCES_PREVDEMO;Preview Demosaic Method PREFERENCES_PREVDEMO_FAST;Fast PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: @@ -1171,8 +1173,6 @@ PREFERENCES_PSPATH;Adobe Photoshop installation directory PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset 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_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now -PREFERENCES_PERFORMANCE_THREADS;Threads -PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) PREFERENCES_SELECTFONT;Select main font PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font PREFERENCES_SELECTLANG;Select language From 2e3479ef8fc0f08586835f6117c007da2af266d9 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 15 Sep 2018 12:24:27 +0200 Subject: [PATCH 111/115] raw ca correction: reintroduced avoid colour shift checkbox because avoid colour shift sometimes fails --- rtengine/rawimagesource.cc | 8 ++++---- rtgui/rawcacorrection.cc | 28 ++++++++++++++-------------- rtgui/rawcacorrection.h | 6 +++--- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 0f6d7cc93..1396ae245 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -2009,13 +2009,13 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } if(numFrames == 4) { double fitParams[64]; - float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, true, *rawDataFrames[0], fitParams, false, true, nullptr, false); + float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[0], fitParams, false, true, nullptr, false); for(int i = 1; i < 3; ++i) { - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, true, *rawDataFrames[i], fitParams, true, false, buffer, false); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[i], fitParams, true, false, buffer, false); } - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, true, *rawDataFrames[3], fitParams, true, false, buffer, true); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[3], fitParams, true, false, buffer, true); } else { - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, true, rawData, nullptr, false, false, nullptr, true); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, rawData, nullptr, false, false, nullptr, true); } } diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 8dd96e3a4..647fa28cc 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -28,8 +28,8 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM { auto m = ProcEventMapper::getInstance(); EvPreProcessCAAutoiterations = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_AUTOIT"); -// EvPreProcessCAColourshift = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_COLOURSHIFT"); -// EvPreProcessCAColourshiftHistory = m->newEvent(M_VOID, "HISTORY_MSG_RAWCACORR_COLOURSHIFT"); + EvPreProcessCAColourshift = m->newEvent(DARKFRAME, "HISTORY_MSG_RAWCACORR_COLOURSHIFT"); + EvPreProcessCAColourshiftHistory = m->newEvent(M_VOID, "HISTORY_MSG_RAWCACORR_COLOURSHIFT"); Gtk::Image* icaredL = Gtk::manage (new RTImage ("circle-red-cyan-small.png")); Gtk::Image* icaredR = Gtk::manage (new RTImage ("circle-cyan-red-small.png")); @@ -68,9 +68,9 @@ RAWCACorr::RAWCACorr () : FoldableToolPanel(this, "rawcacorrection", M("TP_CHROM pack_start( *caRed, Gtk::PACK_SHRINK, 4); pack_start( *caBlue, Gtk::PACK_SHRINK, 4); -// caAvoidcolourshift = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AVOIDCOLORSHIFT"), multiImage)); -// caAvoidcolourshift->setCheckBoxListener (this); -// pack_start( *caAvoidcolourshift, Gtk::PACK_SHRINK, 4); + caAvoidcolourshift = Gtk::manage (new CheckBox(M("TP_RAWCACORR_AVOIDCOLORSHIFT"), multiImage)); + caAvoidcolourshift->setCheckBoxListener (this); + pack_start( *caAvoidcolourshift, Gtk::PACK_SHRINK, 4); } @@ -81,7 +81,7 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi if(pedited ) { caAutocorrect->setEdited(pedited->raw.ca_autocorrect); -// caAvoidcolourshift->setEdited(pedited->raw.ca_avoidcolourshift); + caAvoidcolourshift->setEdited(pedited->raw.ca_avoidcolourshift); caAutoiterations->setEditedState( pedited->raw.caautoiterations ? Edited : UnEdited ); caRed->setEditedState( pedited->raw.cared ? Edited : UnEdited ); caBlue->setEditedState( pedited->raw.cablue ? Edited : UnEdited ); @@ -93,7 +93,7 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi caBlue->set_sensitive(!pp->raw.ca_autocorrect); caAutocorrect->setValue(pp->raw.ca_autocorrect); -// caAvoidcolourshift->setValue(pp->raw.ca_avoidcolourshift); + caAvoidcolourshift->setValue(pp->raw.ca_avoidcolourshift); caAutoiterations->setValue (pp->raw.caautoiterations); caRed->setValue (pp->raw.cared); caBlue->setValue (pp->raw.cablue); @@ -104,14 +104,14 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi void RAWCACorr::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pedited) { pp->raw.ca_autocorrect = caAutocorrect->getLastActive(); -// pp->raw.ca_avoidcolourshift = caAvoidcolourshift->getLastActive(); + pp->raw.ca_avoidcolourshift = caAvoidcolourshift->getLastActive(); pp->raw.caautoiterations = caAutoiterations->getValue(); pp->raw.cared = caRed->getValue(); pp->raw.cablue = caBlue->getValue(); if (pedited) { pedited->raw.ca_autocorrect = !caAutocorrect->get_inconsistent(); -// pedited->raw.ca_avoidcolourshift = !caAvoidcolourshift->get_inconsistent(); + pedited->raw.ca_avoidcolourshift = !caAvoidcolourshift->get_inconsistent(); pedited->raw.caautoiterations = caAutoiterations->getEditedState (); pedited->raw.cared = caRed->getEditedState (); pedited->raw.cablue = caBlue->getEditedState (); @@ -148,11 +148,11 @@ void RAWCACorr::checkBoxToggled (CheckBox* c, CheckValue newval) listener->panelChanged (EvPreProcessAutoCA, caAutocorrect->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); } } -// else if (c == caAvoidcolourshift) { -// if (listener) { -// listener->panelChanged ((caAutocorrect->getLastActive() || caRed->getValue() != 0 || caBlue->getValue() != 0) ? EvPreProcessCAColourshift : EvPreProcessCAColourshiftHistory, caAvoidcolourshift->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); -// } -// } + else if (c == caAvoidcolourshift) { + if (listener) { + listener->panelChanged ((caAutocorrect->getLastActive() || caRed->getValue() != 0 || caBlue->getValue() != 0) ? EvPreProcessCAColourshift : EvPreProcessCAColourshiftHistory, caAvoidcolourshift->getLastActive() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); + } + } } void RAWCACorr::setBatchMode(bool batchMode) diff --git a/rtgui/rawcacorrection.h b/rtgui/rawcacorrection.h index 566f93e03..dea9ef738 100644 --- a/rtgui/rawcacorrection.h +++ b/rtgui/rawcacorrection.h @@ -32,11 +32,11 @@ protected: Adjuster* caAutoiterations; Adjuster* caRed; Adjuster* caBlue; -// CheckBox* caAvoidcolourshift; + CheckBox* caAvoidcolourshift; rtengine::ProcEvent EvPreProcessCAAutoiterations; -// rtengine::ProcEvent EvPreProcessCAColourshift; -// rtengine::ProcEvent EvPreProcessCAColourshiftHistory; + rtengine::ProcEvent EvPreProcessCAColourshift; + rtengine::ProcEvent EvPreProcessCAColourshiftHistory; public: From 857da39f1d96869ea12b3bcec896aa03760fe07a Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 15 Sep 2018 12:50:56 +0200 Subject: [PATCH 112/115] raw ca correction: do not disable adjusters when in batch edit mode --- rtgui/rawcacorrection.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/rtgui/rawcacorrection.cc b/rtgui/rawcacorrection.cc index 647fa28cc..37f01cfcf 100644 --- a/rtgui/rawcacorrection.cc +++ b/rtgui/rawcacorrection.cc @@ -87,11 +87,12 @@ void RAWCACorr::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi caBlue->setEditedState( pedited->raw.cablue ? Edited : UnEdited ); } - // disable Red and Blue sliders when caAutocorrect is enabled - caAutoiterations->set_sensitive(pp->raw.ca_autocorrect); - caRed->set_sensitive(!pp->raw.ca_autocorrect); - caBlue->set_sensitive(!pp->raw.ca_autocorrect); - + if (!batchMode) { + // disable Red and Blue sliders when caAutocorrect is enabled + caAutoiterations->set_sensitive(pp->raw.ca_autocorrect); + caRed->set_sensitive(!pp->raw.ca_autocorrect); + caBlue->set_sensitive(!pp->raw.ca_autocorrect); + } caAutocorrect->setValue(pp->raw.ca_autocorrect); caAvoidcolourshift->setValue(pp->raw.ca_avoidcolourshift); caAutoiterations->setValue (pp->raw.caautoiterations); From c3fbaafc9a9fcbe53a8ffad5ab0f48f9da28b6e6 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 15 Sep 2018 14:21:49 +0200 Subject: [PATCH 113/115] Fix segfault when hovering over preview while demosaic none is selected --- rtengine/rawimagesource.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 1396ae245..da89810c4 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -5462,6 +5462,8 @@ void RawImageSource::getRawValues(int x, int y, int rotate, int &R, int &G, int ynew = H - 1 - ynew; } + xnew = LIM(xnew, 0, W - 1); + ynew = LIM(ynew, 0, H - 1); int c = ri->getSensorType() == ST_FUJI_XTRANS ? ri->XTRANSFC(ynew,xnew) : ri->FC(ynew,xnew); int val = round(rawData[ynew][xnew] / scale_mul[c]); if(c == 0) { From 04b2d42d46b516bb0ff394090f3d70fc3b35e61a Mon Sep 17 00:00:00 2001 From: heckflosse Date: Sat, 15 Sep 2018 14:48:51 +0200 Subject: [PATCH 114/115] Segfault when closing rt immediately after using batch edit, fixes #4806 --- rtgui/filebrowserentry.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rtgui/filebrowserentry.cc b/rtgui/filebrowserentry.cc index 6046d372d..71e6aef24 100644 --- a/rtgui/filebrowserentry.cc +++ b/rtgui/filebrowserentry.cc @@ -211,6 +211,9 @@ void FileBrowserEntry::procParamsChanged (Thumbnail* thm, int whoChangedIt) void FileBrowserEntry::updateImage (rtengine::IImage8* img, double scale, rtengine::procparams::CropParams cropParams) { + if (!feih) { + return; + } redrawRequests++; feih->pending++; From e99bcff8bb1c5bb3f3ed931c7469c6bbf8aa85de Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Sat, 15 Sep 2018 18:11:05 +0200 Subject: [PATCH 115/115] Japanese translation updated by firefly, closes #4807 --- rtdata/languages/Japanese | 44 ++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index 44b2a39fb..038548deb 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -275,6 +275,7 @@ HISTOGRAM_TOOLTIP_CHRO;色度・ヒストグラム 表示/非表示 HISTOGRAM_TOOLTIP_FULL;完全/縮尺調整の表示切り替え HISTOGRAM_TOOLTIP_G;グリーン・ヒストグラム 表示/非表示 HISTOGRAM_TOOLTIP_L;CIEL*a*b* 輝度・ヒストグラム 表示/非表示 +HISTOGRAM_TOOLTIP_MODE;ヒストグラムの尺度を線形、対数-線形、対数-対数でトグルします HISTOGRAM_TOOLTIP_R;レッド・ヒストグラム 表示/非表示 HISTOGRAM_TOOLTIP_RAW;rawヒストグラム 表示/非表示 HISTORY_CHANGED;変更されました @@ -778,11 +779,13 @@ HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - 振れに対するデモザイクの方式 HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;ラインノイズフィルタの方向 HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAFラインフィルタ HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - コントラストのしきい値 +HISTORY_MSG_RAWCACORR_AUTOIT;Rawの色順応補正 - 繰り返し +HISTORY_MSG_RAWCACORR_COLOURSHIFT;Rawの色順応補正 - 色ずれを回避 HISTORY_MSG_RAW_BORDER;Rawの境界 HISTORY_MSG_RESIZE_ALLOWUPSCALING;リサイズ - アップスケーリングを可能にする HISTORY_MSG_SHARPENING_CONTRAST;シャープ化 - コントラストのしきい値 -HISTORY_MSG_SOFTLIGHT_ENABLED;ソフトな明るさ -HISTORY_MSG_SOFTLIGHT_STRENGTH;ソフトな明るさ - 強さ +HISTORY_MSG_SOFTLIGHT_ENABLED;ソフトライト +HISTORY_MSG_SOFTLIGHT_STRENGTH;ソフトライト - 強さ HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - アンカー HISTORY_NEWSNAPSHOT;追加 HISTORY_NEWSNAPSHOT_TOOLTIP;ショートカット: Alt-s @@ -963,7 +966,7 @@ NAVIGATOR_R;R: NAVIGATOR_S;S: NAVIGATOR_V;V: NAVIGATOR_XY_FULL;幅 = %1, 高さ = %2 -NAVIGATOR_XY_NA;x = n/a, y = n/a +NAVIGATOR_XY_NA;x: --, y: -- OPTIONS_BUNDLED_MISSING;付属のプロファイル "%1"が見つかりません\n\nインストールされたプロファイルが損傷しているかもしれません\n\nその場合はデフォルトの値が使われます OPTIONS_DEFIMG_MISSING;rawではない画像のデフォルプロファイルが見つからないか、設定されていません\n\nプロファイル・ディレクトリを確認してください、存在しないか破損しているかもしれません\n\nデフォルト設定値が使用されます OPTIONS_DEFRAW_MISSING;raw画像のデフォル・プロファイルが見つからないか、設定されていません\n\nプロファイル・ディレクトリを確認してください、存在しないか破損しているかもしれません\n\nデフォルト設定値が使用されます @@ -1179,6 +1182,8 @@ PREFERENCES_PARSEDEXTADDHINT;拡張子を記入し このボタンでリスト PREFERENCES_PARSEDEXTDELHINT;選択した拡張子をリストから削除します PREFERENCES_PARSEDEXTDOWNHINT;選択した拡張子をリストの下に移動 PREFERENCES_PARSEDEXTUPHINT;選択した拡張子をリストの上に移動 +PREFERENCES_PERFORMANCE_THREADS;スレッド +PREFERENCES_PERFORMANCE_THREADS_LABEL;ノイズ低減とウェーブレットレベルに関するスレッドの最大数(0 = 自動) PREFERENCES_PREVDEMO;プレビューのデモザイク方式 PREFERENCES_PREVDEMO_FAST;Fast PREFERENCES_PREVDEMO_LABEL;プレビューのズームレベルが100%以下の場合に使うデモザイクアルゴリズム: @@ -1225,6 +1230,7 @@ PREFERENCES_TAB_COLORMGR;カラーマネジメント PREFERENCES_TAB_DYNAMICPROFILE;ダイナミックプロファイルの規定 PREFERENCES_TAB_GENERAL;一般 PREFERENCES_TAB_IMPROC;画像処理 +PREFERENCES_TAB_PERFORMANCE;パフォーマンス PREFERENCES_TAB_SOUND;サウンド PREFERENCES_THEME;テーマ PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;埋め込まれているJPEGのプレビュー @@ -1286,6 +1292,7 @@ SAMPLEFORMAT_32;24ビット浮動小数点 SAMPLEFORMAT_64;32ビット浮動小数点 SAVEDLG_AUTOSUFFIX;ファイルが存在する場合、自動的に末尾に文字を加える SAVEDLG_FILEFORMAT;ファイル形式 +SAVEDLG_FILEFORMAT_FLOAT;浮動小数点 SAVEDLG_FORCEFORMATOPTS;強制保存オプション SAVEDLG_JPEGQUAL;JPEG 品質 SAVEDLG_PUTTOQUEUE;キュー処理に追加 @@ -1294,9 +1301,9 @@ SAVEDLG_PUTTOQUEUETAIL;キュー処理の最後に追加 SAVEDLG_SAVEIMMEDIATELY;すぐに保存 SAVEDLG_SAVESPP;設定値も保存する SAVEDLG_SUBSAMP;サブ・サンプリング -SAVEDLG_SUBSAMP_1;高圧縮 +SAVEDLG_SUBSAMP_1;最適な圧縮 SAVEDLG_SUBSAMP_2;バランス -SAVEDLG_SUBSAMP_3;高画質 +SAVEDLG_SUBSAMP_3;最適な画質 SAVEDLG_SUBSAMP_TOOLTIP;最適な圧縮率:\nJ:a:b 4:2:0\nh/v 2/2\n色度は水平方向・垂直方向で半分になります\n\nバランスを重視した圧縮率:\nJ:a:b 4:2:2\nh/v 2/1\n色度は水平方向で半分になります\n\n質を重視した圧縮率:\nJ:a:b 4:4:4\nh/v 1/1\n色度のサブサンプリングはありません. SAVEDLG_TIFFUNCOMPRESSED;非圧縮 TIFF SAVEDLG_WARNFILENAME;ファイルに名前が付けられます @@ -1674,7 +1681,7 @@ TP_HLREC_ENA_TOOLTIP;自動露光でも動作可 TP_HLREC_LABEL;ハイライト復元 TP_HLREC_LUMINANCE;輝度復元 TP_HLREC_METHOD;方式: -TP_HSVEQUALIZER_CHANNEL;HSV チャンネル +TP_HSVEQUALIZER_CHANNEL;チャンネル TP_HSVEQUALIZER_HUE;H TP_HSVEQUALIZER_LABEL;HSV イコライザ TP_HSVEQUALIZER_SAT;S @@ -1807,6 +1814,8 @@ TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Sonyのミラーレスカメラの一部 TP_PRSHARPENING_LABEL;リサイズ後のシャープ化 TP_PRSHARPENING_TOOLTIP;リサイズ後の画像をシャープ化します。但し、リサイズの方式がランチョスの場合に限ります。プレビュー画面でこの機能の効果を見ることは出来ません。使用法に関してはRawPediaを参照して下さい。 TP_RAWCACORR_AUTO;自動補正 +TP_RAWCACORR_AUTOIT;繰り返し +TP_RAWCACORR_AVOIDCOLORSHIFT;色ずれを回避 TP_RAWCACORR_CABLUE;ブルー TP_RAWCACORR_CARED;レッド TP_RAWCACORR_CASTR;強さ @@ -1822,10 +1831,10 @@ TP_RAWEXPOS_LINEAR;ホワイトポイント補正 TP_RAWEXPOS_PRESER;ハイライトを保持 TP_RAWEXPOS_RGB;レッド、グリーン、ブルー TP_RAWEXPOS_TWOGREEN;2つのグリーンを連動 -TP_RAW_1PASSMEDIUM;1-パス (ミディアム) -TP_RAW_2PASS;1-pass+fast -TP_RAW_3PASSBEST;3-Pass (最良) -TP_RAW_4PASS;4-パス +TP_RAW_1PASSMEDIUM;1-パス (Markesteijn) +TP_RAW_2PASS;1-パス+fast +TP_RAW_3PASSBEST;3-Pass (Markesteijn) +TP_RAW_4PASS;3-パス+fast TP_RAW_AHD;AHD TP_RAW_AMAZE;AMaZE TP_RAW_AMAZEVNG4;AMaZE+VNG4 @@ -2029,7 +2038,7 @@ TP_SHARPENMICRO_CONTRAST;コントラストのしきい値 TP_SHARPENMICRO_LABEL;マイクロコントラスト TP_SHARPENMICRO_MATRIX;3×3マトリクスの代わりに 5×5 TP_SHARPENMICRO_UNIFORMITY;均等 -TP_SOFTLIGHT_LABEL;ソフトな明るさ +TP_SOFTLIGHT_LABEL;ソフトライト TP_SOFTLIGHT_STRENGTH;強さ TP_TM_FATTAL_AMOUNT;量 TP_TM_FATTAL_ANCHOR;アンカー @@ -2278,16 +2287,3 @@ ZOOMPANEL_ZOOMFITSCREEN;画像全体を画面に合わせる\nショートカッ ZOOMPANEL_ZOOMIN;ズームイン\nショートカット: + ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - -!!!!!!!!!!!!!!!!!!!!!!!!! -! Untranslated keys follow; remove the ! prefix after an entry is translated. -!!!!!!!!!!!!!!!!!!!!!!!!! - -!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. -!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations -!HISTORY_MSG_RAWCACORR_COLOURSHIFT;Raw CA Correction - Avoid color shift -!PREFERENCES_PERFORMANCE_THREADS;Threads -!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) -!PREFERENCES_TAB_PERFORMANCE;Performance -!SAVEDLG_FILEFORMAT_FLOAT; floating-point -!TP_RAWCACORR_AUTOIT;Iterations -!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift