Spec-Zone.ru › Elisp

Макет рамки

Видимая рамка занимает прямоугольную область на дисплее терминала. Эта область может содержать несколько вложенных прямоугольников, каждый из которых служит для разных целей. Рисунок ниже иллюстрирует макет рамки на графическом терминале:


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

На практике не все области, показанные на рисунке, будут или могут присутствовать. Значение этих областей описано ниже.

Внешняя рамка

Внешняя рамка — это прямоугольник, включающий все области, показанные на рисунке. Границы этого прямоугольника называются внешними границами рамки. Вместе внешняя ширина и внешняя высота рамки задают внешний размер этого прямоугольника.

Знание внешнего размера рамки полезно для размещения рамки в рабочей области дисплея (см. Множественные терминалы) или для размещения двух рамок рядом на экране. Обычно внешний размер рамки доступен только после того, как рамка была отображена (сделана видимой, см. Видимость рамок) по крайней мере один раз. Для начальной рамки или рамки, которая еще не была создана, внешний размер можно только оценить или рассчитать на основе значений по умолчанию системы окон или менеджера окон. Одним из способов решения этой проблемы является получение разницы между внешними и внутренними (см. ниже) размерами отображаемой рамки и использование их для расчета внешнего размера новой рамки.

Положение верхнего левого угла внешней рамки (обозначенное «(0)» на рисунке выше) является внешним положением рамки. Внешнее положение графической рамки также называется «положением» рамки, потому что оно обычно остается неизменным на дисплее при изменении размера рамки или ее макета.

Внешнее положение задаётся и может быть установлено с помощью параметров рамки left и top (см. Параметры позиции). Для обычной, верхнего уровня, рамки эти параметры обычно представляют её абсолютное положение (см. ниже) относительно начала координат дисплея. Для дочерней рамки (см. Дочерние рамки) эти параметры представляют её положение относительно внутреннего положения (см. ниже) родительской рамки. Для рамок на текстовых терминалах значения этих параметров бессмысленны и всегда равны нулю.

Внешняя граница

Внешняя граница — это часть оформления, предоставляемого менеджером окон. Она обычно используется для изменения размера рамки с помощью мыши и поэтому не отображается в «полноэкранном» и максимальном режиме (см. Параметры размера). Её ширина определяется менеджером окон и не может быть изменена функциями Emacs.

Внешних границ нет в рамках текстовых терминалов. Для графических рамок их отображение можно отключить, установив параметр рамки override-redirect или undecorated (см. Параметры управления).

Внутренняя граница

Внутренняя граница — это отдельная граница, ширина которой может быть задана параметром рамки border-width (см. Параметры макета). На практике отображается либо внешняя, либо внутренняя граница рамки, но никогда не обе одновременно. Обычно внутренняя граница отображается только для специальных рамок, которые не полностью контролируются менеджером окон, например, для подсказок (см. Подсказки), дочерних рамок (см. Дочерние рамки) и undecorated или override-redirect рамок (см. Параметры управления).

Внутренние границы никогда не отображаются в рамках текстовых терминалов и рамок, сгенерированных процедурами GTK+. В MS-Windows внутренняя граница эмулируется с помощью внешней границы шириной один пиксель. В сборках на X без инструментария можно изменить цвет внутренней границы, установив параметр рамки border-color (см. Параметры макета).

Строка заголовка

Строка заголовка, также известная как строка заголовка, является также частью оформления менеджера окон и обычно отображает заголовок рамки (см. Заголовки рамок), а также кнопки для сворачивания, разворачивания и удаления рамки. Она также может использоваться для перетаскивания рамки с помощью мыши. Строка заголовка обычно не отображается для полноэкранного (см. Параметры размера), подсказок (см. Подсказки) и дочерних рамок (см. Дочерние рамки), а также отсутствует для рамок терминалов. Отображение строки заголовка можно отключить, установив параметр override-redirect или undecorated рамки (см. Параметры управления).

Панель меню

Панель меню (см. Панель меню) может быть внутренней (отображаемой самим Emacs) или внешней (отображаемой инструментом). Большинство сборок (GTK+, Lucid, Motif и MS-Windows) используют внешнюю панель меню. NS также использует внешнюю панель меню, которая, однако, не является частью внешней рамки. Сборки без инструментария могут предоставлять внутреннюю панель меню. В рамках текстовых терминалов панель меню является частью корневого окна рамки (см. Окна и рамки). Как правило, панели меню никогда не отображаются в дочерних рамках (см. Дочерние рамки). Отображение панели меню можно отключить, установив параметр menu-bar-lines (см. Параметры макета) в ноль.

Оборачивается ли панель меню или обрезается, когда её ширина становится слишком большой для рамки, зависит от инструментария. Обычно только в сборках Motif и MS-Windows панель меню может быть выровнена. При (вы)равнивании панели меню они пытаются сохранить внешнюю высоту рамки неизменной, поэтому вместо этого изменяется внутренняя высота рамки (см. ниже).

Панель инструментов

Как и панель меню, панель инструментов (см. Панель инструментов) может быть внутренней (отображаемой самим Emacs) или внешней (отображаемой инструментом). GTK+ и NS сборки имеют панель инструментов, нарисованную инструментом. Остальные сборки используют внутренние панели инструментов. В GTK+ панель инструментов может располагаться по бокам рамки, непосредственно за внутренней границей, см. ниже. Панели инструментов обычно не отображаются для дочерних рамок (см. Дочерние рамки). Отображение панели инструментов можно отключить, установив параметр tool-bar-lines (см. Параметры макета) в ноль.

Если переменная auto-resize-tool-bars отлична от nil, Emacs обрезает внутреннюю панель инструментов, когда её ширина становится слишком большой для рамки. При (вы)равнивании внутренней панели инструментов Emacs по умолчанию сохраняет внешнюю высоту рамки неизменной, поэтому вместо этого изменяется внутренняя высота рамки. С другой стороны, сборка Emacs с GTK+ никогда не обрезает панель инструментов, но может автоматически увеличить внешнюю ширину рамки, чтобы вместить слишком длинную панель инструментов.

Панель вкладок

Панель вкладок (см. Панели вкладок в Справочнике по GNU Emacs) всегда отображается самим Emacs. Панель вкладок отображается над панелью инструментов в сборках Emacs с внутренней панелью инструментов и под панелью инструментов в сборках с внешней панелью инструментов. Отображение панели вкладок можно отключить, установив параметр tab-bar-lines (см. Параметры макета) в ноль.

Внутренняя рамка

Внутренняя рамка — это прямоугольник, расположенный полностью внутри внешней рамки. Он исключает области, занимаемые внешней или внутренней границей, строкой заголовка и любой внешней панелью меню или инструментов. Границы внутренней рамки называются внутренними границами рамки. Вместе внутренняя ширина и внутренняя высота рамки определяют внутренний размер рамки.

Внутренний размер рамки — это размер, который Emacs передаёт системе окон или менеджеру окон при создании или изменении размера рамки изнутри Emacs. Это также размер, который Emacs получает от системы окон или менеджера окон, когда они изменяют размер окна системы окон рамки, например, после максимального расширения рамки щелчком по соответствующей кнопке в строке заголовка или при перетаскивании её внешней границы мышью.

Положение верхнего левого угла внутренней рамки определяет внутреннее положение рамки. (1)–(3) на рисунке выше указывают это положение для различных сборок:

  • (1) рамки без инструментария и терминальные рамки
  • (2) рамки Lucid, Motif и MS-Windows
  • (3) рамки GTK+ и NS

Соответственно, внутренняя высота рамки может включать высоту панели инструментов, но не высоту панели меню (Lucid, Motif, MS-Windows) или высоту панели меню и панели инструментов (рамки без инструментария и текстовых терминалов).

Внутреннее положение рамки — это положение ссылки для функций, которые устанавливают или возвращают текущее положение мыши (см. Положение мыши) и для функций, работающих с положением окон, таких как window-edges, window-at или coordinates-in-window-p (см. Координаты и окна). Оно также задаёт начало координат (0, 0) для определения и позиционирования дочерних рамок внутри этой рамки (см. Дочерние рамки).

Обратите также внимание, что внутреннее положение рамки обычно остаётся неизменным на дисплее при удалении или добавлении декораций менеджера окон путём изменения параметра рамки override-redirect или undecorated (см. Параметры управления).

Внутренняя граница

Внутренняя граница — это граница, нарисованная Emacs вокруг внутренней рамки (см. ниже). Описание её внешнего вида зависит от того, является ли данная рамка дочерней (см. Дочерние рамки).

Для обычных рамок её ширина определяется параметром рамки internal-border-width (см. Параметры макета), а её цвет — фоном internal-border лица.

Для дочерних рамок её ширина определяется параметром рамки child-frame-border-width (но используется параметр internal-border-width в качестве резервного варианта), а её цвет — фоном child-frame-border лица.

Внутренняя рамка

Внутренняя рамка — это прямоугольник, предназначенный для окон рамки. Он заключён в внутреннюю границу, которая, однако, не является частью внутренней рамки. Её границы называются внутренними границами рамки. Внутренняя ширина и внутренняя высота определяют внутренний размер прямоугольника. Внутренняя рамка иногда также называется областью отображения рамки.

Как правило, внутренняя рамка делится на корневое окно рамки (см. Окна и рамки) и окно минибуфера рамки (см. Окна минибуфера). Есть два исключения из этого правила: рамка без минибуфера содержит только корневое окно и не содержит окно минибуфера. Рамка только с минибуфером содержит только окно минибуфера, которое также служит корневым окном этой рамки. См. Начальные параметры, чтобы узнать, как создать такие конфигурации рамок.

Текстовая область

Область текстового поля рамки — это некоторая условная область, которую можно встроить в родственную рамку. Её положение не определено. Ширина может быть получена путём вычитания из ширины родственной рамки ширины внутренней границы, одного вертикального скроллбара и одной левой и одной правой рамки, если они заданы для этой рамки, см. Параметры макета. Высота может быть получена путём вычитания из высоты родственной рамки ширины внутренней границы и высот внутреннего меню и панели инструментов рамки, панели вкладок и одного горизонтального скроллбара, если они заданы для этой рамки.

Абсолютное положение рамки задаётся как пара (X, Y) горизонтального и вертикального смещения в пикселях относительно начала координат (0, 0) экрана рамки. Соответственно, абсолютные края рамки задаются как смещения в пикселях от этого начала координат.

Обратите внимание, что при использовании нескольких мониторов начало координат экрана не обязательно совпадает с верхним левым углом всей доступной области экрана терминала. Таким образом, абсолютное положение рамки может быть отрицательным в такой среде, даже если эта рамка полностью видна.

По соглашению, вертикальные смещения увеличиваются «вниз». Это означает, что высота рамки получается путём вычитания смещения её верхнего края из смещения её нижнего края. Горизонтальные смещения увеличиваются «вправо», как ожидается, поэтому ширина рамки вычисляется путём вычитания смещения её левого края из смещения её правого края.

Для рамки на графическом терминале следующая функция возвращает размеры описанных выше областей:

Функция: frame-geometry &optional frame

Эта функция возвращает геометрические атрибуты frame. Возвращаемое значение — список ассоциаций перечисленных ниже атрибутов. Все координаты, высота и ширина — целые числа, представляющие количество пикселей. Обратите внимание, что если frame ещё не отображён (см. Видимость рамок), некоторые возвращаемые значения могут представлять только приближённые значения фактических значений — тех, которые видны после отображения рамки.

outer-position

Список, представляющий абсолютное положение внешней frame относительно начала координат (0, 0) экрана frame.

outer-size

Список внешней ширины и высоты frame.

external-border-size

Список горизонтальной и вертикальной ширины внешних границ frame, предоставленных менеджером окон. Если менеджер окон не предоставляет эти значения, Emacs попытается определить их из координат внешней и внутренней рамки.

outer-border-width

Ширина внешней границы frame. Значение имеет смысл только для не-GTK+ X сборок.

title-bar-size

Список ширины и высоты панели заголовка frame, предоставленных менеджером окон или операционной системой. Если оба значения равны нулю, у рамки нет панели заголовка. Если только ширина равна нулю, 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-edges &optional frame type

Эта функция возвращает абсолютные края внешней, родственной или внутренней рамки frame. frame должен быть активной рамкой и по умолчанию является выбранной. Возвращаемый список имеет вид (left top right bottom), где все значения в пикселях относительно начала координат экрана frame. Для рамок терминала значения, возвращаемые для left и top, всегда равны нулю.

Необязательный аргумент type задаёт тип возвращаемых краёв: outer-edges означает возвращение внешних краёв frame, native-edges (или nil) означает возвращение его родственных краёв и inner-edges означает возвращение его внутренних краёв.

По соглашению, пиксели экрана в значениях, возвращаемых для left и top, считаются внутри (частью) frame. Следовательно, если left и top оба равны нулю, пиксель в начале координат экрана является частью frame. Пиксели в bottom и right, с другой стороны, считаются лежащими непосредственно за пределами frame. Это означает, что, если у вас, например, две рамки, расположенные рядом так, что правый внешний край рамки слева равен левому внешнему краю рамки справа, пиксели на этом краю показывают часть рамки справа.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Frame-Layout.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API