如何做Gtk中的粗体,斜体,下划线按钮#又如何动态格式化gtk

时间:2017-10-06 14:19:16

标签: c# textview tags gtk

这可能是一个问题的广泛或模糊。

我无法在网上找到对我有意义的任何内容,我正在使用Gtk2.0和C#,并且每个关于如何在线进行此操作的参考都是使用不同的语言,而且似乎只是一个函数名称列表,或者只有在从代码生成文本时在文本视图中格式化文本的示例(即,创建一个句子" Hello World。"然后打个招呼粗体。似乎没有人在谈论如何做到这一点,它似乎是一个相当基本的功能。

将某些文字加粗是非常容易的,例如:

protected void Command_bold(object sender, EventArgs e)
{
    if (selectedTextView.Buffer.GetSelectionBounds(out A, out B))
    {
        selectedTextView.Buffer.ApplyTag("bold", A, B);
    }
}

但是,当我用一个按钮触发这个功能时,它只会使事情变得粗体(或斜体......等等)。粗体按钮的正常功能会使所有选择都变为粗体,如果选择中的某些选项已经加粗,或者如果所有选项都是粗体,则使其全部不是粗体。

那么,如果你的文本是否已经加粗,你如何在Gtk TextView对象中检测到?

1 个答案:

答案 0 :(得分:1)

好的,所以我明白了。或多或少。下面的逻辑是有缺陷的,但这是一种检测标签和控制粗体按钮逻辑的方法:

protected void Action_Bold(object sender, EventArgs e)
{
    TextIter iA, A, B;
    bool isBold = false;
    if (selectedTextView.Buffer.GetSelectionBounds(out A, out B))
    {
        iA = A;
        while (iA.Compare(B) < 0)
        {
            foreach (TextTag tag in A.Tags)
            {
                if (tag.Name == "bold") isBold = true;
            }

            iA.ForwardChar();

        }

        if (isBold == true)
        {
            selectedTextView.Buffer.RemoveTag("bold", A, B);
        }
        else
        {
            selectedTextView.Buffer.ApplyTag("bold", A, B);
        }
    }
}