GTK+2.6 + DirectFB的幾個問題
GTK+2.6 + DirectFB的幾個問題
經過幾番周折,終於確定採用GTK+2.6 + DirectFB方案。之所以不選擇GTK+2.8 + TinyX主要是出於硬體成本上的考慮,TinyX(包括Xlib等庫檔案)要佔4M Flash空間,加上視窗管理器還要耗好幾M的RAM,同時程式間通訊過於頻繁,效能上的開銷也不容小覷。
為什麼不選擇GTK+2.8 + DirectFB呢?原因是2.8及以後採用cairo作為畫向量圖的後端,字型顯示效果有不少改進,但速度上慢了不少。在實驗板上試了一下,效能基本上不能接受。
為什麼不選擇GTK+2.4 + DirectFB呢?GTK+在2.4到2.6之間有不少改進,大家一致認為部分改動對我們的應用有幫助。
GTK+2.6似乎應該是首選了,然而問題在於gdk-directfb 2.6實現得不太好。我們決定驗證一下,評估其穩定性,以及修復這些問題的難度,再考慮。和一個同事一起花了兩天時間去測試,去解決問題。主要問題如下:
字型顯示有問題,根本顯示不出來。由於2.4和2.8的字型顯示正常,freetype、fontconfig和pango應該是沒有問題的,所以把焦點鎖定在GTK上。字型顯示比較複雜,大致要經過下列流程:
a) pango_renderer_draw_layout
b) pango_renderer_draw_layout_line
c) pango_renderer_draw_glyphs
d) gdk_window_draw_glyphs_transformed
e) gdk_pixmap_draw_glyphs_transformed
f) gdk_directfb_draw_glyphs_ transformed
經過分析後,發現gdk_directfb_draw_glyphs_ transformed沒有實現,所以畫不出文字出來,考慮到我們不會用到transformed功能,就直接用gdk_directfb_draw_glyphs實現了gdk_directfb_draw_glyphs_ transformed函式。字型顯示問題就解決了。
接下來發現TextView裡選中一行文字的部分時,非選中部分顯示模糊。我們知道TextView呼叫gtk_text_layout_draw顯示文字,gtk_text_layout_draw裡又呼叫render_para函式。在render_para裡,可以看到:
a) 整行都被選中時,最為簡單:先畫高亮背景方框,再畫上字型就行了。
b) 部分選中時稍麻煩一點,先按正常方式繪製,再重畫選中部分,兩者再迭加。關鍵在於設定clip_region為選中區域,否則會覆蓋到不期望的區域上。
這些座標和clip區域的數值都沒有問題。比較2.6和2.8的程式碼,兩者變化不大,確認不是由這些程式碼不同引起的。自然而然的懷疑到gdk-directfb上,後來發現在gdk_directfb_draw_glyphs函式clip的區域不對。很明顯是引數傳遞過程出現了問題,很快查出是gdk_gc_copy裡拷貝GC是沒有拷貝私有資料,結果clip_region沒有拷貝過來,造成剪下失敗。
接下來的半天測試裡,沒有發現大的問題,所以確定採用GTK+2.6 + DirectFB方案。
相關文章
- Typora 使用中的幾個問題
- grub常見的幾個問題
- 面試官常問的Nginx的幾個問題面試Nginx
- 有關 socialiteproviders 存在的幾個問題IDE
- azkaban 安裝中的幾個問題
- Redis學習的幾個小問題Redis
- 入行 AI 的幾個常見問題AI
- 面試官常問的Nginx的那幾個問題?面試Nginx
- 關於ImageView的幾個常見問題View
- Python import 時要注意的幾個問題PythonImport
- npm module 釋出 遇到的幾個問題NPM
- Swift ABI 穩定後的幾個問題Swift
- 關於解決問題的幾個段位
- 開發以太坊遇到的幾個問題
- mysql叢集02:幾個問題MySql
- C語言初學者最常問的幾個問題C語言
- 跨域請求中常見的幾個問題跨域
- 單連結串列有環的幾個問題
- 初學Java會遇見的幾個問題分享!Java
- 【學習】分享幾個學習中的小問題
- 邦芒面試:面試時要問清楚的幾個問題面試
- 幾個 iOS 端底層網路問題iOS
- 目前“好評返現”有幾個問題?
- 通過幾個問題深入淺出VueVue
- FPGA驅動adc128s052的幾個問題FPGA
- 釋出新聞稿必須瞭解的幾個問題
- 做聚合支付代理需要注意的這幾個問題?
- 伺服器租用中有關頻寬的幾個問題伺服器
- 分享Java面試中的幾個重要基礎問題!Java面試
- 技術人溝通中的幾個常見問題
- [併發程式設計]-關於 CAS 的幾個問題程式設計
- 如何避免學習linux必然會遇到的幾個問題Linux
- 通過幾個問題深入分析Vue中的keyVue
- mysql 分組取每個組的前幾名的問題MySql
- 基於fusion的DirectFB訊息流
- vs2015cordova環境安裝【個人遇到的幾個問題】
- 動態規劃,這幾個問題最常見!動態規劃
- Android多程式通訊之幾個基本問題Android