2016年12月25日日曜日

PictureFan ver.0.34.0 を公開

PictureFan の ver.0.34.0 を公開しました。
ダウンロードはいつもの場所からどうぞ。

今回はサムネイルを中心に多くの機能強化を行いました。
詳しい更新内容は更新履歴をご覧ください。

2016年6月5日日曜日

PictureFan ver.0.33.1 を公開

PictureFan の ver.0.33.1 を公開しました。
ダウンロードはこちらから。

更新内容は以下の通りです。

  • 画像の最大表示倍率を1000%から10000%に上げた
  • WIC で追加のコーデックがインストールされている時、サムネイルで表示できるようにした
  • Users.ini で変数として %SettingsDir% と %LocalSettingsDir% を利用できるようにした
  • 各種のパスの設定で環境変数を利用できるようにした
  • サムネイルキャッシュのフォルダ指定に相対パスや環境変数を利用できるようにした
  • TIFF などの Deflate 圧縮/伸長が行えなくなっていた不具合を修正
  • 以前のバージョンのサムネイルキャッシュの読み込みが行えなくなっていた不具合を修正
  • 画像の幅及び高さが数億画素以上ある場合、画像の周囲の影が正常に描画されない不具合を修正

いつのバージョンからかは分かりませんが(0.32.0?)、TIFF などの Deflate 圧縮が扱えなくなっていました。
原因は zlib のビルドに libpng に付属しているプロジェクトを使ったら、そちらで Z_SOLO というオプションが指定されていて、zlib の一部機能が省かれていたことです。
これでビルドされる zlib は、他でも使うというのは考慮されていなかったようです。

2016年5月4日水曜日

C99 で realloc の仕様が変わっていた

realloc は動的に割り当てたメモリ領域のサイズを変更したい時に使いますが、地味に C99 で仕様が変わっていたことを今更知りました。
C89 では、realloc に関して以下の規定がありました。

ISO/IEC 9899:1990 7.10.3.4
If size is zero and ptr is not a null pointer, the object it points to is freed.

つまり、realloc(ptr, 0) のようにサイズに0を指定すると free(ptr) と同じになるということですが、C99 ではこの一文が削除されていました。
C99 以降では、realloc(ptr, 0) の呼び出しで、メモリが開放されて NULL が返るのか、NULL 以外のポインタが返されるのか、処理系定義となりました。

C89 でも malloc(0) で NULL が返るか、NULL 以外のポインタが返るかは処理系定義だったので、それに準じる仕様にされたということでしょうか。
実際のところ、realloc を free の代わりに使うようなコードはそう無いとは思いますが、メモリ領域を徐々に小さくしていって最後は開放するというような実装をすることはありえなくは無いかな。

追記:
C++11 でも C99 と同様の仕様に改められています。

2016年4月30日土曜日

マウスホイールの操作がアクティブなウィンドウに働く仕様だった理由

先日、なぜマウスホイールの操作はアクティブなウィンドウに送られる仕様だったんだろうということを書きましたが、ちょうど The Old New Thing にその理由が書かれていました。

Why are mouse wheel messages delivered to the focus window instead of the window under the mouse?

一言で言えば、「ホイールは Ctrl キーなどと一緒に使われることがあるから」だそうです。

ホイール操作は当初ズーム機能を想定して開発されていたものが、スクロールに使った方が便利だろ、ということで通常はスクロール、Ctrl キーを押しながらだとズームという感じで使われるようになりました。
そのようにキーと一緒に使う場合、ホイール操作をフォーカスのあるウィンドウに送らないと不都合があったようです。

キーボードの入力は、キューイングされてフォーカスのあるウィンドウに送られます。
元々ホイールが開発された時、その機能は OS ではなくヘルパープログラムによって実現されていました。
このヘルパープログラムからキー入力のキューにアクセスする方法がなかったために、キー入力との整合性が取れるようにフォーカスのあるウィンドウにホイール操作が送られる仕様になったようです。

後にホイールを扱う機能が OS に取り込まれこの問題は解決できるようになりましたが、今までの挙動を変えないようにということで、そのままになっていました。
それが Windows 10 になってようやく変更されたというわけですね。

2016年4月16日土曜日

WheelMagic を GitHub で公開

以前から公開しているソフトですが、マウスホイールの操作をカーソルの下のウィンドウに適用するプログラム WheelMagic のリポジトリを GitHub に作成しました。
リポジトリのアドレスは https://github.com/iooiau/WheelMagic です。

Windows 10 からはデフォルトでその動作になったため不要になっていますが、なぜ最初からそうしなかったのか…。
しかし Windows 10 ユーザーが前の挙動に戻す方法を聞いているのを見掛けるので、そちらの方がいいという人もいるんですよね。
使いづらい仕様だと思うのですが。

他にも昔書いたプログラムを GitHub で公開したいなと思いつつ、改めてソースを見てみると「こんなんじゃ公開できない…(してるけど)」という部分が多いですね。
しかし今更書き直すモチベもなかなか湧きません。最早使ってないソフトばかりですし。

WheelMagic のソースも今回 GitHub で公開するにあたって整えましたが、Visual Studio 2005 の入っている環境を起動するのが面倒だったので、ビルドできるか確認していません。
多分大丈夫のはず…。

2016年4月3日日曜日

Connection Viewer ver.0.1.1 を公開

2年前にリポジトリを1つ作っただけで放置していた GitHub ですが、Connection Viewer のリポジトリを追加しました。

ついでに多少の修正を行って ver.0.1.1 として公開しました。

ダウンロードは Connection Viewer のリポジトリリリースページからできます。