public void SetText(string text) { var ptr = UnsafeHelpers.StringToHGlobalUTF8(text); igExtTextEditorSetText(textedit, ptr); Marshal.FreeHGlobal(ptr); }
public void AddTtfFile(string file) { var str = UnsafeHelpers.StringToHGlobalUTF8(file); pg_addttfglobal(str); Marshal.FreeHGlobal(str); }
public void InputTextMultiline(string id, Vector2 size, ImGuiInputTextFlags flags, int sz = -1) { var idBytes = UnsafeHelpers.StringToHGlobalUTF8(id); ImGuiNative.igInputTextMultiline((byte *)idBytes, (byte *)Pointer, (uint)(sz > 0 ? sz : Size), size, flags, Callback, (void *)0); Marshal.FreeHGlobal(idBytes); }
public override float LineHeight(string fontName, float size) { var fontPtr = UnsafeHelpers.StringToHGlobalUTF8(fontName); var retval = pg_lineheight(ctx, fontPtr, size * (96.0f / 72.0f)); Marshal.FreeHGlobal(fontPtr); return(retval); }
public void Render(string id) { ImGui.PushFont(ImGuiHelper.SystemMonospace); var ptr = UnsafeHelpers.StringToHGlobalUTF8(id); igExtTextEditorRender(textedit, ptr); Marshal.FreeHGlobal(ptr); ImGui.PopFont(); }
public override Point MeasureString(string fontName, float size, string text) { var textPtr = UnsafeHelpers.StringToHGlobalUTF8(text); var fontPtr = UnsafeHelpers.StringToHGlobalUTF8(fontName); pg_measurestring(ctx, textPtr, fontPtr, size * (96.0f / 72.0f), out var width, out var height); Marshal.FreeHGlobal(textPtr); Marshal.FreeHGlobal(fontPtr); return(new Point((int)width, (int)height)); }
public void AddTtfFile(string file) { if (string.IsNullOrEmpty(file)) { throw new InvalidOperationException(); } var str = UnsafeHelpers.StringToHGlobalUTF8(file); pg_addttfglobal(str); Marshal.FreeHGlobal(str); }
public override float LineHeight(string fontName, float size) { if (string.IsNullOrEmpty(fontName)) { throw new InvalidOperationException("LineHeight fontName cannot be null"); } var fontPtr = UnsafeHelpers.StringToHGlobalUTF8(fontName); var retval = pg_lineheight(ctx, fontPtr, size * (96.0f / 72.0f)); Marshal.FreeHGlobal(fontPtr); return(retval); }
public override void DrawStringBaseline(string fontName, float size, string text, float x, float y, float start_x, Color4 color, bool underline = false, TextShadow shadow = default) { var pixels = size * (96.0f / 72.0f); drawX = (int)(start_x); drawY = (int)y; int indent = (int)(x - start_x); var textPtr = UnsafeHelpers.StringToHGlobalUTF8(text); var fontPtr = UnsafeHelpers.StringToHGlobalUTF8(fontName); pg_drawstring(ctx, textPtr, fontPtr, pixels, indent, underline ? 1 : 0, color.R, color.G, color.B, color.A, shadow.Enabled ? &shadow.Color : (Color4 *)0); Marshal.FreeHGlobal(textPtr); Marshal.FreeHGlobal(fontPtr); }
public override Point MeasureString(string fontName, float size, string text) { if (string.IsNullOrEmpty(fontName)) { throw new InvalidOperationException("fontName null"); } var textPtr = UnsafeHelpers.StringToHGlobalUTF8(text); var fontPtr = UnsafeHelpers.StringToHGlobalUTF8(fontName); pg_measurestring(ctx, textPtr, fontPtr, size * (96.0f / 72.0f), out var width, out var height); Marshal.FreeHGlobal(textPtr); Marshal.FreeHGlobal(fontPtr); return(new Point((int)width, (int)height)); }
public override unsafe BuiltRichText BuildText(IList <RichTextNode> nodes, int width, float sizeMultiplier = 1f) { //Sort into paragraphs var paragraphs = new List <List <RichTextNode> >(); paragraphs.Add(new List <RichTextNode>()); int first = 0; while (nodes[first] is RichTextParagraphNode && first < nodes.Count) { first++; } var ta = (nodes[first] as RichTextTextNode).Alignment; paragraphs[paragraphs.Count - 1].Add(nodes[first]); foreach (var node in nodes.Skip(first + 1)) { if (node is RichTextParagraphNode) { paragraphs.Add(new List <RichTextNode>()); } else { var n = (RichTextTextNode)node; var align = n.Alignment; if (align != ta && paragraphs[paragraphs.Count - 1].Count > 0) { paragraphs.Add(new List <RichTextNode>()); } paragraphs[paragraphs.Count - 1].Add(node); ta = align; } } //Build markup var markups = new List <string>(); var alignments = new List <TextAlignment>(); for (int i = 0; i < paragraphs.Count; i++) { //make span var builder = new StringBuilder(); TextAlignment a = TextAlignment.Left; foreach (var tn in paragraphs[i]) { var text = (RichTextTextNode)tn; a = text.Alignment; builder.Append("<span "); if (text.Italic) { builder.Append("font_style=\"italic\" "); } else { builder.Append("font_style=\"normal\" "); } if (text.Bold) { builder.Append("font_weight=\"bold\" "); } else { builder.Append("font_weight=\"normal\" "); } builder.Append("fgcolor=\"#"); builder.Append(((int)(text.Color.R * 255f)).ToString("X2")); builder.Append(((int)(text.Color.G * 255f)).ToString("X2")); builder.Append(((int)(text.Color.B * 255f)).ToString("X2")); builder.Append("\" underline=\""); if (text.Underline) { builder.Append("single\" "); } else { builder.Append("none\" "); } builder.Append("size=\""); builder.Append((int)(text.FontSize * 1024)); builder.Append("\" font_family=\""); builder.Append(text.FontName); builder.Append("\">"); builder.Append(System.Net.WebUtility.HtmlEncode(text.Contents)); builder.Append("</span>"); } markups.Add(builder.ToString()); alignments.Add(a); } //Pass IntPtr[] stringPointers = new IntPtr[markups.Count]; for (int i = 0; i < markups.Count; i++) { stringPointers[i] = UnsafeHelpers.StringToHGlobalUTF8(markups[i]); } var aligns = alignments.ToArray(); PangoBuiltText txt; fixed(IntPtr *stringPtr = stringPointers) { fixed(TextAlignment *alignPtr = aligns) { txt = new PangoBuiltText(ctx, pg_buildtext(ctx, (IntPtr)stringPtr, (IntPtr)alignPtr, markups.Count, width)); } } for (int i = 0; i < markups.Count; i++) { Marshal.FreeHGlobal(stringPointers[i]); } return(txt); }