博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dia UML Association 添加字体选择功能
阅读量:2395 次
发布时间:2019-05-10

本文共 2487 字,大约阅读时间需要 8 分钟。

背景

使用 Dia 绘制了一个聚合关系的 UML 图,点击 Association 属性页的时候结果发现没有配置字体的选项,仅有的关于字体的设置只有 Text color,这可让我郁闷了半天……于是我又看了一下 Note 的属性页,至少还是可以设置字体的嘛。

输入图片说明

输入图片说明

由此看来,功能方面确实还是有欠缺的呀。没招了,自己将该部分功能添加上去吧。

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 的官方网站:,是的,它已经被重定向到 了。 首页上竟然还是放送着 2011 年的新闻,我就在想,哥,你们到底这几年有没有对 Dia 做过一点点升级改动呀,咋还是 0.97.2 的版本呀。不过当我点击到 的时候一切就都变得可爱了。最新的修改可以查看:。日期显示到 2017 年,显然是一直都有在改动的。并且提供了 Git 仓库。

通过下面命令克隆:

git clone git://git.gnome.org/dia

下载回来编译:

./autogen.shmake

测试

app/run_dia.sh

这次发现针对 UML 有好大改动。属性页竟然全改了,Association 增加了 StyleMeta 标签页,字体的选择问题竟然已经修复了,点 32 个赞。翠花,上图:

输入图片说明

输入图片说明

输入图片说明

版本升级为:0.97+git

输入图片说明

凡事越深入越多发现呀!

同时也期待 Dia 的新版本尽快发布。

参考资料

[1]

[2]
[3]
[4]

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

你可能感兴趣的文章
[转]linux文件系统基础知识
查看>>
[转]Centos5 下安装/配置lvm使用reiserfs文件系统
查看>>
[转]Use ReiserFS in CentOS 5(lvm)
查看>>
[转]KFS的部署与简单使用
查看>>
[转]KFS官方部署手册
查看>>
[转]Ubuntu 10.04 LTS 安装 sun-java6-jdk
查看>>
[转]mmap详解
查看>>
[转]HDFS和KFS 比较
查看>>
Oracle 12CR2 Oracle Restart - ASM Startup fails with PRCR-1079
查看>>
poj 2140 Herd Sums
查看>>
poj 2524 Ubiquitous Religions
查看>>
poj 1611 The Suspects
查看>>
poj 3331 The Idiot of the Year Contest!
查看>>
poj 3233 Matrix Power Series
查看>>
poj 3070 Fibonacci
查看>>
poj 1656 Counting Black
查看>>
BestCoder Round #28
查看>>
poj3299 Humidex
查看>>
poj2159 Ancient Cipher
查看>>
poj1083 Moving Tables
查看>>