diff options
Diffstat (limited to 'Master/texmf-dist/metapost/metauml/util_picture_stack.mp')
-rw-r--r-- | Master/texmf-dist/metapost/metauml/util_picture_stack.mp | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/Master/texmf-dist/metapost/metauml/util_picture_stack.mp b/Master/texmf-dist/metapost/metauml/util_picture_stack.mp new file mode 100644 index 00000000000..11b6b7a16fa --- /dev/null +++ b/Master/texmf-dist/metapost/metauml/util_picture_stack.mp @@ -0,0 +1,137 @@ +% MetaUtil, an easier MetaPost life +% Copyright (C) 2005 Ovidiu Gheorghies +% +% This program is free software; you can redistribute it and/or +% modify it under the terms of the GNU General Public License +% as published by the Free Software Foundation; either version 2 +% of the License, or (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +if known _util_picture_stack_mp: + expandafter endinput +fi; +_util_picture_stack_mp:=1; + +input util_picture; +input util_commons; +input util_group; + +input util_log; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% PICTURE STACK % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +vardef PictureStackInfo@#(expr pleft, pright, ptop, pbottom)(text pspacing)(text ppictInfo)= + attributes(@#); + var(numeric) boxed; + var(color) borderColor; + + var(numeric) left, right, top, bottom; + var(numeric) spacing; + + Margins@#(pleft, pright, ptop, pbottom); + + @#spacing := pspacing; + + @#boxed := 0; + @#borderColor := green; + + PictureInfoCopy.@#iPict(ppictInfo); +enddef; + +vardef PictureStackInfoCopy@#(text src)= + PictureStackInfo@#(src.left, src.right, src.top, src.bottom)(src.spacing)(src.iPict); + + @#boxed := src.boxed; + @#borderColor := src.borderColor; +enddef; + +log "*** Creating iStack..."; +PictureStackInfo.iStack(2, 2, 2, 2)(2)(iPict); + +vardef EPictureStack@#(text pictStackInfo)(text thePictures)(text how)= + ObjectEquations(@#); + @#className := "PictureStack"; + + PictureStackInfoCopy.@#info(pictStackInfo); + + attributes(@#); + var(numeric) nItems; + var(numeric) minx, miny, maxx, maxy; + var(string) picturesAsString; + var(string) joinMethod; + + @#joinMethod := how; + + @#nItems := 0; + for p=thePictures: + EPicture.@#pict[@#nItems](@#info.iPict)(p); + @#nItems := @#nItems + 1; + endfor; + + @#picturesAsString := listArray(@#pict)(@#nItems); + + EGroup.@#group(@#info)(scantokens @#picturesAsString); + + @#nw = @#group.nw; + @#se = @#group.se; +enddef; + +vardef PictureStack@#(text thePictures)(text how)= + EPictureStack@#(iStack)(thePictures)(how); +enddef; + +vardef PictureStack_layout@#= + if @#layedout = 1: + log "PictureStack " & (str @#) & " has already been layed out"; + else: + @#layedout := 1; + + layoutObjects(scantokens @#picturesAsString); + + if @#joinMethod = "vleft": + setObjectJoin(pa.left=pb.left; pa.bottom = pb.top + @#info.spacing); + elseif @#joinMethod = "vcenter": + setObjectJoin(pa.midx=pb.midx; pa.bottom = pb.top + @#info.spacing); + elseif @#joinMethod = "vright": + setObjectJoin(pa.right=pb.right; pa.bottom = pb.top + @#info.spacing); + elseif @#joinMethod = "vleftbase": + setObjectJoin(pa.left=pb.left; pa.bottom = pb.bottom + @#info.spacing); + elseif @#joinMethod = "vcenterbase": + setObjectJoin(pa.midx=pb.midx; pa.bottom = pb.bottom + @#info.spacing); + fi; + + joinObjects(scantokens @#picturesAsString); + + Group_layout.@#group; + fi; +enddef; + +vardef PictureStack_draw@#= + PictureStack_layout.@#; + objectEnsurePositioning.@#; + + for i=0 upto @#nItems-1: + Picture_draw.@#pict[i]; + endfor; + + if (@#info.boxed = 1): + draw objectBox(@#) withcolor @#info.borderColor; + fi; +enddef; + +vardef PictureStack_border@#= + objectBox(@#) +enddef; + |