実質的にdpi設定が2つで決め打ちされていた
XPタイプのdpiスケーリング
XPでは、前述のように2つの固定したdpi設定とカスタムdpi設定の3種類が選択できた。固定したdpi設定は、96dpiまたは120dpiを想定しており、それぞれ100%、120%との表記がされていた。
Windows XPのdpiスケーリング。96dpi、120dpiのどちらかが選択可能なほか、任意のdpi値を指定できるカスタム設定がある
96dpiと120dpiは、当時のディスプレイ能力と、文字フォントのドット構成が整数値になるような組み合わせを想定して決められたという。96dpiの場合、1ポイント=1/72インチとすると、12ポイントは16ドットに、120dpiでは20ドットとなる。アウトラインフォントでは、任意のサイズ文字を表示できるが、画面のドット構成を考えると、縦横のドットは整数値になっていたほうが処理も速くなるし、計算誤差によるズレも解消できる。
ドット構成が非整数値(浮動小数点)になると計算が面倒になる。文字の表示位置は画面のドットに合わせなければならず整数値となるのに対して、計算上の位置は浮動小数点となるため、計算のやり方によっては誤差が生じたり、均等に並ばないことがある。
しかし行の高さを整数値にできれば、1行の高さを加算して複数行の高さを求めることができ、誤差が生じないことと、あまり性能が高くないコンピュータでは、描画処理の負荷を軽減できる。多用されるシステムフォントによる描画を整数で計算できるからだ。
もう1つ、Windows XPでは最低解像度を800×600ドットとして、どのような場合でも、この解像度の表示が可能であるとした。このため、ダイアログボックスなど、他の操作を止めてしまうようなダイアログボックスを表示させる場合でも、この解像度以下に納めることでOKボタンなどの重要なオブジェクトがマウスで操作できないことを回避している(しかし現実には、ネットブックなどで縦方向の解像度が600ドットといった製品が登場し、ボタンが押せないといった問題は発生した)。
逆に、dpi値の設定によっては、システムフォントのサイズが変更になり、96または120dpiを前提に計算したウィンドウのサイズやボタンの位置などが800×600ドットの範囲を超えてしまう可能性があった。
XPのディスプレイ設定では、普通(96dpi)、大きなサイズ(120dpi)、カスタム設定の3つの選択肢があった。120dpiに「大きなサイズ」という表記があるのは、同じディスプレイであれば、高いdpi値を設定することで、12ポイントのシステムフォントを構成するドット数が増えるため、結果的に文字が大きくなって見えるからだ。
XPタイプのdpiスケーリングは、高いdpi値を持つディスプレイを有効に活用できないという点で問題があった。高いdpi値に対応することで、たとえば、システムフォントを構成するドット数が増え、より高品位な文字を表示可能となる。日本語など、欧文に比べると複雑な文字を使う場合、高いdpi値を設定することで高品位な文字の表示が可能になるが、アプリケーションによっては、これが原因で、利用が困難になるものがあった。
これは、96dpiまたは120dpiであることを前提に、システムフォントの高さが16または20ドットであると仮定してボタンなどのオブジェクトのサイズを決めたり、これにふさわしいサイズのビットマップデータなどを使っていたからだ。このため、アプリケーションの運用性を保つためには、高いDPI値を持つディスプレイでも、96または120dpiを使わねばならなかった。しかし、高解像度のディスプレイでは、非常に高いDPI値を持つものがあり、低いdpi値を前提に大きさが計算されたウィンドウが小さすぎるという問題などが発生した。
古いアプリは従来のdpiで仮想化して描写する
VistaのDPIスケーリング機能
Vistaでは、こうした問題に対処するため「dpi仮想化」という技術が導入された。Vista登場以後に作られたアプリケーションは、High dpi値に対応できるかどうかをシステムに伝達することができる(開発時にマニフェストと呼ばれる情報に対応を記述する)。これを行わないアプリケーションは、High dpi値に対応しないとシステムから見なされる。
また、Vista以前に開発されたアプリケーションもこの仕組みに対応していないために、やはりHigh dpiには対応しないと判断される。こうしたアプリケーションは、仮想的にディスプレイが96dpiと設定された環境の中で実行させられる。Vistaは、アプリケーションがウィンドウ内で描画する2DグラフィックスをGPUのサーフェースとして処理し、これを合成してデスクトップを作り上げる「Desktop Window Manager」が導入された。古いアプリケーションは、この仕組みを使い、96dpi相当の環境で描画したあと、実際のdpi値に合わせて描画領域を拡大して表示が行なわれた。
この機能により、古いアプリケーションを高いdpi値のディスプレイ上で動作させても、ウィンドウが小さくなってしまうことも、オブジェクト内にテキストが入らなくなるといった問題も発生しなくなる。ただし、設定したdpi値によっては、前述のように文字がぼけた感じになってしまう。これは、ClearTypeやアンチエイリアスを併用した描画が行われ、これを拡大して表示するからだ。
ただし、VistaやWindows 7では、従来のXPタイプのdpi設定も残っており、ユーザーが設定することで、これらを利用することが可能だった。しかし、問題はまだあった。そもそもXPやVistaでは、画面のdpi値の設定を1つしか持つことができず、マルチディスプレイ環境でディスプレイごとにdpi値を設定することができなかったのである。このため、dpi値が大きく離れたディスプレイを組み合わせたときに、どちらかに合わせてdpiスケーリングを行なうしかなく、組み合わせによっては、マルチディスプレイのメリットが損なわれる場合もあった。
また、dpi値が切り替わったことをアプリケーションに伝達する仕組みがそもそも用意されていなかった。このため、システムが起動している間は、これを切り替えることができず、設定値を切り替えたら、ユーザーはログアウトやシステムの再起動を行ない、dpi値を反映させる必要があった。dpi値の設定は、システムが行うすべての描画の基準となる数値であり、アプリケーションなども、起動時にこの数値を取得して動作する。このために、すべてのアプリケーションやシステムなどを一回終了させ、dpi値を変えた後、再起動してこれを読み込ませる必要があったからだ。
次回は、こうした状況を前提に改良されたWindows 8のdpiスケーリング機能について解説する。
この連載の記事
-
第473回
PC
Windowsは内部的にどうやってインターネットへの接続状態を確認している? -
第472回
PC
WindowsのエラーをMicrosoftに送信するテレメトリ機能を理解する -
第471回
PC
Windowsのコマンドラインでエイリアスを使う -
第470回
PC
Windows用のパッケージマネージャー「Winget」 プレビュー版で機能が充実してきた -
第469回
PC
Windows Updateの27年 悪役だった頃から改良が進んで、徐々に目立たない存在に -
第468回
PC
2025年のWindowsどうなる!? Windows Insider Programの状況をあらためて見る -
第467回
PC
Copilot+ PCのNPUでカメラを処理する「Windows Studio Effects」 その内容や効果は? -
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる - この連載の一覧へ