Provided by: tk8.6-doc_8.6.14-1build1_all bug

NAME

       Tk_Alloc3DBorderFromObj,  Tk_Get3DBorder,  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_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)

       const 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 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.

       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 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.
________________________________________________________________________________________________________________

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
       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_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_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.

KEYWORDS

       3D, background, border, color, depressed, illumination, value, polygon, raised, shadow, three-dimensional
       effect