% Copyright 2022 by Qrrbrbirlbel % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Free Documentation License. % \pgfutil@IfUndefined{pgfnodepartthreebox}{% \csname newbox\endcsname\pgfnodepartleftbox \csname newbox\endcsname\pgfnodepartrightbox }{% \let\pgfnodepartleftbox\pgfnodeparttwobox \let\pgfnodepartrightbox\pgfnodepartthreebox } \newif\iftikzext@uncenteredrectangle@usesavedcenter \pgfset{ uncentered rectangle use saved center/.is if=tikzext@uncenteredrectangle@usesavedcenter, uncentered rectangle center yshift/.initial=, uncentered rectangle center/@center/.initial=2, uncentered rectangle center/.is choice, uncentered rectangle center/real/.code=\pgfkeyssetvalue{/pgf/uncentered rectangle center/@center}{0}, uncentered rectangle center/left/.code=\pgfkeyssetvalue{/pgf/uncentered rectangle center/@center}{1}, uncentered rectangle center/text/.code=\pgfkeyssetvalue{/pgf/uncentered rectangle center/@center}{2}, uncentered rectangle center/right/.code=\pgfkeyssetvalue{/pgf/uncentered rectangle center/@center}{3}} \pgfdeclareshape{uncentered rectangle}{% \nodeparts{text,left,right}% \savedanchor\middleCenter{% \pgf@x=.5\wd\pgfnodeparttextbox % \pgf@y=\dp\pgfnodeparttextbox \ifdim\dp\pgfnodepartleftbox>\pgf@y \pgf@y=\dp\pgfnodepartleftbox \fi \ifdim\dp\pgfnodepartrightbox>\pgf@y \pgf@y=\dp\pgfnodepartrightbox \fi % \pgf@ya=\ht\pgfnodeparttextbox \ifdim\ht\pgfnodepartleftbox>\pgf@ya \pgf@ya=\ht\pgfnodepartleftbox \fi \ifdim\ht\pgfnodepartrightbox>\pgf@ya \pgf@ya=\ht\pgfnodepartrightbox \fi \advance\pgf@ya by -\pgf@y \pgf@y=.5\pgf@ya }% \savedanchor\leftCenter{% % y should be still the same as before \pgf@x=-.5\wd\pgfnodepartleftbox }% \savedanchor\rightCenter{% % y should be still the same as before \pgf@x=.5\wd\pgfnodepartrightbox \advance\pgf@x by \wd\pgfnodeparttextbox }% \savedanchor\realCenter{% % y should be still the same as before \pgf@x=-.5\wd\pgfnodepartleftbox \advance\pgf@x by .5\wd\pgfnodeparttextbox \advance\pgf@x by .5\wd\pgfnodepartrightbox }% \savedanchor\southwest{% % total width \pgf@xa=\wd\pgfnodepartleftbox \advance\pgf@xa by\wd\pgfnodepartrightbox \advance\pgf@xa by\wd\pgfnodeparttextbox % \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}% \advance\pgf@xa by 2\pgf@xc \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}% \ifdim\pgf@xb>\pgf@xa \pgf@xa=\pgf@xb \fi % left side of shape \advance\pgf@x by -.5\pgf@xa \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}% \advance\pgf@x by -\pgf@xa % % total height \pgf@ya=\dp\pgfnodepartleftbox \ifdim\pgf@ya<\dp\pgfnodeparttextbox \pgf@ya=\dp\pgfnodeparttextbox \fi \ifdim\pgf@ya<\dp\pgfnodepartrightbox \pgf@ya=\dp\pgfnodepartrightbox \fi \pgf@yb=\ht\pgfnodepartleftbox \ifdim\pgf@yb<\ht\pgfnodeparttextbox \pgf@yb=\ht\pgfnodeparttextbox \fi \ifdim\pgf@yb<\ht\pgfnodepartrightbox \pgf@yb=\ht\pgfnodepartrightbox \fi \advance\pgf@ya by \pgf@yb % \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/inner ysep}}% \advance\pgf@ya by 2\pgf@yc \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}% \ifdim\pgf@yb>\pgf@ya \pgf@ya=\pgf@yb \fi % lower side of the shape \advance\pgf@y by -.5\pgf@ya \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}% \advance\pgf@y by -\pgf@ya }% \savedanchor\northeast{% % first, let's calculate the real center again: % \pgf@x=-.5\wd\pgfnodepartleftbox \advance\pgf@x by .5\wd\pgfnodeparttextbox \advance\pgf@x by .5\wd\pgfnodepartrightbox % \pgf@y=\dp\pgfnodeparttextbox \ifdim\dp\pgfnodepartleftbox>\pgf@y \pgf@y=\dp\pgfnodepartleftbox \fi \ifdim\dp\pgfnodepartrightbox>\pgf@y \pgf@y=\dp\pgfnodepartrightbox \fi % \pgf@ya=\ht\pgfnodeparttextbox \ifdim\ht\pgfnodepartleftbox>\pgf@ya \pgf@ya=\ht\pgfnodepartleftbox \fi \ifdim\ht\pgfnodepartrightbox>\pgf@ya \pgf@ya=\ht\pgfnodepartrightbox \fi \advance\pgf@ya by -\pgf@y \pgf@y=.5\pgf@ya % % now we can calculate the anchor % total width % \pgf@xa=\wd\pgfnodepartleftbox \advance\pgf@xa by\wd\pgfnodepartrightbox \advance\pgf@xa by\wd\pgfnodeparttextbox % \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}% \advance\pgf@xa by 2\pgf@xc \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}% \ifdim\pgf@xb>\pgf@xa \pgf@xa=\pgf@xb \fi % right side of shape \advance\pgf@x by .5\pgf@xa \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}% \advance\pgf@x by \pgf@xa % % total height \pgf@ya=\dp\pgfnodepartleftbox \ifdim\pgf@ya<\dp\pgfnodeparttextbox \pgf@ya=\dp\pgfnodeparttextbox \fi \ifdim\pgf@ya<\dp\pgfnodepartrightbox \pgf@ya=\dp\pgfnodepartrightbox \fi \pgf@yb=\ht\pgfnodepartleftbox \ifdim\pgf@yb<\ht\pgfnodeparttextbox \pgf@yb=\ht\pgfnodeparttextbox \fi \ifdim\pgf@yb<\ht\pgfnodepartrightbox \pgf@yb=\ht\pgfnodepartrightbox \fi \advance\pgf@ya by \pgf@yb % \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/inner ysep}}% \advance\pgf@ya by 2\pgf@yc \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}% \ifdim\pgf@yb>\pgf@ya \pgf@ya=\pgf@yb \fi % upper side of the shape \advance\pgf@y by .5\pgf@ya \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}% \advance\pgf@y by \pgf@ya }% % \savedmacro\center{% \pgfkeysgetvalue{/pgf/uncentered rectangle center/@center}\center } \anchor{center}{% \ifcase \iftikzext@uncenteredrectangle@usesavedcenter \center \else \pgfkeysvalueof{/pgf/uncentered rectangle center/@center}% \fi\relax \realCenter\or \leftCenter\or \middleCenter\or \rightCenter\else \realCenter \fi \pgfkeysgetvalue{/pgf/uncentered rectangle center yshift}\pgf@temp \pgfutil@ifxempty\pgf@temp{% real center used }{% calculate center \pgfmathsetlength\pgf@y{\pgf@temp}% }% }% \anchor{left} {\leftCenter \multiply\pgf@x by2 \pgf@y=0pt } \anchor{right} {\middleCenter\multiply\pgf@x by2 \pgf@y=0pt } \anchor{real center} {\realCenter} \anchor{left center} {\leftCenter} \anchor{right center}{\rightCenter} \anchor{text center} {\middleCenter} \anchor{south west} {\southwest} \anchor{north east} {\northeast} \anchor{mid}{% \csname pgf@anchor@uncentered rectangle@center\endcsname \pgfmathsetlength\pgf@y{.5ex}}% \anchor{base}{% \csname pgf@anchor@uncentered rectangle@center\endcsname \pgf@y=0pt }% \anchor{left mid} {\leftCenter \pgfmathsetlength\pgf@y{+.5ex}} \anchor{text mid} {\middleCenter\pgfmathsetlength\pgf@y{+.5ex}} \anchor{right mid} {\rightCenter \pgfmathsetlength\pgf@y{+.5ex}} \anchor{real mid} {\realCenter \pgfmathsetlength\pgf@y{+.5ex}} \anchor{left base} {\leftCenter \pgf@y=0pt } \anchor{text base} {\middleCenter\pgf@y=0pt } \anchor{right base} {\rightCenter \pgf@y=0pt } \anchor{real base} {\realCenter \pgf@y=0pt } \anchor{real south} {\pgf@anchor@rectangle@south} \anchor{real north} {\pgf@anchor@rectangle@north} \anchor{text north} {\pgf@anchor@rectangle@north\pgf@ya=\pgf@y\middleCenter\pgf@y=\pgf@ya} \anchor{left north} {\pgf@anchor@rectangle@north\pgf@ya=\pgf@y\leftCenter \pgf@y=\pgf@ya} \anchor{right north}{\pgf@anchor@rectangle@north\pgf@ya=\pgf@y\rightCenter \pgf@y=\pgf@ya} \anchor{text south} {\pgf@anchor@rectangle@south\pgf@ya=\pgf@y\middleCenter\pgf@y=\pgf@ya} \anchor{left south} {\pgf@anchor@rectangle@south\pgf@ya=\pgf@y\leftCenter \pgf@y=\pgf@ya} \anchor{right south}{\pgf@anchor@rectangle@south\pgf@ya=\pgf@y\rightCenter \pgf@y=\pgf@ya} \anchor{north}{% \pgf@anchor@rectangle@north \pgf@ya=\pgf@y \csname pgf@anchor@uncentered rectangle@center\endcsname \pgf@y=\pgf@ya } \anchor{south}{% \pgf@anchor@rectangle@south \pgf@ya=\pgf@y \csname pgf@anchor@uncentered rectangle@center\endcsname \pgf@y=\pgf@ya } %\anchor{base right}{\middleCenter\pgf@xa=2\pgf@x}% TODO \anchor{real west}{% \pgf@process{\northeast}% \pgf@ya=.5\pgf@y \pgf@process{\southwest}% \pgf@y=.5\pgf@y \advance\pgf@y by \pgf@ya }% \anchor{real east}{% \pgf@process{\southwest}% \pgf@ya=.5\pgf@y \pgf@process{\northeast}% \pgf@y=.5\pgf@y \advance\pgf@y by \pgf@ya }% \anchor{west}{% \pgf@process{\southwest}% \pgf@xa=\pgf@x \pgf@process{\csname pgf@anchor@uncentered rectangle@center\endcsname}% \pgf@x=\pgf@xa }% \anchor{east}{% \pgf@process{\northeast}% \pgf@xa=\pgf@x \pgf@process{\csname pgf@anchor@uncentered rectangle@center\endcsname}% \pgf@x=\pgf@xa }% \inheritanchor[from=rectangle]{south west} \inheritanchor[from=rectangle]{north west} \inheritanchor[from=rectangle]{south east} \inheritanchor[from=rectangle]{north east} \inheritanchor[from=rectangle]{mid west} \inheritanchor[from=rectangle]{mid east} \inheritanchor[from=rectangle]{base west} \inheritanchor[from=rectangle]{base east} \inheritbackgroundpath[from=rectangle] \anchorborder{% % xa/ya is target \pgf@xa=\pgf@x \pgf@ya=\pgf@y % xc/yc is "center" \pgf@process{\csname pgf@anchor@uncentered rectangle@center\endcsname}% \pgf@xc=\pgf@x \pgf@yc=\pgf@y \ifdim\pgf@xa<0pt % left side \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y \advance\pgf@xb by -\pgf@xc \ifdim\pgf@ya<0pt % south west side \advance\pgf@yb by -\pgf@yc \pgf@yb=-\pgf@yb \else % north west side \northeast \pgf@yb=\pgf@y \advance\pgf@yb by -\pgf@yc \fi \pgf@xb=-\pgf@xb \edef\pgf@marshal{% \noexpand\pgfpointborderrectangle {\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}} {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}% }% \else % right side \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y \advance\pgf@xb by -\pgf@xc \ifdim\pgf@ya>0pt % north east side \advance\pgf@yb by -\pgf@yc \else % south east side \southwest \pgf@yb=\pgf@y \advance\pgf@yb by -\pgf@yc \pgf@yb=-\pgf@yb \fi \edef\pgf@marshal{% \noexpand\pgfpointborderrectangle {\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}} {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}% }% \fi \pgf@process{\pgf@marshal}% \advance\pgf@x by\pgf@xc \advance\pgf@y by\pgf@yc }% } \endinput