X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FRenderPreview.cpp;h=0b17d2f83c5ff40d9d938ba66642d01df4c4d87a;hb=48b1e8a0aca2f3f3faa8f1f800568e47792ba9a0;hp=59a870c412728d4a2e847cb0b4c2029818de5cb0;hpb=df022f91b4e8c4537f1d499c7ad6afce9fc9bad9;p=lyx.git diff --git a/src/insets/RenderPreview.cpp b/src/insets/RenderPreview.cpp index 59a870c412..0b17d2f83c 100644 --- a/src/insets/RenderPreview.cpp +++ b/src/insets/RenderPreview.cpp @@ -31,8 +31,6 @@ #include "support/lassert.h" #include "support/lstrings.h" -#include "support/bind.h" - using namespace std; using namespace lyx::support; @@ -77,19 +75,11 @@ RenderPreview::RenderPreview(Inset const * inset) RenderPreview::RenderPreview(RenderPreview const & other, Inset const * inset) : RenderBase(other), - boost::signals2::trackable(), snippet_(other.snippet_), parent_(inset) {} -RenderPreview::~RenderPreview() -{ - if (ploader_connection_.connected()) - ploader_connection_.disconnect(); -} - - RenderBase * RenderPreview::clone(Inset const * inset) const { return new RenderPreview(*this, inset); @@ -126,7 +116,7 @@ docstring const statusMessage(BufferView const * bv, string const & snippet) return message; } -} // namespace anon +} // namespace graphics::PreviewImage const * @@ -155,7 +145,7 @@ void RenderPreview::metrics(MetricsInfo & mi, Dimension & dim) const FontInfo font(mi.base.font); font.setFamily(SANS_FAMILY); - font.setSize(FONT_SIZE_FOOTNOTE); + font.setSize(FOOTNOTE_SIZE); docstring const stat = statusMessage(mi.base.bv, snippet_); dim.wid = 15 + theFontMetrics(font).width(stat); } @@ -176,7 +166,7 @@ void RenderPreview::draw(PainterInfo & pi, int x, int y) const pi.pain.image(x, y - dim_.asc, dim_.wid, dim_.height(), *image); } else { - int const offset = Inset::TEXT_TO_INSET_OFFSET; + int const offset = Inset::textOffset(pi.base.bv); pi.pain.rectangle(x + offset, y - dim_.asc, @@ -186,13 +176,15 @@ void RenderPreview::draw(PainterInfo & pi, int x, int y) const FontInfo font(pi.base.font); font.setFamily(SANS_FAMILY); - font.setSize(FONT_SIZE_FOOTNOTE); + font.setSize(FOOTNOTE_SIZE); docstring const stat = statusMessage(pi.base.bv, snippet_); pi.pain.text(x + offset + 6, y - theFontMetrics(font).maxAscent() - 4, stat, font); } + pi.change.paintCue(pi, x, y - dim_.asc, + x + dim_.width(), y - dim_.asc + dim_.height()); } @@ -208,7 +200,7 @@ void RenderPreview::startLoading(Buffer const & buffer, bool forexport) const void RenderPreview::addPreview(docstring const & latex_snippet, - Buffer const & buffer, + Buffer const & buffer, bool ignore_lyxrc) { if (lyxrc.preview == LyXRC::PREVIEW_OFF && !ignore_lyxrc) @@ -221,7 +213,7 @@ void RenderPreview::addPreview(docstring const & latex_snippet, void RenderPreview::addPreview(docstring const & latex_snippet, - graphics::PreviewLoader & ploader, + graphics::PreviewLoader & ploader, bool ignore_lyxrc) { if (lyxrc.preview == LyXRC::PREVIEW_OFF && !ignore_lyxrc) @@ -239,10 +231,12 @@ void RenderPreview::addPreview(docstring const & latex_snippet, // If this is the first time of calling, connect to the // PreviewLoader signal that'll inform us when the preview image // is ready for loading. - if (!ploader_connection_.connected()) { - ploader_connection_ = ploader.connect( - bind(&RenderPreview::imageReady, this, _1)); - } + if (!ploader_connection_.connected()) + // This is a scoped connection. + ploader_connection_ = + ploader.connect([this](graphics::PreviewImage const & pi){ + imageReady(pi); + }); ploader.add(snippet_); } @@ -269,28 +263,59 @@ void RenderPreview::imageReady(graphics::PreviewImage const & pimage) RenderMonitoredPreview::RenderMonitoredPreview(Inset const * inset) - : RenderPreview(inset), monitor_(FileName(), 2000) -{} + : RenderPreview(inset) +{ + setAbsFile(FileName()); +} void RenderMonitoredPreview::setAbsFile(FileName const & file) { - monitor_.reset(file); + bool mon = monitoring(); + if (mon) + stopMonitoring(); + filename_ = file; + if (mon) + startMonitoring(); } void RenderMonitoredPreview::draw(PainterInfo & pi, int x, int y) const { RenderPreview::draw(pi, x, y); - if (!monitoring()) - startMonitoring(); + startMonitoring(); + monitor_->checkModifiedAsync(); } -boost::signals2::connection -RenderMonitoredPreview::fileChanged(slot_type const & slot) +signals2::connection RenderMonitoredPreview::connect(slot const & slot) { - return monitor_.connect(slot); + return changed_.connect(slot); } + +bool RenderMonitoredPreview::monitoring() const +{ + return (bool) monitor_; +} + + +void RenderMonitoredPreview::startMonitoring() const +{ + if (!monitoring()) { + monitor_ = FileSystemWatcher::activeMonitor(filename_); + // Disconnected at the same time as this is destroyed. + monitor_->connect([this](bool /* exists */){ changed_(); }); + } +} + + +void RenderMonitoredPreview::stopMonitoring() const +{ + monitor_ = nullptr; +} + + + + } // namespace lyx