Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过GTK3 CSS样式表定制GtkTextTag外观?_C_Linux_Gtk3 - Fatal编程技术网

通过GTK3 CSS样式表定制GtkTextTag外观?

通过GTK3 CSS样式表定制GtkTextTag外观?,c,linux,gtk3,C,Linux,Gtk3,我有一些GtkTextTable*mom_tagtable它是GtkTextBuffer*mom_obtextbuf的标记表(显示在两个文本视图中GtkWidget*mom\u tview1;和GtkWidget*mom\u tview2;)。我在Linux/Debian/Sid上使用GTK3.21,它与所讨论的相同(自由软件,GPLv3)应用程序:熔化监视器的(在github上)。顺便说一句,所有的GTK代码都在一个C99文件中。我有几十个文本标记: static GtkTextTag *mo

我有一些
GtkTextTable*mom_tagtable
它是
GtkTextBuffer*mom_obtextbuf的标记表(显示在两个文本视图中
GtkWidget*mom\u tview1;
GtkWidget*mom\u tview2;
)。我在Linux/Debian/Sid上使用GTK3.21,它与所讨论的相同(自由软件,GPLv3)应用程序:熔化监视器的(在github上)。顺便说一句,所有的GTK代码都在一个C99文件中。我有几十个文本标记:

static GtkTextTag *mom_tag_toptitle;    // tag for top text
static GtkTextTag *mom_tag_objtitle;    // tag for object title line
static GtkTextTag *mom_tag_objsubtitle; // tag for object subtitle line
static GtkTextTag *mom_tag_idstart;     // tag for first characters of objids
/* etc .... */
我不想使用
GtkBuilder
构建我的GUI(我更喜欢手动编码,因为大部分代码以后可能会由我的应用程序生成)。我想在同一个文本文件中自定义标签和我的所有应用程序的外观。这似乎是有用的

实际上,看起来GTK3已经或有几种方法可以在文本文件中描述应用程序的外观和主题(它也定义了GUI,我不想有这些,过时的Gtk文件,过时的等等),并且它正在过渡到Gtk CSS框架,但过渡没有在GTK3.20中完成

我目前正在使用硬编码的外观初始化这些标记:

    mom_tag_toptitle =
      gtk_text_buffer_create_tag (mom_obtextbuf,
                                  "toptitle",
                                  "justification", GTK_JUSTIFY_CENTER,
                                  "pixels-above-lines", 2,
                                  "pixels-below-lines", 4,
                                  "foreground", "navy",
                                  "paragraph-background", "lightyellow",
                                  "font", "Helvetica Bold", "scale", 1.5, NULL);
    mom_tag_objtitle =
      gtk_text_buffer_create_tag (mom_obtextbuf,
                                  "objtitle",
                                  "justification", GTK_JUSTIFY_CENTER,
                                  "pixels-above-lines", 4,
                                  "pixels-below-lines", 2,
                                  "foreground", "brown",
                                  "font", "Sans Bold",
                                  "paragraph-background", "lightcyan",
                                  "scale", 1.3, NULL);
    mom_tag_objsubtitle =
      gtk_text_buffer_create_tag (mom_obtextbuf,
                                  "objsubtitle",
                                  "justification", GTK_JUSTIFY_CENTER,
                                  "pixels-above-lines", 1,
                                  "pixels-below-lines", 1,
                                  "foreground", "chocolate4",
                                  "font", "Sans Bold",
                                  "paragraph-background", "lightgoldenrod",
                                  "scale", 1.15, NULL);
    mom_tag_idstart =
      gtk_text_buffer_create_tag (mom_obtextbuf,
                                  "idstart",
                                  "font", "Courier Bold",
                                  "foreground", "darkgreen", NULL);
我对这种方法不满意,我希望这些标签的外观(字体、大小、颜色)在一些外部文本文件中进行描述(对于文本视图周围的小部件也是如此)

所以我的问题是:

如何通过GTK CSS样式表自定义
GtkTextTag
-s?

我正在考虑创建一些“假”(我应该为每个gtk文本标记创建一个这样的路径)并使用它来检索gtk CSS中的样式信息,但我不确定这是否是正确的方法

我也不清楚显示相同文本缓冲区的两个不同文本视图如何对同一文本具有不同的样式(我希望这是不可能的,但我不确定为什么)

可能是一个相关的问题,但它看起来和我的完全不同


注:我不是特别关注GTK3 CSS,但我确实希望如果可能的话,有一个单一的文本文件来描述我的整个GTK3应用程序的外观。

要回答我自己的问题,正如在评论中所建议的,供将来参考,不可能使用CSS,但可以使用UI builder(实际的工作代码是C++的,使用GTKMM LBGTKMM和GTK 3.22,即在GITHUB主分支Git提交)。确实使用(GTKMM等效的)(通过<代码>”BurSerMaS.UI“< /COD>这是下面的XML GTK UI文件的路径”要获取GtkBuilder,请使用从中获取
GtkTextTagTable
,并使用将其提供给
GtkTextBuffer

下面是我正在使用的XML GTK UI文件
browsermom.UI

<?xml version="1.0" encoding="UTF-8"?>
<!-- file browsermom.ui for GtkBuilder describing tags in browsing textview -->
<!-- see also https://stackoverflow.com/q/39466395/841108 -->
<interface>
    <requires lib="gtk+" version="3.22"/>
    <object class='GtkTextTagTable' id='browsertagtable_id'>
      <!-- page_title_tag for the entire page -->
        <child type="tag">
            <object class='GtkTextTag'>
                <property name="name">page_title_tag</property>
                <property name="font">Arial Bold</property>
                <property name="scale">1.35</property>
                <property name="paragraph-background">lemonchiffon1</property>
                <property name="pixels-above-lines">3</property>
                <property name="pixels-below-lines">6</property>
                <property name="foreground">navyblue</property>
                <property name="justification">GTK_JUSTIFY_CENTER</property>
            </object>
        </child>
      <!-- object_title_tag for start of object -->
        <child type="tag">
            <object class='GtkTextTag'>
                <property name="name">object_title_tag</property>
                <property name="font">Cabin Medium</property>
                <property name="scale">1.27</property>
                <property name="paragraph-background">cornsilk</property>
                <property name="pixels-above-lines">2</property>
                <property name="pixels-below-lines">3</property>
                <property name="foreground">navyblue</property>
                <property name="justification">GTK_JUSTIFY_CENTER</property>
            </object>
        </child>
 <!-- etc.... --->
 </object>
</interface>

<> >即使在该文件中也没有出现代码> 0.9 >代码> < P> > p>以回答我自己的问题,如注释中所建议的,为了将来的引用,不可能使用CSS,但可能使用UI生成器(实际工作代码是C++的,并且使用GTKMM LBGTKMM和GTK 3.22,即在GITHUB主分支Git提交)。(GtkMM等效于)(传递
“browsermom.ui”
,这是下面XML GTK ui文件的路径)以获取GtkBuilder,使用从中获取
GtkTextTagTable
,并将其提供给
GtkTextBuffer

下面是我正在使用的XML GTK UI文件
browsermom.UI

<?xml version="1.0" encoding="UTF-8"?>
<!-- file browsermom.ui for GtkBuilder describing tags in browsing textview -->
<!-- see also https://stackoverflow.com/q/39466395/841108 -->
<interface>
    <requires lib="gtk+" version="3.22"/>
    <object class='GtkTextTagTable' id='browsertagtable_id'>
      <!-- page_title_tag for the entire page -->
        <child type="tag">
            <object class='GtkTextTag'>
                <property name="name">page_title_tag</property>
                <property name="font">Arial Bold</property>
                <property name="scale">1.35</property>
                <property name="paragraph-background">lemonchiffon1</property>
                <property name="pixels-above-lines">3</property>
                <property name="pixels-below-lines">6</property>
                <property name="foreground">navyblue</property>
                <property name="justification">GTK_JUSTIFY_CENTER</property>
            </object>
        </child>
      <!-- object_title_tag for start of object -->
        <child type="tag">
            <object class='GtkTextTag'>
                <property name="name">object_title_tag</property>
                <property name="font">Cabin Medium</property>
                <property name="scale">1.27</property>
                <property name="paragraph-background">cornsilk</property>
                <property name="pixels-above-lines">2</property>
                <property name="pixels-below-lines">3</property>
                <property name="foreground">navyblue</property>
                <property name="justification">GTK_JUSTIFY_CENTER</property>
            </object>
        </child>
 <!-- etc.... --->
 </object>
</interface>

即使
0.9
没有出现在该文件中。

实现了GtkBuildable,因此您可以在GtkBuilder UI定义语言中定义标记,使用加载它,仅使用从中选取GtkTextTagTable,然后将其提供给。但这不是CSS。@NominalAnimal:您有一个如何为G编写
.UI
文件的示例吗tkBuildable?实现了GtkBuildable,因此您可以在GtkBuilder UI定义语言中定义标记,使用加载它,使用从中选择GtkTextTagTable,然后将其提供给。但这不是CSS。@NominalAnimal:您有没有一个例子说明如何为GtkBuildable编写
.UI
文件?很好的示例,供将来参考引用。
child
标记格式也让我感到惊讶,但在文档中明确提到了它。理解
这是一个很好的示例,可供将来参考。
child
标记格式也让我感到惊讶,但在文档中明确提到了它。理解