Cikada 0.5 发布

自从版本 0.0.2 发布后,工作和学习上的事情比较多,所以一直未进行更新。上个月,决定要将以前的设计推倒重来之后,这一个多月的时间里将全部的代码重写了一遍,现在又基本上可以用了,功能也多了一些。

继续阅读

Clutter 不支持多线程

看这个简单的例子:

#include <clutter/clutter.h>

static gpointer
gen_slide (gpointer data)
{
        return clutter_cairo_texture_new (800.0, 600.0);
}

static gboolean
on_stage_button_press (ClutterActor *stage, ClutterEvent *event, gpointer data)
{
        g_thread_new ("test", gen_slide, NULL);
        return TRUE; 
}

int
main(int argc, char *argv[])
{
        if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
                return 1;

        ClutterColor stage_color = { 0x21, 0x43, 0x5e, 0xff };
        ClutterActor *stage = clutter_stage_get_default ();
        clutter_stage_set_title (CLUTTER_STAGE (stage), "CairoTexture!");
        clutter_actor_set_size (stage, 400, 400);
        clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
        clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE);

        clutter_actor_show_all (stage);

        g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
        g_signal_connect (stage, "button-press-event", G_CALLBACK (on_stage_button_press), NULL);
        
        clutter_main ();
           
        return 0;
}

编译它:

gcc `pkg-config --cflags --libs clutter-1.0` test.c

这个程序需要 >=glib-2.32 版本的支持。运行程序时,鼠标点一下窗口内部区域,在我这里程序便会崩溃。不知是不是只有我遇到这个问题。

这样子,Cikada 就没法实现单独加载 pdf 页面的线程了。

Cikada 0.0.2 发布

距 2011 年 9 月 26 日发布 0.0.1 版恰好一个月。现在将 Cikada 的小版本号发布周期定为 1 个月。

Cikada 0.0.2 增加的新功能:

  • 时钟模式的概览视图,用于显示演示进度以及页面跳转;
  • 增强了快捷键设置:将 F11 键设定为全屏模式开关键(全屏模式不再使用 Esc 键退出),并将 Left 与 Right 键也作为页面切换键;
  • 大量的代码重构,将各个模块均已 GObject 化;
  • 增加了 PDF 格式的中文使用手册。

下载地址:https://github.com/liyanrui/cikada/zipball/v0.0.2-r1

PDF 演示工具 Cikada 0.0.1 发布

Cikada 是一款 PDF 演示工具,基于 clutter 与 poppler 实现,详见 https://github.com/liyanrui/cikada/tree/v0.0.1

现在发布 0.0.1 版,具有以下功能:

  • 窗口显示与全屏显示
  • 可设置 PDF 页面缓冲数量
  • 淡入淡出的页面切换效果

视频演示地址:

http://cikada.diandian.com/post/d07a7cc0-d0d3-11e0-87f1-782bcb383994

截图:

DIY 一个用于显示 PDF 页面的 Clutter Actor

最近打算基于 Clutter 做一个 PDF 文档的演示工具,首先要解决在 Clutter 场景中渲染 PDF 页面的问题。可以通过 Poppler 库将 PDF 页面转换为 Cairo 图形,进而利用 Clutter 的 CairoTexture Actor 进行 Cairo 图形渲染解决这一问题 [1]。本文将上述过程中的一些细节(例如尺寸与位置的控制)封装为一个便于使用的 Clutter Actor。

继续阅读

Clutter Actor 的位置与尺寸约束

为了更好的解决 Actor 之间的相对定位问题,Clutter 提供了位置与尺寸约束的机制。例如对于 "stage" 和 "rectangle" 这两个 Actor 而言,可以通过位置约束,使得 "rectangle" 居于 "stage" 中心的位置,而无论 "stage" 的尺寸如何变化。Clutter 提供了 Align、Bind、Path 和 Snap 四种约束,也可以按照 [1] 自定义约束。文献 [2] 中已经给出了 Bind 约束与 Align 约束的示例,揭示了 Clutter 位置与尺寸约束功能的基本用法。本文主要讲述如何将 Clutter 的位置与尺寸约束通过 JSON 文本的形式记载于 Clutter 场景图中。

继续阅读

Clutter 的脚本

Clutter 提供了 JSON 格式的脚本机制,以便程序员或用户能够灵活定制场景图。本文通过对 [1] 中的的单一布局的示例基于 Clutter 脚本的形式进行改写,聊表 Clutter 脚本功能的基本用法。

继续阅读

Clutter 布局管理

[1] 中的各个 Actor 在 Stage 中的定位都是硬编码的方式实现的,当 Stage 的尺寸发生变化时,这些 Actor 的位置通常难以进行适应调整。Clutter 提供了布局管理机制,用来实现 Actor 的尺寸与位置控制。

Clutter (1.7.4)提供了五种布局方式:

  1. 固定布局(ClutterFixedLayout):跟 Actor 硬编码定位没有太多区别,通常不使用它;
  2. 单一布局(ClutterBinLayout):将 Actor 叠放成一摞,通常可用于将多个 Actor 复合在一起;
  3. 流布局(ClutterFlowLayout):当你不知道有多少个 Actor 的时候,并且又想让它们按照水平方向或竖直方向均匀排列,那么就可以使用流布局;
  4. 盒子布局(ClutterBoxLayout):将 Actor 单行水平或竖直均匀排列;
  5. 表格布局(ClutterTableLayout):将 Actor 按表格的方式均匀排列。

本文只介绍单一布局与流布局,其他布局方式与这两种布局大同小异。

继续阅读

在 Clutter 场景中显示 PDF 页面

之所以开始学习 Clutter 主要是因为 Pinpoint [1] 引起了一些兴趣,用 Clutter 来制作 PDF 文档的演示工具,效果应该会很好。对 Clutter 的一些基本的 Actor 有所了解之后,发现要实现这个 PDF 演示工具不是很困难。按照 Clutter cookbook [2] 的提示,可以利用 Poppler 库轻易的载入 PDF 页面并将其渲染到 Cairo 环境中,继而使用 ClutterCairoTexture 将 PDF 页面显示在 Stage 中。

继续阅读

五个演员

这篇文章的标题并非暗示我要写一篇影视娱乐方面的文章,它只是表示我将“Actor”这个英文单词翻译成了中文。本文主要介绍 Clutter 库提供的五个基本的 Actor 的用法。

继续阅读