Silverlight で HTML5::Canvas を実装中(今日はテキストAPIを実装)
細かなことは昨日の日記などをご覧下さい。
- Silverlightモードの変更箇所
- fillText(), strokeText() を実装 (ただし strokeText() は fillText() と同じレンダリングを行う)。
- measureText() を実装(width と height を返す)
- VMLモードの変更箇所
- strokeStyle = pattern を実装
- addColorStop offset値の衝突を回避するコードを追加
- radialGradientFill のリテイク
- fillText(), strokeText() を実装
- measureText() を実装(width と height を返す)
- 互換性の問題とか
- テキストAPI(fillText,strokeText)を使うときは、textBaseline = "top"; とする必要がある。
- "top" 以外を指定すると、Silverlight と Firefox3.1 で描画位置が大きく異なってしまう。
- topを指定してもちょっとずれる。フォント要因もあるので簡単にはいかない。
- VMLモードでclipが実装できていない。
- 実装可能かもしれないので、もうちょっとがんばる。
- テキストAPI(fillText,strokeText)を使うときは、textBaseline = "top"; とする必要がある。
- 仕様書から読み取れない仕様とか
- ブラウザのテキストのサイズを変更(ズーム)したら、fillText, strokeText も追従すべきか
- Firefox3.1の実装だと追従しないみたい。
- 現段階では、Silverlightモードではズームに追従し、VMLモードでは追従しないようにしている。
- ブラウザのテキストのサイズを変更(ズーム)したら、fillText, strokeText も追従すべきか
- 抱えている問題とか
-
- fillText(), strokeText() のグラデーション(+パターン)の描画が実装できていない。
実装済みの機能
- clearRect, beginPath, moveTo, lineTo, bezierCurveTo, quadraticCurveTo, rect, strokeRect, fillRect, closePath, createLinearGradient, createRadialGradient, stroke, fill, arc, save, restore, translate, rotate, scale, transform, setTransform, clip, measureText, fillText, font
- CanvasGradient.addColorStop
- CanvasPattern(パターンフィル + タイリング対応)
一部実装済みの機能
- drawImage(HTMLImageElementのみ対応)
- strokeText(VMLモードのみ, Silverlightモードでは、fillTextと同じ結果になる)
これから検討する機能
- shadowBlur, shadowColor, shadowOffsetX, shadowOffsetY, textAlign, textBaseline, isPointInPath, arcTo
反省会
- ShadowとClip(VMLモード)は、もしかして実装できるかもしれない。
- globalCompositeOperation の "destination-over" と "copy" も実装できるかもしれない。