MinGW下安装GTK4传送门
官方文档可能还没有更新,显示的命令还是gtk3,小伙伴可以将gtk3改为gtk4即可安装GTK4
/*
* 初始化并启动GTK4应用程序
*/
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
//创建一个GTK4应用
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
//绑定应用激活回调函数,用于初始化应用程序
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
//运行GTK4应用
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
在介绍activate函数之前,我们先看一GTK4应用的UI文件
gtk.opengl.font.gresource.xml
<interface>
<object class="GtkBox" id="box">
<property name="visible">Trueproperty>
<property name="margin-start">12property>
<property name="margin-end">12property>
<property name="margin-top">12property>
<property name="margin-bottom">12property>
<property name="orientation">verticalproperty>
<property name="spacing">6property>
<child>
<object class="GtkGLArea" id="gl_area">
<property name="visible">Trueproperty>
<property name="vexpand">Trueproperty>
<property name="hexpand">Trueproperty>
object>
child>
<child>
<object class="GtkButton" id="button">
<property name="label" translatable="yes">Quitproperty>
<property name="visible">Trueproperty>
<property name="can-focus">Trueproperty>
object>
child>
object>
interface>
/* We need to set up our state when we realize the GtkGLArea widget */
static void
activate (GtkApplication *app,
gpointer user_data)
{
GtkWidget *window;
GtkBuilder *builder;
GtkWidget *box, *button;
//定义一个应用窗口,并设置部分属性
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "GTK_OPENGL_FONT");
gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
//获取UI文件
//为什么路径是"/gtk_opengl_font/gtk.opengl.font.ui"下面会介绍
builder = gtk_builder_new_from_resource("/gtk_opengl_font/gtk.opengl.font.ui");
//获取UI文件中的box对象
box = GTK_WIDGET(gtk_builder_get_object(builder,"box"));
//获取UI文件中的gl_area 对象
gl_area = GTK_WIDGET(gtk_builder_get_object(builder,"gl_area"));
//获取UI文件中的button 对象
button = GTK_WIDGET(gtk_builder_get_object(builder,"button"));
//将UI文件中设计的窗口,设置为应用窗口的孩子
gtk_window_set_child (GTK_WINDOW (window), box);
/* We need to initialize and free GL resources, so we use
* the realize and unrealize signals on the widget
*/
//绑定信号回调函数
//realize和unrealize一般是成对出现,realize用于在控件显示之前对控件进行
//一些客制化的初始化任务
g_signal_connect (gl_area, "realize", G_CALLBACK (realize), NULL);
g_signal_connect (gl_area, "unrealize", G_CALLBACK (unrealize), NULL);
/* 用于在GL区域显示文字,在创建GL Area时会触发一次render回调函数 */
g_signal_connect (gl_area, "render", G_CALLBACK (render), NULL);
//这里绑定的gtk_window_destroy函数是系统内置的函数
g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_destroy), window);
g_object_unref(builder);
//显示应用窗口
gtk_widget_show(window);
}
为了方便文件管理,我们将文件统一登记到一个XML文件中,然后一起编译到code中,之后便可以使用相对地址访问文件,不需要关心文件的实际位置了
gtk.opengl.font.gresource.xml(这个文件必须以“.gresource.xml”结尾)
<gresources>
<gresource prefix="/gtk_opengl_font">
<file>gtk.opengl.font.uifile>
<file>gtk.opengl.font.vs.glslfile>
<file>gtk.opengl.font.fs.glslfile>
gresource>
gresources>
有了这个文件还需生成一个“.c”文件一起编译到code中,在MinGW中命令格式如下(默认所有文件,包括配置文件都在一个目录,且下面命令也在此目录中执行):
#我这里生成的"resources.c"源文件
glib-compile-resources.exe gtk.opengl.font.gresource.xml --target=resources.c --generate-source
关于realize、unrealize、render三个函数的详解会在介绍OpenGL与FreeType2的时候介绍
返回系列目录页