背景
使用 Dia 绘制了一个聚合关系的 UML 图,点击 Association
属性页的时候结果发现没有配置字体的选项,仅有的关于字体的设置只有 Text color
,这可让我郁闷了半天……于是我又看了一下 Note
的属性页,至少还是可以设置字体的嘛。
由此看来,功能方面确实还是有欠缺的呀。没招了,自己将该部分功能添加上去吧。
Dia 源代码
关于 Dia 源代码的下载,编译过程可以参考「优化 Dia」 一文。
修改过程
根据 Note
类似地去配置 Association
的属性。在源代码中找到名为 dia-0.97.2/objects/UML/note.c
的源文件,同目录下面还有 association.c
源文件。源代码的结构还是很清晰的,可以直接从使用的角度找到对应的源码,objects
下面存放图形绘制的对象,比如 UML 中的 Association 差不多就是 objects/UML/association.c
文件。比对着 note.c
源码来修改 association.c
文件。
-
添加
text.h
头文件在
association.c
文件中添加text.h
头文件#include "text.h"
-
修改
struct _Association
在
struct _Note
中有一个Text
指针和一个TextAttributes
变量,在struct _Association
中也同样添加它俩先struct _Association { /* ... */ Text *text; TextAttributes attrs; }
-
初始化
text
在
association_props[]
结构体数组中添加:PROP_STD_TEXT_FONT, PROP_STD_TEXT_HEIGHT, PROP_STD_TEXT_COLOUR_OPTIONS(PROP_FLAG_VISIBLE|PROP_FLAG_STANDARD|PROP_FLAG_OPTIONAL), { "text", PROP_TYPE_TEXT, 0, N_("Text"), NULL, NULL },
-
修改
association_offsets[]
添加
text
,text_font
,PROP_STDNAME_TEXT_HEIGHT
属性{ "text",PROP_TYPE_TEXT,offsetof(Association, text)}, { "text_font",PROP_TYPE_FONT,offsetof(Association,attrs.font)}, { PROP_STDNAME_TEXT_HEIGHT,PROP_STDTYPE_TEXT_HEIGHT,offsetof(Association,attrs.height)},
将属性值
text_color
修改成attrs.color
{ "text_colour", PROP_TYPE_COLOUR, offsetof(Association, attrs.color) },
-
修改
association_get_props
函数仿照
note_get_props
函数,添加text_get_attributes(assoc->text, &assoc->attrs);
-
修改
association_set_props
函数仿照
note_set_props
函数,添加apply_textattr_properties(props, assoc->text, "text", &assoc->attrs);
-
修改
association_create
函数产生
assoc->text
实例以及获取assoc->attrs
,一会得用font
代替源码中的assoc_font
才行。DiaFont *font; Point p; /* ... */ font = dia_font_new_from_style(DIA_FONT_MONOSPACE, ASSOCIATION_FONTHEIGHT); p = *startpoint; assoc->text = new_text("", font, ASSOCIATION_FONTHEIGHT, &p, &color_black, ALIGN_LEFT); dia_font_unref(font); text_get_attributes(assoc->text, &assoc->attrs);
到这里先
make
一下,运行app/run_dia.sh
看下效果。啊哈,终于看到字体的设置了。接下来就是要将字体的值设置到 Association 对象上去。
峰回路转
在我还想着怎么去修正上面的问题的时候,读了一下 README
文档,进入 Dia 的官方网站:http://www.gnome.org/projects/dia,是的,它已经被重定向到 https://wiki.gnome.org/Apps/Dia 了。 首页上竟然还是放送着 2011 年的新闻,我就在想,哥,你们到底这几年有没有对 Dia 做过一点点升级改动呀,咋还是 0.97.2 的版本呀。不过当我点击到 Development 的时候一切就都变得可爱了。最新的修改可以查看:https://git.gnome.org//browse/dia/log/。日期显示到 2017 年,显然是一直都有在改动的。并且提供了 Git
仓库。
通过下面命令克隆:
git clone git://git.gnome.org/dia
下载回来编译:
./autogen.sh
make
测试
app/run_dia.sh
这次发现针对 UML 有好大改动。属性页竟然全改了,Association 增加了 Style
与 Meta
标签页,字体的选择问题竟然已经修复了,点 32 个赞。翠花,上图:
版本升级为:0.97+git
凡事越深入越多发现呀!
同时也期待 Dia 的新版本尽快发布。
参考资料
[1] 优化 Dia
[2] https://wiki.gnome.org/Apps/Dia
[3] https://wiki.gnome.org/Apps/Dia/Development
[4] https://git.gnome.org//browse/dia/log/