フォントとして固定幅フォントを指定しようと思っています。
IE や Forefox では希望通り表示されるのですが、Google Chrome では全角スペースが半角スペースと同じ幅で表示されてしまうようです。
ご存じの方、いらっしゃいましたら、Google Chrome で固定幅フォントで表示させる書き方を教えてください。
以下、試したサンプルになります。
<!DOCTYPE html> <html> <head> <script type="text/javascript"> function draw() { var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); ctx.font = "20px 'MS ゴシック'"; ctx.fillText("12345678901234567890", 0, 20); ctx.fillText("----*----+----*----+", 0, 40); ctx.fillText("こんにちは 世界!", 0, 60); ctx.fillText("こんにちは 世界!", 0, 80); } </script> </head> <body onLoad="draw()"> <canvas id="canvas" width="200" height="200"></canvas> </body> </html>
行の先頭にU+30FBの文字を入れればいいそうです。
http://bardiel-of-may.blogspot.jp/2012/08/chrome-21_19.html
とか。ただの思いつきですが(Google Chorme 入れてない)。
> ctx.font = "20px 'MS ゴシック', monospace";
試してみましたが、ダメでした。
ただ、代替え手段を見つけたので、他に良い方法がなければ、その方法で行こうかと思います。
<思い付いた案>
全角スペースのサイズを measureText を測ってみると、Google Chrome でも正しく計算できている模様。
ctx.fillText( ctx.measureText(" ").width, 0, 100); // 10
ctx.fillText( ctx.measureText(" ").width, 0, 120); // 20
ということで、1文字ずつ、サイズ計算して、描画してあげれば、
全角スペースと半角スペースを区別して表示させることが出来そう。
<サンプルコード>
drawText( ctx, "こんにちは 世界!", 0, 100 );
function drawText( ctx, strMessage, x, y )
{
for ( var i = 0; i < strMessage.length; i++ )
{
var c = strMessage.substr( i, 1 ); // 描画する1文字を取得
var strPos = strMessage.substr( 0, i ); // 文字列取得(位置計算用)
var metrix = ctx.measureText(strPos); // サイズ計算
ctx.fillText( c, x + metrix.width, y); // 算出した位置に1文字描画
}
}
>全角スペースと半角スペースを区別して表示させることが出来そう。
なんじゃそりゃ (^^;
canvas を多用するなら、Google Chrome かどうか判定して、もしそうだったら
CanvasRenderingContext2D.prototype.fillText を置き換え、ですかね...