GTKmm 練習筆記(三)Drawing Area實作動畫鬧鐘(cairo 向量繪圖)

这篇博客通过GTKmm的Drawing Area展示了如何创建一个根据当前时间变化的动画闹钟。内容包括对源代码的理解、函数解析,以及GTKmm与Cairo库的结合使用。作者解释了Drawing Area的基本使用,Cairo的绘图流程,如定义路径、描边和填充,并介绍了Context的状态管理。示例代码显示了如何在GTKmm中创建Cairo::Context对象以进行绘图。最后,给出了闹钟类的结构和主要源代码文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

這次的筆記一樣是來自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()這

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值