| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- % Define node group background
- % The first 4 arguments are nodes that define the group borders in (left,
- % top, right, bottom) order, the last argument is a text label
- \usetikzlibrary{shapes,arrows,positioning,patterns}
- \pgfdeclarelayer{background}
- \pgfdeclarelayer{foreground}
- \pgfsetlayers{background,main,foreground} % Layer order
- \newcommand{\group}[5]{
- \begin{pgfonlayer}{background}
- % Left top corner
- \path (#1.west |- #2.north)+(-0.7, 0.7)
- node (lefttop) {};
- % Right bottom corner
- \path (#3.east |- #4.south)+(0.7, -0.4)
- node (rightbottom) {};
- % Draw rectangle
- \path[draw, rounded corners, dashed] (lefttop) rectangle (rightbottom);
- % Text label
- \path (rightbottom.west |- lefttop.south)+(-1.2, -0.3) node {\emph{#5}};
- \end{pgfonlayer}
- }
- \tikzstyle{block} = [
- rectangle,
- draw=black,
- fill=white,
- thick,
- minimum height=2em,
- text centered,
- rounded corners,
- text width=6em
- ]
- \tikzstyle{lineto} = [
- ->,
- thick,
- shorten <= 2pt,
- shorten >= 2pt
- ]
- \tikzstyle{linefrom} = [
- <-,
- thick,
- shorten <= 2pt,
- shorten >= 2pt
- ]
- \newcommand{\architecture}[1]{
- \begin{tikzpicture}[node distance=6em, scale=0.7, transform shape]
- \node[block] (driver) {Driver};
- #1
- \end{tikzpicture}
- }
- \def\basicdiagram{
- \begin{figure}[h!]
- \center
- \begin{tikzpicture}[node distance=6em, scale=0.7, transform shape]
- \node[block] (driver) {Device driver};
- \node[block, below of=driver, dashed] (architecture) {Architecture}
- edge[linefrom] node[right] {device-specific messages} (driver);
- \node[block, below of=architecture] {Application}
- edge[linefrom, dotted] node[right] {gesture} (architecture);
- \end{tikzpicture}
- \end{figure}
- }
- \def\eventdriverdiagram{
- \begin{figure}[h!]
- \center
- \architecture{
- \node[block, below of=driver] (eventdriver) {Event driver}
- edge[linefrom] node[right, near end] {device-specific messages} (driver);
- \node[block, below of=eventdriver, dashed] (analysis) {Event analysis}
- edge[linefrom] node[right] {(low-level) event} (eventdriver);
- \node[block, below of=analysis] {Application}
- edge[linefrom, dotted] node[right, near start] {(high-level) gesture} (analysis);
- \node[right of=eventdriver, xshift=2em] (dummy) {};
- \group{eventdriver}{eventdriver}{dummy}{analysis}{Architecture}
- }
- \end{figure}
- }
- \def\lefthand{\includegraphics[width=50pt]{data/hand.png}}
- \def\righthand{\reflectbox{\includegraphics[width=50pt, angle=-45]{data/hand.png}}}
- \def\areaproblem{
- \begin{figure}[H]
- \center
- \begin{tikzpicture}[transform shape, scale=0.7]
- \draw node[draw, black, minimum width=190, minimum height=140] at (0,0) {};
- \draw node[fill=gray!50, draw=black!70, minimum height=40, minimum width=40] at (-1,-1) {\lefthand};
- \draw node[] at (1.2,1) {\righthand};
- \draw node[draw=black!80, diamond, minimum height=70, minimum width=70] at (1.2,1) {};
- \end{tikzpicture}
- \end{figure}
- }
- \def\areadiagram{
- \begin{figure}[H]
- \center
- \architecture{
- \node[block, below of=driver] (eventdriver) {Event driver}
- edge[linefrom] node[right, near end] {device-specific messages} (driver);
- \node[block, below of=eventdriver] (area) {Event areas}
- edge[linefrom] node[right] {event} (eventdriver);
- \node[block, right of=area, xshift=7em, dashed] (tracker) {Gesture detection}
- edge[linefrom, bend right=10] node[above] {event} (area)
- edge[lineto, bend left=10, dotted] node[below] {gesture} (area);
- \node[block, below of=area] {Application}
- edge[linefrom, dotted] node[right, near start] {gesture} (area);
- \group{eventdriver}{eventdriver}{tracker}{area}{Architecture}
- }
- \end{figure}
- }
- \def\propagationproblem{
- \begin{figure}[H]
- \center
- \begin{tikzpicture}[node distance=5.5em, transform shape, scale=0.6]
- \draw node[draw=black, minimum width=190, minimum height=140] at (0,0) {};
- \draw node[draw=black!60, minimum height=100, minimum width=100, pattern=north east lines] at (-0.1,-0.1) {};
- \draw node[fill=gray!60, draw=black!70, minimum height=40, minimum width=40] at (0.3,0.4) {};
- \fill (0.4, 0.6) circle (0.15);
- \end{tikzpicture}
- \end{figure}
- }
- \def\propagationdiagram{
- \begin{figure}[H]
- \center
- \begin{tikzpicture}[node distance=5.5em, transform shape, scale=0.7]
- \draw node[block, yshift=-10em, xshift=-3em] (driver) {Event driver};
- \draw node[block, below of=driver] (gray) {Outer event area}
- edge[linefrom] node[left] {1} (driver);
- \draw node[block, below of=gray] (white) {Inner event area}
- edge[linefrom, bend left=15] node[left] {2} (gray)
- edge[lineto, bend right=15, red] node[right, black] {6} (gray);
- \draw node[block, right of=white, xshift=4em] {\emph{drag} tracker}
- edge[linefrom, bend right=15] node[above] {3} (white)
- edge[lineto, dotted, bend left=15] node[below] {4} (white);
- \draw node[block, right of=gray, xshift=4em] {\emph{drag} tracker}
- edge[linefrom, bend right=15, red] node[above, black] {7} (gray)
- edge[lineto, dotted, bend left=15, red] node[below, black] {8} (gray);
- \draw node[block, below of=white] {Application}
- edge[linefrom, dotted, bend left=65, red] node[left, black] {9} (gray)
- edge[linefrom, dotted] node[left] {5} (white);
- \end{tikzpicture}
- \end{figure}
- }
- \def\fulldiagram{
- \begin{figure}[h!]
- \center
- \architecture{
- \node[block, below of=driver] (eventdriver) {Event driver}
- edge[linefrom] node[right, near end] {device-specific messages} (driver);
- \node[block, below of=eventdriver] (area) {Event areas}
- edge[linefrom] node[right] {event} (eventdriver);
- \node[block, right of=area, xshift=7em] (tracker) {Gesture trackers}
- edge[linefrom, bend right=10] node[above] {event} (area)
- edge[lineto, bend left=10, dotted] node[below] {gesture} (area);
- \node[block, below of=area] {Application}
- edge[linefrom, dotted] node[right, near start] {gesture} (area);
- \group{eventdriver}{eventdriver}{tracker}{area}{Architecture}
- }
- \end{figure}
- }
- \def\daemondiagram{
- \begin{figure}[H]
- \centering
- \begin{tikzpicture}[node distance=4em, transform shape, scale=0.7]
- \node[block] (daemon) {Daemon};
- \node[block, above of=daemon] (driver) {Device driver}
- edge[lineto] (daemon);
- \node[block, xshift=-4em, left of=driver] {Device driver}
- edge[lineto] (daemon);
- \node[block, xshift=4em, right of=driver] {Device driver}
- edge[lineto] (daemon);
- \node[block, below of=daemon] (app) {Application}
- edge[linefrom, dotted] (daemon);
- \node[block, xshift=-4em, left of=app] {Application}
- edge[linefrom, dotted] (daemon);
- \node[block, xshift=4em, right of=app] {Application}
- edge[linefrom, dotted] (daemon);
- \draw[dashed] (app.north)+(-4, 0.35) -- node[right=4, yshift=1] {Network protocol} ++(4, 0.35);
- \end{tikzpicture}
- \end{figure}
- }
|