mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
* Mathed now caches the BufferView as a weak_ptr.
* PreviewedInset caches the LaTeX snippet. * Further clean-up of mathed's preview code. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@4838 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
3d137bfe77
commit
984cbba504
@ -1,3 +1,7 @@
|
|||||||
|
2002-08-02 Angus Leeming <leeming@lyx.org>
|
||||||
|
|
||||||
|
* PreviewedInset.[Ch]: cache the LaTeX snippet.
|
||||||
|
|
||||||
2002-08-01 Angus Leeming <leeming@lyx.org>
|
2002-08-01 Angus Leeming <leeming@lyx.org>
|
||||||
|
|
||||||
* PreviewedInset.[Ch]: new files. An abstract base class that can help
|
* PreviewedInset.[Ch]: new files. An abstract base class that can help
|
||||||
|
@ -33,7 +33,7 @@ bool PreviewedInset::activated()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PreviewedInset::generatePreview() const
|
void PreviewedInset::generatePreview()
|
||||||
{
|
{
|
||||||
if (!Previews::activated() || !previewWanted() ||
|
if (!Previews::activated() || !previewWanted() ||
|
||||||
!view() || !view()->buffer())
|
!view() || !view()->buffer())
|
||||||
@ -46,15 +46,14 @@ void PreviewedInset::generatePreview() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PreviewedInset::addPreview(grfx::PreviewLoader & ploader) const
|
void PreviewedInset::addPreview(grfx::PreviewLoader & ploader)
|
||||||
{
|
{
|
||||||
if (!Previews::activated() || !previewWanted())
|
if (!Previews::activated() || !previewWanted())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Generate the LaTeX snippet.
|
snippet_ = latexString();
|
||||||
string const snippet = latexString();
|
|
||||||
|
|
||||||
pimage_ = ploader.preview(snippet);
|
pimage_ = ploader.preview(snippet_);
|
||||||
if (pimage_)
|
if (pimage_)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -66,7 +65,7 @@ void PreviewedInset::addPreview(grfx::PreviewLoader & ploader) const
|
|||||||
boost::bind(&PreviewedInset::imageReady, this, _1));
|
boost::bind(&PreviewedInset::imageReady, this, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
ploader.add(snippet);
|
ploader.add(snippet_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -76,13 +75,10 @@ bool PreviewedInset::previewReady() const
|
|||||||
!view() || !view()->buffer())
|
!view() || !view()->buffer())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// If the cached grfx::PreviewImage is invalid, update it.
|
if (!pimage_ || snippet_ != pimage_->snippet()) {
|
||||||
string const snippet = latexString();
|
|
||||||
|
|
||||||
if (!pimage_ || snippet != pimage_->snippet()) {
|
|
||||||
grfx::PreviewLoader & ploader =
|
grfx::PreviewLoader & ploader =
|
||||||
grfx::Previews::get().loader(view()->buffer());
|
grfx::Previews::get().loader(view()->buffer());
|
||||||
pimage_ = ploader.preview(snippet);
|
pimage_ = ploader.preview(snippet_);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pimage_)
|
if (!pimage_)
|
||||||
@ -95,7 +91,7 @@ bool PreviewedInset::previewReady() const
|
|||||||
void PreviewedInset::imageReady(grfx::PreviewImage const & pimage) const
|
void PreviewedInset::imageReady(grfx::PreviewImage const & pimage) const
|
||||||
{
|
{
|
||||||
// Check snippet against the Inset's current contents
|
// Check snippet against the Inset's current contents
|
||||||
if (latexString() != pimage.snippet())
|
if (snippet_ != pimage.snippet())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pimage_ = &pimage;
|
pimage_ = &pimage;
|
||||||
|
@ -41,12 +41,12 @@ public:
|
|||||||
/** Find the PreviewLoader, add a LaTeX snippet to it and
|
/** Find the PreviewLoader, add a LaTeX snippet to it and
|
||||||
* start the loading process.
|
* start the loading process.
|
||||||
*/
|
*/
|
||||||
void generatePreview() const;
|
void generatePreview();
|
||||||
|
|
||||||
/** Add a LaTeX snippet to the PreviewLoader but do not start the
|
/** Add a LaTeX snippet to the PreviewLoader but do not start the
|
||||||
* loading process.
|
* loading process.
|
||||||
*/
|
*/
|
||||||
void addPreview(PreviewLoader & ploader) const;
|
void addPreview(PreviewLoader & ploader);
|
||||||
|
|
||||||
/// The preview has been generated and is ready to use.
|
/// The preview has been generated and is ready to use.
|
||||||
bool previewReady() const;
|
bool previewReady() const;
|
||||||
@ -73,10 +73,12 @@ private:
|
|||||||
|
|
||||||
///
|
///
|
||||||
Inset & inset_;
|
Inset & inset_;
|
||||||
/// We don't own this
|
///
|
||||||
|
string snippet_;
|
||||||
|
/// We don't own this. Cached for efficiency reasons.
|
||||||
mutable PreviewImage const * pimage_;
|
mutable PreviewImage const * pimage_;
|
||||||
///
|
///
|
||||||
mutable boost::signals::connection connection_;
|
boost::signals::connection connection_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace grfx
|
} // namespace grfx
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
|
2002-08-02 Angus Leeming <leeming@lyx.org>
|
||||||
|
|
||||||
|
* formulabase.[Ch]: store the BufferView as a weak_ptr.
|
||||||
|
(updatePreview): removed.
|
||||||
|
(insetUnlock): invoke generatePreview().
|
||||||
|
|
||||||
|
* formula.C (InsetFormula): pass the shared_ptr to view_, not the raw
|
||||||
|
BufferView.
|
||||||
|
(read, localDispatch): remove those calls to updatePreview().
|
||||||
|
|
||||||
|
* math_metricsinfo.[Ch]: store the BufferView as a weak_ptr.
|
||||||
|
|
||||||
|
* math_nestinset.C (notifyCursorLeaves): empty, because
|
||||||
|
generatePreview() is now called from InsetFormulaBase::insetUnlock.
|
||||||
|
|
||||||
2002-08-01 Angus Leeming <leeming@lyx.org>
|
2002-08-01 Angus Leeming <leeming@lyx.org>
|
||||||
|
|
||||||
* formula.C: move code into the new PreviewedInset class.
|
* formula.C: move code into the new PreviewedInset class.
|
||||||
|
@ -103,7 +103,7 @@ InsetFormula::InsetFormula(BufferView * bv)
|
|||||||
: par_(MathAtom(new MathHullInset)),
|
: par_(MathAtom(new MathHullInset)),
|
||||||
preview_(new PreviewImpl(*this))
|
preview_(new PreviewImpl(*this))
|
||||||
{
|
{
|
||||||
view_ = bv;
|
view_ = bv->owner()->view();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -191,7 +191,6 @@ void InsetFormula::read(Buffer const *, LyXLex & lex)
|
|||||||
{
|
{
|
||||||
mathed_parse_normal(par_, lex);
|
mathed_parse_normal(par_, lex);
|
||||||
metrics();
|
metrics();
|
||||||
updatePreview();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -207,6 +206,7 @@ void InsetFormula::draw(BufferView * bv, LyXFont const & font,
|
|||||||
{
|
{
|
||||||
// This initiates the loading of the preview, so should come
|
// This initiates the loading of the preview, so should come
|
||||||
// before the metrics are computed.
|
// before the metrics are computed.
|
||||||
|
view_ = bv->owner()->view();
|
||||||
bool const use_preview = preview_->previewReady();
|
bool const use_preview = preview_->previewReady();
|
||||||
|
|
||||||
int const x = int(xx);
|
int const x = int(xx);
|
||||||
@ -390,8 +390,6 @@ InsetFormula::localDispatch(BufferView * bv, kb_action action,
|
|||||||
result = InsetFormulaBase::localDispatch(bv, action, arg);
|
result = InsetFormulaBase::localDispatch(bv, action, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
//updatePreview();
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ bool openNewInset(BufferView * bv, UpdatableInset * new_inset)
|
|||||||
|
|
||||||
|
|
||||||
InsetFormulaBase::InsetFormulaBase()
|
InsetFormulaBase::InsetFormulaBase()
|
||||||
: view_(0), font_(), xo_(0), yo_(0)
|
: font_(), xo_(0), yo_(0)
|
||||||
{
|
{
|
||||||
// This is needed as long the math parser is not re-entrant
|
// This is needed as long the math parser is not re-entrant
|
||||||
initMath();
|
initMath();
|
||||||
@ -151,7 +151,7 @@ void InsetFormulaBase::metrics(BufferView * bv, LyXFont const & f) const
|
|||||||
void InsetFormulaBase::metrics(BufferView * bv) const
|
void InsetFormulaBase::metrics(BufferView * bv) const
|
||||||
{
|
{
|
||||||
if (bv)
|
if (bv)
|
||||||
view_ = bv;
|
view_ = bv->owner()->view();
|
||||||
MathMetricsInfo mi;
|
MathMetricsInfo mi;
|
||||||
mi.view = view_;
|
mi.view = view_;
|
||||||
//mi.base.style = display() ? LM_ST_DISPLAY : LM_ST_TEXT;
|
//mi.base.style = display() ? LM_ST_DISPLAY : LM_ST_TEXT;
|
||||||
@ -204,6 +204,7 @@ void InsetFormulaBase::insetUnlock(BufferView * bv)
|
|||||||
}
|
}
|
||||||
releaseMathCursor(bv);
|
releaseMathCursor(bv);
|
||||||
}
|
}
|
||||||
|
generatePreview();
|
||||||
bv->updateInset(this, false);
|
bv->updateInset(this, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -836,13 +837,13 @@ Inset::Code InsetFormulaBase::lyxCode() const
|
|||||||
|
|
||||||
int InsetFormulaBase::ylow() const
|
int InsetFormulaBase::ylow() const
|
||||||
{
|
{
|
||||||
return yo_ - ascent(view_, font_);
|
return yo_ - ascent(view(), font_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int InsetFormulaBase::yhigh() const
|
int InsetFormulaBase::yhigh() const
|
||||||
{
|
{
|
||||||
return yo_ + descent(view_, font_);
|
return yo_ + descent(view(), font_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -854,7 +855,7 @@ int InsetFormulaBase::xlow() const
|
|||||||
|
|
||||||
int InsetFormulaBase::xhigh() const
|
int InsetFormulaBase::xhigh() const
|
||||||
{
|
{
|
||||||
return xo_ + width(view_, font_);
|
return xo_ + width(view(), font_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,6 +23,8 @@
|
|||||||
#include "frontends/mouse_state.h"
|
#include "frontends/mouse_state.h"
|
||||||
#include "lyxfont.h"
|
#include "lyxfont.h"
|
||||||
|
|
||||||
|
#include <boost/weak_ptr.hpp>
|
||||||
|
|
||||||
#include <iosfwd>
|
#include <iosfwd>
|
||||||
|
|
||||||
class Buffer;
|
class Buffer;
|
||||||
@ -99,7 +101,7 @@ public:
|
|||||||
///
|
///
|
||||||
virtual void updateLocal(BufferView * bv, bool mark_dirty);
|
virtual void updateLocal(BufferView * bv, bool mark_dirty);
|
||||||
///
|
///
|
||||||
BufferView * view() const { return view_; }
|
BufferView * view() const { return view_.get(); }
|
||||||
|
|
||||||
///
|
///
|
||||||
virtual bool searchForward(BufferView *, string const &,
|
virtual bool searchForward(BufferView *, string const &,
|
||||||
@ -115,9 +117,6 @@ public:
|
|||||||
virtual void revealCodes(BufferView *) const;
|
virtual void revealCodes(BufferView *) const;
|
||||||
///
|
///
|
||||||
virtual Inset::EDITABLE editable() const { return HIGHLY_EDITABLE; }
|
virtual Inset::EDITABLE editable() const { return HIGHLY_EDITABLE; }
|
||||||
///
|
|
||||||
virtual void updatePreview() {}
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// unimplemented
|
/// unimplemented
|
||||||
@ -127,7 +126,7 @@ private:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
///
|
///
|
||||||
mutable BufferView * view_;
|
mutable boost::weak_ptr<BufferView> view_;
|
||||||
///
|
///
|
||||||
mutable LyXFont font_;
|
mutable LyXFont font_;
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ MathMetricsBase::MathMetricsBase()
|
|||||||
|
|
||||||
|
|
||||||
MathMetricsInfo::MathMetricsInfo()
|
MathMetricsInfo::MathMetricsInfo()
|
||||||
: view(0), fullredraw(false)
|
: fullredraw(false)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
#include "lyxfont.h"
|
#include "lyxfont.h"
|
||||||
#include "LString.h"
|
#include "LString.h"
|
||||||
|
|
||||||
|
#include <boost/weak_ptr.hpp>
|
||||||
|
|
||||||
class BufferView;
|
class BufferView;
|
||||||
class Painter;
|
class Painter;
|
||||||
class MathNestInset;
|
class MathNestInset;
|
||||||
@ -46,7 +48,7 @@ struct MathMetricsInfo {
|
|||||||
///
|
///
|
||||||
MathMetricsBase base;
|
MathMetricsBase base;
|
||||||
///
|
///
|
||||||
BufferView * view;
|
boost::weak_ptr<BufferView> view;
|
||||||
///
|
///
|
||||||
bool fullredraw;
|
bool fullredraw;
|
||||||
};
|
};
|
||||||
|
@ -319,11 +319,4 @@ void MathNestInset::normalize(NormalStream & os) const
|
|||||||
|
|
||||||
|
|
||||||
void MathNestInset::notifyCursorLeaves()
|
void MathNestInset::notifyCursorLeaves()
|
||||||
{
|
{}
|
||||||
// Generate a preview only if we are leaving the InsetFormula itself
|
|
||||||
if (!mathcursor || mathcursor->depth() != 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
InsetFormulaBase * inset = mathcursor->formula();
|
|
||||||
inset->generatePreview();
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user