diff options
author | Neil <nyamatongwe@gmail.com> | 2015-09-23 09:33:21 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2015-09-23 09:33:21 +1000 |
commit | a1104a01eb27a3ca87b1d04d75189c5ee40c7651 (patch) | |
tree | 2beb0d1376d40c574a568b8ebd49c9aa142925fb /src/EditView.cxx | |
parent | 7d38203480abda0f0a8a73f1c374ff91e38dda14 (diff) | |
download | scintilla-mirror-a1104a01eb27a3ca87b1d04d75189c5ee40c7651.tar.gz |
When SC_MARK_UNDERLINE if not assigned to a margin, stop drawing the whole line.
Optimise drawing of markers that appear in the text area.
Diffstat (limited to 'src/EditView.cxx')
-rw-r--r-- | src/EditView.cxx | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/src/EditView.cxx b/src/EditView.cxx index f8912a991..072a715f4 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -1408,27 +1408,26 @@ static void DrawTranslucentLineState(Surface *surface, const EditModel &model, c if ((model.caret.active || vsDraw.alwaysShowCaretLineBackground) && vsDraw.showCaretLineBackground && ll->containsCaret) { SimpleAlphaRectangle(surface, rcLine, vsDraw.caretLineBackground, vsDraw.caretLineAlpha); } - int marks = model.pdoc->GetMark(line); - for (int markBit = 0; (markBit < 32) && marks; markBit++) { - if ((marks & 1) && (vsDraw.markers[markBit].markType == SC_MARK_BACKGROUND)) { - SimpleAlphaRectangle(surface, rcLine, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha); - } else if ((marks & 1) && (vsDraw.markers[markBit].markType == SC_MARK_UNDERLINE)) { - PRectangle rcUnderline = rcLine; - rcUnderline.top = rcUnderline.bottom - 2; - SimpleAlphaRectangle(surface, rcUnderline, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha); + const int marksOfLine = model.pdoc->GetMark(line); + int marksDrawnInText = marksOfLine & vsDraw.maskDrawInText; + for (int markBit = 0; (markBit < 32) && marksDrawnInText; markBit++) { + if (marksDrawnInText & 1) { + if (vsDraw.markers[markBit].markType == SC_MARK_BACKGROUND) { + SimpleAlphaRectangle(surface, rcLine, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha); + } else if (vsDraw.markers[markBit].markType == SC_MARK_UNDERLINE) { + PRectangle rcUnderline = rcLine; + rcUnderline.top = rcUnderline.bottom - 2; + SimpleAlphaRectangle(surface, rcUnderline, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha); + } } - marks >>= 1; + marksDrawnInText >>= 1; } - if (vsDraw.maskInLine) { - int marksMasked = model.pdoc->GetMark(line) & vsDraw.maskInLine; - if (marksMasked) { - for (int markBit = 0; (markBit < 32) && marksMasked; markBit++) { - if ((marksMasked & 1) && (vsDraw.markers[markBit].markType != SC_MARK_EMPTY)) { - SimpleAlphaRectangle(surface, rcLine, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha); - } - marksMasked >>= 1; - } + int marksDrawnInLine = marksOfLine & vsDraw.maskInLine; + for (int markBit = 0; (markBit < 32) && marksDrawnInLine; markBit++) { + if (marksDrawnInLine & 1) { + SimpleAlphaRectangle(surface, rcLine, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha); } + marksDrawnInLine >>= 1; } } |