public LineSpan[] GetLineSpans(int count) { EnsureLines(); int p = (int)position; int c = Math.Min(count, LineCount - p); if (c <= 0) { return(new LineSpan[0]); } var spans = new LineSpan[c]; for (int i = 0; i < c; ++i) { TextSpan[] line; if ((p + i) < lines.Length) { line = lines[p + i]; } else { line = new TextSpan[] { new EmptyTextSpan() } }; spans[i] = new LineSpan(p + i, line); } position = p + c; return(spans); }
public void DecorateLastLine(LineSpan line) { for (int i = 0; i < line.TextSpans.Length; ++i) { var span = line.TextSpans[i]; if (span.Style == null) { span.Style = "lastLine"; } else { span.Style = span.Style + " lastLine"; } } }
public void AddLayoutLine(LineSpan line, ref RectangleF rcLine /* put in state */) { float cyLine = MeasureLineHeight(line); rcLine.Height = cyLine; var spans = ComputeSpanLayouts(line.TextSpans, rcLine); var ll = new LayoutLine(line.Position) { Extent = LineExtent(rcLine, spans), Spans = spans, }; this.visibleLines.Add(rcLine.Top, ll); rcLine.Offset(0, cyLine); }
private float MeasureLineHeight(LineSpan line) { float height = 0.0F; foreach (var span in line.TextSpans) { styleStack.PushStyle(span.Style); var font = styleStack.GetFont(defaultFont); height = Math.Max( height, font.Height + styleStack.GetNumber(s => s.PaddingTop) + styleStack.GetNumber(s => s.PaddingBottom)); styleStack.PopStyle(); } return(height); }
public override Tuple <Address, LineSpan> GenerateSpan() { var line = new List <TextSpan>(); line.Add(new AddressSpan(addr.ToString(), addr, UiStyles.MemoryWindow)); var addrStart = Align(addr, BytesPerLine); var addrEnd = Address.Min(addrStart + BytesPerLine, item.Address + item.Size); var linStart = addrStart.ToLinear(); var linEnd = addrEnd.ToLinear(); var lin = linStart; var cbFiller = addr.ToLinear() - linStart; var cbBytes = linEnd - addr.ToLinear(); var cbPadding = BytesPerLine - (cbFiller + cbBytes); var abCode = new List <byte>(); // Do any filler first if (cbFiller > 0) { line.Add(new MemoryTextSpan(new string(' ', 3 * (int)cbFiller), UiStyles.MemoryWindow)); } var rdr = program.CreateImageReader(addr); while (rdr.Address.ToLinear() < linEnd) { if (rdr.IsValid) { var addr1 = rdr.Address; byte b = rdr.ReadByte(); line.Add(new MemoryTextSpan(addr1, string.Format(" {0:X2}", b), UiStyles.MemoryWindow)); //$BUG: should use platform.Encoding abCode.Add(b); } else { cbPadding = linEnd - rdr.Address.ToLinear(); addrEnd = rdr.Address; break; } } // Do any padding after. if (cbPadding > 0) { line.Add(new MemoryTextSpan(new string(' ', 3 * (int)cbPadding), UiStyles.MemoryWindow)); } // Now display the code bytes. string sBytes = RenderBytesAsText(abCode.ToArray()); line.Add(new MemoryTextSpan(" ", UiStyles.MemoryWindow)); line.Add(new MemoryTextSpan(sBytes, UiStyles.MemoryWindow)); var linePos = this.addr; this.addr = addrEnd; var memLine = new LineSpan(linePos, line.ToArray()); if (rdr.Address >= item.EndAddress) { DecorateLastLine(memLine); } return(Tuple.Create(addrEnd, memLine)); }
private float MeasureLineHeight(LineSpan line) { float height = 0.0F; foreach (var span in line.TextSpans) { GetStyleStack().PushStyle(span.Style); var font = styleStack.GetFont(this); height = Math.Max(height, font.Height); styleStack.PopStyle(); } return height; }
public LineSpan[] GetLineSpans(int count) { int p = (int)position; int c = Math.Min(count, lines.Length - p); if (c <= 0) return new LineSpan[0]; var spans = new LineSpan[c]; for (int i = 0; i < c; ++i) { spans[i] = new LineSpan(p+i, lines[p+i]); } position = p + c; return spans; }
public override Tuple<Address, LineSpan> GenerateSpan() { var line = new List<TextSpan>(); line.Add(new AddressSpan(addr.ToString(), addr, UiStyles.MemoryWindow)); var addrStart = Align(addr, BytesPerLine); var addrEnd = Address.Min(addrStart + BytesPerLine, item.Address + item.Size); var linStart = addrStart.ToLinear(); var linEnd = addrEnd.ToLinear(); var cbFiller = addr.ToLinear() - linStart; var cbBytes = linEnd - addr.ToLinear(); var cbPadding = BytesPerLine - (cbFiller + cbBytes); var abCode = new List<byte>(); // Do any filler first if (cbFiller > 0) { line.Add(new MemoryTextSpan(new string(' ', 3 * (int)cbFiller), UiStyles.MemoryWindow)); } var rdr = program.CreateImageReader(addr); while (rdr.Address.ToLinear() < linEnd) { if (rdr.IsValid) { var addr1 = rdr.Address; byte b = rdr.ReadByte(); line.Add(new MemoryTextSpan(addr1, string.Format(" {0:X2}", b), UiStyles.MemoryWindow)); //$BUG: should use platform.Encoding abCode.Add(b); } else { cbPadding = linEnd - rdr.Address.ToLinear(); addrEnd = rdr.Address; break; } } // Do any padding after. if (cbPadding > 0) { line.Add(new MemoryTextSpan(new string(' ', 3 * (int)cbPadding), UiStyles.MemoryWindow)); } // Now display the code bytes. string sBytes = RenderBytesAsText(abCode.ToArray()); line.Add(new MemoryTextSpan(" ", UiStyles.MemoryWindow)); line.Add(new MemoryTextSpan(sBytes, UiStyles.MemoryWindow)); var linePos = this.addr; this.addr = addrEnd; var memLine = new LineSpan(linePos, line.ToArray()); if (rdr.Address >= item.EndAddress) { DecorateLastLine(memLine); } return Tuple.Create(addrEnd, memLine); }
public void DecorateLastLine(LineSpan line) { for (int i = 0; i < line.TextSpans.Length; ++i) { var span = line.TextSpans[i]; if (span.Style == null) span.Style = "lastLine"; else span.Style = span.Style + " lastLine"; } }
private float MeasureLineHeight(LineSpan line) { float height = 0.0F; foreach (var span in line.TextSpans) { styleStack.PushStyle(span.Style); var font = styleStack.GetFont(defaultFont); height = Math.Max( height, font.Height + styleStack.GetNumber(s => s.PaddingTop) + styleStack.GetNumber(s => s.PaddingBottom)); styleStack.PopStyle(); } return height; }