DS-Pokemon-Rom-Editor/DS_Map/ScintillaUtils/ScriptTooltip.cs
2021-08-10 14:20:10 +02:00

65 lines
2.9 KiB
C#

using ScintillaNET;
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DSPRE.ScintillaUtils {
public partial class ScriptTooltip : Form {
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
private static extern IntPtr CreateRoundRectRgn
(
int nLeftRect, // x-coordinate of upper-left corner
int nTopRect, // y-coordinate of upper-left corner
int nRightRect, // x-coordinate of lower-right corner
int nBottomRect, // y-coordinate of lower-right corner
int nWidthEllipse, // height of ellipse
int nHeightEllipse // width of ellipse
);
public string textBuffer { get; set; } = "";
public ScriptTooltip(string mainKeywords, string textBuffer) {
InitializeComponent();
this.textBuffer = textBuffer;
this.FormBorderStyle = FormBorderStyle.None;
ctrl.ReadOnly = false;
ctrl.StyleResetDefault();
ctrl.Styles[Style.Default].Font = "Consolas";
ctrl.Styles[Style.Default].Size = 10;
ctrl.Styles[Style.Default].BackColor = Color.FromArgb(0x2F2F2F);
ctrl.Styles[Style.Default].ForeColor = Color.FromArgb(0xFFFFFF);
ctrl.StyleClearAll();
// Configure the lexer styles
ctrl.Styles[Style.Cpp.Identifier].ForeColor = Color.FromArgb(0xD0DAE2);
ctrl.Styles[Style.Cpp.CommentLine].ForeColor = Color.FromArgb(0x40BF57);
ctrl.Styles[Style.Cpp.Number].ForeColor = Color.FromArgb(0xFFFF00);
ctrl.Styles[Style.Cpp.String].ForeColor = Color.FromArgb(0xFF00FF);
ctrl.Styles[Style.Cpp.Character].ForeColor = Color.FromArgb(0xE95454);
ctrl.Styles[Style.Cpp.Operator].ForeColor = Color.FromArgb(0xFFFF00);
ctrl.Styles[Style.Cpp.Word].ForeColor = Color.FromArgb(0x48A8EE);
ctrl.Styles[Style.Cpp.Word2].ForeColor = Color.FromArgb(0xF98906);
ctrl.SetKeywords(0, mainKeywords);
Size newSize = TextRenderer.MeasureText(textBuffer, new Font(ctrl.Styles[Style.Default].Font, ctrl.Styles[Style.Default].Size), ctrl.ClientSize, TextFormatFlags.WordBreak | TextFormatFlags.TextBoxControl);
this.ClientSize = new Size(this.ClientSize.Width, newSize.Height + this.panel1.Padding.All);
Region = Region.FromHrgn(CreateRoundRectRgn(0, 0, Width, Height, 10, 10));
}
public void WriteText(int delay = 15) {
ctrl.Text = "";
ctrl.BufferedDraw = true;
foreach (char c in this.textBuffer) {
Thread.Sleep(delay);
ctrl.Text += c;
ctrl.Update();
}
ctrl.ReadOnly = true;
}
}
}