トップ «前の日記(2007-05-23) 最新 次の日記(2007-06-06)» 編集

あしたに日記[RSS]

Wiki/Bookmark/Top


2007-06-03 [長年日記]

rcairo1.5.0 on Windows

cairoのてすと
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