2008-08-30

もじら組Wiki 向けユーザスタイルシート

ポスト @ 21:34:33 | firefox

もじら組Wiki が少し見づらいなと思ったので、とりあえず、見出しに応じて内容をインデントさせてみることに。以下はそのユーザスタイルシート。

@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document domain(wiki.mozilla.gr.jp),
               domain(wiki2.mozilla.gr.jp) {
    div.wiki_body > h4 ~ *:not(h4):not(h3):not(h2):not(form) {
        margin-left : 1.5em !important;
    }

    div.wiki_body > h3 ~ *:not(h3):not(h2):not(form) {
        margin-left : 1em !important;
    }

    div.wiki_body > h2 ~ *:not(h2):not(form) {
        margin-left : 0.5em !important;
    }
}

2008-08-04

mozilla-qt

ポスト @ 22:36:21 | mozilla

現在 Firefox の Linux 版ではツールキットに GTK2 が使われていますが、しばらく前から Qt 版の開発も行われています。そして、今日 Qt 版に大量の変更がチェックインされたので、ビルドしてみることにしました。

これ以前にも Qt 版の開発はありましたが、現在メインのソースツリーには含まれていません。参考: 2004 年のスラッシュドットの記事

まずはソースコードをとってきます。

$ hg clone http://hg.mozilla.org/users/vladimir_mozilla.com/index.cgi/mozilla-qt/ mozilla-qt

Ubuntu 8.04 (Hardy) の Qt 4 パッケージのバージョン 4.3.4 ですが、Qt 4.4.0 を自分で入れていたのでそちらを使うことにします。

すでに Qt 4.4.1 がリリースされていますが…。

$ export LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.4.0/lib:$LD_LIBRARY_PATH
$ export PKG_CONFIG_PATH=/usr/local/Trolltech/Qt-4.4.0/lib/pkgconfig:$PKG_CONFIG_PATH

/usr/local/Trolltech/Qt-4.4.0/ が Qt のインストール先ディレクトリです。

用意した .mozconfig は以下のとおりです。

mk_add_options MOZ_CO_PROJECT=browser
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-@CONFIG_GUESS@
ac_add_options --enable-application=browser
ac_add_options --disable-debug
ac_add_options --disable-tests
ac_add_options --enable-libxul
ac_add_options --enable-default-toolkit=cairo-qt
ac_add_options --enable-canvas
ac_add_options --enable-svg
ac_add_options --disable-printing
ac_add_options --disable-crashreporter
mk_add_options --with-qtdir=/usr/local/Trolltech/Qt-4.4.0

--enable-default-toolkitcairo-qt を設定するのがミソです。で、あとは普通にビルドするだけです。

$ make -f client.mk build

するとあっさりビルドできました。動かしてみたスクリーンショットが以下。

スクリーンショット

ツールバーの描画がおかしかったり、「View」→「Character Encoding」を開こうとすると固まったりと、まだまだバギーでした。ページの描画は割とまともでしたが、テキストまわりの処理はまだまだのようで、手元の環境では日本語などをうまく表示できない場合もありました。

まだ常用できるような域には達してしませんが、ということは、これからが楽しみということでもあります。

参考

2008-06-16

SVG で波紋

ポスト @ 3:19:04 | opera, svg

SVG のフィルタとアニメーション (と JavaScript) で、波紋っぽい効果を出してみました。クリックした場所から波が伝わるような効果がでます (色々と手抜きですが)。

Opera 位でしか動きません (Opera 9.5 で動作確認)。あと、もの凄く重たいので注意。手元では時おり Opera がクラッシュしました。

2008-06-15

Re: canvas で文字を表示してみる

ポスト @ 11:38:21 | canvas, mozilla

Firefox 3 から canvas 要素で文字を描けるようになりました。で、その例を色々みてみると、描画内容を初期化するために canvas 要素の widthheight プロパティを弄っている例が多いです。しかし ctx.clearRect() で十分です。

ただし ctx.clearRect() ctx.translate() 等の変形の影響を受けるので、 ctx.save() ctx.restore() をお忘れなく (あるいは ctx.setTransform(1, 0, 0, 1, 0, 0))。

ということで、higeorange さんの例を勝手に弄ってみます。higeorange さんのコードを以下に示します。

var canvas = $('cnvs');
    canvas.width = 300;
    canvas.height = 100;
var ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, 300, 100);
    ctx.translate(10, 50);
    ctx.fillStyle = "Red";
    ctx.mozTextStyle = "30pt sans-serf";
    ctx.mozDrawText(txt);

ctx.clearRect() を使っておられるわけですが、たとえば以下のように書けます。

var canvas = $('cnvs');
var ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, 300, 100);
    ctx.save(); // コンテクストの状態を保存
    ctx.translate(10, 50);
    ctx.fillStyle = "Red";
    ctx.mozTextStyle = "30pt sans-serf";
    ctx.mozDrawText(txt);
    ctx.restore(); // コンテクストの状態を save() した時の状態に復帰

あるいは以下のようにも書けます。

var canvas = $('cnvs');
var ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, 300, 100);
    ctx.translate(10, 50);
    ctx.fillStyle = "Red";
    ctx.mozTextStyle = "30pt sans-serf";
    ctx.mozDrawText(txt);
    ctx.setTransform(1, 0, 0, 1, 0, 0); // 変形行列を単位行列に

蛇足 1

Firefox 3 でのテキスト API は独自のものですが、mozilla-central では既に HTML 5 草案の API に対応しています。

蛇足 2

canvas 要素の widthheight を設定すると、Gecko は描画対象 (gfxASurface) と描画コンテクスト (gfxContext) を一度破棄してから再度作成・初期化します。

一方、 ctx.clearRect() は描かれている領域の一部をクリアするだけで、 surface を破棄したり再作成したりということはありません。

2008-04-29

まっすぐなバー

ポスト @ 11:59:53 | mozilla

未だにテーマの変更が Firefox trunk へチェックインされている今日この頃、皆様はいかがお過ごしでしょうか。Piro さんは 大変な目にあっているようですが。

さてそんな中、Windows のデフォルトテーマ以外ではロケーションバーの左端がカーブせず、真っ直ぐになるよう変更されました (Linux/GTK2 では以前から真っ直ぐ)。

スクリーンショット

CSS でどうやって判断しているのか見たところ、:-moz-system-metric(windows-default-theme) 疑似クラスを使っていました。

:-moz-system-metric(windows-default-theme) を使うと、Windows でデフォルトテーマ (Luna, Royale, Zune, Aero) を使っているか否かに基づいてスタイルを制御できます。例えば、Windows のテーマによって文字の色を変更するには以下のように書くことができます。

*:-moz-system-metric(windows-default-theme) {
  /* Windows のデフォルトテーマなら */
  color: red;
}
*:not(:-moz-system-metric(windows-default-theme)) {
  /* Windows のデフォルトテーマ以外、
     あるいは Windows 以外なら */
  color: blue;
}

既に Firefox 3 のテーマ (Windows 版) は Vista 向けとそれ以前向けに別れています。その上にさらにその中で OS のデフォルトテーマ云々というのは やり過ぎじゃないのかな、という気がします。

2008-03-27

「Acid3 は基本的に価値なし」

ポスト @ 11:51:03 , 修正 @ 2008-03-27 18:13:20 | mozilla

MoCo の Rob Sayre さんが Acid3 is basically worthless という記事を書いています。Acid3 テスト対応の一連の動きを受けての事だと思いますが、ちょっと穏やかではないですね。Firefox 3 は Acid3 をパスしないという事ですから他所の動きに気を取られ過ぎる事もないのではないかと思うのですが。

一応、以下に訳してみました (かなり意訳していますので悪しからず) 。追記: 原文が追記されていたので、訳文も更新。

Acid3 は基本的に価値なし

私は Mozilla の Acid3 で落っこちた箇所を対象としたスプレッドシートに目を通してみて、その修正の内ほんの一握りしか Web あるいはブラウザを実質的に改善しないだろうという印象を受けました。そいつらはバグで、修正されるでしょう (たぶん SMIL 以外は…一体なんで?) が、Web 製作者ないしユーザに少しの影響もないものです。ほとんど「標準への関与」 ("commitment to standards") に対してスタンドプレーする機会のようなものにしか見えません。テキストノードが相互運用性をもたないのに createNodeIterator をテストするのは心得違いでしかも偽善的だと私は思います。

加えて、標準への関与は Mozilla において強い力をもっており、そしてそこに我々は自分達の実装に機械的に合格印を押す人を絶えず探したりはしません。

追記 — 私は Opera が最初に 100/100 を叩き出したというのを知りませんでした。おめでとう、貧相な発想の標準とすべてに。 (Wink)

再追記 — 恥を知れ!

SUMO

ポスト @ 10:31:45 | mozilla

Firefox trunk ではヘルプが SUMO (support.mozilla.com) になったとのことなので、さっそく F1 を押してみたら www.mozilla.org/support/ につながってしまい、以下のようなメッセージが。

NOTE: Firefox Support Official Online Documentation and Frequently Asked Questions are currently down, due to server issues. For Firefox Help, try the other support resources linked on this page.

さっそく落ちてしまったようです。Firefox 3 がリリースした後は大丈夫でしょうか。

2008-03-17

文字化けしたバックアップをリストアする

ポスト @ 12:16:10 | mozilla

Firefox の trunk ではブックマークのバックアップに JSON を使うようになりました。が、バックアップ時に日本語が文字化けしてしまい、そのままリストアすると文字化けしたままリストアされてしまいます。以下に私の対応策を晒してみます。

文字化けしたバックアップをリストアする

Firefox ディレクトリ/modules/utils.jsimportJSONNode 関数 (1104 行辺りから) の先頭付近に以下のコードを追加します。

try {
  aData.title = decodeURIComponent(escape(aData.title));
} catch (ex) {}

バックアップ時の文字化けを防ぐ

Firefox ディレクトリ/modules/utils.jsaddGenericProperties 関数 (1180 行辺りから) の先頭付近を以下のように変更します。

変更前
aJSNode.title = unescape(encodeURIComponent(aPlacesNode.title));
変更後
aJSNode.title = aPlacesNode.title;

2008-03-15

背景と前景

ポスト @ 2:34:23 | firefox, internet explorer

Firefox 3 ではロケーションバーの Favicon 部分をクリックするとポップアップが表示されて、サイトの身元や接続の暗号化されているかを確認できます。

ポップアップに表示される警官の名前は Larry というらしいです。

で、このポップアップは背景色は白に決め打ちなんですが、前景色は一部だけ黒に決め打ちになっているため、システムの前景色が白に近いと一部の文字が読みにくくなってしまいます (Frown)。以下は Windows のハイコントラスト (黒) でのスクリーンショットです。

スクリーンショット

さて、このポップアップは IE7 の「セキュリティ報告」のポップアップを基にしていると思うのですが、こちらは大部分の背景を画像にしていますが、前景色はシステムの前景色を使っています。なのでシステムの前景色が白に近いと、ほとんどの文字が読めなくなってしまいます (Frown)。以下は Windows のハイコントラスト (黒) でのスクリーンショットです。

スクリーンショット

背景を決め打ちするときは前景色も決め打ちしましょう、という話。

2008-02-23

Acid3 対策バグ

ポスト @ 18:10:01 | khtml, mozilla, webkit

話題になっているらしいので、各レンダリングエンジンの Acid 3 対策用のバグをまとめてみました。

Gecko

依存しているバグが果たして本当にこれが全てなのかどうかは確認していません。

WebKit

依存しているバグが果たして本当にこれが全てなのかどうかは確認していません。

KHTML

Konqueror 3.5.8 までは Acid3 テストでクラッシュするので注意 (Bug 155451 - konqueror segfault in the Acid 3 test)