Next: Frame Font, Up: Frame Geometry [Contents][Index]
以下にグラフィカル端末上のフレームレイアウトを図示します:
<------------ 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 edges)と呼ばれる。フレームのアウター幅(outer width)とアウター高さ(outer height)はこの矩形のサイズを指定する。
(上図‘(0)’で示される)アウターフレームの左上隅はフレームのアウター位置(outer
position)。これはフレームパラメーターleft
とtop
による指定(Position Parametersを参照)、同様に関数frame-position
とset-frame-position
(Size and Positionを参照)を通じてセットできる。
エクスターナルボーダー(external border)はウィンドウマネージャーにより供給される装飾の一部。マウスによるフレームのリサイズで典型的に使用される。エクスターナルボーダーは、通常は“全画面化(fullboth)”および最大化されたフレームでは表示されず(Size Parametersを参照)、テキスト端末のフレームには存在しない。
フレームパラメーターborder-width
(Layout Parametersを参照)で指定されるアウターボーダー(outer
border)とエクスターナルボーダーを混同しないこと。アウターボーダーはほとんどのプラットフォームで通常は無視されるので、ここでは説明しない。
タイトルバー(title bar)もウィンドウマネージャーによる装飾の一部であり、典型的にはフレームタイトルの表示(Frame Titlesを参照)、フレームの最小化や最大化、削除のためのボタン表示に使用される。タイトルバーは全画面表示(Size Parametersを参照やツールチップフレームでは通常は表示されない。テキスト端末フレームではタイトルバーは存在しない。
メニューバー(Menu Barを参照)にはインターナル(Emacs自身が描画)とエクスターナル(ツールキットが描画)がある。ほとんどのビルド(GTK+、Lucid、Motif、Windows)にはエクスターナルメニューバーが存在する。NSでもエクスターナルメニューバーを使用するがアウターフレームの一部ではない。非ツールキットのビルドではインターナルメニューバーが提供可能。テキスト端末のフレームでは、メニューバーはフレームのルートウィンドウの(Windows and Framesを参照)一部である。
メニューバーのように、ツールバー(Tool Barを参照)にもインターナル(Emacs自身が描画)とエクスターナル(ツールキットが描画)がある。GTK+とNSのビルドには、そのツールキットが描画するツールバーがある。その他のビルドはインターナルツールバーを使用する。GTK+ではツールバーはフレーム側面かインターナルボーダー(以下参照)の外側にのいずれかに配置され得る。
ネイティブフレーム(native frame)はアウターフレーム内全体に配置される矩形。エクスターナルボーダーとタイトルバー、およびエクスターナルメニューとエクスターナルツールバーが占有する領域は除外される。ネイティブフレームで囲まれた領域は、そのフレームのディスプレー領域(display area)として参照されることもある。ネイティブフレームのエッジは、そのフレームのネイティブエッジ(native edges)と呼ばれる。フレームのネイティブ幅(native width)とネイティブ高さ(native height)は、この矩形のサイズを指定する。
ネイティブフレームの左上隅は、そのフレームのネイティブ位置(native position)を指定する。上図(1)から(3)では種々ビルドにたいする位置を示す:
これに応じてフレームのネイティブ高さにはツールバーの高さが含まれるがメニューバーの高さ(Lucid、Motif、Windows)や、メニューバーとツールバーの高さ(非ツールキットとテキスト端末のフレーム)は含まれない。
フレームのネイティブ位置はマウスのカレント位置のセットやリターンを行う関数(Mouse Positionを参照)、およびwindow-edges
、window-at
、coordinates-in-window-p
のようなウィンドウの位置を扱う関数(Coordinates and Windowsを参照)にたいして基準となる位置である。
インターナルボーダー(Layout Parametersを参照)はEmacsがインナーフレーム(以下参照)周囲に描画するボーダー。
インナーフレーム(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)とは、ネイティブフレーム内に全体が配置される架空な類のエリアである。このエリアはネイティブフレームからすべてのインターナルボーダー、垂直スクロールバーと水平スクロールバー、およびそのフレームにたいして指定された左右のフリンジを取り除くことにより取得できる。Layout Parametersを参照のこと。
フレームやフレームのエッジの絶対位置(absolute position)とは、通常はそのフレームのディスプレーの位置(0, 0)にある原点から計測したピクセル単位で与えられます。複数モニターの原点は、使用可能なディスプレーエリア全体の左上隅と一致する必要はないことに注意してください。そのため、そのような環境ではフレームの絶対アウター位置やアウターフレーム、ネイティブフレーム、インナーフレームのエッジの絶対位置は、たとえそのフレームが完全に可視であっても負になり得ます。
以下の関数はグラフィカル端末上のフレームにたいして上述したエリアのサイズをリターンします:
この関数は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のどの端に配置されているかを示しleft
、top
、right
、bottom
のいずれか。現在のところtop
以外の値をサポートするツールキットはGTK+のみ。
tool-bar-size
frameのツールバーの幅と高さを表すコンス。
internal-border-width
frameのインターナルボーダーの幅。
以下の関数はフレームにたいするアウター、ネイティブ、インナーのエッジの取得に使用できます。
この関数はframeのアウターフレーム、ネイティブフレーム、インナーフレームのエッジをリターンする。frameは生きたフレームでなければならずデフォルトは選択されたフレーム。リターンされるリストは(left top right bottom)という形式をもち、すべての値はframeのディスプレーの位置(0, 0)から相対的なピクセル値。端末フレームではleftとtopはいずれも0。
オプション引数typeはリターンするエッジのタイプを指定する。outer-edges
はframeのアウターエッジ、native-edges
(またはnil
)はネイティブエッジ、inner-edges
はインナーエッジをリターンすることを意味する。
bottomおよびrightの位置のピクセルは、対応するフレームのすぐ外側になることに注目。これはたとえば、左フレームの右アウターエッジが右フレームの左アウターエッジと等しいような横並びの2つのフレームがあるような場合には、そのエッジを表すピクセルは右フレームの一部であることを意味する。
Next: Frame Font, Up: Frame Geometry [Contents][Index]