這次的筆記一樣是來自GTKmm GitHub上的範例 範例連結
內容是利用GTKmm的Drawing Area來繪製能依據現在時間做變化的動畫鬧鐘。
我將會記下自己對源碼的理解以及函數的解析,以及實作過程。
如果有不知道如何架設GTKmm的朋友可以先看我之前的文章,GTKmm環境架設。
範例截圖(一)
範例截圖(二)
在進入源碼解說前,先來介紹一下GTKmm官網對於Drawing Area控件的基礎使用說明。來源連結
先介紹一下會使的我們接下來閱讀實現源碼時會輕鬆許多。
在GTKmm中,繪圖的功能主要藉由另一個開源的向量繪圖庫Cairo來實現(念法近似"開羅"),
所以學習DrawingArea這個控件的方法,其實就是學習Cairo繪圖庫的使用方式。
而基本的繪圖方式為:
(一)在畫布上先定義出想要繪製出來的圖線路徑(Path),注意,但定義完成後這個路徑是看不見的。
(二)如果要將其在畫布上顯現出來,則要利用路徑描繪(Stroking)或填滿他們(filling)的函數。
(三)堆疊的使用,一個Context代表一個圖形狀態,Cairo內建一個堆疊,使你可以使用Context.save()將現在狀態放入堆疊中,也可以
使用Context.restore()將堆疊最上面的的狀態覆寫回來;我們可以透過這個功能來實現圖片的儲存及回復,由於這是一個堆疊,所以可以反覆嵌套使用。
在開始繪圖之前,我們必須先創造Cairo::Context 這個類別物件,這個物件裡將包含許多參數來告訴畫布我們將如何將圖形顯現出來。
在GTKmm中我們將利用Gdk::Window::create_cairo_contex()這