summaryrefslogtreecommitdiff
path: root/specs/shapelib.ms
diff options
context:
space:
mode:
Diffstat (limited to 'specs/shapelib.ms')
-rw-r--r--specs/shapelib.ms556
1 files changed, 556 insertions, 0 deletions
diff --git a/specs/shapelib.ms b/specs/shapelib.ms
new file mode 100644
index 0000000..e8fcdc8
--- /dev/null
+++ b/specs/shapelib.ms
@@ -0,0 +1,556 @@
+.\" Use -ms and macros.t
+.\" $Xorg: shapelib.ms,v 1.3 2000/08/17 19:42:36 cpqbld Exp $
+.\" $XdotOrg: xc/doc/specs/Xext/shapelib.ms,v 1.2 2004/04/23 18:42:18 eich Exp $
+.\" edited for DP edits and code consistency w/ core protocol/xlib 4/1/96
+.EH ''''
+.OH ''''
+.EF ''''
+.OF ''''
+.ps 10
+.nr PS 10
+\&
+.sp 8
+.ce 3
+\s+2\fBX Nonrectangular Window
+
+Shape Extension Library\fP\s-2
+.sp 3
+.ce 3
+Version 1.0
+X Consortium Standard
+X Version 11, Release 6.8
+.sp 6
+.ce 4
+\s-1Keith Packard
+.sp 6p
+MIT X Consortium
+.ps 9
+.nr PS 9
+.sp 8
+.LP
+Copyright \(co 1989 X Consortium
+.LP
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the ``Software''), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+.LP
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+.LP
+THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+.LP
+Except as contained in this notice, the name of the X Consortium shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the X Consortium.
+.ps 10
+.nr PS 10
+.bp 1
+.EH ''X Nonrectangular Window Shape Extension Library''
+.OH ''X Nonrectangular Window Shape Extension Library''
+.EF ''\fB % \fP''
+.OF ''\fB % \fP''
+.NH 1
+Overview
+.LP
+This extension provides arbitrary window and border shapes within the X11
+protocol.
+.LP
+The restriction of rectangular windows within the X protocol is a significant
+limitation in the implementation of many styles of user interface. For
+example, many transient windows would like to display a ``drop shadow'' to
+give the illusion of 3 dimensions. As another example, some user interface
+style guides call for buttons with rounded corners; the full simulation of a
+nonrectangular shape, particularly with respect to event distribution and
+cursor shape, is not possible within the core X protocol. As a final
+example, round clocks and nonrectangular icons are desirable visual addition
+to the desktop.
+.LP
+This extension provides mechanisms for changing the visible shape of a
+window to an arbitrary, possibly disjoint, nonrectangular form. The intent
+of the extension is to supplement the existing semantics, not replace them.
+In particular, it is desirable for clients that are unaware of the
+extension to still be able to cope reasonably with shaped windows. For
+example, window managers should still be able to negotiate screen
+real estate in rectangular pieces. Toward this end, any shape specified for
+a window is clipped by the bounding rectangle for the window as specified by
+the window's geometry in the core protocol. An expected convention would be
+that client programs expand their shape to fill the area offered by the
+window manager.
+.NH 1
+Description
+.LP
+Each window (even with no shapes specified) is defined by two regions: the
+\fIbounding region\fP and the \fIclip region\fP. The bounding region is the area of the
+parent window that the window will occupy (including border). The clip region
+is the subset of the bounding region that is available for subwindows and
+graphics. The area between the bounding region and the clip region is defined
+to be the border of the window.
+.LP
+A nonshaped window will have a bounding region that is a rectangle
+spanning the window, including its border; the clip region will be a rectangle
+filling the inside dimensions (not including the border). In this document,
+these areas are referred to as the \fIdefault bounding region\fP and the
+\fIdefault clip region\fP. For a window with inside size of \fIwidth\fP by
+\fIheight\fP and border width \fIbwidth\fP, the default bounding and clip
+regions are the rectangles (relative to the window origin):
+.LP
+.sM
+.Ds 0
+bounding.x = -\fIbwidth\fP
+bounding.y = -\fIbwidth\fP
+bounding.width = \fIwidth\fP + 2 * \fIbwidth\fP
+bounding.height = \fIheight\fP + 2 * \fIbwidth\fP
+
+clip.x = 0
+clip.y = 0
+clip.width = \fIwidth\fP
+clip.height = \fIheight\fP
+.De
+.LP
+.eM
+This extension allows a client to modify either or both of the bounding or
+clip regions by specifying new regions that combine with the default
+regions. These new regions are called the \fIclient bounding region\fP and
+the \fIclient clip region\fP. They are specified relative to the origin of
+the window and are always defined by offsets relative to the window origin
+(that is, region adjustments are not required when the window is moved).
+Three mechanisms for specifying regions are provided: a list of rectangles,
+a bitmap, and an existing bounding or clip region from a window. This is
+modeled on the specification of regions in graphics contexts in the core
+protocol and allows a variety of different uses of the extension.
+.LP
+When using an existing window shape as an operand in specifying a new shape,
+the client region is used, unless none has been set, in which case the
+default region is used instead.
+.LP
+The \fIeffective bounding region\fP of a window is defined to be the intersection of
+the client bounding region with the default bounding region. Any portion of
+the client bounding region that is not included in the default bounding
+region will not be included in the effective bounding region on the screen.
+This means that window managers (or other geometry managers) used to dealing
+with rectangular client windows will be able to constrain the client to a
+rectangular area of the screen.
+.LP
+Construction of the effective bounding region is dynamic; the client bounding
+region is not mutated to obtain the effective bounding region. If a client
+bounding region is specified that extends beyond the current default bounding
+region, and the window is later enlarged, the effective bounding region will
+be enlarged to include more of the client bounding region.
+.LP
+The \fIeffective clip region\fP of a window is defined to be the intersection of the
+client clip region with both the default clip region and the client bounding
+region. Any portion of the client clip region that is not included in both
+the default clip region and the client bounding region will not be included in
+the effective clip region on the screen.
+.LP
+Construction of the effective clip region is dynamic; the client clip region is
+not mutated to obtain the effective clip region. If a client clip region is
+specified that extends beyond the current default clip region and the
+window or its bounding region is later enlarged, the effective clip region will
+be enlarged to include more of the client clip region if it is included in
+the effective bounding region.
+.LP
+The border of a window is defined to be the difference between the effective
+bounding region and the effective clip region. If this region is empty, no
+border is displayed. If this region is nonempty, the border is filled
+using the border-tile or border-pixel of the window as specified in the core
+protocol. Note that a window with a nonzero border width will never be able
+to draw beyond the default clip region of the window. Also note that a zero
+border width does not prevent a window from having a border, since the clip
+shape can still be made smaller than the bounding shape.
+.LP
+All output to the window and visible regions of any subwindows will be
+clipped to the effective clip region. The server must not retain window
+contents beyond the effective bounding region with backing store. The window's
+origin (for graphics operations, background tiling, and subwindow placement)
+is not affected by the existence of a bounding region or clip region.
+.LP
+Areas that are inside the default bounding region but outside the effective
+bounding region are not part of the window; these areas of the screen will
+be occupied by other windows. Input events that occur within the default
+bounding region but outside the effective bounding region will be delivered as
+if the window was not occluding the event position. Events that occur in
+a nonrectangular border of a window will be delivered to that window, just
+as for events that occur in a normal rectangular border.
+.LP
+An
+.PN InputOnly
+window can have its bounding region set, but it is a
+.PN Match
+error to attempt to set a clip region on an
+.PN InputOnly
+window or to specify its clip region as a source to a request
+in this extension.
+.LP
+The server must accept changes to the clip region of a root window, but
+the server is permitted to ignore requested changes to the bounding region
+of a root window. If the server accepts bounding region changes, the contents
+of the screen outside the bounding region are implementation dependent.
+.NH 1
+C Language Binding
+.LP
+The C functions provide direct access to the protocol and add no additional
+semantics.
+.LP
+The include file for this extension is
+.Pn < X11/extensions/shape.h >.
+The defined shape kinds are
+.PN ShapeBounding
+and
+.PN ShapeClip .
+The defined region operations are
+.PN ShapeSet ,
+.PN ShapeUnion ,
+.PN ShapeIntersect ,
+.PN ShapeSubtract ,
+and
+.PN ShapeInvert .
+.sM
+.FD 0
+Bool
+XShapeQueryExtension(\fIdisplay\fP\^, \fIevent_base\fP\^, \fIerror_base\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ int *\fIevent_base\fP\^; /* RETURN */
+.br
+ int *\fIerror_base\fP\^; /* RETURN */
+.FN
+.LP
+.eM
+.PN XShapeQueryExtension
+returns
+.PN True
+if the specified display supports the SHAPE extension else
+.PN False .
+If the extension is supported, *event_base is set to the event number for
+.PN ShapeNotify
+events and *error_base would be set to the error number for the first error for
+this extension.
+Because no errors are defined for this version of the extension,
+the value returned here is not defined (nor useful).
+.LP
+.sp
+.sM
+.FD 0
+Status
+XShapeQueryVersion(\fIdisplay\fP\^, \fImajor_version\fP\^, \fIminor_version\fP\^)
+.br
+ Display *\fIdisplay\fP;
+.br
+ int *\fImajor_version\fP, *\fIminor_version\fP\^; /* RETURN */
+.FN
+.LP
+.eM
+If the extension is supported,
+.PN XShapeQueryVersion
+sets the major and minor version numbers of the
+extension supported by the display and returns a nonzero value.
+Otherwise, the arguments are not set and zero is returned.
+.LP
+.sp
+.sM
+.FD 0
+XShapeCombineRegion(\fIdisplay\fP\^, \fIdest\fP\^, \fIdest_kind\fP\^, \
+\fIx_off\fP\^, \fIy_off\fP\^, \fIregion\fP\^, \fIop\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIdest\fP\^;
+.br
+ int \fIdest_kind\fP\^, \fIop\fP\^, \fIx_off\fP\^, \fIy_off\fP\^;
+.br
+ REGION *\fIregion\fP\^;
+.FN
+.LP
+.eM
+.PN XShapeCombineRegion
+converts the specified region into a list of rectangles and calls
+.PN XShapeCombineRectangles .
+.LP
+.sp
+.sM
+.FD 0
+XShapeCombineRectangles(\fIdisplay\fP\^, \fIdest\fP\^, \fIdest_kind\fP\^, \
+\fIx_off\fP\^, \fIy_off\fP\^, \fIrectangles\fP\^, \fIn_rects\fP\^, \fIop\fP\^, \
+\fIordering\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIdest\fP\^;
+.br
+ int \fIdest_kind\fP\^, \fIn_rects\fP\^, \fIop\fP\^, \fIx_off\fP\^, \
+\fIy_off\fP\^, \fIordering\fP\^;
+.br
+ XRectangle *\fIrectangles\fP\^;
+.FN
+.LP
+.eM
+If the extension is supported,
+.PN XShapeCombineRectangles
+performs a
+.PN ShapeRectangles
+operation; otherwise, the request is ignored.
+.LP
+.sp
+.sM
+.FD 0
+XShapeCombineMask(\fIdisplay\fP\^, \fIdest\fP\^, \fIdest_kind\fP\^, \
+\fIx_off\fP\^, \fIy_off\fP\^, \fIsrc\fP\^, \fIop\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIdest\fP\^;
+.br
+ int \fIdest_kind\fP\^, \fIop\fP\^, \fIx_off\fP\^, \fIy_off\fP\^;
+.br
+ Pixmap \fIsrc\fP\^;
+.FN
+.LP
+.eM
+If the extension is supported,
+.PN XShapeCombineMask
+performs a
+.PN ShapeMask
+operation; otherwise, the request is ignored.
+.LP
+.sp
+.sM
+.FD 0
+XShapeCombineShape(\fIdisplay\fP\^, \fIdest\fP\^, \fIdest_kind\fP\^, \
+\fIx_off\fP\^, \fIy_off\fP\^, \fIsrc\fP\^, \fIsrc_kind\fP\^, \fIop\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIdest\fP\^, \fIsrc\fP\^;
+.br
+ int \fIdest_kind\fP\^, \fIsrc_kind\fP\^, \fIop\fP\^, \fIx_off\fP\^, \fIy_off\fP\^;
+.FN
+.LP
+.eM
+If the extension is supported,
+.PN XShapeCombineShape
+performs a
+.PN ShapeCombine
+operation; otherwise, the request is ignored.
+.LP
+.sp
+.sM
+.FD 0
+XShapeOffsetShape(\fIdisplay\fP\^, \fIdest\fP\^, \fIdest_kind\fP\^, \
+\fIx_off\fP\^, \fIy_off\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIdest\fP\^;
+.br
+ int \fIdest_kind\fP\^, fIx_off\fP\^, \fIy_off\fP\^;
+.FN
+.LP
+.eM
+If the extension is supported,
+.PN XShapeOffsetShape
+performs a
+.PN ShapeOffset
+operation; otherwise, the request is ignored.
+.LP
+.sp
+.sM
+.FD 0
+Status XShapeQueryExtents(\fIdisplay\fP\^, \fIwindow\fP\^, \
+\fIbounding_shaped\fP\^, \fIx_bounding\fP\^, \fIy_bounding\fP\^,
+.br
+ \fIw_bounding\fP\^, \ \fIh_bounding\fP\^, \fIclip_shaped\fP\^, \
+\fIx_clip\fP\^, \fIy_clip\fP\^, \fIw_clip\fP\^, \fIh_clip\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIwindow\fP\^;
+.br
+ Bool *\fIbounding_shaped\fP\^, *\fIclip_shaped\fP\^; /* RETURN */
+.br
+ int *\fIx_bounding\fP\^, *\fIy_bounding\fP\^, *\fIx_clip\fP\^, \
+*\fIy_clip\fP\^; /* RETURN */
+.br
+ unsigned int *\fIw_bounding\fP\^, *\fIh_bounding\fP\^, *\fIw_clip\fP\^, \
+* \fIh_clip\fP\^; /* RETURN */
+.FN
+.LP
+.eM
+If the extension is supported,
+.PN XShapeQueryExtents
+sets x_bounding, y_bounding, w_bounding, h_bounding to the extents of the
+bounding shape and sets x_clip, y_clip, w_clip, h_clip to the extents of
+the clip shape. For unspecified client regions, the extents of the
+corresponding default region are used.
+.LP
+If the extension is supported,
+a nonzero value is returned; otherwise, zero is returned.
+.LP
+.sp
+.sM
+.FD 0
+XShapeSelectInput(\fIdisplay\fP\^, \fIwindow\fP\^, \fImask\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIwindow\fP\^;
+.br
+ unsigned long \fImask\fP\^;
+.FN
+.LP
+.eM
+To make this extension more compatible with other interfaces, although
+only one event type can be selected via the extension,
+.PN XShapeSelectInput
+provides a general mechanism similar to the standard Xlib binding for
+window events. A mask value has been defined,
+.PN ShapeNotifyMask
+that is the only valid bit in mask that may be specified.
+The structure for this event is defined as follows:
+.LP
+.sM
+.Ds 0
+.TA 1.5i
+.ta 1.5i
+typedef struct {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came frome a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* window of event */
+ int kind; /* ShapeBounding or ShapeClip */
+ int x, y; /* extents of new region */
+ unsigned width, height;
+ Time time; /* server timestamp when region changed */
+ Bool shaped; /* true if the region exists */
+} XShapeEvent;
+.De
+.LP
+.eM
+.LP
+.sM
+.FD 0
+unsigned long
+XShapeInputSelected(\fIdisplay\fP\^, \fIwindow\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIwindow\fP\^;
+.FN
+.LP
+.eM
+.PN XShapeInputSelected
+returns the current input mask for extension events on the specified
+window; the value returned if
+.PN ShapeNotify
+is selected for is
+.PN ShapeNotifyMask ;
+otherwise, it returns zero.
+If the extension is not supported, it returns zero.
+.LP
+.sp
+.sM
+.FD 0
+XRectangle *
+XShapeGetRectangles(\fIdisplay\fP\^, \fIwindow\fP\^, \fIkind\fP\^, \
+\fIcount\fP\^, \fIordering\fP\^)
+.br
+ Display *\fIdisplay\fP\^;
+.br
+ Window \fIwindow\fP\^;
+.br
+ int \fIkind\fP\^;
+.br
+ int *\fIcount\fP\^; /* RETURN */
+.br
+ int *\fIordering\fP\^; /* RETURN */
+.FN
+.LP
+.eM
+If the extension is not supported,
+.PN XShapeGetRectangles
+returns NULL.
+Otherwise, it returns a list of rectangles that describe the region
+specified by kind.
+.NH 1
+Glossary
+.LP
+.KS
+\fBbounding region\fP
+.IP
+The area of the parent window that this window will occupy. This area is
+divided into two parts: the border and the interior.
+.KE
+.LP
+.KS
+\fBclip region\fP
+.IP
+The interior of the window, as a subset of the bounding region. This
+region describes the area that will be painted with the window background
+when the window is cleared, will contain all graphics output to the window,
+and will clip any subwindows.
+.KE
+.LP
+.KS
+\fBdefault bounding region\fP
+.IP
+The rectangular area, as described by the core protocol window size, that
+covers the interior of the window and its border.
+.KE
+.LP
+.KS
+\fBdefault clip region\fP
+.IP
+The rectangular area, as described by the core protocol window size, that
+covers the interior of the window and excludes the border.
+.KE
+.LP
+.KS
+\fBclient bounding region\fP
+.IP
+The region associated with a window that is directly modified via this
+extension when specified by
+.PN ShapeBounding .
+This region is used in conjunction with the default bounding region
+to produce the effective bounding region.
+.KE
+.LP
+.KS
+\fBclient clip region\fP
+.IP
+The region associated with a window that is directly modified via this
+extension when specified by
+.PN ShapeClip .
+This region is used in conjunction with the default clip region
+and the client bounding region to produce the effective clip region.
+.KE
+.LP
+.KS
+\fBeffective bounding region\fP
+.IP
+The actual shape of the window on the screen, including border and interior
+(but excluding the effects of overlapping windows). When a window has a client
+bounding region, the effective bounding region is the intersection of the
+default bounding region and the client bounding region. Otherwise, the
+effective bounding region is the same as the default bounding region.
+.KE
+.LP
+.KS
+\fBeffective clip region\fP
+.IP
+The actual shape of the interior of the window on the screen (excluding the
+effects of overlapping windows). When a window has a client clip region or
+a client bounding region, the effective clip region is the intersection of
+the default clip region, the client clip region (if any) and the client
+bounding region (if any). Otherwise, the effective clip region is the
+same as the default clip region.
+.KE