public override void Draw(AdvancedDrawBatch drawBatch, DrawButtonInfo info) { Update(info.EllapsedTime, info.ButtonState); SharedString str = _text != null ? _text : info.Text; float scale = _font.Scale; UniversalFont font = _font.Font; Color color = ColorFromState * info.Opacity * Opacity; Rectangle target = _margin.ComputeRect(info.Target); drawBatch.DrawText(font, str, target, _textAlign, color, _font.Spacing, (float)_lineHeight / 100.0f, scale, _textRotation); }
public override void Draw(AdvancedDrawBatch drawBatch, DrawButtonInfo info) { Update(info.EllapsedTime, info.ButtonState); SharedString str = _text != null ? _text : info.Text; float scale = _font.Scale; UniversalFont font = _font.Font; Color color = ColorFromState * info.Opacity * Opacity; Rectangle target = _margin.ComputeRect(info.Target); bool drawWithEllipsis = false; int ellipsisSize = _textRotation == TextRotation.Rotate90 || _textRotation == TextRotation.Rotate270 ? target.Height : target.Width; if (_pathEllipsis) { int length = (int)_font.MeasureString(str).X; if (length >= ellipsisSize) { drawWithEllipsis = true; } } if (drawWithEllipsis) { int cut = 3; while (drawWithEllipsis) { lock (str) { ComputeEllipsis(_stringBuilder, str.StringBuilder, cut); } int length = (int)_font.MeasureString(_stringBuilder).X; if (length < ellipsisSize) { break; } cut += 2; } drawBatch.DrawText(font, _stringBuilder, target, _textAlign, color, _font.Spacing, (float)_lineHeight / 100.0f, scale, _textRotation); } else if (_line >= 0) { _stringBuilder.Clear(); lock (str) { StringBuilder textStringBuilder = str.StringBuilder; int line = 0; for (int idx = 0; idx < textStringBuilder.Length; ++idx) { char character = textStringBuilder[idx]; if (character == '\n') { line++; if (line > _line) { break; } } if (character == '\r') { continue; } if (line == _line) { _stringBuilder.Append(textStringBuilder[idx]); } } } drawBatch.DrawText(font, _stringBuilder, target, _textAlign, color, _font.Spacing, (float)_lineHeight / 100.0f, scale, _textRotation); } else { drawBatch.DrawText(font, str, target, _textAlign, color, _font.Spacing, (float)_lineHeight / 100.0f, scale, _textRotation); } }
public override void Draw(AdvancedDrawBatch drawBatch, DrawButtonInfo info) { int carretPosition = info.Additional != null ? (int)info.Additional : -1; bool focused = false; Update(info.EllapsedTime, info.ButtonState); if (info.ButtonState.HasFlag(ButtonState.Checked) && carretPosition >= 0) { _flash += info.EllapsedTime * 2; _flash %= 2; focused = true; } else { _flash = 0; } SharedString str = info.Text; float scale = _font.Scale; UniversalFont font = _font.Font; Color color = ColorFromState * info.Opacity * Opacity; Rectangle target = _margin.ComputeRect(info.Target); float spacing = _font.Spacing; lock (str) { StringBuilder builder = str.StringBuilder; if (_flash > 1) { _string.Clear(); carretPosition = Math.Min(builder.Length, carretPosition); for (int idx = 0; idx < carretPosition; ++idx) { _string.Append(builder[idx]); } carretPosition = (int)(font.MeasureString(_string, spacing, 0) * scale).X; } _string.Clear(); _string.Append(builder); } Vector2 size = font.MeasureString(_string, spacing, 0) * scale; if (focused) { size.X += font.MeasureString("|", spacing).X *scale; } int positionX = target.X; if (size.X >= target.Width) { positionX = target.Right - (int)size.X; } else { switch (_textAlign & TextAlign.Horz) { case TextAlign.Right: positionX = target.Right - (int)size.X; break; case TextAlign.Center: positionX = target.Center.X - (int)size.X / 2; break; } } drawBatch.PushClip(target); target.X = positionX; drawBatch.DrawText(font, _string, target, _textAlign & TextAlign.Vert, color, spacing, 0, scale, TextRotation.None); if (_flash > 1) { target.X += carretPosition; drawBatch.DrawText(font, "|", target, _textAlign & TextAlign.Vert, color, spacing, 0, scale); } drawBatch.PopClip(); }