414 lines
13 KiB
XML
414 lines
13 KiB
XML
|
|
|||
|
<chapter id='Keyboard_Geometry'>
|
|||
|
<title>Keyboard Geometry</title>
|
|||
|
|
|||
|
<para>
|
|||
|
The XKB description of a keyboard includes an optional keyboard geometry which
|
|||
|
describes the physical appearance of the keyboard. Keyboard geometry describes
|
|||
|
the shape, location and color of all keyboard keys or other visible keyboard
|
|||
|
components such as indicators. The information contained in a keyboard geometry
|
|||
|
is sufficient to allow a client program to draw an accurate two-dimensional
|
|||
|
image of the keyboard.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
The components of the keyboard geometry include the following:
|
|||
|
</para>
|
|||
|
|
|||
|
<itemizedlist>
|
|||
|
<listitem>
|
|||
|
<para>A <emphasis>
|
|||
|
symbolic name</emphasis>
|
|||
|
to help users identify the keyboard.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>The <emphasis>
|
|||
|
width</emphasis>
|
|||
|
and <emphasis>
|
|||
|
height</emphasis>
|
|||
|
of the keyboard, in <mediaobject>
|
|||
|
<imageobject> <imagedata format="SVG" fileref="XKBproto-8.svg"/>
|
|||
|
</imageobject>
|
|||
|
</mediaobject>
|
|||
|
. For non-rectangular keyboards, the width and height describe the smallest
|
|||
|
bounding-box that encloses the outline of the keyboard.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>A list of up to <emphasis>
|
|||
|
MaxColors</emphasis>
|
|||
|
(<emphasis>
|
|||
|
32</emphasis>
|
|||
|
) <emphasis>
|
|||
|
color names</emphasis>
|
|||
|
. A color name is a string whose interpretation is not specified by XKB. Other
|
|||
|
geometry components refer to colors using their indices in this list.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>The<emphasis>
|
|||
|
base color</emphasis>
|
|||
|
of the keyboard is the predominant color on the keyboard and is used as the
|
|||
|
default color for any components whose color is not explicitly specified.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>The <emphasis>
|
|||
|
label color</emphasis>
|
|||
|
is the color used to draw the labels on most of the keyboard keys.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>The <emphasis>
|
|||
|
label font</emphasis>
|
|||
|
is a string which describes the font used to draw labels on most keys; XKB
|
|||
|
does not specify a format or name space for font names.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>A list of <emphasis>
|
|||
|
geometry properties</emphasis>
|
|||
|
. A geometry property associates an arbitrary string with an equally arbitrary
|
|||
|
name. Geometry properties can be used to provide hints to programs that display
|
|||
|
images of keyboards, but they are not interpreted by XKB. No other geometry
|
|||
|
structures refer to geometry properties.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>A list of <emphasis>
|
|||
|
key aliases</emphasis>
|
|||
|
, as described in <link linkend='Symbolic_Names'>Symbolic
|
|||
|
Names</link>.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>A list of <emphasis>
|
|||
|
shapes</emphasis>
|
|||
|
; other keyboard components refer to shapes by their index in this list. A
|
|||
|
shape consists of a name and one or more closed-polygons called <emphasis>
|
|||
|
outlines</emphasis>
|
|||
|
. Shapes and outlines are described in detail in <link linkend='Shapes_and_Outlines'>Shapes and Outlines</link>.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
</itemizedlist>
|
|||
|
|
|||
|
<para>
|
|||
|
Unless otherwise specified, geometry measurements are in <mediaobject>
|
|||
|
<imageobject> <imagedata format="SVG" fileref="XKBproto-9.svg"/>
|
|||
|
</imageobject>
|
|||
|
</mediaobject>
|
|||
|
|
|||
|
units. The origin (0,0) is in the top left corner of the keyboard image. Some
|
|||
|
geometry components can be drawn rotated; all such objects rotate about their
|
|||
|
origin in <mediaobject>
|
|||
|
<imageobject> <imagedata format="SVG" fileref="XKBproto-10.svg"/>
|
|||
|
</imageobject>
|
|||
|
</mediaobject>
|
|||
|
|
|||
|
increments.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
All geometry components include a <emphasis>
|
|||
|
priority</emphasis>
|
|||
|
, which indicates the order in which overlapping objects should be drawn.
|
|||
|
Objects are drawn in order from highest priority (<emphasis>
|
|||
|
0</emphasis>
|
|||
|
) to lowest (<emphasis>
|
|||
|
255</emphasis>
|
|||
|
).
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
The description of the actual appearance of the keyboard is subdivided into
|
|||
|
named <emphasis>
|
|||
|
sections</emphasis>
|
|||
|
of related keys and <emphasis>
|
|||
|
doodads</emphasis>
|
|||
|
. A a <emphasis>
|
|||
|
doodad</emphasis>
|
|||
|
describes some visible aspect of the keyboard that is not a key. A section is
|
|||
|
a collection of keys and doodads that are physically close together and
|
|||
|
logically related.
|
|||
|
</para>
|
|||
|
|
|||
|
<sect1 id='Shapes_and_Outlines'>
|
|||
|
<title>Shapes and Outlines</title>
|
|||
|
|
|||
|
<para>
|
|||
|
An outline is a list of one or more points which describes a single
|
|||
|
closed-polygon, as follows:
|
|||
|
</para>
|
|||
|
|
|||
|
<itemizedlist>
|
|||
|
<listitem>
|
|||
|
<para>A list with a single point describes a rectangle with one corner at the
|
|||
|
origin of the shape (<emphasis>
|
|||
|
0</emphasis>
|
|||
|
,<emphasis>
|
|||
|
0</emphasis>
|
|||
|
) and the opposite corner at the specified point.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>A list of two points describes a rectangle with one corner at the
|
|||
|
position specified by the first point and the opposite corner at the position
|
|||
|
specified by the second point.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>A list of three or more points describes an arbitrary polygon. If
|
|||
|
necessary, the polygon is automatically closed by connecting the last point in
|
|||
|
the list with the first.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>A non-zero value for the <emphasis>
|
|||
|
cornerRadius</emphasis>
|
|||
|
field specifies that the corners of the polygon should be drawn as circles
|
|||
|
with the specified radius.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
</itemizedlist>
|
|||
|
|
|||
|
<para>
|
|||
|
All points in an outline are specified relative to the origin of the enclosing
|
|||
|
shape. Points in an outline may have negative values for the X and Y coordinate.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
One outline (usually the first) is the primary outline; a keyboard display
|
|||
|
application can generate a simpler but still accurate keyboard image by
|
|||
|
displaying only the primary outlines for each shape. Non-rectangular keys must
|
|||
|
include a rectangular <emphasis>
|
|||
|
approximation</emphasis>
|
|||
|
as one of the outlines associated with the shape; the approximation is not
|
|||
|
normally displayed but can be used by very simple keyboard display applications
|
|||
|
to generate a recognizable but degraded image of the keyboard.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
</sect1>
|
|||
|
<sect1 id='Sections'>
|
|||
|
<title>Sections</title>
|
|||
|
|
|||
|
<para>
|
|||
|
Each section has its own coordinate system — if a section is rotated, the
|
|||
|
coordinates of any components within the section are interpreted relative to
|
|||
|
the edges that were on the top and left before rotation. The components that
|
|||
|
make up a section include:
|
|||
|
</para>
|
|||
|
|
|||
|
<itemizedlist>
|
|||
|
<listitem>
|
|||
|
<para>A list of <emphasis>
|
|||
|
rows</emphasis>
|
|||
|
. A row is a list of horizontally or vertically adjacent keys. Horizontal rows
|
|||
|
parallel the (pre-rotation) top of the section and vertical rows parallel the
|
|||
|
(pre-rotation) left of the section. All keys in a horizontal row share a common
|
|||
|
top coordinate; all keys in a vertical row share a left coordinate.
|
|||
|
</para>
|
|||
|
<para>
|
|||
|
A key description consists of a key <emphasis>
|
|||
|
name</emphasis>
|
|||
|
, a <emphasis>
|
|||
|
shape</emphasis>
|
|||
|
, a key <emphasis>
|
|||
|
color</emphasis>
|
|||
|
, and a <emphasis>
|
|||
|
gap</emphasis>
|
|||
|
. The key <emphasis>
|
|||
|
name</emphasis>
|
|||
|
should correspond to one of the keys named in the keyboard names description,
|
|||
|
the <emphasis>
|
|||
|
shape</emphasis>
|
|||
|
specifies the appearance of the key, and the key <emphasis>
|
|||
|
color</emphasis>
|
|||
|
specifies the color of the key (not the label on the key). Keys are normally
|
|||
|
drawn immediately adjacent to one another from left-to-right (or top-to-bottom)
|
|||
|
within a row. The <emphasis>
|
|||
|
gap</emphasis>
|
|||
|
field specifies the distance between a key and its predecessor.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>An optional list of doodads; any type of doodad can be enclosed within
|
|||
|
a section. Position and angle of rotation are relative to the origin and angle
|
|||
|
of rotation of the sections that contain them. Priority is relative to the
|
|||
|
other components of the section, not to the keyboard as a whole.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>An optional list of <emphasis>
|
|||
|
overlay keys</emphasis>
|
|||
|
. Each overlay key definition indicates a key that can yield multiple scan
|
|||
|
codes and consists of a field named <emphasis>
|
|||
|
under</emphasis>
|
|||
|
, which specifies the primary name of the key and a field named <emphasis>
|
|||
|
over</emphasis>
|
|||
|
, which specifies the name for the key when the overlay keycode is selected.
|
|||
|
The key specified in <emphasis>
|
|||
|
under</emphasis>
|
|||
|
must be a member of the section that contains the overlay key definition,
|
|||
|
while the key specified in over must not.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
</itemizedlist>
|
|||
|
|
|||
|
</sect1>
|
|||
|
<sect1 id='Doodads'>
|
|||
|
<title>Doodads</title>
|
|||
|
|
|||
|
<para>
|
|||
|
Doodads can be global to the keyboard or part of a section. Doodads have
|
|||
|
symbolic names of arbitrary length. The only doodad name whose interpretation
|
|||
|
is specified by XKB is "Edges", which describes the outline of the entire
|
|||
|
keyboard, if present.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
All doodads report their origin in fields named <emphasis>
|
|||
|
left</emphasis>
|
|||
|
and <emphasis>
|
|||
|
top</emphasis>
|
|||
|
. XKB supports five kinds of doodads:
|
|||
|
</para>
|
|||
|
|
|||
|
<itemizedlist>
|
|||
|
<listitem>
|
|||
|
<para>An <emphasis>
|
|||
|
indicator doodad</emphasis>
|
|||
|
describes one of the physical keyboard indicators. Indicator doodads specify
|
|||
|
the shape of the indicator, the indicator color when it is lit (<emphasis>
|
|||
|
on_color</emphasis>
|
|||
|
) and the indicator color when it is dark (<emphasis>
|
|||
|
off_color</emphasis>
|
|||
|
).
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>An <emphasis>
|
|||
|
outline doodad</emphasis>
|
|||
|
describes some aspect of the keyboard to be drawn as one or more hollow,
|
|||
|
closed polygons. Outline doodads specify the shape, color, and angle of
|
|||
|
rotation about the doodad origin at which they should be drawn.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>A <emphasis>
|
|||
|
solid doodad</emphasis>
|
|||
|
describes some aspect of the keyboard to be drawn as one or more filled
|
|||
|
polygons. Solid doodads specify the shape, color and angle of rotation about
|
|||
|
the doodad origin at which they should be drawn.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>A <emphasis>
|
|||
|
text doodad</emphasis>
|
|||
|
describes a text label somewhere on the keyboard. Text doodads specify the
|
|||
|
label string, the font and color to use when drawing the label, and the angle
|
|||
|
of rotation of the doodad about its origin.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
<listitem>
|
|||
|
<para>A <emphasis>
|
|||
|
logo doodad</emphasis>
|
|||
|
is a catch-all, which describes some other visible element of the keyboard. A
|
|||
|
logo doodad is essentially an outline doodad with an additional symbolic name
|
|||
|
that describes the element to be drawn.
|
|||
|
</para>
|
|||
|
<para>
|
|||
|
If a keyboard display program recognizes the symbolic name, it can draw
|
|||
|
something appropriate within the bounding region of the shape specified in the
|
|||
|
doodad. If the symbolic name does not describe a recognizable image, it should
|
|||
|
draw an outline using the specified shape, outline, and angle of rotation.
|
|||
|
</para>
|
|||
|
<para>
|
|||
|
The XKB extension does not specify the interpretation of logo names.
|
|||
|
</para>
|
|||
|
</listitem>
|
|||
|
</itemizedlist>
|
|||
|
|
|||
|
</sect1>
|
|||
|
<sect1 id='Keyboard_Geometry_Example'>
|
|||
|
<title>Keyboard Geometry Example</title>
|
|||
|
|
|||
|
<para>
|
|||
|
Consider the following example keyboard:
|
|||
|
</para>
|
|||
|
|
|||
|
<mediaobject>
|
|||
|
<imageobject>
|
|||
|
<imagedata format="SVG" fileref="XKBproto-11.svg"/>
|
|||
|
</imageobject>
|
|||
|
</mediaobject>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
This keyboard has six sections: The left and right function sections (at the
|
|||
|
very top) each have one horizontal row with eight keys. The left and right
|
|||
|
alphanumeric sections (the large sections in the middle) each have six vertical
|
|||
|
rows, with four or five keys in each row. The left and right editing sections
|
|||
|
each have three vertical rows with one to three keys per row; the left editing
|
|||
|
section is rotated 20° clockwise about its origin while the right editing
|
|||
|
section is rotated 20° counterclockwise.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
This keyboard has four global doodads: Three small, round indicators and a
|
|||
|
rectangular logo. The program which generated this image did not recognize the
|
|||
|
logo, so it displays an outline with an appropriate shape in its place.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
This keyboard has seven shapes: All of the keys in the two function sections
|
|||
|
use the "FKEY" shape. Most of the keys in the alphanumeric sections, as well as
|
|||
|
four of the keys in each of the editing sections use the "NORM" shape. The keys
|
|||
|
in the first column of the left alphanumeric section and the last column of the
|
|||
|
right alphanumeric section all use the "WIDE" shape. Two keys in each of the
|
|||
|
editing sections use the "TALL" shape. The "LED" shape describes the three
|
|||
|
small, round indicators between the function and alphabetic sections. The
|
|||
|
"LOGO" shape describes the keyboard logo, and the "EDGE" shape describes the
|
|||
|
outline of the keyboard as a whole.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
The keyboard itself is white, as are all of the keys except for the eight keys
|
|||
|
that make up the home row, which use the "grey20" color. It isn’t really
|
|||
|
visible in this picture, but the three indicators have an "on" color of "green"
|
|||
|
and are "green30" when they are turned off. The keys in the alphanumeric and
|
|||
|
editing sections all have a (vertical) gap of 0.5mm; the keys in the two
|
|||
|
function sections have a (horizontal) gap of 3mm.
|
|||
|
</para>
|
|||
|
|
|||
|
|
|||
|
<para>
|
|||
|
Many of the keys in the right alphanumeric section, and the rightmost key in
|
|||
|
the right editing section are drawn with two names in this image. Those are
|
|||
|
overlay keys; the bottom key name is the normal name while the overlay name is
|
|||
|
printed at the top. For example, the right editing section has a single overlay
|
|||
|
key entry, which specifies an <emphasis>
|
|||
|
under</emphasis>
|
|||
|
name of <emphasis>
|
|||
|
<SPCE></emphasis>
|
|||
|
and an <emphasis>
|
|||
|
over</emphasis>
|
|||
|
name of <emphasis>
|
|||
|
<KP0></emphasis>
|
|||
|
, which indicates that the key in question is usually the shift key, but can
|
|||
|
behave like the <emphasis>
|
|||
|
0</emphasis>
|
|||
|
key on the numeric keypad when an overlay is active.
|
|||
|
</para>
|
|||
|
</sect1>
|
|||
|
</chapter>
|