2008-09-22 18:25 墳墓 (Brian Hsu)
前幾天 GtkD 這個給 D 語言用的函式庫終於正式發佈 1.0 版了,測了一下,在 Windows 上也能很簡單的跑起來,中文也沒問題,所以就想來試一些比較好玩的東西。
剛好想到一些相當萌的桌面小幫手(例如偽春菜之類的),執行的時候,那些美美的人物自然不會被醜陋的視窗困住,那麼能不能用 GtkD 做出這個效果呢?剛開始的時候因為不知道要用哪些 API 來做,所以花了很長的時間找資料和 Try & Error,但沒想到真的拼出來後竟是意外的簡單。
另外,小小抱怨一下,GtkD 上的 API 文件實在太舊啦,害我不時得直接去翻原始碼,一整個囧啊!
以下,就是這次的成果,其實除了顯示我心愛的蜜爾菲優外,什麼事也不能做。上圖則是是在 Windows XP 上跑的情況。
而這個小實驗,應該也證明了 D 語言已經足以用來開發視窗程式囉,這下可以直接把 Java 丟一旁啦,D 語言萬歲!
最後,這個程式主要是參考這個範例修改而來的,如果你是使用原始的 GTK+ 函式庫,可以參考那個範例,一樣可以做出相同的效果。
import tango.io.Stdout;
import gdk.Pixmap;
import gdk.Bitmap;
import gdk.Pixbuf;
import gtk.Widget;
import gtk.Main;
import gtk.Window;
import gtk.Image;
// 我們只需要 Image 與 Bitmap mask
Image loadFromFile (char [] filename,
out Bitmap mask)
{
// 因應 API 需求,我們用不到
GdkPixmap * pixmap;
// 建立圖型
Image image = new Image ("test.png");
// 取得 mask
image.getPixbuf.
renderPixmapAndMask (pixmap, mask, 100);
return image;
}
void main(char[][] args)
{
// 當使用者按下右鍵離開
bool buttonPressed (
GdkEventButton * event,
Widget widget)
{
Stdout.format ("Button Prssed:{}",
event.button).newline;
if ( event.button == 3 ) {
Main.exit (0);
}
return true;
}
// 初始化 GTK
Main.init (args);
// 主視窗,採用彈出式視窗,所以沒有標題列
Window window;
window = new Window (
GtkWindowType.POPUP
);
window.addOnButtonRelease (
&buttonPressed
);
// 讀取圖片檔並取得遮罩
Bitmap mask;
Image image = loadFromFile ("test.png",
mask);
window.add (image);
// 重點是這行,把除了圖案的部份全部遮掉
window.shapeCombineMask (mask, 0, 0);
// 顯示所有東西
window.showAll ();
Main.run ();
}
回響