]> git.lyx.org Git - features.git/blobdiff - src/insets/InsetCaption.cpp
Replace the hardcoded TEXT_TO_INSET_OFFSET by tunable values
[features.git] / src / insets / InsetCaption.cpp
index fbb55fc706976f2914e0b3921c6a8d904d2e046e..43147ff8646ce03a9cf77ba541155fe174fc54ed 100644 (file)
@@ -17,7 +17,6 @@
 #include "Buffer.h"
 #include "BufferParams.h"
 #include "BufferView.h"
-#include "Counters.h"
 #include "Cursor.h"
 #include "Dimension.h"
 #include "Floating.h"
@@ -32,6 +31,8 @@
 #include "OutputParams.h"
 #include "Paragraph.h"
 #include "ParIterator.h"
+#include "TexRow.h"
+#include "texstream.h"
 #include "TextClass.h"
 #include "TextMetrics.h"
 #include "TocBackend.h"
@@ -51,11 +52,11 @@ namespace lyx {
 
 
 InsetCaption::InsetCaption(Buffer * buf, string const & type)
-    : InsetText(buf, InsetText::PlainLayout), 
+    : InsetText(buf, InsetText::PlainLayout),
       labelwidth_(0), is_subfloat_(false), type_(type)
 {
        setDrawFrame(true);
-       setFrameColor(Color_collapsableframe);
+       setFrameColor(Color_collapsibleframe);
 }
 
 
@@ -85,14 +86,8 @@ void InsetCaption::cursorPos(BufferView const & bv,
 }
 
 
-void InsetCaption::setCustomLabel(docstring const & label)
-{
-       custom_label_ = translateIfPossible(label);
-}
-
-
 void InsetCaption::addToToc(DocIterator const & cpit, bool output_active,
-                                                       UpdateType utype) const
+                                                       UpdateType utype, TocBackend & backend) const
 {
        string const & type = floattype_.empty() ? "senseless" : floattype_;
        DocIterator pit = cpit;
@@ -107,9 +102,9 @@ void InsetCaption::addToToc(DocIterator const & cpit, bool output_active,
                str = full_label_;
                text().forOutliner(str, length);
        }
-       buffer().tocBackend().builder(type).captionItem(pit, str, output_active);
+       backend.builder(type).captionItem(pit, str, output_active);
        // Proceed with the rest of the inset.
-       InsetText::addToToc(cpit, output_active, utype);
+       InsetText::addToToc(cpit, output_active, utype, backend);
 }
 
 
@@ -119,7 +114,7 @@ void InsetCaption::metrics(MetricsInfo & mi, Dimension & dim) const
        mi.base.font = mi.base.bv->buffer().params().getFont().fontInfo();
        labelwidth_ = theFontMetrics(mi.base.font).width(full_label_);
        // add some space to separate the label from the inset text
-       labelwidth_ += 2 * TEXT_TO_INSET_OFFSET;
+       labelwidth_ += leftOffset(mi.base.bv) + rightOffset(mi.base.bv);
        dim.wid = labelwidth_;
        Dimension textdim;
        // Correct for button and label width
@@ -136,8 +131,8 @@ 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();
+       int const h = tm.height() + topOffset(pi.base.bv) + bottomOffset(pi.base.bv);
+       int const yy = y - topOffset(pi.base.bv) - tm.ascent();
        pi.pain.fillRectangle(x, yy, labelwidth_, h, pi.backgroundColor(this));
 }
 
@@ -155,7 +150,7 @@ 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.base.font.setColor(pi.textColor(pi.base.font.color()).baseColor);
-       int const xx = x + TEXT_TO_INSET_OFFSET;
+       int const xx = x + leftOffset(pi.base.bv);
        pi.pain.text(xx, y, full_label_, pi.base.font);
        InsetText::draw(pi, x + labelwidth_, y);
        pi.base.font = tmpfont;
@@ -207,6 +202,8 @@ void InsetCaption::doDispatch(Cursor & cur, FuncRequest & cmd)
                        break;
                }
        }
+       // no "changetype":
+       // fall through
 
        default:
                InsetText::doDispatch(cur, cmd);
@@ -261,7 +258,16 @@ void InsetCaption::latex(otexstream & os,
        // \caption{...}, later we will make it take advantage
        // of the one of the caption packages. (Lgb)
        OutputParams runparams = runparams_in;
+       // Some fragile commands (labels, index entries)
+       // are output after the caption (#2154)
+       runparams.postpone_fragile_stuff = buffer().masterParams().postpone_fragile_content;
        InsetText::latex(os, runparams);
+       if (!runparams.post_macro.empty()) {
+               // Output the stored fragile commands (labels, indices etc.)
+               // that need to be output after the caption.
+               os << runparams.post_macro;
+               runparams.post_macro.clear();
+       }
        // Backwards compatibility: We always had a linebreak after
        // the caption (see #8514)
        os << breakln;
@@ -302,7 +308,7 @@ docstring InsetCaption::xhtml(XHTMLStream & xs, OutputParams const & rp) const
                string const our_class = "float-caption-" + type_;
                size_t const loc = attr.find("class='");
                if (loc != string::npos)
-                       attr.insert(loc + 7, our_class+ " ");
+                       attr.insert(loc + 7, our_class + " ");
                else
                        attr = attr + " class='" + our_class + "'";
        }
@@ -320,12 +326,14 @@ void InsetCaption::getArgument(otexstream & os,
 
        if (!il.leftdelim().empty())
                os << il.leftdelim();
+
        OutputParams rp = runparams;
        if (isPassThru())
                rp.pass_thru = true;
        if (il.isNeedProtect())
                rp.moving_arg = true;
+       if (il.isNeedMBoxProtect())
+               ++rp.inulemcmd;
        rp.par_begin = 0;
        rp.par_end = paragraphs().size();
 
@@ -385,7 +393,8 @@ void InsetCaption::updateBuffer(ParIterator const & it, UpdateType utype)
                else
                        name = master.B_(tclass.floats().getType(type).name());
                docstring counter = from_utf8(type);
-               if ((is_subfloat_ = cnts.isSubfloat())) {
+               is_subfloat_ = cnts.isSubfloat();
+               if (is_subfloat_) {
                        // only standard captions allowed in subfloats
                        type_ = "Standard";
                        counter = "sub-" + from_utf8(type);