It is a general problem when doing graphics to know where a line
begins and where it ends pixel-wise. At the instigation of Scott, and
with the use of the kmag magnifier, this commit corrects 3 areas:
* foreign marks were larger than the row element they were supposed to
mark. This could lead to moving lines, depending on paint ordering.
* visible spaces were drawn outside of their box (select a single
space to see this).
* the `L' blinking caret would leave a cursor dropping because the
horizontal part was too wide.
int const desc = e.inset ? e.dim.descent() : 0;
int const y = yo_ + min(3 * pi_.base.solidLineOffset() / 2 + desc,
row_.descent() - 1);
int const desc = e.inset ? e.dim.descent() : 0;
int const y = yo_ + min(3 * pi_.base.solidLineOffset() / 2 + desc,
row_.descent() - 1);
- pi_.pain.line(int(x_), y, int(x_ + e.full_width()), y, Color_language,
+ pi_.pain.line(int(x_), y, int(x_ + e.full_width() - 1), y, Color_language,
Painter::line_solid, pi_.base.solidLineThickness());
}
Painter::line_solid, pi_.base.solidLineThickness());
}
painter.setPen(color_);
if (l_shape_) {
if (rtl_)
painter.setPen(color_);
if (l_shape_) {
if (rtl_)
- painter.drawLine(x_, bot, x_ - l, bot);
+ painter.drawLine(x_, bot, x_ - l + 1, bot);
- painter.drawLine(x_, bot, x_ + caret_width_ + r, bot);
+ painter.drawLine(x_, bot, x_ + caret_width_ + r - 1, bot);
}
// draw completion triangle
}
// draw completion triangle
int const h = theFontMetrics(pi.base.font).xHeight();
int xp[4], yp[4];
int const h = theFontMetrics(pi.base.font).xHeight();
int xp[4], yp[4];
yp[0] = y - max(h / 4, 1);
if (params_.kind == InsetSpaceParams::NORMAL ||
params_.kind == InsetSpaceParams::PROTECTED ||
params_.kind == InsetSpaceParams::VISIBLE) {
yp[0] = y - max(h / 4, 1);
if (params_.kind == InsetSpaceParams::NORMAL ||
params_.kind == InsetSpaceParams::PROTECTED ||
params_.kind == InsetSpaceParams::VISIBLE) {
- xp[1] = x; yp[1] = y;
- xp[2] = x + w; yp[2] = y;
+ xp[1] = x + 1; yp[1] = y;
+ xp[2] = x + w - 2; yp[2] = y;
- xp[1] = x; yp[1] = y + max(h / 4, 1);
- xp[2] = x + w; yp[2] = y + max(h / 4, 1);
+ xp[1] = x + 1; yp[1] = y + max(h / 4, 1);
+ xp[2] = x + w - 2; yp[2] = y + max(h / 4, 1);
yp[3] = y - max(h / 4, 1);
Color col = Color_special;
yp[3] = y - max(h / 4, 1);
Color col = Color_special;