void RowPainter::paintInset(Row::Element const & e) const
{
- // Handle selection
+ // Handle selection (first left/right, then middle).
+ pi_.selected_left = pi_.selected
+ || (row_.isRTL() ? row_.end_margin_sel : row_.begin_margin_sel);
+ pi_.selected_right = pi_.selected
+ || (row_.isRTL() ? row_.begin_margin_sel : row_.end_margin_sel);
bool const pi_selected = pi_.selected;
Cursor const & cur = pi_.base.bv->cursor();
if (cur.selection() && cur.text() == &text_
if (!row_.selection())
return;
- int const y1 = yo_ - (row_.begin_margin_sel ? row_.ascent()
- : row_.contents_dim().asc);
- int const y2 = yo_ + (row_.end_margin_sel ? row_.descent()
- : row_.contents_dim().des);
+ int const y1 = yo_ - row_.contents_dim().asc;
+ int const y2 = yo_ + row_.contents_dim().des;
- // draw the margins
+ // The top selection
+ if (row_.begin_margin_sel)
+ pi_.pain.fillRectangle(int(xo_), yo_ - row_.ascent(),
+ tm_.width(), row_.ascent() - row_.contents_dim().asc,
+ Color_selection);
+
+ // The left margin selection
if (row_.isRTL() ? row_.end_margin_sel : row_.begin_margin_sel)
pi_.pain.fillRectangle(int(xo_), y1, row_.left_margin, y2 - y1,
Color_selection);
x += e.full_width();
}
+ // the right margin selection
if (row_.isRTL() ? row_.begin_margin_sel : row_.end_margin_sel)
pi_.pain.fillRectangle(int(x), y1,
int(xo_ + tm_.width()) - int(x), y2 - y1,
Color_selection);
+ // The bottom selection
+ if (row_.end_margin_sel)
+ pi_.pain.fillRectangle(int(xo_), yo_ + row_.contents_dim().des,
+ tm_.width(), row_.descent() - row_.contents_dim().des,
+ Color_selection);
}
void RowPainter::paintBookmark(int num) const
{
- int const x = row_.isRTL()
- ? pi_.base.bv->workWidth() - pi_.base.bv->rightMargin() : 0;
- FontInfo fi = pi_.base.bv->buffer().params().getFont().fontInfo();
+ BufferView const * bv = pi_.base.bv;
+ FontInfo fi = bv->buffer().params().getFont().fontInfo();
+ FontMetrics const & fm = theFontMetrics(fi);
fi.setColor(Color_bookmark);
// ❶ U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE
char_type const ch = 0x2775 + num;
+ int const x = row_.isRTL()
+ ? bv->workWidth() - bv->rightMargin() + (bv->defaultMargin() - fm.width(ch)) / 2
+ : bv->leftMargin() - (bv->defaultMargin() + fm.width(ch)) / 2;
pi_.pain.text(x, yo_, ch, fi);
}