Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[ALLY] Re: View Docs - draw

From: allenk:powerup:au at: 10-Apr-2001 19:31

Hi Phil, Not sure if this is uptodate or not for the View version, but it should get you started. Docs copyright RT etc... Cheers, Allen K DRAW Dialect for REBOL Faces ---------------------------- Updated: 20-Jan-2001/19:24 NOTE: Add your own short/interesting/insightful examples to the tail of this document. The DRAW dialect is part of the EFFECTS block of a face. For example: view layout [ box black 100x100 effect [ draw [ pen red line 30x30 50x20 70x70 40x50 pen blue box 20x20 80x80 fill-pen leaf box 20x60 40x80 polygon 10x10 40x40 40x80 10x0 pen white text 8x25 "Example" fill-pen gold flood 2x2 ] ] ] The DRAW dialect accepts the following keywords, followed by their optional arguments. Arguments of different datatypes can appear in alternate order. For example, text can be specified as: text 8x25 "Example" or: text "Example" 8x25 Draw Attribute Words: --------------------- pen [foreground-color [tuple! none!]] [background-color [tuple! none!]] Set the current foreground color and background color for outline rendering (line, circle, polygon, box). A color of none is equivalent to transparent. The defaults are: foreground: inverse of face color, background: none. (Note: instead of a tuple or none this function should also accept the words 'inverse and 'reverse, with 'inverse meaning "rendering by complementing the image", i.e. without a given color, and with 'reverse meaning "reverse the meaning of foreground and background" -- to be implemented). fill-pen [foreground-color [tuple! none!]] [background-color [tuple! none!]] Set the current foreground color and background color for area filling (circle, box, flood, to be implemented: polygon). A color of none is equivalent to transparent. (Note: area fill patterns are not supported yet, so the background color is not used at this time). The defaults are none. (Note: 'inverse and 'reverse to be added. See above). line-pattern [len1 [integer!]] [len2 [integer!]] ... [lenn [integer!]] Set the line pattern. Each len parameter defines the length of a set (foreground) or unset (background) segment of the line, Set and unset segments alternate. For instance "line-patten 1 5" defines a dotted line, with dots 5 pixels apart, "line-pattern 8 8" defines a dashed line, "line-pattern 1 4 4 4" defines a morse-code-style line (alternating between dotted and dashed). Up to 8 segments can be defined. An empty line-pattern call (without parameters following) resets to the default: a solid line. font [textfont [object!]] Set the font to be used in subsequent text calls. The default is the font used by the face. (Note: this function should probably accept other types of parameters as well, e.g. a font name or size, and clone the current face font object, if necessary -- to be implemented). Draw Object Words: ------------------ line [point1 [pair!]] [point2 [pair!]] ... [pointn [pair!]] Draw a line from point1 to point2, from point 2 to point 3, ... to point n. Points n and 1 are NOT connected by an additional line. The current pen colors and line pattern are observed. polygon [point1 [pair!]] [point2 [pair!]] ... [pointn [pair!]] Similar to line, except that points n and 1 are connected afterwards, to create a closed polygon. (Note that simply adding point1 at the end of a call to line does NOT create the same effect, because then point1 would be rendered twice, which causes undesired effects in some rendering modes). If the fill-pen is different from none then the polygon is filled in the specified color. circle [center [pair!]] [radius [integer!]] Draw a circle at the given point, with the given radius. Both the outline pen colors and the fill colors are observed. The line pattern is NOT observed. box [point1 [pair!]] [point2 [pair!]] Draw a rectangle, parallel to the x/y axes, through the two diagonal endpoints specified. Both the outline pen colors and the fill colors are observed. The line pattern is observed for the box outline. text [point [pair!]] [text [string!]] Renders the specified text at the specified position, using the current font setting, foreground and background color. image [[point [pair!]] image [image!]] [transp-color [tuple!]] Renders the specified image at the specified position. If transp-color is specified then this color (in the image) is considered to be transparent. Draw Function Words: -------------------- flood [point [pair!]] [border-color [tuple!]] Flood-fills the area around the specified point with the current foreground fill color. If border-color is not specified then any pixel with a color different from the color of the starting point is considered to be part of the border. Otherwise all pixels with a color of border-color define the border. Examples: --------- Draw a single red line into a face and display it: view/new make face [ size: 200x200 effect: [draw [pen 200.0.0 line 20x20 180x180]] ] Draw a few connected red lines and a blue box: view make face [ size: 200x200 effect: [ draw [ pen 200.0.0 line 50x50 150x150 50x150 150x50 50x50 pen 0.0.200 box 20x20 180x180 ] ] ] Draw a circle: view/new make face [ size: 200x200 effect: [ draw [ pen 200.0.0 circle 100x100 50 ] ] ] Draw a filled circle: view make face [ size: 200x200 effect: [ draw [ pen 200.0.0 fill-pen 50.50.100 circle 100x100 50 ] ] ] Draw a box and a circle, then use a flood fill: view make face [ size: 200x200 color: black effect: [ draw [ pen white box 20x20 180x180 pen red circle 100x100 100 fill-pen blue flood 100x100 ] ] ] Draws text in a maroon color: view make face [ size: 200x200 effect: [ draw [ pen maroon text "Hello" 20x20 ] ] ] Using other fonts for text: italic-font: make face/font [ size: 10 style: 'italic name: font-serif ] view layout [ image 150x150 gold effect [ draw [ pen blue text 0x20 "Default Font" font italic-font text 0x40 "Small Times Italic Font" ] ] ] Other face effects can be done before the DRAW operation. This example draws 100 random lines in random colors on a gradient backdrop effect: fx: [gradient 1x1 0.150.0 0.0.150 draw []] lines: select fx 'draw loop 100 [ repend lines [ 'pen random 250.50.50 'line random 200x200 random 200x200 ] ] view make face [size: 200x200 effect: fx] Other face effects can follow the DRAW operation. This example draws a line and a box then inverts and blurs them: view make face [ size: 200x200 effect: [ draw [ pen 200.0.0 line 50x50 150x150 50x150 150x50 50x50 pen 0.0.200 box 20x20 180x180 ] invert blur ] ] Perform a pre-effect and a post-effect. A gradient is created, then 100 random circles are drawn, then the result is color differenced with an image bitmap. fx: [gradient 1x1 0.150.0 0.0.150 draw []] lines: select fx 'draw loop 100 [ repend lines [ 'pen random 250.50.50 'circle random 200x200 random 100 ] ] repend fx ['difference load link-root/apps/demos/bay.jpg] view make face [size: 200x200 effect: fx] Draw an image twice. The first includes all of its colors. The second makes one of its colors transparent. i: load link-root/desktop/ico_console.gif view make face [ size: 200x200 effect: [ draw [ image i 20x20 image i 80x80 174.154.122 ] ] ] Draws lines when you hold the mouse button down and move it. f: make face [ size: 400x400 effect: copy/deep [draw [pen black line]] line: second effect feel: make feel [ engage: func [f a e] [ if find [down over] a [ append f/line e/offset show f ] if a = 'up [append f/line 'line] ] ] ] view make face [size: f/size pane: f] Draws filled circles as the mouse is moved with the button down: f: make face [ size: 400x400 effect: copy/deep [draw [pen black]] line: second effect feel: make feel [ engage: func [f a e] [ if find [down over] a [ repend f/line [ 'fill-pen random 0.255.0 'circle e/offset 20 ] show f ] ] ] ] view make face [size: f/size pane: f]