summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/metapost/metauml/util_picture_stack.mp
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/metapost/metauml/util_picture_stack.mp')
-rw-r--r--Master/texmf-dist/metapost/metauml/util_picture_stack.mp137
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;
+