技术开发 频道

Moblin应用程序模板

  【IT168 技术文档】为了使开发人员尽快着手工作并实现快速开发,我们创建了一个空白应用程序模板和一些脚本,以快速自定义项目并开始工作。

  在试用Moblin应用程序模板之前,您需要在系统上安装所有必要组件(包括Clutter)。

下载Moblin应用程序模板

  可以从以下网址获取最新的项目模板:

  http://git.moblin.org/repos/users/jketreno/template.tgz

  模板的使用方法非常简单。首先,下载、解压并解包template.tgz文档。

wget http://git.moblin.org/repos/users/jketreno/template.tgz 
tar xf template.tgz

  这个命令将创建template目录,您可以立即创建并测试输出:

  cd template
  export PREFIX=$(pkg-config --variable=prefix glib-2.0)
  ./autogen.sh --prefix=$PREFIX
  make

  如果上一步成功,将创建可执行的src/template,使用以下命令运行模板程序:

src/template

  模板运行时将显示一个带有一个旋转按钮Exit的窗口,单击该按钮(或在键盘上按Escape键)将退出程序。
 

分解模板

  模板项目的目的是提供一个最小项目示例,模板目录中包含以下内容:

ls
-rw-r--r-- AUTHORS
-rwxr-xr-x autogen.sh
-rw-r--r-- ChangeLog
-rw-r--r-- configure.in
-rw-r--r-- COPYING
-rw-r--r-- INSTALL
-rw-r--r-- Makefile.am
-rw-r--r-- NEWS
-rw-r--r-- README
drwxr-xr-x src

 

  文件AUTHORS、ChangeLog、COPYING、INSTALL、NEWS和README都是开源软件项目中包含的标准文件。检查它们的具体内容可以看到它们包含的信息类型。

  文件autogen.sh是一个小型shell脚本,这个脚本调用autoconf实用工具创建必要的组件,以根据configure.in中的输入针对您使用的系统配置项目。关于autoconf的详细介绍超出了本指南的范围,您可以在autoconf project page找到关于autoconf的详细信息。

  configure.in文件的相关内容如下所示:

...
PKG_PROG_PKG_CONFIG
PKG_CHECK_MODULES(TEMPLATE, clutter-0.8 >= 0.8.1
                            clutter-cairo-0.8 >= 0.8.1
                            glib-2.0)
AC_SUBST(TEMPLATE_CFLAGS)
AC_SUBST(TEMPLATE_LIBS)
...

  以上内容告知autoconf使用PKG_PROG_PKG_CONFIG宏确保clutter、clutter-cairo和glib软件包都在平台上处于足够的层级。根据上述检查结果,创建带有相应构建标记的变量TEMPLATE_CFLAGS和TEMPLATE_LIBS来找到那些软件包。

  模板项目的“真实”部分包含在src目录中:

ls src
-rw-r--r-- main.c
-rw-r--r-- Makefile.am

  Makefile.am包含输入到autoconf实用工具中的内容,该文件告知autoconf创建一个二进制文件,使用包含在src目录中的源文件和头文件,以及从configure.ac创建(通过上述TEMPLATE_CFLAGS和TEMPLATE_LIBS)的变量CFLAGS和LDFLAGS创建一个二进制文件template。

cat Makefile.am
INCLUDES = @TEMPLATE_CFLAGS@

bin_PROGRAMS = template

template_SOURCES = *.c *.h
template_LDADD = @TEMPLATE_LIBS@

分解main.c

  这个程序在高层级创建一个clutter舞台,单个clutter因子(Exit标记)和一个基于cairo的纹理(这样就可以使用cairo API来渲染Exit标记),一个动画该标记的时间轴,两个输入处理程序以监测用户终止该程序的时间。

  接下来,让我们深入模板源代码本身(在单个文件main.c中实现)的细节。下面介绍main.c的功能(跳过文件起始处的软件许可证)。

  以下命令装载所有定义代码使用的函数和数据类型所需的头文件。对于基于Clutter的应用程序来说非常标准:

   #include
#include
#include
#include

#ifdef HAVE_CONFIG_H
#include
#endif

  接下来声明数据的数据结构,这些数据作为实例数据发送到各种信号处理器。这可能已经作为一个完全Gobject实现,但由于我们不向任何外部实体显示这些数据,我们选择使用标准的C结构。注意我们使用了gtk-doc注释。如果您使用--eneable-gtkdoc创建该项目,这些注释将用于自动生成项目文档。

  这个数据结构的具体用途是提供因子、时间轴和执行时间轴绝对时间之间的镜像。

/
 SignTimelineData: Instance data passed to signal handlers

 @started   Millisecond timestamp when timeline was started
 @actor     Reference to actor to animate
 @timeline  Timeline executing (which needs to be terminated before exiting)
/
typedef struct {
  gulong started;
  ClutterActor actor;
  ClutterTimeline timeline;
} SignTimelineData;

0
相关文章