最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

LVGL-V8框架簡析之Style

2023-06-09 21:20 作者:mymymind  | 我要投稿

????????LVGL自V7~V8眾多版本中,變化最大之一的就是Style了,LVGL之所以支持多樣式的控件風(fēng)格設(shè)計(jì)就是得益于Style的優(yōu)秀設(shè)計(jì)。LVGL的V6及以前版本沒怎么使用過,所以還是從V7開始做了解。

????????對于V7,Style的使用方式多是直接調(diào)用Style設(shè)計(jì)函數(shù)針對某一個(gè)控件進(jìn)行樣式(風(fēng)格)的綁定,例如設(shè)置控件背景透明度lv_obj_set_style_local_bg_opa,確實(shí)這類命名方式很方便對控件做樣式設(shè)計(jì),逐個(gè)綁定就是了,并且只要是控件都是obj類型的沒有區(qū)別,當(dāng)然也有一些問題,那就是當(dāng)控件數(shù)量多的時(shí)候,還設(shè)置這么多樣式就增加了很多代碼量。

????????不過V7也支持定義樣式變量,這樣就可以一種樣式給很多個(gè)控件做裝飾了,例如調(diào)用lv_style_init初始化style_btn變量并給它設(shè)定樣式,這樣一排按鈕都可以調(diào)用lv_obj_add_style使用style_btn的樣式了。

????????然后按鍵可以定義成數(shù)組,一個(gè)循環(huán)就可以全部設(shè)定樣式,即使絕對坐標(biāo)不一樣,乘個(gè)控件寬度加間隙也能一塊設(shè)置了,按鈕文本不一樣?字符串?dāng)?shù)組了解一下,還是一個(gè)循環(huán)的事情,非常高效便捷,所以一開始我就不理解為什么一群人離開設(shè)計(jì)器跟不能活一樣,LVGL都這么靈活了,還用得到設(shè)計(jì)器?

????????V7中為了支持控件眾多的樣式設(shè)計(jì),寫了很多很多很多很多的style設(shè)計(jì)函數(shù),甚至用到了當(dāng)時(shí)最難理解的宏定義_LV_OBJ_STYLE_SET_GET_DECLARE來定義函數(shù),好處就是減少了代碼量,畢竟復(fù)制粘貼改名稱多了也會(huì)煩。

????????但是真正用到了V8的release版本,事情開始不對勁,LVGL的Style愈發(fā)難以看懂了,結(jié)構(gòu)體復(fù)雜程度讓我懷疑小單片機(jī)根本跑不動(dòng)。

????????V8的Style最最最底層的結(jié)構(gòu)體成員之一是lv_style_prop_t,翻譯為樣式所有物,即列舉了所有可設(shè)置的樣式列表,例如尺寸等第0組樣式。

????????又或是背景等的第2組樣式,包含背景色、透明度、漸變色、漸變色方向、背景圖、背景圖透明度、背景圖重繪色等等樣式。

????????其他還有邊框、陰影、字體、線條等等就不列舉了。另外一個(gè)是值成員,它是一個(gè)聯(lián)合體。

????????值成員用于表示樣式的具體值,例如設(shè)置控件線條寬度,可以是int32_t類型的5,表示5個(gè)像素線寬,例如設(shè)置標(biāo)簽控件label的字體是16號(hào)字體,那么這個(gè)值就可以使const coid *指針類型的,指向一個(gè)字庫,例如設(shè)置按鍵控件btn的背景色,那么就可以是lv_color_t類型的LV_COLOR_RED,不過從V8開始顏色就沒有預(yù)定義了,只有l(wèi)v_color_hex自己現(xiàn)編顏色。

????????樣式所有物和值共同組成lv_style_const_prop_t結(jié)構(gòu)體。lv_style_const_prop_t指針變量或者uint8_t *指針或者直接樣式值lv_style_value_t類型共同組成v_p聯(lián)合體。v_p聯(lián)合體又與prop1、has_group、prop_cnt變量共同組成最終的樣式結(jié)構(gòu)體,即lv_style_t,其中prop用于內(nèi)部的標(biāo)記用戶一般不操作、has_group用于記錄組數(shù),當(dāng)調(diào)用V8的style樣式設(shè)置函數(shù)如lv_style_set_bg_color就會(huì)依次調(diào)用lv_style_set_prop->lv_style_set_prop_internal,最后通過_lv_style_get_prop_group計(jì)算組數(shù)并賦值has_group例如設(shè)置長度就和設(shè)置寬度是一組,設(shè)置背景色就和設(shè)置背景透明度一組,LVGL預(yù)留了7組每組16個(gè)樣式,prop_cnt用于記錄設(shè)置了多少個(gè)樣式,并且通過枚舉可以避免重復(fù)設(shè)置樣式的重復(fù)內(nèi)存占用。

????????同樣的,為了設(shè)置這么多的樣式就需要定義這么多函數(shù),V8取消了V7中的宏替代定義,實(shí)打?qū)嵉膶懥私?00個(gè)函數(shù),其實(shí)也就是對lv_obj_set_local_style_prop函數(shù)的封裝,把函數(shù)名對應(yīng)到了枚舉的樣式類型。

????????同樣的,也可以用lv_style_init初始化一個(gè)style,然后lv_style_set_prop添加style,再lv_obj_add_style給控件添加style。

LVGL-V8框架簡析之Style的評論 (共 條)

分享到微博請遵守國家法律
汝阳县| 崇明县| 上虞市| 托克逊县| 泊头市| 枣强县| 衡东县| 宜川县| 阿勒泰市| 红原县| 航空| 长乐市| 开平市| 剑川县| 富川| 英吉沙县| 清苑县| 安吉县| 黄浦区| 溧水县| 泌阳县| 沂源县| 大丰市| 大田县| 巴林左旗| 普宁市| 伊川县| 祁东县| 崇阳县| 桐庐县| 卢龙县| 襄城县| 樟树市| 左云县| 资兴市| 怀远县| 峨山| 潮安县| 肥城市| 探索| 阿巴嘎旗|