GTK4+OpenGL+FreeTpye2显示文字教程——搭建一个基本的GTK4应用

文章目录

  • 搭建一个基本的GTK4应用

搭建一个基本的GTK4应用

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>

效果图如下
GTK4+OpenGL+FreeTpye2显示文字教程——搭建一个基本的GTK4应用_第1张图片

/* 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

关于realizeunrealizerender三个函数的详解会在介绍OpenGL与FreeType2的时候介绍

返回系列目录页


GTK4+OpenGL+FreeTpye2显示文字教程——搭建一个基本的GTK4应用_第2张图片

你可能感兴趣的:(OpenGL,GTK,gtk/gtk+,opengl,freetype,图形学)