- using System.Collections.Generic;
- using Godot;
-
- namespace DScript.GodotEditor
- {
- /// <summary>
- /// 负责代码编辑器内的绘制操作
- /// </summary>
- public class TextEditPainter : Node2D
- {
- private Color ErrorLineColor = new Color(1, 0, 0, 0.2f);
-
- //code面板
- private CodePanel _codePanel;
- private TextEdit _textEdit;
- //报错行数
- private List<int> _errorLines = new List<int>();
-
- /// <summary>
- /// 设置文本编辑器
- /// </summary>
- public void SetTextEdit(CodeTextEdit textEdit)
- {
- _textEdit = textEdit;
- }
-
- /// <summary>
- /// 设置代码面板
- /// </summary>
- public void SetIdePanel(CodePanel codePanel)
- {
- _codePanel = codePanel;
- }
-
- /// <summary>
- /// 绘制 TextEdit 中报错的行数
- /// </summary>
- /// <param name="line">报错所在行数</param>
- public void DrawTextEditErrorLine(int line)
- {
- if (!_errorLines.Contains(line))
- {
- _errorLines.Add(line);
- _textEdit.SetLineAsSafe(line, true);
- }
- }
-
- /// <summary>
- /// 取消绘制 TextEdit 中报错的行数
- /// </summary>
- /// <param name="line">报错所在行数</param>
- public void UnDrawTextEditErrorLine(int line)
- {
- _errorLines.Remove(line);
- _textEdit.SetLineAsSafe(line, false);
- }
-
- public Vector2 ToPainterPosition(Vector2 v)
- {
- if (_codePanel != null)
- {
- return v * _codePanel.StartScale;
- }
-
- return v;
- }
-
- public override void _Draw()
- {
- if (_textEdit == null) return;
-
- //绘制报错的行
- if (_errorLines.Count > 0)
- {
- var lineHeight = _textEdit.GetLineHeight();
- var width = _textEdit.RectSize.x - _textEdit.MinimapWidth;
- for (int i = 0; i < _errorLines.Count; i++)
- {
- var pos = _textEdit.GetPosAtLineColumn(_errorLines[i], 0);
- if (pos.x > -1 && pos.y > -1)
- {
- DrawRect(new Rect2(0, pos.y - lineHeight, width, lineHeight), ErrorLineColor);
- }
- }
- }
- }
- }
- }