X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetCaption.cpp;h=b1c4e08d1a4b1a9c0b51763c16c95db3ff32ff61;hb=dbb1ac30e9a87007af7c53f0f93ec9e21826f90b;hp=09c78557085a66f6b346c86abdaaeb78ef622484;hpb=8480d1dd9af6f3d403ea42e2b891d38dd3ce2509;p=lyx.git diff --git a/src/insets/InsetCaption.cpp b/src/insets/InsetCaption.cpp index 09c7855708..b1c4e08d1a 100644 --- a/src/insets/InsetCaption.cpp +++ b/src/insets/InsetCaption.cpp @@ -32,6 +32,7 @@ #include "OutputParams.h" #include "Paragraph.h" #include "TextClass.h" +#include "TextMetrics.h" #include "TocBackend.h" #include "frontends/FontMetrics.h" @@ -53,7 +54,7 @@ InsetCaption::InsetCaption(Buffer * buf) { setAutoBreakRows(true); setDrawFrame(true); - setFrameColor(Color_captionframe); + setFrameColor(Color_collapsableframe); } @@ -64,7 +65,7 @@ void InsetCaption::write(ostream & os) const } -docstring InsetCaption::name() const +docstring InsetCaption::layoutName() const { if (type_.empty()) return from_ascii("Caption"); @@ -72,18 +73,6 @@ docstring InsetCaption::name() const } -void InsetCaption::read(Lexer & lex) -{ -#if 0 - // We will enably this check again when the compability - // code is removed from Buffer::Read (Lgb) - lex.setContext("InsetCaption::Read: consistency check"); - lex >> "Caption"; -#endif - InsetText::read(lex); -} - - void InsetCaption::cursorPos(BufferView const & bv, CursorSlice const & sl, bool boundary, int & x, int & y) const { @@ -103,16 +92,17 @@ void InsetCaption::setCustomLabel(docstring const & label) } -void InsetCaption::addToToc(DocIterator const & cpit) +void InsetCaption::addToToc(DocIterator const & cpit) const { if (type_.empty()) return; DocIterator pit = cpit; - pit.push_back(CursorSlice(*this)); + pit.push_back(CursorSlice(const_cast(*this))); Toc & toc = buffer().tocBackend().toc(type_); - docstring const str = full_label_ + ". " + text().getPar(0).asString(); + docstring str = full_label_ + ". "; + text().forToc(str, TOC_ENTRY_LENGTH); toc.push_back(TocItem(pit, 0, str)); // Proceed with the rest of the inset. @@ -140,6 +130,15 @@ void InsetCaption::metrics(MetricsInfo & mi, Dimension & dim) const } +void InsetCaption::drawBackground(PainterInfo & pi, int x, int y) const +{ + TextMetrics & tm = pi.base.bv->textMetrics(&text()); + int const h = tm.height() + 2 * TEXT_TO_INSET_OFFSET; + int const yy = y - TEXT_TO_INSET_OFFSET - tm.ascent(); + pi.pain.fillRectangle(x, yy, labelwidth_, h, pi.backgroundColor(this)); +} + + void InsetCaption::draw(PainterInfo & pi, int x, int y) const { // We must draw the label, we should get the label string @@ -152,7 +151,9 @@ void InsetCaption::draw(PainterInfo & pi, int x, int y) const FontInfo tmpfont = pi.base.font; pi.base.font = pi.base.bv->buffer().params().getFont().fontInfo(); - pi.pain.text(x, y, full_label_, pi.base.font); + pi.base.font.setColor(pi.textColor(pi.base.font.color()).baseColor); + int const xx = x + TEXT_TO_INSET_OFFSET; + pi.pain.text(xx, y, full_label_, pi.base.font); InsetText::draw(pi, x + labelwidth_, y); pi.base.font = tmpfont; } @@ -176,12 +177,14 @@ bool InsetCaption::insetAllowed(InsetCode code) const { switch (code) { // code that is not allowed in a caption - case FLOAT_CODE: - case TABULAR_CODE: - case WRAP_CODE: case CAPTION_CODE: + case FLOAT_CODE: + case FOOT_CODE: case NEWPAGE_CODE: + case MARGIN_CODE: case MATHMACRO_CODE: + case TABULAR_CODE: + case WRAP_CODE: return false; default: return InsetText::insetAllowed(code); @@ -194,11 +197,11 @@ bool InsetCaption::getStatus(Cursor & cur, FuncRequest const & cmd, { switch (cmd.action()) { - case LFUN_BREAK_PARAGRAPH: + case LFUN_PARAGRAPH_BREAK: status.setEnabled(false); return true; - case LFUN_OPTIONAL_INSERT: + case LFUN_ARGUMENT_INSERT: status.setEnabled(cur.paragraph().insetList().find(ARG_CODE) == -1); return true; @@ -213,12 +216,12 @@ bool InsetCaption::getStatus(Cursor & cur, FuncRequest const & cmd, } -int InsetCaption::latex(odocstream & os, - OutputParams const & runparams_in) const +void InsetCaption::latex(otexstream & os, + OutputParams const & runparams_in) const { if (runparams_in.inFloat == OutputParams::SUBFLOAT) // caption is output as an optional argument - return 0; + return; // This is a bit too simplistic to take advantage of // caption options we must add more later. (Lgb) // This code is currently only able to handle the simple @@ -229,12 +232,11 @@ int InsetCaption::latex(odocstream & os, // optional argument. runparams.moving_arg = true; os << "\\caption"; - int l = latexArgInsets(paragraphs()[0], os, runparams, 0, 1); + latexArgInsets(paragraphs()[0], os, runparams, 0, 1); os << '{'; - l += InsetText::latex(os, runparams); + InsetText::latex(os, runparams); os << "}\n"; runparams_in.encoding = runparams.encoding; - return l + 1; } @@ -275,17 +277,17 @@ docstring InsetCaption::xhtml(XHTMLStream & xs, OutputParams const & rp) const } -int InsetCaption::getArgument(odocstream & os, +void InsetCaption::getArgument(otexstream & os, OutputParams const & runparams) const { - return InsetText::latex(os, runparams); + InsetText::latex(os, runparams); } -int InsetCaption::getOptArg(odocstream & os, +void InsetCaption::getOptArg(otexstream & os, OutputParams const & runparams) const { - return latexArgInsets(paragraphs()[0], os, runparams, 0, 1); + latexArgInsets(paragraphs()[0], os, runparams, 0, 1); }