Table of Contents
 
 XAW - X Athena Widgets
 
 
Xaw is a Widget set based on the Xt Intrinsics.  This manual
page describes the XFree86 additions and modifications to the Xaw library,
 as well as some of the common interfaces. 
 
All the Xaw widgets now
have the additional translations call-proc, declare, get-values and  set-values.
The syntax for these actions is: 
action-name(boolean-expression, arguments) 
Action-name is one of call-proc, declare, get-values or set-values. 
Boolean-expression is composed with the operators | (or), & (and), ^ (xor),
and ~ (not). The operands can be a variable name, that starts with a $;
a resource name without the bindings . and *; or a constant name, including
mine (event->xany.window == XtWindow(widget)), faked (event->xany.send_event
!= 0), true (1)
 and false (0). 
Arguments are self explanatory, when starting with a $ they name a variable,
else, a resource name. 
- call-proc 
- This action allows the evaluation of a boolean
expression, in the first parameter, before calling a action procedure. Only
if the expression resolves to true the procedure is called. Example: 
 call-proc("$inside & $pressed", notify)
- declare 
- This action, like get-values
is used to create new variables, or change their value. Example: 
 declare(1, $pressed, 1)
- get-values 
- This actions allows reading a resource
value into a variable. Example: 
 get-values(1, $fg, foreground, $bg, background)
- set-values 
- This action allow
setting a resource in the widget. Example: 
 set-values(1, foreground, $bg, background, $fg)
  
Sample translation to make
a label widget behave like a button: 
<Map>:      get-values(1, $fg, foreground, $bg, background)\n\
<Btn1Down>: set-values(1, foreground, yellow, background, gray30)\n\
<Btn1Up>:   set-values(1, foreground, $fg, background, $bg)
 
All the Xaw widgets have now the additional resource displayList.
This resource allows drawing the widget decorations with commands embedded
in the resource string. The displayList resource has the syntax: 
[class-name:]function-name arguments[[{;\n}]...] 
Class-name is any registered set of functions to draw in the widget. Currently
the only existing class is xlib. 
Function-name is the drawing or configuration function to be called, described
bellow. 
Arguments may be anything suitable to the displayList function being called.
When the function requires a coordinate, the syntax is {+-}<integer> or <integer>/<integer>.
Examples: 
    +0,+0      top, left
    -0,-0      bottom, right
    -+10,-+10  bottom+10, right+10
    +0,1/2     left, vertical-center
 
- arc-mode mode 
- Sets the arc mode. Accepted parameters are "pieslice" and
"chord", that sets the arc to ArcPieSlice or ArcChord, respectively. Example:
 arc-mode chord
- bg color-spec 
 
-  background color-spec 
- Sets the  background  color. Argument  must  as 
valid color  specification. Example: 
 background red
- cap-style style 
- Sets the cap style. Accepted parameters are
 "notlast", "butt", "round", and "projecting", that sets  the cap  style
to  CapNotLast, CapBut,  CapRound or CapProjecting, respectively. Example:
 cap-style round
- clip-mask pixmap-spec 
- Sets the pixmap for the clip mask. Requires
a pixmap parameter, as described in the PIXMAPS section of this man page.
Example: 
 clip-mask xlogo11
- clip-origin x,y 
- Sets the clip x and y origin. Requires two
arguments,  a x and y coordinate. Example: 
 clip-origin 10,10
- clip-rects x1,y1,x2,y2 [...,xn,yn] 
 
-  clip-rectangles x1,y1,x2,y2 [...,xn,yn] 
- Sets a list of rectangles to the
clip mask. The  number of arguments must be a multiple of four. The arguments
are coordinates. The parser calculates the width and height of the rectangles.
Example: 
 clip-rects 0,0,10,20, 20,10,30,30
- coord-mode mode 
- Changes  the  coord  mode
 for   fill-polygon,  draw-lines,  and draw-points. Accepted parameters are
"modeorigin" and "previous", that sets the coord mode  to CoordModeOrigin
or  CoordModePrevious, respectively. Example: 
 coord-mode previous
- copy-area {pixmap-spec|.},dstx,dsty[,x2,y2,srcx,srcy] 
- Calls
XCopyArea.  The  character .  means  copy  the window  contents, pixmap-spec
is as defined in  the PIXMAPS sction of  this manual page. X2, and y2 are
 coordinates of the  end copy, not the  width and height;  if  not  defined,
  the  parser  calculates  it.   Src_x  and src_y defaults to zero. Example:
 copy-area Term,10,10
- copy-plane {pixmap-spec|.},dstx,dsty[,x2,y2,srcx,srcy,plane]
- Calls XCopyPlane.  The character  .  means copy  the window  contents, pixmap-spec
is as defined in  the PIXMAPS sction of  this manual page. X2, and y2 are
 coordinates of the  end copy, not the  width and height;  if  not  defined,
  the  parser  calculates  it.   Src_x  and src_y defaults to zero. Plane
defaults to one. Example: 
 copy-plane star,10,10
- dashes i1[...,in] 
- Sets the dashes for line drawing. Accepts
up to 127 arguments. Example: 
 dashes 3,7 9,10
- draw-arc x1,y1,x2,y2[,start-angle,end-angle] 
- Draws an arc.
The four first arguments are  the rectangle enclosing the arc. The two 
remaining  arguments, if  any,  are the  start  and  end angle,  in degrees.
Example: 
 draw-arc +0,+0,-1,-1,0,90
- draw-rect x1,y1,x2,y2 
 
-  draw-rectangle x1,y1,x2,y2 
- Draws a  rectangle. Requires  four arguments,
 that  are the  start and  end coordinates. Example: 
 draw-rect +1,+1,-5,-5
- draw-string x,y,"string" 
- Draws a  text  string.  Requires
 three  arguments,  a  x  coordinate,  a  y coordinate and a string. Strings
 that have white spaces can  be quoted with the " character,  the character
 \ can also  be used,  but, you need to escape this character twice. Example:
 draw-string 10,10, "Hello world!"
- exposures boolean 
- Sets the graphics exposures
in  the GC. Allowed parameters are  a integer or the strings "true", "false",
"on" and "off". Example: 
 exposures true
- fill-arc x1,y1,x2,y2[,start-angle,end-angle] 
- Like draw-arc,
but fills  the contents of  the arc with  the currently selected foreground.
Example: 
 fill-arc +0,+0,-1,-1,0,180
- fill-poly x1,y1 [...,xn,yn] 
 
-  fill-polygon x1,y1 [...,xn,yn] 
- Like draw-lines, but  fills the enclosed  polygon
and joins  the first and last point, if they are not at the same position.
Example: 
 fill-poly +0,+10, +10,+20, +30,+0
- fill-rect x1,y1,x2,y2 
 
-  fill-rectangle x1,y1,x2,y2 
- Like draw-rect,  but fills  the  contents of
 the  rectangle with  the selected foreground color. Example: 
 fill-rect +10,+10,-20,-20
- fill-rule rule 
- Sets the fill  rule. Accepted parameters
 are "evenodd" and  "winding", that sets the fill rule to EvenOddRule or
WindingRule, respectively. Example: 
 fill-rule winding
- fill-style style 
- Sets the fill style. Allowed parameters
are "solid", "tiled", "stippled" and "opaquestippled",  that  sets  the
 fill  style   to  FillSolid,  FillTiled, FillStippled or FillOpaqueStippled,
respectively. Example: 
 fill-style tiled
- font font-spec 
- Sets the font for text functions. Example:
 font -*-*-*-R-*-*-*-120-*-*-*-*-ISO8859-1
- fg color-spec 
 
-  foreground color-spec 
- Like background, but sets the current foreground
color. Example: 
 foreground blue
- mask 
- This command is useful when you want to draw only
 in the region that really needs to be repainted. Requires no arguments.
- function function-spec 
- Sets the specific GC function. Allowed parameters
are "set", "clear", "and", "andreverse", "copy",  "andinverted", "noop",
 "xor", "or",  "nor", "equiv", "invert", "orreverse", "copyinverted" and
 "nand", that set the  function to GXset, GXclear, GXand,  GXandReverse,
GXcopy, GXandInverted,  GXnoop, GXxor, GXor, GXnor,  GXequiv,  GXinvert,
 GXorReverse,  GXcopyInverted  or  GXnand, respectively. Example: 
 function xor
- join-style style 
- Sets the join  style. Allowed parameters  are
"miter", "round"  and "bevel", that  sets   the  join   style  to   JoinMiter,
 JoinRound   and  JoinBevel, respectively. Example: 
 join-style round
- image {pixmap-spec},xs,ys,[xe,ye] 
- This function is implemented
as a way to quickly compose complex decorations in widgets. Pixmap-spec is
as defined in the PIXMAPS section of this manual page, xs and ys are the
coodinates from where start copying the pixmap, xe and ye are optional
(defaults to xs + pixmap.width and ys + pixmap.height respectively). If the
pixmap has a mask, the copy is masked accordingly. Example: 
 image pixmap.xpm,0,0,20,20
- line x1,y1,x2,y2 
 
-  draw-line x1,y1,x2,y2 
- Draws a  line with  the current  foreground color.
 Require four  arguments. Example: 
 line +0,+0, -1,-1
- line-width integer 
- Allow selecting a different line width
for the drawing. Example: 
 line-width 2
- line-style style 
- Sets the  line  style.  Accepted  parameters
 are "solid",  "onoffdash"  and "doubledash", that  sets  the  line  style
 to LineSolid,  LineOnOffDash  or LineDoubleDash, respectively. Example:
 line-style onoffdash
- lines x1,y1,x2,y2 [...,xn,yn] 
 
-  draw-lines x1,y1,x2,y2 [...,xn,yn] 
- Draws a list of lines. Any number of arguments
may be supplied. Example: 
 lines +0,-1, -1,-1, -1,+0
- paint-string x,y,"string" 
- Identical to draw-string,
but also uses the background color. Example: 
 paint-string 10,20, "Sample text"
- point x,y 
 
-  draw-point x,y 
- Draws a point. Requires two arguments. Example: 
 point +10,+10
- plane-mask integer 
- Allows setting the plane mask. Requires
a integer parameter. Example: 
 plane-mask -1
- points x1,y1 [...,xn,yn] 
 
-  draw-points x1,y1 [...,xn,yn] 
- Draws a list of points at the specified coordinates.
Example: 
 points +1,+2, +1,+4, +1,+6
- segments x1,y1,x2,y2 [...,xn,yn] 
 
-  draw-segments x1,y1,x2,y2 [...,xn,yn] 
- Draws a list of segment lines.  Number
of parameters must be  multiple of 4. Example: 
 segments +1,+2,+1,-3, +2,-2,-3,-2
- shape-mode mode 
- Allows  setting  the  shape
  mode  used  in   fill-polygon.  Accepted parameters are "complex", "convex"
or "nonconvex", that  sets the shape mode to Complex, Convex or Nonconvex,
accordingly. Example: 
 shape-mode convex
- stipple pixmap-spec 
- Sets the pixmap for the  stipple. Requires
a pixmap  parameter, as described in the PIXMAPS section of this man page.
Example: 
 stipple plaid
- subwindow-mode mode 
- Sets   the   subwindow   mode   in   the
  GC.   Accepted   parameters   are "includeinferiors" and  "clipbychildren",
that  sets the  subwindow mode  to IncludeInferiors or ClipByChildren,
respectively. Example: 
 subwindow-mode includeinferiors
- tile pixmap-spec 
- Sets the pixmap for the
 tile. Requires a pixmap parameter,  as described in the PIXMAPS section
of this man page. Example: 
 tile xlogo11?foreground=red&background=gray80
- ts-origin x,y 
- Sets the tile
 stipple x and  y origin.  Requires two arguments,  a x  and y coordinate.
Example: 
 ts-origin 10,10
- umask 
- Disables the gc mask, when it was set  with the command
mask. Requires no arguments. 
  
Example for drawing a shadow effect in a widget:
foreground gray30;\
draw-lines +1,-1,-1,-1,-1,+1;\
foreground gray85;\
draw-lines -1,+0,+0,+0,+0,-1
 
A String to Pixmap converter was added to Xaw. This converter is
meant to be extended, and has enough abstraction to allow loading several
image formats. It uses a format that resembles a URL, with the syntax: 
[type:]name[?arg=val[{&}...]] 
Type actually can be one of bitmap, gradient or xpm. 
Name may be a file name, or, in the case of type gradient, may be either
vertical or horizontal. 
Arg=val is a list of arguments to the converter. The most common arguments
are foreground and background. Gradients supports also the arguments start
and end (colors to start and end the gradient); the steps argument, to
allow using less colors; and the size argument to specify the size of the
gradient. The xpm converter understands the closeness argument, that helps
using less colors (useful if you have a limited colormap). 
 
Most
of the changes to this version of the Xaw library were done in the TextWidget,
TextSrcObject, TextSinkObject and related files. The text widget is based
in the emacs text editor. In this release, the emacs compatibility was increased.
New text actions include: 
- indent 
- This action allow indenting text blocks.
It is not enabled by default. A translation to call this action was added
to the xedit editor, binded to Control<Key>X,<Key>Tab. 
- keyboard-reset 
- Resets
the keyboard state. Reverts the multiply to 1, and if undo is enabled, toggle
between undo and redo. Binded by default to Control<Key>G. 
- kill-ring-yank 
- In
this version of Xaw, text killed in any text field is kept in memory, allowing
to cut and paste internally to the program between text fields. The default
key binding to this actions is Meta<Key>Y. 
- numeric 
- Listed here only for purposes
of documentation. It is called by default when one of the characters 1,
2, 3, 4, 5, 6, 7, 8, 9, 0, or - is typed, allowing composing the multiplication
number of text actions. 
- set-keyboard-focus 
- This action is normally binded
to the <Btn1Down> event. Will set the input focus on the top level widget
to the text field. Not enabled by default. 
- toggle-overwrite 
- This action toggles
overwrite mode. In overwrite mode, any text inserted in a text field will
replace existing text. Normally binded to <Key>Insert. 
- undo 
- Binded by default
to Control<Key>_, will call the undo function. Undo is not enabled by default.
It is enabled setting the enableUndo resource of the textSrcObject. 
  
The
new text resources include: 
- justify (Class Justify) 
- Sets the text justification.
Can be one of left, right, center or full. Only enabled when the autoFill
resource is set, and the resources leftColumn and rightColumn are correctly
set. 
- leftColumn (Class Column) 
- Specifies the left column to break text. Text
lines started with a alphanumeric character will automatically start at
this column. 
- positionCallback (Class Callback) 
- Allows installing a callback
that will be called every time the cursor is moved and/or the file change
its size. The callback is called with a pointer containing the following
data: 
 typedef struct {
    int line_number;
    int column_number;
    XawTextPosition insert_position;
    XawTextPosition last_position;
    Boolean overwrite_mode;
} XawTextPositionInfo;
This callback is intended to help programmers to write text editors based
on the Xaw widget set.
- rightColumn (Class Column) 
- Specifies the right column
to break text. Text lines started with a alphanumeric character will automatically
end at this column. 
  
The textSrcObject was modified to
allow showing its contents in more than one window, and also store undo
information. The new resources for the textSrcObject are:
- callback (Class
Callback) 
- Previous versions of Xaw had this resource in the subclasses.
This was changed to make it possible to tell the callback the state of
the text, when undo is enabled. 
- enableUndo (Class Undo) 
- A boolean resource,
that enables or disables the undo function. The default value is False. 
- sourceChanged
(Class Changed) 
- Like the callback resource, it was on the subclasses on
previous versions. Now it is in the textSrcObject to control the changed/unchanged
state, when undo is enabled. 
  
The textSinkObject subclasses
asciiSinkObject and multiSinkObject were slightly changed to offer a new
cursor shape, that indicates the input focus of the text widget and allow
setting its color. The new resource is:
- cursorColor (Class Color) 
- Allows
setting the cursor color of the text. This color is also used to draw selected
text. 
  
The simpleMenuWidget algorithm to lay out menu
entries was changed to enable multiple columns when one single column does
not fit in the screen. It was also modified to enable sub menus.
 
A new resource was added to the smeBSBObject, to allow binding sub
menus to it. The new resource is: 
- menuName (Class MenuName) 
- The name of
the popup widget to be popped up when the pointer is over the menu entry,
or NULL. Note that the named menu must be a child of the popup parent of
the smeBSBObject. 
  
Xaw is actually being actively worked. Programs
intending to be fully compatible with future  releases  of  the  Xaw  library
 should  use  only  the  public interfaces. While  widget subclassification
 is not  a bad,  and some  times encouraged  programming   practice,  programs
  that  access   private  data structures may have problems  with newer
releases,  in the current  stage of the Xaw development. Several efforts
are being done to avoid  such problems, and, at least, guarantee that newer
releases will be source and binary compatible.
 
The XFree86 additions
and modifications to Xaw,  were written by Paulo Cesar Pereira de Andrade
Table of Contents