REBOL [ Title: "Face functions" Purpose: "Functions to manipulate faces." Author: "Brett Handley" Date: 24-April-2001 ] add-child-faces: function [ parent-face list-of-faces [series!] /adjust "Adjusts parent face size based on last face offset." ][][ if all [not empty? list-of-faces not parent-face/pane][ parent-face/pane: copy []] foreach f list-of-faces [ f/parent-face: parent-face append parent-face/pane f ] if adjust [ parent-face/size: max-size list-of-faces ] ] max-size: function [ face-list ][max-pos][ max-pos: 0x0 foreach f face-list [ max-pos: max (f/size + f/offset) max-pos ] RETURN max-pos ] min-offset: function [ face-list ][min-pos][ min-pos: 0x0 foreach f face-list [ min-pos: min (f/size + f/offset) min-pos ] RETURN min-pos ] spread-faces: function [ face-list [series!] directional-multiple [pair!] "Multiple of face size to include." offset [pair!] /adjust "Adjusts parent face size based on last face offset." ][face-list-cursor current-pos a-face last-size last-pos parent][ current-pos: none last-pos: 0x0 if not empty? face-list [last-pos: get in last face-list 'offset] for i 1 length? face-list 1 [ a-face: face-list/:i either current-pos [ current-pos: current-pos + (directional-multiple * last-size) + offset a-face/offset: current-pos ][ current-pos: a-face/offset ] last-size: a-face/size ] if all [adjust not empty? face-list] [ parent: get in first face-list 'parent-face parent/size: parent/size + (current-pos - last-pos) ] ] [ layout-with-faces: function [ "Allows you to include faces in your" vid-spec [block!] ][cursor face-words faces face face-count style-name temp-styles temp-style-sheet][ face-count: 0 cursor: copy/deep vid-spec temp-style-sheet: copy [] forall cursor [ if any [face: object? cursor/1 all[word? cursor/1 object? face: get cursor/1]][ face-count: face-count + 1 append faces face append face-words style-name: to-word join "f" face-count change cursor style-name append temp-style-sheet reduce [style-name face] ] ] temp-styles: stylize temp-style-sheet for i 1 length? face-words 1 [ poke temp-styles (i * 2) faces/:i ] layout join copy [styles temp-styles] head cursor ] ]