From 8ddfa9d784ff6cb5a3ee00609014d1f180f09f58 Mon Sep 17 00:00:00 2001 From: Angus Leeming Date: Thu, 9 Oct 2003 14:36:16 +0000 Subject: [PATCH] Don't use the cached BufferView to get the Buffer when we have direct access git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7886 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/graphics/ChangeLog | 6 ++++++ src/graphics/PreviewedInset.C | 27 ++++++++++----------------- src/graphics/PreviewedInset.h | 10 ++++++---- src/insets/ChangeLog | 4 ++++ src/insets/insetinclude.C | 16 +++++++++++----- src/mathed/ChangeLog | 4 ++++ src/mathed/formula.C | 7 +++++-- 7 files changed, 46 insertions(+), 28 deletions(-) diff --git a/src/graphics/ChangeLog b/src/graphics/ChangeLog index 09d90f7b12..7234e7f416 100644 --- a/src/graphics/ChangeLog +++ b/src/graphics/ChangeLog @@ -1,3 +1,9 @@ +2003-10-09 Angus Leeming + + * PreviewedInset.[Ch] (removePreview, previewReady): these functions + are now passed a 'Buffer const &', eliminating most of the remaining + need for PreviewedInset to use a BufferView cache. + 2003-10-07 Martin Vermeer * GraphicsCache.h: diff --git a/src/graphics/PreviewedInset.C b/src/graphics/PreviewedInset.C index 094f527c0b..e2ca9a9829 100644 --- a/src/graphics/PreviewedInset.C +++ b/src/graphics/PreviewedInset.C @@ -75,8 +75,8 @@ void PreviewedInset::addPreview(PreviewLoader & ploader) // 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 (!connection_.connected()) { - connection_ = ploader.connect( + if (!ploader_connection_.connected()) { + ploader_connection_ = ploader.connect( boost::bind(&PreviewedInset::imageReady, this, _1)); } @@ -84,43 +84,36 @@ void PreviewedInset::addPreview(PreviewLoader & ploader) } -void PreviewedInset::removePreview() +void PreviewedInset::removePreview(Buffer const & buffer) { - if (!view() || !view()->buffer() || snippet_.empty()) + if (snippet_.empty()) return; Previews & previews = Previews::get(); - PreviewLoader & loader = previews.loader(*view()->buffer()); + PreviewLoader & loader = previews.loader(buffer); loader.remove(snippet_); snippet_.erase(); pimage_ = 0; } -bool PreviewedInset::previewReady() const +bool PreviewedInset::previewReady(Buffer const & buffer) const { - if (!Previews::activated() || !view() || !view()->buffer()) - return false; - - if (!previewWanted(*view()->buffer())) + if (!Previews::activated() || !previewWanted(buffer)) return false; if (!pimage_ || snippet_ != pimage_->snippet()) { - PreviewLoader & ploader = - Previews::get().loader(*view()->buffer()); + PreviewLoader & ploader = Previews::get().loader(buffer); pimage_ = ploader.preview(snippet_); } - if (!pimage_) - return false; - - return pimage_->image(); + return pimage_ ? pimage_->image() : false; } void PreviewedInset::imageReady(PreviewImage const & pimage) const { - // Check snippet against the Inset's current contents + // Check the current snippet is the same as that previewed. if (snippet_ != pimage.snippet()) return; diff --git a/src/graphics/PreviewedInset.h b/src/graphics/PreviewedInset.h index 991853b67f..03e7df730d 100644 --- a/src/graphics/PreviewedInset.h +++ b/src/graphics/PreviewedInset.h @@ -51,10 +51,10 @@ public: /** Remove a snippet from the cache of previews. * Useful if previewing the contents of a file that has changed. */ - void removePreview(); + void removePreview(Buffer const &); /// The preview has been generated and is ready to use. - bool previewReady() const; + bool previewReady(Buffer const &) const; /// If !previewReady() returns 0. PreviewImage const * pimage() const; @@ -83,8 +83,10 @@ private: /// We don't own this. Cached for efficiency reasons. mutable PreviewImage const * pimage_; - /// - boost::signals::connection connection_; + /** Store the connection to the preview loader so that we connect + * only once. + */ + boost::signals::connection ploader_connection_; }; diff --git a/src/insets/ChangeLog b/src/insets/ChangeLog index 0d39bf7895..f1f984b539 100644 --- a/src/insets/ChangeLog +++ b/src/insets/ChangeLog @@ -1,3 +1,7 @@ +2003-10-09 Angus Leeming + + * insetinclude.C (metrics, draw, restartLoading): pass a buffer arg + to PreviewedInset's previewReady and removePreview member functions. 2003-10-08 André Pönitz diff --git a/src/insets/insetinclude.C b/src/insets/insetinclude.C index 3cdb48629d..c27daa8a51 100644 --- a/src/insets/insetinclude.C +++ b/src/insets/insetinclude.C @@ -538,7 +538,8 @@ void InsetInclude::fillWithBibKeys(Buffer const & buffer, void InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const { - if (preview_->previewReady()) { + Buffer const * buffer_ptr = mi.base.bv ? mi.base.bv->buffer() : 0; + if (buffer_ptr && preview_->previewReady(*buffer_ptr)) { dim.asc = preview_->pimage()->ascent(); dim.des = preview_->pimage()->descent(); dim.wid = preview_->pimage()->width(); @@ -563,7 +564,10 @@ void InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const void InsetInclude::draw(PainterInfo & pi, int x, int y) const { cache(pi.base.bv); - if (!preview_->previewReady()) { + Buffer const * buffer_ptr = pi.base.bv ? pi.base.bv->buffer() : 0; + bool const use_preview = buffer_ptr && preview_->previewReady(*buffer_ptr); + + if (!use_preview) { button_.draw(pi, x + button_.box().x1, y); return; } @@ -626,12 +630,14 @@ void InsetInclude::PreviewImpl::startMonitoring(string const & file) void InsetInclude::PreviewImpl::restartLoading() { - removePreview(); if (!view()) return; view()->updateInset(&parent()); - if (view()->buffer()) - generatePreview(*view()->buffer()); + if (view()->buffer()) { + Buffer const & buffer = *view()->buffer(); + removePreview(buffer); + generatePreview(buffer); + } } diff --git a/src/mathed/ChangeLog b/src/mathed/ChangeLog index 96af4bfd75..7c0637f8c1 100644 --- a/src/mathed/ChangeLog +++ b/src/mathed/ChangeLog @@ -1,3 +1,7 @@ +2003-10-09 Angus Leeming + + * formula.C (metrics, draw): pass a buffer arg to PreviewedInset's + previewReady and removePreview member functions. 2003-10-07 André Pönitz diff --git a/src/mathed/formula.C b/src/mathed/formula.C index 1c1331eb89..47e0a82337 100644 --- a/src/mathed/formula.C +++ b/src/mathed/formula.C @@ -18,6 +18,7 @@ #include "math_mathmlstream.h" #include "textpainter.h" +#include "BufferView.h" #include "debug.h" #include "latexrunparams.h" #include "LColor.h" @@ -195,7 +196,8 @@ void InsetFormula::draw(PainterInfo & pi, int x, int y) const cache(pi.base.bv); // This initiates the loading of the preview, so should come // before the metrics are computed. - bool const use_preview = preview_->previewReady(); + Buffer const * buffer_ptr = pi.base.bv ? pi.base.bv->buffer() : 0; + bool const use_preview = buffer_ptr && preview_->previewReady(*buffer_ptr); int const w = dim_.wid; int const d = dim_.des; @@ -260,7 +262,8 @@ bool InsetFormula::insetAllowed(InsetOld::Code code) const void InsetFormula::metrics(MetricsInfo & m, Dimension & dim) const { view_ = m.base.bv; - if (preview_->previewReady()) { + Buffer const * buffer_ptr = m.base.bv ? m.base.bv->buffer() : 0; + if (buffer_ptr && preview_->previewReady(*buffer_ptr)) { dim.asc = preview_->pimage()->ascent(); dim.des = preview_->pimage()->descent(); // insert a one pixel gap in front of the formula -- 2.39.2