專利名稱:確定圖形用戶界面中窗口剪切關(guān)系的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)圖形學(xué)領(lǐng)域,特別是涉及一種用于計(jì)算機(jī)系統(tǒng)確定圖形用戶界面中窗口剪切關(guān)系的方法。
背景技術(shù):
隨著便攜移動(dòng)設(shè)備的普及,例如個(gè)人數(shù)字助手(PDA),手機(jī)等,基于便攜移動(dòng)設(shè)備的帶有人機(jī)交互的圖形界面應(yīng)用軟件大量涌現(xiàn),圖形界面的應(yīng)用程序的界面也日趨復(fù)雜。而由于便攜移動(dòng)設(shè)備的計(jì)算能力弱,復(fù)雜的圖形界面程序在窗口切換的響應(yīng)速度方面難以滿足用戶的需求。因此,對(duì)傳統(tǒng)桌面計(jì)算機(jī)的圖形界面的相關(guān)關(guān)鍵技術(shù)進(jìn)行改造,可以提高圖形界面程序的響應(yīng)性能,改善用戶的使用體驗(yàn)。
在任何一個(gè)多窗口的圖形用戶界面系統(tǒng)中,必須確保一個(gè)窗口中的顯示輸出不會(huì)影響到其它窗口。因此處理窗口之間的互相剪切關(guān)系是至關(guān)重要的問(wèn)題。由于任何窗口位置的改變,都會(huì)影響到剪切關(guān)系的重新計(jì)算,因此窗口剪切關(guān)系的計(jì)算方法,也成為制約。
多窗口系統(tǒng)通常利用Z序來(lái)管理窗口之間的互相剪切關(guān)系。Z序?qū)嶋H定義了窗口之間的層疊順序。屏幕上的所有窗口使用通常原點(diǎn)在左上角,X軸水平向右,Y軸垂直向下的基準(zhǔn)坐標(biāo)系。Z序就是相對(duì)于一條假想的從屏幕內(nèi)指向屏幕外的Z軸而言的。窗口在這個(gè)Z軸上的值,就確定了其Z序。Z序值大的窗口,覆蓋了Z序值小的窗口。
根據(jù)窗口在Z序中所處的位置,圖形用戶界面系統(tǒng)要計(jì)算每個(gè)窗口和桌面受剪切的區(qū)域(桌面可以看成特殊的窗口),即剪切域。窗口的剪切域定義為互不相交的矩形集合。屏幕上沒(méi)有任何窗口時(shí),桌面的剪切域由一個(gè)矩形組成,即屏幕矩形;當(dāng)屏幕上只有一個(gè)窗口時(shí),該窗口的剪切域由包圍該窗口的最小矩形組成,而桌面的剪切域是由桌面的矩形被該窗口的分割成的個(gè)數(shù)盡可能少的矩形組成的集合。當(dāng)屏幕上有新的窗口出現(xiàn),將按照上述規(guī)則,同時(shí)剪切已有的窗口和桌面,從而改變已有窗口和桌面的剪切域。
圖形用戶系統(tǒng)的底層圖形引擎在進(jìn)行向顯示設(shè)備的輸出時(shí),要根據(jù)當(dāng)前輸出的剪切域進(jìn)行輸出的剪切操作,從而保證窗口的繪制輸出不會(huì)互相影響。因?yàn)槿魏我粋€(gè)窗口的創(chuàng)建、銷毀、隱藏、顯示均有可能影響其他窗口的剪切域,因此剪切域維護(hù)方法的效率是決定圖形用戶界面效率的關(guān)鍵。
現(xiàn)有的圖形用戶系統(tǒng),在每次可能影響剪切域的事件發(fā)生——即窗口的創(chuàng)建、銷毀、隱藏、顯示、切換時(shí),使用的方法是將所有窗口和桌面的剪切域清空,再重新按照Z(yǔ)序依次計(jì)算之,該方法實(shí)現(xiàn)簡(jiǎn)單,在桌面計(jì)算機(jī)的圖形用戶界面系統(tǒng)中廣泛運(yùn)用,但其效率不高,在計(jì)算能力弱而性能要求高的嵌入式系統(tǒng)中無(wú)法滿足要求。
因此,如果能提出更高效的剪切關(guān)系確定方法,可以提高整個(gè)圖形用戶界面系統(tǒng)的運(yùn)行效率,減少響應(yīng)時(shí)間。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種用于確定計(jì)算機(jī)系統(tǒng)圖形界面窗口的剪切關(guān)系的方法。
本發(fā)明采用的技術(shù)方案如下多窗口圖形用戶界面的各窗口發(fā)生剪切域改變的事件包括新窗口的創(chuàng)建、已創(chuàng)建窗口的顯示、已顯示窗口的隱藏、已顯示窗口的移動(dòng)、已顯示窗口間的切換、已創(chuàng)建窗口的銷毀共計(jì)六種情況。在這六種情況下確定窗口剪切關(guān)系1)每次創(chuàng)建新的窗口時(shí),其窗口的剪切域集合只有一個(gè)矩形,矩形為窗口大小,矩形標(biāo)記值為0,然后按照其Z序插入到所有窗口列表的合適位置,計(jì)算該窗口被Z序大于它的所有窗口剪切而形成的剪切域,對(duì)剪切域這一集合中的各矩形進(jìn)行標(biāo)記,標(biāo)記方法是如果該矩形區(qū)域其上不被任何窗口遮蓋,則標(biāo)記為0,否則,其上如有N個(gè)窗口遮蓋,則標(biāo)記為-N;2)每次顯示已經(jīng)創(chuàng)建的窗口時(shí),遍歷所有Z序小于它的窗口的原有剪切域中各矩形區(qū)域,如果某個(gè)矩形區(qū)域和待顯示窗口相交,則計(jì)算該矩形區(qū)域被待顯示窗口剪裁的剪切域,該下層窗口的剪切域?yàn)樵屑羟杏驕p去該矩形區(qū)域后和該矩形區(qū)域剪切域的并集,也按照1)中的敘述標(biāo)記規(guī)則進(jìn)行標(biāo)記;3)每次隱藏已經(jīng)顯示的窗口時(shí),遍歷所有Z序小于它的窗口的原有剪切域中各矩形區(qū)域,如果某個(gè)矩形區(qū)域和待顯示窗口相交,則將該矩形區(qū)域的標(biāo)記加一,如果標(biāo)記達(dá)到0,則意味著該矩形區(qū)域?qū)⒈伙@示;4)每次移動(dòng)已經(jīng)顯示的窗口時(shí),在移動(dòng)過(guò)程中只重畫,不修改剪切域,當(dāng)移動(dòng)結(jié)束后,將利用3)的步驟隱藏原位置窗口,利用2)的步驟在新位置顯示窗口;5)每次在已顯示的窗口中切換,則利用3)的步驟,將該窗口隱藏,修改該窗口的Z序到最頂層,重新初始化該窗口的剪切域,并按照2)的步驟顯示該窗口,但只需要遍歷所有Z序大于該窗口原有Z序的窗口;6)每次銷毀已有的窗口時(shí),如果該窗口已經(jīng)被顯示,則先利用3)的步驟隱藏該窗口,再將該窗口從窗口列表中移除;如果該窗口已經(jīng)被隱藏,則直接將該窗口從窗口列表中移除。
本發(fā)明和已有技術(shù)相比具有的有益的效果是它不需要重新計(jì)算所有窗口的剪切關(guān)系,而僅計(jì)算實(shí)際受影響的窗口的剪切關(guān)系,因而減少了計(jì)算復(fù)雜度,縮短響應(yīng)時(shí)間。
圖1是用來(lái)說(shuō)明本發(fā)明的圖例是初始狀態(tài)的兩個(gè)窗口(窗口1,窗口2);圖2是增加的窗口3的圖例;圖3是在圖1中增加了窗口3之后的圖例;圖4是在圖3中移動(dòng)窗口3結(jié)束時(shí)的圖例;圖5是在圖3狀態(tài)下,切換窗口2到最頂層的圖例。
具體實(shí)施例方式
在圖形用戶界面系統(tǒng)中實(shí)現(xiàn)該方法時(shí),可以用鏈表數(shù)據(jù)結(jié)構(gòu)按照Z(yǔ)序依次存放各個(gè)窗口的描述結(jié)構(gòu),在各個(gè)窗口的描述結(jié)構(gòu)中,用鏈表數(shù)據(jù)結(jié)構(gòu)存放該窗口的剪切域,鏈表的每個(gè)結(jié)點(diǎn),包含該窗口一個(gè)被剪切的矩形區(qū)域的位置信息,以及一個(gè)用來(lái)執(zhí)行上述操作步驟的標(biāo)記。每次發(fā)生需要改變窗口剪切關(guān)系的時(shí)候,按照上述方法遍歷窗口描述結(jié)構(gòu)鏈表,以及位于窗口描述結(jié)構(gòu)鏈表中的剪切域進(jìn)行修改標(biāo)記等操作,而不需像傳統(tǒng)方法那樣清空所有窗口的剪切域再重新計(jì)算。
用一個(gè)例子來(lái)說(shuō)明如何用本發(fā)明解決各窗口發(fā)生剪切域的情況情況1圖1有兩個(gè)窗口,分別為窗口1(由區(qū)域X,Y,B組成),窗口2(由區(qū)域Y,Z組成),它們的Z序分別為1,2,表示窗口1被窗口2遮蓋。
在當(dāng)前情況下,兩個(gè)窗口相應(yīng)的剪切域和矩形標(biāo)記值分別為(用鏈表存貯)窗口1的剪切域?yàn)閄(0)→B(0)→Y(-1)(其中括號(hào)中的數(shù)字為矩形標(biāo)記值)窗口2的剪切域?yàn)?Y+Z)(0)(其中(Y+Z)表示區(qū)域Y和Z組成的矩形)然后采用技術(shù)方案(1)增加窗口3,窗口3的Z序?yàn)?。
由于沒(méi)有Z序大于3的窗口,所以這時(shí)窗口3的剪裁域和矩形標(biāo)記值分別為窗口3的剪裁域?yàn)镸(0)(見(jiàn)圖2)情況2采用技術(shù)方案(2)顯示已經(jīng)創(chuàng)建的窗口3。
這時(shí),窗口1和窗口2的Z序都小于窗口3的Z序,所以遍歷窗口1和窗口2原有剪切域中的各個(gè)矩形,采用技術(shù)方案(2)進(jìn)行操作。窗口1的剪切域中的矩形X(0)跟窗口3相交,矩形X(0)被窗口3剪裁的剪切域?yàn)锳(0)→D(-1),矩形B(0)跟窗口3不相交,矩形Y(-1)跟窗口3相交,矩形Y被窗口3剪裁的剪切域?yàn)镃(-1)→E(-2)→F(-1),根據(jù)技術(shù)方案(2),此時(shí)窗口1的剪切域和矩形標(biāo)記值分別為窗口1的剪切域A(0)→D(-1)→B(0)→C(-1)→E(-2)→F(-1)(見(jiàn)圖3)窗口2的剪切域中的矩形(Y+Z)(0)跟窗口3相交,矩形(Y+Z)(0)被窗口3剪裁的剪切域?yàn)镃(0)→(E+H)(-1)→(F+G)(0),所以窗口2的剪切域和矩形標(biāo)記值分別為窗口2的剪切域C(0)→(E+H)(-1)→(F+G)(0)(見(jiàn)圖3)情況3在圖3隱藏窗口2時(shí),采用技術(shù)方案(3),由于窗口1的Z序小于窗口2的Z序,所以遍歷窗口1的剪切域集合中的各個(gè)矩形。矩形A,D,B跟窗口2不相交,保持原樣,矩形C(-1),E(-2),F(xiàn)(-1)跟窗口2相交,所以分別將它們的矩形標(biāo)記值加1。這時(shí)窗口1的剪切域和矩形標(biāo)記值分別為窗口1A(0)→D(-1)→(B)(0)→C(0)→E(-1)→F(0)情況4在圖3移動(dòng)窗口3結(jié)束時(shí),采用技術(shù)方案(4),先利用技術(shù)方案(3)把窗口3隱藏掉,這時(shí)窗口1和窗口2的剪切域就跟圖1的情況一樣,然后利用技術(shù)方案(2)把窗口3在移動(dòng)到的新的位置顯示出來(lái)。這時(shí)候,窗口1,窗口2和窗口3的剪切域和矩形標(biāo)記值分別為窗口1的剪切域A(0)→D(-1)→B(0)→C(-1)→E(-2)→F(-1)窗口2的剪切域C(0)→(E+H)(-1)→(F+G)(0)窗口3的剪切域(D+E+H+I)(0)(見(jiàn)圖4)情況5在圖3狀態(tài)下,切換窗口2到最頂層,采用技術(shù)方案(5),先利用技術(shù)方案(3)把窗口2隱藏掉,可以參考情況3。然后修改窗口3的Z序值為2,窗口2的Z序值為3,再利用技術(shù)方案(2)重新初始化窗口2的剪切域,并顯示窗口2,但只需要遍歷窗口3的剪裁域集合中的各個(gè)矩形。窗口3的剪裁域中矩形(D+E+I+H)(0)跟窗口2相交,被窗口2剪裁的剪切域?yàn)?D+Ia)(0)→(E+H)(-1)→(Ib)(0),所以窗口3的剪裁域和矩形標(biāo)記值分別為(D+Ia)(0)→(E+H)(-1)→(Ib)(0)(其中Ia,Ib組成原來(lái)區(qū)域I)窗口1的剪切域不需要改變。
窗口2的剪裁域和矩形標(biāo)記值重新初始化為(C+E+F+H+G)(0) (見(jiàn)圖5)
情況6在圖3情況下刪除窗口3,采用技術(shù)方案(6)。由于窗口3已經(jīng)被顯示,所以先利用技術(shù)方案(3)隱藏窗口3,然后從窗口列表中移除窗口3,最后結(jié)果如圖1所示。
權(quán)利要求
1.一種確定圖形用戶界面中窗口剪切關(guān)系的方法,其特征在于1)每次創(chuàng)建新的窗口時(shí),按照其Z序插入到所有窗口列表的合適位置,計(jì)算該窗口被按Z序大于它的所有窗口剪切而形成的剪切域,對(duì)剪切域這一集合中的各矩形進(jìn)行標(biāo)記,標(biāo)記方法是如果該矩形區(qū)域其上不被任何窗口遮蓋,則標(biāo)記為0,否則,其上如有N個(gè)窗口遮蓋,則標(biāo)記為-N;2)每次顯示已經(jīng)創(chuàng)建的窗口時(shí),遍歷所有Z序小于它的窗口的原有剪切域中各矩形區(qū)域,如果某個(gè)矩形區(qū)域和待顯示窗口相交,則計(jì)算該矩形區(qū)域被待顯示窗口剪裁的剪切域,該下層窗口的剪切域?yàn)樵屑羟杏驕p去該矩形區(qū)域后和該矩形區(qū)域剪切域的并集,也按照1)中的敘述標(biāo)記規(guī)則進(jìn)行標(biāo)記;3)每次隱藏已經(jīng)顯示的窗口時(shí),遍歷所有Z序小于它的窗口的原有剪切域中各矩形區(qū)域,如果某個(gè)矩形區(qū)域和待顯示窗口相交,則將該矩形區(qū)域的標(biāo)記加一,如果標(biāo)記達(dá)到0,則意味著該矩形區(qū)域?qū)⒈伙@示;4)每次移動(dòng)已經(jīng)顯示的窗口時(shí),在移動(dòng)過(guò)程中只重畫,不修改剪切域,當(dāng)移動(dòng)結(jié)束后,將利用3)的步驟隱藏原位置窗口,利用2)的步驟在新位置顯示窗口;5)每次在已顯示的窗口中切換,則利用3)的步驟,將該窗口隱藏,修改該窗口的Z序到最頂層,按照2)的步驟顯示該窗口,但只需要遍歷所有Z序大于該窗口原有Z序的窗口;6)每次銷毀已有的窗口時(shí),如果該窗口已經(jīng)被顯示,則先利用3)的步驟隱藏該窗口,再將該窗口從窗口列表中移除;如果該窗口已經(jīng)被隱藏,則直接將該窗口從窗口列表中移除。
全文摘要
本發(fā)明公開(kāi)了一種確定圖形用戶界面中窗口剪切關(guān)系的方法。本發(fā)明的方法通過(guò)記錄和維護(hù)各個(gè)窗口的剪切域中各矩形區(qū)域其上層遮蓋窗口數(shù)量的計(jì)數(shù)值,在圖形用戶界面系統(tǒng)每次發(fā)生影響窗口剪切關(guān)系事件時(shí),本發(fā)明不需要重新計(jì)算所有窗口的剪切關(guān)系,而僅計(jì)算實(shí)際受影響的窗口的剪切關(guān)系,因而減少了計(jì)算復(fù)雜度,縮短響應(yīng)時(shí)間。
文檔編號(hào)G06F9/44GK1645320SQ20051004929
公開(kāi)日2005年7月27日 申請(qǐng)日期2005年1月31日 優(yōu)先權(quán)日2005年1月31日
發(fā)明者卜佳俊, 陳純, 方豐平, 柯化成 申請(qǐng)人:浙江大學(xué)