gl2 commands are for 2D (GDI) drawing in an isigraph control. Script system\main\gl2.js defines gl2 verbs.
load 'gl2' NB. define verbs such as: glarc=:11!:2001
Most gl2 commands add drawing information to a buffer. When the control is painted, it is painted with these buffered commands. Some commands, such as glcursor are not buffered commands and either have an immediate effect, or change a global state.
mapping mode affects how the logical units of the gl2 commands are mapped onto the display surface.
isigraph events allow user interaction with the isigraph control with the keyboard and mouse.
gl2 commands
glarc x y w h xa ya xz yz - draw arc on the ellipse defined by rectangle. Arc starts at xa,ya and ends at xz,yz. Start and end points need not lie on the ellipse, they define a line from the center that intersects the ellipse.
glbkcolor '' - set current background color to current color (last grgb). Background color is used in the gaps in styled lines and as the background for text.
glbkmode bool - set background mode for gbkcolor to OPAQUE with 0, or TRANSPARENT with 1
glbmp filename -display bitmap in glbmpxywh rectangle
glbmpxywh x y w h - set rectangle for the display of a bitmap
glbrush '' - select solid brush in current color
glbrushnull '' - select null brush (leaves area painted with it unchanged)
glcapture type - type is 0 release, 1 capture, 2 line band, 3 box band, 4 ellipse band, 5 vertical line, 6 horizontal line. A capture is normally done in a mouse down event and a glcapture 0 should be done in the mouse up event.
glcaret w h - create a caret at the current position with a width and height of w h.
glchord x y w h xa ya xz yz - same parameters as garc. Drawn with pen and brush.
glclear '' - clear isigraph drawing buffer and reset defaults. If a printer context has been created, it is carried forward. Default values are 0 except for the following:
glmap anisotropic
glzmap twips
glbkcolor white
glwindowext 1000 1000
glplaymap anisotropic
glplayextent 1000 1000
glextent 1
glclear n - initialize graphics state. If n is '' or 0, then an InvalidateRect is done, If n is 1, then it is not done.
glellipse x y w h - draw an ellipse in the rectangle with pen and brush
glextent bool - 0 selects the screen context and 1 selects the printer for glqextent and glqtextmetrics. The default is 1.
glextentfont fontspec - set font for glqtextent and glqtextmetrics
glfile filename - set filename for glsave and glsavebmp. '' is the clipboard.
glflood i j color - fill area around point i,j with the current brush. The area is bounded by color.
glfont fontspec - font for text commands
glgrid '' - buffered drawing command that causes a grid to be painted. The grid is painted based on the state information set by the following glgrid... commands.
glgridatt attributes - A set of attributes is a list of 20 integers. The argument is the ravel of the sets of attributes.
attribute set: pen, brush, text, font, align, edit, 8 unused values
pen, brush, and text are 3 integers with RGB values
font: _1 selects font based on first character (-, _ , and digit select font 1); 0 selects font 0, 1 selects font 1
align: _1 selects left or right based on first character (-, _, and digit selects right), 0 selects right, 1 selects left, 2 selects center.
edit: 0 not editable, 1 editable
glgridborder borders - a border is specified as 20 integers:
row, col, rows, cols, left b, top b, right b, bottom b
b field for each side is a type and RGB color
type is 0 to 3 and 11 for none, thin, medium, fat, and double line
glgriddrawmark '' - undraw previous mark and draw new mark
glgridedit text - create edit box at mark
glgridedit 0 - destroy edit box
glgridedit 1 - enable arrow keys in edit box
glgridfill width height fixfilltype filltype - information about cells beyond the grid data
glgridfix row col - fixed rows and columns
glgridfont0 fontspec
glgridfont1 fontspec
glgridgetedit '' - get text from edit box
glgridgettext row col - get text for this cell
glgridgettype row col - get type and attributes for this cell
glgridh heights - row heights for the grid data
glgridinvalidate bool - 1 causes subsequent glgridtext and glgridtype commands to invalidate the cells they change.
glgridmark row col rows cols - marked range of cells
glgridrc rows cols - rows and columns in grid data
glgridrchw row col rows cols - select subarray used in subsequent glgridtext and glgridtype commands
glgridscroll row col - scrolled rows and columns
glgridskip row col - rows and columns in total data that are not in grid data
glgridtext - NULL terminated strings of grid data
glgridtype types - integer value for each cell that selects its attributes
glgridw widths - column widths for the grid data
glline i j - draw line from current position to point i,j and update current position
gllined I j k l linelen spacelen [linelen spacelen ...] - draw dashed line from i,j to k,l. Works only for vertical and horizontal lines.
gllines pts - draw connected lines. pts is 2 or more points.
glmap mode - mode is one of: MM_TEXT, MM_LOMETRIC, MM_HIMETRIC, MM_LOENGLISH, MM_HIENGLISH, MM_TWIPS, MM_ISOTROPIC, MM_ANISOTROPIC. The default is anisotropic. See mapping mode.
glmapraw - turn off default isigraph mapping behavior. See mapping mode.
glmark - set mark in graphics buffer and reset pens etc.
glmarkc - clear graphics buffer back to last gmark (does not undraw)
glmove i j - move current position to i,j
glpaint '' - does immediate paint of a 2D control. The painting of a 3D control is delayed until the paint event handler can be run.
glpaintx '' - mark control for painting when possible. If a glpaintx is done and J continues execution for a while, then the painting will be delayed.
glpen i [style] - select pen. pen is color from last glrgb command and is i units wide. style is from the set (ps_solid, ps_dash, ps_dot, ps_dashdot, ps_dashdotdot, ps_null, ps_insideframe)
gllpie x y w h xa ya xz yz - draw pie shaped wedge with pen and brush. Same parameters as garc.
glpixel i j; draw pixel at i,j in current color
glplay filename _ the wmf file filename is played into the isigraph control. The glplaymap, glplayxywh, and glplayext commands determine how the file is played.
glplayext extx exty _ windowport extent information for scaling the wmf file
glplaymap mode _ set map mode for playing a wmf file. See mapping mode.
glplayxywh x y w h _ set rectangle for playing a wmf file. This is not a clipping rectangle and if the drawing goes beyond the w and h values it will be displayed. The w h values establish the extents that are used for scaling if the drawing is done in an isotropic or anisotropic mapping.
glpolygon pts _ draw polygon in pen and brush
glpolymode bool - 0 selects alternate filling of polygon and 1 selects winding
glqdevmode '' - return printer document properties (see glzdevmode)
glqextent text - return width and height of the text in a particular font on a particular device. The glextent command determines whether the screen or printer context is used and glextentfont determines which font is used.
The layout (rasterization) of text is quite complicated and the final length of text is not simply the sum of the lengths of the individual characters. For this reason, calculations based on character widths are not very useful.
In addition, the length of text depends on the device. Drawing "testing 1 2 3" with an arial 240 font in a twips mapping will have different lengths on the screen, on a 150dpi printer, and on a 300dpi printer. Calculations such as line breaks, page breaks, and positioning stuff at the end of text are sensitive to the actual device.
glqprinter '' - return printer information
horzsize | width in millimeters |
vertsize | height in millimeters |
horzres | width in pixels |
Vertres | height in raster lines (pixels) |
logpixelsx | horizontal pixels per logical inch |
logpixelsy | vertical pixels per logical inch |
bitspixel | number of color bits per pixel. |
planes | number of color planes |
numcolors | number of entries in the device's color table (_1 if > 8) |
aspectx | relative width of a pixel |
aspecty | relative height of a pixel |
aspectxy | diagonal width of a pixel |
physicalwidth | width of the physical page. A 600 dpi printer on 8.5"x11" paper could have a physical width of 5100. The physical page is almost always greater than the printable area of the page, and never smaller. |
physicalheight | height of the physical page |
physicaloffsetx | distance from the left edge of the physical page to the left edge of the printable area. A 600 dpi printer on 8.5"x11" paper, that cannot print on the leftmost 0.25" of paper, has a horizontal physical offset of 150. |
physicaloffsety | distance from the top edge of the physical page to the top edge of the printable area |
glqtextmetrics '' - return font information. The context (screen or printer) is selected by glextent and the font is selected by glextentfont. The values are: Height, Ascent, Descent, InternalLeading, ExternalLeading, AverageCharWidth, MaxCharWidth
glqwh '' - return window width and height in pixels.
glrect x y w h - draw rectangle with pen and brush
glrgb color - set current color
glroundr x y w h rw rh - draw rectangle with rounded corners defined by ellipse with width rw and height rh
glsave flip w h - save drawing in WMF format in the glfile filename. Save to the clipboard if filename is empty.
flip 0 has J orientation of 0 0 as lower left corner.
flip 1 flips for applications like Word with 0 0 as upper left corner.
w h are suggested clipboard width and height in 0.01 millimeters.
The wmf file is saved without a "placeable metafile header". Some applications require this 22 byte header at the front of a wmf file. The utility addwmfheader
from script system\main\winutil.js adds a header to a wmf file so that it is suitable for use by WORD and similar applications.
glsavebmp width height - save drawing as bitmap (24bit color) to glfile filename. Save to clipboard if filename is empty.
glsel id - select isigraph child of currently selected parent for graphic commands
glsel hwndc - hwndc is the result of wd'qhwndc' for an isigraph control. Parent and child are selected as the wd and gl command targets.
glshow '' - add new commands (since last glshow or glshowx) to the 2D paint buffer and immediately paints just the new commands. A glshow immediately after creating and showing a form can result in extra painting and flicker. The glshow paints the new stuff, which in most cases is everything, and then the normal window painting mechanism requests painting the new window and the painting will be done again. It is generally better to use glshowx and glpaintx.
glshowx '' - add new commands to the 2D paint buffer with no explicit painting
gltext text - write text in the glfont font. Where and how the text is displayed is affected by the gltextalign and gltextxy commands.
gltextalign TA_value - the TA_value affects how gltext displays text
TA_LEFT TA_CENTER TA_RIGHT
TA_TOP TA_BASELINE TA_BOTTOM
TA_NOUPDATECP TA_UPDATECP
The first option in each group is the default. TA_NOUPDATECP causes gltext to use the position set by gltextxy. TA_UPDATECP causes gltext to use and update the current position.
Values from each of the 3 groups can be combined:
gltextalign TA_BOTTOM + TA_UPDATEDCP
gltextcolor '' - glrgb color is set as color of text for gtext
gltlextjustify space nblanks - space is the amount of space to insert for nblanks. This space per blank is inserted for EACH blank in subsequent gtext commands. Because of rounding error there may be unused space at the end of the text. To allow spacing multiple texts on the same line this unused space is carried over into the next qlgextent calculations. Justifying a line should be sure to start with this unused space set to 0. A gltextjustify 0 0 sets this unused space to 0. Each section of a line should be measured with glqextent and then a gltextjustify should be done with the required space and the number of blanks in that section of text, and finally the gltext should be done. At the end of the justifying a line it is a good practice to do a gltextjustify 0 0 to clear the unused space value and to be sure that subsequent text is not inadvertently spaced out.
gltext commands painted with glshow after gltextjustify commands have been processed will not be justified unless the entire control is repainted. glpaint forces a repaint.
The Macintosh runs the gltextjustify command without error, but text justification is not supported and the text is displayed without justification.
gltextxy x y - position for gltext with gltexalign of TA_NOUPDATECP
gltop topvalue - topvalue is in logical units and ties that y coordinate value to the top of the drawing . This can be used to make a window display the top part of an image, rather than the bottom part.
glwantresize - request resize event for gl2 control.
glwindowext x y - default is 1000 1000. Change these values to change the scale (zoom) in anisotropic and isotropic mappings
glwindoworg x y - default is 0 0. Change these values to scroll the drawing in the viewport
glzabortdoc '' - cancel the print job
glzcreate printername - name from the set of printers returned by wd qprinters. If no name is given then the session default printer is used. If a printer context already exists, it is deleted before creating the new context. The session default printer is the system default printer when J is started. This can be changed with wd mbprinter.
glzdelete '' - deletes printer context created by glzcreate. There is no error if there is no context.
glzdevmode '' - modifies printer document properties such as orientation and copies. The command glqdevmode returns the properties that can be changed by glzdevmode and their current values. You can determine arguments for glzdevmode by using mbprinter to create the desired printer document setup and then use glqdevmode to get those values. This command must be done before the glzstartpage command.
The Macintosh does not support glzdevmode and printer properties can not be changed.
The information returned is: orientation, papersize, paperlength, paperwidth, scale, copies, source, quality, color, duplex, yresolution, truetype
glzenddoc '' - ends a document.
glzendpage '' - ends a page.
glzmap mode - set mapping mode used in printing. Default is twips.
glzprint '' - draws the image on the printer.
glzstartdoc 'jobname [filename]' - the job name can be up to 31 characters and appears in print manager. The filename indicates to print to a file instead of the printer. This file can be printed with the print command. The Macintosh does not support the second parameter of file name.
glzstartdoc '"first job"' glzstartdoc '"my job" tofile.prn'
glzstartpage '' - starts a page. Each page must be bracketed by a glzstartpage and a glzendpage.