\begindata{text,538369524} \textdsversion{12} \template{be2guide} \define{global

advertisement
\begindata{text,538369524}
\textdsversion{12}
\template{be2guide}
\define{global
}
\define{underline
menu:[Font~1,Underline~41]
attr:[Flags Underline Int Set]}
\define{index
menu:[Title,Index~91]
attr:[FontFace Italic Int Set]}
\define{indexi
menu:[Title,InvisibleIndex~92]
attr:[Script PreviousScriptMovement Point -2]
attr:[Flags Hidden Int Set]
attr:[FontFace Italic Int Set]}
\define{itemize
}
\define{fixedtext
menu:[Region~4,Fixedtext]
attr:[Justification LeftJustified Point 0]
attr:[FontFace FixedFace Int Set]
attr:[FontFamily AndyType Int 0]
attr:[FontSize ConstantFontSize Point 10]}
\define{fixedindent
menu:[Region~4,Fixedindent]
attr:[LeftMargin LeftMargin Cm 83230]
attr:[Justification LeftJustified Point 0]
attr:[FontFace FixedFace Int Set]
attr:[FontFamily AndyType Int 0]
attr:[FontSize ConstantFontSize Point 10]}
\define{paramname
menu:[Font~1,Paramname]
attr:[FontFace Italic Int Set]}
\formatnote{\chapter{Graphic}}\indexi{Graphic}
You should use instances of the class \italic{graphic} to do output to
workstation displays. For example, to draw text and put box around it,
you
would make calls to the methods and class procedures provided by the
class
\italic{graphic}. The class graphic provides methods for drawing lines,
shapes, and text. It also provides methods for transferring entire
blocks of
bits.
The class \italic{graphic} provides an output interface to hardwaredependent
window management systems. As an application programmer, you should
understand why application programs should not display their pictures
directly
to an underlying window management system: application programs must
often be
ported to other workstations that will eventually be deployed. The
workstations often have similar, but not identical display capabilities
and
the hardware can be significantly different; the underlying window
manager may
be different. To insure portability of your application, you should
never
make direct calls to an underlying window management system; you should
always
use the \italic{graphic} class procedures and methods; doing so will
maximize
the device independence and portabilty of your application program.
Other Andrew Toolkit classes use the class \italic{graphic} to do output,
and
if you use them, you will be using \italic{graphic} indirectly to do your
output. For example, if your application uses the \italic{textview/text}
classes, then your application will also be using graphic to do text
output--only indirectly.
\section{Quick reference list for Graphic}
\fixedtext{void \bold{graphic_}BitBltSize }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{srcX}, long \paramname{srcY}, long
\paramname{dstX}, long \paramname{dstY}, long \paramname{Width}, long
\paramname{Height}, struct graphic *\paramname{DstGraphic}, long
\paramname{clipX}, long \paramname{clipY}, long \paramname{clipWidth},
long
\paramname{clipHeight});}
\fixedtext{void \bold{graphic_}BitBlt }\fixedindent{(struct graphic
*\paramname{graphic}, struct rectangle *\paramname{SrcRect}, struct
graphic
*\paramname{DestGraphic}, struct point *\paramname{DstOrigin}, struct
rectangle *\paramname{ClipRectList});}
\fixedtext{struct graphic *\bold{graphic_}BlackPattern
}\fixedindent{(struct
graphic *\paramname{graphic});}
\fixedtext{void \bold{graphic_}ClearClippingRect }\fixedindent{(struct
graphic
*\paramname{graphic});}
\fixedtext{struct graphic *\bold{graphic_}CreateGraphic
}\fixedindent{();}
\fixedtext{void \bold{graphic_}DrawArcSize }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{x}, long \paramname{y}, long
\paramname{width}, long \paramname{height}, short \paramname{StartAngle},
short \paramname{OffsetAngle});}
\fixedtext{void \bold{graphic_}DrawArc }\fixedindent{(struct graphic
*\paramname{graphic}, struct rectangle *\paramname{EnclRect}, short
\paramname{StartAngle}, short \paramname{OffsetAngle});}
\fixedtext{void \bold{graphic_}DrawLineToPt }\fixedindent{(struct graphic
*\paramname{graphic}, struct point *\paramname{LineEnd});}
\fixedtext{void \bold{graphic_}DrawLineTo }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{XEnd}, long \paramname{YEnd});}
\fixedtext{void \bold{graphic_}DrawLine }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{DeltaX}, long \paramname{DeltaY});}
\fixedtext{void \bold{graphic_}DrawOvalSize }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{x}, long \paramname{y}, long
\paramname{width}, long \paramname{height});}
\fixedtext{void \bold{graphic_}DrawOval }\fixedindent{(struct graphic
*\paramname{graphic}, struct rectangle *\paramname{Rect});}
\fixedtext{void \bold{graphic_}DrawPath }\fixedindent{(struct graphic
*\paramname{graphic}, struct point *\paramname{PointArray}, short
\paramname{PointCount});}
\fixedtext{void \bold{graphic_}DrawPolygon }\fixedindent{(struct graphic
*\paramname{graphic}, struct point *\paramname{PointArray}, short
\paramname{PointCount});}
\fixedtext{void \bold{graphic_}DrawRectSize }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{x}, long \paramname{y}, long
\paramname{width}, long \paramname{height});}
\fixedtext{void \bold{graphic_}DrawRect }\fixedindent{(struct graphic
*\paramname{graphic}, struct rectangle *\paramname{Rect});}
\fixedtext{void \bold{graphic_}DrawRgn }\fixedindent{(struct graphic
*\paramname{graphic}, struct region *\paramname{Rgn});}
\fixedtext{void \bold{graphic_}DrawRRectSize }\fixedindent{(struct
graphic
*\paramname{graphic}, long \paramname{x}, long \paramname{y}, long
\paramname{width}, long \paramname{height}, long \paramname{cornerWidth},
long
\paramname{cornerHeight});}
\fixedtext{void \bold{graphic_}DrawRRect }\fixedindent{(struct graphic
*\paramname{graphic}, struct rectangle *\paramname{OuterBox}, struct
rectangle
*\paramname{InnerBox});}
\fixedtext{void \bold{graphic_}DrawString }\fixedindent{(struct graphic
*\paramname{graphic}, char *\paramname{Text}, short
\paramname{Operation});}
\fixedtext{void \bold{graphic_}DrawText }\fixedindent{(struct graphic
*\paramname{graphic}, char *\paramname{Text}, long
\paramname{TextLength},
short \paramname{Operation});}
\fixedtext{void \bold{graphic_}DrawTrapezoid }\fixedindent{(struct
graphic
*\paramname{graphic}, long \paramname{topX}, long \paramname{topY}, long
\paramname{topWidth}, long \paramname{bottomX}, long \paramname{bottomY},
long
\paramname{bottomWidth});}
\fixedtext{void \bold{graphic_}EraseRectSize }\fixedindent{(struct
graphic
*\paramname{graphic}, long \paramname{x}, long \paramname{y}, long
\paramname{width}, long \paramname{height});}
\fixedtext{void \bold{graphic_}EraseRect }\fixedindent{(struct graphic
*\paramname{graphic}, struct rectangle *\paramname{Rect});}
\fixedtext{void \bold{graphic_}EraseVisualRect }\fixedindent{(struct
graphic
*\paramname{graphic});}
\fixedtext{void \bold{graphic_}FillArcSize }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{x}, long \paramname{y}, long
\paramname{width}, long \paramname{height}, short \paramname{StartAngle},
short \paramname{OffsetAngle}, struct graphic *\paramname{Tile});}
\fixedtext{void \bold{graphic_}FillArc }\fixedindent{(struct graphic
*\paramname{graphic}, struct rectangle *\paramname{EnclRect}, short
\paramname{StartAngle}, short \paramname{OffsetAngle}, struct graphic
*\paramname{Tile});}
\fixedtext{void \bold{graphic_}FillOvalSize }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{x}, long \paramname{y}, long
\paramname{width}, long \paramname{height}, struct graphic
*\paramname{Tile});}
\fixedtext{void \bold{graphic_}FillOval }\fixedindent{(struct graphic
*\paramname{graphic}, struct rectangle *\paramname{Rect}, struct graphic
*\paramname{Tile});}
\fixedtext{void \bold{graphic_}FillPolygon }\fixedindent{(struct graphic
*\paramname{graphic}, struct point *\paramname{PointArray}, short
\paramname{PointCount}, struct graphic *\paramname{Tile});}
\fixedtext{void \bold{graphic_}FillRectSize }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{x}, long \paramname{y}, long
\paramname{width}, long \paramname{height}, struct graphic
*\paramname{Tile});}
\fixedtext{void \bold{graphic_}FillRect }\fixedindent{(struct graphic
*\paramname{graphic}, struct rectangle *\paramname{Rect}, struct graphic
*\paramname{Tile});}
\fixedtext{void \bold{graphic_}FillRgn }\fixedindent{(struct graphic
*\paramname{graphic}, struct region *\paramname{Rgn}, struct graphic
*\paramname{Tile});}
\fixedtext{void \bold{graphic_}FillRRectSize }\fixedindent{(struct
graphic
*\paramname{graphic}, long \paramname{x}, long \paramname{y}, long
\paramname{width}, long \paramname{height}, long \paramname{cornerWidth},
long
\paramname{cornerHeight}, struct graphic *\paramname{Tile});}
\fixedtext{void \bold{graphic_}FillRRect }\fixedindent{(struct graphic
*\paramname{graphic}, struct rectangle *\paramname{OuterBox}, struct
rectangle
*\paramname{InnerBox}, struct graphic *\paramname{Tile});}
\fixedtext{void \bold{graphic_}FillTrapezoid }\fixedindent{(struct
graphic
*\paramname{graphic}, long \paramname{topX}, long \paramname{topY}, long
\paramname{topWidth}, long \paramname{bottomX}, long \paramname{bottomY},
long
\paramname{bottomWidth}, struct graphic *\paramname{Tile});}
\fixedtext{void \bold{graphic_}FinalizeObject }\fixedindent{(struct
graphic
*\paramname{self});}
\fixedtext{void \bold{graphic_}FlushGraphics }\fixedindent{(struct
graphic
*\paramname{graphic});}
\fixedtext{void \bold{graphic_}GetBackgroundColor }\fixedindent{(struct
graphic *\paramname{graphic}, char **\paramname{colorName}, long
*\paramname{red}, long *\paramname{green}, long *\paramname{blue});}
\fixedtext{void \bold{graphic_}GetClippingRect }\fixedindent{(struct
graphic
*\paramname{graphic}, struct rectangle *\paramname{Rect});}
\fixedtext{void \bold{graphic_}GetCurrentPt }\fixedindent{(struct graphic
*\paramname{graphic}, struct point *\paramname{Pt});}
\fixedtext{void \bold{graphic_}GetDefaultColors }\fixedindent{(char
**\paramname{foreground}, char **\paramname{background});}
\fixedtext{long \bold{graphic_}GetDevice }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{long \bold{graphic_}GetEnclosedBottom }\fixedindent{(struct
graphic
*\paramname{graphic});}
\fixedtext{void \bold{graphic_}GetEnclosedBounds }\fixedindent{(struct
graphic
*\paramname{graphic}, struct rectangle *\paramname{Rect});}
\fixedtext{\bold{graphic_}GetEnclosedHeight }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{\bold{graphic_}GetEnclosedLeft }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{long \bold{graphic_}GetEnclosedRight }\fixedindent{(struct
graphic
*\paramname{graphic});}
\fixedtext{\bold{graphic_}GetEnclosedTop }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{\bold{graphic_}GetEnclosedWidth }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{struct fontdesc *\bold{graphic_}GetFont }\fixedindent{(struct
graphic *\paramname{graphic});}
\fixedtext{void \bold{graphic_}GetForegroundColor }\fixedindent{(struct
graphic *\paramname{graphic}, char **\paramname{colorName}, long
*\paramname{red}, long *\paramname{green}, long *\paramname{blue});}
\fixedtext{long \bold{graphic_}GetHorizontalResolution
}\fixedindent{(struct
graphic *\paramname{graphic});} \fixedtext{short
\bold{graphic_}GetLineWidth
}\fixedindent{(struct graphic *\paramname{graphic});}
\fixedtext{long \bold{graphic_}GetLogicalBottom }\fixedindent{(struct
graphic
*\paramname{graphic});}
\fixedtext{void \bold{graphic_}GetLogicalBounds }\fixedindent{(struct
graphic
*\paramname{graphic}, struct rectangle *\paramname{Rect});}
\fixedtext{\bold{graphic_}GetLogicalHeight }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{\bold{graphic_}GetLogicalLeft }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{long \bold{graphic_}GetLogicalRight }\fixedindent{(struct
graphic
*\paramname{graphic});}
\fixedtext{\bold{graphic_}GetLogicalTop }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{\bold{graphic_}GetLogicalWidth }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{short \bold{graphic_}GetSpaceShim }\fixedindent{(struct
graphic
*\paramname{graphic});}
\fixedtext{short \bold{graphic_}GetTransferMode }\fixedindent{(struct
graphic
*\paramname{graphic});}
\fixedtext{long \bold{graphic_}GetVerticalResolution
}\fixedindent{(struct
graphic *\paramname{graphic});}
\fixedtext{long \bold{graphic_}GetVisualBottom }\fixedindent{(struct
graphic
*\paramname{graphic});}
\fixedtext{void \bold{graphic_}GetVisualBounds }\fixedindent{(struct
graphic
*\paramname{graphic}, struct rectangle *\paramname{Rect});}
\fixedtext{\bold{graphic_}GetVisualHeight }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{\bold{graphic_}GetVisualLeft }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{long \bold{graphic_}GetVisualRight }\fixedindent{(struct
graphic
*\paramname{graphic});}
\fixedtext{\bold{graphic_}GetVisualTop }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{\bold{graphic_}GetVisualWidth }\fixedindent{(struct graphic
*\paramname{graphic});}
\fixedtext{char *\bold{graphic_}GetWindowManagerType
}\fixedindent{(struct
graphic *\paramname{graphic});}
\fixedtext{struct graphic *\bold{graphic_}GrayPattern
}\fixedindent{(struct
graphic *\paramname{graphic}, short \paramname{IntensityNum},
\paramname{IntensityDenom});}
\fixedtext{boolean \bold{graphic_}InitializeObject }\fixedindent{(struct
graphic *\paramname{self});}
\fixedtext{void \bold{graphic_}InsertGraphicSize }\fixedindent{(struct
graphic
*\paramname{graphic}, struct graphic *\paramname{EnclosingGraphic}, long
\paramname{xOriginInParent}, long \paramname{yOriginInParent}, long
\paramname{width}, long \paramname{height});}
\fixedtext{void \bold{graphic_}InsertGraphic }\fixedindent{(struct
graphic
*\paramname{graphic}, struct graphic *\paramname{EnclosingGraphic},
struct
rectangle *\paramname{EnclosedRectangle});}
\fixedtext{void \bold{graphic_}MoveLogicalOrigin }\fixedindent{(struct
graphic
*\paramname{graphic}, long \paramname{DeltaX}, long \paramname{DeltaY});}
\fixedtext{void \bold{graphic_}MoveToPt }\fixedindent{(struct graphic
*\paramname{graphic}, struct point *\paramname{Pt});}
\fixedtext{void \bold{graphic_}MoveTo }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{NewX}, long \paramname{NewY});}
\fixedtext{void \bold{graphic_}Move }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{DeltaX}, long \paramname{DeltaY});}
\fixedtext{void \bold{graphic_}ReadPixImage }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{SrcX}, long \paramname{SrcY},
struct
pixelimage *\paramname{DestPixels}, long \paramname{DestX}, long
\paramname{DestY}, long \paramname{width}, long \paramname{height});}
\fixedtext{void \bold{graphic_}RestoreGraphicsState }\fixedindent{(struct
graphic *\paramname{graphic});}
\fixedtext{void \bold{graphic_}SetBackgroundColor }\fixedindent{(struct
graphic *\paramname{graphic}, char *\paramname{colorName}, long
\paramname{red}, long \paramname{green}, long \paramname{blue});}
\fixedtext{void \bold{graphic_}SetBitAtLoc }\fixedindent{(struct graphic
*\paramname{graphic}, long \paramname{XPos}, long \paramname{YPos},
boolean
\paramname{NewValue});}
\fixedtext{void \bold{graphic_}SetClippingRectSize }\fixedindent{(struct
graphic *\paramname{graphic}, long \paramname{x}, \paramname{y},
\paramname{w}, \paramname{h});}
\fixedtext{void \bold{graphic_}SetClippingRect }\fixedindent{(struct
graphic
*\paramname{graphic}, struct rectangle *\paramname{AdditionalRect});}
\fixedtext{void \bold{graphic_}SetDefaultColors }\fixedindent{(char
*\paramname{foreground}, char *\paramname{background});}
\fixedtext{void \bold{graphic_}SetFont }\fixedindent{(struct graphic
*\paramname{graphic}, struct fontdesc *\paramname{ChosenFont});}
\fixedtext{void \bold{graphic_}SetForegroundColor }\fixedindent{(struct
graphic *\paramname{graphic}, char *\paramname{colorName}, long
\paramname{red}, long \paramname{green}, long \paramname{blue});}
\fixedtext{void \bold{graphic_}SetLineWidth }\fixedindent{(struct graphic
*\paramname{graphic}, short \paramname{NewLineWidth});}
\fixedtext{void \bold{graphic_}SetLogicalOriginPt }\fixedindent{(struct
graphic *\paramname{graphic}, struct point *\paramname{Pt});}
\fixedtext{void \bold{graphic_}SetLogicalOrigin }\fixedindent{(struct
graphic
*\paramname{graphic}, long \paramname{NewX}, long \paramname{NewY});}
\fixedtext{void \bold{graphic_}SetSpaceShim }\fixedindent{(struct graphic
*\paramname{graphic}, short \paramname{Amount});}
\fixedtext{void \bold{graphic_}SetTransferMode }\fixedindent{(struct
graphic
*\paramname{graphic}, short \paramname{NewTransferMode});}
\fixedtext{struct graphic *\bold{graphic_}WhitePattern
}\fixedindent{(struct
graphic *\paramname{graphic});} \fixedtext{void
\bold{graphic_}WritePixImage
}\fixedindent{(struct graphic *\paramname{graphic}, long
\paramname{DestX},
long \paramname{DestY}, struct pixelimage *\paramname{SrcPixels}, long
\paramname{SrcX}, long \paramname{SrcY}, long \paramname{width}, long
\paramname{height});}
\fixedtext{void \bold{graphic_}SetFGColor( struct graphic
*\paramname{graphic,
}double \paramname{red}, double \paramname{green}, double
\paramname{blue} );
void \bold{graphic_}GetFGColor( struct graphic *\paramname{graphic,
}double
*\paramname{red}, double *\paramname{green}, double *\paramname{blue} );
void \bold{graphic_}SetBGColor( struct graphic *\paramname{graphic,
}double
\paramname{red}, double \paramname{green}, double \paramname{blue} );
void \bold{graphic_}GetBGColor( struct graphic *\paramname{graphic,
}double
*\paramname{red}, double *\paramname{green}, double *\paramname{blue} );
void \bold{graphic_}SetLineDash( struct graphic *\paramname{graphic,
}char
*\paramname{dashPattern}, int \paramname{dashOffset}, short
\paramname{dashType} );
void \bold{graphic_}GetLineDash( struct graphic *\paramname{graphic,
}char
**\paramname{dashPattern}, int *\paramname{dashOffset}, short
*\paramname{dashType} );
void \bold{graphic_}SetLineCap( struct graphic *\paramname{graphic,
}short
\paramname{NewLineCap} );
short \bold{graphic_}GetLineCap( struct graphic *\paramname{graphic });
void \bold{graphic_}SetLineJoin( struct graphic *\paramname{graphic,
}short
\paramname{NewLineJoin} );
short \bold{graphic_}GetLineJoin( struct graphic *\paramname{graphic });
long \bold{graphic_}DisplayClass( struct graphic *\paramname{graphic });
boolean \bold{graphic}_IsImageInverted( struct graphic
*\paramname{graphic });}
\section{Overview of Graphic}
\subsection{A pixel map} \indexi{Pixel map} \indexi{Graphic++Pixel map}
The class \italic{graphic} provides a \italic{pixmap}, that is, a pixel
map.
A pixel map is a \italic{rectangle} of bits together with a mapping
function
that maps the bits to picture elements, or pixels, on the workstation
display.
The rectangle of bits provides graphic storage. When an image is
displayed,
each bit in the rectangle is mapped to a corresponding pixel on the
workstation display. The value of each bit together with a transfer mode
(explained below), determines how the bit's corresponding picture element
is
illuminated.
The pixel map is associated with a \italic{graphic} object in one of two
ways.
First, the \italic{Interaction Manager} explicitly links its
\italic{graphic}
object, a \italic{window,} to a \italic{pixmap} when you set the
\italic{Interaction Manager}'s view.
Second, the \italic{pixmap} is
linked
implicitly and relative to the parent when you insert a graphic object
into
its parent by calling \italic{graphic_InsertGraphic} before beginning to
draw
when setting up view hierarchies. You must use one of these methods to
associate a newly created \italic{graphic} object with its pixel map.
The class \italic{pixmap} manages any mapping that may be necessary from
the
graphic's coordinate system to the underlying window manager's coordinate
system. The applications programmer should not need to use any of the
methods
or class procedures in pixmap.
\begindata{bp,538928840}
\enddata{bp,538928840}
\view{bpv,538928840,1273,0,0}
\subsection{The logical rectangle}
\indexi{Rectangle++Logical}
\indexi{Logical rectangle}
\indexi{Graphic++Logical rectangle}
The class \italic{graphic} supplies a logical rectangle which defines a
coordinate system.
The units are pixels. The coordinates of the
logical
rectangle are initially given by (0,0) at the origin on the rectangle's
top
left to 2\superscript{32} - 1, 2\superscript{32}-1) at its bottom right.
You
can draw anywhere in this logical unsigned 32-bit coordinate space.
You can also move the logical origin from (0,0) to another point.
are
methods for getting the dimensions of the logical rectangle.
There
\subsection{The visual rectangle} \indexi{Visual rectangle}
\indexi{Rectangle++Visual}
\indexi{Graphic++Visual rectangle}The logical rectangle, \italic{lr},
gives
the coordinates that you can scale your drawing to. The class
\italic{graphic}
also provides a visual rectangle, \italic{vr}, that gives the
coordinates for
what is potentially visible in the window. To understand \italic{lr} and
\italic{vr}, suppose that a multi-media editor were displaying some text
and a
drawing, and that the drawing happens to be at the very bottom of the
window.
If the graphic's rectangle, \italic{lr}, falls outside the window
boundary,
and the drawing is relative to \italic{lr}, then the drawing will be
clipped
to the graphic's visual rectangle.
The part of the drawing that falls within the coordinates given by the
visual
rectangle normally corresponds to what the user sees on the screen,
except if
another drawing were laid over the first (e.g., a message box could be
temporarily laid on top of all or part of the drawing).
You must attend to the visual rectangle if you wish to:
\itemize{Scale the size of your drawing to the size of its visual region.
In
this case, you would do your drawing relative to the visual rectangle
rather
than the rectangle.
Produce a clipped drawing with maximum efficiency. In this case, you
would
scale your drawing relative to \italic{lr}, but you would not actually
draw
except when the coordinates fell within \italic{vr}.
}
Otherwise you can ignore \italic{vr} and simply draw within the
dimensions
given by \italic{lr}. If you do, your drawing will automatically be
clipped
to \italic{vr}.
\subsection{The enclosed rectangle}
\indexi{Rectangle++Enclosed} \indexi{Enclosed rectangle}
\indexi{Graphic++Enclosed rectangle}Finally, graphic supplies an enclosed
rectangle. The enclosed rectangle is the same as the logical rectangle,
except that the coordinates are expressed in terms of the parent
graphic's
logical coordinate system. The enclosed coordinate system is undefined
if the
graphic has not been inserted in a parent graphic or the Interaction
Manager's
view.
When you draw your image, you do not have to pay attention to your
object's
enclosed rectangle coordinate system. Its values are updated
automatically
when you insert the graphic inside its parent. The values do not change
unless the object changes position on the screen or the parent's logical
origin changes, but to change the position of an object on the screen,
you
must reinsert the object inside its parent.
If your object has children, then you may be interested in their enclosed
rectangle coordinates. The class graphic provides a method for getting
their
values.
\subsection{The local graphic state} \indexi{Graphic++Local state}
Each instance of a graphic has the following elements in its graphic
state:
\description{Current point\formatnote{ -- }The point from which all
line and
text drawing will be done. It is initialized to (0,0).
Line width\formatnote{ -- }The line width determines the width, in
pixels,
of drawn lines. It is initialized to one pixel.
Current font\formatnote{ -- }The current font determines the font
drawing
text. The initial value of the font is Andysans 12.
Space shim \formatnote{ -- }The space shim controls the amount of space
that
will be added to the right of space characters. It is initialized to 0
pixels.
Transfer mode \formatnote{ -- }The transfer mode determines how bits
will be
turned on and off on the screen when drawing lines, writing text,
transferring
blocks of bits or filling figures.
\smaller{graphic_COPY}.
It is initialized to
Clipping rectangle \formatnote{ -- }The clipping rectangle allows you
to use
drawing methods more efficiently. It is initially \smaller{NULL}, that
is,
the drawing methods do no clipping.
}
The class graphic provides methods for setting these state variables and
accessing their values. The values are local to the graphic object.
\subsection{The global graphic state} \indexi{Graphic++Global state}
The underlying window management system maintains a global graphics
state.
The values of the global state determine actual output. The values of
your
object's graphic state remain local to the object until the object
requests
that its graphics state be restored to the global state. The request
sets the
global graphic state to your object's local graphic state.
\subsection{Protocols} \indexi{Graphic++Protocols}
\paragraph{Initialization}
\indexi{Graphic++Initializing}
If you are creating a subclass of the class \italic{graphic} and want to
override the default initial values for the \italic{graphic} state, then
you
should initialize the graphic state in the \italic{InitializeObject}
procedure.
\begindata{bp,538929096}
\enddata{bp,538929096}
\view{bpv,538929096,1274,0,0}
\paragraph{Before drawing} \indexi{Graphic++Drawing}
If you create an object that is an instance of any subclass of
\italic{graphic,} then it will inherit the graphic data structures and
methods
and you will be able to draw on the screen. Before doing any drawing,
however, you must do one of the following:
\leftindent{a) Call \italic{im_SetView} \indexi{ \italic{im_SetView}}
to insert the object into the the \italic{Interaction Manager}'s window
(see
\bold{Interaction Manager}), or
(b) call \italic{graphic_InsertGraphic}
\indexi{ \italic{graphic_InsertGraphic}}
to insert the object into its parent's graphic (see \bold{View}).
}
If you fail to insert the object, the mapping from the logical coordinate
system to the underlying window management system will be undefined.
The graphic object does not store any drawing that you may do, so it is
not
useful to draw in a graphic that is not inserted.
\paragraph{Setting the global graphic state} \indexi{Graphic++Global
state}
Since other objects will also potentially be setting the global graphic
state,
you must restore your objects's graphic state any time another object may
have
had an opportunity to set the global graphic state since the last time
you
did. The restore will set the global graphic state to your local graphic
state.
\paragraph{Redraw requests} \indexi{Graphic++Redraw requests}
Normally, you will not use graphics directly but will work with view, a
subclass of graphics that provides methods for input, including redrawing
requests (see section \bold{View}).
\begindata{bp,538929352}
\enddata{bp,538929352}
\view{bpv,538929352,1275,0,0}
\subsection{Creating and initializing graphics} \paragraph{Creating an
instance of a graphic} \indexi{Graphic++Creating}
\indexi{ \italic{graphic_CreateGraphic}}
\example{struct graphic *graphic_CreateGraphic()
}
\leftindent{\bold{Class procedure description.}
the
class \italic{graphic} and initializes it.
Creates an instance of
}
\paragraph{Inserting a graphic} \indexi{Graphic++Inserting}
\example{void graphic_InsertGraphic(EnclosedGraphic, EnclosingGraphic,
EnclosedRectangle)
struct graphic *EnclosedGraphic;
struct graphic *EnclosingGraphic;
struct rectangle *EnclosedRectangle;}
\leftindent{\bold{Method description. }\italic{graphic_InsertGraphic}
inserts
the graphic \italic{EnclosedGraphic} into \italic{EnclosingGraphic}.
\bold{Side effects.} \italic{EnclosedGraphic'}s logical, visual, and
enclosed
rectangles are set to the values provided by \italic{EnclosedRectangle}.
The
enclosed graphic clipping rectangle is set to \smaller{NULL}.
\bold{Usage.} When you create a new graphic object, you should insert it
into
its parent's graphic. To move a graphic object, you must reinsert it.
}
\paragraph{Restoring the graphic state} \indexi{Graphic++Restoring state}
\indexi{ \italic{graphic_RestoreGraphicsState}}
\example{void graphic_RestoreGraphicsState(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description. }
\italic{graphic_RestoreGraphicsState}
sets the global graphic state variables to the values of
\italic{grphc}'s
global state variables. The state variables include the line width for
drawing lines, the font for drawing text, the clipping rectangle, the
current
point for drawing lines and text, the space shims, and for drawing.
\bold{Usage.} Before drawing, you should call
\italic{graphic_RestoreGraphicsState} in order to set the global graphic
state
variables. Since other objects will also potentially be setting the
global
graphic state, you must restore your objects's graphic state any time
another
object may have had an opportunity to set the global graphic state since
the
last time you did. The restore will set the global graphic state to your
local graphic state.
}
\begindata{bp,538928776}
\enddata{bp,538928776}
\view{bpv,538928776,1276,0,0}
\subsection{The current point} \indexi{Graphic++Current point}
Many drawing methods use a \italic{current point} as a reference point.
For
example, lines are drawn from the \italic{current point} to one of the
following:
\itemize{
a point relative to (0,0) in the logical rectangle \indexi{Logical
rectangle}
an (x,y) coordinate relative to (0,0) in the logical rectangle
a coordinate relative to the current point}
The \italic{current point} is defined after line-drawing methods, but is
undefined after all other drawing methods and after a window changes
size.
For efficiency reasons, a \italic{point} is not an object. \indexi{Point}
To
use points, you must \italic{#include point.h} from the Andrew Toolkit
library. A point can be thought of as an (x,y) coordinate.
\indexi{Coordinates}
\paragraph{Moving the current point to a new point}
\indexi{Graphic++Moving}
\indexi{ \italic{graphic_MoveToPt}}
\example{void graphic_MoveToPt(grphc,NewPosition)
struct graphic *grphc;
struct point *NewPosition;}
\leftindent{\bold{Method description. }\italic{graphic_MoveToPt}
the
\italic{current point} to the point, \italic{NewPosition}.
sets
\bold{Example.}
\example{#include "point.h"
struct point *pt;
struct graphic *go;
/* a graphic object */
go = graphic_New (): \bold{...} \description{pt =
point_CreatePoint(graphic_GetVisualLeft (go), graphic_GetVisualTop(go);}
graphic_MoveToPt (grphc, pt);
}
The call to \italic{point_CreatePoint} assigns \italic{pt} to the graphic
object's visual origin. Then the call to \italic{graphic_MoveToPt} sets
the
current point to \italic{pt}.
}\
\begindata{bp,538929160}
\enddata{bp,538929160}
\view{bpv,538929160,1277,0,0}
\paragraph{Moving the current point to a new (x,y) coordinate}
\indexi{Graphic++Moving}
\indexi{ \italic{graphic_MoveTo}}
\example{void graphic_MoveTo(grphc, NewX, NewY)
struct graphic *grphc;
long NewY;
long NewX;}
\leftindent{\bold{Method description. }\italic{graphic_MoveTo} moves the
\italic{current point} to \italic{(NewX, Newy) }where the 32-bit integer
\italic{NewX} is the horizontal coordinate and \italic{NewY} the
vertical.
}
\paragraph{Moving the current point relative to the current point}
\indexi{Graphic++Moving}
\indexi{ \italic{graphic_Move}}
\example{void graphic_Move(grphc, DeltaX, DeltaY)
struct graphic *grphc;
long DeltaX;
long DeltaY;}
\leftindent{\bold{Method description.}
\italic{graphic_Move} moves the
\italic{current point} to \italic{(current x + DeltaX, current y +
DeltaY)}
where the 32-bit integer \italic{DeltaX} is the horizontal distance from
the
current point to the desired point, \italic{DeltaY} the vertical
distance.
\bold{Example.}
\example{
struct graphic *go;
/* a graphic object */
go = graphic_New ();
\bold{...}
graphic_MoveTo (grphc, 20,30);
graphic_Move (grphc, 5, 10);}
\italic{graphic_MoveTo (grphc, 20, 30)} moves the current point to the
logical
coordinate (20,30). Then \italic{graphic_Move (grphc, 5, 10)} moves the
current point to (20+5, 30+10), that is, (25,40).
}
\paragraph{Getting the current point location} \indexi{Graphic++Getting
location}
\indexi{ \italic{graphic_GetCurrent}}
\example{void graphic_GetCurrentPt(grphc, Pt)
struct graphic *grphc;
struct point *Pt;}
\leftindent{\bold{Method description.
gets
the current point location.
}\italic{graphic_GetCurrentPt}
\bold{Example.}
\example{#include "point.h"
struct point *pt;
struct graphic *go;
/* a graphic object */
go = graphic_New ();
\bold{...}
graphic_MoveToPt (grphc, 20,30);
graphic_GetCurrentPt (grphc, &pt);
}
The call to \italic{point_CreatePoint} assigns \italic{pt} to the graphic
object's visual origin. Then the call to \italic{graphic_MoveToPt} sets
the
current point to \italic{pt}.
}
\begindata{bp,538929416}
\enddata{bp,538929416}
\view{bpv,538929416,1278,0,0}
\subsection{Drawing Lines}
Lines are drawn with black (foreground color) "points" using the current
transfer mode and line width.
\paragraph{Drawing a line from the current point to another point}
\indexi{Graphic++Drawing lines} \indexi{ \italic{graphic_DrawLineToPt}}
\example{void graphic_DrawLineToPt(grphc,LineEnd)
struct graphic *grphc;
struct point *LineEnd;}
\leftindent{\bold{Method description. }\italic{graphic_DrawLineToPt}
draws a
line from the current point to the point \italic{LineEnd}.
The width of
the
line is determined by the graphic state \italic{LineWidth}; the default
width
is one pixel.
\bold{Side effect.}
The current point is moved to \italic{LineEnd}.
}
\paragraph{Drawing a line from the current point to a
\indexi{Graphic++Drawing lines}
(x,y) coordinate}
\indexi{ \italic{graphic_DrawLineTo}}
\example{void graphic_DrawLineTo(grphc, XEnd, YEnd)
struct graphic *grphc;
long YEnd;
long XEnd;}
\leftindent{\bold{Method description. }\italic{graphic_DrawLineTo} draws
a
line from the current point to the coordinate (XEnd, YEnd). The width of
the
line is determined by the graphic state \italic{LineWidth}; the default
width
is one pixel.
\bold{Side effect.}
}
Moves the current point to (\italic{XEnd, YEnd}).
\paragraph{Drawing a line from the current point to a coordinate relative
to
the current point}
\indexi{Graphic++Drawing lines}
\indexi{ \italic{graphic_DrawLine}}
\example{void graphic_DrawLine(grphc, DeltaX, DeltaY)
struct graphic *grphc;
long DeltaY;
long DeltaX;}
\leftindent{\bold{Method description. }\italic{ graphic_DrawLine} draws
a
line from the current point (CurrentX, CurrentY) to the coordinate
(CurrentX+\italic{DeltaX}, CurrentY+\italic{DeltaY}). The width of the
line
is determined by the graphic state \italic{LineWidth}; the default width
is
one pixel.
\bold{Side effect.} Moves the current point to
(CurrentX+\italic{DeltaX},
CurrentY+\italic{DeltaY}).
}
\begindata{bp,538928968}
\enddata{bp,538928968}
\view{bpv,538928968,1279,0,0}
\subsection{The current line width}
The graphic state variable, \italic{Line Width}, controls the width of
drawn
lines. Its default value is one pixel wide. There is method for setting
the
\italic{Line Width} and for getting its current value.
\paragraph{Setting the line width}\italic{\index{graphic_SetLineWidth}}
\example{void graphic_SetLineWidth(grphc,NewLineWidth)
\indexi{Graphic++Set
line width}
struct graphic *grphc;
short NewLineWidth;}
\indexi{ }
\leftindent{\bold{Method description.}
\italic{graphic_SetLineWidth}
sets
the line width to NewLineWidth. The unit is pixels and the value can
range
from 0 pixels to 2\formatnote{@+}[8}-1. Other values are undefined.
\paragraph{Getting the line width} \indexi{Graphic++Get line width}
\indexi{ \italic{graphic_GetLineWidth}}
\example{short graphic_GetLineWidth(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description.} \italic{graphic_GetLineWidth}
returns
the current line width, which can range from 0 to 28-1 pixels. The
default
value for the line width is one pixel.
\bold{Example.}
\example{short CLineWidth;
struct graphic *grphc;
grphc = graphic_New ();
...
CLineWidth = graphic_GetLineWidth(grphc);
graphic_SetLineWidth (CLineWidth+CLineWidth);
}
\italic{CLineWidth = graphic_GetLineWidth} stores the current line width
in
the short variable \italic{CLineWidth}; then \italic{graphic_SetLineWidth
(CLineWidth+CLineWidth)} doubles the current line width.
}
\bold{\bigger{Line Styles
}}\bold{Setting the line dash
}
\example{void graphic\bold{_}SetLineDash( graphic, dashPattern,
dashOffset,
dashType );
struct graphic *\paramname{graphic;
}char *\paramname{dashPattern;
}int \paramname{dashOffset;
}short \paramname{dashType;
}}
\indent{\bold{Method description. } \italic{graphic_SetLineDash }sets the
current line dash style for line drawing (under X11). The
\italic{dashPattern}
argument is an array of characters whose integer values specify the
pattern of
on-off dashes desired. This array must be terminated with a 0 (zero)
value.
The offset argument defines the phase of the pattern, specifying how many
pixels into the dashPattern the pattern should actually begin on any
single
line drawing operation. The \italic{dashType} argument can be any of the
following symbolics:
\typewriter{graphic_LineSolid} -- solid, non-dashed lines.
\typewriter{graphic_LineDoubleDash} -- even and odd elements of the
dashPattern are drawn in the foreground and background colors,
respectively.
\typewriter{graphic_LineOnOffDash }-- only the even elements of the
dashPattern are drawn.
A NULL \paramname{dashPattern} argument will set the graphic state to
draw
solid lines. Solid lines are drawn be default until a dash pattern and
dash
type are set.}
\bold{Getting the line dash}
\bold{
}\example{void graphic_GetLineDash( graphic, dashPattern,
dashType );
struct graphic *graphic;
dashOffset,
char **dashPattern;
int *dashOffset;
short *dashType;}
\indent{\bold{Method description}. \italic{graphic_GetLineDash} returns
the
current values of the line dash style attributes of the given graphic via
the
pointer arguments passed in.}
\bold{Setting the line cap
}
\example{void graphic\bold{_}SetLineCap( graphic, NewLineCap );
struct graphic *\paramname{graphic;
}short \paramname{NewLineCap;}}
\indent{\bold{Method description}. \italic{graphic_SetLineCap} sets the
line
cap style for the given graphic, which defines how the endpoints of a
path are
drawn (under X11). The \paramname{NewLineCap} argument can be any of the
following symbolics:
\typewriter{\typewriter{graphic_CapBut}t} -- the line is square at the
endpoint (perpenedicular to the slope of the line) with no projection
beyond.
\typewriter{graphic_CapNotLast} -- same as graphic_CapButt, except for a
line
width of zero, the final endpoint is not drawn.
\typewriter{graphic_CapRound} -- The line has a circular arc with the
diameter
equal to the line width, centered on the endpoint.
\typewriter{graphic_CapProjecting} -- The line is square at the end, but
the
path continues beyond the endpoint for a distance equal to half the line
width.
The default line cap is \typewriter{graphic_CapButt}. }
\bold{Getting the line cap
}
\example{short graphic\bold{_}GetLineCap( graphic\paramname{ });
struct graphic *\paramname{graphic;}}
\indent{\bold{Method Description}. \italic{graphic_GetLineCap} returns
the
currently set line cap style.}
\bold{Setting the line join
}
\example{void graphic\bold{_}SetLineJoin(graphic, NewLineJoin);
struct graphic *\paramname{graphic;
}short \paramname{NewLineJoin;}}\paramname{
}
\indent{\bold{Method description}. \italic{graphic_SetLineJoin} sets the
line
join style for the given graphic, which defines how corners are drawn for
wide
lines (under X11). The NewLineJoin argument can be any of the following
symbolics:
\typewriter{graphic_JoinMiter} -- the outer edges of two lines extend to
meet
at an angle. If the angle is less than 11 degrees, then a
graphic_JoinBevel
style join is used instead.
\typewriter{graphic_JoinRound} -- The corner is a circular arc with the
diameter equal to the line width, centered on the joinpoint.
\typewriter{graphic_JoinBevel} -- The corner has
\typewriter{graphic_CapButt}
style endpoints, with the triangular notch filled.
The default line join is \typewriter{graphic_JoinMiter}. }
\bold{Getting the line join
}
\example{short \bold{graphic_}GetLineJoin( graphic );
struct graphic *\paramname{graphic; }}
\indent{\bold{Method description}: \italic{graphic_GetLineJoin }returns
the
currently set line join style.}
\
\begindata{bp,538929288}
\enddata{bp,538929288}
\view{bpv,538929288,1280,0,0}
\subsection{The current font} \indexi{Graphic++Fonts}
Text output appears in the currently selected font. Fonts are named by
strings, for example "Andy12i" (Andy,12-point, italic) or "Andysans14b"
(Andysans, 14-point, bold). You can find out what fonts are available
by
using \italic{ls} to examine the contents of the directory
/usr/andrewX11/fonts. If you want your program to be portable to other
Andrew
environments, you should use the \italic{andy}, \italic{andysans},
\italic{andytype} font families. To see what a specific font looks like,
use
the X program \bold{xfd} (see the online help).
When you request a font, the Andrew Toolkit returns a handle representing
its
best effort at supplying the font you specify. The values of a font may
change at redraw time because a user with multiple displays might move
an
existing window to a display with different hardware characteristics. So
if
your program examines font structures, you must reassign values when a
redraw
is requested.
\paragraph{Setting the current font} \indexi{Graphic++Set font}
\indexi{ \italic{graphic_SetFont}}
\example{void graphic_SetFont(grphc, ChosenFont)
struct graphic *grphc;
struct fontdesc *ChosenFont;}
\leftindent{
\bold{Method description. }\italic{graphic_SetFont} sets the current
font for
the graphic object \italic{grphc} to the font descriptor
\italic{ChosenFont.}
The default current font is \italic{AndySans12}
\bold{Usage.} You must call \italic{fontdesc_Create} to get a pointer to
a
font descriptor (see the chapter, Font Descriptors), then call
\italic{graphic_SetFont} to set the graphic object's current font to the
font
descriptor.
\bold{Example.}
\example{struct graphic *grphc;
grphc = graphic_New();
\bold{...}
graphic_SetFont (grphc, fontdesc_Create ("andysans", fontdesc_PLAIN,
12));}
sets the graphic object \italic{grphc}'s current font to
\italic{Andysans12}.
}
\paragraph{Getting the current font} \indexi{Graphic++Get font}
\indexi{ \italic{graphic_GetFont}}
\example{struct fontdesc *graphic_GetFont(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description.}
\italic{grphc}'s current font.
}
\begindata{bp,538928712}
\italic{graphic_GetFont} returns
\enddata{bp,538928712}
\view{bpv,538928712,1281,0,0}
\subsection{Drawing Text} \indexi{Graphic++Text}
\paragraph{Drawing a string} \indexi{Graphic++Draw text string}
\indexi{ \italic{graphic_DrawString}}
\example{void graphic_DrawString(grphc, String, Operation)
struct graphic *grphc;
char *String;
long Operation;}
\leftindent{
\bold{Method description.} Text is drawn by "spraying" black through a
character stencil and combining it with the pixels on the screen using
the
current transfer function. \italic{graphic_DrawString} draws the string
\italic{String} in the \italic{grphc}'s current font at \italic{grphc}'s
current point \italic{(cx, cy)}. The relationship between the string and
the
current position is specified by the parameter \italic{Operation}.
Values for
\italic{Operation} are constructed by or-ing together a horizontal and a
vertical alignment option.
The horizontal alignment options are:
\formatnote{\italic{graphic_\smaller{NOMOVEMENT}}\formatnote{
origin
of the string will be at \italic{cx}.
\italic{graphic_\smaller{ATRIGHT}}\formatnote{
of the
string will be at \italic{cx}.
\italic{graphic_\smaller{ATLEFT}}\formatnote{
the
string will be at \italic{cx}.
--
--
--
}the
}the rightmost part
}the leftmost part of
\italic{graphic_\smaller{BETWEENLEFTANDRIGHT}}\formatnote{
center of
the string will be at \italic{cx}.
--
}the
}The vertical alignment options are:
\formatnote{\italic{graphic_\smaller{NOMOVEMENT}}\formatnote{
origin
of the string will be at \italic{cy}.
\italic{graphic_\smaller{ATTOP}}\formatnote{
the
string will be at \italic{cy}.
--
--
}the
}the topmost part of
\italic{graphic_\smaller{ATBOTTOM}}\formatnote{ -- }the bottommost part
of
the string, including any descenders, will be at \italic{cy}.
\italic{graphic_\smaller{ATBASELINE}}\formatnote{
the
string will be at \italic{cy}.
--
}the baseline of
\italic{graphic_\smaller{BETWEENTOPANDBASELINE}}\formatnote{ -- }the
center
point of the string will be at \italic{cy}. The center is calculated
from the
topmost part of the string to the bottomost part, which will include
descenders.
\italic{graphic_\smaller{BETWEENTOPANDBOTTOM}}\formatnote{ -- }the
center of
the string will be at \italic{cy}. The center is calculated from the
topmost
part of the string to the baseline of the string. No account is taken of
descenders. This is likely to look better than
\italic{graphic_\smaller{BETWEENTOPANDBASELINE}} in most cases.
}Either option (horizontal or vertical alignment) may be omitted.
\italic{graphic_\smaller{ATBASELINE}} and
\italic{graphic_\smaller{ATLEFT}}
will be used as defaults.
}
\begindata{bp,538927560}
\enddata{bp,538927560}
\view{bpv,538927560,1282,0,0}
\paragraph{Drawing text} \indexi{Graphic++Draw text}
\indexi{ \italic{graphic_DrawText}}
\example{void graphic_DrawText(grphc, Text, TextLength, Operation) struct
graphic *grphc;
char *Text;
long TextLength;
long Operation;}
\leftindent{\bold{Method description. }\italic{graphic_DrawText} draws
\italic{TextLength} number of characters from the string \italic{Text}.
In
contrast, \italic{graphic_DrawString} draws all the characters in the
string
(i.e., it draws until it encounters a \smaller{NULL} character). Except
for
this difference, the two methods are alike.
}
\paragraph{Setting a shim value for spaces} \indexi{Graphic++Set space
shim}
\indexi{ \italic{graphic_SetSpaceShim}}
\example{void graphic_SetSpaceShim(grphc,n)
struct graphic *grphc;
short n;}
\leftindent{\bold{Method description. }\italic{graphic_SetSpaceShim}
sets the
amount of space that will be added to the right of space characters
(after the
character shim) to \italic{n} pixels. The default value is 0 pixels.
\bold{Usage.} This method has its primary use in the Andrew Toolkit
system
applications like the object \italic{text}.
}
\paragraph{Getting the shim value for spaces} \indexi{Graphic++Get space
shim}
\indexi{ \italic{graphic_GetSpaceShim}}
\example{short graphic_GetSpaceShim(grphc)
struct graphic *grphc; }
\leftindent{\bold{Method description.}
gets the
space shim value.
\italic{graphic_GetSpaceShim}
}\
\begindata{bp,538928584}
\enddata{bp,538928584}
\view{bpv,538928584,1283,0,0}
\subsection{Drawing regions} \paragraph{Drawing a rectangle}
\indexi{Graphic++Draw rectangle}
\indexi{ \italic{graphic_DrawRect}}
\example{void graphic_DrawRect(grphc, Rect)
struct graphic *grphc;
struct rectangle *Rect;}
\leftindent{\bold{Method description. }\italic{graphic_DrawRect} draws a
rectangle in \italic{grphc} at the coordinates specified by the rectangle
\italic{Rect}.
\bold{Usage.} For efficiency reasons, a \italic{rectangle} is not an
object.
To use rectangles, you must #include \italic{rectangle.h} from the
Andrew
Toolkit library. A rectangle can be specified by an (x,y) coordinate, a
\italic{width} and a \italic{height} (see Rectangles), or by an upper
left and
a lower right corner.
The rectangle specifications conform to the X
standard.
}\paragraph{Drawing a polygon} \indexi{Graphic++Draw polygon}
\indexi{ \italic{graphic_DrawPolygon}}
\example{void graphic_DrawPolygon(grphc, PointArray, PointCount) struct
graphic *grphc;
struct point *PointArray;
short PointCount;}
\leftindent{\bold{Method description.}
\italic{graphic_DrawPolygon}
provides
a placeholder for functions drawing sided, enclosed figures that are not
rectangles. It is assumed that the last point is connected to the first
point.
}
\paragraph{Drawing an oval} \indexi{Graphic++Draw oval}
\indexi{ \italic{graphic_DrawOval}}
\example{void graphic_DrawOval(grphc, Rect)
struct graphic *grphc;
struct rectangle *Rect;}
\leftindent{\bold{Method description.}
\italic{graphic_DrawOval} is the
same
as \italic{graphic_DrawPolygon }except it is used for drawing oval
figures.}
\begindata{bp,538929736}
\enddata{bp,538929736}
\view{bpv,538929736,1284,0,0}
\paragraph{Drawing arcs} \indexi{Graphic++Draw arc}
\indexi{ \italic{graphic_DrawArc}}
\example{void graphic_DrawArc(grphc, EnclRect, StartAngle, OffsetAngle)
struct graphic *grphc;
struct rectangle *EnclRect;
short StartAngle;
short OffsetAngle;}
\leftindent{\bold{Method description.}
\italic{graphic_DrawArc} is the
same
as \italic{graphic_DrawPolygon }except it is used for drawing arcs.
\bold{Usage.}
positive
direction.
Angles are degrees from 12 o'clock, with clockwise the
}\paragraph{Drawing a rounded rectangle} \indexi{Graphic++Draw rounded
rectangle}
\indexi{ \italic{graphic_DrawRRect}}
\example{void graphic_DrawRRect(grphc,OuterBox, InnerBox)
struct graphic *grphc;
struct rectangle *OuterBox;
struct rectangle *InnerBox;}
\leftindent{\bold{Method description.}
\italic{graphic_DrawRRect} is
the
same as \italic{graphic_DrawPolygon }except it is used for drawing a
rounded
rectangle, that is, a rectangle with rounded corners.
}
\paragraph{Drawing a region} \indexi{Graphic++Draw region}
\indexi{ \italic{graphic_DrawRgn}}
\example{void graphic_DrawRgn(grphc,Rgn)
struct graphic *grphc;
struct region *Rgn;}
\leftindent{\bold{Method description.}
\italic{graphic_DrawRgn} is the
same
as \italic{graphic_DrawPolygon }except it is used for drawing regions.
}
\subsection{Filling regions}
The fill methods take a Tile argument, which is used to stipple (mask
with a
pattern) the fill operations. Under X11, if the Tile argument is NULL,
the
result is a solid fill of the current foreground color. On monochrome
displays, attempts to use color will set an approximation stipple tile
that
will be used on fills when the Tile argument is NULL (if it is not NULL,
the
Tile argument overrides this approximation tile).
\paragraph{Filling a rectangle} \indexi{Graphic++Fill rectangle}
\indexi{ \italic{graphic_FillRect}}
\example{void graphic_FillRect(grphc, Rect, Tile)
struct graphic *grphc;
struct rectangle *Rect;
struct graphic *Tile;}
\leftindent{\bold{Method description.}
\italic{graphic_FillRect} fills
a
rectangle in grphc with the specified graphic, \italic{Tile}.
\bold{Usage.}
If Tile is 1, then black; if 0, then white.}
\paragraph{Filling a polygon} \indexi{Graphic++Fill polygon}
\indexi{ \italic{graphic_FillPolygon}}
\example{void graphic_FillPolygon(grphc,PointArray, PointCount, Tile)
struct graphic *grphc;
struct point *PointArray;
short PointCount;
struct graphic *Tile;}
\leftindent{\bold{Method description.}
used
to fill polygon regions.
\italic{graphic_FillPolygon} is
}
\paragraph{Filling an oval} \indexi{Graphic++Fill oval}
\indexi{ \italic{graphic_FillOval}}
\example{void graphic_FillOval(grphc, Rect, Tile)
struct graphic *grphc;
struct rectangle *Rect;
struct graphic *Tile;}
\leftindent{\bold{Method description.}
used to
fill oval regions.}
\italic{graphic_FillOval} is
\paragraph{Filling in an arc} \indexi{Graphic++Fill arc}
\indexi{ \italic{graphic_FillArc}}
\example{void graphic_FillArc(grphc, EnclRect,StartAngle,
OffsetAngle,Tile)
struct graphic *grphc;
struct rectangle *EnclRect;
short StartAngle;
short OffsetAngle;
struct graphic *Tile;}
\leftindent{\bold{Method description.}
arc
regions.
\bold{Usage.}
\italic{graphic_FillArc} fills
This method is used to fill in pie chart regions.
}\paragraph{Filling rounded rectangles} \indexi{Graphic++Fill rounded
rectangle}
\indexi{ \italic{graphic_FillRRect}}
\example{void graphic_FillRRect(grphc,OuterBox,InnerBox,Tile) struct
graphic
*grphc;
struct rectangle *OuterBox;
struct rectangle *InnerBox;
struct graphic *Tile;}
\leftindent{\bold{Method description.}
\italic{graphic_FillRRect} fills
rectangles regions created by \italic{DrawRRect}. }
\begindata{bp,538929032}
\enddata{bp,538929032}
\view{bpv,538929032,1285,0,0}
\subsection{Bit block transfers}
\paragraph{Doing a block transfer of bits} \indexi{Graphic++Bit block
transfer}
\indexi{ \italic{graphic_BitBlt}}
\example{void graphic_BitBlt(grphc, SrcRect, DstPixMap, DstOrigin,
ClipRect)
struct graphic *grphc;
struct rectangle *SrcRect;
struct graphic *DstPixMap;
struct point *DstOrigin;
struct rectangle *ClipRect;
}
\leftindent{\bold{Method description. }\italic{graphic_BitBlt} performs
the
transfer of bits from a source pixel map to a destination pixel map. The
source pixel map is formed from \italic{grphc}'s \italic{SrcRect}. The
destination pixel map is specified by \italic{DstPixMap} and the
destination
rectangle has origin \italic{DstOrigin} and is the same size as the
\italic{SrcRect}. The dimensions of the source rectangle and destination
rectangles must be the same. The Clipping rectangle, \italic{ClipRect},
limits the region of the destination that can be affected by the block
transfer; if any parts of the destination fall outside the bounds
specified by
the clipping rectangle, they will be clipped. (Clip Rect not yet
implemented.)
}
\paragraph{Setting the location of a bit} \indexi{Graphic++Set bit
location}
\indexi{ \italic{graphic_SetBitAtBitLoc}}
\example{void graphic_SetBitAtLoc(grphc,XPos,YPos, Value)
struct graphic *grphc;
long YPos;
long XPos;
boolean Value;}
\leftindent{\bold{Method description.}
\italic{graphic_SetBitAtLoc
}sets the
bit at \italic{grphc}'s (\italic{Xpos, Ypos}) coordinate to the value
\italic{Value}. Value should be 1 (black) or 0 (white).
}
\begindata{bp,538929224}
\enddata{bp,538929224}
\view{bpv,538929224,1286,0,0}
\subsection{The logical rectangle}
\paragraph{Getting the logical bounds} \indexi{Graphic++Get logical
bounds}
\indexi{ \italic{graphic_GetLogicalBounds}}
\example{void graphic_GetLogicalBounds(grphc,rect)
struct graphic *grphc;
struct rectangle *rect; }
\leftindent{\bold{Method description. }\italic{graphic_GetLogicalBounds
}sets
the rectangle \italic{rect}'s left, top, width and height state variables
to
the values of \italic{grphc}'s logical rectangle.
\bold{Example.}
\example{struct rectangle *rect;
struct graphic *go;
go = graphic_New();
graphic_GetLogicalBounds (go, &rect);}
sets \italic{rect'}s state variables to \italic{go}'s logical rectangle.
}
\paragraph{Getting the logical right} \indexi{Graphic++Get logical right}
\indexi{ \italic{graphic_GetLogicalRight}}
\example{long graphic_GetLogicalRight(grphc)
struct graphic *grphc; }
\leftindent{\bold{Method description.}
\italic{graphic_GetLogicalRight}
returns the \italic{x} coordinate for the right side of the
\italic{grphc}'s
logical rectangle.
}
\paragraph{Getting the logical bottom} \indexi{Graphic++Get logical
bottom}
\indexi{ \italic{graphic_GetLogicalBottom}}
\example{long graphic_GetLogicalBottom(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description.}
\italic{graphic_GetLogicalBottom
}returns the \italic{y} coordinate for the bottom side of the
\italic{grphc}'s
logical rectangle.}
\begindata{bp,538928520}
\enddata{bp,538928520}
\view{bpv,538928520,1287,0,0}
\paragraph{Getting the enclosed bounds} \indexi{Graphic++Get enclosed
bounds}
\indexi{ \italic{graphic_GetEnclosedBounds}}
\example{void graphic_GetEnclosedBounds(grphc,rect)
struct graphic *grphc;
struct rectangle *rect;}
\leftindent{\bold{Method description.}
\italic{graphic_GetEnclosedBounds}
sets the rectangle \italic{rect}'s left, top, width and height state
variables
to the values of \italic{grphc}'s enclosed rectangle.
}\paragraph{Getting the enclosed right} \indexi{Graphic++Get enclosed
right}
\indexi{ \italic{graphic_GetEnclosedRight}}
\example{long graphic_GetEnclosedRight(grphc)
struct graphic *grphc; }
\leftindent{\bold{Method description.}
\italic{graphic_GetEnclosedRight}
returns the \italic{grphc}'s \italic{x} coordinate for the right side of
the
\italic{grphc}'s enclosed rectangle.
}
\paragraph{Getting the enclosed bottom} \indexi{Graphic++Get enclosed
bottom}
\indexi{ \italic{graphic_GetEnclosedBottom}}
\example{long graphic_GetEnclosedBottom(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description.}
\italic{graphic_GetEnclosedBottom}
returns the \italic{grphc}'s \italic{y} coordinate for the right side of
the
\italic{grphc}'s enclosed rectangle.}
\subsection{The visual rectangle} \paragraph{Getting the visual rectangle
bounds} \indexi{Graphic++Get visual bounds}
\indexi{ \italic{graphic_GetVisualBounds}}
\example{void graphic_GetVisualBounds(grphc,rect) s
truct graphic *grphc;
struct rectangle *rect;}
\leftindent{\bold{Method description.}
gets
the boundaries of the visual rectangle.
}
\italic{graphic_GetVisualBounds}
\paragraph{Getting the visual right}
\indexi{Graphic++Get visual right}\indexi{
\italic{graphic_GetVisualRight}}
\example{long graphic_GetVisualRight(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description.}
gets
the right of the visual rectangle.}
\italic{graphic_GetVisualRight}
\paragraph{Getting the visual bottom} \indexi{Graphic++Get visual bottom}
\indexi{ \italic{graphic_GetVisualBottom}}
\example{long graphic_GetVisualBottom(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description.}
gets
the bottom of the visual rectangle.}
\italic{graphic_GetVisualBottom}
\begindata{bp,538928456}
\enddata{bp,538928456}
\view{bpv,538928456,1288,0,0}
\subsection{The clipping rectangle} \paragraph{Setting the clipping
rectangle}
\indexi{Graphic++Set clipping rectangle}
\indexi{ \italic{graphic_SetClippingRect}}
\example{void graphic_SetClippingRect(grphc, rect)
struct graphic *grphc;
struct rectangle *rect;}
\leftindent{\bold{Method description.}
\italic{graphic_SetClippingRect}
sets
\italic{grphc}'s clipping rectangle to \italic{rect}.}
\paragraph{Clearing a clipping rectangle} \indexi{Graphic++Clear clipping
rectangle}
\indexi{ \italic{graphic_ClearClippingRect}}
\example{void graphic_ClearClippingRect(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description.}
\italic{graphic_ClearClippingRect}
clears \italic{grphc}'s clipping rectangle.
}\paragraph{Getting the current clipping rectangle} \indexi{Graphic++Get
clipping rectangle}
\indexi{ \italic{graphic_GetClippingRect}}
\example{void graphic_GetClippingRect(grphc,rect)
struct graphic *grphc;
struct rectangle *rect;}
\leftindent{\bold{Method description.}
\italic{graphic_GetClippingRect}
sets
\italic{rect} to \italic{grphc}'s clipping rectangle. If \italic{grphc}
has
not set a clipping rectangle, \italic{rect} is set to \italic{grphc}'s
visual
rectangle.}
\begindata{bp,538271624}
\enddata{bp,538271624}
\view{bpv,538271624,1289,0,0}
\subsection{The transfer mode}
\paragraph{Setting the transfer mode} \indexi{Graphic++Set transfer mode}
\indexi{Graphic++Drawing}
\indexi{ \italic{graphic_SetTransferMode}}
\example{void graphic_SetTransferMode(grphc,NewTransferMode) struct
graphic
*grphc;
short NewTransferMode;}
\leftindent{\bold{Method description. }\italic{graphic_SetTransferMode}
sets
the transfer mode for drawing. The default is
\italic{graphic_}\smaller{COPY}. The transfer mode specifies how each
source
element S and each destination element D should combine to produce the
result.
The source and destination each have four elements, so there are sixteen
possible ways to combine them.
It is useful to think of the source and destination as forming a table of
bits:
\formatnote{
graphic_SOURCE\formatnote{
}0\formatnote{ -- }0
--
graphic_DESTINATION\formatnote{
-}1\formatnote{ -- }0
}1\formatnote{
--
--
}1\formatnote{
}1\formatnote{
--
--
}0\formatnote{
}__________________________________________________________
\formatnote{Transfer mode result\formatnote{
}?\formatnote{ -- }?\formatnote{ -- }?
--
}?\formatnote{
--
}
The transfer mode specifies the Result when S and D are both 1, when S is
1
and D is 0, when S is 0 and D is 1 and when both S and D are 0. When a
bit is
1, it is interpreted as black; when 0, as white. For example, if you
want the
result to be 1 (that is black) only when both the source and destination
are 1
(black), you would AND together the source and destination
(\italic{graphic_}\smaller{SOURCE} &
\italic{graphic_}\smaller{\smaller{DEST}}) to form the transfer mode. If
you
want the source to be copied directly without regard to the current value
of
the destination, you would use \italic{graphic_}\smaller{SOURCE} alone to
form
the transfer mode.
You can construct the transfer mode by forming boolean combinations from
the
graphic constants graphic_SOURCE and graphic_DESTINATION directly. For
convenience, the following common combinations have been defined as well:
\description{
\italic{graphic_}\smaller{COPY}\formatnote{
the
source
--
}the bit values are from
\italic{graphic_}\smaller{OR}\formatnote{ -- }the bit values result
from
\smaller{OR}-ing the source and the destination
\italic{graphic_}\smaller{XOR}\formatnote{ -from an
exclusive or of the source and the destination
}the bit values result
\italic{graphic_}\smaller{AND}\formatnote{ -from an
\smaller{AND}-ing the source and destination
}the bit values result
\italic{graphic_}\smaller{WHITE}\formatnote{
white
--
}the bit values are
\italic{graphic_}\smaller{BLACK}\formatnote{
black
--
}the bit values are
\italic{graphic_}\smaller{INVERT}\formatnote{ -- }the bit values are
the
opposite of the destination (if black, white; if white, black)
}
}
\begindata{bp,538269640}
\enddata{bp,538269640}
\view{bpv,538269640,1290,0,0}
\paragraph{Getting the transfer mode} \indexi{Graphic++Get transfer mode}
\indexi{ \italic{graphic_GetTransferMode}}
\example{short graphic_GetTransferMode(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description.}
gets
the transfer mode.
\italic{graphic_GetTransferMode}
}
\subsection{Buffered output} \paragraph{Flushing graphic output}
\indexi{Graphic++Flushing}
\indexi{ \italic{graphic_FlushGraphics}}
\example{void graphic_FlushGraphics(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description.}
\italic{graphic_FlushGraphics}
insures that drawing commands are actually done (not buffered).
}
\subsection{Patterns} \paragraph{Making white patterns}
\indexi{Graphic++White
patterns}
\indexi{ \italic{graphic_WhitePattern}}
\example{struct graphic *graphic_WhitePattern(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description.}
\italic{graphic_WhitePattern
}returns
a graphic that can be used to supply a white pixmap for fill operations.
}
\paragraph{Making black patterns} \indexi{Graphic++Black patterns}
\indexi{ \italic{graphic_BlackPattern}}
\example{struct graphic *graphic_BlackPattern(grphc)
struct graphic *grphc;}
\leftindent{\bold{Method description.}
\italic{graphic_BlackPattern}
returns
a graphic that can be used to supply a black pixmap for fill operations.
}
\paragraph{Making gray patterns} \indexi{Graphic++Gray patterns}
\indexi{ \italic{graphic_GrayPattern}}
\example{struct graphic *graphic_GrayPattern(grphc,IntensityNum,
IntensityDenom)
struct graphic *grphc;
long IntensityNum, IntensityDenom;}
\leftindent{\bold{Method description.}
\italic{graphic_GrayPattern}
returns
a graphic that can be used to supply a grey pixmap for fill operations.}
\begindata{bp,538271496}
\enddata{bp,538271496}
\view{bpv,538271496,1291,0,0}
\bold{\bigger{Color}}
Under X11, the foreground and background colors can be set to achieve
color
output. Colors can be specified either by an ASCII string name, to be
looked
up in the X11 color database, or by specifying RGB values. These RGB
values
can be expressed as integers between 0 and 65535, where 0 is off and
65535 is
full intensity, or as real numbers between 0.0 and 1.0, where 0.0 is off
and
1.0 is full intensity. Integers and reals can be used interchangably to
set
and get the foreground and background colors.
On monochrome displays, attempts to use color will set an approximation
stipple tile that will be used on fills when the Tile argument to the
graphic
fill methods is NULL (if it is not NULL, the Tile argument overrides this
approximation tile). If they choose to, programmers can use the
\typewriter{DisplayClass} method to determine the nature of the display,
and
can special case monochrome and color as they see fit, effectively
bypassing
the built-in approximation on monochrome.
\bold{Determining the display class
}
\example{long graphic_DisplayClass( graphic );
struct graphic *graphic}
\indent{\bold{Method description}. \italic{graphic_DisplayClass} returns
a bit
mask long integer that describes the display of the server that the
application is using. The return value consists of the appropriate
symbolics
bitwise-or'ed together. The set of possible values includes symbolics for
the
six display classes defined by X11, plus additional symbolics defined by
the
graphic class:
\typewriter{graphic_Monochrome
graphic_Color
graphic_PseudoColor
graphic_GrayScale
graphic_DirectColor
graphic_TrueColor
graphic_StaticColor
graphic_StaticGray}
All color displays will have \typewriter{graphic_Color} or'ed in with
the
appropriate display class symbolic. StaticGray displays with a colormap
of
size 2 will have \typewriter{graphic_Monochrome} or'ed in.
\bold{Example}
}
\example{if ( graphic_DisplayClass( graphic ) & graphic_Color )
...color handling code...
else if ( graphic_DisplayClass( graphic ) & graphic_Monochrome )
... monochrome handling code}
\bold{Setting the foreground color
}
\example{void graphic\bold{_}SetForegroundColor (graphic, colorName, red,
green, blue);
}\example{struct graphic *graphic;
char *colorName;
long red;
long green;
long blue;}
\indent{\bold{Method description}. \italic{graphic_SetForegroundColor}
optionally takes a colorName argument or RGB values (expressed as
integers
between 0 and 65535) to set the foregound color. If the colorName
argument is
supplied, it is used to look up RGB values and set the foreground color
accordingly. If colorName is NULL, the red, green, and blue values are
used.}
\example{void graphic_SetFGColor(graphic, red,
green, blue );
struct graphic *graphic;
double red;
double green;
double blue;}
\indent{\bold{Method description}.\italic{\italic{ graphic_SetFGColo}r}
accepts red, green, and blue real number values between 0.0 and 1.0 to
specify
the foreground color. }
\bold{G}\bold{etting the foreground color
}
\example{void graphic\bold{_}GetForegroundColor (graphic, colorName, red,
green, blue);
}\example{struct graphic *graphic;
char **colorName;
long *red;
long *green;
long *blue;
}
\indent{\bold{Method description}. \italic{graphic_GetForegroundColor}
returns
the currently set foreground color. If a colorName was originally used to
specify the color, both it and the resultant RGB values are returned.
Otherwise only the RGB values are returned.}
\example{void graphic_GetFGColor(graphic, red,
green, blue );
struct graphic *graphic;
double *red;
double *green;
double *blue;}
\indent{\bold{Method description}.\italic{\italic{ graphic_GetFGColo}r}
returns the red, green, and blue real number values between 0.0 and 1.0
that
describe the currently set foreground color.
}\bold{Setting the background color
}
\example{void graphic\bold{_}SetBackgroundColor (graphic, colorName, red,
green, blue);
}\example{struct graphic *graphic;
char *colorName;
long red;
long green;
long blue;}
\indent{\bold{Method description}. \italic{graphic_SetBackgroundColor}
optionally takes a colorName argument or RGB values (expressed as
integers
between 0 and 65535) to set the backgound color. If the colorName
argument is
supplied, it is used to look up RGB values and set the background color
accordingly. If colorName is NULL, the red, green, and blue values are
used.}
\example{void graphic_SetFGColor(graphic, red,
green, blue );
struct graphic *graphic;
double red;
double green;
double blue;}
\indent{\bold{Method description}.\italic{\italic{ graphic_SetFGColo}r}
accepts red, green, and blue real number values between 0.0 and 1.0 to
specify
the background color. }
\bold{G}\bold{etting the background color
}
\example{void graphic\bold{_}GetBackgroundColor (graphic, colorName, red,
green, blue);
}\example{struct graphic *graphic;
char **colorName;
long *red;
long *green;
long *blue;
}
\indent{\bold{Method description}. \italic{graphic_GetBackgroundColor}
returns
the currently set background color. If a colorName was originally used to
specify the color, both it and the resultant RGB values are returned.
Otherwise only the RGB values are returned.}
\example{void graphic_GetBGColor(graphic, red,
green, blue );
struct graphic *graphic;
double *red;
double *green;
double *blue;}
\indent{\bold{Method description}.\italic{\italic{ graphic_GetBGColo}r}
returns the red, green, and blue real number values between 0.0 and 1.0
that
describe the currently set background color.
}
\begindata{bp,538271432}
\enddata{bp,538271432}
\view{bpv,538271432,1292,0,0}
\subsection{Redirecting graphic output} \paragraph{Redirecting a graphic}
\indexi{Graphic++Redirect}
\indexi{ \italic{graphic_RedirectGraphic}}
\example{void graphic_RedirectGraphic(grphc,SecondaryGraphic) struct
graphic
*grphc;
struct graphic *SecondaryGraphic;}
\leftindent{\bold{Method description. }\italic{graphic_RedirectGraphic}
is a
private method intended for future expansion.
The intention is to
provide a
way to switch between graphics systems on the fly, such as generating
PostScript by capturing graphics calls rather than via a print command.
This
method would redirect a graphic so that it went to a PS version instead.
\bold{Usage.}
time.
Should not be used by application programmers at this
}
\begindata{bp,537558784}
\enddata{bp,537558784}
\view{bpv,537558784,1294,0,0}
Copyright 1992 Carnegie Mellon University and IBM.
All rights reserved.
\smaller{\smaller{$Disclaimer:
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose is hereby granted without fee,
provided that the above copyright notice appear in all copies and that
both that copyright notice, this permission notice, and the following
disclaimer appear in supporting documentation, and that the names of
IBM, Carnegie Mellon University, and other copyright holders, not be
used in advertising or publicity pertaining to distribution of the
software
without specific, written prior permission.
IBM, CARNEGIE MELLON UNIVERSITY, AND THE OTHER COPYRIGHT HOLDERS
DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
IN NO EVENT
SHALL IBM, CARNEGIE MELLON UNIVERSITY, OR ANY OTHER COPYRIGHT HOLDER
BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS SOFTWARE.
$
}}\enddata{text,538369524}
Download