クライアントサイド・デコレーション

クライアントサイド・デコレーション（、略称: CSD）とは、グラフィカルなアプリケーションソフトウェアにおけるの描画について、歴史的にウィンドウマネージャが担当していたのに対し、各アプリケーションが独自に担当することを許容するという概念である。

伝統的なタイトルバーを持たないアプリケーションを指すためにクライアントサイド・デコレーションという語句が用いられることがあるが、これは誤用であり、最小限のタイトルバーを持つアプリケーションでもクライアント側でのデコレーションは可能である。

伝統的なサーバサイド・デコレーションの代わりにクライアントサイド・デコレーションを使用することにより、各アプリケーションが独自のタイトルバーを描画できるため、ウィンドウ・デコレーションの広範囲なカスタマイズや、標準的なウィンドウマネージャでウィンドウを最大化した場合に広大な空きスペースとなっていた領域への機能（GUIウィジェット）の追加などが実現できる。

定義 
LinuxやUnix系のオペレーティングシステムでは、「クライアントサイド・デコレーション」という呼称はX Window Systemに由来し、クライアントとはすなわちウィンドウを生成してXサーバに送るアプリケーションである。その逆は「サーバサイド・デコレーション」（server-side decoration、SSD）と呼ばれるが、X Window Systemであっても実際にデコレーションを描画するのはウィンドウマネージャであり、「サーバ」ではない。

実装

ウィジェット・ツールキット

GTK 
GTKは、GtkHeaderBarウィジェットにより、Linuxで最初にクライアントサイド・デコレーションを実装したGUIツールキットである。

GtkHeaderBarでは、より多くの領域をアプリケーション本体に割り当て、無駄な空白部分の面積をできる限り削減するために、タイトルバー、メニューバー、ツールバーを統合して単一の水平のバーとして描画する。これにより、アプリケーションから伝統的なデスクトップでの使用を前提としていた箇所が削除され、デスクトップPCからスモールフォームファクタ機器まで、様々なフォームファクタを通じたUIの柔軟性やUXの一貫性の確保に貢献する。これらはGNOME Shellで最優先にサポートされるほか、GNOME applicationsでも幅広く使用されている。

UWP 
ユニバーサルWindowsプラットフォーム（UWP）アプリケーションでは、独自のタイトルバーを描画する方式が選択できる。

macOS 
macOSでは、ベースのアプリケーションがNSWndowウィジェットを使用する場合に、クライアントサイド・デコレーションをサポートする。

Electron 
Electronにはフレームレス・ウィンドウ（ツールバー・メニューバー・タブを描画しない）のオプションがあり、アプリケーション側で独自に陰影の描画を担当する。

Deepin Tool Kit 

Deepin Tool KitはQt5ベースのウィジェット・ツールキットであり、Deepin Desktop Environmentで使用されている。

アプリケーション 
クライアントサイド・デコレーションをサポートする著名なアプリケーションを以下に挙げる。
 Steam - 「VGUI」と呼ばれる独自ウィジェット・ツールキットを使用する。
 Firefox
 Google Chrome

ディスプレイサーバ

Wayland 
Waylandは（ウィンドウ陰影を含め）クライアントサイド・デコレーションを前提として設計されているが、xdg-decorationとして知られるプロトコルもオプションでサポートしており、これはアプリケーション（クライアント）がウィンドウマネージャに対してサーバサイド・デコレーションをサポートしているかどうかを照会し、もしサポートしていればクライアントに使用させるというものである。GNOME Shellで使用されるコンポジタであるMutterは、Waylandのもとではクライアントサイド・デコレーションのみをサポートするが、KWinはクライアントサイドおよびサーバサイドのいずれのデコレーションもサポートする。

歴史 
 2008年、アドビはクライアントサイド・デコレーションを採用するPhotoshop CS4をリリースした。
 2012年、マイクロソフトはMetroデザイン言語でクライアントサイド・デコレーションを採用し、「戻る」ボタンなどのツールバー・オブジェクトをウィンドウのタイトルバーに配置した。
 2013年、GTKプロジェクトはクライアントサイド・デコレーションのサポートが追加されたGTK 3.10をリリースした。

脚注

関連項目 
 リボン (GUI)

外部リンク 
 Client-Side Decorations Initiative
 GtkHeaderBar: GTK3 Reference Manual

ウィジェット
グラフィカルユーザインタフェース