2008年12月10日 星期三

nano-X Window Manager

nano-X並沒有自動處理視窗在screen繪圖的動作,例如A視窗有部份區域與B視窗重疊,當A視窗結束消失,B視窗被A視窗覆蓋的部份會是一片空白.

在nano-X上實作一個Window Manager才能解決上述的問題.
nano-X中的nanowm可作為參考.

nano-X 提供了Graphic UI所需要的基礎功能,大致上可分為

1.操作繪圖區域
GrNewWindow
GrNewPixmap
GrMapWindow
GrUnmapWindow
GrReparentWindow
GrCopyArea
GrClearArea
2.繪圖物件 Graphic Context
GrNewGC
GrCopyGC
GrForeground
GrBackground
GrSetGCFont
3.繪圖工具
GrLine
GrRect
GrPoly
GrFillRect
GrFillPoly
4.繪圖區域狀態管理,回報視窗顯示,子視窗狀態更新等
GrCheckNextEvent

實做Window Manager之前必須了解的事情
0.視窗具有父子階層的關係,子視窗的x,y軸位置是相對於父視窗.父視窗的大小範圍就是子視窗的可視繪圖範圍
1.GR_ROOT_WINDOW_ID代表系統中最底層的視窗即root window,可當作桌面來看待.
2.視窗分為兩種Container Window與Client Window,
Container Window其父視窗為root window.
Client window其父視窗為Container Window.
3.Window Manager需要處理視窗Event.
此功能為實做Window Manager最重要的部份.關係到視窗的正確顯示.

GR_EVENT_TYPE_EXPOSURE :
視窗需要重繪.


GR_EVENT_TYPE_CHLD_UPDATE :
子視窗狀態改變了.
若子視窗隱藏(unmap),父視窗為Container Window則重繪父視窗.









沒有留言:

張貼留言