merge with dev
This commit is contained in:
commit
981e2783bb
@ -805,6 +805,13 @@ Camera constants:
|
|||||||
|
|
||||||
// Canon mid-range DSLRs (Rebels)
|
// Canon mid-range DSLRs (Rebels)
|
||||||
|
|
||||||
|
{ // Quality C
|
||||||
|
"make_model": [ "Canon EOS 400D DIGITAL" ],
|
||||||
|
"ranges": {
|
||||||
|
"white": 4056
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
{ // Quality B, ISO and aperture WL data by ..... at RawTherapee forums, missing samples safely guessed
|
{ // Quality B, ISO and aperture WL data by ..... at RawTherapee forums, missing samples safely guessed
|
||||||
"make_model": [ "Canon EOS 550D", "Canon EOS Rebel T2i", "Canon EOS Kiss X4" ],
|
"make_model": [ "Canon EOS 550D", "Canon EOS Rebel T2i", "Canon EOS Kiss X4" ],
|
||||||
"dcraw_matrix": [ 6941,-1164,-857,-3825,11597,2534,-416,1540,6039 ], // dcraw 550d
|
"dcraw_matrix": [ 6941,-1164,-857,-3825,11597,2534,-416,1540,6039 ], // dcraw 550d
|
||||||
@ -1359,6 +1366,11 @@ Camera constants:
|
|||||||
"raw_crop": [ 4, 4, -4, -4 ] // full raw 6016x4016, Official 6000x4000
|
"raw_crop": [ 4, 4, -4, -4 ] // full raw 6016x4016, Official 6000x4000
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // Quality C
|
||||||
|
"make_model": "LEICA Q2",
|
||||||
|
"raw_crop": [ 0, 0, 8392, 5624 ]
|
||||||
|
},
|
||||||
|
|
||||||
{ // Quality B, Matrix from Adobe's dcp D65 instead of the internal in Leica's DNG
|
{ // Quality B, Matrix from Adobe's dcp D65 instead of the internal in Leica's DNG
|
||||||
"make_model": "LEICA SL (Typ 601)",
|
"make_model": "LEICA SL (Typ 601)",
|
||||||
"dcraw_matrix": [ 11492,-4930,-1188,-5593,14673,873,-609,1474,6343 ], // DNGv9.3 D65
|
"dcraw_matrix": [ 11492,-4930,-1188,-5593,14673,873,-609,1474,6343 ], // DNGv9.3 D65
|
||||||
|
@ -168,10 +168,12 @@ void BatchQueueEntry::getIconSize (int& w, int& h) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Glib::ustring BatchQueueEntry::getToolTip (int x, int y) const
|
std::tuple<Glib::ustring, bool> BatchQueueEntry::getToolTip (int x, int y) const
|
||||||
{
|
{
|
||||||
// get the parent class' tooltip first
|
// get the parent class' tooltip first
|
||||||
Glib::ustring tooltip = ThumbBrowserEntryBase::getToolTip(x, y);
|
Glib::ustring tooltip;
|
||||||
|
bool useMarkup;
|
||||||
|
std::tie(tooltip, useMarkup) = ThumbBrowserEntryBase::getToolTip(x, y);
|
||||||
|
|
||||||
// add the saving param options
|
// add the saving param options
|
||||||
if (!outFileName.empty()) {
|
if (!outFileName.empty()) {
|
||||||
@ -198,7 +200,7 @@ Glib::ustring BatchQueueEntry::getToolTip (int x, int y) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return tooltip;
|
return std::make_tuple(std::move(tooltip), useMarkup);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ public:
|
|||||||
|
|
||||||
std::vector<Glib::RefPtr<Gdk::Pixbuf>> getIconsOnImageArea () override;
|
std::vector<Glib::RefPtr<Gdk::Pixbuf>> getIconsOnImageArea () override;
|
||||||
void getIconSize (int& w, int& h) const override;
|
void getIconSize (int& w, int& h) const override;
|
||||||
Glib::ustring getToolTip (int x, int y) const override;
|
std::tuple<Glib::ustring, bool> getToolTip (int x, int y) const override;
|
||||||
|
|
||||||
// bqentryupdatelistener interface
|
// bqentryupdatelistener interface
|
||||||
void updateImage (guint8* img, int w, int h, int origw, int origh, guint8* newOPreview) override;
|
void updateImage (guint8* img, int w, int h, int origw, int origh, guint8* newOPreview) override;
|
||||||
|
@ -667,6 +667,7 @@ void FileBrowser::close ()
|
|||||||
MYWRITERLOCK(l, entryRW);
|
MYWRITERLOCK(l, entryRW);
|
||||||
|
|
||||||
selected.clear ();
|
selected.clear ();
|
||||||
|
anchor = nullptr;
|
||||||
|
|
||||||
MYWRITERLOCK_RELEASE(l); // notifySelectionListener will need read access!
|
MYWRITERLOCK_RELEASE(l); // notifySelectionListener will need read access!
|
||||||
|
|
||||||
@ -784,12 +785,16 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m)
|
|||||||
|
|
||||||
selected.clear();
|
selected.clear();
|
||||||
|
|
||||||
for (size_t i = 0; i < fd.size(); i++)
|
for (size_t i = 0; i < fd.size(); ++i) {
|
||||||
if (checkFilter(fd[i])) {
|
if (checkFilter(fd[i])) {
|
||||||
fd[i]->selected = true;
|
fd[i]->selected = true;
|
||||||
selected.push_back(fd[i]);
|
selected.push_back(fd[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!anchor && !selected.empty()) {
|
||||||
|
anchor = selected[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
queue_draw ();
|
queue_draw ();
|
||||||
notifySelectionListener();
|
notifySelectionListener();
|
||||||
} else if( m == copyTo) {
|
} else if( m == copyTo) {
|
||||||
@ -1451,6 +1456,9 @@ void FileBrowser::applyFilter (const BrowserFilter& filter)
|
|||||||
selchanged = true;
|
selchanged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (selected.empty() || (anchor && std::find(selected.begin(), selected.end(), anchor) == selected.end())) {
|
||||||
|
anchor = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selchanged) {
|
if (selchanged) {
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
ThumbBrowserBase::ThumbBrowserBase ()
|
ThumbBrowserBase::ThumbBrowserBase ()
|
||||||
: location(THLOC_FILEBROWSER), inspector(nullptr), isInspectorActive(false), eventTime(0), lastClicked(nullptr), previewHeight(options.thumbSize), numOfCols(1), arrangement(TB_Horizontal)
|
: location(THLOC_FILEBROWSER), inspector(nullptr), isInspectorActive(false), eventTime(0), lastClicked(nullptr), anchor(nullptr), previewHeight(options.thumbSize), numOfCols(1), arrangement(TB_Horizontal)
|
||||||
{
|
{
|
||||||
inW = -1;
|
inW = -1;
|
||||||
inH = -1;
|
inH = -1;
|
||||||
@ -163,29 +163,30 @@ inline void removeFromSelection (const ThumbIterator& iterator, ThumbVector& sel
|
|||||||
void ThumbBrowserBase::selectSingle (ThumbBrowserEntryBase* clicked)
|
void ThumbBrowserBase::selectSingle (ThumbBrowserEntryBase* clicked)
|
||||||
{
|
{
|
||||||
clearSelection(selected);
|
clearSelection(selected);
|
||||||
|
anchor = clicked;
|
||||||
|
|
||||||
if (clicked)
|
if (clicked) {
|
||||||
addToSelection(clicked, selected);
|
addToSelection(clicked, selected);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ThumbBrowserBase::selectRange (ThumbBrowserEntryBase* clicked, bool additional)
|
void ThumbBrowserBase::selectRange (ThumbBrowserEntryBase* clicked, bool additional)
|
||||||
{
|
{
|
||||||
|
if (!anchor) {
|
||||||
|
anchor = clicked;
|
||||||
if (selected.empty()) {
|
if (selected.empty()) {
|
||||||
addToSelection(clicked, selected);
|
addToSelection(clicked, selected);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!additional || !lastClicked) {
|
if (!additional || !lastClicked) {
|
||||||
// Extend the current range w.r.t to first selected entry.
|
// Extend the current range w.r.t to first selected entry.
|
||||||
ThumbIterator front = std::find(fd.begin(), fd.end(), selected.front());
|
ThumbIterator back = std::find(fd.begin(), fd.end(), clicked);
|
||||||
ThumbIterator back;
|
ThumbIterator front = anchor == clicked ? back : std::find(fd.begin(), fd.end(), anchor);
|
||||||
ThumbIterator current = std::find(fd.begin(), fd.end(), clicked);
|
|
||||||
|
|
||||||
if (front > current) {
|
if (front > back) {
|
||||||
front = current;
|
std::swap(front, back);
|
||||||
back = std::find(fd.begin(), fd.end(), selected.back());
|
|
||||||
} else {
|
|
||||||
back = current;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
clearSelection(selected);
|
clearSelection(selected);
|
||||||
@ -217,6 +218,7 @@ void ThumbBrowserBase::selectSet (ThumbBrowserEntryBase* clicked)
|
|||||||
} else {
|
} else {
|
||||||
addToSelection(clicked, selected);
|
addToSelection(clicked, selected);
|
||||||
}
|
}
|
||||||
|
anchor = clicked;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void scrollToEntry (double& h, double& v, int iw, int ih, ThumbBrowserEntryBase* entry)
|
static void scrollToEntry (double& h, double& v, int iw, int ih, ThumbBrowserEntryBase* entry)
|
||||||
@ -745,20 +747,24 @@ void ThumbBrowserBase::Internal::on_realize()
|
|||||||
bool ThumbBrowserBase::Internal::on_query_tooltip (int x, int y, bool keyboard_tooltip, const Glib::RefPtr<Gtk::Tooltip>& tooltip)
|
bool ThumbBrowserBase::Internal::on_query_tooltip (int x, int y, bool keyboard_tooltip, const Glib::RefPtr<Gtk::Tooltip>& tooltip)
|
||||||
{
|
{
|
||||||
// Gtk signals automatically acquire the GUI (i.e. this method is enclosed by gdk_thread_enter and gdk_thread_leave)
|
// Gtk signals automatically acquire the GUI (i.e. this method is enclosed by gdk_thread_enter and gdk_thread_leave)
|
||||||
Glib::ustring ttip = "";
|
Glib::ustring ttip;
|
||||||
|
bool useMarkup = false;
|
||||||
{
|
{
|
||||||
MYREADERLOCK(l, parent->entryRW);
|
MYREADERLOCK(l, parent->entryRW);
|
||||||
|
|
||||||
for (size_t i = 0; i < parent->fd.size(); i++)
|
for (size_t i = 0; i < parent->fd.size(); i++)
|
||||||
if (parent->fd[i]->drawable && parent->fd[i]->inside (x, y)) {
|
if (parent->fd[i]->drawable && parent->fd[i]->inside (x, y)) {
|
||||||
ttip = parent->fd[i]->getToolTip (x, y);
|
std::tie(ttip, useMarkup) = parent->fd[i]->getToolTip (x, y);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ttip.empty()) {
|
if (!ttip.empty()) {
|
||||||
|
if (useMarkup) {
|
||||||
|
tooltip->set_markup(ttip);
|
||||||
|
} else {
|
||||||
tooltip->set_text(ttip);
|
tooltip->set_text(ttip);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
@ -171,6 +171,7 @@ protected:
|
|||||||
std::vector<ThumbBrowserEntryBase*> fd;
|
std::vector<ThumbBrowserEntryBase*> fd;
|
||||||
std::vector<ThumbBrowserEntryBase*> selected;
|
std::vector<ThumbBrowserEntryBase*> selected;
|
||||||
ThumbBrowserEntryBase* lastClicked;
|
ThumbBrowserEntryBase* lastClicked;
|
||||||
|
ThumbBrowserEntryBase* anchor;
|
||||||
|
|
||||||
int previewHeight;
|
int previewHeight;
|
||||||
int numOfCols;
|
int numOfCols;
|
||||||
|
@ -724,7 +724,7 @@ bool ThumbBrowserEntryBase::releaseNotify (int button, int type, int bstate, int
|
|||||||
return buttonSet ? buttonSet->releaseNotify (x, y) : false;
|
return buttonSet ? buttonSet->releaseNotify (x, y) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Glib::ustring ThumbBrowserEntryBase::getToolTip (int x, int y) const
|
std::tuple<Glib::ustring, bool> ThumbBrowserEntryBase::getToolTip (int x, int y) const
|
||||||
{
|
{
|
||||||
Glib::ustring tooltip;
|
Glib::ustring tooltip;
|
||||||
|
|
||||||
@ -734,6 +734,7 @@ Glib::ustring ThumbBrowserEntryBase::getToolTip (int x, int y) const
|
|||||||
|
|
||||||
// Always show the filename in the tooltip since the filename in the thumbnail could be truncated.
|
// Always show the filename in the tooltip since the filename in the thumbnail could be truncated.
|
||||||
// If "Show Exif info" is disabled, also show Exif info in the tooltip.
|
// If "Show Exif info" is disabled, also show Exif info in the tooltip.
|
||||||
|
bool useMarkup = !tooltip.empty();
|
||||||
if (inside(x, y) && tooltip.empty()) {
|
if (inside(x, y) && tooltip.empty()) {
|
||||||
tooltip = dispname;
|
tooltip = dispname;
|
||||||
|
|
||||||
@ -748,7 +749,7 @@ Glib::ustring ThumbBrowserEntryBase::getToolTip (int x, int y) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return tooltip;
|
return std::make_tuple(std::move(tooltip), useMarkup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
#include <tuple>
|
||||||
#include <gtkmm.h>
|
#include <gtkmm.h>
|
||||||
|
|
||||||
#include "cursormanager.h"
|
#include "cursormanager.h"
|
||||||
@ -190,7 +190,7 @@ public:
|
|||||||
virtual bool motionNotify (int x, int y);
|
virtual bool motionNotify (int x, int y);
|
||||||
virtual bool pressNotify (int button, int type, int bstate, int x, int y);
|
virtual bool pressNotify (int button, int type, int bstate, int x, int y);
|
||||||
virtual bool releaseNotify (int button, int type, int bstate, int x, int y);
|
virtual bool releaseNotify (int button, int type, int bstate, int x, int y);
|
||||||
virtual Glib::ustring getToolTip (int x, int y) const;
|
virtual std::tuple<Glib::ustring, bool> getToolTip (int x, int y) const;
|
||||||
|
|
||||||
inline ThumbBrowserEntryBase* getOriginal() const
|
inline ThumbBrowserEntryBase* getOriginal() const
|
||||||
{
|
{
|
||||||
|
@ -399,6 +399,7 @@ void Thumbnail::clearProcParams (int whoClearedIt)
|
|||||||
|
|
||||||
// and restore rank and inTrash
|
// and restore rank and inTrash
|
||||||
setRank(rank);
|
setRank(rank);
|
||||||
|
pparamsValid = cfs.rating != rank;
|
||||||
setColorLabel(colorlabel);
|
setColorLabel(colorlabel);
|
||||||
setStage(inTrash);
|
setStage(inTrash);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user