根据我的阅读,核心Gnome开发始于C,Vala(2006)和Genie(2008)对此进行了扩展.Vala语法似乎针对Java/C#语法/开发人员,而Genie似乎针对Python(以及其他一些).
还有一些开发人员似乎试图破坏这两个伟大的开发工具 - 通过推动转向,因为缺乏更好的术语,非本地技术,如Javascript和Rust - 需要额外的虚拟机或运行时二进制文件.
然而,Vala的复兴似乎主要由应用程序开发人员推动.从Vala编译器活动的增加和2018年外展计划的拟议活动中可以看出这一点,其中Vala是核心功能.
因此,这将我们带到与Genie的技术关系.从我的阅读来看,Genie只依赖于GLib,而Vala依赖于Gnome桌面环境.这种关系是否正确?其次,Genie内置于Vala编译器中valac
还是分开?从汇编的角度来看,它们是集成技术吗?
在 Linux 中,我在 Gnome Builder (3.26.4) 中使用 Meson (0.44.0) 作为将使用 Gee 和 GXml 的控制台程序。我的目的是在 Genie 中写这个。
当我在 Gnome Builder 中使用 Meson 时,它会失败,但使用 valac (0.38.8) 从命令行调用时会成功,如下所示:
valac --pkg=gtk+-3.0 --pkg=gee-0.8 --pkg=gxml-0.16 main.gs
Run Code Online (Sandbox Code Playgroud)
从上面看没有错误。我尝试使用 gee 和 gxml 设置 meson.build 作为依赖项,或者作为vala_args。同样的错误。
检查 pkg-config,我得到以下信息:
$ pkg-config --libs gxml-0.16
-L/usr/local/lib64 -lgxml-0.16 -lgio-2.0 -lxml2 -lgee-0.8 -lgobject-2.0 -lglib-2.0
$ pkg-config --libs gee-0.8
-lgee-0.8 -lgobject-2.0 -lglib-2.0
$ pkg-config --libs gee-1.0
-lgee -lgobject-2.0 -lglib-2.0
Run Code Online (Sandbox Code Playgroud)
也许我做错了什么。这是本地 meson.build 文件,后跟顶级 meson.build 和错误:
example_sources = [
'main.gs'
]
example_deps …
Run Code Online (Sandbox Code Playgroud) 我们正在尝试使用Gnome-Builder/Meson/Glade/Flatpak开发应用程序用户界面Gtk3/Vala/Genie.虽然有许多例子 Gtk.HeaderBar.pack_start( ... )
,并Gtk.ActionBar.pack_start( ... )
在瓦拉和其他基于GTK文档中,我们一直没能找到一个XML文件的用户界面中使用的例子.
所以问题是:如何将pack_start/pack_end与ui xml文件一起使用?是否有生成的xml ui文件的示例或如何在Glade中生成?它会作为HeaderBar/ActionBar的属性/属性/子项输入吗?这会是什么样的 - 一般结构是什么?如果它不是a GtkChild
,那么如何在Vala/Genie源文件中访问它?
提供以下琐碎的XML文件MainApplication.ui
,例如,如何将一个pack_start
和pack_end
一GtkColorButton
对GtkHeaderBar
?
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.2 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<template class="MainWindow" parent="GtkApplicationWindow">
<property name="can_focus">False</property>
<property name="default_width">1024</property>
<property name="default_height">768</property>
<child type="titlebar">
<object class="GtkHeaderBar" id="header_bar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="title">Test Application</property>
<property name="subtitle">gnome.org</property>
<property name="show_close_button">True</property>
</object>
</child>
<child>
<object class="GtkBox" id="content_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child> …
Run Code Online (Sandbox Code Playgroud) 我的理解是Vala和Genie有引用计数而不是垃圾收集.
Per Valadoc.org,这个:
string path = Path.build_filename ("my", "full", "path/to.txt");
Run Code Online (Sandbox Code Playgroud)
得出这个:
a newly-allocated string that must be freed with g_free
Run Code Online (Sandbox Code Playgroud)
这是正确的还是g_free
由于引用计数而不是必需的?
如果string
是在对象内包裹将g_free
上string
上物件破坏付诸行动?
现在已经花了一些时间来掌握Gnome Builder,Glade,Vala和Genie - 并考虑到优秀的Gnome人机界面指南(GHIG) - 为什么Glade不是几乎所有GTK GUI应用程序的起点?
例如,是否有任何程序将采用Glade(模板)xml文件并自动生成相应的程序化Vala或Genie源代码?如果有标准的Gtk.ApplicationWindow Glade xml文件,例如,随Glade/Gnome附带的GHIG,这些文件可以快速适应特定项目和带有信号自动生成的Genie类模板 - 加上完整的gresource/meson/flatpak结构.这只是直接导入Gnome-Builder作为起点.有这样的事吗?
更新
以下文件application.gs是使用Genie属性组合从application.ui自动生成的.不想在这里重新发明轮子 - 因此这个问题的原因.以下删除了一些字段,但实际文件已完全填写并可以使用.除了'application.ui'的内容之外,唯一需要的信息是资源路径和ui文件名.一切都已包含在Glade文件中.
/*
{PROJECT_SPACE}
'{PROJECT_NAME}' is a command line tool that will parse a glade ui
template and generate a skeleton class in the Genie language
with composite widgets. It will generate GTKTemplate, GTKChild
and GTKCallback entries.
'{PROJECT_NAME}' exists within the {PROJECT_NAMESPACE} namespace.
Copyright (C) 2018 {AUTHOR_NAME} {AUTHOR_EMAIL}
This library is free software; you can redistribute it and or
or modify it …
Run Code Online (Sandbox Code Playgroud)