summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/ocgx/tikzlibraryocgx.code.tex
blob: d69b56d0d29de403b275b89944b9ae334588a5e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
% Copyright (C) 2012 by Paul Gaborit
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.

\RequirePackage{ocgx}
\usetikzlibrary{calc}

\makeatletter
\tikzset{
  ocg/.style={ocg/.cd,#1,/tikz/.cd},
  ocg={
    % parameters
    name/.store in=\ocgx@name,
    visibity/.store in=\ocgx@visibility,
    status/.is choice,
    status/visible/.style={visibity=1},
    status/invisible/.style={visibity=0},
    % default values
    name=,
    status=visible,
    % ref
    ref/.style={
      /tikz/execute at begin scope={\ocg{\ocgx@name}{#1}{\ocgx@visibility}},
      /tikz/execute at end scope={\endocg},
    },
  },
  switch ocg/.style={
    postaction={
      path picture={
        \path let
        \p1 = (path picture bounding box.south west),
        \p2 = (path picture bounding box.north east),
        \p3 = (\x2-\x1,\y2-\y1)
        in
        (path picture bounding box.center)
        node[inner sep=0pt,anchor=center,outer sep=0pt]
        {\switchocg{#1}{\phantom{\rule{\x3}{\y3}}}};
      }
    },
  },
  switch ocg with mark on/.style 2 args={
    postaction={
      path picture={
        \begin{ocg}{#1}{#1}{1}
          \draw
          (path picture bounding box.south west)
          --
          (path picture bounding box.north east)
          (path picture bounding box.south east)
          --
          (path picture bounding box.north west)
          ;
        \end{ocg}
      },
      switch ocg={#1 #2},
    }
  },
  switch ocg with mark off/.style 2 args={
    postaction={
      path picture={
        \begin{ocg}{#1}{#1}{0}
          \draw
          (path picture bounding box.south west)
          --
          (path picture bounding box.north east)
          (path picture bounding box.south east)
          --
          (path picture bounding box.north west)
          ;
        \end{ocg}
      },
      switch ocg={#1 #2},
    }
  },
  show ocg/.style={
    postaction={
      path picture={
        \path let
        \p1 = (path picture bounding box.south west),
        \p2 = (path picture bounding box.north east),
        \p3 = (\x2-\x1,\y2-\y1)
        in
        (path picture bounding box.center)
        node[inner sep=0pt,anchor=center]
        {\showocg{#1}{\phantom{\rule{\x3}{\y3}}}};
      },
    },
  },
  hide ocg/.style={
    postaction={
      path picture={
        \path let
        \p1 = (path picture bounding box.south west),
        \p2 = (path picture bounding box.north east),
        \p3 = (\x2-\x1,\y2-\y1)
        in
        (path picture bounding box.center)
        node[inner sep=0pt,anchor=center]
        {\hideocg{#1}{\phantom{\rule{\x3}{\y3}}}};
      },
    },
  },
  actions ocg/.style n args={3}{
    postaction={
      path picture={
        \path let
        \p1 = (path picture bounding box.south west),
        \p2 = (path picture bounding box.north east),
        \p3 = (\x2-\x1,\y2-\y1)
        in
        (path picture bounding box.center)
        node[inner sep=0pt,anchor=center]
        {\actionsocg{#1}{#2}{#3}{\phantom{\rule{\x3}{\y3}}}};
      },
    },
  },
}
\makeatother