#include <config.h>
#include "PreviewImage.h"
+
+#include "Buffer.h"
+#include "Dimension.h"
#include "GraphicsImage.h"
#include "GraphicsLoader.h"
#include "PreviewLoader.h"
#include "support/FileName.h"
+#include "support/lyxlib.h"
-#include "support/bind.h"
using namespace std;
using namespace lyx::support;
namespace lyx {
namespace graphics {
-class PreviewImage::Impl : public boost::signals::trackable {
+class PreviewImage::Impl {
public:
///
Impl(PreviewImage & p, PreviewLoader & l,
///
~Impl();
///
- Image const * image();
+ Image const * image() const;
///
void statusChanged();
if (!image)
return dim;
- dim.asc = int(pimpl_->ascent_frac_ * double(image->height()));
+ dim.asc = support::iround(pimpl_->ascent_frac_ * double(image->height()));
dim.des = image->height() - dim.asc;
dim.wid = image->width();
return dim;
}
-PreviewImage::Impl::Impl(PreviewImage & p, PreviewLoader & l,
- string const & s,
- FileName const & bf,
- double af)
- : parent_(p), ploader_(l), iloader_(bf),
+PreviewLoader & PreviewImage::previewLoader() const
+{
+ return pimpl_->ploader_;
+}
+
+
+PreviewImage::Impl::Impl(PreviewImage & p, PreviewLoader & l, string const & s,
+ FileName const & bf, double af)
+ : parent_(p), ploader_(l), iloader_(l.buffer().fileName(), bf),
snippet_(s), ascent_frac_(af)
{
- iloader_.connect(bind(&Impl::statusChanged, this));
+ iloader_.setDisplayPixelRatio(l.displayPixelRatio());
+ // This connection is destroyed at the same time as this.
+ iloader_.connect([this](){ statusChanged(); });
}
PreviewImage::Impl::~Impl()
{
- iloader_.filename().removeFile();
+ // If these images are generated for a clone, then that may be
+ // because we are previewing. We therefore do not want to delete
+ // them when this Buffer is destroyed.
+ if (!ploader_.buffer().isClone())
+ iloader_.filename().removeFile();
}
-Image const * PreviewImage::Impl::image()
+Image const * PreviewImage::Impl::image() const
{
if (iloader_.status() == WaitingToLoad)
iloader_.startLoading();
case ErrorUnknown:
//iloader_.filename().removeFile();
ploader_.remove(snippet_);
- break;
+ // FIXME: We need to return here, because PreviewLoader::remove
+ // removes the preview image from the cache, which deletes this
+ // object, so we should not try to do anything here.
+ return;
case Ready:
iloader_.filename().removeFile();