From 8fa8cfb4a38bf2385eea2774e2ce06a754871380 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20P=C3=B6nitz?= Date: Wed, 3 Dec 2003 18:17:20 +0000 Subject: [PATCH] remove Inset::getParagraphs() cache 'outermost' inset font git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8192 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/ChangeLog | 10 +++++++ src/PosIterator.C | 20 +++++++------- src/insets/ChangeLog | 11 ++++++++ src/insets/inset.h | 8 +----- src/insets/insetcollapsable.C | 6 ----- src/insets/insetcollapsable.h | 2 -- src/insets/insetert.C | 37 ++++++-------------------- src/insets/insetert.h | 2 -- src/insets/insetnote.C | 12 --------- src/insets/insetnote.h | 12 +++------ src/insets/insettabular.C | 8 ------ src/insets/insettabular.h | 8 +++--- src/insets/insettext.C | 21 ++++----------- src/insets/insettext.h | 7 +++-- src/iterators.C | 50 +++++++++++++++++++++-------------- src/lyxtext.h | 3 +++ src/output_latex.C | 2 +- src/paragraph_funcs.C | 13 +++++---- src/text.C | 38 +++++++++++++------------- src/text2.C | 8 +++--- 20 files changed, 118 insertions(+), 160 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 24c2db178a..630da56e7d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,4 +1,14 @@ +2003-12-03 André Pönitz + + * PosIterator.C: + * iterators.C: + * lyxtext.h: + * output_latex.C: + * paragraph_funcs.C: + * text.C: + * text2.C: use Inset::getText instead of Inset::getParagraph + 2003-12-03 André Pönitz * buffer.[Ch]: diff --git a/src/PosIterator.C b/src/PosIterator.C index ef53d4a64b..bd3c6c3ec4 100644 --- a/src/PosIterator.C +++ b/src/PosIterator.C @@ -33,12 +33,11 @@ PosIterator & PosIterator::operator++() PosIteratorItem & p = stack_.back(); if (p.pos < p.pit->size()) { - InsetOld * inset = p.pit->getInset(p.pos); - if (inset) { - ParagraphList * pl = inset->getParagraphs(p.index); - if (pl) { + if (InsetOld * inset = p.pit->getInset(p.pos)) { + if (LyXText * text = inset->getText(p.index)) { + ParagraphList & pl = text->paragraphs(); p.index++; - stack_.push_back(PosIteratorItem(pl, pl->begin(), 0)); + stack_.push_back(PosIteratorItem(&pl, pl.begin(), 0)); return *this; } } @@ -86,10 +85,10 @@ PosIterator & PosIterator::operator--() if (q.pos < q.pit->size()) { InsetOld * inset = q.pit->getInset(q.pos); if (inset && q.index > 0) { - ParagraphList * - pl = inset->getParagraphs(q.index - 1); - BOOST_ASSERT(pl); - stack_.push_back(PosIteratorItem(pl, prior(pl->end()), pl->back().size())); + LyXText * text = inset->getText(q.index - 1); + BOOST_ASSERT(text); + ParagraphList & pl = text->paragraphs(); + stack_.push_back(PosIteratorItem(&pl, prior(pl.end()), pl.back().size())); } } return *this; @@ -156,7 +155,8 @@ int distance(PosIterator const & cur, PosIterator const & end) { PosIterator p = cur; int count = 0; - for (; p != end; ++p, ++count); + for (; p != end; ++p, ++count) + ; return count; } diff --git a/src/insets/ChangeLog b/src/insets/ChangeLog index 1ddaaa2627..b7d20cd6d7 100644 --- a/src/insets/ChangeLog +++ b/src/insets/ChangeLog @@ -1,3 +1,14 @@ + +2003-12-03 André Pönitz + + * inset.h: remove getParagraphs() + + * insetcollapsable.[Ch]: + * insetert.[Ch]: + * insetnote.[Ch]: + * insettabular.[Ch]: + * insettext.C: use getText() instead of getParagraphs() + 2003-12-03 Martin Vermeer * insetert.C: fix label text updating bug diff --git a/src/insets/inset.h b/src/insets/inset.h index 1ec2999999..0539f91dc9 100644 --- a/src/insets/inset.h +++ b/src/insets/inset.h @@ -25,7 +25,6 @@ class LColor_color; class FuncRequest; class OutputParams; class LyXCursor; -class LyXFont; class LyXLex; class LyXText; class Painter; @@ -223,10 +222,7 @@ public: /// returns the actual scroll-value virtual int scroll(bool recursive = true) const; - /// if this insets owns paragraphs (f.ex. InsetText) then it - /// should return it's very first one! - virtual ParagraphList * getParagraphs(int /*num*/) const { return 0; } - /// + /// if this insets owns text cells (e.g. InsetText) return cell num virtual LyXText * getText(int /*num*/) const { return 0; } /// virtual int numParagraphs() const { return 0; } @@ -256,8 +252,6 @@ public: be closed before generating this inset. This is needed for insets that may contain several paragraphs */ virtual bool noFontChange() const { return false; } - // - virtual void getDrawFont(LyXFont &) const {} /// mark the inset contents as erased (for change tracking) virtual void markErased() {} diff --git a/src/insets/insetcollapsable.C b/src/insets/insetcollapsable.C index 9f8cac0f42..918f1c2c72 100644 --- a/src/insets/insetcollapsable.C +++ b/src/insets/insetcollapsable.C @@ -375,12 +375,6 @@ int InsetCollapsable::scroll(bool recursive) const } -ParagraphList * InsetCollapsable::getParagraphs(int i) const -{ - return inset.getParagraphs(i); -} - - int InsetCollapsable::numParagraphs() const { return inset.numParagraphs(); diff --git a/src/insets/insetcollapsable.h b/src/insets/insetcollapsable.h index a662c6bc18..8cb7df7ae8 100644 --- a/src/insets/insetcollapsable.h +++ b/src/insets/insetcollapsable.h @@ -99,8 +99,6 @@ public: /// void scroll(BufferView *bv, int offset) const; /// - ParagraphList * getParagraphs(int) const; - /// int numParagraphs() const; /// LyXText * getText(int) const; diff --git a/src/insets/insetert.C b/src/insets/insetert.C index f6712daf8e..3fef4e1a64 100644 --- a/src/insets/insetert.C +++ b/src/insets/insetert.C @@ -385,12 +385,10 @@ int InsetERT::docbook(Buffer const &, ostream & os, void InsetERT::edit(BufferView * bv, bool left) { - if (status_ == Inlined) { + if (status_ == Inlined) inset.edit(bv, left); - } else { + else InsetCollapsable::edit(bv, left); - } - setLatexFont(bv); updateStatus(); } @@ -400,9 +398,6 @@ InsetERT::priv_dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos) { BufferView * bv = cmd.view(); - if (inset.paragraphs().begin()->empty()) - setLatexFont(bv); - switch (cmd.action) { case LFUN_INSET_MODIFY: { @@ -428,17 +423,6 @@ InsetERT::priv_dispatch(FuncRequest const & cmd, idx_type & idx, pos_type & pos) bv->owner()->setLayout(inset.paragraphs().begin()->layout()->name()); return DispatchResult(true); - case LFUN_BREAKPARAGRAPH: - case LFUN_BREAKPARAGRAPHKEEPLAYOUT: - case LFUN_BACKSPACE: - case LFUN_BACKSPACE_SKIP: - case LFUN_DELETE: - case LFUN_DELETE_SKIP: - case LFUN_DELETE_LINE_FORWARD: - case LFUN_CUT: - setLatexFont(bv); - return InsetCollapsable::priv_dispatch(cmd, idx, pos); - default: return InsetCollapsable::priv_dispatch(cmd, idx, pos); } @@ -459,25 +443,20 @@ bool InsetERT::insetAllowed(InsetOld::Code code) const void InsetERT::metrics(MetricsInfo & mi, Dimension & dim) const { + LyXFont tmpfont = mi.base.font; + getDrawFont(mi.base.font); InsetCollapsable::metrics(mi, dim); + mi.base.font = tmpfont; dim_ = dim; } void InsetERT::draw(PainterInfo & pi, int x, int y) const { + LyXFont tmpfont = pi.base.font; + getDrawFont(pi.base.font); InsetCollapsable::draw(pi, x, y); -} - - -void InsetERT::setLatexFont(BufferView * /*bv*/) -{ -#ifdef SET_HARD_FONT - LyXFont font(LyXFont::ALL_INHERIT, latex_language); - font.setFamily(LyXFont::TYPEWRITER_FAMILY); - font.setColor(LColor::latex); - inset.text_.setFont(bv, font, false); -#endif + pi.base.font = tmpfont; } diff --git a/src/insets/insetert.h b/src/insets/insetert.h index 4c87969638..e2c295565b 100644 --- a/src/insets/insetert.h +++ b/src/insets/insetert.h @@ -98,8 +98,6 @@ private: void init(); /// void setButtonLabel() const; - /// - void setLatexFont(BufferView *); /// update status on button void updateStatus(bool = false) const; /// diff --git a/src/insets/insetnote.C b/src/insets/insetnote.C index 655ac16702..4e64471950 100644 --- a/src/insets/insetnote.C +++ b/src/insets/insetnote.C @@ -111,18 +111,6 @@ void InsetNote::setButtonLabel() } -void InsetNote::metrics(MetricsInfo & mi, Dimension & dim) const -{ - InsetCollapsable::metrics(mi, dim); - // Contrary to Greyedout, these cannot be construed as part of the - // running text: make them stand on their own - if (params_.type == "Note" || params_.type == "Comment") - if (isOpen()) - dim.wid = mi.base.textwidth; - dim_ = dim; -} - - bool InsetNote::showInsetDialog(BufferView * bv) const { InsetNoteMailer("note", const_cast(*this)).showDialog(bv); diff --git a/src/insets/insetnote.h b/src/insets/insetnote.h index 98a8b6687d..3a88423824 100644 --- a/src/insets/insetnote.h +++ b/src/insets/insetnote.h @@ -31,8 +31,6 @@ struct InsetNoteParams { class InsetNote : public InsetCollapsable { public: /// - - InsetNote(BufferParams const &, std::string const &); /// Copy constructor InsetNote(InsetNote const &); @@ -50,22 +48,20 @@ public: void read(Buffer const & buf, LyXLex & lex); /// void setButtonLabel(); - /// - void metrics(MetricsInfo &, Dimension &) const; /// show the note dialog bool showInsetDialog(BufferView * bv) const; /// int latex(Buffer const &, std::ostream &, - OutputParams const &) const; + OutputParams const &) const; /// int linuxdoc(Buffer const &, std::ostream &, - OutputParams const &) const; + OutputParams const &) const; /// int docbook(Buffer const &, std::ostream &, - OutputParams const &) const; + OutputParams const &) const; /// int plaintext(Buffer const &, std::ostream &, - OutputParams const &) const; + OutputParams const &) const; /// void validate(LaTeXFeatures &) const; /// diff --git a/src/insets/insettabular.C b/src/insets/insettabular.C index 5121c2305a..528f769378 100644 --- a/src/insets/insettabular.C +++ b/src/insets/insettabular.C @@ -1965,14 +1965,6 @@ void InsetTabular::getSelection(int & srow, int & erow, } -ParagraphList * InsetTabular::getParagraphs(int i) const -{ - return i < tabular.getNumberOfCells() - ? tabular.getCellInset(i).getParagraphs(0) - : 0; -} - - int InsetTabular::numParagraphs() const { return tabular.getNumberOfCells(); diff --git a/src/insets/insettabular.h b/src/insets/insettabular.h index 6e77196f5a..cf3875ea05 100644 --- a/src/insets/insettabular.h +++ b/src/insets/insettabular.h @@ -125,18 +125,16 @@ public: /// Appends \c list with all labels found within this inset. void getLabelList(Buffer const &, std::vector & list) const; /// - int scroll(bool recursive=true) const; + int scroll(bool recursive = true) const; /// - void scroll(BufferView *bv, float sx) const { + void scroll(BufferView * bv, float sx) const { UpdatableInset::scroll(bv, sx); } /// - void scroll(BufferView *bv, int offset) const { + void scroll(BufferView * bv, int offset) const { UpdatableInset::scroll(bv, offset); } /// - ParagraphList * getParagraphs(int) const; - /// int numParagraphs() const; /// LyXText * getText(int) const; diff --git a/src/insets/insettext.C b/src/insets/insettext.C index c5c8c7258f..d5c548784b 100644 --- a/src/insets/insettext.C +++ b/src/insets/insettext.C @@ -176,14 +176,16 @@ void InsetText::read(Buffer const & buf, LyXLex & lex) void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const { //lyxerr << "InsetText::metrics: width: " << mi.base.textwidth << endl; - mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET; setViewCache(mi.base.bv); + mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET; text_.metrics(mi, dim); dim.asc += TEXT_TO_INSET_OFFSET; dim.des += TEXT_TO_INSET_OFFSET; dim.wid += 2 * TEXT_TO_INSET_OFFSET; mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET; dim_ = dim; + font_ = mi.base.font; + text_.font_ = mi.base.font; } @@ -270,9 +272,8 @@ extern LCursor theTempCursor; void InsetText::edit(BufferView * bv, bool left) { lyxerr << "InsetText: edit left/right" << endl; - setViewCache(bv); - old_par = -1; + setViewCache(bv); if (left) text_.setCursorIntern(0, 0); @@ -289,6 +290,7 @@ void InsetText::edit(BufferView * bv, int x, int y) { lyxerr << "InsetText::edit xy" << endl; old_par = -1; + sanitizeEmptyText(bv); text_.setCursorFromCoordinates(x - text_.xo_, y + bv->top_y() - text_.yo_); @@ -534,12 +536,6 @@ void InsetText::clearInset(Painter & pain, int x, int y) const } -ParagraphList * InsetText::getParagraphs(int i) const -{ - return (i == 0) ? const_cast(¶graphs()) : 0; -} - - LyXText * InsetText::getText(int i) const { return (i == 0) ? const_cast(&text_) : 0; @@ -577,13 +573,6 @@ void InsetText::collapseParagraphs(BufferView * bv) } -void InsetText::getDrawFont(LyXFont & font) const -{ - if (owner()) - owner()->getDrawFont(font); -} - - void InsetText::appendParagraphs(Buffer * buffer, ParagraphList & plist) { #warning FIXME Check if Changes stuff needs changing here. (Lgb) diff --git a/src/insets/insettext.h b/src/insets/insettext.h index 46708539d0..4dd4f5dd57 100644 --- a/src/insets/insettext.h +++ b/src/insets/insettext.h @@ -15,6 +15,7 @@ #include "updatableinset.h" #include "ParagraphList_fwd.h" #include "RowList_fwd.h" +#include "lyxfont.h" #include "lyxtext.h" #include "support/types.h" @@ -125,8 +126,6 @@ public: UpdatableInset::scroll(bv, offset); } /// - ParagraphList * getParagraphs(int) const; - /// LyXText * getText(int) const; /// mark as erased for change tracking @@ -140,8 +139,6 @@ public: */ void markNew(bool track_changes = false); - /// - void getDrawFont(LyXFont &) const; /// append text onto the existing text void appendParagraphs(Buffer * bp, ParagraphList &); @@ -199,5 +196,7 @@ private: public: /// mutable LyXText text_; + /// + mutable LyXFont font_; }; #endif diff --git a/src/iterators.C b/src/iterators.C index 3cb674f559..f2e323aa72 100644 --- a/src/iterators.C +++ b/src/iterators.C @@ -110,26 +110,31 @@ ParIterator & ParIterator::operator++() // Does the current inset contain more "cells" ? if (p.index) { ++(*p.index); - ParagraphList * plist = (*p.it)->inset->getParagraphs(*p.index); - if (plist && !plist->empty()) { - pimpl_->positions.push_back(ParPosition(plist->begin(), *plist)); - return *this; + if (LyXText * text = (*p.it)->inset->getText(*p.index)) { + ParagraphList & plist = text->paragraphs(); + if (!plist.empty()) { + pimpl_->positions.push_back(ParPosition(plist.begin(), plist)); + return *this; + } } ++(*p.it); - } else + } else { // The following line is needed because the value of // p.it may be invalid if inset was added/removed to // the paragraph pointed by the iterator p.it.reset(p.pit->insetlist.begin()); + } // Try to find the next inset that contains paragraphs InsetList::iterator end = p.pit->insetlist.end(); for (; *p.it != end; ++(*p.it)) { - ParagraphList * plist = (*p.it)->inset->getParagraphs(0); - if (plist && !plist->empty()) { - p.index.reset(0); - pimpl_->positions.push_back(ParPosition(plist->begin(), *plist)); - return *this; + if (LyXText * text = (*p.it)->inset->getText(0)) { + ParagraphList & plist = text->paragraphs(); + if (!plist.empty()) { + p.index.reset(0); + pimpl_->positions.push_back(ParPosition(plist.begin(), plist)); + return *this; + } } } @@ -265,26 +270,31 @@ ParConstIterator & ParConstIterator::operator++() // Does the current inset contain more "cells" ? if (p.index) { ++(*p.index); - ParagraphList * plist = (*p.it)->inset->getParagraphs(*p.index); - if (plist && !plist->empty()) { - pimpl_->positions.push_back(ParPosition(plist->begin(), *plist)); - return *this; + if (LyXText * text = (*p.it)->inset->getText(*p.index)) { + ParagraphList & plist = text->paragraphs(); + if (!plist.empty()) { + pimpl_->positions.push_back(ParPosition(plist.begin(), plist)); + return *this; + } } ++(*p.it); - } else + } else { // The following line is needed because the value of // p.it may be invalid if inset was added/removed to // the paragraph pointed by the iterator p.it.reset(p.pit->insetlist.begin()); + } // Try to find the next inset that contains paragraphs InsetList::iterator end = p.pit->insetlist.end(); for (; *p.it != end; ++(*p.it)) { - ParagraphList * plist = (*p.it)->inset->getParagraphs(0); - if (plist && !plist->empty()) { - p.index.reset(0); - pimpl_->positions.push_back(ParPosition(plist->begin(), *plist)); - return *this; + if (LyXText * text = (*p.it)->inset->getText(*p.index)) { + ParagraphList & plist = text->paragraphs(); + if (!plist.empty()) { + p.index.reset(0); + pimpl_->positions.push_back(ParPosition(plist.begin(), plist)); + return *this; + } } } diff --git a/src/lyxtext.h b/src/lyxtext.h index 1784d0d82c..a5a82ffdb1 100644 --- a/src/lyxtext.h +++ b/src/lyxtext.h @@ -426,6 +426,9 @@ public: mutable int xo_; mutable int yo_; + /// our 'outermost' Font + LyXFont font_; + private: /// rebreaks the given par diff --git a/src/output_latex.C b/src/output_latex.C index a2fe85b5c1..837c6dbc32 100644 --- a/src/output_latex.C +++ b/src/output_latex.C @@ -426,7 +426,7 @@ TeXOnePar(Buffer const & buf, return ++pit; } -} //anon namespace +} // anon namespace // // LaTeX all paragraphs from par to endpar, if endpar == 0 then to the end diff --git a/src/paragraph_funcs.C b/src/paragraph_funcs.C index 4e9ee69b8c..17bb406577 100644 --- a/src/paragraph_funcs.C +++ b/src/paragraph_funcs.C @@ -564,11 +564,10 @@ ParagraphList::iterator outerPar(Buffer const & buf, InsetOld const * inset) ParIterator pit = const_cast(buf).par_iterator_begin(); ParIterator end = const_cast(buf).par_iterator_end(); for ( ; pit != end; ++pit) { - - ParagraphList * plist; + LyXText * text; // the second '=' below is intentional - for (int i = 0; (plist = inset->getParagraphs(i)); ++i) - if (plist == &pit.plist()) + for (int i = 0; (text = inset->getText(i)); ++i) + if (&text->paragraphs() == &pit.plist()) return pit.outerPar(); InsetList::iterator ii = pit->insetlist.begin(); @@ -588,10 +587,10 @@ Paragraph const & ownerPar(Buffer const & buf, InsetOld const * inset) ParConstIterator pit = buf.par_iterator_begin(); ParConstIterator end = buf.par_iterator_end(); for ( ; pit != end; ++pit) { - ParagraphList * plist; + LyXText * text; // the second '=' below is intentional - for (int i = 0; (plist = inset->getParagraphs(i)); ++i) - if (plist == &pit.plist()) + for (int i = 0; (text = inset->getText(i)); ++i) + if (&text->paragraphs() == &pit.plist()) return *pit.pit(); InsetList::const_iterator ii = pit->insetlist.begin(); diff --git a/src/text.C b/src/text.C index e2dbf972f8..2b952bc4f6 100644 --- a/src/text.C +++ b/src/text.C @@ -314,25 +314,25 @@ int LyXText::leftMargin(ParagraphList::iterator pit, pos_type pos) const align = pit->params().align(); // set the correct parindent - if (pos == 0) { - if ((layout->labeltype == LABEL_NO_LABEL - || layout->labeltype == LABEL_TOP_ENVIRONMENT - || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT - || (layout->labeltype == LABEL_STATIC - && layout->latextype == LATEX_ENVIRONMENT - && !isFirstInSequence(pit, paragraphs()))) - && align == LYX_ALIGN_BLOCK - && !pit->params().noindent() - // in tabulars and ert paragraphs are never indented! - && (!pit->inInset() || !pit->inInset()->owner() || - (pit->inInset()->owner()->lyxCode() != InsetOld::TABULAR_CODE && - pit->inInset()->owner()->lyxCode() != InsetOld::ERT_CODE)) - && (pit->layout() != tclass.defaultLayout() || - bv()->buffer()->params().paragraph_separation == - BufferParams::PARSEP_INDENT)) { - x += font_metrics::signedWidth(parindent, - tclass.defaultfont()); - } + if (pos == 0 + && (layout->labeltype == LABEL_NO_LABEL + || layout->labeltype == LABEL_TOP_ENVIRONMENT + || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT + || (layout->labeltype == LABEL_STATIC + && layout->latextype == LATEX_ENVIRONMENT + && !isFirstInSequence(pit, paragraphs()))) + && align == LYX_ALIGN_BLOCK + && !pit->params().noindent() + // in tabulars and ert paragraphs are never indented! + && (!pit->inInset() + || !pit->inInset()->owner() + || (pit->inInset()->owner()->lyxCode() != InsetOld::TABULAR_CODE + && pit->inInset()->owner()->lyxCode() != InsetOld::ERT_CODE)) + && (pit->layout() != tclass.defaultLayout() + || bv()->buffer()->params().paragraph_separation == + BufferParams::PARSEP_INDENT)) + { + x += font_metrics::signedWidth(parindent, tclass.defaultfont()); } return x; diff --git a/src/text2.C b/src/text2.C index ff3e4746cc..38e5b8497f 100644 --- a/src/text2.C +++ b/src/text2.C @@ -118,8 +118,8 @@ LyXFont LyXText::getFont(ParagraphList::iterator pit, pos_type pos) const // We specialize the 95% common case: if (!pit->getDepth()) { LyXFont f = pit->getFontSettings(params, pos); - if (pit->inInset()) - pit->inInset()->getDrawFont(f); + if (in_inset_) + f.realize(font_); if (layout->labeltype == LABEL_MANUAL && pos < body_pos) return f.realize(layout->reslabelfont); else @@ -136,8 +136,8 @@ LyXFont LyXText::getFont(ParagraphList::iterator pit, pos_type pos) const LyXFont font = pit->getFontSettings(params, pos); font.realize(layoutfont); - if (pit->inInset()) - pit->inInset()->getDrawFont(font); + if (in_inset_) + font.realize(font_); // Realize with the fonts of lesser depth. //font.realize(outerFont(pit, paragraphs())); -- 2.39.2