LCUI_InitCSSLibrary()
初始化 CSS 数据库。LCUI_PrintStyleSheet()
函数用于以 key: value
的格式打印样式表中的内容。LCUI_FreeCSSLibrary()
释放 CSS 数据库占用的资源。.btn.active .icon
,它由 .btn.active
和 .icon
两个选择器结点组成。.btn-group .btn .icon
,那么它的后代选择器 .btn .icon
就会被作为索引键来存放样式链接。styles
,以及链接到父级样式组的链接表 parents
。其中 styles
是个用于存放样式结点的链表,而 parents
是个哈希表,以选择器结点全称作为索引键,存放与父级样式组的链接。.icon
的样式表。.icon
开始遍历。.icon
索引的样式链接组,因为该样式组是空的,所以新建样式链接组,并以 .icon
作为索引键添加到样式组中。*
作为索引键来获取样式链接。*
,然后以 *
为索引键添加到样式链接组中。.btn .icon
的样式表。.icon
开始遍历。.icon
作为索引键获取样式链接组。*
作为索引键从该样式链接组中获取样式链接。.btn
。parents
。.btn
。.btn
作为索引键获取样式链接组。因为该样式组是空的,所以新建样式链接组,并以 .btn
作为索引键添加到样式组中。.icon
作为索引键获取样式链接。.icon
,然后以 .icon
为索引键添加到样式链接组中。.btn .icon
。.btn
为索引键添加到上次记录的父样式组链接表 parents
中。.btn-group .btn .icon
的样式表。.icon
开始遍历。.icon
作为索引键获取样式链接组。*
作为索引键从该样式链接组中获取样式链接。.btn
。parents
。.btn
。.btn
作为索引键获取样式链接组。.icon
作为索引键获取样式链接。.btn .icon
。.btn-group
。.btn-group
索引的样式链接组,因为该样式组是空的,所以新建样式链接组,并以 .btn-group
作为索引键添加到样式组中。.btn .icon
作为索引键获取样式链接。.btn .icon
,然后以 .btn .icon
为索引键添加到样式链接组中。.btn-group .btn .icon
。.btn
为索引键添加到上次记录的父样式组链接表 parents
中。:hover
和 :active
这两个选择器常被用于实现组件对鼠标操作的反馈,它们一般被用在组件自身或父组件上,假设这种组件在界面中的路径是 .window .list .list-item .btn-group .btn
,在用户操作鼠标触发 .window
组件的hover
和 active
状态变化时,出于性能上的考虑,这种情况下不更新任何组件肯定是性能最优的,那么基于现有的存储结构,我们只需要以下两个步骤就能判断是否需要更新子组件的样式:groups[1]
) 开始,遍历所有样式链接组。.btn
记录。LCUI_FindStyleSheet()
函数负责样式查询,它的查询过程如下:SelectorNode_GetNames()
函数生成该结点的所有名称组合,例如:选择器结点.icon:hover
的组合组合有 .icon
、.:hover
和 .icon:hover
这三种。LCUI_FindStyleSheetFromLink()
函数从中获取样式表。LCUI_FindStyleSheet()
函数只是负责定位查询入口,剩下的查询工作则交给了LCUI_FindStyleSheetFromLink()
函数,而它主要做了这两个工作:parents
中查找样式链接,如果存在则基于该父级样式链接和当前选择器结点,调用 LCUI_FindStyleSheetFromLink()
函数继续查询样式表。LCUI_AddCSSPropertyName()
来实现,示例如下:LCUI_AddCSSPropertyName()
函数会为给定的 CSS 属性名称分配一个标识号并将它和名称添加到属性名映射表中,这个标识号就是 CSS 属性在样式表中的下标,你可以用它访问该 CSS 属性的值。LCUI_FindStyleSheetFromGroup()
->SelectorNode_GetNames()
->SelectorNode_GetNames()
-> NamesFinder_Find()
这个函数调用链中。LCUI_FindStyleSheetFromGroup()
函数会调用 SelectorNode_GetNames()
函数获取选择器节点的所有名称组合,该函数只是简单的调用了 NamesFinder_Find()
函数,而 NamesFinder_Find()
函数则负责根据给定的选择器节点中的 id、类型、类和伪类来生成所有的组合,涉及较多的字符串操作。