% Copyright 2008 by Till Tantau and others Wibrow
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.



%
% Base shapes
%
% These shapes are identical to the shapes without "ee", only an "input"
% and an "output" anchor have been added at the left and right end.

\pgfdeclareshape{rectangle ee}
{
  \inheritsavedanchors[from=rectangle] 
  \inheritanchorborder[from=rectangle]
  \inheritanchor[from=rectangle]{north}
  \inheritanchor[from=rectangle]{north west}
  \inheritanchor[from=rectangle]{north east}
  \inheritanchor[from=rectangle]{center}
  \inheritanchor[from=rectangle]{west}
  \inheritanchor[from=rectangle]{east}
  \inheritanchor[from=rectangle]{mid}
  \inheritanchor[from=rectangle]{mid west}
  \inheritanchor[from=rectangle]{mid east}
  \inheritanchor[from=rectangle]{base}
  \inheritanchor[from=rectangle]{base west}
  \inheritanchor[from=rectangle]{base east}
  \inheritanchor[from=rectangle]{south}
  \inheritanchor[from=rectangle]{south west}
  \inheritanchor[from=rectangle]{south east}
  \inheritbackgroundpath[from=rectangle]
  % New:
  \anchor{input}{
    \pgf@process{\northeast}%
    \pgf@ya=.5\pgf@y%
    \pgf@process{\southwest}%
    \pgf@y=.5\pgf@y%
    \advance\pgf@y by \pgf@ya%
  }
  \anchor{output}{%
    \pgf@process{\southwest}%
    \pgf@ya=.5\pgf@y%
    \pgf@process{\northeast}%
    \pgf@y=.5\pgf@y%
    \advance\pgf@y by \pgf@ya%
  }
}

\pgfdeclareshape{circle ee}
{
  \inheritsavedanchors[from=circle] 
  \inheritanchorborder[from=circle]
  \inheritanchor[from=circle]{north}
  \inheritanchor[from=circle]{north west}
  \inheritanchor[from=circle]{north east}
  \inheritanchor[from=circle]{center}
  \inheritanchor[from=circle]{west}
  \inheritanchor[from=circle]{east}
  \inheritanchor[from=circle]{mid}
  \inheritanchor[from=circle]{mid west}
  \inheritanchor[from=circle]{mid east}
  \inheritanchor[from=circle]{base}
  \inheritanchor[from=circle]{base west}
  \inheritanchor[from=circle]{base east}
  \inheritanchor[from=circle]{south}
  \inheritanchor[from=circle]{south west}
  \inheritanchor[from=circle]{south east}
  \inheritbackgroundpath[from=circle]
  % New:
  \anchor{input}{\centerpoint\advance\pgf@x by-\radius}
  \anchor{output}{\centerpoint\advance\pgf@x by\radius}
}



%
% Current direction indicator. This shape uses the current setting of
% the current direction arrow tip for the arrow. The shape is a
% rectangle around the arrow tip. 
%

\pgfdeclareshape{direction ee}
{
  \savedanchor\northeast{
    % Right border is given by right extend
    \pgf@x=0pt%
    \csname pgf@arrow@right@\pgfkeysvalueof{/pgf/direction ee arrow}\endcsname
    % Height is given by minimum height/2
    \pgfmathsetlength{\pgf@y}{\pgfkeysvalueof{/pgf/minimum height}}%
    \pgf@y=.5\pgf@y
  }
  \savedanchor\southwest{
    % Left border is given by left extend
    \pgf@x=0pt%
    \csname pgf@arrow@left@\pgfkeysvalueof{/pgf/direction ee arrow}\endcsname
    \pgf@x=-\pgf@x%
    % Height is given by minimum height/2
    \pgfmathsetlength{\pgf@y}{\pgfkeysvalueof{/pgf/minimum height}}%
    \pgf@y=-.5\pgf@y
  }

  \inheritanchor[from=rectangle ee]{center}
  \inheritanchor[from=rectangle ee]{north}
  \inheritanchor[from=rectangle ee]{south}
  \inheritanchor[from=rectangle ee]{east}
  \inheritanchor[from=rectangle ee]{west}
  \inheritanchor[from=rectangle ee]{north east}
  \inheritanchor[from=rectangle ee]{north west}
  \inheritanchor[from=rectangle ee]{south east}
  \inheritanchor[from=rectangle ee]{south west}
  \inheritanchor[from=rectangle ee]{input}
  \inheritanchor[from=rectangle ee]{output}
  \inheritanchorborder[from=rectangle ee]
  \nodeparts{}% no text

  \behindbackgroundpath{
    \pgf@process{\southwest}
    \pgf@xa=\pgf@x
    \pgf@process{\northeast}
    \pgf@xb=\pgf@x
    \pgfpathmoveto{\pgfqpoint{\pgf@xa}{0pt}}
    \pgfpathlineto{\pgfqpoint{\pgf@xb}{0pt}}
    \pgfusepathqstroke
  }

  \beforebackgroundpath{
    {
      \pgfsetarrowsend{\pgfkeysvalueof{/pgf/direction ee arrow}}
      \pgfsys@beginscope
      \pgflowlevelsynccm%
      \pgflowlevelobj{}{\pgf@endarrow}%
      \pgfsys@endscope
    }
  }
}

\pgfkeys{
  /pgf/direction ee arrow/.initial=direction ee,
}



% Special arrow for ee directions:

\pgfarrowsdeclare{direction ee}{direction ee}
{
  \pgfmathsetlength\pgfutil@tempdima{\pgfgetarrowoptions{direction ee}}%
  \pgfutil@tempdima=.5\pgfutil@tempdima
  \pgfarrowsleftextend{+-\pgfutil@tempdima}
  \pgfarrowsrightextend{+\pgfutil@tempdima}
}
{
  \pgfmathsetlength\pgfutil@tempdima{\pgfgetarrowoptions{direction ee}}%
  \pgfsetdash{}{+0pt}
  \pgfsetroundjoin
  \pgfpathmoveto{\pgfqpoint{-0.5\pgfutil@tempdima}{0.38268343237\pgfutil@tempdima}}
  \pgfpathlineto{\pgfqpoint{0.5\pgfutil@tempdima}{0\pgfutil@tempdima}}
  \pgfpathlineto{\pgfqpoint{-0.5\pgfutil@tempdima}{-0.38268343237\pgfutil@tempdima}}
  \pgfpathclose
  \pgfusepathqfillstroke
}

\pgfsetarrowoptions{direction ee}{4pt}





\endinput

