am架构学习笔记(二) 屏幕切换

   

一、 am屏 切换到  am屏

          am屏切换到am屏,一般由按键事件引发,在am消息处理中,触发MSG_HW_KEYPAD事件,处理该消息时调用Am_EventHandlerFunc函数,再由全局变量g_nEvent的值来决定是否创建am屏。

          具体步骤:

 1,push/pushEx函数:通过push/pushEx函数,将即将写入的屏幕参数写入屏幕栈的顶层,将旧屏压入第二层。同时在push/pushEx函数中将g_nEvent的值置为LAYERCHANGE。

 2,继续Update旧屏的剩下的model。

3,Update完后,若g_nEvent为LAYERCHANGE,则开始创新的am屏。注意:此时的pCurrentBaseLayout仍指向旧屏,因为此时旧屏还没有free掉。

4,创屏准备工作:1,free掉旧屏,pCurrentBaseLayout = NULL;

                                  2,free掉旧屏的hash表,新建本屏幕的hash表。

                                  3,从layoutStack中取出param,该参数存储旧屏传过来的参数。并将这些参数写入新屏的hash表。

5,pCurrentBaseLayout赋值,由于新屏的入口函数已经写入在push/pushEx函数里写入到pScreenList->f_CreateScreen字段里,因此通过:

                 CreateFun = layoutStack.f_GetCreateFun();

                *pCurrentBaseLayout = CreateFun((atom_t_graphics *)(&g_graphicsContext), *param);

即可将所有参数写入pCurrentBaseLayout中,注意,此时只是对新屏的所有model的参数进行了复制,还没有创建。

Note:  pCurrentBaseLayout是一个指向am_t_model的指针,因此他可以接受所有model的返回值,因为所有的model类型都继承于am_t_model类型。

6,(*pCurrentBaseLayout)->update((*pCurrentBaseLayout), (t_rect*)&LCD_Screen, *param);

Upadate新屏的所有model,注意此时只是将所有model写到显存,还没有画出来。

7,响应AM_MSG_MMI_PAINT消息,Am_MMI_Render(pCurrentBaseLayout, param);会渲染新屏的所有model。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值