diff options
| author | Neil <nyamatongwe@gmail.com> | 2021-03-20 18:12:55 +1100 | 
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2021-03-20 18:12:55 +1100 | 
| commit | a926652af980db3abcdef3e8ecb78a763327a1ae (patch) | |
| tree | 09cdcf8184842773069c697270cba15368771ecd /src/EditView.cxx | |
| parent | 2b8ea578dc6e59d11384d3253b7d06ce55330182 (diff) | |
| download | scintilla-mirror-a926652af980db3abcdef3e8ecb78a763327a1ae.tar.gz | |
Replace FillRectangle with FillRectangleAligned as FillRectangle will stop
aligning to pixel boundaries.
Use Surface::SetMode as simpler and its predecessors will be removed.
Diffstat (limited to 'src/EditView.cxx')
| -rw-r--r-- | src/EditView.cxx | 99 | 
1 files changed, 49 insertions, 50 deletions
| diff --git a/src/EditView.cxx b/src/EditView.cxx index a835ab0a0..2c93780fe 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -129,7 +129,7 @@ void DrawTextNoClipPhase(Surface *surface, PRectangle rc, const Style &style, XY  			surface->DrawTextNoClip(rc, fontText, ybase, text,  				style.fore, style.back);  		} else { -			surface->FillRectangle(rc, style.back); +			surface->FillRectangleAligned(rc, Fill(style.back));  		}  	} else if (FlagSet(phase, DrawPhase::text)) {  		surface->DrawTextTransparent(rc, fontText, ybase, text, style.fore); @@ -852,7 +852,7 @@ void EditView::DrawIndentGuide(Surface *surface, Sci::Line lineVisible, int line  static void SimpleAlphaRectangle(Surface *surface, PRectangle rc, ColourDesired fill, int alpha) {  	if (alpha != SC_ALPHA_NOALPHA) { -		surface->AlphaRectangle(rc, 0, fill, alpha, fill, alpha, 0); +		surface->FillRectangleAligned(rc, ColourAlpha(fill, alpha));  	}  } @@ -861,7 +861,7 @@ static void DrawTextBlob(Surface *surface, const ViewStyle &vsDraw, PRectangle r  	if (rcSegment.Empty())  		return;  	if (fillBackground) { -		surface->FillRectangle(rcSegment, textBack); +		surface->FillRectangleAligned(rcSegment, Fill(textBack));  	}  	const Font *ctrlCharsFont = vsDraw.styles[STYLE_CONTROLCHAR].font.get();  	const int normalCharHeight = static_cast<int>(std::ceil(vsDraw.styles[STYLE_CONTROLCHAR].capitalHeight)); @@ -872,7 +872,7 @@ static void DrawTextBlob(Surface *surface, const ViewStyle &vsDraw, PRectangle r  	PRectangle rcCentral = rcCChar;  	rcCentral.top++;  	rcCentral.bottom--; -	surface->FillRectangle(rcCentral, textFore); +	surface->FillRectangleAligned(rcCentral, Fill(textFore));  	PRectangle rcChar = rcCChar;  	rcChar.left++;  	rcChar.right--; @@ -882,10 +882,11 @@ static void DrawTextBlob(Surface *surface, const ViewStyle &vsDraw, PRectangle r  }  static void DrawFrame(Surface *surface, ColourDesired colour, int alpha, PRectangle rcFrame) { -	if (alpha != SC_ALPHA_NOALPHA) +	if (alpha != SC_ALPHA_NOALPHA) {  		surface->AlphaRectangle(rcFrame, 0, colour, alpha, colour, alpha, 0); -	else -		surface->FillRectangle(rcFrame, colour); +	} else { +		surface->FillRectangleAligned(rcFrame, Fill(colour)); +	}  }  static void DrawCaretLineFramed(Surface *surface, const ViewStyle &vsDraw, const LineLayout *ll, PRectangle rcLine, int subLine) { @@ -931,7 +932,7 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle  	if (virtualSpace > 0.0f) {  		rcSegment.left = xEol + xStart;  		rcSegment.right = xEol + xStart + virtualSpace; -		surface->FillRectangle(rcSegment, background.isSet ? background : vsDraw.styles[ll->styles[ll->numCharsInLine]].back); +		surface->FillRectangleAligned(rcSegment, Fill(background.isSet ? background : vsDraw.styles[ll->styles[ll->numCharsInLine]].back));  		if (!hideSelection && ((vsDraw.selAlpha == SC_ALPHA_NOALPHA) || (vsDraw.selAdditionalAlpha == SC_ALPHA_NOALPHA))) {  			const SelectionSegment virtualSpaceRange(SelectionPosition(model.pdoc->LineEnd(line)),  				SelectionPosition(model.pdoc->LineEnd(line), @@ -948,7 +949,7 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle  							static_cast<XYPOSITION>(subLineStart)+portion.end.VirtualSpace() * spaceWidth;  						rcSegment.left = (rcSegment.left > rcLine.left) ? rcSegment.left : rcLine.left;  						rcSegment.right = (rcSegment.right < rcLine.right) ? rcSegment.right : rcLine.right; -						surface->FillRectangle(rcSegment, SelectionBackground(vsDraw, r == model.sel.Main(), model.primarySelection)); +						surface->FillRectangleAligned(rcSegment, Fill(SelectionBackground(vsDraw, r == model.sel.Main(), model.primarySelection)));  					}  				}  			} @@ -993,12 +994,12 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle  			}  			if (eolInSelection && vsDraw.selColours.back.isSet && (line < model.pdoc->LinesTotal() - 1)) {  				if (alpha == SC_ALPHA_NOALPHA) { -					surface->FillRectangle(rcSegment, SelectionBackground(vsDraw, eolInSelection == 1, model.primarySelection)); +					surface->FillRectangleAligned(rcSegment, Fill(SelectionBackground(vsDraw, eolInSelection == 1, model.primarySelection)));  				} else { -					surface->FillRectangle(rcSegment, textBack); +					surface->FillRectangleAligned(rcSegment, Fill(textBack));  				}  			} else { -				surface->FillRectangle(rcSegment, textBack); +				surface->FillRectangleAligned(rcSegment, Fill(textBack));  			}  			DrawTextBlob(surface, vsDraw, rcSegment, ctrlChar, textBack, textFore, phasesDraw == PhasesDraw::one);  			if (eolInSelection && vsDraw.selColours.back.isSet && (line < model.pdoc->LinesTotal() - 1) && (alpha != SC_ALPHA_NOALPHA)) { @@ -1012,16 +1013,16 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle  	rcSegment.right = rcSegment.left + vsDraw.aveCharWidth;  	if (eolInSelection && vsDraw.selColours.back.isSet && (line < model.pdoc->LinesTotal() - 1) && (alpha == SC_ALPHA_NOALPHA)) { -		surface->FillRectangle(rcSegment, SelectionBackground(vsDraw, eolInSelection == 1, model.primarySelection)); +		surface->FillRectangleAligned(rcSegment, Fill(SelectionBackground(vsDraw, eolInSelection == 1, model.primarySelection)));  	} else {  		if (background.isSet) { -			surface->FillRectangle(rcSegment, background); +			surface->FillRectangleAligned(rcSegment, Fill(background));  		} else if (line < model.pdoc->LinesTotal() - 1) { -			surface->FillRectangle(rcSegment, vsDraw.styles[ll->styles[ll->numCharsInLine]].back); +			surface->FillRectangleAligned(rcSegment, Fill(vsDraw.styles[ll->styles[ll->numCharsInLine]].back));  		} else if (vsDraw.styles[ll->styles[ll->numCharsInLine]].eolFilled) { -			surface->FillRectangle(rcSegment, vsDraw.styles[ll->styles[ll->numCharsInLine]].back); +			surface->FillRectangleAligned(rcSegment, Fill(vsDraw.styles[ll->styles[ll->numCharsInLine]].back));  		} else { -			surface->FillRectangle(rcSegment, vsDraw.styles[STYLE_DEFAULT].back); +			surface->FillRectangleAligned(rcSegment, Fill(vsDraw.styles[STYLE_DEFAULT].back));  		}  		if (eolInSelection && vsDraw.selColours.back.isSet && (line < model.pdoc->LinesTotal() - 1) && (alpha != SC_ALPHA_NOALPHA)) {  			SimpleAlphaRectangle(surface, rcSegment, SelectionBackground(vsDraw, eolInSelection == 1, model.primarySelection), alpha); @@ -1221,7 +1222,7 @@ void EditView::DrawFoldDisplayText(Surface *surface, const EditModel &model, con  	}  	if (FlagSet(phase, DrawPhase::back)) { -		surface->FillRectangle(rcSegment, textBack); +		surface->FillRectangleAligned(rcSegment, Fill(textBack));  		// Fill Remainder of the line  		PRectangle rcRemainder = rcSegment; @@ -1316,7 +1317,7 @@ void EditView::DrawEOLAnnotationText(Surface *surface, const EditModel &model, c  	}  	if (FlagSet(phase, DrawPhase::back)) { -		surface->FillRectangle(rcSegment, textBack); +		surface->FillRectangleAligned(rcSegment, Fill(textBack));  		// Fill Remainder of the line  		PRectangle rcRemainder = rcSegment; @@ -1370,7 +1371,7 @@ void EditView::DrawAnnotation(Surface *surface, const EditModel &model, const Vi  	const StyledText stAnnotation = model.pdoc->AnnotationStyledText(line);  	if (stAnnotation.text && ValidStyledText(vsDraw, vsDraw.annotationStyleOffset, stAnnotation)) {  		if (FlagSet(phase, DrawPhase::back)) { -			surface->FillRectangle(rcSegment, vsDraw.styles[0].back); +			surface->FillRectangleAligned(rcSegment, Fill(vsDraw.styles[0].back));  		}  		rcSegment.left = static_cast<XYPOSITION>(xStart);  		if (model.trackLineWidth || AnnotationBoxedOrIndented(vsDraw.annotationVisible)) { @@ -1395,8 +1396,8 @@ void EditView::DrawAnnotation(Surface *surface, const EditModel &model, const Vi  		}  		PRectangle rcText = rcSegment;  		if ((FlagSet(phase, DrawPhase::back)) && AnnotationBoxedOrIndented(vsDraw.annotationVisible)) { -			surface->FillRectangle(rcText, -				vsDraw.styles[stAnnotation.StyleAt(start) + vsDraw.annotationStyleOffset].back); +			surface->FillRectangleAligned(rcText, +				Fill(vsDraw.styles[stAnnotation.StyleAt(start) + vsDraw.annotationStyleOffset].back));  			rcText.left += vsDraw.spaceWidth;  		}  		DrawStyledText(surface, vsDraw, vsDraw.annotationStyleOffset, rcText, @@ -1581,7 +1582,7 @@ void EditView::DrawCarets(Surface *surface, const EditModel &model, const ViewSt  				if (drawBlockCaret) {  					DrawBlockCaret(surface, model, vsDraw, ll, subLine, xStart, offset, posCaret.Position(), rcCaret, caretColour);  				} else { -					surface->FillRectangle(rcCaret, caretColour); +					surface->FillRectangleAligned(rcCaret, Fill(caretColour));  				}  			}  		} @@ -1594,8 +1595,8 @@ static void DrawWrapIndentAndMarker(Surface *surface, const ViewStyle &vsDraw, c  	int xStart, PRectangle rcLine, ColourOptional background, DrawWrapMarkerFn customDrawWrapMarker,  	bool caretActive) {  	// default bgnd here.. -	surface->FillRectangle(rcLine, background.isSet ? background : -		vsDraw.styles[STYLE_DEFAULT].back); +	surface->FillRectangleAligned(rcLine, Fill(background.isSet ? background : +		vsDraw.styles[STYLE_DEFAULT].back));  	if (vsDraw.IsLineFrameOpaque(caretActive, ll->containsCaret)) {  		const int width = vsDraw.GetFrameWidth(); @@ -1671,10 +1672,10 @@ void EditView::DrawBackground(Surface *surface, const EditModel &model, const Vi  					// Blob display  					inIndentation = false;  				} -				surface->FillRectangle(rcSegment, textBack); +				surface->FillRectangleAligned(rcSegment, Fill(textBack));  			} else {  				// Normal text display -				surface->FillRectangle(rcSegment, textBack); +				surface->FillRectangleAligned(rcSegment, Fill(textBack));  				if (vsDraw.viewWhitespace != wsInvisible) {  					for (int cpos = 0; cpos <= i - ts.start; cpos++) {  						if (ll->chars[cpos + ts.start] == ' ') { @@ -1684,7 +1685,7 @@ void EditView::DrawBackground(Surface *surface, const EditModel &model, const Vi  									rcSegment.top,  									ll->positions[cpos + ts.start + 1] + xStart - static_cast<XYPOSITION>(subLineStart),  									rcSegment.bottom); -								surface->FillRectangle(rcSpace, vsDraw.whitespaceColours.back); +								surface->FillRectangleAligned(rcSpace, Fill(vsDraw.whitespaceColours.back));  							}  						} else {  							inIndentation = false; @@ -1707,7 +1708,7 @@ static void DrawEdgeLine(Surface *surface, const ViewStyle &vsDraw, const LineLa  		if ((ll->wrapIndent != 0) && (lineRange.start != 0))  			rcSegment.left -= ll->wrapIndent;  		rcSegment.right = rcSegment.left + 1; -		surface->FillRectangle(rcSegment, vsDraw.theEdge.colour); +		surface->FillRectangleAligned(rcSegment, Fill(vsDraw.theEdge.colour));  	} else if (vsDraw.edgeState == EDGE_MULTILINE) {  		for (size_t edge = 0; edge < vsDraw.theMultiEdge.size(); edge++) {  			if (vsDraw.theMultiEdge[edge].column >= 0) { @@ -1717,7 +1718,7 @@ static void DrawEdgeLine(Surface *surface, const ViewStyle &vsDraw, const LineLa  				if ((ll->wrapIndent != 0) && (lineRange.start != 0))  					rcSegment.left -= ll->wrapIndent;  				rcSegment.right = rcSegment.left + 1; -				surface->FillRectangle(rcSegment, vsDraw.theMultiEdge[edge].colour); +				surface->FillRectangleAligned(rcSegment, Fill(vsDraw.theMultiEdge[edge].colour));  			}  		}  	} @@ -1732,7 +1733,7 @@ static void DrawMarkUnderline(Surface *surface, const EditModel &model, const Vi  			(vsDraw.markers[markBit].alpha == SC_ALPHA_NOALPHA)) {  			PRectangle rcUnderline = rcLine;  			rcUnderline.top = rcUnderline.bottom - 2; -			surface->FillRectangle(rcUnderline, vsDraw.markers[markBit].back); +			surface->FillRectangleAligned(rcUnderline, Fill(vsDraw.markers[markBit].back));  		}  		marks >>= 1;  	} @@ -1914,7 +1915,7 @@ void EditView::DrawForeground(Surface *surface, const EditModel &model, const Vi  					if (phasesDraw == PhasesDraw::one) {  						if (drawWhitespaceBackground && vsDraw.WhiteSpaceVisible(inIndentation))  							textBack = vsDraw.whitespaceColours.back; -						surface->FillRectangle(rcSegment, textBack); +						surface->FillRectangleAligned(rcSegment, Fill(textBack));  					}  					if (inIndentation && vsDraw.viewIndentationGuides == ivReal) {  						for (int indentCount = static_cast<int>((ll->positions[i] + epsilon) / indentWidth); @@ -1985,14 +1986,14 @@ void EditView::DrawForeground(Surface *surface, const EditModel &model, const Vi  											rcSegment.top,  											ll->positions[cpos + ts.start + 1] + xStart - static_cast<XYPOSITION>(subLineStart),  											rcSegment.bottom); -										surface->FillRectangle(rcSpace, textBack); +										surface->FillRectangleAligned(rcSpace, Fill(textBack));  									}  									const int halfDotWidth = vsDraw.whitespaceSize / 2;  									PRectangle rcDot(xmid + xStart - halfDotWidth - static_cast<XYPOSITION>(subLineStart),  										rcSegment.top + vsDraw.lineHeight / 2, 0.0f, 0.0f);  									rcDot.right = rcDot.left + vsDraw.whitespaceSize;  									rcDot.bottom = rcDot.top + vsDraw.whitespaceSize; -									surface->FillRectangle(rcDot, textFore); +									surface->FillRectangleAligned(rcDot, Fill(textFore));  								}  							}  							if (inIndentation && vsDraw.viewIndentationGuides == ivReal) { @@ -2017,14 +2018,14 @@ void EditView::DrawForeground(Surface *surface, const EditModel &model, const Vi  				rcUL.top = rcUL.top + vsDraw.maxAscent + 1;  				rcUL.bottom = rcUL.top + 1;  				if (vsDraw.hotspotColours.fore.isSet) -					surface->FillRectangle(rcUL, vsDraw.hotspotColours.fore); +					surface->FillRectangleAligned(rcUL, Fill(vsDraw.hotspotColours.fore));  				else -					surface->FillRectangle(rcUL, textFore); +					surface->FillRectangleAligned(rcUL, Fill(textFore));  			} else if (vsDraw.styles[styleMain].underline) {  				PRectangle rcUL = rcSegment;  				rcUL.top = rcUL.top + vsDraw.maxAscent + 1;  				rcUL.bottom = rcUL.top + 1; -				surface->FillRectangle(rcUL, textFore); +				surface->FillRectangleAligned(rcUL, Fill(textFore));  			}  		} else if (rcSegment.left > rcLine.right) {  			break; @@ -2179,7 +2180,7 @@ static void DrawFoldLines(Surface *surface, const EditModel &model, const ViewSt  			(!expanded && (model.foldFlags & SC_FOLDFLAG_LINEBEFORE_CONTRACTED))) {  			PRectangle rcFoldLine = rcLine;  			rcFoldLine.bottom = rcFoldLine.top + 1; -			surface->FillRectangle(rcFoldLine, vsDraw.styles[STYLE_DEFAULT].fore); +			surface->FillRectangleAligned(rcFoldLine, Fill(vsDraw.styles[STYLE_DEFAULT].fore));  		}  		// Paint the line below the fold  		if ((expanded && (model.foldFlags & SC_FOLDFLAG_LINEAFTER_EXPANDED)) @@ -2187,7 +2188,7 @@ static void DrawFoldLines(Surface *surface, const EditModel &model, const ViewSt  			(!expanded && (model.foldFlags & SC_FOLDFLAG_LINEAFTER_CONTRACTED))) {  			PRectangle rcFoldLine = rcLine;  			rcFoldLine.top = rcFoldLine.bottom - 1; -			surface->FillRectangle(rcFoldLine, vsDraw.styles[STYLE_DEFAULT].fore); +			surface->FillRectangleAligned(rcFoldLine, Fill(vsDraw.styles[STYLE_DEFAULT].fore));  		}  	}  } @@ -2206,9 +2207,7 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan  			surface = pixmapLine.get();  			PLATFORM_ASSERT(pixmapLine->Initialised());  		} -		surface->SetUnicodeMode(SC_CP_UTF8 == model.pdoc->dbcsCodePage); -		surface->SetDBCSMode(model.pdoc->dbcsCodePage); -		surface->SetBidiR2L(model.BidirectionalR2L()); +		surface->SetMode(SurfaceMode(model.pdoc->dbcsCodePage, model.BidirectionalR2L()));  		const Point ptOrigin = model.GetVisibleOriginInMain(); @@ -2305,7 +2304,7 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan  						PRectangle rcSpacer = rcLine;  						rcSpacer.right = rcSpacer.left;  						rcSpacer.left -= 1; -						surface->FillRectangle(rcSpacer, vsDraw.styles[STYLE_DEFAULT].back); +						surface->FillRectangleAligned(rcSpacer, Fill(vsDraw.styles[STYLE_DEFAULT].back));  					}  					if (model.BidirectionalEnabled()) { @@ -2363,19 +2362,19 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan  		rcBeyondEOF.right = rcBeyondEOF.right - ((vsDraw.marginInside) ? vsDraw.rightMarginWidth : 0);  		rcBeyondEOF.top = static_cast<XYPOSITION>((model.pcs->LinesDisplayed() - model.TopLineOfMain()) * vsDraw.lineHeight);  		if (rcBeyondEOF.top < rcBeyondEOF.bottom) { -			surfaceWindow->FillRectangle(rcBeyondEOF, vsDraw.styles[STYLE_DEFAULT].back); +			surfaceWindow->FillRectangleAligned(rcBeyondEOF, Fill(vsDraw.styles[STYLE_DEFAULT].back));  			if (vsDraw.edgeState == EDGE_LINE) {  				const int edgeX = static_cast<int>(vsDraw.theEdge.column * vsDraw.spaceWidth);  				rcBeyondEOF.left = static_cast<XYPOSITION>(edgeX + xStart);  				rcBeyondEOF.right = rcBeyondEOF.left + 1; -				surfaceWindow->FillRectangle(rcBeyondEOF, vsDraw.theEdge.colour); +				surfaceWindow->FillRectangleAligned(rcBeyondEOF, Fill(vsDraw.theEdge.colour));  			} else if (vsDraw.edgeState == EDGE_MULTILINE) {  				for (size_t edge = 0; edge < vsDraw.theMultiEdge.size(); edge++) {  					if (vsDraw.theMultiEdge[edge].column >= 0) {  						const int edgeX = static_cast<int>(vsDraw.theMultiEdge[edge].column * vsDraw.spaceWidth);  						rcBeyondEOF.left = static_cast<XYPOSITION>(edgeX + xStart);  						rcBeyondEOF.right = rcBeyondEOF.left + 1; -						surfaceWindow->FillRectangle(rcBeyondEOF, vsDraw.theMultiEdge[edge].colour); +						surfaceWindow->FillRectangleAligned(rcBeyondEOF, Fill(vsDraw.theMultiEdge[edge].colour));  					}  				}  			} @@ -2406,14 +2405,14 @@ void EditView::FillLineRemainder(Surface *surface, const EditModel &model, const  		const ColourOptional background = vsDraw.Background(model.pdoc->GetMark(line), model.caret.active, ll->containsCaret);  		if (eolInSelection && vsDraw.selEOLFilled && vsDraw.selColours.back.isSet && (line < model.pdoc->LinesTotal() - 1) && (alpha == SC_ALPHA_NOALPHA)) { -			surface->FillRectangle(rcArea, SelectionBackground(vsDraw, eolInSelection == 1, model.primarySelection)); +			surface->FillRectangleAligned(rcArea, Fill(SelectionBackground(vsDraw, eolInSelection == 1, model.primarySelection)));  		} else {  			if (background.isSet) { -				surface->FillRectangle(rcArea, background); +				surface->FillRectangleAligned(rcArea, Fill(background));  			} else if (vsDraw.styles[ll->styles[ll->numCharsInLine]].eolFilled) { -				surface->FillRectangle(rcArea, vsDraw.styles[ll->styles[ll->numCharsInLine]].back); +				surface->FillRectangleAligned(rcArea, Fill(vsDraw.styles[ll->styles[ll->numCharsInLine]].back));  			} else { -				surface->FillRectangle(rcArea, vsDraw.styles[STYLE_DEFAULT].back); +				surface->FillRectangleAligned(rcArea, Fill(vsDraw.styles[STYLE_DEFAULT].back));  			}  			if (eolInSelection && vsDraw.selEOLFilled && vsDraw.selColours.back.isSet && (line < model.pdoc->LinesTotal() - 1) && (alpha != SC_ALPHA_NOALPHA)) {  				SimpleAlphaRectangle(surface, rcArea, SelectionBackground(vsDraw, eolInSelection == 1, model.primarySelection), alpha); | 
