public Draw ( |
||
gr | ||
position | Point | |
range | Range | |
Résultat | void |
public override void Draw(Graphics gr, Point position, Range range)
{
//draw background
if (BackgroundBrush != null)
gr.FillRectangle(BackgroundBrush, position.X, position.Y, (range.End.iChar - range.Start.iChar) * range.tb.CharWidth, range.tb.CharHeight);
//draw chars
using (var f = new Font(range.tb.Font, FontStyle))
{
Line line = range.tb[range.Start.iLine];
float dx = range.tb.CharWidth;
float y = position.Y + range.tb.LineInterval / 2;
float x = position.X - range.tb.CharWidth / 3;
if (ForeBrush == null)
ForeBrush = new SolidBrush(range.tb.ForeColor);
if (range.tb.ImeAllowed)
{
//IME mode
for (int i = range.Start.iChar; i < range.End.iChar; i++)
{
SizeF size = FastColoredTextBox.GetCharSize(f, line[i].c);
var gs = gr.Save();
float k = size.Width > range.tb.CharWidth + 1 ? range.tb.CharWidth / size.Width : 1;
gr.TranslateTransform(x, y + (1 - k) * range.tb.CharHeight / 2);
gr.ScaleTransform(k, (float)Math.Sqrt(k));
gr.DrawString(line[i].c.ToString(), f, ForeBrush, 0, 0, stringFormat);
gr.Restore(gs);
x += dx;
}
}
else
{
//classic mode
for (int i = range.Start.iChar; i < range.End.iChar; i++)
{
//draw char
gr.DrawString(line[i].c.ToString(), f, ForeBrush, x, y, stringFormat);
x += dx;
}
}
}
}
public override void Draw(Graphics gr, Point position, Range range) { //draw background if (BackgroundBrush != null) { gr.SmoothingMode = SmoothingMode.None; var rect = new Rectangle(position.X, position.Y, (range.End.iChar - range.Start.iChar) * range.tb.CharWidth, range.tb.CharHeight); if (rect.Width == 0) { return; } gr.FillRectangle(BackgroundBrush, rect); // if (ForegroundBrush != null) { //draw text gr.SmoothingMode = SmoothingMode.AntiAlias; var r = new Range(range.tb, range.Start.iChar, range.Start.iLine, Math.Min(range.tb[range.End.iLine].Count, range.End.iChar), range.End.iLine); using (var style = new TextStyle(ForegroundBrush, null, FontStyle.Regular)) style.Draw(gr, new Point(position.X, position.Y - 1), r); } } }