Merge lp:~compiz-team/compiz-expo-plugin/oneiric.polish into lp:~compiz-team/compiz-expo-plugin/oneiric
- oneiric.polish
- Merge into oneiric
Status: | Superseded |
---|---|
Proposed branch: | lp:~compiz-team/compiz-expo-plugin/oneiric.polish |
Merge into: | lp:~compiz-team/compiz-expo-plugin/oneiric |
Diff against target: |
823 lines (+720/-5) 6 files modified
expo.xml.in (+6/-5) src/expo.cpp (+22/-0) src/expo.h (+1/-0) src/glow.cpp (+428/-0) src/glow.h (+66/-0) src/group_glow.h (+197/-0) |
To merge this branch: | bzr merge lp:~compiz-team/compiz-expo-plugin/oneiric.polish |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Compiz Maintainers | Pending | ||
Review via email: mp+73655@code.launchpad.net |
This proposal has been superseded by a proposal from 2011-09-02.
Commit message
Description of the change
Center the spread as per design
- 153. By Sam Spilsbury
-
Add missing files
- 154. By Sam Spilsbury
-
Change defaults
- 155. By Sam Spilsbury
-
Fix offsets
- 156. By Sam Spilsbury
-
Added glow outline
- 157. By Sam Spilsbury
-
Opacity fix
- 158. By Sam Spilsbury
-
Require the imgpng plugin
- 159. By Sam Spilsbury
-
Use 0.005 as the default so that the glow is visible
- 160. By Sam Spilsbury
-
Load after imgpng
- 161. By Sam Spilsbury
-
Fix crash because viewportForGeometry can return a negative value (bug in core)
- 162. By Sam Spilsbury
-
Scale the texture by the viewport dimention size so that the size is consistent
across all resolutions
Unmerged revisions
- 162. By Sam Spilsbury
-
Scale the texture by the viewport dimention size so that the size is consistent
across all resolutions - 161. By Sam Spilsbury
-
Fix crash because viewportForGeometry can return a negative value (bug in core)
- 160. By Sam Spilsbury
-
Load after imgpng
- 159. By Sam Spilsbury
-
Use 0.005 as the default so that the glow is visible
- 158. By Sam Spilsbury
-
Require the imgpng plugin
- 157. By Sam Spilsbury
-
Opacity fix
- 156. By Sam Spilsbury
-
Added glow outline
- 155. By Sam Spilsbury
-
Fix offsets
- 154. By Sam Spilsbury
-
Change defaults
- 153. By Sam Spilsbury
-
Add missing files
Preview Diff
1 | === modified file 'expo.xml.in' |
2 | --- expo.xml.in 2011-08-30 16:50:58 +0000 |
3 | +++ expo.xml.in 2011-09-02 08:51:23 +0000 |
4 | @@ -17,6 +17,7 @@ |
5 | <plugin>wobbly</plugin> |
6 | <plugin>animation</plugin> |
7 | <plugin>wallpaper</plugin> |
8 | + <plugin>imgpng</plugin> |
9 | </relation> |
10 | </deps> |
11 | <options> |
12 | @@ -133,7 +134,7 @@ |
13 | <_long> Left Side screen space of expo in pixels</_long> |
14 | <min>-1680</min> |
15 | <max>1680</max> |
16 | - <default>36</default> |
17 | + <default>64</default> |
18 | </option> |
19 | <option name="y_offset" type="int"> |
20 | <_short>Y Space</_short> |
21 | @@ -145,7 +146,7 @@ |
22 | <option name="distance" type="float"> |
23 | <_short>Distance</_short> |
24 | <_long>Distance of the expo wall</_long> |
25 | - <default>0.0</default> |
26 | + <default>0.005</default> |
27 | <min>0.0</min> |
28 | <max>1.0</max> |
29 | <precision>0.01</precision> |
30 | @@ -204,7 +205,7 @@ |
31 | <option name="vp_brightness" type="float"> |
32 | <_short>Brightness</_short> |
33 | <_long>Inactive viewport brightness.</_long> |
34 | - <default>80.0</default> |
35 | + <default>40.0</default> |
36 | <min>0.0</min> |
37 | <max>100.0</max> |
38 | <precision>0.1</precision> |
39 | @@ -212,7 +213,7 @@ |
40 | <option name="vp_saturation" type="float"> |
41 | <_short>Saturation</_short> |
42 | <_long>Inactive viewport saturation.</_long> |
43 | - <default>100.0</default> |
44 | + <default>40.0</default> |
45 | <min>0.0</min> |
46 | <max>100.0</max> |
47 | <precision>0.1</precision> |
48 | @@ -224,7 +225,7 @@ |
49 | <red>0xfbfb</red> |
50 | <green>0x8b8b</green> |
51 | <blue>0x0</blue> |
52 | - <alpha>0x9f9f</alpha> |
53 | + <alpha>0xffff</alpha> |
54 | </default> |
55 | </option> |
56 | </subgroup> |
57 | |
58 | === added file 'images/glow_outline.png' |
59 | Binary files images/glow_outline.png 1970-01-01 00:00:00 +0000 and images/glow_outline.png 2011-09-02 08:51:23 +0000 differ |
60 | === modified file 'src/expo.cpp' |
61 | --- src/expo.cpp 2011-09-01 11:56:54 +0000 |
62 | +++ src/expo.cpp 2011-09-02 08:51:23 +0000 |
63 | @@ -836,6 +836,15 @@ |
64 | } |
65 | } |
66 | } |
67 | + |
68 | + /* Calculate the current viewport size */ |
69 | + int tl[2] = { 0, 0 }; |
70 | + int br[2] = { screen->width (), screen->height () }; |
71 | + |
72 | + invertTransformedVertex (attrib, sTransform3, output, tl); |
73 | + invertTransformedVertex (attrib, sTransform3, output, br); |
74 | + |
75 | + viewport_size = CompSize (br[0] - tl[0], br[1] - tl[1]); |
76 | } |
77 | |
78 | void |
79 | @@ -1037,6 +1046,13 @@ |
80 | CompPoint vp; |
81 | |
82 | screen->viewportForGeometry (dndWindow->geometry (), vp); |
83 | + |
84 | + while (vp.x () < 0) |
85 | + vp.setX (screen->vpSize ().width () + vp.x ()); |
86 | + |
87 | + while (vp.y () < 0) |
88 | + vp.setY (screen->vpSize ().height () + vp.y ()); |
89 | + |
90 | paintViewport (attrib, sTransform, infiniteRegion, output, mask, vp, vpCamPos, reflection); |
91 | } |
92 | |
93 | @@ -1245,6 +1261,12 @@ |
94 | * re-added later */ |
95 | gWindow->geometry().reset(); |
96 | |
97 | + float xScale = screen->width () / (float) eScreen->viewport_size.width (); |
98 | + float yScale = screen->height () / (float) eScreen->viewport_size.height (); |
99 | + |
100 | + mat.xx *= xScale; |
101 | + mat.yy *= yScale; |
102 | + |
103 | /* Not sure what this does, but it is necessary |
104 | * (adjusts for scale?) */ |
105 | mat.x0 -= mat.xx * reg.boundingRect().x1(); |
106 | |
107 | === modified file 'src/expo.h' |
108 | --- src/expo.h 2011-09-01 11:56:54 +0000 |
109 | +++ src/expo.h 2011-09-02 08:51:23 +0000 |
110 | @@ -128,6 +128,7 @@ |
111 | |
112 | GLTexture::List polkadots_texture; |
113 | CompSize polkadots_texture_size; |
114 | + CompSize viewport_size; |
115 | |
116 | GLTexture::List outline_texture; |
117 | CompSize outline_texture_size; |
118 | |
119 | === added file 'src/glow.cpp' |
120 | --- src/glow.cpp 1970-01-01 00:00:00 +0000 |
121 | +++ src/glow.cpp 2011-09-02 08:51:23 +0000 |
122 | @@ -0,0 +1,428 @@ |
123 | +/** |
124 | + * |
125 | + * Compiz group plugin |
126 | + * |
127 | + * glow.cpp |
128 | + * |
129 | + * Copyright : (C) 2006-2010 by Patrick Niklaus, Roi Cohen, |
130 | + * Danny Baumann, Sam Spilsbury |
131 | + * Authors: Patrick Niklaus <patrick.niklaus@googlemail.com> |
132 | + * Roi Cohen <roico.beryl@gmail.com> |
133 | + * Danny Baumann <maniac@opencompositing.org> |
134 | + * Sam Spilsbury <smspillaz@gmail.com> |
135 | + * |
136 | + * |
137 | + * This program is free software; you can redistribute it and/or |
138 | + * modify it under the terms of the GNU General Public License |
139 | + * as published by the Free Software Foundation; either version 2 |
140 | + * of the License, or (at your option) any later version. |
141 | + * |
142 | + * This program is distributed in the hope that it will be useful, |
143 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
144 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
145 | + * GNU General Public License for more details. |
146 | + * |
147 | + **/ |
148 | + |
149 | +#include "expo.h" |
150 | +#include "group_glow.h" |
151 | + |
152 | +const GlowTextureProperties glowTextureProperties = { |
153 | + /* GlowTextureRectangular */ |
154 | + glowTexRect, 32, 21 |
155 | +}; |
156 | + |
157 | +/* |
158 | + * GroupWindow::paintGlow |
159 | + * |
160 | + * Takes our glow texture, stretches the appropriate positions in the glow texture, |
161 | + * adds those geometries (so plugins like wobby and deform this texture correctly) |
162 | + * and then draws the glow texture with this geometry (plugins like wobbly and friends |
163 | + * will automatically deform the texture based on our set geometry) |
164 | + */ |
165 | + |
166 | +void |
167 | +ExpoWindow::paintGlow (GLFragment::Attrib &attrib, |
168 | + const CompRegion &paintRegion, |
169 | + unsigned int mask) |
170 | +{ |
171 | + CompRegion reg; |
172 | + int i; |
173 | + |
174 | + /* There are 8 glow parts of the glow texture which we wish to paint |
175 | + * separately with different transformations |
176 | + */ |
177 | + for (i = 0; i < NUM_GLOWQUADS; i++) |
178 | + { |
179 | + /* Using precalculated quads here */ |
180 | + reg = CompRegion (mGlowQuads[i].mBox); |
181 | + |
182 | + if (reg.boundingRect ().x1 () < reg.boundingRect ().x2 () && |
183 | + reg.boundingRect ().y1 () < reg.boundingRect ().y2 ()) |
184 | + { |
185 | + GLTexture::MatrixList matl; |
186 | + reg = CompRegion (reg.boundingRect ().x1 (), |
187 | + reg.boundingRect ().y1 (), |
188 | + reg.boundingRect ().width (), |
189 | + reg.boundingRect ().height ()); |
190 | + |
191 | + matl.push_back (mGlowQuads[i].mMatrix); |
192 | + gWindow->glAddGeometry (matl, reg, paintRegion); |
193 | + } |
194 | + } |
195 | + |
196 | + /* If the geometry add succeeded */ |
197 | + if (gWindow->geometry ().vertices) |
198 | + { |
199 | + GLFragment::Attrib fAttrib (attrib); |
200 | + GLushort average; |
201 | + GLushort color[3] = {MAXSHORT, |
202 | + MAXSHORT, |
203 | + MAXSHORT}; |
204 | + |
205 | + float alpha = (float) ExpoScreen::get (screen)->optionGetSelectedColorAlpha () / 65535.0f; |
206 | + |
207 | + GLScreen::get (screen)->setTexEnvMode (GL_MODULATE); |
208 | + glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
209 | + glColor4f (((float) ExpoScreen::get (screen)->optionGetSelectedColorRed () / 65535.0f) * alpha, |
210 | + ((float) ExpoScreen::get (screen)->optionGetSelectedColorGreen () / 65535.0f) * alpha, |
211 | + ((float) ExpoScreen::get (screen)->optionGetSelectedColorBlue () / 65535.0f) * alpha, |
212 | + alpha); |
213 | + |
214 | + /* we use PAINT_WINDOW_TRANSFORMED_MASK here to force |
215 | + the usage of a good texture filter */ |
216 | + foreach (GLTexture *tex, ExpoScreen::get (screen)->outline_texture) |
217 | + { |
218 | + gWindow->glDrawTexture (tex, fAttrib, mask | |
219 | + PAINT_WINDOW_BLEND_MASK | |
220 | + PAINT_WINDOW_TRANSLUCENT_MASK | |
221 | + PAINT_WINDOW_TRANSFORMED_MASK); |
222 | + } |
223 | + |
224 | + glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); |
225 | + GLScreen::get (screen)->setTexEnvMode (GL_REPLACE); |
226 | + glColor4usv (defaultColor); |
227 | + } |
228 | +} |
229 | + |
230 | +/* |
231 | + * ExpoWindow::computeGlowQuads |
232 | + * |
233 | + * This function computures the matrix transformation required for each |
234 | + * part of the glow texture which we wish to stretch to some rectangular |
235 | + * dimentions |
236 | + * |
237 | + * There are eight quads different parts of the texture which we wish to |
238 | + * paint here, the 4 sides and four corners, eg: |
239 | + * |
240 | + * ------------------ |
241 | + * | 1 | 4 | 6 | |
242 | + * ------------- ------------------ |
243 | + * | 1 | 4 | 6 | | | | | |
244 | + * ------------- | | | | |
245 | + * | 2 | n | 7 | -> | 2 | n | 7 | |
246 | + * ------------- | | | | |
247 | + * | 3 | 5 | 8 | | | | | |
248 | + * ------------- ------------------ |
249 | + * | 3 | 5 | 8 | |
250 | + * ------------------ |
251 | + * |
252 | + * In this example here, 2, 4, 5 and 7 are stretched, and the matrices for |
253 | + * each quad rect adjusted accordingly for it's size compared to the original |
254 | + * texture size. |
255 | + * |
256 | + * When we are adjusting the matrices here, the initial size of each corner has |
257 | + * a size of of "1.0f", so according to 2x2 matrix rules, |
258 | + * the scale factor is the inverse of the size of the glow (which explains |
259 | + * while you will see here that matrix->xx is (1 / glowSize) |
260 | + * where glowSize is the size the user specifies they want their glow to extend. |
261 | + * (likewise, matrix->yy is adjusted similarly for corners and for top/bottom) |
262 | + * |
263 | + * matrix->x0 and matrix->y0 here are set to be the top left edge of the rect |
264 | + * adjusted by the matrix scale factor (matrix->xx and matrix->yy) |
265 | + * |
266 | + */ |
267 | +void |
268 | +ExpoWindow::computeGlowQuads (GLTexture::Matrix *matrix) |
269 | +{ |
270 | + CompRect *box; |
271 | + int x1, x2, y1, y2; |
272 | + GLTexture::Matrix *quadMatrix; |
273 | + int glowSize, glowOffset; |
274 | + CompWindow *w = window; |
275 | + |
276 | + /* Passing NULL to this function frees the glow quads |
277 | + * (so the window is not painted with glow) */ |
278 | + |
279 | + if (matrix) |
280 | + { |
281 | + if (!mGlowQuads) |
282 | + mGlowQuads = new GlowQuad[NUM_GLOWQUADS]; |
283 | + if (!mGlowQuads) |
284 | + return; |
285 | + } |
286 | + else |
287 | + { |
288 | + if (mGlowQuads) |
289 | + { |
290 | + delete[] mGlowQuads; |
291 | + mGlowQuads = NULL; |
292 | + } |
293 | + return; |
294 | + } |
295 | + |
296 | + glowSize = 48; |
297 | + glowOffset = (glowSize * ExpoScreen::get (screen)->mGlowTextureProperties->glowOffset / |
298 | + ExpoScreen::get (screen)->mGlowTextureProperties->textureSize) + 1; |
299 | + |
300 | + /* Top left corner */ |
301 | + box = &mGlowQuads[GLOWQUAD_TOPLEFT].mBox; |
302 | + mGlowQuads[GLOWQUAD_TOPLEFT].mMatrix = *matrix; |
303 | + quadMatrix = &mGlowQuads[GLOWQUAD_TOPLEFT].mMatrix; |
304 | + |
305 | + /* Set the desired rect dimentions |
306 | + * for the part of the glow we are painting */ |
307 | + |
308 | + x1 = WIN_REAL_X (w) - glowSize + glowOffset; |
309 | + y1 = WIN_REAL_Y (w) - glowSize + glowOffset; |
310 | + |
311 | + /* 2x2 Matrix here, adjust both x and y scale factors |
312 | + * and the x and y position |
313 | + * |
314 | + * Scaling both parts of the texture in a positive direction |
315 | + * here (left to right top to bottom) |
316 | + * |
317 | + * The base position (x0 and y0) here requires us to move backwards |
318 | + * on the x and y dimentions by the calculated rect dimentions |
319 | + * multiplied by the scale factors |
320 | + */ |
321 | + |
322 | + quadMatrix->xx = 1.0f / glowSize; |
323 | + quadMatrix->yy = 1.0f / (glowSize); |
324 | + quadMatrix->x0 = -(x1 * quadMatrix->xx); |
325 | + quadMatrix->y0 = -(y1 * quadMatrix->yy); |
326 | + |
327 | + x2 = MIN (WIN_REAL_X (w) + glowOffset, |
328 | + WIN_REAL_X (w) + (WIN_REAL_WIDTH (w) / 2)); |
329 | + y2 = MIN (WIN_REAL_Y (w) + glowOffset, |
330 | + WIN_REAL_Y (w) + (WIN_REAL_HEIGHT (w) / 2)); |
331 | + |
332 | + *box = CompRect (x1, y1, x2 - x1, y2 - y1); |
333 | + |
334 | + /* Top right corner */ |
335 | + box = &mGlowQuads[GLOWQUAD_TOPRIGHT].mBox; |
336 | + mGlowQuads[GLOWQUAD_TOPRIGHT].mMatrix = *matrix; |
337 | + quadMatrix = &mGlowQuads[GLOWQUAD_TOPRIGHT].mMatrix; |
338 | + |
339 | + /* Set the desired rect dimentions |
340 | + * for the part of the glow we are painting */ |
341 | + |
342 | + x1 = WIN_REAL_X (w) + WIN_REAL_WIDTH (w) - glowOffset; |
343 | + y1 = WIN_REAL_Y (w) - glowSize + glowOffset; |
344 | + x2 = WIN_REAL_X (w) + WIN_REAL_WIDTH (w) + glowSize - glowOffset; |
345 | + |
346 | + /* 2x2 Matrix here, adjust both x and y scale factors |
347 | + * and the x and y position |
348 | + * |
349 | + * Scaling the y part of the texture in a positive direction |
350 | + * and the x part in a negative direction here |
351 | + * (right to left top to bottom) |
352 | + * |
353 | + * The base position (x0 and y0) here requires us to move backwards |
354 | + * on the y dimention and forwards on x by the calculated rect dimentions |
355 | + * multiplied by the scale factors (since we are moving forward on x we |
356 | + * need the inverse of that which is 1 - x1 * xx |
357 | + */ |
358 | + |
359 | + quadMatrix->xx = -1.0f / glowSize; |
360 | + quadMatrix->yy = 1.0f / glowSize; |
361 | + quadMatrix->x0 = 1.0 - (x1 * quadMatrix->xx); |
362 | + quadMatrix->y0 = -(y1 * quadMatrix->yy); |
363 | + |
364 | + x1 = MAX (WIN_REAL_X (w) + WIN_REAL_WIDTH (w) - glowOffset, |
365 | + WIN_REAL_X (w) + (WIN_REAL_WIDTH (w) / 2)); |
366 | + y2 = MIN (WIN_REAL_Y (w) + glowOffset, |
367 | + WIN_REAL_Y (w) + (WIN_REAL_HEIGHT (w) / 2)); |
368 | + |
369 | + *box = CompRect (x1, y1, x2 - x1, y2 - y1); |
370 | + |
371 | + /* Bottom left corner */ |
372 | + box = &mGlowQuads[GLOWQUAD_BOTTOMLEFT].mBox; |
373 | + mGlowQuads[GLOWQUAD_BOTTOMLEFT].mMatrix = *matrix; |
374 | + quadMatrix = &mGlowQuads[GLOWQUAD_BOTTOMLEFT].mMatrix; |
375 | + |
376 | + x1 = WIN_REAL_X (w) - glowSize + glowOffset; |
377 | + y1 = WIN_REAL_Y (w) + WIN_REAL_HEIGHT (w) - glowOffset; |
378 | + x2 = WIN_REAL_X (w) + glowOffset; |
379 | + y2 = WIN_REAL_Y (w) + WIN_REAL_HEIGHT (w) + glowSize - glowOffset; |
380 | + |
381 | + /* 2x2 Matrix here, adjust both x and y scale factors |
382 | + * and the x and y position |
383 | + * |
384 | + * Scaling the x part of the texture in a positive direction |
385 | + * and the y part in a negative direction here |
386 | + * (left to right bottom to top) |
387 | + * |
388 | + * The base position (x0 and y0) here requires us to move backwards |
389 | + * on the x dimention and forwards on y by the calculated rect dimentions |
390 | + * multiplied by the scale factors (since we are moving forward on x we |
391 | + * need the inverse of that which is 1 - y1 * yy |
392 | + */ |
393 | + |
394 | + quadMatrix->xx = 1.0f / glowSize; |
395 | + quadMatrix->yy = -1.0f / glowSize; |
396 | + quadMatrix->x0 = -(x1 * quadMatrix->xx); |
397 | + quadMatrix->y0 = 1.0f - (y1 * quadMatrix->yy); |
398 | + |
399 | + y1 = MAX (WIN_REAL_Y (w) + WIN_REAL_HEIGHT (w) - glowOffset, |
400 | + WIN_REAL_Y (w) + (WIN_REAL_HEIGHT (w) / 2)); |
401 | + x2 = MIN (WIN_REAL_X (w) + glowOffset, |
402 | + WIN_REAL_X (w) + (WIN_REAL_WIDTH (w) / 2)); |
403 | + |
404 | + *box = CompRect (x1, y1, x2 - x1, y2 - y1); |
405 | + |
406 | + /* Bottom right corner */ |
407 | + box = &mGlowQuads[GLOWQUAD_BOTTOMRIGHT].mBox; |
408 | + mGlowQuads[GLOWQUAD_BOTTOMRIGHT].mMatrix = *matrix; |
409 | + quadMatrix = &mGlowQuads[GLOWQUAD_BOTTOMRIGHT].mMatrix; |
410 | + |
411 | + x1 = WIN_REAL_X (w) + WIN_REAL_WIDTH (w) - glowOffset; |
412 | + y1 = WIN_REAL_Y (w) + WIN_REAL_HEIGHT (w) - glowOffset; |
413 | + x2 = WIN_REAL_X (w) + WIN_REAL_WIDTH (w) + glowSize - glowOffset; |
414 | + y2 = WIN_REAL_Y (w) + WIN_REAL_HEIGHT (w) + glowSize - glowOffset; |
415 | + |
416 | + /* 2x2 Matrix here, adjust both x and y scale factors |
417 | + * and the x and y position |
418 | + * |
419 | + * Scaling the both parts of the texture in a negative direction |
420 | + * (right to left bottom to top) |
421 | + * |
422 | + * The base position (x0 and y0) here requires us to move forwards |
423 | + * on both dimentions by the calculated rect dimentions |
424 | + * multiplied by the scale factors |
425 | + */ |
426 | + |
427 | + quadMatrix->xx = -1.0f / glowSize; |
428 | + quadMatrix->yy = -1.0f / glowSize; |
429 | + quadMatrix->x0 = 1.0 - (x1 * quadMatrix->xx); |
430 | + quadMatrix->y0 = 1.0 - (y1 * quadMatrix->yy); |
431 | + |
432 | + x1 = MAX (WIN_REAL_X (w) + WIN_REAL_WIDTH (w) - glowOffset, |
433 | + WIN_REAL_X (w) + (WIN_REAL_WIDTH (w) / 2)); |
434 | + y1 = MAX (WIN_REAL_Y (w) + WIN_REAL_HEIGHT (w) - glowOffset, |
435 | + WIN_REAL_Y (w) + (WIN_REAL_HEIGHT (w) / 2)); |
436 | + |
437 | + *box = CompRect (x1, y1, x2 - x1, y2 - y1); |
438 | + |
439 | + /* Top edge */ |
440 | + box = &mGlowQuads[GLOWQUAD_TOP].mBox; |
441 | + mGlowQuads[GLOWQUAD_TOP].mMatrix = *matrix; |
442 | + quadMatrix = &mGlowQuads[GLOWQUAD_TOP].mMatrix; |
443 | + |
444 | + x1 = WIN_REAL_X (w) + glowOffset; |
445 | + y1 = WIN_REAL_Y (w) - glowSize + glowOffset; |
446 | + x2 = WIN_REAL_X (w) + WIN_REAL_WIDTH (w) - glowOffset; |
447 | + y2 = WIN_REAL_Y (w) + glowOffset; |
448 | + |
449 | + /* 2x2 Matrix here, adjust both x and y scale factors |
450 | + * and the x and y position |
451 | + * |
452 | + * No need to scale the x part of the texture here, but we |
453 | + * are scaling on the y part in a positive direciton |
454 | + * |
455 | + * The base position (y0) here requires us to move backwards |
456 | + * on the x dimention and forwards on y by the calculated rect dimentions |
457 | + * multiplied by the scale factors |
458 | + */ |
459 | + |
460 | + quadMatrix->xx = 0.0f; |
461 | + quadMatrix->yy = 1.0f / glowSize; |
462 | + quadMatrix->x0 = 1.0; |
463 | + quadMatrix->y0 = -(y1 * quadMatrix->yy); |
464 | + |
465 | + *box = CompRect (x1, y1, x2 - x1, y2 - y1); |
466 | + |
467 | + /* Bottom edge */ |
468 | + box = &mGlowQuads[GLOWQUAD_BOTTOM].mBox; |
469 | + mGlowQuads[GLOWQUAD_BOTTOM].mMatrix = *matrix; |
470 | + quadMatrix = &mGlowQuads[GLOWQUAD_BOTTOM].mMatrix; |
471 | + |
472 | + x1 = WIN_REAL_X (w) + glowOffset; |
473 | + y1 = WIN_REAL_Y (w) + WIN_REAL_HEIGHT (w) - glowOffset; |
474 | + x2 = WIN_REAL_X (w) + WIN_REAL_WIDTH (w) - glowOffset; |
475 | + y2 = WIN_REAL_Y (w) + WIN_REAL_HEIGHT (w) + glowSize - glowOffset; |
476 | + |
477 | + /* 2x2 Matrix here, adjust both x and y scale factors |
478 | + * and the x and y position |
479 | + * |
480 | + * No need to scale the x part of the texture here, but we |
481 | + * are scaling on the y part in a negative direciton |
482 | + * |
483 | + * The base position (y0) here requires us to move forwards |
484 | + * on y by the calculated rect dimentions |
485 | + * multiplied by the scale factors |
486 | + */ |
487 | + |
488 | + quadMatrix->xx = 0.0f; |
489 | + quadMatrix->yy = -1.0f / glowSize; |
490 | + quadMatrix->x0 = 1.0; |
491 | + quadMatrix->y0 = 1.0 - (y1 * quadMatrix->yy); |
492 | + |
493 | + *box = CompRect (x1, y1, x2 - x1, y2 - y1); |
494 | + |
495 | + /* Left edge */ |
496 | + box = &mGlowQuads[GLOWQUAD_LEFT].mBox; |
497 | + mGlowQuads[GLOWQUAD_LEFT].mMatrix = *matrix; |
498 | + quadMatrix = &mGlowQuads[GLOWQUAD_LEFT].mMatrix; |
499 | + |
500 | + x1 = WIN_REAL_X (w) - glowSize + glowOffset; |
501 | + y1 = WIN_REAL_Y (w) + glowOffset; |
502 | + x2 = WIN_REAL_X (w) + glowOffset; |
503 | + y2 = WIN_REAL_Y (w) + WIN_REAL_HEIGHT (w) - glowOffset; |
504 | + |
505 | + /* 2x2 Matrix here, adjust both x and y scale factors |
506 | + * and the x and y position |
507 | + * |
508 | + * No need to scale the y part of the texture here, but we |
509 | + * are scaling on the x part in a positive direciton |
510 | + * |
511 | + * The base position (x0) here requires us to move backwards |
512 | + * on x by the calculated rect dimentions |
513 | + * multiplied by the scale factors |
514 | + */ |
515 | + |
516 | + quadMatrix->xx = 1.0f / glowSize; |
517 | + quadMatrix->yy = 0.0f; |
518 | + quadMatrix->x0 = -(x1 * quadMatrix->xx); |
519 | + quadMatrix->y0 = 1.0; |
520 | + |
521 | + *box = CompRect (x1, y1, x2 - x1, y2 - y1); |
522 | + |
523 | + /* Right edge */ |
524 | + box = &mGlowQuads[GLOWQUAD_RIGHT].mBox; |
525 | + mGlowQuads[GLOWQUAD_RIGHT].mMatrix = *matrix; |
526 | + quadMatrix = &mGlowQuads[GLOWQUAD_RIGHT].mMatrix; |
527 | + |
528 | + x1 = WIN_REAL_X (w) + WIN_REAL_WIDTH (w) - glowOffset; |
529 | + y1 = WIN_REAL_Y (w) + glowOffset; |
530 | + x2 = WIN_REAL_X (w) + WIN_REAL_WIDTH (w) + glowSize - glowOffset; |
531 | + y2 = WIN_REAL_Y (w) + WIN_REAL_HEIGHT (w) - glowOffset; |
532 | + |
533 | + /* 2x2 Matrix here, adjust both x and y scale factors |
534 | + * and the x and y position |
535 | + * |
536 | + * No need to scale the y part of the texture here, but we |
537 | + * are scaling on the x part in a negative direciton |
538 | + * |
539 | + * The base position (x0) here requires us to move forwards |
540 | + * on x by the calculated rect dimentions |
541 | + * multiplied by the scale factors |
542 | + */ |
543 | + |
544 | + quadMatrix->xx = -1.0f / glowSize; |
545 | + quadMatrix->yy = 0.0f; |
546 | + quadMatrix->x0 = 1.0 - (x1 * quadMatrix->xx); |
547 | + quadMatrix->y0 = 1.0; |
548 | + |
549 | + *box = CompRect (x1, y1, x2 - x1, y2 - y1); |
550 | +} |
551 | |
552 | === added file 'src/glow.h' |
553 | --- src/glow.h 1970-01-01 00:00:00 +0000 |
554 | +++ src/glow.h 2011-09-02 08:51:23 +0000 |
555 | @@ -0,0 +1,66 @@ |
556 | +/** |
557 | + * |
558 | + * Compiz group plugin |
559 | + * |
560 | + * glow.h |
561 | + * |
562 | + * Copyright : (C) 2006-2010 by Patrick Niklaus, Roi Cohen, |
563 | + * Danny Baumann, Sam Spilsbury |
564 | + * Authors: Patrick Niklaus <patrick.niklaus@googlemail.com> |
565 | + * Roi Cohen <roico.beryl@gmail.com> |
566 | + * Danny Baumann <maniac@opencompositing.org> |
567 | + * Sam Spilsbury <smspillaz@gmail.com> |
568 | + * |
569 | + * |
570 | + * This program is free software; you can redistribute it and/or |
571 | + * modify it under the terms of the GNU General Public License |
572 | + * as published by the Free Software Foundation; either version 2 |
573 | + * of the License, or (at your option) any later version. |
574 | + * |
575 | + * This program is distributed in the hope that it will be useful, |
576 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
577 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
578 | + * GNU General Public License for more details. |
579 | + * |
580 | + **/ |
581 | + |
582 | +#ifndef _EXPO_GLOW_H |
583 | +#define _EXPO_GLOW_H |
584 | + |
585 | +#define GLOWQUAD_TOPLEFT 0 |
586 | +#define GLOWQUAD_TOPRIGHT 1 |
587 | +#define GLOWQUAD_BOTTOMLEFT 2 |
588 | +#define GLOWQUAD_BOTTOMRIGHT 3 |
589 | +#define GLOWQUAD_TOP 4 |
590 | +#define GLOWQUAD_BOTTOM 5 |
591 | +#define GLOWQUAD_LEFT 6 |
592 | +#define GLOWQUAD_RIGHT 7 |
593 | +#define NUM_GLOWQUADS 8 |
594 | + |
595 | +/* Represents a particular glow texture, so here |
596 | + * we have hardcoded in the texture data, the offset |
597 | + * and the size of the texture |
598 | + */ |
599 | + |
600 | +typedef struct _GlowTextureProperties { |
601 | + char *textureData; |
602 | + int textureSize; |
603 | + int glowOffset; |
604 | +} GlowTextureProperties; |
605 | + |
606 | +/* Each glow quad contains a 2x2 scale + positional matrix |
607 | + * (the 3rd column is not used since that is for matrix skew |
608 | + * operations which we do not care about) |
609 | + * and also a CompRect which describes the size and position of |
610 | + * the quad on the glow |
611 | + */ |
612 | + |
613 | +class GlowQuad { |
614 | + public: |
615 | + CompRect mBox; |
616 | + GLTexture::Matrix mMatrix; |
617 | +}; |
618 | + |
619 | +extern const GlowTextureProperties glowTextureProperties; |
620 | + |
621 | +#endif |
622 | |
623 | === added file 'src/group_glow.h' |
624 | --- src/group_glow.h 1970-01-01 00:00:00 +0000 |
625 | +++ src/group_glow.h 2011-09-02 08:51:23 +0000 |
626 | @@ -0,0 +1,197 @@ |
627 | +#ifndef _GROUP_GLOWTEX_H |
628 | +#define _GROUP_GLOWTEX_H |
629 | + |
630 | +/** |
631 | + * |
632 | + * Compiz group plugin |
633 | + * |
634 | + * group_glow.h |
635 | + * |
636 | + * Copyright : (C) 2006-2010 by Patrick Niklaus, Roi Cohen, |
637 | + * Danny Baumann, Sam Spilsbury |
638 | + * Authors: Patrick Niklaus <patrick.niklaus@googlemail.com> |
639 | + * Roi Cohen <roico.beryl@gmail.com> |
640 | + * Danny Baumann <maniac@opencompositing.org> |
641 | + * Sam Spilsbury <smspillaz@gmail.com> |
642 | + * |
643 | + * |
644 | + * This program is free software; you can redistribute it and/or |
645 | + * modify it under the terms of the GNU General Public License |
646 | + * as published by the Free Software Foundation; either version 2 |
647 | + * of the License, or (at your option) any later version. |
648 | + * |
649 | + * This program is distributed in the hope that it will be useful, |
650 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
651 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
652 | + * GNU General Public License for more details. |
653 | + * |
654 | + **/ |
655 | + |
656 | +/* |
657 | + * glowTex |
658 | + */ |
659 | + |
660 | +static char glowTexRect[4097] = { |
661 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
662 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
663 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377" |
664 | + "\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377" |
665 | + "\377\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
666 | + "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\6\377\377\377\6\377\377" |
667 | + "\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377" |
668 | + "\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6" |
669 | + "\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377" |
670 | + "\14\377\377\377\14\377\377\377\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
671 | + "\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\14" |
672 | + "\377\377\377\14\377\377\377\22\377\377\377\22\377\377\377\22\377\377\377" |
673 | + "\27\377\377\377\27\377\377\377\27\377\377\377\27\377\377\377\27\377\377\377" |
674 | + "\27\377\377\377\27\377\377\377\27\377\377\377\27\377\377\377\27\377\377\377" |
675 | + "\35\377\377\377\35\377\377\377\35\377\377\377\35\377\377\377\35\377\377\377" |
676 | + "\35\377\377\377\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" |
677 | + "\377\6\377\377\377\6\377\377\377\14\377\377\377\22\377\377\377\27\377\377" |
678 | + "\377\27\377\377\377\35\377\377\377#\377\377\377'\377\377\377'\377\377\377" |
679 | + "+\377\377\377+\377\377\377+\377\377\377+\377\377\377+\377\377\377+\377\377" |
680 | + "\377+\377\377\377+\377\377\377+\377\377\3771\377\377\3771\377\377\3771\377" |
681 | + "\377\3771\377\377\3771\377\377\3771\377\377\3771\0\0\0\0\0\0\0\0\0\0\0\0" |
682 | + "\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\14\377\377\377\22\377\377\377" |
683 | + "\27\377\377\377\35\377\377\377#\377\377\377+\377\377\3771\377\377\3776\377" |
684 | + "\377\377<\377\377\377>\377\377\377C\377\377\377I\377\377\377I\377\377\377" |
685 | + "I\377\377\377I\377\377\377I\377\377\377I\377\377\377I\377\377\377I\377\377" |
686 | + "\377L\377\377\377L\377\377\377L\377\377\377L\377\377\377L\377\377\377L\377" |
687 | + "\377\377L\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\14\377" |
688 | + "\377\377\22\377\377\377\27\377\377\377#\377\377\377+\377\377\3776\377\377" |
689 | + "\377C\377\377\377L\377\377\377U\377\377\377]\377\377\377`\377\377\377d\377" |
690 | + "\377\377h\377\377\377k\377\377\377k\377\377\377k\377\377\377k\377\377\377" |
691 | + "k\377\377\377k\377\377\377k\377\377\377p\377\377\377p\377\377\377p\377\377" |
692 | + "\377p\377\377\377p\377\377\377p\377\377\377p\0\0\0\0\0\0\0\0\0\0\0\0\377" |
693 | + "\377\377\6\377\377\377\14\377\377\377\22\314\314\314\35\377\377\377'\377" |
694 | + "\377\3771\377\377\377>\357\357\357P\377\377\377]\363\363\363k\365\365\365" |
695 | + "v\365\365\365|\377\377\377\202\367\367\367\210\367\367\367\214\367\367\367" |
696 | + "\216\367\367\367\221\367\367\367\221\367\367\367\221\367\367\367\221\367" |
697 | + "\367\367\221\367\367\367\221\367\367\367\224\367\367\367\224\367\367\367" |
698 | + "\224\367\367\367\224\367\367\367\224\367\367\367\224\367\367\367\224\0\0" |
699 | + "\0\0\0\0\0\0\377\377\377\6\377\377\377\6\377\377\377\22\377\377\377\27\377" |
700 | + "\377\377'\377\377\3776\377\377\377I\377\377\377Y\377\377\377k\376\376\376" |
701 | + "y\377\377\377\210\377\377\377\224\377\377\377\235\377\377\377\245\377\377" |
702 | + "\377\253\377\377\377\255\377\377\377\262\377\377\377\262\377\377\377\263" |
703 | + "\377\377\377\263\377\377\377\263\377\377\377\263\377\377\377\263\377\377" |
704 | + "\377\266\377\377\377\266\377\377\377\266\377\377\377\266\377\377\377\266" |
705 | + "\377\377\377\266\377\377\377\266\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377" |
706 | + "\14\377\377\377\27\377\377\377#\377\377\3771\377\377\377I\377\377\377]\377" |
707 | + "\377\377r\377\377\377\205\377\377\377\231\377\377\377\247\377\377\377\263" |
708 | + "\377\377\377\275\377\377\377\304\377\377\377\310\377\377\377\313\377\377" |
709 | + "\377\316\377\377\377\320\377\377\377\320\377\377\377\320\377\377\377\320" |
710 | + "\377\377\377\320\377\377\377\320\377\377\377\322\377\377\377\322\377\377" |
711 | + "\377\322\377\377\377\322\377\377\377\322\377\377\377\322\377\377\377\322" |
712 | + "\0\0\0\0\377\377\377\6\377\377\377\6\377\377\377\22\377\377\377\35\377\377" |
713 | + "\377+\377\377\377>\377\377\377Y\377\377\377r\377\377\377\210\376\376\376" |
714 | + "\237\377\377\377\262\377\377\377\302\377\377\377\313\377\377\377\324\377" |
715 | + "\377\377\332\376\376\376\336\377\377\377\341\377\377\377\342\377\377\377" |
716 | + "\344\377\377\377\344\377\377\377\344\377\377\377\344\377\377\377\344\377" |
717 | + "\377\377\344\377\377\377\345\377\377\377\345\377\377\377\345\377\377\377" |
718 | + "\345\377\377\377\345\377\377\377\345\377\377\377\345\0\0\0\0\377\377\377" |
719 | + "\6\377\377\377\14\377\377\377\27\377\377\377#\377\377\3776\377\377\377P\377" |
720 | + "\377\377k\377\377\377\205\376\376\376\237\372\372\372\266\377\377\377\307" |
721 | + "\373\373\373\325\373\373\373\337\374\374\374\345\374\374\374\352\374\374" |
722 | + "\374\355\374\374\374\357\374\374\374\360\374\374\374\361\374\374\374\361" |
723 | + "\374\374\374\362\374\374\374\362\374\374\374\362\374\374\374\362\374\374" |
724 | + "\374\362\374\374\374\362\374\374\374\362\374\374\374\362\374\374\374\362" |
725 | + "\374\374\374\362\374\374\374\362\0\0\0\0\377\377\377\6\377\377\377\14\377" |
726 | + "\377\377\35\377\377\377+\377\377\377C\377\377\377]\377\377\377|\377\377\377" |
727 | + "\231\377\377\377\263\377\377\377\307\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
728 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
729 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" |
730 | + "\377\377\6\377\377\377\22\324\324\324#\377\377\3771\377\377\377L\363\363" |
731 | + "\363k\377\377\377\210\377\377\377\247\377\377\377\302\377\377\377\325\0\0" |
732 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
733 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
734 | + "\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\14\377\377\377\22\377\377" |
735 | + "\377#\377\377\377<\377\377\377U\377\377\377v\377\377\377\226\377\377\377" |
736 | + "\263\377\377\377\315\377\377\377\337\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
737 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
738 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" |
739 | + "\6\377\377\377\14\377\377\377\27\377\377\377'\377\377\377>\377\377\377]\377" |
740 | + "\377\377|\370\370\370\237\377\377\377\275\373\373\373\325\377\377\377\345" |
741 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
742 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
743 | + "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\14\377\377\377\27\377" |
744 | + "\377\377+\377\377\377C\377\377\377`\377\377\377\202\377\377\377\247\377\377" |
745 | + "\377\304\377\377\377\332\377\377\377\352\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
746 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
747 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" |
748 | + "\377\6\377\377\377\14\377\377\377\27\377\377\377+\377\377\377C\377\377\377" |
749 | + "d\377\377\377\210\377\377\377\253\377\377\377\310\376\376\376\336\374\374" |
750 | + "\374\355\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
751 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
752 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\14\377\377\377" |
753 | + "\35\377\377\377+\377\377\377I\377\377\377h\377\377\377\214\377\377\377\260" |
754 | + "\377\377\377\313\374\374\374\342\374\374\374\357\0\0\0\0\0\0\0\0\0\0\0\0" |
755 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
756 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
757 | + "\377\377\377\6\377\377\377\14\377\377\377\35\342\342\3421\377\377\377I\377" |
758 | + "\377\377k\377\377\377\216\377\377\377\262\377\377\377\316\374\374\374\344" |
759 | + "\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
760 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
761 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\14\377" |
762 | + "\377\377\35\377\377\3771\377\377\377L\377\377\377k\377\377\377\221\377\377" |
763 | + "\377\263\377\377\377\320\377\377\377\344\377\377\377\361\0\0\0\0\0\0\0\0" |
764 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
765 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
766 | + "\0\0\0\0\377\377\377\6\377\377\377\14\377\377\377\35\377\377\3771\377\377" |
767 | + "\377L\377\377\377k\377\377\377\221\377\377\377\263\377\377\377\320\377\377" |
768 | + "\377\344\374\374\374\362\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
769 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
770 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377" |
771 | + "\14\377\377\377\35\377\377\3771\377\377\377L\364\364\364p\377\377\377\221" |
772 | + "\372\372\372\266\377\377\377\320\374\374\374\345\377\377\377\362\0\0\0\0" |
773 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
774 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
775 | + "\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\14\377\377\377\35\377\377\377" |
776 | + "1\377\377\377L\377\377\377p\377\377\377\221\377\377\377\266\373\373\373\322" |
777 | + "\377\377\377\345\377\377\377\362\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
778 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
779 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377" |
780 | + "\377\377\14\377\377\377\35\377\377\3771\377\377\377L\377\377\377p\377\377" |
781 | + "\377\221\377\377\377\266\373\373\373\322\377\377\377\345\377\377\377\362" |
782 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
783 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
784 | + "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\14\377\377\377\35\377" |
785 | + "\377\3771\377\377\377L\377\377\377p\377\377\377\221\377\377\377\266\373\373" |
786 | + "\373\322\377\377\377\345\377\377\377\362\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
787 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
788 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" |
789 | + "\377\6\377\377\377\14\377\377\377\35\377\377\3771\377\377\377L\377\377\377" |
790 | + "p\367\367\367\224\377\377\377\266\377\377\377\322\377\377\377\345\374\374" |
791 | + "\374\362\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
792 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
793 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\14\377\377\377" |
794 | + "\35\377\377\3771\377\377\377L\377\377\377p\367\367\367\224\377\377\377\266" |
795 | + "\377\377\377\322\377\377\377\345\374\374\374\362\0\0\0\0\0\0\0\0\0\0\0\0" |
796 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
797 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
798 | + "\377\377\377\6\377\377\377\14\377\377\377\35\377\377\3771\377\377\377L\377" |
799 | + "\377\377p\367\367\367\224\377\377\377\266\377\377\377\322\377\377\377\345" |
800 | + "\374\374\374\362\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
801 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
802 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\14\377" |
803 | + "\377\377\35\377\377\3771\377\377\377L\377\377\377p\367\367\367\224\377\377" |
804 | + "\377\266\377\377\377\322\377\377\377\345\374\374\374\362\0\0\0\0\0\0\0\0" |
805 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
806 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
807 | + "\0\0\0\0\377\377\377\6\377\377\377\14\377\377\377\35\377\377\3771\377\377" |
808 | + "\377L\377\377\377p\367\367\367\224\377\377\377\266\377\377\377\322\377\377" |
809 | + "\377\345\374\374\374\362\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
810 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
811 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377" |
812 | + "\14\377\377\377\35\377\377\3771\377\377\377L\377\377\377p\367\367\367\224" |
813 | + "\377\377\377\266\377\377\377\322\377\377\377\345\374\374\374\362\0\0\0\0" |
814 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
815 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
816 | + "\0\0\0\0\0\0\0\0\377\377\377\6\377\377\377\14\377\377\377\35\377\377\377" |
817 | + "1\377\377\377L\377\377\377p\367\367\367\224\377\377\377\266\377\377\377\322" |
818 | + "\377\377\377\345\374\374\374\362\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
819 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
820 | + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", |
821 | +}; |
822 | + |
823 | +#endif |