diff --git a/rtdata/images/Dark/actions/HDR-thumbnail.png b/rtdata/images/Dark/actions/HDR-thumbnail.png new file mode 100644 index 000000000..182e603e8 Binary files /dev/null and b/rtdata/images/Dark/actions/HDR-thumbnail.png differ diff --git a/rtdata/images/Dark/actions/PixelShift-thumbnail.png b/rtdata/images/Dark/actions/PixelShift-thumbnail.png new file mode 100644 index 000000000..4bbea1aee Binary files /dev/null and b/rtdata/images/Dark/actions/PixelShift-thumbnail.png differ diff --git a/rtdata/images/Light/actions/HDR-thumbnail.png b/rtdata/images/Light/actions/HDR-thumbnail.png new file mode 100644 index 000000000..182e603e8 Binary files /dev/null and b/rtdata/images/Light/actions/HDR-thumbnail.png differ diff --git a/rtdata/images/Light/actions/PixelShift-thumbnail.png b/rtdata/images/Light/actions/PixelShift-thumbnail.png new file mode 100644 index 000000000..4bbea1aee Binary files /dev/null and b/rtdata/images/Light/actions/PixelShift-thumbnail.png differ diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h index e7aa9d1a5..2a67c367a 100644 --- a/rtengine/imagesource.h +++ b/rtengine/imagesource.h @@ -78,7 +78,7 @@ public: virtual void HLRecovery_inpaint (float** red, float** green, float** blue) {}; virtual void MSR (LabImage* lab, LUTf & mapcurve, bool &mapcontlutili, int width, int height, int skip, RetinexParams deh, const RetinextransmissionCurve & dehatransmissionCurve, const RetinexgaintransmissionCurve & dehagaintransmissionCurve, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax) {}; - virtual bool IsRGBSourceModified () const = 0; // tracks whether cached rgb output of demosaic has been modified + virtual bool isRGBSourceModified () const = 0; // tracks whether cached rgb output of demosaic has been modified virtual void setCurrentFrame (unsigned int frameNum) = 0; virtual int getFrameCount () = 0; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 2758ca889..9cc11b59f 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -220,8 +220,8 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) if ( (todo & M_RAW) || (!highDetailRawComputed && highDetailNeeded) - || ( params.toneCurve.hrenabled && params.toneCurve.method != "Color" && imgsrc->IsRGBSourceModified()) - || (!params.toneCurve.hrenabled && params.toneCurve.method == "Color" && imgsrc->IsRGBSourceModified())) { + || ( params.toneCurve.hrenabled && params.toneCurve.method != "Color" && imgsrc->isRGBSourceModified()) + || (!params.toneCurve.hrenabled && params.toneCurve.method == "Color" && imgsrc->isRGBSourceModified())) { if (settings->verbose) { if (imgsrc->getSensorType() == ST_BAYER) { diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index 77f277cbf..3e76efd54 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -128,7 +128,7 @@ public: void refinement_lassus (int PassCount); void refinement(int PassCount); - bool IsRGBSourceModified() const + bool isRGBSourceModified() const { return rgbSourceModified; // tracks whether cached rgb output of demosaic has been modified } diff --git a/rtengine/stdimagesource.h b/rtengine/stdimagesource.h index 6759e4739..cdb0b14fc 100644 --- a/rtengine/stdimagesource.h +++ b/rtengine/stdimagesource.h @@ -93,7 +93,7 @@ public: void convertColorSpace(Imagefloat* image, const ColorManagementParams &cmp, const ColorTemp &wb);// RAWParams raw will not be used for non-raw files (see imagesource.h) static void colorSpaceConversion (Imagefloat* im, const ColorManagementParams &cmp, cmsHPROFILE embedded, IIOSampleFormat sampleFormat); - bool IsRGBSourceModified() const + bool isRGBSourceModified() const { return rgbSourceModified; } diff --git a/rtgui/cacheimagedata.cc b/rtgui/cacheimagedata.cc index 5726b041d..d53ca6bb1 100644 --- a/rtgui/cacheimagedata.cc +++ b/rtgui/cacheimagedata.cc @@ -139,7 +139,7 @@ int CacheImageData::load (const Glib::ustring& fname) } if (keyFile.has_key ("ExifInfo", "IsHDR")) { - isHDR = keyFile.get_integer ("ExifInfo", "IsHDR"); + isHDR = keyFile.get_boolean ("ExifInfo", "IsHDR"); } if (keyFile.has_key ("ExifInfo", "IsPixelShift")) { diff --git a/rtgui/filebrowserentry.cc b/rtgui/filebrowserentry.cc index d76870788..c3adae3aa 100644 --- a/rtgui/filebrowserentry.cc +++ b/rtgui/filebrowserentry.cc @@ -36,6 +36,8 @@ bool FileBrowserEntry::iconsLoaded(false); Glib::RefPtr FileBrowserEntry::editedIcon; Glib::RefPtr FileBrowserEntry::recentlySavedIcon; Glib::RefPtr FileBrowserEntry::enqueuedIcon; +Glib::RefPtr FileBrowserEntry::hdr; +Glib::RefPtr FileBrowserEntry::ps; FileBrowserEntry::FileBrowserEntry (Thumbnail* thm, const Glib::ustring& fname) : ThumbBrowserEntryBase (fname), wasInside(false), iatlistener(nullptr), press_x(0), press_y(0), action_x(0), action_y(0), rot_deg(0.0), landscape(true), cropgl(nullptr), state(SNormal), crop_custom_ratio(0.f) @@ -57,6 +59,8 @@ FileBrowserEntry::FileBrowserEntry (Thumbnail* thm, const Glib::ustring& fname) editedIcon = RTImage::createFromFile ("edited.png"); recentlySavedIcon = RTImage::createFromFile ("recent-save.png"); enqueuedIcon = RTImage::createFromFile ("processing.png"); + hdr = RTImage::createFromFile ("HDR-thumbnail.png"); + ps = RTImage::createFromFile ("PixelShift-thumbnail.png"); iconsLoaded = true; } @@ -137,6 +141,26 @@ std::vector > FileBrowserEntry::getIconsOnImageArea () return ret; } +std::vector > FileBrowserEntry::getSpecificityIconsOnImageArea () +{ + + std::vector > ret; + + if (!thumbnail) { + return ret; + } + + if (thumbnail->isHDR() && hdr) { + ret.push_back (hdr); + } + + if (thumbnail->isPixelShift() && ps) { + ret.push_back (ps); + } + + return ret; +} + void FileBrowserEntry::customBackBufferUpdate (Cairo::RefPtr c) { if(scale != 1.0 && cropParams.enabled) { // somewhere in pipeline customBackBufferUpdate is called when scale == 1.0, which is nonsense for a thumb diff --git a/rtgui/filebrowserentry.h b/rtgui/filebrowserentry.h index 4c3d519ab..423128ddb 100644 --- a/rtgui/filebrowserentry.h +++ b/rtgui/filebrowserentry.h @@ -70,6 +70,8 @@ public: static Glib::RefPtr editedIcon; static Glib::RefPtr recentlySavedIcon; static Glib::RefPtr enqueuedIcon; + static Glib::RefPtr hdr; + static Glib::RefPtr ps; FileBrowserEntry (Thumbnail* thm, const Glib::ustring& fname); ~FileBrowserEntry (); @@ -87,6 +89,7 @@ public: void calcThumbnailSize (); virtual std::vector > getIconsOnImageArea (); + virtual std::vector > getSpecificityIconsOnImageArea (); virtual void getIconSize (int& w, int& h); // thumbnaillistener interface diff --git a/rtgui/thumbbrowserentrybase.cc b/rtgui/thumbbrowserentrybase.cc index ff7e58d49..0cb53d0c2 100644 --- a/rtgui/thumbbrowserentrybase.cc +++ b/rtgui/thumbbrowserentrybase.cc @@ -160,6 +160,7 @@ void ThumbBrowserEntryBase::updateBackBuffer () // draw icons onto the thumbnail area bbIcons = getIconsOnImageArea (); + bbSpecificityIcons = getSpecificityIconsOnImageArea (); int infow, infoh; getTextSizes (infow, infoh); @@ -224,6 +225,19 @@ void ThumbBrowserEntryBase::updateBackBuffer () } } + if (!bbSpecificityIcons.empty()) { + int igap = 2; + int istartx2 = prex + prew - 1 + igap; + int istarty2 = prey + preh - igap - 1; + + for (size_t i = 0; i < bbSpecificityIcons.size(); ++i) { + istartx2 -= bbSpecificityIcons[i]->get_width() - igap; + Gdk::Cairo::set_source_pixbuf(cc, bbSpecificityIcons[i], istartx2, istarty2 - bbSpecificityIcons[i]->get_height()); + cc->rectangle(istartx2, istarty2 - bbSpecificityIcons[i]->get_height(), bbSpecificityIcons[i]->get_width(), bbSpecificityIcons[i]->get_height()); + cc->fill(); + } + } + if ( ( (parent->getLocation() != ThumbBrowserBase::THLOC_EDITOR && options.showFileNames) || (parent->getLocation() == ThumbBrowserBase::THLOC_EDITOR && options.filmStripShowFileNames)) && withFilename > WFNAME_NONE) { @@ -512,7 +526,9 @@ void ThumbBrowserEntryBase::draw (Cairo::RefPtr cc) } if (!backBuffer || selected != bbSelected || framed != bbFramed || preview != bbPreview - || exp_width != bbWidth || exp_height != bbHeight || getIconsOnImageArea () != bbIcons || backBuffer->isDirty()) { + || exp_width != bbWidth || exp_height != bbHeight || getIconsOnImageArea () != bbIcons + || getSpecificityIconsOnImageArea() != bbSpecificityIcons || backBuffer->isDirty()) + { updateBackBuffer (); } @@ -592,6 +608,11 @@ std::vector > ThumbBrowserEntryBase::getIconsOnImageAr return std::vector >(); } +std::vector > ThumbBrowserEntryBase::getSpecificityIconsOnImageArea() +{ + return std::vector >(); +} + void ThumbBrowserEntryBase::getIconSize(int& w, int& h) { w = 0; diff --git a/rtgui/thumbbrowserentrybase.h b/rtgui/thumbbrowserentrybase.h index f4779faa1..0ebf597e2 100644 --- a/rtgui/thumbbrowserentrybase.h +++ b/rtgui/thumbbrowserentrybase.h @@ -80,6 +80,7 @@ protected: bool bbSelected, bbFramed; guint8* bbPreview; std::vector > bbIcons; + std::vector > bbSpecificityIcons; CursorShape cursor_type; void drawFrame (Cairo::RefPtr cr, const Gdk::RGBA& bg, const Gdk::RGBA& fg); @@ -185,6 +186,7 @@ public: virtual void drawProgressBar (Glib::RefPtr win, const Gdk::RGBA& foregr, const Gdk::RGBA& backgr, int x, int w, int y, int h) {} virtual std::vector > getIconsOnImageArea (); + virtual std::vector > getSpecificityIconsOnImageArea (); virtual void getIconSize (int& w, int& h); virtual bool motionNotify (int x, int y); diff --git a/rtgui/thumbnail.cc b/rtgui/thumbnail.cc index 283f80bed..4bc5bcdb9 100644 --- a/rtgui/thumbnail.cc +++ b/rtgui/thumbnail.cc @@ -499,6 +499,15 @@ bool Thumbnail::isEnqueued () return enqueueNumber > 0; } +bool Thumbnail::isPixelShift () +{ + return cfs.isPixelShift; +} +bool Thumbnail::isHDR () +{ + return cfs.isHDR; +} + void Thumbnail::increaseRef () { MyMutex::MyLock lock(mutex); diff --git a/rtgui/thumbnail.h b/rtgui/thumbnail.h index 70bd60790..3ef094d6b 100644 --- a/rtgui/thumbnail.h +++ b/rtgui/thumbnail.h @@ -107,6 +107,8 @@ public: void imageEnqueued (); void imageRemovedFromQueue (); bool isEnqueued (); + bool isPixelShift (); + bool isHDR (); // unsigned char* getThumbnailImage (int &w, int &h, int fixwh=1); // fixwh = 0: fix w and calculate h, =1: fix h and calculate w rtengine::IImage8* processThumbImage (const rtengine::procparams::ProcParams& pparams, int h, double& scale); diff --git a/tools/source_icons/scalable/HDR-thumbnail.file b/tools/source_icons/scalable/HDR-thumbnail.file new file mode 100644 index 000000000..59f729498 --- /dev/null +++ b/tools/source_icons/scalable/HDR-thumbnail.file @@ -0,0 +1 @@ +HDR-thumbnail.png,w29,actions diff --git a/tools/source_icons/scalable/HDR-thumbnail.svg b/tools/source_icons/scalable/HDR-thumbnail.svg index 2b6d1a4bc..ef070f380 100644 --- a/tools/source_icons/scalable/HDR-thumbnail.svg +++ b/tools/source_icons/scalable/HDR-thumbnail.svg @@ -14,7 +14,7 @@ height="896.78442" id="svg2" sodipodi:version="0.32" - inkscape:version="0.91 r13725" + inkscape:version="0.92.1 r15371" sodipodi:docname="HDR-thumbnail.svg" inkscape:export-filename="/home/philippe/devel/rawtherapee/icons/NewIcons/processing.png" inkscape:export-xdpi="1.8" @@ -281,22 +281,22 @@ - - - - - + + + diff --git a/tools/source_icons/scalable/PixelShift-thumbnail.file b/tools/source_icons/scalable/PixelShift-thumbnail.file new file mode 100644 index 000000000..a62809a4d --- /dev/null +++ b/tools/source_icons/scalable/PixelShift-thumbnail.file @@ -0,0 +1 @@ +PixelShift-thumbnail.png,w18,actions diff --git a/tools/source_icons/scalable/PixeShift-thumbnail.svg b/tools/source_icons/scalable/PixelShift-thumbnail.svg similarity index 76% rename from tools/source_icons/scalable/PixeShift-thumbnail.svg rename to tools/source_icons/scalable/PixelShift-thumbnail.svg index 9e50ba9c1..b606b24f8 100644 --- a/tools/source_icons/scalable/PixeShift-thumbnail.svg +++ b/tools/source_icons/scalable/PixelShift-thumbnail.svg @@ -14,8 +14,8 @@ height="896.78442" id="svg2" sodipodi:version="0.32" - inkscape:version="0.91 r13725" - sodipodi:docname="PixeShift-thumbnail.svg" + inkscape:version="0.92.1 r15371" + sodipodi:docname="PixelShift-thumbnail.svg" inkscape:export-filename="/home/philippe/devel/rawtherapee/icons/NewIcons/processing.png" inkscape:export-xdpi="1.8" inkscape:export-ydpi="1.8" @@ -281,22 +281,22 @@