1 /*vim: set sw=4 ts=4 et: */
3 * This file is part of Live Wallpaper (livewp)
5 * Copyright (C) 2010 Vlad Vasiliev
6 * Copyright (C) 2010 Tanya Makova
9 * This software is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2 of
12 * the License, or (at your option) any later version.
14 * This software is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this software; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
24 /*******************************************************************************/
25 #include "livewp-actor.h"
28 realize (GtkWidget *widget)
31 screen = gtk_widget_get_screen (widget);
32 gtk_widget_set_colormap (widget, gdk_screen_get_rgba_colormap (screen));
36 expose_event (GtkWidget *widget,GdkEventExpose *event,
40 GdkPixbuf *pixbuf = (GdkPixbuf *) data;
42 cr = gdk_cairo_create(widget->window);
44 gdk_cairo_region(cr, event->region);
45 cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
46 gdk_cairo_set_source_pixbuf(cr, pixbuf, 0.0, 0.0);
54 destroy_hildon_actor(Actor *actor)
56 //fprintf(stderr, "destroy_hildon_actor %s\n",actor->name);
57 gtk_widget_destroy(actor->widget);
62 create_hildon_actor_text(Actor *actor, AWallpaperPlugin *desktop_plugin)
65 GtkWidget *label = NULL;
67 ha = hildon_animation_actor_new();
68 label = gtk_label_new(NULL);
71 //g_signal_connect(G_OBJECT(label), "expose_event", G_CALLBACK(expose_event), NULL);
73 gtk_container_add (GTK_CONTAINER (ha), label);
76 gtk_widget_show(label);
77 gtk_widget_show_all(ha);
82 //g_object_set_data(G_OBJECT(ha), "image", image);
84 hildon_animation_actor_set_parent (HILDON_ANIMATION_ACTOR (ha), GTK_WINDOW(desktop_plugin->priv->window));
86 set_actor_position(actor, actor->x, actor->y, actor->z, desktop_plugin);
87 set_actor_scale(actor, (double)actor->scale/100, (double)actor->scale/100);
88 set_actor_visible(actor, actor->visible);
92 create_hildon_actor(Actor *actor, AWallpaperPlugin *desktop_plugin)
95 GdkPixbuf *pixbuf = NULL;
96 GtkWidget *image = NULL;
99 ha = hildon_animation_actor_new();
100 if (!strcmp(actor->name, "original"))
101 str = g_strdup(actor->filename);
103 str = g_strdup_printf( "%s/%s/%s", THEME_PATH,
104 desktop_plugin->priv->theme, actor->filename);
105 /* fprintf(stderr, "create hildon actor file=%s\n", str); */
106 pixbuf = gdk_pixbuf_new_from_file_at_size (str,
113 image = gtk_image_new_from_pixbuf (pixbuf);
114 g_object_unref(G_OBJECT(pixbuf));
117 g_signal_connect(G_OBJECT(image), "expose_event",
118 G_CALLBACK(expose_event), pixbuf);
119 gtk_container_add (GTK_CONTAINER (ha), image);
122 gtk_widget_show_all(ha);
127 //g_object_set_data(G_OBJECT(ha), "image", image);
128 actor->image = image;
129 hildon_animation_actor_set_parent (HILDON_ANIMATION_ACTOR (ha), GTK_WINDOW(desktop_plugin->priv->window));
132 set_actor_position(actor, actor->x, actor->y, actor->z, desktop_plugin);
133 set_actor_scale(actor, (double)actor->scale/100, (double)actor->scale/100);
134 set_actor_visible(actor, actor->visible);
138 change_hildon_actor(Actor *actor, AWallpaperPlugin *desktop_plugin)
140 GtkWidget *image = NULL;
141 GdkPixbuf *pixbuf = NULL;
144 str = g_strdup_printf( "%s/%s/%s", THEME_PATH,
145 desktop_plugin->priv->theme, actor->filename);
147 pixbuf = gdk_pixbuf_new_from_file_at_size (str,
154 image = gtk_image_new_from_pixbuf (pixbuf);
155 g_object_unref(G_OBJECT(pixbuf));
158 g_signal_connect(G_OBJECT(image), "expose_event",
159 G_CALLBACK(expose_event), pixbuf);
160 //if (g_object_get_data(G_OBJECT(actor->widget), "image")){
162 gtk_container_remove(GTK_CONTAINER(actor->widget), actor->image);
164 //g_object_set_data(G_OBJECT(actor->widget), "image", image);
165 actor->image = image;
166 gtk_container_add (GTK_CONTAINER (actor->widget), image);
167 realize(actor->widget);
168 gtk_widget_show_all(actor->widget);
177 init_object(AWallpaperPlugin *desktop_plugin,
189 void (*pfunc_change)(Actor*),
190 void (*pfunc_probability)(Actor*),
195 actor = g_new0(Actor, 1);
199 actor->width = width;
200 actor->height = height;
201 actor->visible = visible;
202 actor->scale = scale;
203 actor->opacity = opacity;
204 actor->filename = g_strdup(filename);
205 actor->name = g_strdup(name);
206 actor->func_change = (gpointer)pfunc_change;
207 actor->func_probability = (gpointer)pfunc_probability;
208 actor->child = child;
210 create_hildon_actor(actor, desktop_plugin);
213 actor->widget = NULL;
214 actor->time_start_animation = 0;
215 actor->duration_animation = 0;
220 destroy_actor(Actor *actor)
224 g_ptr_array_free(actor->child, TRUE);
227 g_free(actor->filename);
230 gtk_widget_destroy(actor->widget);
231 //actor->widget = NULL;
236 path_line(gint x0, gint x1, double t)
239 return ((x1 - x0) * t + x0);
242 set_actor_scale(Actor *actor, double scalex, double scaley)
244 hildon_animation_actor_set_scale(
245 HILDON_ANIMATION_ACTOR(actor->widget),
252 set_actor_opacity(Actor *actor, gint opacity)
254 hildon_animation_actor_set_opacity(
255 HILDON_ANIMATION_ACTOR(actor->widget),
262 set_actor_rotation(Actor *actor, gint axis, double degrees, gint x, gint y, gint z)
264 hildon_animation_actor_set_rotation(
265 HILDON_ANIMATION_ACTOR(actor->widget),
274 set_actor_visible(Actor *actor, gboolean visible)
276 hildon_animation_actor_set_show(HILDON_ANIMATION_ACTOR(actor->widget), visible);
280 set_actor_position(Actor *actor, gint x, gint y, gint z, AWallpaperPlugin *desktop_plugin)
282 //fprintf(stderr, "set actor position %d, %d, %d\n", x, y, z);
283 hildon_animation_actor_set_position_full(HILDON_ANIMATION_ACTOR (actor->widget),
284 x-desktop_plugin->priv->xapplet,
285 y-desktop_plugin->priv->yapplet,
289 int get_notify_count(gchar *notify_type)
292 sqlite3_stmt *res = NULL;
293 gint rc = 0, result = 0;
296 rc = sqlite3_open("/home/user/.config/hildon-desktop/notifications.db", &db);
298 fprintf(stderr, "error open db %d %s\n", rc, sqlite3_errmsg(db));
300 snprintf(sql, sizeof(sql)-1, "select count(id) from notifications where icon_name='%s'", notify_type);
301 rc = sqlite3_prepare(db, sql, sizeof(sql)-1, &res, NULL);
302 if (rc != SQLITE_OK){
303 fprintf(stderr, "error prepare %d %s\n", rc, sql);
305 if (sqlite3_step(res) != SQLITE_ROW){
306 fprintf(stderr, "not sqlite_row\n");
308 result = sqlite3_column_int(res, 0);
309 //fprintf(stderr, "count missing calls = %d\n", call_count);
310 sqlite3_finalize(res);
316 gchar * read_notification()
321 fprintf(stderr, "read notification \n");
322 count = get_notify_count("general_missed");
324 message = g_strdup_printf("%s: %d", _("Missed calls"), count);
326 count = get_notify_count("general_sms");
329 message = g_strdup_printf("%s \n%s: %d", message, _("Missed sms"), count);
331 message = g_strdup_printf("%s: %d", _("Missed sms"), count);
334 count = get_notify_count("general_chat");
337 message = g_strdup_printf("%s \n%s: %d", message, _("Missed chat"), count);
339 message = g_strdup_printf("%s: %d", _("Missed chat"), count);
342 count = get_notify_count("qgn_list_messagin");
345 message = g_strdup_printf("%s \n%s: %d", message, _("Missed mail"), count);
347 message = g_strdup_printf("%s: %d", _("Missed mail"), count);
350 fprintf(stderr, "notify=%s\n", message);
355 change_obj(Actor *actor, AWallpaperPlugin *desktop_plugin)
357 char * accel_filename = "/sys/class/i2c-adapter/i2c-3/3-001d/coord";
358 //char * accel_filename = "/home/tanya/coord";
361 int rs, ax, ay, az, dx, dy;
362 fd = fopen(accel_filename, "r");
364 fprintf(stderr, "cannot open file\n");
367 rs = fscanf((FILE*)fd, "%i %i %i", &ax, &ay, &az);
370 fprintf(stderr, "cannot read information from file\n");
374 fprintf(stderr, "change obj %i %i %i\n", ax, ay, az);
378 actor->x = actor->x + dx;
379 actor->y = actor->y + dy;
381 if (actor->x > 800) actor->x = 0;
382 if (actor->x < 0) actor->x = 800;
384 if (actor->y > 480) actor->y = 0;
385 if (actor->y < 0) actor->y = 480;
387 set_actor_position(actor, actor->x, actor->y, actor->z, desktop_plugin);
393 change_billboard(Actor * actor, AWallpaperPlugin *desktop_plugin)
398 //fprintf(stderr, "change_billboard\n");
400 if (desktop_plugin->priv->scene->notification < time(NULL)){
401 count = get_notify_count("general_missed");
402 a = g_ptr_array_index(actor->child, 0);
404 set_actor_visible(a, TRUE);
406 set_actor_visible(a, FALSE);
408 count = get_notify_count("general_sms");
409 a = g_ptr_array_index(actor->child, 3);
411 set_actor_visible(a, TRUE);
413 set_actor_visible(a, FALSE);
415 count = get_notify_count("general_chat");
416 a = g_ptr_array_index(actor->child, 1);
418 set_actor_visible(a, TRUE);
420 set_actor_visible(a, FALSE);
422 count = get_notify_count("qgn_list_messagin");
423 a = g_ptr_array_index(actor->child, 2);
425 set_actor_visible(a, TRUE);
427 set_actor_visible(a, FALSE);
430 desktop_plugin->priv->scene->notification = FALSE;
432 actor->time_start_animation = time(NULL) + 20;
437 change_billboard1(Actor * actor, AWallpaperPlugin *desktop_plugin)
441 sqlite3_stmt *res = NULL;
442 gchar *errMsg = NULL, *message;
444 gint call_count=0, sms_count=0, rc=0;
445 GtkListStore *list = NULL;
446 PangoFontDescription *pfd = NULL;
448 rc = sqlite3_open("/home/user/.rtcom-eventlogger/el.db", &db);
450 fprintf(stderr, "error open db %d %s\n", rc, sqlite3_errmsg(db));
452 snprintf(sql, sizeof(sql)-1, "select count(id) from Events where event_type_id=%d", 3);
454 rc = sqlite3_prepare(db, sql, sizeof(sql)-1, &res, NULL);
455 if (rc != SQLITE_OK){
456 fprintf(stderr, "error prepare %d %s\n", rc, sql);
458 if (sqlite3_step(res) != SQLITE_ROW){
459 fprintf(stderr, "not sqlite_row\n");
461 call_count = sqlite3_column_int(res, 0);
462 //fprintf(stderr, "count missing calls = %d\n", call_count);
463 sqlite3_finalize(res);
465 snprintf(sql, sizeof(sql)-1, "select count(id) from Events where event_type_id=%d and is_read=%d", 7, 0);
466 rc = sqlite3_prepare(db, sql, sizeof(sql)-1, &res, NULL);
467 if (rc != SQLITE_OK){
468 fprintf(stderr, "error prepare %d %s\n", rc, sql);
470 if (sqlite3_step(res) != SQLITE_ROW){
471 fprintf(stderr, "not sqlite_row\n");
473 sms_count = sqlite3_column_int(res, 0);
474 //fprintf(stderr, "count sms = %d\n", sms_count);
475 sqlite3_finalize(res);
480 label = actor->image;
481 message = g_markup_printf_escaped("<span bgcolor=\"%s\" foreground=\"%s\">Missed calls: %d Unread sms: %d</span>", "#FFFFFF", "#000000", call_count, sms_count);
482 gtk_label_set_markup(GTK_LABEL(label), message);
484 pfd = pango_font_description_from_string("Sans 14");
485 gtk_widget_modify_font(GTK_WIDGET(label), NULL);
486 gtk_widget_modify_font(GTK_WIDGET(label), pfd);
487 pango_font_description_free(pfd);
488 actor->time_start_animation = time(NULL) + 20;
493 change_moon(Actor * actor, AWallpaperPlugin *desktop_plugin)
507 a = (double)(y2 - (double)(x2*(y1-y0) + x1*y0 - x0*y1)/(x1-x0))/(x2*(x2-x0-x1)+x0*x1);
508 b = (double)(y1-y0)/(x1-x0) - (double)a*(x0+x1);
509 c = (double)(x1*y0 - x0*y1)/(x1-x0) + (double)a*x0*x1;
510 fprintf(stderr, "a=%f, b=%f, c=%f\n", a, b, c);
512 gettimeofday(&tvb, NULL);
518 if (desktop_plugin->priv->scene->daytime == TIME_NIGHT){
519 if (!actor->visible){
520 actor->visible = TRUE;
521 phase = get_moon_phase();
522 newfile = g_strdup_printf( "%s%d.png", actor->name, phase);
524 g_free(actor->filename);
525 actor->filename = newfile;
526 actor->time_start_animation = sec - fast_rnd(60 * 60);
527 actor->duration_animation = 1 * 60 * 60;
528 create_hildon_actor(actor, desktop_plugin);
531 t = (double)((double)sec+(double)ms/1000000 - actor->time_start_animation) / actor->duration_animation;
533 x = path_line(x0, x1, t);
535 x = path_line(x1, x0, t-1);
536 y = 0.001920*x*x - 1.536*x + 337.2;
537 //y = a*x*x + b*x + c;
539 set_actor_position(actor, x, y, actor->z, desktop_plugin);
542 actor->time_start_animation = sec;
545 }else if (actor->visible){
546 actor->visible = FALSE;
547 fprintf(stderr, "destroy moon \n");
548 destroy_hildon_actor(actor);
549 actor->time_start_animation = 0;
556 change_sun(Actor * actor, AWallpaperPlugin *desktop_plugin)
561 //fprintf(stderr, "change sun\n");
563 if (desktop_plugin->priv->scene->daytime != TIME_NIGHT){
564 if (!actor->visible){
565 actor->visible = TRUE;
566 create_hildon_actor(actor, desktop_plugin);
568 get_sun_pos(&alt, &azm);
569 get_sun_screen_pos(alt, azm, &x, &y);
572 set_actor_position(actor, x, y, actor->z, desktop_plugin);
573 actor->time_start_animation = time(NULL) + 60;
574 }else if (actor->visible){
575 actor->visible = FALSE;
576 destroy_hildon_actor(actor);
577 actor->time_start_animation = 0;
584 change_tram(Actor * actor, AWallpaperPlugin *desktop_plugin)
586 gint x0 = -300, y0 = 225, scale0 = 100,
587 x1 = 800, y1 = 162, scale1 = 130,
594 //fprintf(stderr, "change tram\n");
595 gettimeofday(&tvb, NULL);
600 if (!actor->visible){
601 actor->visible = TRUE;
602 if (desktop_plugin->priv->scene->daytime == TIME_NIGHT){
604 g_free(actor->filename);
605 actor->filename = g_strdup("tram_dark.png");
608 g_free(actor->filename);
609 actor->filename = g_strdup("tram.png");
611 create_hildon_actor(actor, desktop_plugin);
613 t = (double)((double)sec+(double)ms/1000000 - actor->time_start_animation) / actor->duration_animation;
614 x = path_line(x0, x1, t);
615 y = path_line(y0, y1, t);
616 scale = path_line(scale0, scale1, t);
617 set_actor_position(actor, x, y, actor->z, desktop_plugin);
618 set_actor_scale(actor, (double)scale/100, (double)scale/100);
621 actor->visible = FALSE;
622 destroy_hildon_actor(actor);
623 actor->time_start_animation = sec + fast_rnd(60);
628 change_plane1(Actor *actor, AWallpaperPlugin *desktop_plugin)
630 gint x0 = 620, y0 = 233,
638 gettimeofday(&tvb, NULL);
642 // fprintf(stderr, "1 %f - %d\n", sec+(double)ms/100000, now);
644 if (desktop_plugin->priv->scene->daytime != TIME_NIGHT){
645 if (actor->time_start_animation == 0){
646 actor->time_start_animation = sec + fast_rnd(180);
650 if (!actor->visible){
651 actor->visible = TRUE;
652 create_hildon_actor(actor, desktop_plugin);
654 t = (double)((double)sec+(double)ms/1000000 - actor->time_start_animation) / actor->duration_animation;
655 x = path_line(x0, x1, t);
656 y = path_line(y0, y1, t);
657 //scale = path_line(scale0, scale1, t);
658 set_actor_position(actor, x, y, actor->z, desktop_plugin);
661 actor->visible = FALSE;
662 destroy_hildon_actor(actor);
663 if (desktop_plugin->priv->scene->daytime == TIME_NIGHT)
664 actor->time_start_animation = 0;
666 actor->time_start_animation = sec + fast_rnd(180);
672 change_plane2(Actor *actor, AWallpaperPlugin *desktop_plugin)
674 gint x0 = -actor->width, y0 = 45,
682 gettimeofday(&tvb, NULL);
686 // fprintf(stderr, "1 %f - %d\n", sec+(double)ms/100000, now);
687 if (desktop_plugin->priv->scene->daytime != TIME_NIGHT){
688 if (actor->time_start_animation == 0){
689 actor->time_start_animation = sec + fast_rnd(180);
693 if (!actor->visible){
694 actor->visible = TRUE;
695 create_hildon_actor(actor, desktop_plugin);
698 t = (double)((double)sec+(double)ms/1000000 - actor->time_start_animation) / actor->duration_animation;
699 x = path_line(x0, x1, t);
700 y = path_line(y0, y1, t);
701 //scale = path_line(scale0, scale1, t);
702 set_actor_position(actor, x, y, actor->z, desktop_plugin);
705 actor->visible = FALSE;
706 destroy_hildon_actor(actor);
707 if (desktop_plugin->priv->scene->daytime == TIME_NIGHT)
708 actor->time_start_animation = 0;
710 actor->time_start_animation = sec + fast_rnd(180);
716 change_cloud(Actor *actor, AWallpaperPlugin *desktop_plugin)
718 gint x0, y0 = 300, scale0 = 100,
719 x1, y1 = -actor->height, scale1 = 150,
727 //fprintf(stderr, "change cloud\n");
728 gettimeofday(&tvb, NULL);
733 if (!actor->visible){
734 actor->visible = TRUE;
735 if (desktop_plugin->priv->scene->daytime == TIME_NIGHT){
736 newfile = g_strdup_printf("%s_dark.png", actor->name);
738 newfile = g_strdup_printf("%s.png", actor->name);
741 g_free(actor->filename);
742 actor->filename = newfile;
744 create_hildon_actor(actor, desktop_plugin);
746 t = (double)((double)sec+(double)ms/1000000 - actor->time_start_animation) / actor->duration_animation;
748 if (desktop_plugin->priv->scene->wind_orientation == 1){
757 x = path_line(x0, x1, t);
758 y = -desktop_plugin->priv->scene->wind_angle * (x - x0) + actor->y;
759 scale = path_line(scale0, scale1, (double)(y - y0)/(y1 - y0));
761 set_actor_position(actor, x, y, actor->z, desktop_plugin);
762 set_actor_scale(actor, (double)scale/100, (double)scale/100);
763 if ((y < y1 || y > y0) || t >= 1){
765 actor->visible = FALSE;
766 destroy_hildon_actor(actor);
767 actor->time_start_animation = sec + fast_rnd(300);
768 actor->y = fast_rnd(300);
774 change_wind(Actor *actor, AWallpaperPlugin *desktop_plugin)
776 desktop_plugin->priv->scene->wind_orientation = fast_rnd(2);
777 if (desktop_plugin->priv->scene->wind_orientation == 0) desktop_plugin->priv->scene->wind_orientation = -1;
778 desktop_plugin->priv->scene->wind_angle = (double)(fast_rnd(200) - 100) / 100;
779 actor->time_start_animation = time(NULL) + (fast_rnd(10) + 10) * 60;
780 //fprintf(stderr, "change wind orient = %d angle = %f after = %d\n", scene.wind_orientation, scene.wind_angle, actor->time_start_animation-time(NULL));
784 change_window1(Actor * actor, AWallpaperPlugin *desktop_plugin)
786 gint now = time(NULL);
787 if (desktop_plugin->priv->scene->daytime == TIME_DAY){
789 actor->visible = FALSE;
790 destroy_hildon_actor(actor);
792 actor->time_start_animation = 0;
796 create_hildon_actor(actor, desktop_plugin);
797 if (actor->time_start_animation == 0){
798 actor->time_start_animation = now + fast_rnd(30);
804 actor->visible = TRUE;
806 actor->visible = FALSE;
807 set_actor_visible(actor, actor->visible);
808 actor->time_start_animation = now + fast_rnd(60) + 10;
813 change_signal(Actor * actor, AWallpaperPlugin *desktop_plugin)
815 gint now = time(NULL);
817 a = g_ptr_array_index(actor->child, 0);
822 set_actor_visible(a, a->visible);
824 a = g_ptr_array_index(actor->child, 1);
829 set_actor_visible(a, a->visible);
831 actor->time_start_animation = now + fast_rnd(30) + 10;
835 change_tape(Actor *actor, AWallpaperPlugin *desktop_plugin)
840 if (!desktop_plugin->priv->rich_animation) return;
842 char * accel_filename = "/sys/class/i2c-adapter/i2c-3/3-001d/coord";
843 //char * accel_filename = "/home/tanya/coord";
847 fd = fopen(accel_filename, "r");
849 //fprintf(stderr, "cannot open file\n");
850 fd = fopen("/home/user/coord", "r");
852 rs = fscanf((FILE*)fd, "%i %i %i", &ax, &ay, &az);
855 fprintf(stderr, "cannot read information from file\n");
860 //fprintf(stderr, "change obj %i %i %i angle rad=%f, deg=%f\n", ax, ay, az, atan2(ax, -ay), atan2(ax, -ay)*180/M_PI);
861 int ang = (int)floor(atan2(ay, ax)*180/M_PI);
862 if (ang < 0) ang = 360+ang;
864 if (!desktop_plugin->priv->rich_animation) return;
866 for (i=0; i<16; i++){
867 a = g_ptr_array_index(actor->child, i);
868 if (a->scale == 100) a->scale = ang;
869 if (abs(a->scale - ang) > 10){
871 if ((a->scale - ang) < (ang + (360-a->scale))) a->scale--;
874 if (a->scale < ang) {
875 if (ang - a->scale < (a->scale+(360-ang))) a->scale++;
878 if (a->scale > 360) a->scale = 0;
879 if (a->scale < 0) a->scale = 360;
882 x = a->x - (float)cos(a->scale*M_PI/180)*a->z;
883 y = a->y - (float)sin(a->scale*M_PI/180)*a->z;
884 //x = round(a->x - (float)cos(a->scale*M_PI/180)*a->z);
885 //y = round(a->y - (float)sin(a->scale*M_PI/180)*a->z);
886 //x = a->x - cos(angle)*a->z;
887 //y = a->y - sin(angle)*a->z;
888 if ((a->scale > 270 || a->scale < 90) && x < -a->width*cos(a->scale*M_PI/180)){
892 if ((a->scale > 90 && a->scale < 270) && x > 800 - a->width*cos(a->scale*M_PI/180)){
896 if (a->scale > 0 && a->scale < 180 && y < -a->width*sin(a->scale*M_PI/180)){
900 if (a->scale < 360 && a->scale > 180 && y > 480 - a->width*sin(a->scale*M_PI/180)){
904 //if (i ==0) fprintf(stderr, "x=%d y=%d ang=%d speed=%d\n", x, y, a->scale, a->z);
905 set_actor_rotation(a, HILDON_AA_Z_AXIS, a->scale, 0, 0, 0);
906 set_actor_position(a, x, y, a->z, desktop_plugin);
914 change_slideshow(Actor *actor, AWallpaperPlugin *desktop_plugin)
916 gint num, next, prev, now;
917 Actor *a1 = NULL, *a2 = NULL;
925 num = actor->scale; // total number of images
926 prev = actor->opacity; // number of current image
927 next = actor->z; // number of new image
929 // new image not selected, first step of animation
932 while (num > 1 && next == prev)
934 a2 = g_ptr_array_index(actor->child, next);
936 create_hildon_actor(a2, desktop_plugin);
937 set_actor_opacity(a2, 0);
940 a2 = g_ptr_array_index(actor->child, next);
943 gettimeofday(&tvb, NULL);
948 t = (double)((double)sec+(double)ms/1000000 - actor->time_start_animation) / actor->duration_animation;
950 set_actor_opacity(a2, path_line(0, 255, t));
953 a1 = g_ptr_array_index(actor->child, prev);
954 set_actor_opacity(a1, path_line(255, 0, t));
957 // last step of animation
958 actor->opacity = next;
962 destroy_hildon_actor(a1);
964 actor->time_start_animation = now + desktop_plugin->priv->theme_int_parametr1;
969 change_layer(Actor * actor, AWallpaperPlugin *desktop_plugin)
971 gint y, speed1 = 8, speed2 = 16;
974 if (!desktop_plugin->priv->rich_animation) return;
976 a = g_ptr_array_index(actor->child, 0);
978 if (y > 480) y = -480;
979 set_actor_position(a, a->x, y, a->z, desktop_plugin);
982 a = g_ptr_array_index(actor->child, 1);
984 if (y > 480) y = -480;
985 set_actor_position(a, a->x, y, a->z, desktop_plugin);
988 a = g_ptr_array_index(actor->child, 2);
990 if (y > 480) y = -480;
991 set_actor_position(a, a->x, y, a->z, desktop_plugin);
994 a = g_ptr_array_index(actor->child, 3);
996 if (y > 480) y = -480;
997 set_actor_position(a, a->x, y, a->z, desktop_plugin);
1002 change_static_actor(Actor * actor, AWallpaperPlugin *desktop_plugin)
1005 newfile = g_strdup_printf("%s%d.png", actor->name, desktop_plugin->priv->scene->daytime);
1006 if (actor->filename)
1007 g_free(actor->filename);
1008 actor->filename = newfile;
1009 change_hildon_actor(actor, desktop_plugin);
1013 change_static_actor_with_corner(Actor * actor, AWallpaperPlugin *desktop_plugin)
1017 if (desktop_plugin->priv->right_corner)
1018 gtk_widget_destroy(desktop_plugin->priv->right_corner);
1019 snprintf(buffer, sizeof(buffer) - 1, "%s/%s/town%i_right_corner.png", \
1020 THEME_PATH, desktop_plugin->priv->theme, desktop_plugin->priv->scene->daytime);
1021 desktop_plugin->priv->right_corner = gtk_image_new_from_file (buffer);
1022 if (desktop_plugin->priv->right_corner){
1023 gtk_fixed_put(GTK_FIXED(desktop_plugin->priv->main_widget), desktop_plugin->priv->right_corner, 0, 0);
1024 gtk_widget_show (desktop_plugin->priv->right_corner);
1026 change_static_actor(actor, desktop_plugin);