- NAME
- Tk_Alloc3DBorderFromObj, Tk_ClipDrawableToRect,
Tk_DrawHighlightBorder, Tk_Get3DBorder, Tk_Get3DBorderColors,
Tk_Get3DBorderFromObj, Tk_Draw3DRectangle, Tk_Fill3DRectangle,
Tk_Draw3DPolygon, Tk_Fill3DPolygon, Tk_3DVerticalBevel,
Tk_3DHorizontalBevel, Tk_SetBackgroundFromBorder,
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_ClipDrawableToRect(display, drawable, x, y, width,
height)
- Tk_DrawHighlightBorder(tkwin, fgGC, bgGC,
highlightWidth, drawable)
- Tk_3DBorder
- Tk_Get3DBorder(interp, tkwin, colorName)
- Tk_Get3DBorderColors(border, bgColorPtr,
darkColorPtr, lightColorPtr)
- Tk_3DBorder
- Tk_Get3DBorderFromObj(tkwin, objPtr)
- Tk_Draw3DRectangle(tkwin, drawable, border, x, y,
width, height, borderWidth, relief)
- Tk_Fill3DRectangle(tkwin, drawable, border, x, y,
width, height, borderWidth, relief)
- Tk_Draw3DPolygon(tkwin, drawable, border, pointPtr,
numPoints, polyBorderWidth, leftRelief)
- Tk_Fill3DPolygon(tkwin, drawable, border, pointPtr,
numPoints, polyBorderWidth, leftRelief)
- Tk_3DVerticalBevel(tkwin, drawable, border, x, y,
width, height, leftBevel, relief)
- Tk_3DHorizontalBevel(tkwin, drawable, border, x, y,
width, height, leftIn, rightIn, topBevel, relief)
- Tk_SetBackgroundFromBorder(tkwin, border)
- const char *
- Tk_NameOf3DBorder(border)
- XColor *
- Tk_3DBorderColor(border)
- GC *
- Tk_3DBorderGC(tkwin, border, which)
- Tk_Free3DBorderFromObj(tkwin, objPtr)
- Tk_Free3DBorder(border)
- ARGUMENTS
- DESCRIPTION
- KEYWORDS
Tk_Alloc3DBorderFromObj, Tk_ClipDrawableToRect,
Tk_DrawHighlightBorder, Tk_Get3DBorder, Tk_Get3DBorderColors,
Tk_Get3DBorderFromObj, Tk_Draw3DRectangle, Tk_Fill3DRectangle,
Tk_Draw3DPolygon, Tk_Fill3DPolygon, Tk_3DVerticalBevel,
Tk_3DHorizontalBevel, Tk_SetBackgroundFromBorder,
Tk_NameOf3DBorder, Tk_3DBorderColor, Tk_3DBorderGC,
Tk_Free3DBorderFromObj, Tk_Free3DBorder — draw borders with
three-dimensional appearance
#include <tk.h>
Tk_3DBorder
Tk_Alloc3DBorderFromObj(interp, tkwin, objPtr)
Tk_ClipDrawableToRect(display, drawable, x, y, width,
height)
Tk_DrawHighlightBorder(tkwin, fgGC, bgGC, highlightWidth,
drawable)
Tk_3DBorder
Tk_Get3DBorder(interp, tkwin, colorName)
Tk_Get3DBorderColors(border, bgColorPtr, darkColorPtr,
lightColorPtr)
Tk_3DBorder
Tk_Get3DBorderFromObj(tkwin, objPtr)
Tk_Draw3DRectangle(tkwin, drawable, border, x, y, width,
height, borderWidth, relief)
Tk_Fill3DRectangle(tkwin, drawable, border, x, y, width,
height, borderWidth, relief)
Tk_Draw3DPolygon(tkwin, drawable, border, pointPtr,
numPoints, polyBorderWidth, leftRelief)
Tk_Fill3DPolygon(tkwin, drawable, border, pointPtr,
numPoints, polyBorderWidth, leftRelief)
Tk_3DVerticalBevel(tkwin, drawable, border, x, y, width,
height, leftBevel, relief)
Tk_3DHorizontalBevel(tkwin, drawable, border, x, y,
width, height, leftIn, rightIn, topBevel, relief)
Tk_SetBackgroundFromBorder(tkwin, border)
const char *
Tk_NameOf3DBorder(border)
XColor *
Tk_3DBorderColor(border)
GC *
Tk_3DBorderGC(tkwin, border, which)
Tk_Free3DBorderFromObj(tkwin, objPtr)
Tk_Free3DBorder(border)
- Tcl_Interp *interp (in)
- Interpreter to use for error reporting.
- Tk_Window tkwin
(in)
- Token for window (for all procedures except
Tk_Get3DBorder, must be the window for which the border was
allocated).
- Tcl_Obj *objPtr (in)
- Pointer to value whose value describes color corresponding to
background (flat areas). Illuminated edges will be brighter than
this and shadowed edges will be darker than this.
- const char *colorName (in)
- Same as objPtr except value is supplied as a string
rather than a value.
- 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 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 inside
rectangle given by x, y, width, height,
negative means border is outside rectangle.
- int highlightWidth (in)
- Width of ring around the outside of the widget if the widget
has received the input focus.
- int relief (in)
- Indicates 3-D position of interior of value relative to
exterior; 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_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 is not).
- 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 leftRelief 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 specified to indicate no difference in height.
- int leftBevel (in)
- Non-zero means this bevel forms the left side of the value;
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 value; 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.
- XColor *bgColorPtr (out)
- Pointer to location in which to store the background color of
the given border.
- XColor *darkColorPtr (out)
- Pointer to location in which to store the color for darker
areas of the given border.
- XColor *lightColorPtr (out)
- Pointer to location in which to store the color for lighter
areas of the given border.
- GC fgGC (in)
- Foreground X graphics context.
- GC fgGC (in)
- Background X graphics context.
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
background 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 as the
result of interpreter interp. If it returns successfully,
Tk_Alloc3DBorderFromObj caches information about the return
value in objPtr, which speeds up future calls to
Tk_Alloc3DBorderFromObj with the same objPtr and
tkwin.
Tk_ClipDrawableToRect will clip all drawing into the
drawable d to the given rectangle. If width or
height are negative, reset to no clipping. Subsequent
drawing into d is offset and clipped as specified. The
function is only used when TK_NO_DOUBLE_BUFFERING is
specified at compile time.
Tk_DrawHighlightBorder draws a rectangular ring around
the outside of a widget to indicate that it has received the input
focus. On the Macintosh, this puts a 1 pixel border in the bgGC
color between the widget and the focus ring, except in the case
where highlightWidth is 0 or 1, in which case the border is left
out. For proper Mac L&F, use highlightWidth of 3.
Tk_Get3DBorder is identical to
Tk_Alloc3DBorderFromObj except that the color is specified
with a string instead of a value. This prevents
Tk_Get3DBorder from caching the return value, so
Tk_Get3DBorder is less efficient than
Tk_Alloc3DBorderFromObj.
Tk_Get3DBorderColors returns the used colors of the given
border.
Tk_Get3DBorderFromObj returns the token for an existing
border, given the window and color name used to create the border.
Tk_Get3DBorderFromObj does not actually create the border;
it must already have been created with a previous call to
Tk_Alloc3DBorderFromObj or Tk_Get3DBorder. 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 corresponding 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 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-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 leftBorder and
topBorder arguments indicate the position of the border
relative to the “inside” of the value, and relief indicates
the relief of the inside of the value 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_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 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 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 distinguish 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
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_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.
3D, background, border, color, depressed, illumination, value, polygon, raised, shadow, three-dimensional
effect
Copyright © 1990-1993 The Regents of the
University of California.
Copyright © 1994-1998 Sun Microsystems, Inc.