diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CallTip.cxx | 6 | ||||
| -rw-r--r-- | src/EditView.cxx | 59 | ||||
| -rw-r--r-- | src/EditView.h | 2 | ||||
| -rw-r--r-- | src/Editor.cxx | 2 | ||||
| -rw-r--r-- | src/LineMarker.cxx | 8 | ||||
| -rw-r--r-- | src/MarginView.cxx | 4 | ||||
| -rw-r--r-- | src/PositionCache.cxx | 4 | ||||
| -rw-r--r-- | src/ViewStyle.cxx | 4 | 
8 files changed, 43 insertions, 46 deletions
| diff --git a/src/CallTip.cxx b/src/CallTip.cxx index 2eab1146f..437933af9 100644 --- a/src/CallTip.cxx +++ b/src/CallTip.cxx @@ -154,13 +154,13 @@ void CallTip::DrawChunk(Surface *surface, int &x, const char *s,  			} else if (IsTabCharacter(s[startSeg])) {  				xEnd = NextTabPos(x);  			} else { -				xEnd = x + static_cast<int>(lround(surface->WidthText(font, s + startSeg, endSeg - startSeg))); +				std::string_view segText(s + startSeg, endSeg - startSeg); +				xEnd = x + static_cast<int>(lround(surface->WidthText(font, segText)));  				if (draw) {  					rcClient.left = static_cast<XYPOSITION>(x);  					rcClient.right = static_cast<XYPOSITION>(xEnd);  					surface->DrawTextTransparent(rcClient, font, static_cast<XYPOSITION>(ytext), -										s+startSeg, endSeg - startSeg, -					                             highlight ? colourSel : colourUnSel); +										segText, highlight ? colourSel : colourUnSel);  				}  			}  			x = xEnd; diff --git a/src/EditView.cxx b/src/EditView.cxx index a63b666e5..b406747fb 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -96,8 +96,8 @@ static int WidthStyledText(Surface *surface, const ViewStyle &vs, int styleOffse  		while ((endSegment + 1 < len) && (styles[endSegment + 1] == style))  			endSegment++;  		FontAlias fontText = vs.styles[style + styleOffset].font; -		width += static_cast<int>(surface->WidthText(fontText, text + start, -			static_cast<int>(endSegment - start + 1))); +		std::string_view sv(text + start, endSegment - start + 1); +		width += static_cast<int>(surface->WidthText(fontText, sv));  		start = endSegment + 1;  	}  	return width; @@ -113,8 +113,8 @@ int WidestLineWidth(Surface *surface, const ViewStyle &vs, int styleOffset, cons  			widthSubLine = WidthStyledText(surface, vs, styleOffset, st.text + start, st.styles + start, lenLine);  		} else {  			FontAlias fontText = vs.styles[styleOffset + st.style].font; -			widthSubLine = static_cast<int>(surface->WidthText(fontText, -				st.text + start, static_cast<int>(lenLine))); +			std::string_view text(st.text + start, lenLine); +			widthSubLine = static_cast<int>(surface->WidthText(fontText, text));  		}  		if (widthSubLine > widthMax)  			widthMax = widthSubLine; @@ -124,18 +124,18 @@ int WidestLineWidth(Surface *surface, const ViewStyle &vs, int styleOffset, cons  }  void DrawTextNoClipPhase(Surface *surface, PRectangle rc, const Style &style, XYPOSITION ybase, -	const char *s, int len, DrawPhase phase) { +	std::string_view text, DrawPhase phase) {  	FontAlias fontText = style.font;  	if (phase & drawBack) {  		if (phase & drawText) {  			// Drawing both -			surface->DrawTextNoClip(rc, fontText, ybase, s, len, +			surface->DrawTextNoClip(rc, fontText, ybase, text,  				style.fore, style.back);  		} else {  			surface->FillRectangle(rc, style.back);  		}  	} else if (phase & drawText) { -		surface->DrawTextTransparent(rc, fontText, ybase, s, len, style.fore); +		surface->DrawTextTransparent(rc, fontText, ybase, text, style.fore);  	}  } @@ -152,22 +152,21 @@ void DrawStyledText(Surface *surface, const ViewStyle &vs, int styleOffset, PRec  				end++;  			style += styleOffset;  			FontAlias fontText = vs.styles[style].font; -			const int width = static_cast<int>(surface->WidthText(fontText, -				st.text + start + i, static_cast<int>(end - i + 1))); +			std::string_view text(st.text + start + i, end - i + 1); +			const int width = static_cast<int>(surface->WidthText(fontText, text));  			PRectangle rcSegment = rcText;  			rcSegment.left = static_cast<XYPOSITION>(x);  			rcSegment.right = static_cast<XYPOSITION>(x + width + 1);  			DrawTextNoClipPhase(surface, rcSegment, vs.styles[style], -				rcText.top + vs.maxAscent, st.text + start + i, -				static_cast<int>(end - i + 1), phase); +				rcText.top + vs.maxAscent, text, phase);  			x += width;  			i = end + 1;  		}  	} else {  		const size_t style = st.style + styleOffset;  		DrawTextNoClipPhase(surface, rcText, vs.styles[style], -			rcText.top + vs.maxAscent, st.text + start, -			static_cast<int>(length), phase); +			rcText.top + vs.maxAscent, +			std::string_view(st.text + start, length), phase);  	}  } @@ -803,7 +802,7 @@ static void SimpleAlphaRectangle(Surface *surface, PRectangle rc, ColourDesired  }  static void DrawTextBlob(Surface *surface, const ViewStyle &vsDraw, PRectangle rcSegment, -	const char *s, ColourDesired textBack, ColourDesired textFore, bool fillBackground) { +	std::string_view text, ColourDesired textBack, ColourDesired textFore, bool fillBackground) {  	if (rcSegment.Empty())  		return;  	if (fillBackground) { @@ -823,7 +822,7 @@ static void DrawTextBlob(Surface *surface, const ViewStyle &vsDraw, PRectangle r  	rcChar.left++;  	rcChar.right--;  	surface->DrawTextClipped(rcChar, ctrlCharsFont, -		rcSegment.top + vsDraw.maxAscent, s, static_cast<int>(s ? strlen(s) : 0), +		rcSegment.top + vsDraw.maxAscent, text,  		textBack, textFore);  } @@ -1103,10 +1102,9 @@ void EditView::DrawFoldDisplayText(Surface *surface, const EditModel &model, con  		return;  	PRectangle rcSegment = rcLine; -	const char *foldDisplayText = model.pcs->GetFoldDisplayText(line); -	const int lengthFoldDisplayText = static_cast<int>(strlen(foldDisplayText)); +	const std::string_view foldDisplayText = model.pcs->GetFoldDisplayText(line);  	FontAlias fontText = vsDraw.styles[STYLE_FOLDDISPLAYTEXT].font; -	const int widthFoldDisplayText = static_cast<int>(surface->WidthText(fontText, foldDisplayText, lengthFoldDisplayText)); +	const int widthFoldDisplayText = static_cast<int>(surface->WidthText(fontText, foldDisplayText));  	int eolInSelection = 0;  	int alpha = SC_ALPHA_NOALPHA; @@ -1154,11 +1152,11 @@ void EditView::DrawFoldDisplayText(Surface *surface, const EditModel &model, con  		if (phasesDraw != phasesOne) {  			surface->DrawTextTransparent(rcSegment, textFont,  				rcSegment.top + vsDraw.maxAscent, foldDisplayText, -				lengthFoldDisplayText, textFore); +				textFore);  		} else {  			surface->DrawTextNoClip(rcSegment, textFont,  				rcSegment.top + vsDraw.maxAscent, foldDisplayText, -				lengthFoldDisplayText, textFore, textBack); +				textFore, textBack);  		}  	} @@ -1309,9 +1307,9 @@ static void DrawBlockCaret(Surface *surface, const EditModel &model, const ViewS  	// (inversed) for drawing the caret here.  	const int styleMain = ll->styles[offsetFirstChar];  	FontAlias fontText = vsDraw.styles[styleMain].font; +	std::string_view text(&ll->chars[offsetFirstChar], numCharsToDraw);  	surface->DrawTextClipped(rcCaret, fontText, -		rcCaret.top + vsDraw.maxAscent, &ll->chars[offsetFirstChar], -		static_cast<int>(numCharsToDraw), vsDraw.styles[styleMain].back, +		rcCaret.top + vsDraw.maxAscent, text, vsDraw.styles[styleMain].back,  		caretColour);  } @@ -1735,23 +1733,22 @@ void EditView::DrawForeground(Surface *surface, const EditModel &model, const Vi  						const char cc[2] = { static_cast<char>(vsDraw.controlCharSymbol), '\0' };  						surface->DrawTextNoClip(rcSegment, ctrlCharsFont,  							rcSegment.top + vsDraw.maxAscent, -							cc, 1, textBack, textFore); +							cc, textBack, textFore);  					} else { -						DrawTextBlob(surface, vsDraw, rcSegment, ts.representation->stringRep.c_str(), +						DrawTextBlob(surface, vsDraw, rcSegment, ts.representation->stringRep,  							textBack, textFore, phasesDraw == phasesOne);  					}  				}  			} else {  				// Normal text display  				if (vsDraw.styles[styleMain].visible) { +					std::string_view text(&ll->chars[ts.start], i - ts.start + 1);  					if (phasesDraw != phasesOne) {  						surface->DrawTextTransparent(rcSegment, textFont, -							rcSegment.top + vsDraw.maxAscent, &ll->chars[ts.start], -							static_cast<int>(i - ts.start + 1), textFore); +							rcSegment.top + vsDraw.maxAscent, text, textFore);  					} else {  						surface->DrawTextNoClip(rcSegment, textFont, -							rcSegment.top + vsDraw.maxAscent, &ll->chars[ts.start], -							static_cast<int>(i - ts.start + 1), textFore, textBack); +							rcSegment.top + vsDraw.maxAscent, text, textFore, textBack);  					}  				}  				if (vsDraw.viewWhitespace != wsInvisible || @@ -2271,7 +2268,7 @@ Sci::Position EditView::FormatRange(bool draw, const Sci_RangeToFormat *pfr, Sur  	int lineNumberWidth = 0;  	if (lineNumberIndex >= 0) {  		lineNumberWidth = static_cast<int>(surfaceMeasure->WidthText(vsPrint.styles[STYLE_LINENUMBER].font, -			"99999" lineNumberPrintSpace, 5 + static_cast<int>(strlen(lineNumberPrintSpace)))); +			"99999" lineNumberPrintSpace));  		vsPrint.ms[lineNumberIndex].width = lineNumberWidth;  		vsPrint.Refresh(*surfaceMeasure, model.pdoc->tabInChars);	// Recalculate fixedColumnWidth  	} @@ -2352,10 +2349,10 @@ Sci::Position EditView::FormatRange(bool draw, const Sci_RangeToFormat *pfr, Sur  			rcNumber.right = rcNumber.left + lineNumberWidth;  			// Right justify  			rcNumber.left = rcNumber.right - surfaceMeasure->WidthText( -				vsPrint.styles[STYLE_LINENUMBER].font, number.c_str(), static_cast<int>(number.length())); +				vsPrint.styles[STYLE_LINENUMBER].font, number);  			surface->FlushCachedState();  			surface->DrawTextNoClip(rcNumber, vsPrint.styles[STYLE_LINENUMBER].font, -				static_cast<XYPOSITION>(ypos + vsPrint.maxAscent), number.c_str(), static_cast<int>(number.length()), +				static_cast<XYPOSITION>(ypos + vsPrint.maxAscent), number,  				vsPrint.styles[STYLE_LINENUMBER].fore,  				vsPrint.styles[STYLE_LINENUMBER].back);  		} diff --git a/src/EditView.h b/src/EditView.h index f649f7c87..51e2a1e53 100644 --- a/src/EditView.h +++ b/src/EditView.h @@ -36,7 +36,7 @@ enum DrawPhase {  bool ValidStyledText(const ViewStyle &vs, size_t styleOffset, const StyledText &st);  int WidestLineWidth(Surface *surface, const ViewStyle &vs, int styleOffset, const StyledText &st);  void DrawTextNoClipPhase(Surface *surface, PRectangle rc, const Style &style, XYPOSITION ybase, -	const char *s, int len, DrawPhase phase); +	std::string_view text, DrawPhase phase);  void DrawStyledText(Surface *surface, const ViewStyle &vs, int styleOffset, PRectangle rcText,  	const StyledText &st, size_t start, size_t length, DrawPhase phase); diff --git a/src/Editor.cxx b/src/Editor.cxx index 80cdbc97a..36ebc5cea 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -1792,7 +1792,7 @@ int Editor::TextWidth(int style, const char *text) {  	RefreshStyleData();  	AutoSurface surface(this);  	if (surface) { -		return static_cast<int>(surface->WidthText(vs.styles[style].font, text, static_cast<int>(strlen(text)))); +		return static_cast<int>(surface->WidthText(vs.styles[style].font, text));  	} else {  		return 1;  	} diff --git a/src/LineMarker.cxx b/src/LineMarker.cxx index a2f7e299e..53231d778 100644 --- a/src/LineMarker.cxx +++ b/src/LineMarker.cxx @@ -9,6 +9,7 @@  #include <cmath>  #include <stdexcept> +#include <string>  #include <string_view>  #include <vector>  #include <map> @@ -377,14 +378,13 @@ void LineMarker::Draw(Surface *surface, PRectangle &rcWhole, Font &fontForCharac  		DrawMinus(surface, centreX, centreY, blobSize, colourTail);  	} else if (markType >= SC_MARK_CHARACTER) { -		char character[1]; -		character[0] = static_cast<char>(markType - SC_MARK_CHARACTER); -		const XYPOSITION width = surface->WidthText(fontForCharacter, character, 1); +		std::string character(1, static_cast<char>(markType - SC_MARK_CHARACTER)); +		const XYPOSITION width = surface->WidthText(fontForCharacter, character);  		PRectangle rcText = rc;  		rcText.left += (rc.Width() - width) / 2;  		rcText.right = rc.left + width;  		surface->DrawTextClipped(rcText, fontForCharacter, rcText.bottom - 2, -			character, 1, fore, back); +			character, fore, back);  	} else if (markType == SC_MARK_DOTDOTDOT) {  		XYPOSITION right = static_cast<XYPOSITION>(centreX - 6); diff --git a/src/MarginView.cxx b/src/MarginView.cxx index f9d566b44..6604657f6 100644 --- a/src/MarginView.cxx +++ b/src/MarginView.cxx @@ -393,11 +393,11 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc,  						}  						PRectangle rcNumber = rcMarker;  						// Right justify -						const XYPOSITION width = surface->WidthText(fontLineNumber, sNumber.c_str(), static_cast<int>(sNumber.length())); +						const XYPOSITION width = surface->WidthText(fontLineNumber, sNumber);  						const XYPOSITION xpos = rcNumber.right - width - vs.marginNumberPadding;  						rcNumber.left = xpos;  						DrawTextNoClipPhase(surface, rcNumber, vs.styles[STYLE_LINENUMBER], -							rcNumber.top + vs.maxAscent, sNumber.c_str(), static_cast<int>(sNumber.length()), drawAll); +							rcNumber.top + vs.maxAscent, sNumber, drawAll);  					} else if (vs.wrapVisualFlags & SC_WRAPVISUALFLAG_MARGIN) {  						PRectangle rcWrapMarker = rcMarker;  						rcWrapMarker.right -= wrapMarkerPaddingRight; diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx index 9769202c6..bf5560678 100644 --- a/src/PositionCache.cxx +++ b/src/PositionCache.cxx @@ -691,7 +691,7 @@ void PositionCache::MeasureWidths(Surface *surface, const ViewStyle &vstyle, uns  		while (startSegment < len) {  			const unsigned int lenSegment = pdoc->SafeSegment(s + startSegment, len - startSegment, BreakFinder::lengthEachSubdivision);  			FontAlias fontStyle = vstyle.styles[styleNumber].font; -			surface->MeasureWidths(fontStyle, s + startSegment, lenSegment, positions + startSegment); +			surface->MeasureWidths(fontStyle, std::string_view(s + startSegment, lenSegment), positions + startSegment);  			for (unsigned int inSeg = 0; inSeg < lenSegment; inSeg++) {  				positions[startSegment + inSeg] += xStartSegment;  			} @@ -700,7 +700,7 @@ void PositionCache::MeasureWidths(Surface *surface, const ViewStyle &vstyle, uns  		}  	} else {  		FontAlias fontStyle = vstyle.styles[styleNumber].font; -		surface->MeasureWidths(fontStyle, s, len, positions); +		surface->MeasureWidths(fontStyle, std::string_view(s, len), positions);  	}  	if (probe < pces.size()) {  		// Store into cache diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx index 1a95450ce..2700fb016 100644 --- a/src/ViewStyle.cxx +++ b/src/ViewStyle.cxx @@ -80,7 +80,7 @@ void FontRealised::Realise(Surface &surface, int zoomLevel, int technology, cons  	descent = static_cast<unsigned int>(surface.Descent(font));  	capitalHeight = surface.Ascent(font) - surface.InternalLeading(font);  	aveCharWidth = surface.AverageCharWidth(font); -	spaceWidth = surface.WidthText(font, " ", 1); +	spaceWidth = surface.WidthText(font, " ");  }  ViewStyle::ViewStyle() : markers(MARKER_MAX + 1), indicators(INDIC_MAX + 1) { @@ -367,7 +367,7 @@ void ViewStyle::Refresh(Surface &surface, int tabInChars) {  	controlCharWidth = 0.0;  	if (controlCharSymbol >= 32) {  		const char cc[2] = { static_cast<char>(controlCharSymbol), '\0' }; -		controlCharWidth = surface.WidthText(styles[STYLE_CONTROLCHAR].font, cc, 1); +		controlCharWidth = surface.WidthText(styles[STYLE_CONTROLCHAR].font, cc);  	}  	CalculateMarginWidthAndMask(); | 
