presentationdiagrams.tex 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. % Define node group background
  2. % The first 4 arguments are nodes that define the group borders in (left,
  3. % top, right, bottom) order, the last argument is a text label
  4. \usetikzlibrary{shapes,arrows,positioning,patterns}
  5. \pgfdeclarelayer{background}
  6. \pgfdeclarelayer{foreground}
  7. \pgfsetlayers{background,main,foreground} % Layer order
  8. \newcommand{\group}[5]{
  9. \begin{pgfonlayer}{background}
  10. % Left top corner
  11. \path (#1.west |- #2.north)+(-0.7, 0.7)
  12. node (lefttop) {};
  13. % Right bottom corner
  14. \path (#3.east |- #4.south)+(0.7, -0.4)
  15. node (rightbottom) {};
  16. % Draw rectangle
  17. \path[draw, rounded corners, dashed] (lefttop) rectangle (rightbottom);
  18. % Text label
  19. \path (rightbottom.west |- lefttop.south)+(-1.2, -0.3) node {\emph{#5}};
  20. \end{pgfonlayer}
  21. }
  22. \tikzstyle{block} = [
  23. rectangle,
  24. draw=black,
  25. fill=white,
  26. thick,
  27. minimum height=2em,
  28. text centered,
  29. rounded corners,
  30. text width=6em
  31. ]
  32. \tikzstyle{lineto} = [
  33. ->,
  34. thick,
  35. shorten <= 2pt,
  36. shorten >= 2pt
  37. ]
  38. \tikzstyle{linefrom} = [
  39. <-,
  40. thick,
  41. shorten <= 2pt,
  42. shorten >= 2pt
  43. ]
  44. \newcommand{\architecture}[1]{
  45. \begin{tikzpicture}[node distance=6em, scale=0.7, transform shape]
  46. \node[block] (driver) {Driver};
  47. #1
  48. \end{tikzpicture}
  49. }
  50. \def\basicdiagram{
  51. \begin{figure}[h!]
  52. \center
  53. \begin{tikzpicture}[node distance=6em, scale=0.7, transform shape]
  54. \node[block] (driver) {Device driver};
  55. \node[block, below of=driver, dashed] (architecture) {Architecture}
  56. edge[linefrom] node[right] {device-specific messages} (driver);
  57. \node[block, below of=architecture] {Application}
  58. edge[linefrom, dotted] node[right] {gesture} (architecture);
  59. \end{tikzpicture}
  60. \end{figure}
  61. }
  62. \def\eventdriverdiagram{
  63. \begin{figure}[h!]
  64. \center
  65. \architecture{
  66. \node[block, below of=driver] (eventdriver) {Event driver}
  67. edge[linefrom] node[right, near end] {device-specific messages} (driver);
  68. \node[block, below of=eventdriver, dashed] (analysis) {Event analysis}
  69. edge[linefrom] node[right] {(low-level) event} (eventdriver);
  70. \node[block, below of=analysis] {Application}
  71. edge[linefrom, dotted] node[right, near start] {(high-level) gesture} (analysis);
  72. \node[right of=eventdriver, xshift=2em] (dummy) {};
  73. \group{eventdriver}{eventdriver}{dummy}{analysis}{Architecture}
  74. }
  75. \end{figure}
  76. }
  77. \def\lefthand{\includegraphics[width=50pt]{data/hand.png}}
  78. \def\righthand{\reflectbox{\includegraphics[width=50pt, angle=-45]{data/hand.png}}}
  79. \def\areaproblem{
  80. \begin{figure}[H]
  81. \center
  82. \begin{tikzpicture}[transform shape, scale=0.7]
  83. \draw node[draw, black, minimum width=190, minimum height=140] at (0,0) {};
  84. \draw node[fill=gray!50, draw=black!70, minimum height=40, minimum width=40] at (-1,-1) {\lefthand};
  85. \draw node[] at (1.2,1) {\righthand};
  86. \draw node[draw=black!80, diamond, minimum height=70, minimum width=70] at (1.2,1) {};
  87. \end{tikzpicture}
  88. \end{figure}
  89. }
  90. \def\areadiagram{
  91. \begin{figure}[H]
  92. \center
  93. \architecture{
  94. \node[block, below of=driver] (eventdriver) {Event driver}
  95. edge[linefrom] node[right, near end] {device-specific messages} (driver);
  96. \node[block, below of=eventdriver] (area) {Event areas}
  97. edge[linefrom] node[right] {event} (eventdriver);
  98. \node[block, right of=area, xshift=7em, dashed] (tracker) {Gesture detection}
  99. edge[linefrom, bend right=10] node[above] {event} (area)
  100. edge[lineto, bend left=10, dotted] node[below] {gesture} (area);
  101. \node[block, below of=area] {Application}
  102. edge[linefrom, dotted] node[right, near start] {gesture} (area);
  103. \group{eventdriver}{eventdriver}{tracker}{area}{Architecture}
  104. }
  105. \end{figure}
  106. }
  107. \def\propagationproblem{
  108. \begin{figure}[H]
  109. \center
  110. \begin{tikzpicture}[node distance=5.5em, transform shape, scale=0.6]
  111. \draw node[draw=black, minimum width=190, minimum height=140] at (0,0) {};
  112. \draw node[draw=black!60, minimum height=100, minimum width=100, pattern=north east lines] at (-0.1,-0.1) {};
  113. \draw node[fill=gray!60, draw=black!70, minimum height=40, minimum width=40] at (0.3,0.4) {};
  114. \fill (0.4, 0.6) circle (0.15);
  115. \end{tikzpicture}
  116. \end{figure}
  117. }
  118. \def\nopropagationdiagram{
  119. \begin{figure}[H]
  120. \center
  121. \subfigure{
  122. \begin{tikzpicture}[node distance=5.5em, transform shape, scale=0.6]
  123. \draw node[draw=black, minimum width=190, minimum height=140] at (0,0) {};
  124. \draw node[draw=black!60, minimum height=100, minimum width=100, pattern=north east lines] at (-0.1,-0.1) {};
  125. \draw node[fill=gray!60, draw=black!70, minimum height=40, minimum width=40] at (0.3,0.4) {};
  126. \fill (0.4, 0.6) circle (0.15);
  127. \end{tikzpicture}
  128. }
  129. \subfigure{
  130. \begin{tikzpicture}[node distance=5.5em, transform shape, scale=0.7]
  131. \draw node[block, yshift=-10em, xshift=-3em] (driver) {Event driver};
  132. \draw node[block, below of=driver] (gray) {Outer event area}
  133. edge[linefrom] node[left] {1} (driver);
  134. \draw node[block, below of=gray] (white) {Inner event area}
  135. edge[linefrom] node[left] {2} (gray);
  136. \draw node[block, right of=white, xshift=4em] {\emph{drag} detection}
  137. edge[linefrom, bend right=15] node[above] {3} (white)
  138. edge[lineto, dotted, bend left=15] node[below] {4} (white);
  139. \draw node[block, right of=gray, xshift=4em] {\emph{drag} detection};
  140. \draw node[block, below of=white] {Application}
  141. edge[linefrom, dotted] node[left] {5} (white);
  142. \end{tikzpicture}
  143. }
  144. \end{figure}
  145. }
  146. \def\nodelegationdiagram{
  147. \begin{figure}[H]
  148. \center
  149. \subfigure{
  150. \begin{tikzpicture}[node distance=5.5em, transform shape, scale=0.6]
  151. \draw node[draw=black, minimum width=190, minimum height=140] at (0,0) {};
  152. \draw node[draw=black!60, minimum height=100, minimum width=100, pattern=north east lines] at (-0.1,-0.1) {};
  153. \draw node[fill=gray!60, draw=black!70, minimum height=40, minimum width=40] at (0.3,0.4) {};
  154. \fill (-0.9, -0.7) circle (0.15);
  155. \end{tikzpicture}
  156. }
  157. \subfigure{
  158. \begin{tikzpicture}[node distance=5.5em, transform shape, scale=0.7]
  159. \draw node[block, yshift=-10em, xshift=-3em] (driver) {Event driver};
  160. \draw node[block, below of=driver] (gray) {Outer event area}
  161. edge[linefrom] node[left] {1} (driver);
  162. \draw node[block, below of=gray] (white) {Inner event area};
  163. \draw node[block, right of=white, xshift=4em] {\emph{drag} detection};
  164. \draw node[block, right of=gray, xshift=4em] {\emph{drag}
  165. detection} edge[linefrom, bend right=15] node[above, black] {2} (gray)
  166. edge[lineto, dotted, bend left=15] node[below, black] {3} (gray);
  167. \draw node[block, below of=white] {Application}
  168. edge[linefrom, dotted, bend left=65] node[left, black] {4} (gray);
  169. \end{tikzpicture}
  170. }
  171. \end{figure}
  172. }
  173. \def\fulldiagram{
  174. \begin{figure}[h!]
  175. \center
  176. \architecture{
  177. \node[block, below of=driver] (eventdriver) {Event driver}
  178. edge[linefrom] node[right, near end] {device-specific messages} (driver);
  179. \node[block, below of=eventdriver] (area) {Event areas}
  180. edge[linefrom] node[right] {event} (eventdriver);
  181. \node[block, right of=area, xshift=7em] (tracker) {Gesture trackers}
  182. edge[linefrom, bend right=10] node[above] {event} (area)
  183. edge[lineto, bend left=10, dotted] node[below] {gesture} (area);
  184. \node[block, below of=area] {Application}
  185. edge[linefrom, dotted] node[right, near start] {gesture} (area);
  186. \group{eventdriver}{eventdriver}{tracker}{area}{Architecture}
  187. }
  188. \end{figure}
  189. }
  190. \def\daemondiagram{
  191. \begin{figure}[H]
  192. \centering
  193. \begin{tikzpicture}[node distance=4em, transform shape, scale=0.7]
  194. \node[block] (daemon) {Daemon};
  195. \node[block, above of=daemon] (driver) {Device driver}
  196. edge[lineto] (daemon);
  197. \node[block, xshift=-4em, left of=driver] {Device driver}
  198. edge[lineto] (daemon);
  199. \node[block, xshift=4em, right of=driver] {Device driver}
  200. edge[lineto] (daemon);
  201. \node[block, below of=daemon] (app) {Application}
  202. edge[linefrom, dotted] (daemon);
  203. \node[block, xshift=-4em, left of=app] {Application}
  204. edge[linefrom, dotted] (daemon);
  205. \node[block, xshift=4em, right of=app] {Application}
  206. edge[linefrom, dotted] (daemon);
  207. \draw[dashed] (app.north)+(-4, 0.35) -- node[right=4, yshift=1] {Network protocol} ++(4, 0.35);
  208. \end{tikzpicture}
  209. \end{figure}
  210. }
  211. \def\demodiagram{
  212. \begin{figure}[H]
  213. \center
  214. \begin{tikzpicture}[node distance=4em, transform shape, scale=0.6]
  215. \node (dummy) {};
  216. \node[block, below of=dummy] (screen) {Screen area}
  217. edge[linefrom] (dummy);
  218. \node[block, below of=screen, xshift=7em] (overlay) {Overlay area}
  219. edge[lineto, <->] (screen);
  220. \node[below of=overlay, xshift=2em] {Hand tracker}
  221. edge[lineto, bend left=15, dotted] (overlay)
  222. edge[linefrom, bend right=15] (overlay);
  223. \node[block, below of=screen, xshift=-7em] (window) {Appliation window area}
  224. edge[lineto, <->] (screen);
  225. \node[above of=window, xshift=-4em] {Transformation+tap trackers}
  226. edge[lineto, bend left=15, dotted] (window)
  227. edge[linefrom, bend right=15] (window);
  228. \node[block, below of=window, xshift=-7em] (rect) {Rectangle area}
  229. edge[lineto, <->] (window);
  230. \node[below of=rect, yshift=-0.5em] {Transformation+tap trackers}
  231. edge[lineto, bend left=15, dotted] (rect)
  232. edge[linefrom, bend right=15] (rect);
  233. \node[block, below of=window, xshift=7em] (triangle) {Triangle area}
  234. edge[lineto, <->] (window);
  235. \node[below of=triangle, yshift=-0.5em] {Transformation+tap trackers}
  236. edge[lineto, bend left=15, dotted] (triangle)
  237. edge[linefrom, bend right=15] (triangle);
  238. \end{tikzpicture}
  239. \end{figure}
  240. }