OLD | NEW |
1 #!mojo mojo:sky | 1 #!mojo mojo:sky |
2 <import src="sky:core" as="sky"/> | 2 <import src="sky:core" as="sky"/> |
3 <script> | 3 <script> |
4 class BeehiveLayoutManager extends sky.LayoutManager { | 4 class BeehiveLayoutManager extends sky.LayoutManager { |
5 function layout(width, height) { | 5 function layout(width, height) { |
6 this.markAsLaidOut(); | 6 this.markAsLaidOut(); |
7 if (width == null) | 7 if (width == null) |
8 width = this.getIntrinsicWidth().value; | 8 width = this.getIntrinsicWidth().value; |
9 let autoHeight = false; | 9 let autoHeight = false; |
10 if (height == null) { | 10 if (height == null) { |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 while (!loop.done) { | 108 while (!loop.done) { |
109 let child = loop.value; | 109 let child = loop.value; |
110 if (this.inHex(child.x, child.y, child.width, child.height, x, y)) | 110 if (this.inHex(child.x, child.y, child.width, child.height, x, y)) |
111 return child.layoutManager.hitTest(x-child.x, y-child.y); | 111 return child.layoutManager.hitTest(x-child.x, y-child.y); |
112 loop = children.next(); | 112 loop = children.next(); |
113 } | 113 } |
114 return this.node; | 114 return this.node; |
115 } | 115 } |
116 } | 116 } |
117 sky.registerLayoutManager('beehive', BeehiveLayoutManager); | 117 sky.registerLayoutManager('beehive', BeehiveLayoutManager); |
118 let BeehiveCountStyleValueType = new StyleValueType(); | 118 let BeehiveCountStyleGrammar = new StyleGrammar(); |
119 BeehiveCountStyleValueType.addParser((tokens) => { | 119 BeehiveCountStyleGrammar.addParser((tokens) => { |
120 let token = tokens.next(); | 120 let token = tokens.next(); |
121 if (token.done) | 121 if (token.done) |
122 throw new Error(); | 122 throw new Error(); |
123 if (token.value.kind != 'number') | 123 if (token.value.kind != 'number') |
124 throw new Error(); | 124 throw new Error(); |
125 if (token.value.value <= 0) | 125 if (token.value.value <= 0) |
126 throw new Error(); | 126 throw new Error(); |
127 if (Math.trunc(token.value.value) != token.value.value) // is integer | 127 if (Math.trunc(token.value.value) != token.value.value) // is integer |
128 throw new Error(); | 128 throw new Error(); |
129 return { | 129 return new NumericStyleValue(token.value.value); |
130 value: token.value.value; | |
131 } | |
132 }); | 130 }); |
133 sky.registerProperty({ | 131 sky.registerProperty({ |
134 name: 'beehive-count', | 132 name: 'beehive-count', |
135 type: BeehiveCountStyleValueType, | 133 type: BeehiveCountStyleGrammar, |
136 inherits: true, | 134 inherits: true, |
137 initialValue: 5, | 135 initialValue: 5, |
138 needsLayout: true, | 136 needsLayout: true, |
139 }); | 137 }); |
140 </script> | 138 </script> |
141 <style> | 139 <style> |
142 div { display: beehive; beehive-count: 3; } | 140 div { display: beehive; beehive-count: 3; } |
143 </style> | 141 </style> |
144 <div> | 142 <div> |
145 <t>Hello</t> | 143 <t>Hello</t> |
146 <t>World</t> | 144 <t>World</t> |
147 <t>How</t> | 145 <t>How</t> |
148 <t>Are</t> | 146 <t>Are</t> |
149 <t>You</t> | 147 <t>You</t> |
150 <t>Today?</t> | 148 <t>Today?</t> |
151 </div> | 149 </div> |
OLD | NEW |