bool InsetCaption::metrics(MetricsInfo & mi, Dimension & dim) const
{
- mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET;
- if (type_.empty())
- full_label_ = _("Senseless!!! ");
- else {
- docstring const number = convert<docstring>(counter_);
- docstring label = custom_label_.empty()? _(type_): custom_label_;
- full_label_ = bformat(from_ascii("%1$s %2$s:"), label, number);
- }
+ int const width_offset = TEXT_TO_INSET_OFFSET / 2;
+ mi.base.textwidth -= width_offset;
+
+ computeFullLabel();
+
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;
dim.wid = labelwidth_;
Dimension textdim;
InsetText::metrics(mi, textdim);
dim.wid += textdim.wid;
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;
+ dim.wid += width_offset;
+ mi.base.textwidth += width_offset;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
// Answer: the text inset (in buffer_funcs.C: setCaption).
labelwidth_ = pi.pain.text(x, y, full_label_, pi.base.font);
+ // add some space to separate the label from the inset text
+ labelwidth_ += 2 * TEXT_TO_INSET_OFFSET;
InsetText::draw(pi, x + labelwidth_, y);
setPosCache(pi, x, y);
}
void InsetCaption::drawSelection(PainterInfo & pi, int x, int y) const
{
- InsetText::drawSelection(pi, x + labelwidth_ , y);
+ InsetText::drawSelection(pi, x + labelwidth_, y);
}
int InsetCaption::latex(Buffer const & buf, odocstream & os,
- OutputParams const & runparams_in) const
+ OutputParams const & runparams_in) const
{
// This is a bit too simplistic to take advantage of
// caption options we must add more later. (Lgb)
os << '{';
l += InsetText::latex(buf, os, runparams);
os << "}\n";
+ runparams_in.encoding = runparams.encoding;
return l + 1;
}
int InsetCaption::plaintext(Buffer const & buf, odocstream & os,
- OutputParams const & runparams) const
+ OutputParams const & runparams) const
{
- os << full_label_ << ' ';
- return InsetText::plaintext(buf, os, runparams);
+ computeFullLabel();
+
+ os << '[' << full_label_ << "\n";
+ InsetText::plaintext(buf, os, runparams);
+ os << "\n]";
+
+ return PLAINTEXT_NEWLINE + 1; // one char on a separate line
}
int InsetCaption::docbook(Buffer const & buf, odocstream & os,
- OutputParams const & runparams) const
+ OutputParams const & runparams) const
{
int ret;
os << "<title>";
}
+void InsetCaption::computeFullLabel() const
+{
+ if (type_.empty())
+ full_label_ = _("Senseless!!! ");
+ else {
+ docstring const number = convert<docstring>(counter_);
+ docstring label = custom_label_.empty()? _(type_): custom_label_;
+ full_label_ = bformat(from_ascii("%1$s %2$s:"), label, number);
+ }
+}
+
+
auto_ptr<InsetBase> InsetCaption::doClone() const
{
return auto_ptr<InsetBase>(new InsetCaption(*this));