diff options
Diffstat (limited to 'src/EditView.cxx')
| -rw-r--r-- | src/EditView.cxx | 49 | 
1 files changed, 24 insertions, 25 deletions
| diff --git a/src/EditView.cxx b/src/EditView.cxx index d107ac3a9..2d32c8997 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -319,7 +319,7 @@ void EditView::RefreshPixMaps(Surface *surfaceWindow, const ViewStyle &vsDraw) {  	}  } -LineLayout *EditView::RetrieveLineLayout(Sci::Line lineNumber, const EditModel &model) { +std::shared_ptr<LineLayout> EditView::RetrieveLineLayout(Sci::Line lineNumber, const EditModel &model) {  	const Sci::Position posLineStart = model.pdoc->LineStart(lineNumber);  	const Sci::Position posLineEnd = model.pdoc->LineStart(lineNumber + 1);  	PLATFORM_ASSERT(posLineEnd >= posLineStart); @@ -636,23 +636,23 @@ Point EditView::LocationFromPosition(Surface *surface, const EditModel &model, S  		posLineStart = model.pdoc->LineStart(lineDoc);  	}  	const Sci::Line lineVisible = model.pcs->DisplayFromDoc(lineDoc); -	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); +	std::shared_ptr<LineLayout> ll = RetrieveLineLayout(lineDoc, model);  	if (surface && ll) { -		LayoutLine(model, surface, vs, ll, model.wrapWidth); +		LayoutLine(model, surface, vs, ll.get(), model.wrapWidth);  		const int posInLine = static_cast<int>(pos.Position() - posLineStart);  		pt = ll->PointFromPosition(posInLine, vs.lineHeight, pe);  		pt.x += vs.textStart - model.xOffset;  		if (model.BidirectionalEnabled()) {  			// Fill the line bidi data -			UpdateBidiData(model, vs, ll); +			UpdateBidiData(model, vs, ll.get());  			// Find subLine  			const int subLine = ll->SubLineFromPosition(posInLine, pe);  			const int caretPosition = posInLine - ll->LineStart(subLine);  			// Get the point from current position -			const ScreenLine screenLine(ll, subLine, vs, rcClient.right, tabWidthMinimumPixels); +			const ScreenLine screenLine(ll.get(), subLine, vs, rcClient.right, tabWidthMinimumPixels);  			std::unique_ptr<IScreenLineLayout> slLayout = surface->Layout(&screenLine);  			pt.x = slLayout->XFromPosition(caretPosition); @@ -676,9 +676,9 @@ Range EditView::RangeDisplayLine(Surface *surface, const EditModel &model, Sci::  	}  	const Sci::Line lineDoc = model.pcs->DocFromDisplay(lineVisible);  	const Sci::Position positionLineStart = model.pdoc->LineStart(lineDoc); -	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); +	std::shared_ptr<LineLayout> ll = RetrieveLineLayout(lineDoc, model);  	if (surface && ll) { -		LayoutLine(model, surface, vs, ll, model.wrapWidth); +		LayoutLine(model, surface, vs, ll.get(), model.wrapWidth);  		const Sci::Line lineStartSet = model.pcs->DisplayFromDoc(lineDoc);  		const int subLine = static_cast<int>(lineVisible - lineStartSet);  		if (subLine < ll->lines) { @@ -707,9 +707,9 @@ SelectionPosition EditView::SPositionFromLocation(Surface *surface, const EditMo  		return SelectionPosition(canReturnInvalid ? INVALID_POSITION :  			model.pdoc->Length());  	const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); -	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); +	std::shared_ptr<LineLayout> ll = RetrieveLineLayout(lineDoc, model);  	if (surface && ll) { -		LayoutLine(model, surface, vs, ll, model.wrapWidth); +		LayoutLine(model, surface, vs, ll.get(), model.wrapWidth);  		const Sci::Line lineStartSet = model.pcs->DisplayFromDoc(lineDoc);  		const int subLine = static_cast<int>(visibleLine - lineStartSet);  		if (subLine < ll->lines) { @@ -720,9 +720,9 @@ SelectionPosition EditView::SPositionFromLocation(Surface *surface, const EditMo  			Sci::Position positionInLine = 0;  			if (model.BidirectionalEnabled()) {  				// Fill the line bidi data -				UpdateBidiData(model, vs, ll); +				UpdateBidiData(model, vs, ll.get()); -				const ScreenLine screenLine(ll, subLine, vs, rcClient.right, tabWidthMinimumPixels); +				const ScreenLine screenLine(ll.get(), subLine, vs, rcClient.right, tabWidthMinimumPixels);  				std::unique_ptr<IScreenLineLayout> slLayout = surface->Layout(&screenLine);  				positionInLine = slLayout->PositionFromX(static_cast<XYPOSITION>(pt.x), charPosition) +  					rangeSubLine.start; @@ -758,10 +758,10 @@ SelectionPosition EditView::SPositionFromLocation(Surface *surface, const EditMo  * This method is used for rectangular selections and does not work on wrapped lines.  */  SelectionPosition EditView::SPositionFromLineX(Surface *surface, const EditModel &model, Sci::Line lineDoc, int x, const ViewStyle &vs) { -	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); +	std::shared_ptr<LineLayout> ll = RetrieveLineLayout(lineDoc, model);  	if (surface && ll) {  		const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc); -		LayoutLine(model, surface, vs, ll, model.wrapWidth); +		LayoutLine(model, surface, vs, ll.get(), model.wrapWidth);  		const Range rangeSubLine = ll->SubLineRange(0, LineLayout::Scope::visibleOnly);  		const XYPOSITION subLineStart = ll->positions[rangeSubLine.start];  		const Sci::Position positionInLine = ll->FindPositionFromX(x + subLineStart, rangeSubLine, false); @@ -779,9 +779,9 @@ SelectionPosition EditView::SPositionFromLineX(Surface *surface, const EditModel  Sci::Line EditView::DisplayFromPosition(Surface *surface, const EditModel &model, Sci::Position pos, const ViewStyle &vs) {  	const Sci::Line lineDoc = model.pdoc->SciLineFromPosition(pos);  	Sci::Line lineDisplay = model.pcs->DisplayFromDoc(lineDoc); -	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc, model)); +	std::shared_ptr<LineLayout> ll = RetrieveLineLayout(lineDoc, model);  	if (surface && ll) { -		LayoutLine(model, surface, vs, ll, model.wrapWidth); +		LayoutLine(model, surface, vs, ll.get(), model.wrapWidth);  		const Sci::Position posLineStart = model.pdoc->LineStart(lineDoc);  		const Sci::Position posInLine = pos - posLineStart;  		lineDisplay--; // To make up for first increment ahead. @@ -796,11 +796,11 @@ Sci::Line EditView::DisplayFromPosition(Surface *surface, const EditModel &model  Sci::Position EditView::StartEndDisplayLine(Surface *surface, const EditModel &model, Sci::Position pos, bool start, const ViewStyle &vs) {  	const Sci::Line line = model.pdoc->SciLineFromPosition(pos); -	AutoLineLayout ll(llc, RetrieveLineLayout(line, model)); +	std::shared_ptr<LineLayout> ll = RetrieveLineLayout(line, model);  	Sci::Position posRet = INVALID_POSITION;  	if (surface && ll) {  		const Sci::Position posLineStart = model.pdoc->LineStart(line); -		LayoutLine(model, surface, vs, ll, model.wrapWidth); +		LayoutLine(model, surface, vs, ll.get(), model.wrapWidth);  		const Sci::Position posInLine = pos - posLineStart;  		if (posInLine <= ll->maxLineLength) {  			for (int subLine = 0; subLine < ll->lines; subLine++) { @@ -2314,7 +2314,7 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan  			(vsDraw.braceBadLightIndicatorSet && (model.bracesMatchStyle == STYLE_BRACEBAD)));  		Sci::Line lineDocPrevious = -1;	// Used to avoid laying out one document line multiple times -		AutoLineLayout ll(llc, nullptr); +		std::shared_ptr<LineLayout> ll;  		std::vector<DrawPhase> phases;  		if ((phasesDraw == PhasesDraw::multiple) && !bufferedDraw) {  			for (DrawPhase phase = DrawPhase::back; phase <= DrawPhase::carets; phase = static_cast<DrawPhase>(static_cast<int>(phase) * 2)) { @@ -2343,9 +2343,8 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan  				ElapsedPeriod ep;  #endif  				if (lineDoc != lineDocPrevious) { -					ll.Set(nullptr); -					ll.Set(RetrieveLineLayout(lineDoc, model)); -					LayoutLine(model, surface, vsDraw, ll, model.wrapWidth); +					ll = RetrieveLineLayout(lineDoc, model); +					LayoutLine(model, surface, vsDraw, ll.get(), model.wrapWidth);  					lineDocPrevious = lineDoc;  				}  #if defined(TIME_PAINTING) @@ -2376,10 +2375,10 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan  					if (model.BidirectionalEnabled()) {  						// Fill the line bidi data -						UpdateBidiData(model, vsDraw, ll); +						UpdateBidiData(model, vsDraw, ll.get());  					} -					DrawLine(surface, model, vsDraw, ll, lineDoc, visibleLine, xStart, rcLine, subLine, phase); +					DrawLine(surface, model, vsDraw, ll.get(), lineDoc, visibleLine, xStart, rcLine, subLine, phase);  #if defined(TIME_PAINTING)  					durPaint += ep.Duration(true);  #endif @@ -2391,7 +2390,7 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan  					}  					if (FlagSet(phase, DrawPhase::carets)) { -						DrawCarets(surface, model, vsDraw, ll, lineDoc, xStart, rcLine, subLine); +						DrawCarets(surface, model, vsDraw, ll.get(), lineDoc, xStart, rcLine, subLine);  					}  					if (bufferedDraw) { @@ -2418,7 +2417,7 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan  				visibleLine++;  			}  		} -		ll.Set(nullptr); +		ll.reset();  #if defined(TIME_PAINTING)  		if (durPaint < 0.00000001)  			durPaint = 0.00000001; | 
