From 4cb9cd44ec196ff9fc03ab858ab50750892eb3f3 Mon Sep 17 00:00:00 2001 From: Martin Vermeer Date: Tue, 20 Jun 2006 12:39:39 +0000 Subject: [PATCH] Redefine the speed-up "Wide" patch to draw proper boxes in available space instead of line pairs. * rowpainter.C (paintPar): change background rectangle * insets/insettext.C (InsetText::draw): (InsetText::drawSelection): simplify rectangle drawing * insets/insettext.h: dump Tall() * insets/insetcollapsable.C (InsetCollapsable::metrics): subtract button from available space in case of inlined inset git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14161 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/insets/insetcollapsable.C | 3 +++ src/insets/insettext.C | 24 ++++-------------------- src/insets/insettext.h | 2 -- src/rowpainter.C | 7 +++---- 4 files changed, 10 insertions(+), 26 deletions(-) diff --git a/src/insets/insetcollapsable.C b/src/insets/insetcollapsable.C index 15a29a5981..1c9da8cc52 100644 --- a/src/insets/insetcollapsable.C +++ b/src/insets/insetcollapsable.C @@ -140,6 +140,9 @@ void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const InsetText::metrics(mi, textdim_); openinlined_ = textdim_.wid + 2 * dim.wid <= mi.base.textwidth; if (openinlined_) { + // Correct for button width, and re-fit + mi.base.textwidth -= dim.wid; + InsetText::metrics(mi, textdim_); dim.wid += textdim_.wid; dim.des = max(dim.des - textdim_.asc + dim.asc, textdim_.des); dim.asc = textdim_.asc; diff --git a/src/insets/insettext.C b/src/insets/insettext.C index 950e191a73..8bcc58ef48 100644 --- a/src/insets/insettext.C +++ b/src/insets/insettext.C @@ -207,13 +207,8 @@ void InsetText::draw(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_; - int const ww = pi.base.bv->workWidth(); - if (w > ww - 40 || Wide()) { - pi.pain.line(0, y - a, ww, y - a, frameColor()); - pi.pain.line(0, y - a + h, ww, y - a + h, frameColor()); - } else { - pi.pain.rectangle(x, y - a, w, h, frameColor()); - } + pi.pain.rectangle(x, y - a, (Wide() ? text_.maxwidth_ : w), h, + frameColor()); } } @@ -223,13 +218,8 @@ 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_; - int const ww = pi.base.bv->workWidth(); - if (Wide()) - pi.pain.fillRectangle(0, y - a, ww, h, - backgroundColor()); - else - pi.pain.fillRectangle(x, y - a, w, h, - backgroundColor()); + pi.pain.fillRectangle(x, y - a, (Wide() ? text_.maxwidth_ : w), h, + backgroundColor()); text_.drawSelection(pi, x, y); } @@ -258,12 +248,6 @@ InsetBase * InsetText::editXY(LCursor & cur, int x, int y) } -bool const InsetText::Tall() const -{ - return text_.ascent() + text_.descent() > 2 * defaultRowHeight(); -} - - void InsetText::forceParagraphsToDefault(LCursor & cur) { BufferParams const & bp = cur.buffer().params(); diff --git a/src/insets/insettext.h b/src/insets/insettext.h index c98102b08b..ecf7e0d431 100644 --- a/src/insets/insettext.h +++ b/src/insets/insettext.h @@ -142,8 +142,6 @@ public: /// bool & Wide() const { return wide_inset_; } /// - bool const Tall() const; - /// void forceParagraphsToDefault(LCursor & cur); protected: diff --git a/src/rowpainter.C b/src/rowpainter.C index a82f7fa3bc..e9340dce93 100644 --- a/src/rowpainter.C +++ b/src/rowpainter.C @@ -819,8 +819,7 @@ void paintPar if (in) { InsetText const * const t = in->asTextInset(); if (t) - t->Wide() = in_inset_alone_on_row && - t->Tall(); + t->Wide() = in_inset_alone_on_row; } } @@ -838,8 +837,8 @@ void paintPar // (if paragraph background was not cleared) if (!repaintAll && (!in_inset_alone_on_row || row_has_changed)) { - pi.pain.fillRectangle(( rowno ? 0 : x - 10 ), y - rit->ascent(), - pi.base.bv->workWidth(), rit->height(), + pi.pain.fillRectangle(x, y - rit->ascent(), + text.maxwidth_, rit->height(), text.backgroundColor()); // If outer row has changed, force nested // insets to repaint completely -- 2.39.2