【GTK4】C语言生成新春福字
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接
文章目录
- C语言生成新春福字
- 字面量以及数据结构
- 定义一个回调函数,刷新福字
- 应用初始化程序
- 主程序
- 效果展示
C语言生成新春福字
快新年了,支付宝扫福活动又开始了,每次都要百度找福,这次不想找了,自己写一个程序生成各种字体的福字。
示例程序下载
字面量以及数据结构
#define FONT_DISPLAY "福"// g_fu_label中的每一个控件都是一个福字
static GtkWidget *g_fu_label[3][3];// 记录所有的字体family
typedef struct {int n_faces;PangoFontFace **faces;
}custom_PangoFontFace_t;//字体family 的总数
static int n_families=0;//当前正在使用的family 字体的索引
static int family_id=0;// 记录每个字体family中的face(字模)
static custom_PangoFontFace_t *custom_PangoFontFace;
定义一个回调函数,刷新福字
static void
change_fu_cb(GtkButton *button , gpointer user_data)
{char *markup_fu_str = NULL;// 3*3 的矩阵中一共有9个福字,分别设置每个福字的字体for(int i=0;i<3;++i){for(int j=0;j<3;++j){// 获取当前family中的下一个字模,如果当前family中的字模都是用了,自动更新family_id 指向下一个familyif(family_id >= n_families) family_id=0;if(++face_id >= custom_PangoFontFace[family_id].n_faces){++family_id;if(family_id >= n_families)family_id=0;face_id = 0;}markup_fu_str = g_markup_printf_escaped("<span font-weight=\"Bold\" font_desc=\"%s 99\">%s</span>",pango_font_description_to_string(pango_font_face_describe(custom_PangoFontFace[family_id].faces[0])),FONT_DISPLAY);gtk_label_set_markup(GTK_LABEL(g_fu_label[i][j]),markup_fu_str);g_free(markup_fu_str);}}
}
应用初始化程序
static void
activate (GtkApplication* app,gpointer user_data)
{GtkWidget *window;GtkWidget *mainGrid;GtkWidget *overlay;GtkWidget *picture;GtkCssProvider *cssProvider;const char *cssMainGrid = "grid {background-color:#ed3c43;}";const char *cssButton = "* {background-color:#FF0000;}";PangoFontMap *pangoFontMap;GtkWidget *box;GtkWidget *button;window = gtk_application_window_new (app);gtk_window_set_title (GTK_WINDOW (window), "");gtk_window_set_default_size (GTK_WINDOW (window), 900, 900);mainGrid = gtk_grid_new();gtk_widget_set_hexpand(mainGrid,TRUE);gtk_widget_set_vexpand(mainGrid,TRUE);box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);gtk_widget_set_hexpand(box,TRUE);gtk_widget_set_vexpand(box,TRUE);gtk_box_append(GTK_BOX(box),mainGrid);button = gtk_button_new_with_label("换一批");gtk_widget_set_hexpand(button,TRUE);gtk_widget_set_vexpand(button,TRUE);cssProvider = gtk_css_provider_new();gtk_css_provider_load_from_data(GTK_CSS_PROVIDER(cssProvider),cssButton,-1);gtk_style_context_add_provider(gtk_widget_get_style_context(button),GTK_STYLE_PROVIDER(cssProvider),GTK_STYLE_PROVIDER_PRIORITY_USER);gtk_style_context_add_provider(gtk_widget_get_style_context(gtk_widget_get_first_child(button)),GTK_STYLE_PROVIDER(cssProvider),GTK_STYLE_PROVIDER_PRIORITY_USER);g_object_unref(cssProvider);g_signal_connect(button,"clicked",G_CALLBACK(change_fu_cb),NULL);gtk_box_append(GTK_BOX(box),button);gtk_window_set_child(GTK_WINDOW(window),box);cssProvider = gtk_css_provider_new();gtk_css_provider_load_from_data(GTK_CSS_PROVIDER(cssProvider),cssMainGrid,-1);gtk_style_context_add_provider(gtk_widget_get_style_context(mainGrid),GTK_STYLE_PROVIDER(cssProvider),GTK_STYLE_PROVIDER_PRIORITY_USER);g_object_unref(cssProvider);//获取当前系统中可用的字体 familyPangoFontFamily **families;pangoFontMap = pango_cairo_font_map_get_default();pango_font_map_list_families(pangoFontMap,&families,&n_families);custom_PangoFontFace = (custom_PangoFontFace_t *)g_malloc0(n_families*sizeof(custom_PangoFontFace_t));for(int i=0;i<n_families;++i){//获取每个字体 family 中可用的facepango_font_family_list_faces(families[i],&custom_PangoFontFace[i].faces,&custom_PangoFontFace[i].n_faces);}g_free(families);// 初始化每个福字控件for(int i=0;i<3;++i){for(int j=0;j<3;++j){overlay = gtk_overlay_new();gtk_widget_set_hexpand(overlay,TRUE);gtk_widget_set_vexpand(overlay,TRUE);// 福字的背景图,需要放在执行程序所在的目录picture = gtk_picture_new_for_filename("./fu.png");gtk_widget_set_hexpand(picture,TRUE);gtk_widget_set_vexpand(picture,TRUE);g_fu_label[i][j] = gtk_label_new("");gtk_widget_set_hexpand(g_fu_label[i][j],TRUE);gtk_widget_set_vexpand(g_fu_label[i][j],TRUE);gtk_overlay_set_child(GTK_OVERLAY(overlay),picture);gtk_overlay_add_overlay(GTK_OVERLAY(overlay),g_fu_label[i][j]);gtk_grid_attach(GTK_GRID(mainGrid),overlay,i,j,1,1);}}//初始化福字change_fu_cb(GTK_BUTTON(button) , NULL);gtk_window_set_resizable(GTK_WINDOW(window),FALSE);gtk_widget_show (window);
}
主程序
int
main(int argc, char *argv[])
{GtkApplication *app;int status;app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);status = g_application_run (G_APPLICATION (app), argc, argv);g_object_unref (app);//释放资源for(int i=0;i<n_families;++i){g_free(custom_PangoFontFace[i].faces);}g_free(custom_PangoFontFace);return status;
}
效果展示
这里是从善若水的博客,感谢您的阅读
【GTK4】C语言生成新春福字相关推荐
- @微信官方,给我微信旁边加个福字
最近打开微信 总能看到一些好友的昵称后面带了个"福"字 还有人在朋友圈@微信团队 要"福"字 好家伙,机智如我,能上这当嘛~ 发朋友圈是要不来"福&q ...
- 福字背景|传统中国风国潮设计必备素材!
新年季福字传统中国风主题背景 福字传统中国风节日必备背景底纹素材,万字福字.新年快乐,素材很新年,可以从小年一直用到元宵的哦:PSD模板素材,适合用于各种题材的版式设计. 福字背景中国红国潮 传统中国 ...
- 《英雄联盟》出现大面积闪退;两名 95 后大学生用脑电波写“福”字;Windows蓝屏为什么是蓝底白字? | 极客头条...
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 丁恩华 出品 | CSDN(ID:CSDNnews ...
- 从“扫月亮”到“扫福字”,扒一扒背后的支付宝AR框架体系
摘要:从攒五福到抢红包,全国人民的春节活动越来越多样,其背后技术挑战也更复杂:业务层挑战与实现方案.AR红包支付架构变化.技术难点和攻克手段.优化细节和保障方法.安全风险和攻防实战等,每一年的红包背后 ...
- 四年级下册计算机技术做福字,四年级写福字作文
一年级的云朵上,住着一只小鸟.小鸟就要飞到二年级的云朵上,和一年级的云朵告别. 一年级的大树上,住着一只猴子.猴子准备跳到二年级的大树上,和一年级的大树告别. 一年级的花儿上,住着一只蝴蝶.蝴蝶即将飞 ...
- Word2013制作中国的传统福字在屋门上贴的福字(福倒了)
家家户户都要在屋门上.墙壁上.门楣上贴上大大小小的"福"字,这是每逢新春佳节必做的一件事,这是我国民间由来已久的风俗,据<梦梁录>记载:"岁旦在迩,席铺百货, ...
- python tkinter画福字
目录 前言 一.创建画布 二.绘制福字的外框 三.绘制"福"字 前言 这不今天是除夕了,祝大家除夕快乐哈!今天我来教大家一个有趣的东西,用Tkinter(有turtle我就是不用, ...
- 7-62 贴“福”字
7-62 贴"福"字 请编写程序,输出"福"字. 输入样例 注:无输入. 输出样例 * ** * * * * * * * * *** * * * * * * * ...
- 2920集五福_2019支付宝集五福字新玩法,高概率出敬业福攻略。
还是熟悉的配方,还是熟悉的味道.今天(2019年1月25日)凌晨,集五福活动正式开启,支付宝客户端首页也更新了大大的"集五福"入口.据介绍,今年的支付宝集五福活动将保留了去年几乎被 ...
最新文章
- composer安装laravel框架时未生成Vendor解决办法
- hibernate中merge/attachDirty/attachClean
- pip安装了 但是python找不到_python安装完毕后,用pip安装提示找不到ssl模块怎么解决?...
- asp.net core监控—引入Prometheus(二)
- MFC基于对话框的商场交易软件实现
- pytorch 矩阵相乘_深度学习 — — PyTorch入门(三)
- java网页解析包_java 网页解析工具包 Jsoup
- STM32之I2C原理
- php提供的魔术常量
- 使用Movavi Photo Editor如何修复照片中的红眼
- 金蝶星空支持mysql吗_金蝶云星空K3 CLOUD SQL 数据库优化
- 树莓派怎么切换输入法_为树莓派安装Fcitx和谷歌拼音中文输入法
- 我们雇佣了一只大猴子...
- 管理科学与运筹学(MS/OR)国际期刊最新权威排名
- 时空跳跃者的追捕行动解题报告
- C语言实现简单的航空订票、退票系统
- 2020上半年数据分析人才及CDA持证人行业报告
- 这所北京计算机类大学,改考408了!北京信息科技大学
- 速度来!《软技能:代码之外的生存指南 (第2版)》送书4本
- 创造与魔法游戏最新的服务器,创造与魔法MOD服务器