X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fgraphics%2FGraphicsLoader.cpp;h=36a6c06d2c12748f2f834612d756c313e984b55d;hb=a700d657b3b06541b10ddae8cc5847bd46d06aae;hp=ade29f1137d6396a84a556944cfce052a9070b3d;hpb=b88f6ea3aa1c39849a1d295d106ba7bb491e013b;p=lyx.git diff --git a/src/graphics/GraphicsLoader.cpp b/src/graphics/GraphicsLoader.cpp index ade29f1137..36a6c06d2c 100644 --- a/src/graphics/GraphicsLoader.cpp +++ b/src/graphics/GraphicsLoader.cpp @@ -22,8 +22,9 @@ #include "support/bind.h" -#include #include +#include +#include using namespace std; using namespace lyx::support; @@ -77,7 +78,6 @@ static int const s_numimages_ = 10; static int const s_millisecs_ = 500; -// FIXME THREAD LoaderQueue & LoaderQueue::get() { static LoaderQueue singleton; @@ -159,9 +159,9 @@ void LoaderQueue::touch(Cache::ItemPtr const & item) // ///////////////////////////////////////////////////////////////////// -typedef shared_ptr ImagePtr; +typedef std::shared_ptr ImagePtr; -class Loader::Impl : public boost::signals::trackable { +class Loader::Impl : public boost::signals2::trackable { public: /// Impl(); @@ -187,9 +187,18 @@ public: /// We modify a local copy of the image once it is loaded. ImagePtr image_; /// This signal is emitted when the image loading status changes. - boost::signal signal_; + boost::signals2::signal signal_; /// The connection of the signal StatusChanged - boost::signals::connection sc_; + boost::signals2::connection sc_; + + double displayPixelRatio() const + { + return params_.pixel_ratio; + } + void setDisplayPixelRatio(double scale) + { + params_.pixel_ratio = scale; + } private: /// @@ -326,7 +335,19 @@ ImageStatus Loader::status() const } -boost::signals::connection Loader::connect(slot_type const & slot) const +double Loader::displayPixelRatio() const +{ + return pimpl_->displayPixelRatio(); +} + + +void Loader::setDisplayPixelRatio(double scale) +{ + pimpl_->setDisplayPixelRatio(scale); +} + + +boost::signals2::connection Loader::connect(slot_type const & slot) const { return pimpl_->signal_.connect(slot); } @@ -433,6 +454,16 @@ void Loader::Impl::createPixmap() image_.reset(cached_item_->image()->clone()); + if (params_.pixel_ratio == 1.0) { + string filename = cached_item_->filename().absFileName(); + size_t idx = filename.find_last_of('.'); + if (idx != string::npos && idx > 3) { + if (filename.substr(idx - 3, 3) == "@2x") { + params_.pixel_ratio = 2.0; + } + } + } + bool const success = image_->setPixmap(params_); if (success) {