吧务
level 11
LuoYu0401
楼主
先不管gimp的事了,后续又看了几个Gnome的项目有些有ui文件,有些又没有,摸不着头脑,本篇就按使用ui文件来进行介绍。
我目前本职是干android(java)的,在使用gtk中有些地方希望像android那样便利,比如viewbinding,还有gtk的ui文件太复杂了(这个之后慢慢做尝试简化)。众所周知,ui文件声明的控件要与c文件window中的控件一一对应要写很多类似gtk_widget_class_bind_template_child(widget_class, TypeName, member_name)的代码,如果控件越多,那写的数量就越多,虽然代码很简单。
viewbinding简单的实现如下图

实现的流程是编译前先使用脚本对布局的ui文件进行解析,生成一个viewbinding的结构体,里面包含了所有带id的widget,view_binding_full()宏是一个工具,用来绑定一个widget到viewbinding中,然后view_binding()跟view_binding_callback()宏则是通过脚本生成的,在使用时,仅需要在window_class_init()中调用用脚本生成的两个宏即可。目前测试结果是可行的,但不知道我这样写会不会造成其他问题,比如widget被引用在了这个viewbinding的结构体中,是不是会造成这部分widget没被unref()等,特意发帖探讨一下
2024年11月30日 17点11分
1
我目前本职是干android(java)的,在使用gtk中有些地方希望像android那样便利,比如viewbinding,还有gtk的ui文件太复杂了(这个之后慢慢做尝试简化)。众所周知,ui文件声明的控件要与c文件window中的控件一一对应要写很多类似gtk_widget_class_bind_template_child(widget_class, TypeName, member_name)的代码,如果控件越多,那写的数量就越多,虽然代码很简单。
viewbinding简单的实现如下图

实现的流程是编译前先使用脚本对布局的ui文件进行解析,生成一个viewbinding的结构体,里面包含了所有带id的widget,view_binding_full()宏是一个工具,用来绑定一个widget到viewbinding中,然后view_binding()跟view_binding_callback()宏则是通过脚本生成的,在使用时,仅需要在window_class_init()中调用用脚本生成的两个宏即可。目前测试结果是可行的,但不知道我这样写会不会造成其他问题,比如widget被引用在了这个viewbinding的结构体中,是不是会造成这部分widget没被unref()等,特意发帖探讨一下