From: Martin Vermeer Date: Sun, 19 Aug 2007 15:45:35 +0000 (+0000) Subject: Cleanup 2: moving more stuff charstyle -> collapsable X-Git-Tag: 1.6.10~8801 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=2b927e1575320ed5782dab610d31d5f5f68c6c26;p=features.git Cleanup 2: moving more stuff charstyle -> collapsable git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19648 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/insets/InsetCharStyle.cpp b/src/insets/InsetCharStyle.cpp index 5822b50f82..6f10c16afb 100644 --- a/src/insets/InsetCharStyle.cpp +++ b/src/insets/InsetCharStyle.cpp @@ -134,18 +134,9 @@ bool InsetCharStyle::metrics(MetricsInfo & mi, Dimension & dim) const getDrawFont(mi.base.font); mi.base.font.reduce(Font(Font::ALL_SANE)); mi.base.font.realize(tmpfont); - mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET; - InsetText::metrics(mi, dim); + bool changed = InsetCollapsable::metrics(mi, dim); mi.base.font = tmpfont; if (status() == Open) { - // consider width of the inset label - Font font(layout_.labelfont); - font.realize(Font(Font::ALL_SANE)); - font.decSize(); - font.decSize(); - int w = 0; - int a = 0; - int d = 0; // FIXME UNICODE docstring s(from_utf8(params_.name)); if (undefined()) @@ -153,21 +144,8 @@ bool InsetCharStyle::metrics(MetricsInfo & mi, Dimension & dim) const // Chop off prefix: if (s.find(':') != string::npos) s = s.substr(s.find(':')); - theFontMetrics(font).rectText(s, w, a, d); - dim.wid = max(dim.wid, w); + layout_.labelstring = s; } - 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; - if (status() == Open) - dim.des += ascent(); - else { - dim.des -= 3; - dim.asc -= 3; - } - bool const changed = dim_ != dim; - dim_ = dim; return changed; } @@ -183,27 +161,8 @@ void InsetCharStyle::draw(PainterInfo & pi, int x, int y) const InsetCollapsable::draw(pi, x, y); pi.base.font = tmpfont; - int desc = InsetText::descent(); - if (status() == Open) - desc -= ascent(); - else - desc -= 3; - - pi.pain.line(x, y + desc - 4, x, y + desc, layout_.labelfont.color()); - pi.pain.line(x, y + desc, x + dim_.wid - 3, y + desc, - layout_.labelfont.color()); - pi.pain.line(x + dim_.wid - 3, y + desc, x + dim_.wid - 3, y + desc - 4, - layout_.labelfont.color()); - // the name of the charstyle. Can be toggled. if (status() == Open) { - Font font(layout_.labelfont); - font.realize(Font(Font::ALL_SANE)); - font.decSize(); - font.decSize(); - int w = 0; - int a = 0; - int d = 0; // FIXME UNICODE docstring s(from_utf8(params_.name)); if (undefined()) @@ -211,22 +170,7 @@ void InsetCharStyle::draw(PainterInfo & pi, int x, int y) const // Chop off prefix: if (s.find(':') != string::npos) s = s.substr(s.find(':')); - theFontMetrics(font).rectText(s, w, a, d); - pi.pain.rectText(x + (dim_.wid - w) / 2, y + desc + a, - s, font, Color::none, Color::none); - } - - // a visual cue when the cursor is inside the inset - Cursor & cur = pi.base.bv->cursor(); - if (cur.isInside(this)) { - y -= ascent(); - y += 3; - pi.pain.line(x, y + 4, x, y, layout_.labelfont.color()); - pi.pain.line(x + 4, y, x, y, layout_.labelfont.color()); - pi.pain.line(x + dim_.wid - 3, y + 4, x + dim_.wid - 3, y, - layout_.labelfont.color()); - pi.pain.line(x + dim_.wid - 7, y, x + dim_.wid - 3, y, - layout_.labelfont.color()); + layout_.labelstring = s; } } @@ -243,7 +187,7 @@ void InsetCharStyle::doDispatch(Cursor & cur, FuncRequest & cmd) case LFUN_MOUSE_RELEASE: if (cmd.button() == mouse_button::button3) - if (status() == Open) + if (internalStatus() == Open) setStatus(cur, Collapsed); else setStatus(cur, Open); @@ -257,7 +201,7 @@ void InsetCharStyle::doDispatch(Cursor & cur, FuncRequest & cmd) else if (cmd.argument() == "close") setStatus(cur, Collapsed); else if (cmd.argument() == "toggle" || cmd.argument().empty()) - if (status() == Open) + if (internalStatus() == Open) setStatus(cur, Collapsed); else setStatus(cur, Open); diff --git a/src/insets/InsetCollapsable.cpp b/src/insets/InsetCollapsable.cpp index d248bed312..a04e962317 100644 --- a/src/insets/InsetCollapsable.cpp +++ b/src/insets/InsetCollapsable.cpp @@ -178,8 +178,29 @@ bool InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const switch (decoration()) { case Minimalistic: + InsetText::metrics(mi, dim); + break; case Conglomerate: InsetText::metrics(mi, dim); + if (status() == Open) { + // consider width of the inset label + Font font(layout_.labelfont); + font.realize(Font(Font::ALL_SANE)); + font.decSize(); + font.decSize(); + int w = 0; + int a = 0; + int d = 0; + docstring s = layout_.labelstring; + theFontMetrics(font).rectText(s, w, a, d); + dim.wid = max(dim.wid, w); + } + if (status() == Open) + dim.des += ascent(); + else { + dim.des -= 3; + dim.asc -= 3; + } break; case Classic: dim = dimensionCollapsed(); @@ -259,13 +280,64 @@ void InsetCollapsable::draw(PainterInfo & pi, int x, int y) const break; case SubLabel: case Corners: - // FIXME add handling of SubLabel, Corners - // still in CharStyle textx = xx; texty = y + textdim_.asc; const_cast(this)->setDrawFrame(false); InsetText::draw(pi, textx, texty); const_cast(this)->setDrawFrame(true); + + int desc = InsetText::descent(); + if (status() == Open) + desc -= ascent(); + else + desc -= 3; + + pi.pain.line(x, y + desc - 4, x, y + desc, + layout_.labelfont.color()); + if (internalStatus() == Open) + pi.pain.line(x, y + desc, + x + dim_.wid - 3, y + desc, + layout_.labelfont.color()); + else { + // Make status_ value visible: + pi.pain.line(x, y + desc, + x + 4, y + desc, + layout_.labelfont.color()); + pi.pain.line(x + dim_.wid - 7, y + desc, + x + dim_.wid -3, y + desc, + layout_.labelfont.color()); + } + pi.pain.line(x + dim_.wid - 3, y + desc, x + dim_.wid - 3, y + desc - 4, + layout_.labelfont.color()); + + // the label of the charstyle. Can be toggled. + if (status() == Open) { + Font font(layout_.labelfont); + font.realize(Font(Font::ALL_SANE)); + font.decSize(); + font.decSize(); + int w = 0; + int a = 0; + int d = 0; + // FIXME UNICODE + docstring s = layout_.labelstring; + theFontMetrics(font).rectText(s, w, a, d); + pi.pain.rectText(x + (dim_.wid - w) / 2, y + desc + a, + s, font, Color::none, Color::none); + } + + // a visual cue when the cursor is inside the inset + Cursor & cur = pi.base.bv->cursor(); + if (cur.isInside(this)) { + y -= ascent(); + y += 3; + pi.pain.line(x, y + 4, x, y, layout_.labelfont.color()); + pi.pain.line(x + 4, y, x, y, layout_.labelfont.color()); + pi.pain.line(x + dim_.wid - 3, y + 4, x + dim_.wid - 3, y, + layout_.labelfont.color()); + pi.pain.line(x + dim_.wid - 7, y, x + dim_.wid - 3, y, + layout_.labelfont.color()); + } break; } setPosCache(pi, x, y); diff --git a/src/insets/InsetCollapsable.h b/src/insets/InsetCollapsable.h index cf45b8bd0e..e9540c7414 100644 --- a/src/insets/InsetCollapsable.h +++ b/src/insets/InsetCollapsable.h @@ -154,6 +154,8 @@ protected: mutable int topbaseline; /// mutable InsetLayout layout_; + /// + CollapseStatus internalStatus() const { return status_; } private: /// mutable CollapseStatus status_;