1. 建立一個 window。
wid = GrNewWindowEx(GR_WM_PROPS_APPFRAME |
GR_WM_PROPS_CAPTION |
GR_WM_PROPS_CLOSEBOX,
"test",
GR_ROOT_WINDOW_ID,
0, 0, 200, 200, 0xFFFFFF);
2. GrNewWindowEx 包含下列二個函數,只是設定參數而已,並未開始畫圖。
/* create window with no borders */
wid = GrNewWindow(parent, x, y, width, height, 0, background, BLACK);
if (wid) {
/* set properties and title */
wmprops.flags = GR_WM_FLAGS_PROPS | GR_WM_FLAGS_TITLE;
wmprops.props = props;
wmprops.title = title;
GrSetWMProperties(wid, &wmprops);
}
3. GrSetWMProperties(wid, &wmprops); 傳送訊息到 nano-X server,並觸發 GR_UPDATE_ACTIVATE 事件。
4. nanowm 收到事件後,會執行 do_update 並執行 redraw_ncarea(window); 重畫標題。
5. redraw_ncarea 執行 GrGetWMProperties 得到視窗參數,再執行 nxPaintNCArea 畫圖。
6. nxPaintNCArea 執行 GrNewGC() 取得一個新的畫布,字型資料就是在這裏取得,gcp->fontid = 0;設定為 0,一般新增的 fontid 是從 1000 開始(static int nextfontid = 1000;),所以設定為 0 會取得 stdfont。
fontp = GsFindFont(gcp->fontid);
pf = fontp? fontp->pfont: stdfont;
GdSetFont(pf);
7. stdfont 設定在 nanox\srvmain.c
stdfont = GdCreateFont(psd, MWFONT_SYSTEM_FIXED, 0, NULL);
7. 再執行 GrText(id, gc, x+4, y-1, title, -1, GR_TFASCII|GR_TFTOP); 畫標題。
8. GrText 會再傳送訊息到 nano-X server,執行 GsPrepareDrawing 取得畫筆資料等,再執行 GdText 。
9. GdText 再執行 corefont_drawtext 畫標題。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()