public LayoutHelper(HexBufferLineProvider bufferLines, HexLineTransformProvider lineTransformProvider, double newViewportTop, HashSet<HexViewLine> oldVisibleLines, List<PhysicalLine> oldLines, HexFormattedLineSource formattedLineSource) { this.bufferLines = bufferLines; this.lineTransformProvider = lineTransformProvider; requestedViewportTop = newViewportTop; this.oldLines = oldLines; this.formattedLineSource = formattedLineSource; toPhysicalLine = new Dictionary<HexFormattedLine, PhysicalLine>(); this.oldVisibleLines = oldVisibleLines; foreach (var physLine in oldLines) { foreach (var line in physLine.Lines) toPhysicalLine[line] = physLine; } }
static PhysicalLine CreatePhysicalLineNoCache(HexBufferLineFormatter bufferLines, HexFormattedLineSource formattedLineSource, HexBufferPoint bufferPosition) { var bufferLine = bufferLines.GetLineFromPosition(bufferPosition); var formattedLine = formattedLineSource.FormatLineInVisualBuffer(bufferLine); return new PhysicalLine(new[] { formattedLine }); }
void CreateFormattedLineSource(double viewportWidthOverride) { lastFormattedLineSourceViewportWidth = viewportWidthOverride; bool useDisplayMode = TextOptions.GetTextFormattingMode(canvas) == TextFormattingMode.Display; var classifier = Options.IsColorizationEnabled() ? aggregateClassifier : NullHexClassifier.Instance; // This value is what VS uses, see: https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.text.formatting.iformattedlinesource.baseindentation.aspx // "This is generally a small value like 2.0, so that some characters (such as an italic // slash) will not be clipped by the left edge of the view." const double baseIndent = 2.0; (formattedLineSource as IDisposable)?.Dispose(); formattedLineSource = formattedHexSourceFactoryService.Create( baseIndent, useDisplayMode, classifier, hexAndAdornmentSequencer, classificationFormatMap); }