break;
case InsetSpaceParams::CUSTOM:
case InsetSpaceParams::CUSTOM_PROTECTED:
- dim.wid = params_.length.inBP();
+ dim.wid = max(4, abs(params_.length.inBP()));
break;
case InsetSpaceParams::HFILL:
case InsetSpaceParams::HFILL_PROTECTED:
if (isStretchableSpace()) {
int const asc = theFontMetrics(pi.base.font).ascent('M');
int const desc = theFontMetrics(pi.base.font).descent('M');
- //Pixel height divisible by 2 for prettier fill graphics:
+ // Pixel height divisible by 2 for prettier fill graphics:
int const oddheight = (asc ^ desc) & 1;
int const x0 = x + 1;
int const x1 = x + dim.wid - 2;
int const y2 = (y0 + y1) / 2;
int xoffset = (y0 - y1) / 2;
- //Two tests for very narrow insets
+ // Two tests for very narrow insets
if (xoffset > x1 - x0
&& (params_.kind == InsetSpaceParams::LEFTARROWFILL
|| params_.kind == InsetSpaceParams::RIGHTARROWFILL))
xp[3] = x + w;
yp[3] = y - max(h / 4, 1);
+ if (params_.length.inBP() < 0) {
+ // turn symbol upside down. A prettier solution would use
+ // inverted arrows (like in VSpace).
+ swap(yp[0], yp[1]);
+ swap(yp[2], yp[3]);
+ }
if (params_.kind == InsetSpaceParams::PROTECTED ||
params_.kind == InsetSpaceParams::ENSPACE ||
params_.kind == InsetSpaceParams::NEGTHIN ||
if (lex.checkFor("\\length"))
lex >> length;
- lex >> "\\end_inset";
}
void InsetSpace::write(ostream & os) const
{
- os << "Space ";
+ os << "space ";
params_.write(os);
}
void InsetSpace::read(Lexer & lex)
{
params_.read(lex);
+ lex >> "\\end_inset";
}
lex.setContext("InsetSpace::string2params");
lex >> "space";
- params.read(lex);
+ // There are cases, such as when we are called via getStatus() from
+ // Dialog::canApply(), where we are just called with "space" rather
+ // than a full "space \type{}\n\\end_inset".
+ if (lex.isOK())
+ params.read(lex);
}