|
@@ -0,0 +1,192 @@
|
|
|
|
|
+% 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}
|
|
|
|
|
+}
|