cikada-0.1---一款linux 平台阅读器移植记录
来源:互联网 发布:淘宝链接api什么意思 编辑:程序博客网 时间:2024/05/17 05:09
由于要在一款嵌入式平台上移植一款pdf阅读器,所以在网上想找找有没有开源的,然后找来研究研究,所以遇到cikada.
由于cikada所用的clutter版本比较高,而我现在用的才是clutter-1.0.
而且我是用命令行编译的,用它自带的编译方法编译不通过.
所以有以下几个地方要修改:
一.在cikada.c文件中:
以下代码要注释掉:
bindtextdomain (PACKAGE, LOCALEDIR);bind_textdomain_codeset (PACKAGE, "UTF-8");textdomain (PACKAGE); context = g_option_context_new (_("- Cikada is a presentation tool for PDF slides"));g_option_context_add_main_entries (context, _ckd_entries, PACKAGE);if (!g_option_context_parse (context, &argc, &argv, NULL)) return -1;if (argv[1] == NULL) { g_print (_("You should input PDF file name!\n")); return -1;}
二.在ckd-page.c中,
修改以下几处:
1.将static gboolean ckd_page_render (ClutterCairoTexture *actor, cairo_t *cr, gpointer user_data)函数删除. 相应的,将static void ckd_page_set_property (GObject *obj, guint prop_id, const GValue *value, GParamSpec *pspec)函数中的g_signal_connect (priv->cairo_texture, "draw", G_CALLBACK (ckd_page_render), self);这一句删除
因为在clutter-1.0中,clutter_cairo_texture还没有draw信号.
2.在static void ckd_page_set_property (GObject *obj, guint prop_id, const GValue *value, GParamSpec *pspec)函数中,case PROP_PDF_PAGE: 代码块中,有w, h只定义,但没有取得数据,而且在priv->cairo_texture = clutter_cairo_texture_new (priv->quality * w, priv->quality * h);中就使用了.此处存疑.
作以下修改:在priv->cairo_texture = clutter_cairo_texture_new (w, h);語句前,添加
w = priv->pdf_width;h = priv->pdf_height;3.在static void ckd_page_paint (ClutterActor *actor)中,在clutter_actor_paint (priv->cairo_texture);这条語句后面添加以下代码:
guint w, h;clutter_cairo_texture_clear ( CLUTTER_CAIRO_TEXTURE (priv->cairo_texture));cairo_t *cr = clutter_cairo_texture_create (CLUTTER_CAIRO_TEXTURE (priv->cairo_texture));w = priv->pdf_width * priv->quality;h = priv->pdf_height * priv->quality;cairo_rectangle (cr, 0, 0, w, h);cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 1.0);cairo_fill (cr);cairo_scale (cr, priv->quality, priv->quality);poppler_page_render (priv->pdf_page, cr);cairo_destroy(cr);4.为了让cairo_texture自绘,要实现actor_class的map和unmap函数.故在ckd-page.c文件中添加以下两个函数实现:
static voidckd_page_map (ClutterActor *actor){g_debug ("Enter ckd_page_map.");CkdPagePriv *priv = CKD_PAGE_GET_PRIVATE (actor);CLUTTER_ACTOR_CLASS (ckd_page_parent_class)->map(actor);if (CLUTTER_IS_ACTOR (priv->cairo_texture))clutter_actor_map (priv->cairo_texture);}static voidckd_page_unmap (ClutterActor *actor){g_debug ("Enter ckd_page_unmap.");CkdPagePriv *priv = CKD_PAGE_GET_PRIVATE (actor);if (CLUTTER_IS_ACTOR (priv->cairo_texture))clutter_actor_unmap (priv->cairo_texture);CLUTTER_ACTOR_CLASS (ckd_page_parent_class)->unmap(actor);}5.在static void ckd_page_class_init (CkdPageClass *klass)函数中,map和unmap函数指针赋于它它的父类虚函数.
故在actor_class->allocate = ckd_page_allocate;語句后面添加以下两句:actor_class->map = ckd_page_map;actor_class->unmap = ckd_page_unmap;
作如上修改后,就可以使用命令行编译运行了:
gcc ckd-page.c ckd-slides.c ckd-page-fade.c ckd-page-manager.c cikada.c -o cikada `pkg-config --cflags --libs clutter-1.0 poppler-glib`
致谢:http://garfileo.is-programmer.com/tag/clutter
原作者的代码也可以此网站上找到下载链接.
如有疑問联系:huangxiaobo.routon@gmail.com
- cikada-0.1---一款linux 平台阅读器移植记录
- Linux 平台源代码阅读器understand
- Linux下一款可以使用命令行的pdf阅读器
- linux新平台移植
- Linux移植记录
- 一款免费blog阅读器 - BlogNavigator
- ACE网管平台移植Linux
- ACE网管平台移植Linux
- linux内核移植x86平台
- linux sqlite3 arm平台移植
- PowerPC平台 linux移植一
- PowerPC平台 Linux移植二
- PowerPC平台 Linux移植三
- ARM linux 移植实验记录
- 记录17--s3c2440移植linux
- S3C2410 Linux kernel 移植记录
- 【linux】linux内核移植错误记录
- 在arm平台下移植linux
- USB-OTG简介
- 正则表达式应用笔记----解析网页,获取并显示“未来三天全国天气预报”(java)
- Oracle10g忘记system,sys密码的解决办法。
- AndroidAnimation
- CMYK
- cikada-0.1---一款linux 平台阅读器移植记录
- DirectShow流媒体信息获取及图象转换
- 云计算、社交网络和移动互联网
- see的口语高频用法
- 手机网络及运营商网络,2G,3G,TDSCDMA,WCDMA,CDMA2000
- Readonly 与Const
- android网上的一些重要知识点
- 判断一个字符串是否是域名或者IP的小程序
- i386和x86的区别