aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/EditView.cxx
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2015-09-23 09:33:21 +1000
committerNeil <nyamatongwe@gmail.com>2015-09-23 09:33:21 +1000
commitc9317c2bdfa092a531ed5ba0ec9f5115689489ac (patch)
tree9511dd654e0576afd6caf379a55513f80ea7b4fb /src/EditView.cxx
parent3d6f475c76142eae65b4b219df936f2bc6a4db3a (diff)
downloadscintilla-mirror-c9317c2bdfa092a531ed5ba0ec9f5115689489ac.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.cxx35
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;
}
}