Midget 0.0.9

4年ぶりの更新でございます.XULRunner 6.0だといろいろ面倒なので7.0以降対応です.Windows 7で動作を確認しています.

wxWidgets2.9.3 からwxWebViewCtrlが使えるようになるらしいんですけど,こいつはWindowsではIE,Gtk環境とMacではWebKitを使うようになってます.GeckoめんどいしwxWebViewCtrlかwxWebKitにごっそり移行したいですね.

CIDから作成したHTMLDocumentでもCanvasが問題なく扱える

CIDからHTMLDocumentが作成できるのはnanto_viさんが書いているとおり.DonutGにサムネイル機能を搭載するにあたって,nsICanvasRenderingContextInternalのインスタンスを作って,そこからコンテキストを作るのがいいらしいとなったのだけれど,風博士のソースを見る限り,MOZILLA_INTERNAL_APIというマクロをオンにしないとたぶん使えない.んで,それを回避するために,CIDから空のHTMLDocumentを作ってCanvas要素を作ればいいんじゃね?と考えた.試したところ問題なく動いた.以下はExtension Developer上で試したコード.Shell.enumWinsという変数で,今開いているウィンドウの配列が取得できる.

const NS_HTMLDOCUMENT_CID =  '{5d0fcdd0-4daa-11d2-b328-00805f8a3859}';
var doc = Components.classesByID[NS_HTMLDOCUMENT_CID].createInstance();
var canvas = doc.createElement("canvas");
var ctx =  canvas.getContext('2d');
ctx.drawWindow(Shell.enumWins[1].content, 0,0,300,300,  "rgb(255,255,255)");
var str = canvas.toDataURL();

これがstrの内容の画像:

IHTMLDocument2も順調に減っている

IWebBrowser2に続きIHTMLDocument2も4箇所に減った.

今困っているのは,Windowのサムネイルを取得する方法と,nsIWebBrowserFocus::Activateしているのに実際にはActivateされないという怪現象.

サムネイルのほうは,MOZILLA_INTERNAL_APIをオンにしないでやる方法を探している.なので,本当に困ったらそれを使えばよく,クリティカルではない.

フォーカスは…どうしたものか.前WTLでGecko組み込んだときはこんなこと起こらなかったぞ?

粛々と実装を進める

いつの間にかv0.1.8になっていた.残りの

  • nsIPromptService
  • 名前をつけて保存・印刷関連
  • ページ内検索・ハイライト

をどうにかすれば,一通り使えるようになる.しかしすごいな,ソースコード中で「IWebBrowser2」が登場する箇所が4箇所にまで減ったwww 次はIHTMLDocument2を撲滅していこう.

目下のところ困っているのは,nsIWebBrowserFocus::activateを呼んでいるのに,実際にはactivateされないこと.いったんタブを切り替えたり,リンクをクリックしたり,テキストボックスをクリックしたりすると,やっとactivateされる.ウィンドウズプログラミングムズカシイネー

unDonut+modをGeckoエンジンベースにすることは可能か

いつのまにかVS9でコンパイルが通るソースが出ていたのね。

Donutの肝はDonutView, IWebBrowserEvents2Impl, CWebBrowser2, ChildFrameあたり.で,CWebBrowser2はIWebBrowser2の単なるラッパ.IWebBrowserEvents2Implがイベントリスナ.IWebBrowserEvents2Implを継承したクラス(ChildFrame)からWebBrowserEvents2Adviseを呼び出すと,IWebBrowser2と接続されるというわけか.

骨は折れるけれども,Geckoを使うようにすることはそんなに難しくないんじゃないかって気がしてきた.

Qt版Geckoの組み込み

一時期、新しい組み込み用APIをつくろう!と言っていた人がいたのだけれど、とんと進捗を聞かないので見てみたら案の定放置状態。

でも、よくよく見てみるとWindows上のQtでも使えるように作ってあって(WindowsのときのみネイティブなGeckoを呼び出す)、こりゃあいいということで試してみた。

LinuxではQt版Geckoを呼び出すようになっていたのだけれど、hg.mozilla.orgにあるソースではSIGSEGVを吐いて落ちる。Qt版Geckoの場合、mozView.CreateBrowserに渡すnativeWindowはどうやらQGraphicsWidgetでないといけないようだったので(WindowsのときはQWidget::winId()がHWNDと同じなので、こいつを渡せばOK)、多少改造を加えて動くようにした(もとのはQWidgetを渡していた)。現在のはウィンドウのリサイズに追随しないんでそこんとこよろしく。

ああ、はやく日本語入力が通るようにならないかしら。ちょっくら調査してみるかなあ。

Qt版Geckoを用いてtnose.netが正常に表示できている

ところで、QtアプリケーションでGtkのウィジェットをホストする方法ってないですかね…。これができれば不具合の多いQt版Gecko使わなくて済むんですが。

Qt版Firefoxをビルドしてみた

UIが悲惨。ページのレンダリングは一見まともだが、日本語のレンダリングは壊滅。IMEも使えない。

IPA モナーフォントが入っている環境では、

failde to find a font. sadface
Failed to find font entry for IPAMonaPGothic
failde to find a font. sadface
Failed to find font entry for IPAMonaPGothic

と言われて起動しない。なんとなくLANG=Cしたら行けた。あと、qcms.hが足りないといわれてビルドできなかったので、gfx/thebes/public/gfxPlatform.hを書き換える必要があった。

Qtは4.5.0、OSはUbuntu9.04(AMD64)。