#include "BufferView.h"
#include "debug.h"
-#include "latexrunparams.h"
#include "LColor.h"
+#include "lyx_main.h"
+#include "outputparams.h"
#include "frontends/Painter.h"
-#include "graphics/PreviewedInset.h"
-#include "graphics/PreviewImage.h"
+#include "graphics/PreviewLoader.h"
+
+#include "insets/render_preview.h"
#include "support/std_sstream.h"
using std::endl;
-class InsetFormula::PreviewImpl : public PreviewedInset {
-public:
- ///
- PreviewImpl(InsetFormula const & p) : parent_(p) {}
-
-private:
- ///
- bool previewWanted(Buffer const &) const;
- ///
- string const latexString(Buffer const &) const;
- ///
- InsetFormula const & parent_;
-};
-
-
InsetFormula::InsetFormula(bool chemistry)
: par_(MathAtom(new MathHullInset)),
- preview_(new PreviewImpl(*this))
+ preview_(new RenderPreview)
{
preview_->connect(boost::bind(&InsetFormula::statusChanged, this));
if (chemistry)
InsetFormula::InsetFormula(InsetFormula const & other)
: InsetFormulaBase(other),
par_(other.par_),
- preview_(new PreviewImpl(*this))
+ preview_(new RenderPreview)
{
preview_->connect(boost::bind(&InsetFormula::statusChanged, this));
}
InsetFormula::InsetFormula(BufferView *)
: par_(MathAtom(new MathHullInset)),
- preview_(new PreviewImpl(*this))
+ preview_(new RenderPreview)
{
preview_->connect(boost::bind(&InsetFormula::statusChanged, this));
}
InsetFormula::InsetFormula(string const & data)
: par_(MathAtom(new MathHullInset)),
- preview_(new PreviewImpl(*this))
+ preview_(new RenderPreview)
{
preview_->connect(boost::bind(&InsetFormula::statusChanged, this));
if (!data.size())
int InsetFormula::latex(Buffer const &, ostream & os,
- LatexRunParams const & runparams) const
+ OutputParams const & runparams) const
{
WriteStream wi(os, runparams.moving_arg, true);
par_->write(wi);
}
-int InsetFormula::ascii(Buffer const &, ostream & os, int) const
+int InsetFormula::plaintext(Buffer const &, ostream & os,
+ OutputParams const &) const
{
if (0 && display()) {
Dimension dim;
}
-int InsetFormula::linuxdoc(Buffer const & buf, ostream & os) const
+int InsetFormula::linuxdoc(Buffer const & buf, ostream & os,
+ OutputParams const & runparams) const
{
- return docbook(buf, os, false);
+ return docbook(buf, os, runparams);
}
-int InsetFormula::docbook(Buffer const & buf, ostream & os, bool) const
+int InsetFormula::docbook(Buffer const & buf, ostream & os,
+ OutputParams const & runparams) const
{
MathMLStream ms(os);
ms << MTag("equation");
ms << MTag("alt");
ms << "<[CDATA[";
- int res = ascii(buf, ms.os(), 0);
+ int res = plaintext(buf, ms.os(), runparams);
ms << "]]>";
ms << ETag("alt");
ms << MTag("math");
//}
-void InsetFormula::draw(PainterInfo & pi, int x, int y) const
+namespace {
+
+bool editing_inset(InsetFormula const * inset)
{
- BufferView * bv = pi.base.bv;
- cache(bv);
+ return mathcursor &&
+ (const_cast<InsetFormulaBase const *>(mathcursor->formula()) ==
+ inset);
+}
+
+} // namespace anon
+
+void InsetFormula::draw(PainterInfo & pi, int x, int y) const
+{
// The previews are drawn only when we're not editing the inset.
- bool const editing_inset = mathcursor && mathcursor->formula() == this;
- bool const use_preview = !editing_inset && preview_->previewReady();
+ bool const use_preview = (!editing_inset(this) &&
+ RenderPreview::activated() &&
+ preview_->previewReady());
int const w = dim_.wid;
int const d = dim_.des;
int const h = a + d;
if (use_preview) {
- pi.pain.image(x + 1, y - a, w, h, // one pixel gap in front
- *(preview_->pimage()->image()));
+ // one pixel gap in front
+ preview_->draw(pi, x + 1, y);
} else {
- PainterInfo p(bv);
+ PainterInfo p(pi.base.bv);
p.base.style = LM_ST_TEXT;
p.base.font = pi.base.font;
p.base.font.setColor(LColor::math);
!= lcolor.getX11Name(LColor::background))
p.pain.fillRectangle(x, y - a, w, h, LColor::mathbg);
- if (editing_inset) {
+ if (editing_inset(this)) {
mathcursor->drawSelection(pi);
//p.pain.rectangle(x, y - a, w, h, LColor::mathframe);
}
- par_->draw(p, x + offset_, y);
+ par_->draw(p, x, y);
}
xo_ = x;
void InsetFormula::metrics(MetricsInfo & m, Dimension & dim) const
{
- view_ = m.base.bv;
-
- bool const editing_inset = mathcursor && mathcursor->formula() == this;
- bool const use_preview = !editing_inset && preview_->previewReady();
+ bool const use_preview = (!editing_inset(this) &&
+ RenderPreview::activated() &&
+ preview_->previewReady());
if (use_preview) {
- dim.asc = preview_->pimage()->ascent();
- dim.des = preview_->pimage()->descent();
+ preview_->metrics(m, dim);
// insert a one pixel gap in front of the formula
- dim.wid = 1 + preview_->pimage()->width();
+ dim.wid += 1;
if (display())
dim.des += 12;
} else {
dim.des += 1;
}
- if (display()) {
- offset_ = (m.base.textwidth - dim.wid) / 2;
- dim.wid = m.base.textwidth;
- } else {
- offset_ = 0;
- }
-
dim_ = dim;
}
void InsetFormula::statusChanged() const
{
- if (view())
- view()->updateInset(this);
+ LyX::cref().updateInset(this);
}
-void InsetFormula::addPreview(lyx::graphics::PreviewLoader & ploader) const
-{
- preview_->addPreview(ploader);
-}
-
+namespace {
-void InsetFormula::generatePreview(Buffer const & buffer) const
+string const latex_string(InsetFormula const & inset, Buffer const &)
{
- preview_->generatePreview(buffer);
+ ostringstream ls;
+ WriteStream wi(ls, false, false);
+ inset.par()->write(wi);
+ return ls.str();
}
+} // namespace anon
+
-bool InsetFormula::PreviewImpl::previewWanted(Buffer const &) const
+void InsetFormula::addPreview(lyx::graphics::PreviewLoader & ploader) const
{
- return !parent_.par_->asNestInset()->editing();
+ string const snippet = latex_string(*this, ploader.buffer());
+ preview_->addPreview(snippet, ploader);
}
-string const InsetFormula::PreviewImpl::latexString(Buffer const &) const
+void InsetFormula::generatePreview(Buffer const & buffer) const
{
- ostringstream ls;
- WriteStream wi(ls, false, false);
- parent_.par_->write(wi);
- return ls.str();
+ string const snippet = latex_string(*this, buffer);
+ preview_->addPreview(snippet, buffer);
+ preview_->startLoading(buffer);
}