优化 Dia
优化 Dia
iblackangel 发表于8个月前
优化 Dia
  • 发表于 8个月前
  • 阅读 29
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

背景

使用 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 <stdint.h>

来解决一下问题,但我还是放弃了这种思路,我想通过目录下的 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-&gt;border_width = attributes_get_default_linewidth(); 的线索寻找它在何处被设置的。往上找到 dia-0.97.2/lib/attributes.c

real
attributes_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 行

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

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

<dia:real role="linewidth">
  <dia:attribute name="realvalue">
	<dia:real val="0.20000000000000001"/>
  </dia:attribute>
</dia:real>

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

输入图片说明

点击右键查看属性

输入图片说明

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

修改 AntiAliased

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

<dia:boolean role="view_antialised">
  <dia:attribute name="booleanvalue">
    <dia:boolean val="true"/>
  </dia:attribute>
</dia:boolean>

修改成 true 即可。

修改 Show Connection Points

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

<dia:boolean role="show_cx_pts">
  <dia:attribute name="booleanvalue">
    <dia:boolean val="false"/>
  </dia:attribute>
</dia:boolean>

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

标签: Dia
共有 人打赏支持
粉丝 0
博文 47
码字总数 14784
×
iblackangel
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: