上週,我決定創建一個用於測量C++代碼覆蓋率的Visual Studio擴展。基本上我自己需要我的日常工作。我想到的是可以找到的項目https://github.com/atlaste/CPPCoverage。文本前面的Visual Studio裝飾會干擾選擇
大部分工作正常。然而,我有一些裝飾層的問題:
該項目的特點之一是創建(未)覆蓋代碼的突出顯示。突出自身工作正常,但似乎與Visual Studio的選擇代碼干擾:
相關的代碼這是負責的高亮:
private void HighlightCoverage(CoverageState[] coverdata, ITextViewLine line)
{
IWpfTextViewLineCollection textViewLines = view.TextViewLines;
int lineno = 1 + view.TextSnapshot.GetLineNumberFromPosition(line.Extent.Start);
CoverageState covered = lineno < coverdata.Length ?
coverdata[lineno] : CoverageState.Irrelevant;
if (covered != CoverageState.Irrelevant)
{
SnapshotSpan span = new SnapshotSpan(view.TextSnapshot,
Span.FromBounds(line.Start, line.End));
Geometry g = textViewLines.GetMarkerGeometry(span);
if (g != null)
{
GeometryDrawing drawing = (covered == CoverageState.Covered) ?
new GeometryDrawing(coveredBrush, coveredPen, g) :
new GeometryDrawing(uncoveredBrush, uncoveredPen, g);
drawing.Freeze();
DrawingImage drawingImage = new DrawingImage(drawing);
drawingImage.Freeze();
Image image = new Image();
image.Source = drawingImage;
//Align the image with the top of the bounds of the text geometry
Canvas.SetLeft(image, g.Bounds.Left);
Canvas.SetTop(image, g.Bounds.Top);
layer.AddAdornment(AdornmentPositioningBehavior.TextRelative,
span, null, image, null);
}
}
}
與完整的代碼正確的上下文可以在這裏找到:https://github.com/atlaste/CPPCoverage/blob/master/CoverageExt/CodeRendering/CodeCoverage.cs。
問:有人可以告訴我如何在背景而不是前景渲染塊?
PS:作爲一個變通我注意到你可以設置不透明度圖層。雖然這是一個很好的解決辦法,但我寧願將該圖層置於後臺。 – atlaste