コンポジット型ウィンドウマネージャ

**コンポジット型ウィンドウマネージャ**（英: **compositing window manager**）は、ウィンドウマネージャの一種である。ウィンドウマネージャはコンピュータディスプレイ上のグラフィカルユーザインタフェース (GUI) を描画・管理するソフトウェアであり、ウィンドウの配置を行い、ボーダーやタイトルバーなどのウィンドウの追加的部品を描画し、ウィンドウ間の相互作用や他のデスクトップ環境要素との相互作用を制御する。初期のウィンドウマネージャでは、個々のプログラムのウィンドウを表示用メモリにレンダリングすることをそのプログラム自身に任せていた。コンポジット型ウィンドウマネージャは、アプリケーションにスクリーンとは対応しないバッファをウィンドウメモリとして用意し、個々のウィンドウのイメージを合成 (compositing) することでスクリーンのイメージを生成して表示用メモリにその結果を書き込む。

コンポジット型ウィンドウマネージャはバッファ化されたウィンドウ群にさらなる処理を施すこともあり、2Dおよび3Dのアニメーション化したエフェクトとして、ブレンディング、フェーディング、拡大縮小、回転、複製、折り曲げとねじ曲げ、混ぜ合わせ、ぼやけ、アプリケーションのリダイレクト、複数のディスプレイおよび仮想デスクトップ間でのウィンドウの移動などがある。コンピュータグラフィックス技術により、陰影をつける、ライブ・プレビュー、複雑なアニメーションなどの視覚効果がリアルタイムで描画可能となった。技術的にはダブルバッファリングが行われているため、更新の際にフリッカー（ちらつき）が発生することはない。

主なコンポジット型ウィンドウマネージャとしては、以下のものがある。
* Microsoft Windows - Desktop Window Manager
* macOS - Quartz Compositor
* Unix系（X Window System（の、各種デスクトップ環境）） - Compiz、KWin、Xfwm、Mutter

## スタック型ウィンドウマネージャとの比較
ウィンドウマネージャは、サイズを変更したときや他のウィンドウに隠されていたものを前に出したときなど、必要に応じて再描画させるためウィンドウにメッセージを送る。スタック型ウィンドウマネージャでは、プログラムが遅いとか、応答しないとか、バグだらけといった場合に適当な時間内にそのメッセージに応答できず、再描画処理が失敗することがある。悪意あるプログラムで意図的にウィンドウの再描画をさぼると、（そのシステムが、善意を前提としたシステムの場合には）システムを不安定にすることも可能である。システムを不安定にするまででなくとも、たとえば、以下のような状態が生じることがある。

* クリッピングされたウィンドウの隠されていた領域を再描画せず、結果としてその部分は空白のままか、他のウィンドウのイメージをそのまま表示させておく。
* ウィンドウの一部（装飾的な影など）が何かの後ろに隠され、再び上に出てきたときに正しく再描画されない。
* 画面の更新が我慢できないほど遅くなる。
* 画面全体が問題のプログラムが応答するか終了するまでフリーズする。

コンポジット型ウィンドウマネージャでは、ウィンドウマネージャが再描画を要求してもウィンドウが再描画しない場合、最後の再描画結果が表示され続け、場合によってはそのウィンドウを減光して表示する。そのとき、そのウィンドウが応答しないという状態を反映してタイトルを変更することが多い。プログラムによってはそのウィンドウを動かしたりアンマップしたりできないこともあるが、一般に再描画問題は生じない。

## 歴史
コンポジット型ウィンドウシステムの初期の例としてコモドールのAmigaがある。アプリケーションは、まずその時点の表示領域以外のメモリ領域を要求し、それをビットマップとして使用する。するとAmigaのウィンドウシステムはハードウェアに備わっているblitterを使って一連のbit blitを行い、表示用メモリ内でアプリケーション群のビットマップを合成し、ボタンやスライダーなどを付与する。その間、アプリケーションは自身のビットマップを再描画する必要はない。

2001年3月24日、Mac OS X v10.0 は主要なOSで初めてソフトウェアベースの3D合成・視覚効果を実現した Quartz を搭載した。Mac OS X v10.2 と Quartz Extreme では、合成処理を専用のグラフィックス・ハードウェアに任せられるようになった。

サン・マイクロシステムズはSwingツールキット上のレイヤーとして野心的な3Dグラフィックスシステムを開発した。それが Project Looking Glass であり、2003年の LinuxWorld Expo で一般に公開された。アップルはサンを知的財産権の侵害で訴えると脅したが、Looking Glass の機能の一部は他のウィンドウマネージャに実装されている。その開発開始から数年後、企業向けのシステムが事業の主力だったサンは Project Looking Glass の開発をやめた。

マイクロソフトは2003年の Windows Hardware Engineering Conference で Project Longhorn の Desktop Window Manager を公開した。Longhorn の開発が遅延したため、マイクロソフトが3Dコンポジット型ウィンドウマネージャを実際にリリースしたのは、2007年1月の Windows Vista リリースのときだった。

X Window System では、コンポジット型ウィンドウマネージャを実現するにはいくつか再設計が必要で、徐々に対応していった。2004年8月、Metacity 2.8.4 がリリースされた。しかし、X向けのコンポジット型ウィンドウマネージャとして最初に注目されたのはXfwmで、2005年1月にリリースされた。2005年1月26日にはCompizがリリースされ、Linux上の初の完全アクセラレーションの3Dコンポジット型ウィンドウマネージャとなった。KDEのKwinもコンポジット型である。

## 各OSにおける合成（コンポジット）・3Dエフェクト
合成3Dエフェクトにより、ウィンドウには3次元デスクトップの視覚効果が与えられる。最近のコンポジット型ウィンドウマネージャは3Dハードウェア・アクセラレーションを利用している。コンポジット型ウィンドウマネージャは、OpenGLやDirect3Dのようなプログラミングインタフェースを通してグラフィックス・ハードウェアとやりとりする。

そのような技法を最初に採用したのは Mac OS X v10.2 で、Linux ではLuminocityのプロトタイプが最初だった。OpenGLを使っているウィンドウマネージャとしては Compiz、KWin、Quartz Compositor があり、Desktop Window Manager は DirectX 9 を使っている。OpenGLは完全にハードウェアでサポートされているわけではなく、OpenGLベースの合成の性能は今後もハードウェアの進化と共に向上することが見込まれる。

### Microsoft Windows
Windows 2000 のウィンドウマネージャは合成を行っていたが、ピクセル単位のアルファブレンディングなどの変換は行っていなかった。アルファブレンディングを利用した商用アプリケーションは少なかった。オプション設定を通してだが、いくつかのフリーウェアがいち早くアルファブレンディングの実験を行った。コンポジット型となったのは Windows Vista の Desktop Window Manager からである。

Windows Vista と Windows 7 ではテーマを「Windows クラシック」にすることで Desktop Window Manager を使用停止できる。さらにオーバーレイミキサフィルタによるハードウェア・オーバーレイを行うときは Windows 自身が自動的にDWMを使用停止する。

### Unix系
Unix系のシステムで広く使われている X Window System（のXサーバ）において、スタック型ウィンドウマネージャは X video extension のブルーバック機能を必要とした。合成は "Composite" extension として導入された。コンポジット型ウィンドウマネージャは、可能ならばこの拡張を通してハードウェア・アクセラレーションを利用する。

LinuxおよびUNIXで完全3Dアクセラレーションの合成を行うには、X11自体がハードウェア・アクセラレーションに対応するよう根本的な変更を行う必要があった。まず、XglなどのOpenGLを利用してX11を一部修正した実装が登場。AIGLXの登場によってXglなどを使わなくて済むようになり、標準のXサーバ上で3Dアクセラレーションの合成を行うウィンドウマネージャが可能となったが、ダイレクト・レンダリングも可能である。NVIDIA、インテル、ATIなどがAIGLXをサポートしたグラフィックス・カードを発売している。

Compiz では cube というエフェクトが導入されており、ユーザーは6つの仮想デスクトップを一度に見ることができる。各デスクトップは立方体の1つの面のテクスチャに変換され、立方体を自由に回転させることができる。Compizは様々な2Dと3Dの視覚効果を表示でき、ハードウェアに要求される性能は比較的低くてすむ。CompizはUbuntuに含まれており、サポートされているハードウェアやドライバが利用可能ならば自動的に使用できる。

Mutter (Metacity + Clutter) はMetacityの後継として、GNOMEのデフォルトのウィンドウマネージャとなった。GNOME 3.0 の GNOME Shell のコンポーネントとなっている。Mutter が使っているディスプレイ・エンジン Clutter は主なOSに移植されており、ネットブックやスマートフォンでも動作する。

KDEのウィンドウマネージャはバージョン4以降 KWin となっており、コンポジット型である。KWinはCompizと同等の機能を有している。

### Java
Project Looking Glass は3Dレンダリングが可能なウィンドウマネージャで、クロスプラットフォームのJava言語をベースとしている。開発は停止しているが、GNU General Public License でリリースされた。Granular Linux の live CD ディストリビューションにはオプションのウィンドウマネージャとして Looking Glass が含まれている。

開発中止の後、その機能の一部（カバー式切換え、サムネイルによるライブ・プレビュー）は他のウィンドウマネージャで採用された。他にもウィンドウのタイリング、両面型のウィンドウフレーム、背景のパララックス（視差）スクロールなどのユニークな機能がある。

### AmigaOS 4 と MorphOS
AmigaOSとMorphOSは3D対応ハードウェアでも動作可能だが、Amiga 1200 以降の古いAmigaコンピュータでも動作するよう設計されている。そのため、ウィンドウマネージャはほとんど平面的なレンダリングを行うが、レイヤーの合成、アルファブレンディング、マルチデスクトップ（スクリーン）などの機能がある。

## ユーザビリティと視覚効果
コンポジット型の手法では、使いやすさと視覚効果を高めたユーザインタフェースのための様々な機能を容易に実装できる。

### 拡大表示
TrueTypeフォントや3Dアクセラレーション要素などのベクターイメージは、（通常エイリアシングによる）画質低下なしに拡大可能である。スクリーン・マグニファイヤーは画面の一部領域を拡大し、その部分のテキストを読みやすくするもので、眼精疲労を防ぎ、視力の悪い人のためであったり、単に画面が離れて多人数で見るときなどに役立つ。ズームエフェクトなども同様の機能を提供する。

### ライブ・プレビュー
タスクバー上でマウスポインタを操作することでサムネイルをポップアップさせてウィンドウのプレビューを表示する。これによって、その時点で動作中のプログラム群を識別して管理できる。

### ウィンドウ切換え

似たような名前やアイコンのウィンドウが複数あると混乱が生じやすく、特にそれらのタイトルバーが重なっていると混乱しやすい。そのため、タスクバー上のそのようなウィンドウの位置を覚えておく必要がある。そのようなウィンドウが多数存在するとき、ユーザーはタスクバーのボタンを次々に押下して目的のウィンドウを捜すことになる。ウィンドウ切換え機能は、複数のウィンドウが装飾的な背景に対して目立つように一時的に配置変えし、素早くプレビューできるようにする。選択後はウィンドウ群の配置が元通りになる。

選択は、ユーザーがホットキーを入力するか、マウスポインタを画面上の所定のホットスポットに置くか、場合によってはマウスのホイールを回すことで起動する。アイテムのナビゲートはキーボードかマウスで行う。アイテムの選択は、ホットキーのリリース、エンターキー押下、マウスクリックなどでなされる。

; フリップ式切換え
: フリップ式は、Alt-Tab による切換え機能を拡張したものである。動作中のウィンドウ群が重なった形に再配置される。これが1950年代のジュークボックスのフリップ式の選曲装置やローロデックス（回転式名刺整理器）に似ていることからフリップ式と呼ぶ。システムによっては、Alt-Shift-Tab の押下で逆順でナビゲートできる。ナビゲート中は各アイテムの移動中も視覚効果が適用される。
: フリップ式の主な実装としては、Windows の Flip 3D と Compiz の Shift Switcher がある。
; カバー式切換え
: カバー式切換えはフリップ式とほとんど同じだが、見た目だけがやや異なる。選択すべきアイテムを1つに重ねるように配置するのではなく、現在選択されているアイテムを中央に置き、左右対称に2つのアイテムのスタックが表示される。これは Looking Glass における window tilting 機能に似ている。
: macOS にはカバーフローというカバー式切換えが実装されている。最近のバージョンでは選択されていないアイテムをぼやけさせて、選択されているものを目立たせるようになっている。カバーフローはアップルの他のソフトウェア、例えば iTunes にも採用されている。
: これを「フリックブック・ビュー」(flick-book view) と呼ぶこともある。
; リング式切換え
: リング式はフリップ式に似ているが、ウィンドウ群を環状に並べて回転させ、通常その輪の一番下に表示されているものが選択されるウィンドウになる。ほとんどのコンポジット型ウィンドウマネージャは最初からこの機能を備えているし、3d-desktop のようなサードパーティのアプリケーションも利用可能である。
; グループ化
: ユーザーはウィンドウ群をグループ化でき、各グループの中の1つのウィンドウだけが同時に表示されるようにできる。グループ内で表示すべきウィンドウを切り替えるとウィンドウが裏返ってそのウィンドウが表示される。
; Exposé
: Mac OS X v10.3から搭載された機能で、全ウィンドウを整列してプレビュー表示できる。他のシステム（Microsoft Windows, Compiz, KWin, サードパーティのアプリケーション）の同様の機能は「Exposéクローン」と呼ばれることがあった。Mac OS X v10.7以降からMission Control に統合された。なお Exposé を起動するホットキーは Alt-Tab ではなく F3 である。
; Mission Control
: Mac OS X v10.7 以降から、Exposé、Dashboard、Spacesといったコンポジット系の機能が統合されてMission Control という1つの環境となった。

### ウィジェットエンジン

Mac OS では、ホットキーを押下することで時計・メモ帳・電卓などの「ウィジェット」（単一用途のアプレット）を表示できる。ウィジェットエンジンはよく使われるウィジェットを普段からアクセス可能にしておくことで、作業を効率化する。Mac OS 上ではDashboardプログラムがそれらを取り扱う。

Compizのウィジェット・レイヤーには最初は何もなく、ユーザーがアプリケーションをクリックすることで追加可能である。様々なウィジェットがあり、Screenlets、gDesklets、SuperKaramba などがある。

Windows Vista では ガジェットを Windows サイドバー（サイドバー・ガジェット）、Windows Live のスタートページ（Webガジェット）、携帯電話などの外部の表示機器 (Windows SideShow) に配置できる。サイドバーは Windows 7 では無くなったが、後継として Windows デスクトップ ガジェットが登場した。

### 遷移途中などの視覚効果
コンポジット型ウィンドウマネージャが開発される以前は、ウィンドウは突然現れ、突然消えるもので、デスクトップメタファーとしては不適切である。GUI要素が突然出現・消滅することは、経験の浅いユーザーにとっては混乱の元となる。変化の過程を視覚的に見せることで文脈を提供し、GUI要素の因果関係を理解する助けとなる。ウィンドウが突然消える代わりに、徐々にフェードアウトしたり、小さくなっていってタスクバーに収まるといった視覚効果がある。クリックされたプルダウンメニューはメニューバーから滑らかに延びてきて、その起点と目的を認識しやすくする。

### ユーザインタフェース・ファサード
Metisseはユーザインタフェース・ファサードを実装しており、既存のグラフィカルなインタフェースをダイレクトマニピュレーション技法を使って簡単に設定変更・修正・再結合することができる。

## 主なコンポジット型ウィンドウマネージャ
* Desktop Window Manager と Windows Aero テーマ (Windows)
* Quartz Compositor (macOS)
* Compiz
* KWin （バージョン3.3以降）
* Mutter
* Xfce の Xfwm （バージョン4.2以降）
* xcompmgr — Compiz の代替となる最小限の実装
* Ecomorph — Enlightenment環境用のコンポジット型ウィンドウマネージャ
* Cairo Compmgr (Cairo Composite Manager) — GTK+でもベクターグラフィックスの描画に使用している cairo を使ったコンポジット用アドオンで、既存のウィンドウマネージャで使用可能
* Metisse

## スタンドアロンなコンポジットマネージャの一覧
* xcompmgr—Compiz のミニマムな代替ソフトウェア。
* Compton–xcompmgr のフォークである dcompmgr から、さらにこのバグフィックスを行ってフォークされたもの。
* Cairo Compmgr (Cairo コンポジットマネージャ)—既存のウィンドウマネージャ用のコンポジット・アドオン。これは、GTK+も使用するベクターグラフィックスライブラリ Cairoを利用する。
* Unagi コンポジットマネージャ—これは既存のウィンドウマネージャと一緒に使える合成マネージャである。XCB ライブラリを使用している。
* MCompositor—これは、MeeGo ハンドセットで使用されている。

## コンポジット型ウィンドウマネージャを採用しているOS
* Windows Vista, Windows 7, Windows Server 2008 （オプションとしてインストール可能）
* Mac OS X v10.0 以降
* GNU/Linux （X.Org/AIGLXまたはXgl）
* FreeBSD
* OpenSolaris
* AmigaOS 4
* MorphOS 2.0 以降

## 脚注・出典

## 関連項目
* ウィンドウマネージャ
* ズーミングユーザインタフェース
* コンピュータグラフィックス

## 外部リンク
* 
* 
* 
* 
* 
* 
* 
*