本文整理汇总了C#中LayoutWrapper.Dispose方法的典型用法代码示例。如果您正苦于以下问题:C# LayoutWrapper.Dispose方法的具体用法?C# LayoutWrapper.Dispose怎么用?C# LayoutWrapper.Dispose使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LayoutWrapper
的用法示例。
在下文中一共展示了LayoutWrapper.Dispose方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DrawLinePart
//.........这里部分代码省略.........
if (lineNumber == Caret.Line) {
int caretOffset = Caret.Offset;
if (offset <= caretOffset && caretOffset <= offset + length) {
int index = caretOffset - offset;
if (Caret.Column > line.Length + 1) {
string virtualSpace = "";
var data = textEditor.GetTextEditorData ();
if (data.HasIndentationTracker && line.Length == 0) {
virtualSpace = this.textEditor.GetTextEditorData ().GetIndentationString (Caret.Location);
}
if (Caret.Column > line.Length + 1 + virtualSpace.Length)
virtualSpace += new string (' ', Caret.Column - line.Length - 1 - virtualSpace.Length);
// predit layout already contains virtual space.
if (!string.IsNullOrEmpty (textEditor.preeditString))
virtualSpace = "";
LayoutWrapper wrapper = new LayoutWrapper (PangoUtil.CreateLayout (textEditor));
wrapper.LineChars = virtualSpace.ToCharArray ();
wrapper.Layout.SetText (virtualSpace);
wrapper.Layout.Tabs = tabArray;
wrapper.Layout.FontDescription = textEditor.Options.Font;
int vy, vx;
wrapper.Layout.GetSize (out vx, out vy);
var x = ((pangoPosition + vx + layout.PangoWidth) / Pango.Scale.PangoScale);
SetVisibleCaretPosition (x, y, x, y);
xPos = (pangoPosition + layout.PangoWidth) / Pango.Scale.PangoScale;
if (!isSelectionDrawn && (selectionEnd == lineOffset + line.Length) && BackgroundRenderer == null) {
double startX;
double endX;
startX = xPos;
endX = (pangoPosition + vx + layout.PangoWidth) / Pango.Scale.PangoScale;
DrawRectangleWithRuler (cr, xPos + textEditor.HAdjustment.Value - TextStartPosition, new Cairo.Rectangle (startX, y, endX - startX, _lineHeight), this.SelectionColor.Background, true);
}
// When drawing virtual space before the selection start paint it as unselected.
var virtualSpaceMod = selectionStart < caretOffset ? 0 : virtualSpace.Length;
if ((!textEditor.IsSomethingSelected || (selectionStart >= offset && selectionStart != selectionEnd)) && (HighlightCaretLine || textEditor.Options.HighlightCaretLine) && Caret.Line == lineNumber)
DrawCaretLineMarker (cr, pangoPosition / Pango.Scale.PangoScale, y, vx / Pango.Scale.PangoScale, _lineHeight);
if (DecorateLineBg != null)
DecorateLineBg (cr, wrapper, offset, length, xPos, y, selectionStart + virtualSpaceMod, selectionEnd + virtualSpace.Length);
switch (textEditor.Options.ShowWhitespaces) {
case ShowWhitespaces.Selection:
if (textEditor.IsSomethingSelected && (selectionStart < offset || selectionStart == selectionEnd) && BackgroundRenderer == null)
DecorateTabsAndSpaces (cr, wrapper, offset, length, xPos, y, selectionStart, selectionEnd + virtualSpace.Length);
break;
case ShowWhitespaces.Always:
DecorateTabsAndSpaces (cr, wrapper, offset, length, xPos, y, selectionStart, selectionEnd + virtualSpace.Length);
break;
}
wrapper.Dispose ();
pangoPosition += vx;
} else if (index == length && string.IsNullOrEmpty (textEditor.preeditString)) {
var x = (pangoPosition + layout.PangoWidth) / Pango.Scale.PangoScale;
SetVisibleCaretPosition (x, y, x, y);
} else if (index >= 0 && index <= length) {
Pango.Rectangle strong_pos, weak_pos;
curIndex = byteIndex = 0;
int utf8ByteIndex = (int)TranslateToUTF8Index (layout.LineChars, (uint)index, ref curIndex, ref byteIndex);
layout.Layout.GetCursorPos (utf8ByteIndex, out strong_pos, out weak_pos);
var cx = xPos + (strong_pos.X / Pango.Scale.PangoScale);
var cy = y + (strong_pos.Y / Pango.Scale.PangoScale);
if (textEditor.preeditCursorCharIndex == 0) {
SetVisibleCaretPosition (cx, cy, cx, cy);
} else {
var preeditIndex = (uint)(index + textEditor.preeditCursorCharIndex);
utf8ByteIndex = (int)TranslateToUTF8Index (layout.LineChars, preeditIndex, ref curIndex, ref byteIndex);
layout.Layout.GetCursorPos (utf8ByteIndex, out strong_pos, out weak_pos);
var pcx = xPos + (strong_pos.X / Pango.Scale.PangoScale);
var pcy = y + (strong_pos.Y / Pango.Scale.PangoScale);
SetVisibleCaretPosition (pcx, pcy, cx, cy);
}
}
}
}
foreach (TextLineMarker marker in line.Markers.Where (m => m.IsVisible)) {
if (layout.Layout != null)
marker.Draw (textEditor, cr, y, metrics);
}
foreach (var marker in Document.GetTextSegmentMarkersAt (line).Where (m => m.IsVisible)) {
if (layout.Layout != null)
marker.Draw (textEditor, cr, layout.Layout, false, /*selected*/offset, offset + length, y, xPos, xPos + width);
}
pangoPosition += layout.PangoWidth;
int scaledDown = (int)(pangoPosition / Pango.Scale.PangoScale);
pangoPosition = scaledDown * Pango.Scale.PangoScale;
if (layout.IsUncached)
layout.Dispose ();
}
示例2: DrawLinePart
//.........这里部分代码省略.........
// highlight search results
ISegment firstSearch;
int o = offset;
uint curIndex = 0, byteIndex = 0;
while ((firstSearch = GetFirstSearchResult (o, offset + length)) != null) {
int x = pangoPosition;
HandleSelection (line, selectionStart, selectionEnd, firstSearch.Offset, firstSearch.EndOffset, delegate(int start, int end) {
uint startIndex = (uint)(start - offset);
uint endIndex = (uint)(end - offset);
if (startIndex < endIndex && endIndex <= layout.LineChars.Length) {
uint startTranslated = TranslateToUTF8Index (layout.LineChars, startIndex, ref curIndex, ref byteIndex);
uint endTranslated = TranslateToUTF8Index (layout.LineChars, endIndex, ref curIndex, ref byteIndex);
using (Cairo.Context cr = Gdk.CairoHelper.Create (win)) {
cr.Rectangle (XOffset, 0, textEditor.Allocation.Width - XOffset, textEditor.Allocation.Height);
cr.Clip ();
int l, x1, x2;
layout.Layout.IndexToLineX ((int)startTranslated, false, out l, out x1);
layout.Layout.IndexToLineX ((int)endTranslated, false, out l, out x2);
x1 += x;
x2 += x;
x1 /= (int)Pango.Scale.PangoScale;
x2 /= (int)Pango.Scale.PangoScale;
cr.Color = Mono.TextEditor.Highlighting.Style.ToCairoColor (MainSearchResult == null || MainSearchResult.Offset != firstSearch.Offset ? ColorStyle.SearchTextBg : ColorStyle.SearchTextMainBg, AlphaBlendSearchResults ? 0.6 : 1.0);
FoldingScreenbackgroundRenderer.DrawRoundRectangle (cr, true, true, x1, y, (int)(System.Math.Min (10, width) * textEditor.Options.Zoom), x2 - x1, textEditor.LineHeight);
cr.Fill ();
}
}
}, null);
o = System.Math.Max (firstSearch.EndOffset, o + 1);
}
win.DrawLayout (GetGC (ColorStyle.Default.Color), xPos, y, layout.Layout);
if (DecorateLineFg != null)
DecorateLineFg (win, layout, offset, length, xPos, y, selectionStart, selectionEnd);
if (Document.GetLine (Caret.Line) == line) {
int caretOffset = Caret.Offset;
if (offset <= caretOffset && caretOffset <= offset + length) {
Pango.Rectangle strong_pos, weak_pos;
int index = caretOffset- offset;
if (offset <= textEditor.preeditOffset && textEditor.preeditOffset < offset + length) {
index += textEditor.preeditString.Length;
}
if (Caret.Column > line.EditableLength) {
string virtualSpace = this.textEditor.GetTextEditorData ().GetVirtualSpaces (Caret.Line, Caret.Column);
LayoutWrapper wrapper = new LayoutWrapper (PangoUtil.CreateLayout (textEditor));
wrapper.LineChars = virtualSpace.ToCharArray ();
wrapper.Layout.SetText (virtualSpace);
wrapper.Layout.Tabs = tabArray;
int vy, vx;
wrapper.Layout.GetSize (out vx, out vy);
SetVisibleCaretPosition (win, ' ', (int)((pangoPosition + vx + layout.PangoWidth) / Pango.Scale.PangoScale), y);
xPos = (int)((pangoPosition + layout.PangoWidth) / Pango.Scale.PangoScale);
if (!isSelectionDrawn && (selectionEnd == line.Offset + line.EditableLength)) {
int startX;
int endX;
startX = xPos;
endX = (int)((pangoPosition + vx + layout.PangoWidth) / Pango.Scale.PangoScale);
DrawRectangleWithRuler (win, xPos + (int)textEditor.HAdjustment.Value - TextStartPosition, new Rectangle (startX, y, endX - startX, textEditor.LineHeight), this.SelectionColor.BackgroundColor, true);
}
if (DecorateLineBg != null)
DecorateLineBg (win, wrapper, offset, length, xPos, y, selectionStart, selectionEnd + virtualSpace.Length);
if (DecorateLineFg != null)
DecorateLineFg (win, wrapper, offset, length, xPos, y, selectionStart, selectionEnd + virtualSpace.Length);
wrapper.Dispose ();
pangoPosition += vx;
} else if (index >= 0 && index < length) {
curIndex = byteIndex = 0;
layout.Layout.GetCursorPos ((int)TranslateToUTF8Index (layout.LineChars, (uint)index, ref curIndex, ref byteIndex), out strong_pos, out weak_pos);
char caretChar = Document.GetCharAt (caretOffset);
if (textEditor.Options.ShowSpaces && caretChar == ' ')
caretChar = spaceMarkerChar;
if (textEditor.Options.ShowTabs && caretChar == '\t')
caretChar = tabMarkerChar;
SetVisibleCaretPosition (win, caretChar, xPos + (int)(strong_pos.X / Pango.Scale.PangoScale), y);
} else if (index == length) {
SetVisibleCaretPosition (win, textEditor.Options.ShowEolMarkers ? eolMarkerChar : ' ', (int)((pangoPosition + layout.PangoWidth) / Pango.Scale.PangoScale), y);
}
}
}
foreach (TextMarker marker in line.Markers) {
marker.Draw (textEditor, win, layout.Layout, false, /*selected*/offset, offset + length, y, xPos, xPos + width);
}
pangoPosition += layout.PangoWidth;
if (layout.IsUncached)
layout.Dispose ();
}
示例3: DrawLinePart
//.........这里部分代码省略.........
uint startTranslated = TranslateToUTF8Index (layout.LineChars, startIndex, ref curIndex, ref byteIndex);
uint endTranslated = TranslateToUTF8Index (layout.LineChars, endIndex, ref curIndex, ref byteIndex);
int l, x1, x2;
layout.Layout.IndexToLineX ((int)startTranslated, false, out l, out x1);
layout.Layout.IndexToLineX ((int)endTranslated, false, out l, out x2);
x1 += (int)x;
x2 += (int)x;
x1 /= (int)Pango.Scale.PangoScale;
x2 /= (int)Pango.Scale.PangoScale;
cr.Color = MainSearchResult.IsInvalid || MainSearchResult.Offset != firstSearch.Offset ? ColorStyle.SearchTextBg : ColorStyle.SearchTextMainBg;
FoldingScreenbackgroundRenderer.DrawRoundRectangle (cr, true, true, x1, y, System.Math.Min (10, width) * textEditor.Options.Zoom, x2 - x1, LineHeight);
cr.Fill ();
}
}, null);
o = System.Math.Max (firstSearch.EndOffset, o + 1);
}
}
cr.Save ();
cr.Translate (xPos, y);
cr.ShowLayout (layout.Layout);
cr.Restore ();
if (DecorateLineFg != null)
DecorateLineFg (cr, layout, offset, length, xPos, y, selectionStart, selectionEnd);
if (lineNumber == Caret.Line) {
int caretOffset = Caret.Offset;
if (offset <= caretOffset && caretOffset <= offset + length) {
int index = caretOffset - offset;
if (Caret.Column > line.Length + 1) {
string virtualSpace = "";
var data = textEditor.GetTextEditorData ();
if (data.HasIndentationTracker && line.Length == 0) {
virtualSpace = this.textEditor.GetTextEditorData ().GetIndentationString (Caret.Location);
}
if (Caret.Column > line.Length + 1 + virtualSpace.Length)
virtualSpace += new string (' ', Caret.Column - line.Length - 1 - virtualSpace.Length);
LayoutWrapper wrapper = new LayoutWrapper (PangoUtil.CreateLayout (textEditor));
wrapper.LineChars = virtualSpace.ToCharArray ();
wrapper.Layout.SetText (virtualSpace);
wrapper.Layout.Tabs = tabArray;
wrapper.Layout.FontDescription = textEditor.Options.Font;
int vy, vx;
wrapper.Layout.GetSize (out vx, out vy);
SetVisibleCaretPosition (((pangoPosition + vx + layout.PangoWidth) / Pango.Scale.PangoScale), y);
xPos = (pangoPosition + layout.PangoWidth) / Pango.Scale.PangoScale;
if (!isSelectionDrawn && (selectionEnd == lineOffset + line.Length)) {
double startX;
double endX;
startX = xPos;
endX = (pangoPosition + vx + layout.PangoWidth) / Pango.Scale.PangoScale;
DrawRectangleWithRuler (cr, xPos + textEditor.HAdjustment.Value - TextStartPosition, new Cairo.Rectangle (startX, y, endX - startX, LineHeight), this.SelectionColor.CairoBackgroundColor, true);
}
if ((HighlightCaretLine || textEditor.Options.HighlightCaretLine) && Caret.Line == lineNumber)
DrawCaretLineMarker (cr, pangoPosition / Pango.Scale.PangoScale, y, vx / Pango.Scale.PangoScale);
// When drawing virtual space before the selection start paint it as unselected.
var virtualSpaceMod = selectionStart < caretOffset ? 0 : virtualSpace.Length;
if (DecorateLineBg != null)
DecorateLineBg (cr, wrapper, offset, length, xPos, y, selectionStart + virtualSpaceMod, selectionEnd + virtualSpace.Length);
if (DecorateLineFg != null)
DecorateLineFg (cr, wrapper, offset, length, xPos, y, selectionStart + virtualSpaceMod, selectionEnd + virtualSpace.Length);
wrapper.Dispose ();
pangoPosition += vx;
} else if (index == length && textEditor.preeditString == null) {
SetVisibleCaretPosition ((pangoPosition + layout.PangoWidth) / Pango.Scale.PangoScale, y);
} else if (index >= 0 && index <= length) {
Pango.Rectangle strong_pos, weak_pos;
curIndex = byteIndex = 0;
int utf8ByteIndex = (int)TranslateToUTF8Index (layout.LineChars, (uint)index, ref curIndex, ref byteIndex);
if (textEditor.preeditString != null && textEditor.preeditCursorCharIndex > 0) {
curIndex = byteIndex = 0;
int preeditUtf8ByteIndex = (int)TranslateToUTF8Index (textEditor.preeditString.ToCharArray (),
(uint)textEditor.preeditCursorCharIndex,
ref curIndex, ref byteIndex);
utf8ByteIndex += preeditUtf8ByteIndex;
}
layout.Layout.GetCursorPos (utf8ByteIndex, out strong_pos, out weak_pos);
SetVisibleCaretPosition (xPos + (strong_pos.X / Pango.Scale.PangoScale), y);
}
}
}
foreach (TextMarker marker in line.Markers.Where (m => m.IsVisible)) {
if (layout.Layout != null)
marker.Draw (textEditor, cr, layout.Layout, false, /*selected*/offset, offset + length, y, xPos, xPos + width);
}
pangoPosition += layout.PangoWidth;
if (layout.IsUncached)
layout.Dispose ();
}
示例4: DrawIndent
void DrawIndent (Cairo.Context cr, LayoutWrapper layout, DocumentLine line, double xPos, double y)
{
if (!textEditor.Options.DrawIndentationMarkers)
return;
bool dispose = false;
if (line.Length == 0) {
var nextLine = line.NextLine;
while (nextLine != null && nextLine.Length == 0)
nextLine = nextLine.NextLine;
if (nextLine != null) {
layout = GetLayout (nextLine);
dispose = true;
}
}
if (layout.IndentSize == 0) {
if (dispose && layout.IsUncached)
layout.Dispose ();
return;
}
cr.Save ();
var dotted = new [] { textEditor.Options.Zoom };
cr.SetDash (dotted, (int)y + textEditor.VAdjustment.Value);
var top = y;
var bottom = y + LineHeight;
if (Caret.Line == line.LineNumber && textEditor.GetTextEditorData ().HighlightCaretLine) {
top += textEditor.Options.Zoom;
bottom -= textEditor.Options.Zoom;
}
for (int i = 0; i < layout.IndentSize; i += textEditor.Options.IndentationSize) {
var x = System.Math.Floor (xPos + i * charWidth);
cr.MoveTo (x + 0.5, top);
cr.LineTo (x + 0.5, bottom);
cr.SetSourceColor (ColorStyle.IndentationGuide.Color);
cr.Stroke ();
}
cr.Restore ();
if (dispose && layout.IsUncached)
layout.Dispose ();
}