Dia UML Association 添加字体选择功能

背景

使用 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 文件。

  1. 添加 text.h 头文件

    association.c 文件中添加 text.h 头文件

    #include "text.h"
    
  2. 修改 struct _Association

    struct _Note 中有一个 Text 指针和一个 TextAttributes 变量,在 struct _Association 中也同样添加它俩先

     struct _Association {
     	/* ... */
     	Text *text;
     	TextAttributes attrs;
     }
    
  3. 初始化 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 }, 
    
  4. 修改 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) },
    
  5. 修改 association_get_props 函数

    仿照 note_get_props 函数,添加

     text_get_attributes(assoc->text, &assoc->attrs);
    
  6. 修改 association_set_props 函数

    仿照 note_set_props 函数,添加

     apply_textattr_properties(props, assoc->text, "text", &assoc->attrs);
    
  7. 修改 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 增加了 StyleMeta 标签页,字体的选择问题竟然已经修复了,点 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/

转载于:https://my.oschina.net/iblackangel/blog/887083

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值