Tk_3DVerticalBevel
Tk_Alloc3DBorderFromObj(3) Tk Library Procedures Tk_Alloc3DBorderFromObj(3)
______________________________________________________________________________
NAME
Tk_Alloc3DBorderFromObj, Tk_Get3DBorder, Tk_Get3DBorderFromObj,
Tk_Draw3DRectangle, Tk_Fill3DRectangle, Tk_Draw3DPolygon,
Tk_Fill3DPolygon, Tk_3DVerticalBevel, Tk_3DHorizontalBevel, Tk_SetBack-
groundFromBorder, Tk_NameOf3DBorder, Tk_3DBorderColor, Tk_3DBorderGC,
Tk_Free3DBorderFromObj, Tk_Free3DBorder - draw borders with three-
dimensional appearance
SYNOPSIS
#include <tk.h>
Tk_3DBorder |
Tk_Alloc3DBorderFromObj(interp, tkwin, objPtr) |
Tk_3DBorder |
Tk_Get3DBorder(interp, tkwin, colorName) |
Tk_3DBorder |
Tk_Get3DBorderFromObj(tkwin, objPtr) |
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_Free3DBorderFromObj(tkwin, objPtr) |
Tk_Free3DBorder(border)
ARGUMENTS
Tcl_Interp *interp (in) Interpreter to use for error
reporting.
Tk_Window tkwin (in) Token for window (for all proce-
dures except Tk_Get3DBorder, must
be the window for which the bor-
der was allocated).
Tcl_Obj *objPtr (in) Pointer to object whose value |
describes color corresponding to |
background (flat areas). Illumi- |
nated edges will be brighter than |
this and shadowed edges will be |
darker than this. |
char *color- |
Name (in) | |
Same as objPtr except value is |
supplied as a string rather than |
an object.
Drawable drawable (in) X token for window or pixmap;
indicates 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 allo-
cated 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. Posi-
tive means border is inside rect-
angle given by x, y, width,
height, negative means border is
outside rectangle.
int relief (in) Indicates 3-D position of inte-
rior of object relative to exte-
rior; should be TK_RELIEF_RAISED,
TK_RELIEF_SUNKEN,
TK_RELIEF_GROOVE,
TK_RELIEF_SOLID, or
TK_RELIEF_RIDGE (may also be
TK_RELIEF_FLAT for Tk_Fill3DRect-
angle).
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
positive, border is drawn to left
of trajectory given by pointPtr;
if negative, border is drawn to
right of trajectory. If leftRe-
lief is TK_RELIEF_GROOVE or
TK_RELIEF_RIDGE then the border
is centered on the trajectory.
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
should appear higher;
TK_RELIEF_GROOVE and
TK_RELIEF_RIDGE mean the obvious
things. For Tk_Fill3DPolygon,
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 bot-
tom 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
graphics contexts is desired.
Must be 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 appearance. Tk_Alloc3DBorderFromObj |
allocates colors and Pixmaps needed to draw a border in the window |
given by the tkwin argument. The value of objPtr is a standard Tk |
color name that determines the border colors. The color indicated by |
objPtr will not actually be used in the border; it indicates the back- |
ground color for the window (i.e. a color for flat surfaces). The |
illuminated portions of the border will appear brighter than indicated |
by objPtr, and the shadowed portions of the border will appear darker |
than objPtr. |
Tk_Alloc3DBorderFromObj returns a token that may be used in later calls |
to Tk_Draw3DRectangle. If an error occurs in allocating information |
for the border (e.g. a bogus color name was given) then NULL is |
returned and an error message is left in interp->result. If it returns |
successfully, Tk_Alloc3DBorderFromObj caches information about the |
return value in objPtr, which speeds up future calls to Tk_Alloc3DBor- |
derFromObj with the same objPtr and tkwin. |
Tk_Get3DBorder is identical to Tk_Alloc3DBorderFromObj except that the |
color is specified with a string instead of an object. This prevents |
Tk_Get3DBorder from caching the return value, so Tk_Get3DBorder is less |
efficient than Tk_Alloc3DBorderFromObj. |
Tk_Get3DBorderFromObj returns the token for an existing border, given |
the window and color name used to create the border. Tk_Get3DBorder- |
FromObj doesn't actually create the border; it must already have been |
created with a previous call to Tk_Alloc3DBorderFromObj or Tk_Get3DBor- |
der. The return value is cached in objPtr, which speeds up future |
calls to Tk_Get3DBorderFromObj with the same objPtr and tkwin.
Once a border structure has been created, Tk_Draw3DRectangle 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 corre-
sponding to the color used to create border). Then it calls
Tk_Draw3DRectangle to draw a border just inside the outer edge of the
rectangular area. The argument relief indicates the desired effect
(TK_RELIEF_FLAT means no border should be drawn; all that happens is to
fill the rectangle with the background color).
The procedure Tk_Draw3DPolygon may be used to draw more complex shapes
with a three-dimensional appearance. The pointPtr and numPoints argu-
ments define a trajectory, polyBorderWidth indicates how wide the bor-
der 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-intersecting,
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 rectangle,
and Tk_3DHorizontalBevel draws a horizontal beveled edge, such as the
top or bottom of a rectangle. Each procedure 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 leftBor-
der and topBorder arguments indicate the position of the border rela-
tive to the ``inside'' of the object, and relief indicates the relief
of the inside of the object relative to the outside. Tk_3DVertical-
Bevel just draws a rectangular region. Tk_3DHorizontalBevel draws a
trapezoidal region to generate mitered corners; it should be called
after Tk_3DVerticalBevel (otherwise Tk_3DVerticalBevel 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 argu-
ments.
The procedure Tk_SetBackgroundFromBorder will modify the background
pixel and/or pixmap of tkwin to produce a result compatible with bor-
der. For color displays, the resulting background will just be the
color specified when border was created; for monochrome displays, the
resulting background 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_NameOf3DBorder will return
the color name that was used to create the border.
The procedure Tk_3DBorderColor returns the XColor structure that will
be used for flat surfaces drawn for its border argument by procedures
like Tk_Fill3DRectangle. The return value corresponds to the color
name that was used to create the border. The XColor, and its associ-
ated 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_Free3DBorderFromObj or |
Tk_Free3DBorder should be called to release the resources associated |
with it. For Tk_Free3DBorderFromObj the border to release is specified |
with the window and color name used to create the border; for |
Tk_Free3DBorder the border to release is specified with the Tk_3DBorder |
token for the border. There should be exactly one call to |
Tk_Free3DBorderFromObj or Tk_Free3DBorder for each call to |
Tk_Alloc3DBorderFromObj or Tk_Get3DBorder.
KEYWORDS
3D, background, border, color, depressed, illumination, object, poly-
gon, raised, shadow, three-dimensional effect
Tk 8.1 Tk_Alloc3DBorderFromObj(3)