diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/EditView.cxx | 33 | ||||
| -rw-r--r-- | src/Editor.cxx | 18 | ||||
| -rw-r--r-- | src/ViewStyle.cxx | 9 | ||||
| -rw-r--r-- | src/ViewStyle.h | 17 | 
4 files changed, 59 insertions, 18 deletions
| diff --git a/src/EditView.cxx b/src/EditView.cxx index 9ca6e95ad..074c23fc9 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -417,7 +417,7 @@ void EditView::LayoutLine(const EditModel &model, int line, Surface *surface, co  		ll->widthLine = LineLayout::wrapWidthInfinite;  		ll->lines = 1;  		if (vstyle.edgeState == EDGE_BACKGROUND) { -			ll->edgeColumn = model.pdoc->FindColumn(line, vstyle.theEdge); +			ll->edgeColumn = model.pdoc->FindColumn(line, vstyle.theEdge.column);  			if (ll->edgeColumn >= posLineStart) {  				ll->edgeColumn -= posLineStart;  			} @@ -749,7 +749,7 @@ static ColourDesired TextBackground(const EditModel &model, const ViewStyle &vsD  		if ((vsDraw.edgeState == EDGE_BACKGROUND) &&  			(i >= ll->edgeColumn) &&  			(i < ll->numCharsBeforeEOL)) -			return vsDraw.edgecolour; +			return vsDraw.theEdge.colour;  		if (inHotspot && vsDraw.hotspotColours.back.isSet)  			return vsDraw.hotspotColours.back;  	} @@ -1339,12 +1339,24 @@ static void DrawEdgeLine(Surface *surface, const ViewStyle &vsDraw, const LineLa  	Range lineRange, int xStart) {  	if (vsDraw.edgeState == EDGE_LINE) {  		PRectangle rcSegment = rcLine; -		int edgeX = static_cast<int>(vsDraw.theEdge * vsDraw.spaceWidth); +		int edgeX = static_cast<int>(vsDraw.theEdge.column * vsDraw.spaceWidth);  		rcSegment.left = static_cast<XYPOSITION>(edgeX + xStart);  		if ((ll->wrapIndent != 0) && (lineRange.start != 0))  			rcSegment.left -= ll->wrapIndent;  		rcSegment.right = rcSegment.left + 1; -		surface->FillRectangle(rcSegment, vsDraw.edgecolour); +		surface->FillRectangle(rcSegment, 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) { +				PRectangle rcSegment = rcLine; +				int edgeX = static_cast<int>(vsDraw.theMultiEdge[edge].column * vsDraw.spaceWidth); +				rcSegment.left = static_cast<XYPOSITION>(edgeX + xStart); +				if ((ll->wrapIndent != 0) && (lineRange.start != 0)) +					rcSegment.left -= ll->wrapIndent; +				rcSegment.right = rcSegment.left + 1; +				surface->FillRectangle(rcSegment, vsDraw.theMultiEdge[edge].colour); +			} +		}  	}  } @@ -1919,10 +1931,19 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan  		if (rcBeyondEOF.top < rcBeyondEOF.bottom) {  			surfaceWindow->FillRectangle(rcBeyondEOF, vsDraw.styles[STYLE_DEFAULT].back);  			if (vsDraw.edgeState == EDGE_LINE) { -				int edgeX = static_cast<int>(vsDraw.theEdge * vsDraw.spaceWidth); +				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.edgecolour); +				surfaceWindow->FillRectangle(rcBeyondEOF, 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) { +						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); +					} +				}  			}  		}  		//Platform::DebugPrintf("start display %d, offset = %d\n", pdoc->Length(), xOffset); diff --git a/src/Editor.cxx b/src/Editor.cxx index 12ec73239..beec634d3 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -7433,10 +7433,10 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return vs.zoomLevel;  	case SCI_GETEDGECOLUMN: -		return vs.theEdge; +		return vs.theEdge.column;  	case SCI_SETEDGECOLUMN: -		vs.theEdge = static_cast<int>(wParam); +		vs.theEdge.column = static_cast<int>(wParam);  		InvalidateStyleRedraw();  		break; @@ -7449,10 +7449,20 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		break;  	case SCI_GETEDGECOLOUR: -		return vs.edgecolour.AsLong(); +		return vs.theEdge.colour.AsLong();  	case SCI_SETEDGECOLOUR: -		vs.edgecolour = ColourDesired(static_cast<long>(wParam)); +		vs.theEdge.colour = ColourDesired(static_cast<long>(wParam)); +		InvalidateStyleRedraw(); +		break; + +	case SCI_MULTIEDGEADDLINE: +		vs.theMultiEdge.push_back(EdgeProperties(wParam, lParam)); +		InvalidateStyleRedraw(); +		break; + +	case SCI_MULTIEDGECLEARALL: +		std::vector<EdgeProperties>().swap(vs.theMultiEdge); // Free vector and memory, C++03 compatible  		InvalidateStyleRedraw();  		break; diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx index ae68d8bff..33be28422 100644 --- a/src/ViewStyle.cxx +++ b/src/ViewStyle.cxx @@ -139,8 +139,6 @@ ViewStyle::ViewStyle(const ViewStyle &source) {  	alwaysShowCaretLineBackground = source.alwaysShowCaretLineBackground;  	caretLineBackground = source.caretLineBackground;  	caretLineAlpha = source.caretLineAlpha; -	edgecolour = source.edgecolour; -	edgeState = source.edgeState;  	caretStyle = source.caretStyle;  	caretWidth = source.caretWidth;  	someStylesProtected = false; @@ -171,7 +169,9 @@ ViewStyle::ViewStyle(const ViewStyle &source) {  	braceBadLightIndicatorSet = source.braceBadLightIndicatorSet;  	braceBadLightIndicator = source.braceBadLightIndicator; +	edgeState = source.edgeState;  	theEdge = source.theEdge; +	theMultiEdge = source.theMultiEdge;  	marginNumberPadding = source.marginNumberPadding;  	ctrlCharPadding = source.ctrlCharPadding; @@ -268,8 +268,6 @@ void ViewStyle::Init(size_t stylesSize_) {  	alwaysShowCaretLineBackground = false;  	caretLineBackground = ColourDesired(0xff, 0xff, 0);  	caretLineAlpha = SC_ALPHA_NOALPHA; -	edgecolour = ColourDesired(0xc0, 0xc0, 0xc0); -	edgeState = EDGE_NONE;  	caretStyle = CARETSTYLE_LINE;  	caretWidth = 1;  	someStylesProtected = false; @@ -310,7 +308,8 @@ void ViewStyle::Init(size_t stylesSize_) {  	braceBadLightIndicatorSet = false;  	braceBadLightIndicator = 0; -	theEdge = 0; +	edgeState = EDGE_NONE; +	theEdge = EdgeProperties(0, ColourDesired(0xc0, 0xc0, 0xc0));  	marginNumberPadding = 3;  	ctrlCharPadding = 3; // +3 For a blank on front and rounded edge each side diff --git a/src/ViewStyle.h b/src/ViewStyle.h index d5a9d5b71..be84598f1 100644 --- a/src/ViewStyle.h +++ b/src/ViewStyle.h @@ -72,6 +72,17 @@ struct ForeBackColours {  	ColourOptional back;  }; +struct EdgeProperties { +	int column; +	ColourDesired colour; +	EdgeProperties(int column_ = 0, ColourDesired colour_ = ColourDesired(0)) : +		column(column_), colour(colour_) { +	} +	EdgeProperties(uptr_t wParam, sptr_t lParam) : +		column(static_cast<int>(wParam)), colour(static_cast<long>(lParam)) { +	} +}; +  /**   */  class ViewStyle { @@ -130,8 +141,6 @@ public:  	bool alwaysShowCaretLineBackground;  	ColourDesired caretLineBackground;  	int caretLineAlpha; -	ColourDesired edgecolour; -	int edgeState;  	int caretStyle;  	int caretWidth;  	bool someStylesProtected; @@ -146,7 +155,9 @@ public:  	int braceHighlightIndicator;  	bool braceBadLightIndicatorSet;  	int braceBadLightIndicator; -	int theEdge; +	int edgeState; +	EdgeProperties theEdge; +	std::vector<EdgeProperties> theMultiEdge;  	int marginNumberPadding; // the right-side padding of the number margin  	int ctrlCharPadding; // the padding around control character text blobs  	int lastSegItalicsOffset; // the offset so as not to clip italic characters at EOLs | 
