Linux通过Plymouth自定义开机动画

开机动画的自定义

开机动画通过plymouth实现的,我们的需求是:开机时播放1遍动画,然后显示最后一帧直到GUI界面显示。

这个库没有文档说明支持哪些配置字段,所以有2个思路:

  1. 找一些开源的plymouth theme,看别人是怎么写配置的
  2. 看源码

最终问题的解决是通过看源码。

plymouth 简介

每一个plymouth主题主要由2个部分组成:

  1. 图片序列
  2. 配置文件

例如:

动画的实现原理就是连续渲染图片序列。plymouth有2种不同的动画:

 

  • progress
  • throbber (或者animation)

这两种动画类型对应着不同的图片序列前缀,以arch-glow-theme 为例:

 

根据源码中的写法,animation是throbber的替代,为了兼容而保留着throbber.

关键代码

	
// src/plugins/splash/two-step/plugin.c/view_load_end_animation(view_t *)
  ...
		ply_trace ("now trying more general prefix: animation-");
        view->end_animation = ply_animation_new (plugin->animation_dir,
                                                 "animation-");
        if (ply_animation_load (view->end_animation))
                return;
        ply_animation_free (view->end_animation);

        ply_trace ("now trying old compat prefix: throbber-");
        view->end_animation = ply_animation_new (plugin->animation_dir,
                                                 "throbber-");
        if (ply_animation_load (view->end_animation)) {
                /* files named throbber- are for end animation, so
                 * there's no throbber */
                ply_throbber_free (view->throbber);
                view->throbber = NULL;
                return;
        }
   ...

plymouth在播放动画时会前后播放代表不同阶段的动画:

// src/plugins/splash/two-step/plugin.c/view_load(view_t *)
				...				
				if (view->progress_animation != NULL) {
                ply_trace ("loading progress animation");
                if (!ply_progress_animation_load (view->progress_animation)) {
                        ply_trace ("optional progress animation wouldn't load");
                        ply_progress_animation_free (view->progress_animation);
                        view->progress_animation = NULL;
                }
        } else {
                ply_trace ("this theme has no progress animation");
        }

        if (view->throbber != NULL) {
                ply_trace ("loading throbber");
                if (!ply_throbber_load (view->throbber)) {
                        ply_trace ("optional throbber was not loaded");
                        ply_throbber_free (view->throbber);
                        view->throbber = NULL;
                }
        } else {
                ply_trace ("this theme has no throbber\\n");
        }
				...

回到我们的需求,为了只播放一次,所以只保留throbber图片序列,为了在动画结束后显示最后一帧,配置文件设置 UseEndAnimation=true (该字段默认就是true, 所以不用特意写)。

以上内容仅供参考,如有不准确的地方还请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光机121906

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值