Merge lp:~aurelien-riv/livewallpaper/openmp into lp:livewallpaper
- openmp
- Merge into trunk
Proposed by
Aurélien RIVIERE
Status: | Needs review |
---|---|
Proposed branch: | lp:~aurelien-riv/livewallpaper/openmp |
Merge into: | lp:livewallpaper |
Diff against target: |
668 lines (+229/-182) (has conflicts) 11 files modified
CMakeLists.txt (+1/-1) data/livewallpaper.xml (+114/-114) plugins/galaxy/CMakeLists.txt (+10/-4) plugins/galaxy/galaxy.xml (+9/-0) plugins/galaxy/src/galaxy.c (+1/-0) plugins/galaxy/src/particle.c (+70/-47) ui/config/CMakeLists.txt (+1/-1) ui/config/key.vala (+1/-2) ui/config/keyfactory.vala (+11/-2) ui/config/plugin-parser.vala (+6/-0) ui/config/search.vala (+5/-11) Contents conflict in ui/config/search-workaround.c |
To merge this branch: | bzr merge lp:~aurelien-riv/livewallpaper/openmp |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Maximilian Schnarr | Pending | ||
Review via email: mp+311702@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Unmerged revisions
- 326. By Aurélien RIVIERE
-
remove dead code
limit lw:range with string conditions in addition to double, num_processors is the only possible value for now - 325. By Aurélien RIVIERE
-
Option to limit the number of threads used to update the stars
- 324. By Aurélien RIVIERE
-
Use OpenMP to parallelize the stars' position faster
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'CMakeLists.txt' |
2 | --- CMakeLists.txt 2015-01-21 12:32:29 +0000 |
3 | +++ CMakeLists.txt 2016-11-24 09:49:00 +0000 |
4 | @@ -11,7 +11,7 @@ |
5 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) |
6 | include(LiveWallpaperCommon) |
7 | |
8 | -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c89 -pedantic -W -Wall -Wextra -Wno-missing-field-initializers") |
9 | +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c89 -pedantic -W -Wall -Wextra -Wno-missing-field-initializers -Wno-variadic-macros") |
10 | |
11 | # enable debugging |
12 | option(ENABLE_DEBUG "Enable debugging" OFF) |
13 | |
14 | === modified file 'data/livewallpaper.xml' |
15 | --- data/livewallpaper.xml 2014-06-13 09:40:37 +0000 |
16 | +++ data/livewallpaper.xml 2016-11-24 09:49:00 +0000 |
17 | @@ -1,60 +1,60 @@ |
18 | <?xml version="1.0" encoding="UTF-8"?> |
19 | <schemalist> |
20 | - <enum id="net.launchpad.livewallpaper.multioutput-mode"> |
21 | - <value nick="One big wallpaper" value="0" /> |
22 | - <value nick="Multiple wallpapers" value="1" /> |
23 | - </enum> |
24 | - |
25 | - <enum id="net.launchpad.livewallpaper.bg-mode"> |
26 | - <value nick="Default background" value="0" /> |
27 | - <value nick="Custom image" value="1" /> |
28 | - <value nick="Single color" value="2" /> |
29 | - <value nick="Horizontal color gradient" value="3" /> |
30 | - <value nick="Vertical color gradient" value="4" /> |
31 | - </enum> |
32 | - |
33 | - <enum id="net.launchpad.livewallpaper.bg-render-type"> |
34 | - <value nick="Zoom" value="0" /> |
35 | - <value nick="Center" value="1" /> |
36 | - <value nick="Scale" value="2" /> |
37 | - <value nick="Fill" value="3" /> |
38 | - <value nick="Tile" value="4" /> |
39 | - </enum> |
40 | - |
41 | - <enum id="net.launchpad.livewallpaper.pm-mode"> |
42 | - <value nick="Never" value="0" /> |
43 | - <value nick="On low battery" value="1" /> |
44 | - <value nick="On battery" value="2" /> |
45 | - </enum> |
46 | - |
47 | - <schema id="net.launchpad.livewallpaper" path="/net/launchpad/livewallpaper/"> |
48 | - <key type="b" name="active"> |
49 | - <default>true</default> |
50 | - <summary>Show or hide the live wallpaper</summary> |
51 | - <description>Set whether the live wallpaper is visible or not</description> |
52 | - </key> |
53 | - <key type="s" name="active-plugin"> |
54 | - <default>"galaxy"</default> |
55 | - <summary>Active plugin</summary> |
56 | - <description>The name of the active wallpaper plugin</description> |
57 | - </key> |
58 | - |
59 | - <lw:tab name="General"> |
60 | - <key type="b" name="autostart"> |
61 | - <default>true</default> |
62 | - <summary>Autostart</summary> |
63 | - <description>Define whether LiveWallpaper should autostart at startup</description> |
64 | - </key> |
65 | - <key type="b" name="desktop-icons"> |
66 | - <default>false</default> |
67 | - <summary>Show desktop icons (Nautilus only)</summary> |
68 | - <description>Set this to true, if you want to see the desktop icons with Nautilus when a live wallpaper is running.</description> |
69 | - </key> |
70 | - <key name="multioutput-mode" enum="net.launchpad.livewallpaper.multioutput-mode"> |
71 | - <default>"One big wallpaper"</default> |
72 | - <summary>Multioutput Mode</summary> |
73 | - <description>Selects how the live wallpaper is displayed if multiple output devices are used</description> |
74 | - </key> |
75 | + <enum id="net.launchpad.livewallpaper.multioutput-mode"> |
76 | + <value nick="One big wallpaper" value="0" /> |
77 | + <value nick="Multiple wallpapers" value="1" /> |
78 | + </enum> |
79 | + |
80 | + <enum id="net.launchpad.livewallpaper.bg-mode"> |
81 | + <value nick="Default background" value="0" /> |
82 | + <value nick="Custom image" value="1" /> |
83 | + <value nick="Single color" value="2" /> |
84 | + <value nick="Horizontal color gradient" value="3" /> |
85 | + <value nick="Vertical color gradient" value="4" /> |
86 | + </enum> |
87 | + |
88 | + <enum id="net.launchpad.livewallpaper.bg-render-type"> |
89 | + <value nick="Zoom" value="0" /> |
90 | + <value nick="Center" value="1" /> |
91 | + <value nick="Scale" value="2" /> |
92 | + <value nick="Fill" value="3" /> |
93 | + <value nick="Tile" value="4" /> |
94 | + </enum> |
95 | + |
96 | + <enum id="net.launchpad.livewallpaper.pm-mode"> |
97 | + <value nick="Never" value="0" /> |
98 | + <value nick="On low battery" value="1" /> |
99 | + <value nick="On battery" value="2" /> |
100 | + </enum> |
101 | + |
102 | + <schema id="net.launchpad.livewallpaper" path="/net/launchpad/livewallpaper/"> |
103 | + <key type="b" name="active"> |
104 | + <default>true</default> |
105 | + <summary>Show or hide the live wallpaper</summary> |
106 | + <description>Set whether the live wallpaper is visible or not</description> |
107 | + </key> |
108 | + <key type="s" name="active-plugin"> |
109 | + <default>"galaxy"</default> |
110 | + <summary>Active plugin</summary> |
111 | + <description>The name of the active wallpaper plugin</description> |
112 | + </key> |
113 | + |
114 | + <lw:tab name="General"> |
115 | + <key type="b" name="autostart"> |
116 | + <default>true</default> |
117 | + <summary>Autostart</summary> |
118 | + <description>Define whether LiveWallpaper should autostart at startup</description> |
119 | + </key> |
120 | + <key type="b" name="desktop-icons"> |
121 | + <default>false</default> |
122 | + <summary>Show desktop icons (Nautilus only)</summary> |
123 | + <description>Set this to true, if you want to see the desktop icons with Nautilus when a live wallpaper is running.</description> |
124 | + </key> |
125 | + <key name="multioutput-mode" enum="net.launchpad.livewallpaper.multioutput-mode"> |
126 | + <default>"One big wallpaper"</default> |
127 | + <summary>Multioutput Mode</summary> |
128 | + <description>Selects how the live wallpaper is displayed if multiple output devices are used</description> |
129 | + </key> |
130 | <lw:frame name="Power Management"> |
131 | <lw:DisplayIf computer="Laptop" /> |
132 | <key name="pm-mode" enum="net.launchpad.livewallpaper.pm-mode"> |
133 | @@ -68,73 +68,73 @@ |
134 | <description>Restart the live wallpaper if the laptop is not on battery anymore. This only works, if LiveWallpaper stopped automatically because it is on (low) battery.</description> |
135 | </key> |
136 | </lw:frame> |
137 | - </lw:tab> |
138 | - <lw:tab name="Background"> |
139 | - <key name="bg-mode" enum="net.launchpad.livewallpaper.bg-mode"> |
140 | - <default>"Default background"</default> |
141 | - <summary>Background</summary> |
142 | - <description>Choose the plugin's background image</description> |
143 | - </key> |
144 | + </lw:tab> |
145 | + <lw:tab name="Background"> |
146 | + <key name="bg-mode" enum="net.launchpad.livewallpaper.bg-mode"> |
147 | + <default>"Default background"</default> |
148 | + <summary>Background</summary> |
149 | + <description>Choose the plugin's background image</description> |
150 | + </key> |
151 | |
152 | - <lw:separator/> |
153 | - <key type="s" name="bg-image"> |
154 | - <lw:type>file</lw:type> |
155 | + <lw:separator/> |
156 | + <key type="s" name="bg-image"> |
157 | + <lw:type>file</lw:type> |
158 | <lw:filefilter name="Image" pixbuf="true"></lw:filefilter> |
159 | - <default>""</default> |
160 | - <summary>Background Image</summary> |
161 | - <description>Path to use for the background image</description> |
162 | - </key> |
163 | - <key name="bg-render-type" enum="net.launchpad.livewallpaper.bg-render-type"> |
164 | - <default>"Zoom"</default> |
165 | - <summary>Render Type</summary> |
166 | - <description>Determines how the background image is rendered</description> |
167 | - </key> |
168 | + <default>""</default> |
169 | + <summary>Background Image</summary> |
170 | + <description>Path to use for the background image</description> |
171 | + </key> |
172 | + <key name="bg-render-type" enum="net.launchpad.livewallpaper.bg-render-type"> |
173 | + <default>"Zoom"</default> |
174 | + <summary>Render Type</summary> |
175 | + <description>Determines how the background image is rendered</description> |
176 | + </key> |
177 | |
178 | - <lw:separator/> |
179 | - <key type="s" name="bg-primary-color"> |
180 | - <lw:type>color</lw:type> |
181 | - <default>"rgba (255, 255, 0, 255)"</default> |
182 | - <summary>Primary Color</summary> |
183 | - <description>Left or bottom color when drawing gradients, or the solid color</description> |
184 | - </key> |
185 | - <key type="s" name="bg-secondary-color"> |
186 | - <lw:type>color</lw:type> |
187 | - <default>"rgba (255, 0, 0, 255)"</default> |
188 | - <summary>Secondary Color</summary> |
189 | - <description>Right or top color when drawing gradients, not used for solid color</description> |
190 | - </key> |
191 | - </lw:tab> |
192 | + <lw:separator/> |
193 | + <key type="s" name="bg-primary-color"> |
194 | + <lw:type>color</lw:type> |
195 | + <default>"rgba (255, 255, 0, 255)"</default> |
196 | + <summary>Primary Color</summary> |
197 | + <description>Left or bottom color when drawing gradients, or the solid color</description> |
198 | + </key> |
199 | + <key type="s" name="bg-secondary-color"> |
200 | + <lw:type>color</lw:type> |
201 | + <default>"rgba (255, 0, 0, 255)"</default> |
202 | + <summary>Secondary Color</summary> |
203 | + <description>Right or top color when drawing gradients, not used for solid color</description> |
204 | + </key> |
205 | + </lw:tab> |
206 | <lw:tab name="FPS"> |
207 | <key type="u" name="fps-limit"> |
208 | - <range min="0" max="120" /> |
209 | - <default>30</default> |
210 | - <summary>FPS Limit</summary> |
211 | - <description>Limit the frames per second to this value</description> |
212 | - </key> |
213 | + <range min="0" max="120" /> |
214 | + <default>30</default> |
215 | + <summary>FPS Limit</summary> |
216 | + <description>Limit the frames per second to this value</description> |
217 | + </key> |
218 | <lw:separator/> |
219 | - <key type="b" name="show-fps"> |
220 | - <default>false</default> |
221 | - <summary>Show FPS</summary> |
222 | - <description>Show the current frames per second</description> |
223 | - </key> |
224 | + <key type="b" name="show-fps"> |
225 | + <default>false</default> |
226 | + <summary>Show FPS</summary> |
227 | + <description>Show the current frames per second</description> |
228 | + </key> |
229 | <key type="s" name="fps-font"> |
230 | - <lw:type>font</lw:type> |
231 | - <default>"Sans 20"</default> |
232 | - <summary>FPS visualizer's font</summary> |
233 | - <description>The font used to display the current frames per second</description> |
234 | - </key> |
235 | + <lw:type>font</lw:type> |
236 | + <default>"Sans 20"</default> |
237 | + <summary>FPS visualizer's font</summary> |
238 | + <description>The font used to display the current frames per second</description> |
239 | + </key> |
240 | <key type="s" name="fps-fg-color"> |
241 | - <lw:type>color</lw:type> |
242 | - <default>"rgba (255, 255, 255, 255)"</default> |
243 | - <summary>FPS visualizer's font color</summary> |
244 | - <description>Color used to display the current frames per second</description> |
245 | - </key> |
246 | + <lw:type>color</lw:type> |
247 | + <default>"rgba (255, 255, 255, 255)"</default> |
248 | + <summary>FPS visualizer's font color</summary> |
249 | + <description>Color used to display the current frames per second</description> |
250 | + </key> |
251 | <key type="s" name="fps-bg-color"> |
252 | - <lw:type>color</lw:type> |
253 | - <default>"rgba (0, 0, 0, 255)"</default> |
254 | - <summary>FPS visualizer's background color</summary> |
255 | - <description>Color used as background for the area which shows the current frames per second</description> |
256 | - </key> |
257 | + <lw:type>color</lw:type> |
258 | + <default>"rgba (0, 0, 0, 255)"</default> |
259 | + <summary>FPS visualizer's background color</summary> |
260 | + <description>Color used as background for the area which shows the current frames per second</description> |
261 | + </key> |
262 | </lw:tab> |
263 | - </schema> |
264 | + </schema> |
265 | </schemalist> |
266 | |
267 | === modified file 'plugins/galaxy/CMakeLists.txt' |
268 | --- plugins/galaxy/CMakeLists.txt 2014-03-28 22:55:56 +0000 |
269 | +++ plugins/galaxy/CMakeLists.txt 2016-11-24 09:49:00 +0000 |
270 | @@ -1,12 +1,18 @@ |
271 | file(GLOB GALAXY_XCF images/*.xcf) |
272 | file(GLOB GALAXY_SOURCES src/*) |
273 | |
274 | +find_package(OpenMP) |
275 | +if (OPENMP_FOUND) |
276 | + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") |
277 | +endif() |
278 | + |
279 | livewallpaper_plugin_c( |
280 | - galaxy |
281 | - SOURCES ${GALAXY_SOURCES} |
282 | - SETTINGS galaxy.xml |
283 | + galaxy |
284 | + SOURCES ${GALAXY_SOURCES} |
285 | + SETTINGS galaxy.xml |
286 | RESOURCE galaxy.gresource.xml |
287 | - ICON galaxy.svg |
288 | + ICON galaxy.svg |
289 | + LIBRARIES -fopenmp |
290 | ) |
291 | |
292 | livewallpaper_plugin_build_xcf(galaxy FILES ${GALAXY_XCF}) |
293 | |
294 | === modified file 'plugins/galaxy/galaxy.xml' |
295 | --- plugins/galaxy/galaxy.xml 2015-01-01 12:58:43 +0000 |
296 | +++ plugins/galaxy/galaxy.xml 2016-11-24 09:49:00 +0000 |
297 | @@ -29,6 +29,15 @@ |
298 | <summary>Draw star streaks</summary> |
299 | <description>Draw a star with streaks</description> |
300 | </key> |
301 | + <lw:separator/> |
302 | + <key type="i" name="thread-count"> |
303 | + <range min="1" max="16" /> |
304 | + <lw:range max="num_processors"/> |
305 | + <lw:scale /> |
306 | + <default>1</default> |
307 | + <summary>Number of threads</summary> |
308 | + <description>Number of threads to be used to update the position of the stars</description> |
309 | + </key> |
310 | </lw:tab> |
311 | <lw:tab name="Colors"> |
312 | <key type="s" name="star-color"> |
313 | |
314 | === modified file 'plugins/galaxy/src/galaxy.c' |
315 | --- plugins/galaxy/src/galaxy.c 2016-02-21 09:46:31 +0000 |
316 | +++ plugins/galaxy/src/galaxy.c 2016-11-24 09:49:00 +0000 |
317 | @@ -355,6 +355,7 @@ |
318 | LW_BIND(self->priv->ps, "star-size"); |
319 | LW_BIND(self->priv->ps, "speed-ratio"); |
320 | LW_BIND(self->priv->ps, "draw-streaks"); |
321 | + LW_BIND(self->priv->ps, "thread-count"); |
322 | LW_BIND_COLOR(self->priv->ps, "star-color"); |
323 | |
324 | /* Light Program */ |
325 | |
326 | === modified file 'plugins/galaxy/src/particle.c' |
327 | --- plugins/galaxy/src/particle.c 2016-02-21 09:46:31 +0000 |
328 | +++ plugins/galaxy/src/particle.c 2016-11-24 09:49:00 +0000 |
329 | @@ -21,7 +21,6 @@ |
330 | */ |
331 | |
332 | #include <math.h> |
333 | -#include <stdlib.h> |
334 | #include <glib-object.h> |
335 | #include <livewallpaper/core.h> |
336 | #include "particle.h" |
337 | @@ -37,16 +36,22 @@ |
338 | * ellipse. Phi is the angle between the x-axis and the major |
339 | * axis of the ellipse. |
340 | */ |
341 | - gfloat cos_phi, sin_phi; |
342 | + double sin_phi; |
343 | + /* |
344 | +* Those values needed for the general parametic form of an |
345 | +* ellipse. Phi is the angle between the x-axis and the major |
346 | +* axis of the ellipse. |
347 | +*/ |
348 | + double cos_phi; |
349 | |
350 | - /* The current angle/position of this star. */ |
351 | + /* The current angle/position of this star. */ |
352 | gfloat angle; |
353 | |
354 | /* The distance from the center of the galaxy to this star. */ |
355 | - gfloat distance; |
356 | + double distance; |
357 | |
358 | /* the angular velocity of the star in 1/ms. */ |
359 | - gfloat speed; |
360 | + double speed; |
361 | }; |
362 | |
363 | /* 0 (line) -> 1.0f (circle) */ |
364 | @@ -54,14 +59,16 @@ |
365 | |
366 | struct _GalaxyParticleSystemPrivate |
367 | { |
368 | - guint star_count; |
369 | - guint star_size; |
370 | - gfloat speed_ratio; |
371 | + guint star_count; |
372 | + guint star_size; |
373 | + gdouble speed_ratio; |
374 | gboolean draw_streaks; |
375 | - GdkRGBA star_color; |
376 | + GdkRGBA star_color; |
377 | + |
378 | + guint thread_count; |
379 | |
380 | GArray *stars; |
381 | - gfloat *vertices; |
382 | + double *vertices; |
383 | |
384 | LwTexture *starTexture; |
385 | }; |
386 | @@ -76,6 +83,8 @@ |
387 | PROP_DRAW_STREAKS, |
388 | PROP_STAR_COLOR, |
389 | |
390 | + PROP_THREAD_COUNT, |
391 | + |
392 | N_PROPERTIES |
393 | }; |
394 | |
395 | @@ -128,6 +137,10 @@ |
396 | self->priv->star_color = *((GdkRGBA*)g_value_get_boxed(value)); |
397 | break; |
398 | |
399 | + case PROP_THREAD_COUNT: |
400 | + self->priv->thread_count = g_value_get_uint(value); |
401 | + break; |
402 | + |
403 | default: |
404 | G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); |
405 | break; |
406 | @@ -164,6 +177,10 @@ |
407 | g_value_set_boxed(value, &self->priv->star_color); |
408 | break; |
409 | |
410 | + case PROP_THREAD_COUNT: |
411 | + g_value_set_uint(value, self->priv->thread_count); |
412 | + break; |
413 | + |
414 | default: |
415 | G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); |
416 | break; |
417 | @@ -174,17 +191,17 @@ |
418 | * Gaussian random generator |
419 | * Using the polar form of the Box-Muller transformation |
420 | */ |
421 | -static gfloat |
422 | +static double |
423 | randng(void) |
424 | { |
425 | - static gfloat y; |
426 | + static double y; |
427 | static gboolean have_next = FALSE; |
428 | |
429 | if (! have_next) |
430 | { |
431 | - gfloat x1, x2, w; |
432 | + double w, x1, x2; |
433 | |
434 | - do |
435 | + do |
436 | { |
437 | x1 = 2.0 * randf() - 1.0; |
438 | x2 = 2.0 * randf() - 1.0; |
439 | @@ -201,7 +218,7 @@ |
440 | return y; |
441 | } |
442 | |
443 | -static inline gfloat |
444 | +static inline double |
445 | galaxy_particle_system_init_star(Star *star) |
446 | { |
447 | star->angle = rand1f(-LW_2PI); |
448 | @@ -228,7 +245,7 @@ |
449 | { |
450 | guint i; |
451 | g_array_set_size(self->priv->stars, count); |
452 | - self->priv->vertices = g_realloc(self->priv->vertices, 3 * count * sizeof(gfloat)); |
453 | + self->priv->vertices = g_realloc(self->priv->vertices, 3 * count * sizeof(gdouble)); |
454 | |
455 | /* Append stars if necessary */ |
456 | for(i = self->priv->star_count; i < count; i++) |
457 | @@ -259,34 +276,38 @@ |
458 | void |
459 | galaxy_particle_system_update(GalaxyParticleSystem *self, gint ms_since_last_paint) |
460 | { |
461 | - const Star * const limit = &g_array_index (self->priv->stars, Star, self->priv->star_count); |
462 | - Star * star = &g_array_index (self->priv->stars, Star, 0); |
463 | - const gfloat k = ms_since_last_paint * self->priv->speed_ratio; |
464 | - gfloat * v = self->priv->vertices; |
465 | + const int limit = self->priv->star_count; |
466 | + GArray *stars = self->priv->stars; |
467 | + const gdouble k = ms_since_last_paint * self->priv->speed_ratio; |
468 | + gdouble *v = self->priv->vertices; |
469 | + int i; |
470 | |
471 | - for(; star != limit; ++star, v+=3) |
472 | + #pragma omp parallel for num_threads(self->priv->thread_count) private(i) |
473 | + for(i=0; i < limit; ++i) |
474 | { |
475 | - gfloat a_cos_angle, b_sin_angle; |
476 | - |
477 | - /* Make sure that angle is between -2PI and 0! */ |
478 | - star->angle += k * star->speed; |
479 | - while(star->angle < -LW_2PI) star->angle += LW_2PI; |
480 | - while(star->angle > 0) star->angle -= LW_2PI; |
481 | - |
482 | - /* |
483 | - * a is the semi-major axis, here the distance and b is the |
484 | - * semi-minor axis defined by the distance and the ellipse ratio. |
485 | - */ |
486 | - a_cos_angle = star->distance * lw_cos(star->angle); |
487 | - b_sin_angle = star->distance * lw_sin(star->angle) * ELLIPSE_RATIO; |
488 | - |
489 | - /* |
490 | - * To calculate the current position we use the general |
491 | - * parametic form of an ellipse. |
492 | - * See http://en.wikipedia.org/wiki/Ellipse#General_parametric_form |
493 | - */ |
494 | - v[0] = a_cos_angle * star->cos_phi - b_sin_angle * star->sin_phi; |
495 | - v[1] = a_cos_angle * star->sin_phi + b_sin_angle * star->cos_phi; |
496 | + Star *star = &g_array_index(stars, Star, i); |
497 | + |
498 | + double a_cos_angle, b_sin_angle; |
499 | + |
500 | + /* Make sure that angle is between -2PI and 0! */ |
501 | + star->angle += k * star->speed; |
502 | + while(star->angle < -LW_2PI) star->angle += LW_2PI; |
503 | + while(star->angle > 0) star->angle -= LW_2PI; |
504 | + |
505 | + /* |
506 | + * a is the semi-major axis, here the distance and b is the |
507 | + * semi-minor axis defined by the distance and the ellipse ratio. |
508 | + */ |
509 | + a_cos_angle = star->distance * lw_cos(star->angle); |
510 | + b_sin_angle = star->distance * lw_sin(star->angle) * ELLIPSE_RATIO; |
511 | + |
512 | + /* |
513 | + * To calculate the current position we use the general |
514 | + * parametic form of an ellipse. |
515 | + * See http://en.wikipedia.org/wiki/Ellipse#General_parametric_form |
516 | + */ |
517 | + v[i*3+0] = a_cos_angle * star->cos_phi - b_sin_angle * star->sin_phi; |
518 | + v[i*3+1] = a_cos_angle * star->sin_phi + b_sin_angle * star->cos_phi; |
519 | } |
520 | } |
521 | |
522 | @@ -316,10 +337,10 @@ |
523 | /* Set star color */ |
524 | { |
525 | GdkRGBA *c = &self->priv->star_color; |
526 | - glColor4f(c->red, c->green, c->blue, c->alpha); |
527 | + glColor4d(c->red, c->green, c->blue, c->alpha); |
528 | } |
529 | |
530 | - glVertexPointer(3, GL_FLOAT, 3 * sizeof(gfloat), self->priv->vertices); |
531 | + glVertexPointer(3, GL_DOUBLE, 3 * sizeof(gdouble), self->priv->vertices); |
532 | glDrawArrays(GL_POINTS, 0, self->priv->star_count); |
533 | |
534 | glDisable(GL_POINT_SPRITE); |
535 | @@ -337,10 +358,11 @@ |
536 | self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self, GALAXY_TYPE_PARTICLE_SYSTEM, |
537 | GalaxyParticleSystemPrivate); |
538 | |
539 | - self->priv->star_count = 0; |
540 | - self->priv->star_size = 8; |
541 | - self->priv->speed_ratio = 1; |
542 | + self->priv->star_count = 0; |
543 | + self->priv->star_size = 8; |
544 | + self->priv->speed_ratio = 1; |
545 | self->priv->draw_streaks = TRUE; |
546 | + self->priv->thread_count = 1; |
547 | |
548 | self->priv->stars = g_array_new(FALSE, FALSE, sizeof(Star)); |
549 | self->priv->vertices = NULL; |
550 | @@ -386,6 +408,7 @@ |
551 | obj_properties[PROP_SPEED_RATIO] = g_param_spec_double ("speed-ratio", "Speed ratio", "Speed ratio", -5, 5, 1, G_PARAM_READWRITE); |
552 | obj_properties[PROP_DRAW_STREAKS] = g_param_spec_boolean("draw-streaks", "Draw star streaks", "Draw a star with streaks", TRUE, G_PARAM_READWRITE); |
553 | obj_properties[PROP_STAR_COLOR] = g_param_spec_boxed ("star-color", "Star color", "Color of the stars", GDK_TYPE_RGBA, G_PARAM_READWRITE); |
554 | + obj_properties[PROP_THREAD_COUNT] = g_param_spec_uint ("thread-count", "Number of threads", "Number of threads", 1, 16, 1, G_PARAM_READWRITE); |
555 | |
556 | g_object_class_install_properties(gobject_class, N_PROPERTIES, obj_properties); |
557 | } |
558 | |
559 | === modified file 'ui/config/CMakeLists.txt' |
560 | --- ui/config/CMakeLists.txt 2015-03-28 09:50:38 +0000 |
561 | +++ ui/config/CMakeLists.txt 2016-11-24 09:49:00 +0000 |
562 | @@ -22,7 +22,7 @@ |
563 | ) |
564 | |
565 | # append additional c sources |
566 | -list(APPEND LWC_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/resources.c" "${CMAKE_CURRENT_SOURCE_DIR}/search-workaround.c") |
567 | +list(APPEND LWC_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/resources.c") |
568 | |
569 | add_executable(livewallpaper-config ${LWC_SOURCES}) |
570 | target_link_libraries(livewallpaper-config m) |
571 | |
572 | === modified file 'ui/config/key.vala' |
573 | --- ui/config/key.vala 2016-02-21 09:46:31 +0000 |
574 | +++ ui/config/key.vala 2016-11-24 09:49:00 +0000 |
575 | @@ -37,10 +37,9 @@ |
576 | }); |
577 | pack_end (ctl, false, false); |
578 | |
579 | -#if GTK_3_14_OR_HIGHER |
580 | if (responsive) |
581 | w.margin_start=100; |
582 | -#endif |
583 | + |
584 | pack_end (w, responsive, responsive, 3); |
585 | } |
586 | } |
587 | |
588 | === modified file 'ui/config/keyfactory.vala' |
589 | --- ui/config/keyfactory.vala 2016-02-21 09:46:31 +0000 |
590 | +++ ui/config/keyfactory.vala 2016-11-24 09:49:00 +0000 |
591 | @@ -176,10 +176,19 @@ |
592 | } |
593 | |
594 | private void prepare_numeric (bool floating, out double min, out double max, out int digits, out double inc) { |
595 | - min = double.parse (prop["min"]); |
596 | - max = double.parse (prop["max"]); |
597 | + parse_min_max_string(prop["min"], out min); |
598 | + parse_min_max_string(prop["max"], out max); |
599 | digits = int.parse (prop["lw:digits"] ?? (floating ? "6" : "0")); |
600 | inc = double.max (Math.pow (10.0, - (double)digits), double.parse (prop["lw:increment"] ?? (floating ? ".000001" : "1.0"))); |
601 | } |
602 | + |
603 | + private static void parse_min_max_string (string arg, out double ret) { |
604 | + if (! double.try_parse(arg, out ret)) { |
605 | + if (arg == "num_processors") |
606 | + ret = get_num_processors(); |
607 | + else |
608 | + stderr.printf("Unrecognized query : %s\n", arg); |
609 | + } |
610 | + } |
611 | } |
612 | } |
613 | |
614 | === modified file 'ui/config/plugin-parser.vala' |
615 | --- ui/config/plugin-parser.vala 2016-02-21 09:46:31 +0000 |
616 | +++ ui/config/plugin-parser.vala 2016-11-24 09:49:00 +0000 |
617 | @@ -120,6 +120,12 @@ |
618 | parent.no_show_all = true; |
619 | } |
620 | break; |
621 | + case "range": |
622 | + if ("min" in ht && (! ("lw:range" in key.prop) || ! ("min" in key.prop))) |
623 | + key.prop["min"] = ht["min"]; |
624 | + if ("max" in ht && (! ("lw:range" in key.prop) || ! ("max" in key.prop))) |
625 | + key.prop["max"] = ht["max"]; |
626 | + break; |
627 | default: |
628 | if (key != null) { |
629 | key.prop[tag] = ""; |
630 | |
631 | === renamed file 'ui/config/search-workaround.c' => 'ui/config/search-workaround.c.THIS' |
632 | === modified file 'ui/config/search.vala' |
633 | --- ui/config/search.vala 2016-02-21 09:46:31 +0000 |
634 | +++ ui/config/search.vala 2016-11-24 09:49:00 +0000 |
635 | @@ -53,7 +53,7 @@ |
636 | if (! visible) { |
637 | unowned string title; |
638 | w.child_get(item, "title", out title, null); |
639 | - visible = needle in title.down (); |
640 | + visible = needle in title.down(); |
641 | } |
642 | if (!dry_run) |
643 | item.visible = visible; |
644 | @@ -64,21 +64,15 @@ |
645 | ret = stack_visible; |
646 | } |
647 | |
648 | - private extern bool needle_in_ssk(string schema_id, string key, string needle); |
649 | - |
650 | public virtual signal void lwckey (out bool ret, Key w) { |
651 | if (! (ret = needle in w.tooltip_text.down())) { |
652 | unowned string key = w.get_children().nth_data(2).get_data ("key"); |
653 | ret = needle in key || |
654 | needle in p.settings.get_value(key).print(false).down(); |
655 | - #if GTK_3_14_OR_HIGHER |
656 | - var ssk = SettingsSchemaSource.get_default().lookup(p.schema_id, true).get_key (key); |
657 | - ret |= needle in ssk.get_summary() || |
658 | - needle in ssk.get_description() || |
659 | - needle in ssk.get_range().print(false).down(); |
660 | - #else |
661 | - ret |= needle_in_ssk(p.schema_id, key, needle); |
662 | - #endif |
663 | + var ssk = SettingsSchemaSource.get_default().lookup(p.schema_id, true).get_key (key); |
664 | + ret |= needle in ssk.get_summary() || |
665 | + needle in ssk.get_description() || |
666 | + needle in ssk.get_range().print(false).down(); |
667 | } |
668 | } |
669 |