Browse Source

Fixed SD2-1190: Exception is thrown selecting all text and then cutting/deleting it.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2063 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
c838ffb4ad
  1. 16
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/FoldingStrategy/FoldMarker.cs
  2. 53
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/FoldMargin.cs

16
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/FoldingStrategy/FoldMarker.cs

@ -26,10 +26,16 @@ namespace ICSharpCode.TextEditor.Document @@ -26,10 +26,16 @@ namespace ICSharpCode.TextEditor.Document
static void GetPointForOffset(IDocument document, int offset, out int line, out int column)
{
if (offset < 0) offset = 0;
if (offset >= document.TextLength) offset = document.TextLength - 1;
line = document.GetLineNumberForOffset(offset);
column = offset - document.GetLineSegment(line).Offset;
if (offset > document.TextLength) {
line = document.TotalNumberOfLines + 1;
column = 1;
} else if (offset < 0) {
line = -1;
column = -1;
} else {
line = document.GetLineNumberForOffset(offset);
column = offset - document.GetLineSegment(line).Offset;
}
}
public FoldType FoldType {
@ -82,7 +88,7 @@ namespace ICSharpCode.TextEditor.Document @@ -82,7 +88,7 @@ namespace ICSharpCode.TextEditor.Document
}
public override int Length {
get { return base.Length; }
set {
set {
base.Length = value;
endLine = -1;
}

53
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/FoldMargin.cs

@ -68,8 +68,10 @@ namespace ICSharpCode.TextEditor @@ -68,8 +68,10 @@ namespace ICSharpCode.TextEditor
g.FillRectangle(BrushRegistry.GetBrush(textArea.Enabled ? lineNumberPainterColor.BackgroundColor : SystemColors.InactiveBorder), markerRectangle);
}
int currentLine = textArea.Document.GetFirstLogicalLine(textArea.Document.GetVisibleLine(textArea.TextView.FirstVisibleLine) + y);
PaintFoldMarker(g, currentLine, markerRectangle);
int currentLine = textArea.Document.GetFirstLogicalLine(textArea.TextView.FirstPhysicalLine + y);
if (currentLine < textArea.Document.TotalNumberOfLines) {
PaintFoldMarker(g, currentLine, markerRectangle);
}
}
}
}
@ -95,7 +97,7 @@ namespace ICSharpCode.TextEditor @@ -95,7 +97,7 @@ namespace ICSharpCode.TextEditor
List<FoldMarker> foldingsBetween = textArea.Document.FoldingManager.GetFoldingsContainsLineNumber(lineNumber);
List<FoldMarker> foldingsWithEnd = textArea.Document.FoldingManager.GetFoldingsWithEnd(lineNumber);
bool isFoldStart = foldingsWithStart.Count > 0;
bool isFoldStart = foldingsWithStart.Count > 0;
bool isBetween = foldingsBetween.Count > 0;
bool isFoldEnd = foldingsWithEnd.Count > 0;
@ -124,16 +126,16 @@ namespace ICSharpCode.TextEditor @@ -124,16 +126,16 @@ namespace ICSharpCode.TextEditor
foreach (FoldMarker foldMarker in foldingsWithEnd) {
if (foldMarker.EndLine > foldMarker.StartLine && !foldMarker.IsFolded) {
isFoldEndFromUpperFold = true;
}
}
}
DrawFoldMarker(g, new RectangleF(drawingRectangle.X + (drawingRectangle.Width - foldMarkerSize) / 2,
foldMarkerYPos,
foldMarkerSize,
foldMarkerSize),
isVisible,
isStartSelected
);
isVisible,
isStartSelected
);
// draw line above fold marker
if (isBetween || isFoldEndFromUpperFold) {
@ -155,19 +157,22 @@ namespace ICSharpCode.TextEditor @@ -155,19 +157,22 @@ namespace ICSharpCode.TextEditor
} else {
if (isFoldEnd) {
int midy = drawingRectangle.Top + drawingRectangle.Height / 2;
// draw fold end marker
g.DrawLine(BrushRegistry.GetPen(isEndSelected ? selectedFoldLine.Color : foldLineColor.Color),
xPos,
midy,
xPos + foldMarkerSize / 2,
midy);
// draw line above fold end marker
// must be drawn after fold marker because it might have a different color than the fold marker
g.DrawLine(BrushRegistry.GetPen(isBetweenSelected || isEndSelected ? selectedFoldLine.Color : foldLineColor.Color),
xPos,
drawingRectangle.Top,
xPos,
midy);
// draw fold end marker
g.DrawLine(BrushRegistry.GetPen(isBetweenSelected || isEndSelected ? selectedFoldLine.Color : foldLineColor.Color),
xPos,
midy,
xPos + foldMarkerSize / 2,
midy);
// draw line below fold end marker
if (isBetween) {
g.DrawLine(BrushRegistry.GetPen(isBetweenSelected ? selectedFoldLine.Color : foldLineColor.Color),
@ -237,7 +242,7 @@ namespace ICSharpCode.TextEditor @@ -237,7 +242,7 @@ namespace ICSharpCode.TextEditor
}
}
#region Drawing functions
#region Drawing functions
void DrawFoldMarker(Graphics g, RectangleF rectangle, bool isOpened, bool isSelected)
{
HighlightColor foldMarkerColor = textArea.Document.HighlightingStrategy.GetColorFor("FoldMarker");
@ -249,22 +254,22 @@ namespace ICSharpCode.TextEditor @@ -249,22 +254,22 @@ namespace ICSharpCode.TextEditor
g.DrawRectangle(BrushRegistry.GetPen(isSelected ? selectedFoldLine.Color : foldMarkerColor.Color), intRect);
int space = (int)Math.Round(((double)rectangle.Height) / 8d) + 1;
int mid = intRect.Height / 2 + intRect.Height % 2;
int mid = intRect.Height / 2 + intRect.Height % 2;
g.DrawLine(BrushRegistry.GetPen(foldLineColor.BackgroundColor),
rectangle.X + space,
rectangle.Y + mid,
rectangle.X + rectangle.Width - space,
g.DrawLine(BrushRegistry.GetPen(foldLineColor.BackgroundColor),
rectangle.X + space,
rectangle.Y + mid,
rectangle.X + rectangle.Width - space,
rectangle.Y + mid);
if (!isOpened) {
g.DrawLine(BrushRegistry.GetPen(foldLineColor.BackgroundColor),
rectangle.X + mid,
rectangle.Y + space,
rectangle.X + mid,
g.DrawLine(BrushRegistry.GetPen(foldLineColor.BackgroundColor),
rectangle.X + mid,
rectangle.Y + space,
rectangle.X + mid,
rectangle.Y + rectangle.Height - space);
}
}
#endregion
#endregion
}
}

Loading…
Cancel
Save