博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
优化 Dia
阅读量:2395 次
发布时间:2019-05-10

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

背景

使用 Dia 进行 UML 图和流程图的绘制,但是在使用过程中总有很多不爽的地方,所以决定对其进行调整优化。

下载 Dia 源代码

在 Ubuntu 14.04 系统中直接执行 apt-get source dia 命令即可将 Dia 的源码下载到当前目录。

$ apt-get source dia

注意不需要带 sudo 前缀。 接着我还需要 Dia 的编译依赖包,估计一大堆。

$ sudo apt-get build-dep -y dia

好吧,等待它们安装完成就可以进行重新编译了。

编译 Dia

下载回来的是 dia-0.97.2 版本,稍稍阅读下源码目录下的 INSTALL 文档,里面的一节是

BUILDING:==========To build, run: ./configure make

遵循标准的 GNU 编译系统。OK,先用最简单的方式进行编译先吧

$ ./configure$ make

在编译过程中报错:

layer_dialog.c: In function ‘undo_layer_visibility’:layer_dialog.c:1452:59: error: ‘intptr_t’ undeclared (first use in this function) visibilities = g_list_append(visibilities, (gpointer)(intptr_t)temp_layer->                                                       ^

intptr_t 未定义,那说明是缺少了 stdint.h 头文件了。这种级别的代码错误不应该呀。虽然可以定位到 app/layer_dialog.c 文件,加上

/* dia-0.97.2/app/layer_dialog.c */#include 

来解决一下问题,但我还是放弃了这种思路,我想通过目录下的 autogen.sh 重新产生一份我当前系统的编译版本出来。

  1. 清除之前所有的配置信息

    $ make distclean
  2. 执行自动化脚本

    $ ./autogen.sh
  3. 再编译一次

    $ make

果然顺利通过。证明我的判断是对的,代码是没问题的,编译环境不一致而已。

接下来先运行一下看看情况如何。在 INSTALL 文档中提及了测试方案。

TRYING IT OUT:==============You can try out dia in the compilation directory by running ./app/run_dia.sh

直接运行脚本看看情况如何:

app/run_dia.sh

跟系统上运行的 Dia 一个模样,0.20cm 粗的线条,丑得不行,默认情况下没有 AntiAliased 和关闭 Show Connection Points。我得找找看如何修正这些小问题了。

Now, let the hack begin!

查找默认配置

我在 Dia 里面画了一个流程图 (Flowchart) 的 Box 图形。

输入图片说明

右键查看属性

输入图片说明

这时我在源代码目录下面找到了名为 dia-0.97.2/objects/flowchart/box.c 的文件。

static DiaObject *box_create(Point *startpoint,	   void *user_data,	   Handle **handle1,	   Handle **handle2){	// ...	box->border_width =  attributes_get_default_linewidth();	// ...}

沿着 box->border_width = attributes_get_default_linewidth(); 的线索寻找它在何处被设置的。往上找到 dia-0.97.2/lib/attributes.c

realattributes_get_default_linewidth(void){  return attributes_default_linewidth;}

好的,到这里还得往前找找看是谁设置了 attributes_default_linewidth 这个变量。我利用 emacsM-x grep-find 功能在源代码目录寻找

./lib/attributes.c:27:static real attributes_default_linewidth = 0.1;./lib/attributes.c:109:  return attributes_default_linewidth;./lib/attributes.c:118:  attributes_default_linewidth = width;

看来只有 lib/attributes.c 这个文件使用了 attributes_default_linewidth 变量。定位到 118 行

voidattributes_set_default_linewidth(real width){  attributes_default_linewidth = width;  persistence_set_real("linewidth", width);}

啊哈,看到这里我突然想起有 ~/.dia/persistence 这个文件。果然在这个文件中 215 行找到了 linewidth 这个变量,变量值 0.20000000000000001 跟上面的设置是一样的:

我试着修改了这个值成 0.10000000000000001 再重新打开 Dia 软件。

输入图片说明

点击右键查看属性

输入图片说明

Good! 原来 Dia 通过 ~/.dia/persistence 这个文件配置某些属性呀!

修改 AntiAliased

~/.dia/persistence 文件中搜索 anti 关键词定位到 270 行

修改成 true 即可。

修改 Show Connection Points

~/.dia/persistence 文件中搜索 show 关键词定位到 295 行

修改成 false,这下子再重新启动 Dia 看看效果。这下子果然满意多了 :D 输入图片说明

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

你可能感兴趣的文章
几个常见的压缩算法
查看>>
HTML_5_Canvas
查看>>
Mysql Fabric实现学习笔记
查看>>
Spring JTA multiple resource transactions in Tomcat with Atomikos example
查看>>
How to setup multiple data sources with Spring and JPA
查看>>
MySQL 5.7 Fabric: any good?
查看>>
Accessing Fabric HA Groups from Java
查看>>
Q&A: Putting MySQL Fabric to use
查看>>
Fabric FAQ
查看>>
boost 1.39编译安装手记
查看>>
树莓派安装中文输入法
查看>>
树莓派(raspberry pi)播发flash 远程登录 视频播放
查看>>
Linux 安装与配置服务器版jre7
查看>>
Perform Two Phase Commits in MongoDB
查看>>
java.rmi.ConnectException: Connection refused to host: 127.0.0.1
查看>>
数据库服务器 Cloudscape
查看>>
JAVA中使用Schema校验XML
查看>>
使用BlazeDS实现Java和Flex通信
查看>>
使用 Apache MINA 开发高性能网络应用程序
查看>>
五分钟学会使用spring-data-cassandra快速实现数据的访问
查看>>