Browse Source

LineNumberMargin: align baselines of line number and main text

FoldingMargin: put marker in the center between TextTop and TextBottom, not in the middle of the whole TextLine.
IconBarMargin: put icon in the center between TextTop and TextBottom
pull/18/head
Daniel Grunwald 14 years ago
parent
commit
eadbd3d3c0
  1. 3
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs
  2. 4
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/LineNumberMargin.cs
  3. 6
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingMargin.cs
  4. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs
  5. 4
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualYPosition.cs

3
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarMargin.cs

@ -100,7 +100,8 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -100,7 +100,8 @@ namespace ICSharpCode.AvalonEdit.AddIn
int lineNumber = line.FirstDocumentLine.LineNumber;
IBookmark bm;
if (bookmarkDict.TryGetValue(lineNumber, out bm)) {
Rect rect = new Rect(0, PixelSnapHelpers.Round(line.VisualTop - textView.VerticalOffset, pixelSize.Height), 16, 16);
double lineMiddle = line.GetTextLineVisualYPosition(line.TextLines[0], VisualYPosition.TextMiddle) - textView.VerticalOffset;
Rect rect = new Rect(0, PixelSnapHelpers.Round(lineMiddle - 8, pixelSize.Height), 16, 16);
if (dragDropBookmark == bm && dragStarted)
drawingContext.PushOpacity(0.5);
drawingContext.DrawImage((bm.Image ?? BookmarkBase.DefaultBookmarkImage).ImageSource, rect);

4
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/LineNumberMargin.cs

@ -62,8 +62,8 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -62,8 +62,8 @@ namespace ICSharpCode.AvalonEdit.Editing
lineNumber.ToString(CultureInfo.CurrentCulture),
typeface, emSize, foreground
);
drawingContext.DrawText(text, new Point(renderSize.Width - text.Width,
line.VisualTop - textView.VerticalOffset));
double y = line.GetTextLineVisualYPosition(line.TextLines[0], VisualYPosition.TextTop);
drawingContext.DrawText(text, new Point(renderSize.Width - text.Width, y - textView.VerticalOffset));
}
}
}

6
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingMargin.cs

@ -116,8 +116,8 @@ namespace ICSharpCode.AvalonEdit.Folding @@ -116,8 +116,8 @@ namespace ICSharpCode.AvalonEdit.Folding
foreach (FoldingMarginMarker m in markers) {
int visualColumn = m.VisualLine.GetVisualColumn(m.FoldingSection.StartOffset - m.VisualLine.FirstDocumentLine.Offset);
TextLine textLine = m.VisualLine.GetTextLine(visualColumn);
double yPos = m.VisualLine.GetTextLineVisualYPosition(textLine, VisualYPosition.LineTop) - TextView.VerticalOffset;
yPos += (textLine.Height - m.DesiredSize.Height) / 2;
double yPos = m.VisualLine.GetTextLineVisualYPosition(textLine, VisualYPosition.TextMiddle) - TextView.VerticalOffset;
yPos -= m.DesiredSize.Height / 2;
double xPos = (finalSize.Width - m.DesiredSize.Width) / 2;
m.Arrange(new Rect(PixelSnapHelpers.Round(new Point(xPos, yPos), pixelSize), m.DesiredSize));
}
@ -310,7 +310,7 @@ namespace ICSharpCode.AvalonEdit.Folding @@ -310,7 +310,7 @@ namespace ICSharpCode.AvalonEdit.Folding
double GetVisualPos(VisualLine vl, TextLine tl, double pixelHeight)
{
double pos = vl.GetTextLineVisualYPosition(tl, VisualYPosition.LineTop) + tl.Height / 2 - TextView.VerticalOffset;
double pos = vl.GetTextLineVisualYPosition(tl, VisualYPosition.TextMiddle) - TextView.VerticalOffset;
return PixelSnapHelpers.PixelAlign(pos, pixelHeight);
}

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs

@ -272,6 +272,8 @@ namespace ICSharpCode.AvalonEdit.Rendering @@ -272,6 +272,8 @@ namespace ICSharpCode.AvalonEdit.Rendering
return pos + tl.Baseline - textView.DefaultBaseline;
case VisualYPosition.TextBottom:
return pos + tl.Baseline - textView.DefaultBaseline + textView.DefaultLineHeight;
case VisualYPosition.TextMiddle:
return pos + tl.Baseline - textView.DefaultBaseline + textView.DefaultLineHeight / 2;
case VisualYPosition.Baseline:
return pos + tl.Baseline;
default:

4
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualYPosition.cs

@ -35,6 +35,10 @@ namespace ICSharpCode.AvalonEdit.Rendering @@ -35,6 +35,10 @@ namespace ICSharpCode.AvalonEdit.Rendering
/// </summary>
TextBottom,
/// <summary>
/// The middle between TextTop and TextBottom.
/// </summary>
TextMiddle,
/// <summary>
/// Returns the baseline of the text.
/// </summary>
Baseline

Loading…
Cancel
Save