X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsettext.C;h=9b2233c5ddd22bf0687262998cb62bdd4505d5fd;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=96c7dcdf8e546dfb5f0874ef5513c8273c0db20a;hpb=d53d4a5c3528c8dfa06ec55229eacac8f5783150;p=lyx.git diff --git a/src/insets/insettext.C b/src/insets/insettext.C index 96c7dcdf8e..9b2233c5dd 100644 --- a/src/insets/insettext.C +++ b/src/insets/insettext.C @@ -76,7 +76,7 @@ int InsetText::border_ = 2; InsetText::InsetText(BufferParams const & bp) - : drawFrame_(false), frame_color_(LColor::insetframe), text_(0) + : drawFrame_(false), frame_color_(LColor::insetframe) { paragraphs().push_back(Paragraph()); paragraphs().back().layout(bp.getLyXTextClass().defaultLayout()); @@ -88,7 +88,7 @@ InsetText::InsetText(BufferParams const & bp) InsetText::InsetText(InsetText const & in) - : InsetOld(in), text_(in.text_.bv_owner) + : InsetOld(in), text_() { text_.autoBreakRows_ = in.text_.autoBreakRows_; drawFrame_ = in.drawFrame_; @@ -103,7 +103,6 @@ InsetText::InsetText(InsetText const & in) InsetText::InsetText() - : text_(0) {} @@ -164,37 +163,41 @@ void InsetText::read(Buffer const & buf, LyXLex & lex) } -void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const +bool InsetText::metrics(MetricsInfo & mi, Dimension & dim) const { + TextMetrics & tm = mi.base.bv->textMetrics(&text_); + //lyxerr << "InsetText::metrics: width: " << mi.base.textwidth << endl; - setViewCache(mi.base.bv); mi.base.textwidth -= 2 * border_; font_ = mi.base.font; // Hand font through to contained lyxtext: text_.font_ = mi.base.font; - text_.metrics(mi, dim); + tm.metrics(mi, dim); dim.asc += border_; dim.des += border_; dim.wid += 2 * border_; mi.base.textwidth += 2 * border_; + bool const changed = dim_ != dim; dim_ = dim; + return changed; } void InsetText::draw(PainterInfo & pi, int x, int y) const { - BOOST_ASSERT(!text_.paragraphs().front().rows().empty()); // update our idea of where we are setPosCache(pi, x, y); + TextMetrics & tm = pi.base.bv->textMetrics(&text_); + text_.background_color_ = backgroundColor(); text_.draw(pi, x + border_, y); if (drawFrame_) { - int const w = text_.width() + 2 * border_; - int const a = text_.ascent() + border_; - int const h = a + text_.descent() + border_; - pi.pain.rectangle(x, y - a, (Wide() ? text_.maxwidth_ : w), h, + int const w = tm.width() + 2 * border_; + int const a = tm.ascent() + border_; + int const h = a + tm.descent() + border_; + pi.pain.rectangle(x, y - a, (wide() ? tm.maxWidth() : w), h, frameColor()); } } @@ -202,20 +205,24 @@ void InsetText::draw(PainterInfo & pi, int x, int y) const void InsetText::drawSelection(PainterInfo & pi, int x, int y) const { - int const w = text_.width() + 2 * border_; - int const a = text_.ascent() + border_; - int const h = a + text_.descent() + border_; - pi.pain.fillRectangle(x, y - a, (Wide() ? text_.maxwidth_ : w), h, + TextMetrics & tm = pi.base.bv->textMetrics(&text_); + + int const w = tm.width() + 2 * border_; + int const a = tm.ascent() + border_; + int const h = a + tm.descent() + border_; + pi.pain.fillRectangle(x, y - a, (wide() ? tm.maxWidth() : w), h, backgroundColor()); text_.drawSelection(pi, x, y); } -bool InsetText::covers(BufferView & bv, int x, int y) const +bool InsetText::covers(BufferView const & bv, int x, int y) const { + TextMetrics const & tm = bv.textMetrics(&text_); + return bv.coordCache().getInsets().has(this) && x >= xo(bv) - && x <= xo(bv) + width() + (Wide() ? text_.maxwidth_ : 0) + && x <= xo(bv) + width() + (wide() ? tm.maxWidth() : 0) && y >= yo(bv) - ascent() && y <= yo(bv) + descent(); } @@ -230,7 +237,6 @@ docstring const InsetText::editMessage() const void InsetText::edit(LCursor & cur, bool left) { //lyxerr << "InsetText: edit left/right" << endl; - setViewCache(&cur.bv()); int const pit = left ? 0 : paragraphs().size() - 1; int const pos = left ? 0 : paragraphs().back().size(); text_.setCursor(cur.top(), pit, pos); @@ -250,7 +256,6 @@ void InsetText::doDispatch(LCursor & cur, FuncRequest & cmd) lyxerr[Debug::ACTION] << BOOST_CURRENT_FUNCTION << " [ cmd.action = " << cmd.action << ']' << endl; - setViewCache(&cur.bv()); text_.dispatch(cur, cmd); } @@ -314,7 +319,7 @@ int InsetText::plaintext(Buffer const & buf, odocstream & os, bool ref_printed = false; odocstringstream oss; for (; it != end; ++it) - asciiParagraph(buf, *it, oss, runparams, ref_printed); + writePlaintextParagraph(buf, *it, oss, runparams, ref_printed); docstring const str = oss.str(); os << str; @@ -338,11 +343,11 @@ void InsetText::validate(LaTeXFeatures & features) const } -void InsetText::cursorPos(BufferView const & /*bv*/, +void InsetText::cursorPos(BufferView const & bv, CursorSlice const & sl, bool boundary, int & x, int & y) const { - x = text_.cursorX(sl, boundary) + border_; - y = text_.cursorY(sl, boundary); + x = text_.cursorX(bv, sl, boundary) + border_; + y = text_.cursorY(bv, sl, boundary); } @@ -400,16 +405,6 @@ void InsetText::setFrameColor(LColor_color col) } -void InsetText::setViewCache(BufferView const * bv) const -{ - if (bv && bv != text_.bv_owner) { - //lyxerr << "setting view cache from " - // << text_.bv_owner << " to " << bv << "\n"; - text_.bv_owner = const_cast(bv); - } -} - - void InsetText::appendParagraphs(Buffer * buffer, ParagraphList & plist) { // There is little we can do here to keep track of changes. @@ -446,10 +441,10 @@ void InsetText::addPreview(PreviewLoader & loader) const //FIXME: instead of this hack, which only works by chance, // cells should have their own insetcell type, which returns CELL_CODE! -bool InsetText::neverIndent() const +bool InsetText::neverIndent(Buffer const & buffer) const { // this is only true for tabular cells - return !text_.isMainText() && lyxCode() == TEXT_CODE; + return !text_.isMainText(buffer) && lyxCode() == TEXT_CODE; }