Frequently used words (click to add to your profile)

javaandroidc++linuxc#objective-ccocoa誰得qtrubypythonbathyscaphephpgamewindowsguic翻訳omegattwitterframeworktestbtronarduinovb.net計画中(planning stage)directxpreviewerゲームエンジンdom

最近の作業部屋活動履歴

2020-04-05

最近のWikiの更新 (Recent Changes)

2020-04-05
2020-04-04
2020-02-10
2019-12-30
2019-04-30

Wikiガイド(Guide)

サイドバー (Side Bar)

Tkhtml と Visual C++ 2008 用ビルドバッチ

はじめに

Tkhtmlは、tcltk で html を表示するための拡張です。 他のライブラリ同様、Visual Studio 2008でビルドしたかったので、 ビルド用のバッチファイルを作成してみました。

Tkhtml のライセンス

BSDライセンスです。詳しくは配布物のソースをご参照下さい。

配布物

  • Tkhtmlソース - 2014/6/15 に配布元から取得したソースと同一のものです。(バーション 3-alpha-16)
  • ビルド用バッチファイル - Tkhtmlソースと同じ階層になるように(Tkhtmlのsrcディレクトリと同じ位置にwinディレクトリが来るように)展開し、コマンドライン引数に 「Release x86」 と追記して Visual Studio 2008 コマンドプロンプトから実行することでビルドとインストールを実施します。「Release x64」 とすることで64bitモードでもビルドできます。

image コマンドについて

下記のように書くことで、表示しているhtmlを画像ファイルとして保存できるようになっているようです。

 html .h
 ...
 set img [.h image];
 $img write hoge.gif -format gif;
ただし、何故かWindowsでは使えないようにしてあります(Windowsで実施すると、TclTkがフリーズしてしまいます)。 ソースを確認すると、htmlimage.c の1044行目以降にあるWindowsとそれ以外での場合わけが該当する箇所のようです。 1044行目の #ifndef WIN32 を #if 1 と書き換えて再ビルドしてみたところ、Windows でも画像の保存ができましたが この状態だと、ディスプレイに表示できるウィンドウサイズよりも内容の方が大きい場合、画像が欠けてしまうようです。 さらに htmldraw.c の3320~3321行をコメントアウトすることで、欠ける現象も回避できました。

htmlimage.c の一部

...
1039: * Side effects:
1040: *     None.
1041: *
1042: *---------------------------------------------------------------------------
1043: */
1044:#if 1 /* この行には #ifndef Win32 と書いてあったが、これを #if 1 に書き換える */
1045:#include <X11/Xutil.h>
1046:Tcl_Obj *HtmlXImageToImage(pTree, pXImage, w, h)
1047:    HtmlTree *pTree;
1048:    XImage *pXImage;
1049:    int w;
1050:    int h;
1051:{
...

htmldraw.c の一部

...
3317:    w = pTree->canvas.right;
3318:    h = pTree->canvas.bottom;
3319:    Tk_MakeWindowExist(pTree->tkwin);
3320:    /* w = Tk_Width(pTree->tkwin); // この行と
3321:       h = Tk_Height(pTree->tkwin);// この行をコメントアウト        */
3322:    assert(w >= 0 && h >= 0);
3323:    if (w>0 && h>0) {
...

これでうまく動くように見えますが、わざわざ w や h を書き換えたり、 Windowsのときだけ場合分けしているのは何か理由があるかもしれません。この修正を適用する場合はその点をご留意下さい。

参考サイト