Next: , Up: Frame Geometry   [Contents][Index]


28.3.1 Frame Layout

以下にグラフィカル端末上のフレームレイアウトを図示します:


        <------------ Outer Frame Width ----------->
        ___________________________________________
     ^(0)  ___________ External Border __________   |
     | |  |_____________ Title Bar ______________|  |
     | | (1)_____________ Menu Bar ______________|  | ^
     | | (2)_____________ Tool Bar ______________|  | ^
     | | (3) _________ Internal Border ________  |  | ^
     | |  | |   ^                              | |  | |
     | |  | |   |                              | |  | |
Outer  |  | | Inner                            | |  | Native
Frame  |  | | Frame                            | |  | Frame
Height |  | | Height                           | |  | Height
     | |  | |   |                              | |  | |
     | |  | |<--+--- Inner Frame Width ------->| |  | |
     | |  | |   |                              | |  | |
     | |  | |___v______________________________| |  | |
     | |  |___________ Internal Border __________|  | v
     v |______________ External Border _____________|
           <-------- Native Frame Width -------->

図示したすべての領域が実際に存在するわけではありません。これらの領域はそれぞれ以下を意味しています:

アウターフレーム(Outer Frame)

アウターフレーム(outer frame)とは上図で示すすべての領域を網羅する矩形。この矩形の端はそのフレームのアウターエッジ(outer edges)と呼ばれる。フレームのアウター幅(outer width)アウター高さ(outer height)はこの矩形のサイズを指定する。

(上図‘(0)’で示される)アウターフレームの左上隅はフレームのアウター位置(outer position)。これはフレームパラメーターlefttopによる指定(Position Parametersを参照)、同様に関数frame-positionset-frame-position (Size and Positionを参照)を通じてセットできる。

エクスターナルボーダー(External Border)

エクスターナルボーダー(external border)はウィンドウマネージャーにより供給される装飾の一部。マウスによるフレームのリサイズで典型的に使用される。エクスターナルボーダーは、通常は“全画面化(fullboth)”および最大化されたフレームでは表示されず(Size Parametersを参照)、テキスト端末のフレームには存在しない。

フレームパラメーターborder-width (Layout Parametersを参照)で指定されるアウターボーダー(outer border)とエクスターナルボーダーを混同しないこと。アウターボーダーはほとんどのプラットフォームで通常は無視されるので、ここでは説明しない。

タイトルバー(Title Bar)

タイトルバー(title bar)もウィンドウマネージャーによる装飾の一部であり、典型的にはフレームタイトルの表示(Frame Titlesを参照)、フレームの最小化や最大化、削除のためのボタン表示に使用される。タイトルバーは全画面表示(Size Parametersを参照やツールチップフレームでは通常は表示されない。テキスト端末フレームではタイトルバーは存在しない。

メニューバー(Menu Bar)

メニューバー(Menu Barを参照)にはインターナル(Emacs自身が描画)とエクスターナル(ツールキットが描画)がある。ほとんどのビルド(GTK+、Lucid、Motif、Windows)にはエクスターナルメニューバーが存在する。NSでもエクスターナルメニューバーを使用するがアウターフレームの一部ではない。非ツールキットのビルドではインターナルメニューバーが提供可能。テキスト端末のフレームでは、メニューバーはフレームのルートウィンドウの(Windows and Framesを参照)一部である。

ツールバー(Tool Bar)

メニューバーのように、ツールバー(Tool Barを参照)にもインターナル(Emacs自身が描画)とエクスターナル(ツールキットが描画)がある。GTK+とNSのビルドには、そのツールキットが描画するツールバーがある。その他のビルドはインターナルツールバーを使用する。GTK+ではツールバーはフレーム側面かインターナルボーダー(以下参照)の外側にのいずれかに配置され得る。

ネイティブフレーム(Native Frame)

ネイティブフレーム(native frame)はアウターフレーム内全体に配置される矩形。エクスターナルボーダーとタイトルバー、およびエクスターナルメニューとエクスターナルツールバーが占有する領域は除外される。ネイティブフレームで囲まれた領域は、そのフレームのディスプレー領域(display area)として参照されることもある。ネイティブフレームのエッジは、そのフレームのネイティブエッジ(native edges)と呼ばれる。フレームのネイティブ幅(native width)ネイティブ高さ(native height)は、この矩形のサイズを指定する。

ネイティブフレームの左上隅は、そのフレームのネイティブ位置(native position)を指定する。上図(1)から(3)では種々ビルドにたいする位置を示す:

これに応じてフレームのネイティブ高さにはツールバーの高さが含まれるがメニューバーの高さ(Lucid、Motif、Windows)や、メニューバーとツールバーの高さ(非ツールキットとテキスト端末のフレーム)は含まれない。

フレームのネイティブ位置はマウスのカレント位置のセットやリターンを行う関数(Mouse Positionを参照)、およびwindow-edgeswindow-atcoordinates-in-window-pのようなウィンドウの位置を扱う関数(Coordinates and Windowsを参照)にたいして基準となる位置である。

インターナルボーダー(Internal Border)

インターナルボーダー(Layout Parametersを参照)はEmacsがインナーフレーム(以下参照)周囲に描画するボーダー。

インナーフレーム(Inner Frame)

インナーフレーム(inner frame)はフレームのウィンドウが確保する矩形。インターナルボーダーに囲まれているが、それはインナーフレームの一部ではない。それのエッジはフレームのインナーエッジ(inner edges)と呼ばれる。インナー幅(inner width)インナー高さ(inner height)は、その矩形のサイズを指定する。

ルールとしてインナーフレームはフレームのルートウィンドウ(Windows and Framesを参照)とミニバッファーウィンドウ(Minibuffer Windowsを参照)に細分される。この2つには注目すべき2つの例外がある。それはミニバッファーウィンドウをもたないルートウィンドウのみのミニバッファーlessフレーム(minibuffer-less frame)と、ミニバッファーウィンドウだけをもち、それがフレームのルートウィンドウの役目も果たすミニバッファーonlyウィンドウ(minibuffer-only frame)である。そのようなフレーム構成を作成する方法はInitial Parametersを参照のこと。

テキストエリア(Text Area)

フレームのテキストエリア(text area)とは、ネイティブフレーム内に全体が配置される架空な類のエリアである。このエリアはネイティブフレームからすべてのインターナルボーダー、垂直スクロールバーと水平スクロールバー、およびそのフレームにたいして指定された左右のフリンジを取り除くことにより取得できる。Layout Parametersを参照のこと。

フレームやフレームのエッジの絶対位置(absolute position)とは、通常はそのフレームのディスプレーの位置(0, 0)にある原点から計測したピクセル単位で与えられます。複数モニターの原点は、使用可能なディスプレーエリア全体の左上隅と一致する必要はないことに注意してください。そのため、そのような環境ではフレームの絶対アウター位置やアウターフレーム、ネイティブフレーム、インナーフレームのエッジの絶対位置は、たとえそのフレームが完全に可視であっても負になり得ます。

以下の関数はグラフィカル端末上のフレームにたいして上述したエリアのサイズをリターンします:

Function: frame-geometry &optional frame

この関数はframeのジオメトリーに関する属性をリターンする。リターン値は属性の連想配列。すべての座標、高さ、幅はピクセル単位の整数。

outer-position

frameのディスプレー位置(0, 0)にある原点から相対的なframeのアウター位置を表す、絶対X座標と絶対Y座標によるコンス。

outer-size

frameのアウター幅とアウター高さを表すコンス。

external-border-size

ウィンドウマネージャーにより与えられる、frameエクスターナルボーダーの水平幅と垂直幅を表すコンス。ウィンドウマネージャーによりこれらの値が提供されなければ、Emacsはアウターフレームとインナーフレームの座標からそれらの推測を試みる。

title-bar-size

ウィンドウマネージャーまたはオペレーティングシステムが与える、frameのタイトルバーの幅と高さを表すコンス。いずれも0なら、そのフレームにタイトルバーはない。幅だけが0なら、Emacsが幅の情報を取得できなかったことを意味する。

menu-bar-external

nilなら、それはメニューバーがエクスターナルである(frameのネイティブフレームの一部ではない)ことを意味する。

menu-bar-size

frameのメニューバーの幅と高さを表すコンス。

tool-bar-external

nilなら、それはツールバーがエクスターナルである(frameのネイティブフレームの一部ではない)ことを意味する。

tool-bar-position

これはツールバーがframeのどの端に配置されているかを示しlefttoprightbottomのいずれか。現在のところtop以外の値をサポートするツールキットはGTK+のみ。

tool-bar-size

frameのツールバーの幅と高さを表すコンス。

internal-border-width

frameのインターナルボーダーの幅。

以下の関数はフレームにたいするアウター、ネイティブ、インナーのエッジの取得に使用できます。

Function: frame-edges &optional frame type

この関数はframeのアウターフレーム、ネイティブフレーム、インナーフレームのエッジをリターンする。frameは生きたフレームでなければならずデフォルトは選択されたフレーム。リターンされるリストは(left top right bottom)という形式をもち、すべての値はframeのディスプレーの位置(0, 0)から相対的なピクセル値。端末フレームではlefttopはいずれも0。

オプション引数typeはリターンするエッジのタイプを指定する。outer-edgesframeのアウターエッジ、native-edges (またはnil )はネイティブエッジ、inner-edgesはインナーエッジをリターンすることを意味する。

bottomおよびrightの位置のピクセルは、対応するフレームのすぐ外側になることに注目。これはたとえば、左フレームの右アウターエッジが右フレームの左アウターエッジと等しいような横並びの2つのフレームがあるような場合には、そのエッジを表すピクセルは右フレームの一部であることを意味する。


Next: , Up: Frame Geometry   [Contents][Index]