rcairoでWin32Surfaceが動くようになったというので試してみた。
WindowsではActiveScriptRubyを使っているのだけれども、
それに対して今回のrcairoのビルドはVisual C++ 2005 Express Edition で行った。「Ruby拡張ライブラリをビルド(リンク間違い修正しました...)」に書いたようにえらく苦労した。マイクロソフトよ...気が利かないどころか嫌がらせに近いぞこれは。やっぱMinGWあたりでやるのが正しいなあ。
rcairoに特化した作業はもうちょいましな方法を考えてから書く予定だが、簡単に。cairo自体のビルドはこちらの(PHP由来?の)windows用configure.jsを使わせてもらったが、1.4.6でもさっくりビルドできた。
あとはrcairoのextconf.rbをいじってgccチェックとpkg-configをスルー。生成したMakefileのターゲットを必要なものだけに限定して書き換えたりエラー箇所を無視したり修正したりして強引にビルドした。
さて、やっと遊べる。VisualuRubyなどと組み合わせれば動くらしいのだがドキュメントが全くない。Cairoのドキュメントを見るとHDCを与えてWin32Surfaceを生成せよとある。ふむ、こんなかんじか。おお、簡単だ。Surface生成以降はPNG生成と手順が変わらないのは謳い文句通りか。
しかし、毎度毎度Surface生成から行うのは作法として正しいんだろうか?あと、show_textをscaleつきで使うとなんか変だなあ。
require 'vr/vrcontrol'
require 'cairo'
require 'uconv'
module MyForm
include VRDrawable
def construct
self.caption="てすと!"
self.move(200,200,308,239)
end
def self_paint
Cairo::WIN32Surface.new(self.hdc) do |surface|
# コンテキスト設定
c = Cairo::Context.new(surface)
# 背景を白に
c.set_source_color(:white)
c.paint
# 角丸な□
c.set_source_color("#ffa500")
c.rounded_rectangle(5,5,290,190,10,10)
c.stroke_preserve
c.move_to(10,10)
c.set_source_color("#fffee0")
c.fill
c.stroke
# こんにちは!
c.set_source_color(:black)
c.select_font_face(Uconv.sjistou8("Aiko-Regular"),0,0)
str=Uconv.sjistou8("こんにちは!!")
0.upto(3) do |i|
c.move_to(20+20[i,60+35](http://ashitani.jp/wiki/?p=i,60+35i)
c.set_font_size(30)
c.show_text(str)
end
# 描画
c.stroke
end
end
end
frm=VRLocalScreen.newform
frm.extend MyForm
frm.create.show
VRLocalScreen.messageloop