Silverlight で HTML5::Canvas を実現するライブラリの実装を開始しました

SilverlightHTML5::Canvas を実現できないか」から早5日(うち3日はサボり)。ぼちぼち動くようになってきました。
今回書いたライブラリは、Silverlightがインストールされている環境ではSilverlightを使い、インストールされていなければ、VMLレンダリングします。

現在の実装状況

左上が IE6 + Silverlight2 でレンダリング、右上がFirefox3.0.3, 右下がSafari3.1.2

パターンブラシを実装しきれていませんが、あとは大体いけてます。

  • 実装済みのメソッド
    • CanvasRenderingContext2D
      • clearRect, beginPath, moveTo, lineTo, bezierCurveTo, quadraticCurveTo, rect, strokeRect, fillRect, closePath, createLinearGradient, createRadialGradient, stroke, fill
    • CanvasGradient
      • addColorStop
    • CanvasPattern(問題あり)
  • 未実装
    • CanvasRenderingContext2D
      • arc, drawImage, save, restore, translate, rotate, scale, clip, arcTo

名前のこととか、今後のこととか

excanvas.js から多くのアイデアを(ありがたく)拝借させてもらっています。

本来は excanvas.js にパッチを送って本流にマージしてもらうのが一番良いのですが、

  • VMLモードでの線形グラデーションの多色化
  • VMLモードでの円形グラデーションの実装
  • VMLモードでのパターンブラシの実装
  • excanvas.js の追補(clearRect, drawImage, transform, setTransform, グラデーションのサポート等々)
  • Silverlight 用の実装(excanvas.js 本体のコードよりもはるかに大きい)

等、多くのコードが入れ替わっているため、既に別のプログラムになっています。
また、excanvas.js の開発は2年前からストップしているようです。
ですので、excanvas.js という名前ではなく、何か別の新しい名前をつけて、MIT or Apache の デュアルライセンスで公開するつもりです。
といっても、山積みの問題を解決してからになりますが。

Silverlight の普及拡大作戦とか 妄想してみる

  • IE8β2の標準準拠モードではVMLレンダリングされない後に標準準拠モードでもレンダリングする方法が判明する
    • Quirksモード なら OK なので、MS は VML に見切りをつけたと思われる。
  • 現行の MS Officeは、HTMLフォーマットで文章を出力させると、HTML + VMLで図形がレンダリングされるが、今後は、Silverlight のコードを吐き出すようにしてくるはず。
    • 来年以降に登場するオンライン版の MS Office の バックエンドに、Silverlight が使われるかもしれない。
      • Officeの画面に「Silverlight が必要です。今すぐインストールしますか?」と表示されたり、 Office をインストールすると Silverlight も一緒にインストールされそう。


RIAの本命は HTML + Ajax なのか、Flashベースの技術か、それとも Silverlight なのか。
3年後はどうなってるのでしょう?

反省会

  • arc, arcTo はパラメタの指定方法がHTML5::Canvasと大きく違うため、効率的な変換式を考える必要がある(後回し)。
  • createRadialGradient は実装に5時間ぐらいかかってたり(引数が違いすぎる)
  • 明日もこの作業の続きから。