Tk_Get3DBorder(3) Tk Library Procedures Tk_Get3DBorder(3)_________________________________________________________________NAME
Tk_Get3DBorder, Tk_Draw3DRectangle, Tk_Fill3DRectangle,
Tk_Draw3DPolygon, Tk_Fill3DPolygon, Tk_3DVerticalBevel,
Tk_3DHorizontalBevel, Tk_SetBackgroundFromBorder,
Tk_NameOf3DBorder, Tk_3DBorderColor, Tk_3DBorderGC,
Tk_Free3DBorder - draw borders with three-dimensional
appearance
SYNOPSIS
#include <tk.h>
Tk_3DBorder
Tk_Get3DBorder(interp, tkwin, colorName)
void
Tk_Draw3DRectangle(tkwin, drawable, border, x, y, width, height, borderWidth, relief)
void
Tk_Fill3DRectangle(tkwin, drawable, border, x, y, width, height, borderWidth, relief)
void
Tk_Draw3DPolygon(tkwin, drawable, border, pointPtr, numPoints, polyBorderWidth, leftRelief)
void
Tk_Fill3DPolygon(tkwin, drawable, border, pointPtr, numPoints, polyBorderWidth, leftRelief)
void
Tk_3DVerticalBevel(tkwin, drawable, border, x, y, width, height, leftBevel, relief)
void
Tk_3DHorizontalBevel(tkwin, drawable, border, x, y, width, height, leftIn, rightIn, topBevel, relief)
void
Tk_SetBackgroundFromBorder(tkwin, border)
char *
Tk_NameOf3DBorder(border)
XColor *
Tk_3DBorderColor(border)
GC *
Tk_3DBorderGC(tkwin, border, which)
Tk_Free3DBorder(border)ARGUMENTS
Tcl_Interp *interp (in) Interpreter to use
for error reporting.
Tk_Window tkwin (in) Token for window
(for all procedures
Tk 4.0 1
Tk_Get3DBorder(3) Tk Library Procedures Tk_Get3DBorder(3)
except Tk_Get3DBor-
der, must be the
window for which the
border was allo-
cated).
Tk_Uid colorName (in) Textual description
of color correspond-
ing to background
(flat areas). Illu-
minated edges will
be brighter than
this and shadowed
edges will be darker
than this.
Drawable drawable (in) X token for window
or pixmap; indi-
cates where graphics
are to be drawn.
Must either be the X
window for tkwin or
a pixmap with the
same screen and
depth as tkwin.
Tk_3DBorder border (in) Token for border
previously allocated
in call to
Tk_Get3DBorder.
int x (in) X-coordinate of
upper-left corner of
rectangle describing
border or bevel, in
pixels.
int y (in) Y-coordinate of
upper-left corner of
rectangle describing
border or bevel, in
pixels.
int width (in) Width of rectangle
describing border or
bevel, in pixels.
int height (in) Height of rectangle
describing border or
bevel, in pixels.
int borderWidth (in) Width of border in
pixels. Positive
means border is
Tk 4.0 2
Tk_Get3DBorder(3) Tk Library Procedures Tk_Get3DBorder(3)
inside rectangle
given by x, y,
width, height, nega-
tive means border is
outside rectangle.
int relief (in) Indicates 3-D posi-
tion of interior of
object relative to
exterior; should be
TK_RELIEF_RAISED,
TK_RELIEF_SUNKEN,
TK_RELIEF_GROOVE, or
TK_RELIEF_RIDGE (may
also be
TK_RELIEF_FLAT for
Tk_Fill3DRectangle).
XPoint *pointPtr (in) Pointer to array of
points describing
the set of vertices
in a polygon. The
polygon need not be
closed (it will be
closed automatically
if it isn't).
int numPoints (in) Number of points at
*pointPtr.
int polyBorderWidth(in) Width of border in
pixels. If posi-
tive, border is
drawn to left of
trajectory given by
pointPtr; if nega-
tive, border is
drawn to right of
trajectory. If
leftRelief is
TK_RELIEF_GROOVE or
TK_RELIEF_RIDGE then
the border is cen-
tered on the trajec-
tory.
int leftRelief (in) Height of left side
of polygon's path
relative to right.
TK_RELIEF_RAISED
means left side
should appear higher
and TK_RELIEF_SUNKEN
means right side
Tk 4.0 3
Tk_Get3DBorder(3) Tk Library Procedures Tk_Get3DBorder(3)
should appear
higher;
TK_RELIEF_GROOVE and
TK_RELIEF_RIDGE mean
the obvious things.
For Tk_Fill3DPoly-
gon, TK_RELIEF_FLAT
may also be speci-
fied to indicate no
difference in
height.
int leftBevel (in) Non-zero means this
bevel forms the left
side of the object;
zero means it forms
the right side.
int leftIn (in) Non-zero means that
the left edge of the
horizontal bevel
angles in, so that
the bottom of the
edge is farther to
the right than the
top. Zero means the
edge angles out, so
that the bottom is
farther to the left
than the top.
int rightIn (in) Non-zero means that
the right edge of
the horizontal bevel
angles in, so that
the bottom of the
edge is farther to
the left than the
top. Zero means the
edge angles out, so
that the bottom is
farther to the right
than the top.
int topBevel (in) Non-zero means this
bevel forms the top
side of the object;
zero means it forms
the bottom side.
int which (in) Specifies which of
the border's graph-
ics contexts is
desired. Must be
Tk 4.0 4
Tk_Get3DBorder(3) Tk Library Procedures Tk_Get3DBorder(3)
TK_3D_FLAT_GC,
TK_3D_LIGHT_GC, or
TK_3D_DARK_GC.
_________________________________________________________________DESCRIPTION
These procedures provide facilities for drawing window
borders in a way that produces a three-dimensional appear-
ance. Tk_Get3DBorder allocates colors and Pixmaps needed
to draw a border in the window given by the tkwin argu-
ment. The colorName argument indicates what colors should
be used in the border. ColorName may be any value accept-
able to Tk_GetColor. The color indicated by colorName
will not actually be used in the border; it indicates the
background color for the window (i.e. a color for flat
surfaces). The illuminated portions of the border will
appear brighter than indicated by colorName, and the shad-
owed portions of the border will appear darker than color-
Name.
Tk_Get3DBorder returns a token that may be used in later
calls to Tk_Draw3DRectangle. If an error occurs in allo-
cating information for the border (e.g. colorName isn't a
legal color specifier), then NULL is returned and an error
message is left in interp->result.
Once a border structure has been created, Tk_Draw3DRectan-
gle may be invoked to draw the border. The tkwin argument
specifies the window for which the border was allocated,
and drawable specifies a window or pixmap in which the
border is to be drawn. Drawable need not refer to the
same window as tkwin, but it must refer to a compatible
pixmap or window: one associated with the same screen and
with the same depth as tkwin. The x, y, width, and height
arguments define the bounding box of the border region
within drawable (usually x and y are zero and width and
height are the dimensions of the window), and borderWidth
specifies the number of pixels actually occupied by the
border. The relief argument indicates which of several
three-dimensional effects is desired: TK_RELIEF_RAISED
means that the interior of the rectangle should appear
raised relative to the exterior of the rectangle, and
TK_RELIEF_SUNKEN means that the interior should appear
depressed. TK_RELIEF_GROOVE and TK_RELIEF_RIDGE mean that
there should appear to be a groove or ridge around the
exterior of the rectangle.
Tk_Fill3DRectangle is somewhat like Tk_Draw3DRectangle
except that it first fills the rectangular area with the
background color (one corresponding to the colorName used
to create border). Then it calls Tk_Draw3DRectangle to
draw a border just inside the outer edge of the rectangu-
lar area. The argument relief indicates the desired
Tk 4.0 5
Tk_Get3DBorder(3) Tk Library Procedures Tk_Get3DBorder(3)
effect (TK_RELIEF_FLAT means no border should be drawn;
all that happens is to fill the rectangle with the back-
ground color).
The procedure Tk_Draw3DPolygon may be used to draw more
complex shapes with a three-dimensional appearance. The
pointPtr and numPoints arguments define a trajectory,
polyBorderWidth indicates how wide the border should be
(and on which side of the trajectory to draw it), and
leftRelief indicates which side of the trajectory should
appear raised. Tk_Draw3DPolygon draws a border around the
given trajectory using the colors from border to produce a
three-dimensional appearance. If the trajectory is non-
self-intersecting, the appearance will be a raised or
sunken polygon shape. The trajectory may be self-inter-
secting, although it's not clear how useful this is.
Tk_Fill3DPolygon is to Tk_Draw3DPolygon what
Tk_Fill3DRectangle is to Tk_Draw3DRectangle: it fills the
polygonal area with the background color from border, then
calls Tk_Draw3DPolygon to draw a border around the area
(unless leftRelief is TK_RELIEF_FLAT; in this case no
border is drawn).
The procedures Tk_3DVerticalBevel and Tk_3DHorizontalBevel
provide lower-level drawing primitives that are used by
procedures such as Tk_Draw3DRectangle. These procedures
are also useful in their own right for drawing rectilinear
border shapes. Tk_3DVerticalBevel draws a vertical
beveled edge, such as the left or right side of a rectan-
gle, and Tk_3DHorizontalBevel draws a horizontal beveled
edge, such as the top or bottom of a rectangle. Each pro-
cedure takes x, y, width, and height arguments that
describe the rectangular area of the beveled edge (e.g.,
width is the border width for Tk_3DVerticalBevel). The
leftBorder and topBorder arguments indicate the position
of the border relative to the ``inside'' of the object,
and relief indicates the relief of the inside of the
object relative to the outside. Tk_3DVerticalBevel just
draws a rectangular region. Tk_3DHorizontalBevel draws a
trapezoidal region to generate mitered corners; it should
be called after Tk_3DVerticalBevel (otherwise Tk_3DVerti-
calBevel will overwrite the mitering in the corner). The
leftIn and rightIn arguments to Tk_3DHorizontalBevel
describe the mitering at the corners; a value of 1 means
that the bottom edge of the trapezoid will be shorter than
the top, 0 means it will be longer. For example, to draw
a rectangular border the top bevel should be drawn with 1
for both leftIn and rightIn, and the bottom bevel should
be drawn with 0 for both arguments.
The procedure Tk_SetBackgroundFromBorder will modify the
background pixel and/or pixmap of tkwin to produce a
result compatible with border. For color displays, the
Tk 4.0 6
Tk_Get3DBorder(3) Tk Library Procedures Tk_Get3DBorder(3)
resulting background will just be the color given by the
colorName argument passed to Tk_Get3DBorder when border
was created; for monochrome displays, the resulting back-
ground will be a light stipple pattern, in order to dis-
tinguish the background from the illuminated portion of
the border.
Given a token for a border, the procedure Tk_NameOf3DBor-
der will return the colorName string that was passed to
Tk_Get3DBorder to create the border.
The procedure Tk_3DBorderColor returns the XColor struc-
ture that will be used for flat surfaces drawn for its
border argument by procedures like Tk_Fill3DRectangle.
The return value corresponds to the colorName passed to
Tk_Get3DBorder. The XColor, and its associated pixel
value, will remain allocated as long as border exists.
The procedure Tk_3DBorderGC returns one of the X graphics
contexts that are used to draw the border. The argument
which selects which one of the three possible GC's:
TK_3D_FLAT_GC returns the context used for flat surfaces,
TK_3D_LIGHT_GC returns the context for light shadows, and
TK_3D_DARK_GC returns the context for dark shadows.
When a border is no longer needed, Tk_Free3DBorder should
be called to release the resources associated with the
border. There should be exactly one call to Tk_Free3DBor-
der for each call to Tk_Get3DBorder.
KEYWORDS
3D, background, border, color, depressed, illumination,
polygon, raised, shadow, three-dimensional effect
Tk 4.0 7