public void SetText(string text)
        {
            var ptr = UnsafeHelpers.StringToHGlobalUTF8(text);

            igExtTextEditorSetText(textedit, ptr);
            Marshal.FreeHGlobal(ptr);
        }
예제 #2
0
        public void AddTtfFile(string file)
        {
            var str = UnsafeHelpers.StringToHGlobalUTF8(file);

            pg_addttfglobal(str);
            Marshal.FreeHGlobal(str);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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();
        }
예제 #6
0
        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));
        }
예제 #7
0
        public void AddTtfFile(string file)
        {
            if (string.IsNullOrEmpty(file))
            {
                throw new InvalidOperationException();
            }
            var str = UnsafeHelpers.StringToHGlobalUTF8(file);

            pg_addttfglobal(str);
            Marshal.FreeHGlobal(str);
        }
예제 #8
0
        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);
        }
예제 #9
0
        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);
        }
예제 #10
0
        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));
        }
예제 #11
0
        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);
        }