Spaces:
Sleeping
Sleeping
File size: 2,510 Bytes
07c3cdd | 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 | /checkbutton-size 15 px def
/box-checkbutton-create {
box-generic-create
dup box-checkbutton-setup-methods
dup /checked false put
checkbutton-size 1 index put-default-baseline
checkbutton-size 1 index put-height
checkbutton-size 1 index put-width
dup /box-checkbutton add-type
} def
/box-checkbutton-get-max-width { % => Context Box
dup get-full-width
exch pop
exch pop
} def
/box-checkbutton-get-min-width { % => Context Box
dup get-full-width
exch pop
exch pop
} def
/box-checkbutton-put-checked { % => Value Box
exch /checked exch put
} def
/box-checkbutton-reflow { % => Context Parent Box
% Set default baseline
dup get-default-baseline
1 index put-baseline
% append to parent line box
dup 2 index box-container-append-line
% Determine coordinates of upper-left _margin_ corner
1 index 1 index box-generic-guess-corner
% Offset parent current X coordinate
1 index get-current-x
1 index get-full-width
add
2 index put-current-x
% Extend parent height
dup get-bottom-margin
2 index box-generic-extend-height
pop pop pop
} def
/box-checkbutton-setup-methods {
dup /Methods get
dup /get-max-width {box-checkbutton-get-max-width} put
dup /get-min-width {box-checkbutton-get-min-width} put
dup /reflow {box-checkbutton-reflow} put
dup /show {box-checkbutton-show} put
pop pop
} def
/box-checkbutton-show { % => Viewport Box
% Get check center
dup get-left
1 index get-right add
2 div % => Viewport Box X
1 index get-top
2 index get-bottom add
2 div % => Viewport Box X Y
% Calculate checkbox size
2 index /get-width call-method
3 div % => Viewport Box X Y Size
% Draw checkbox
0.25 setlinewidth
2 index 1 index sub
2 index 2 index add moveto
2 index 1 index add
2 index 2 index add lineto
2 index 1 index add
2 index 2 index sub lineto
2 index 1 index sub
2 index 2 index sub lineto
closepath
stroke
% Draw checkmark if needed
3 index /checked get {
dup 2 div % => Viewport Box X Y Size CheckSize
3 index 1 index sub
3 index 2 index add moveto
3 index 1 index add
3 index 2 index sub lineto
stroke
3 index 1 index add
3 index 2 index add moveto
3 index 1 index sub
3 index 2 index sub lineto
stroke
pop
} if % => Viewport Box X Y Size
pop pop pop
pop pop
} def |