blob: 52badf91017a2189e471dcf98eb67428d161db00 [file] [log] [blame]
#include <libvisual/libvisual.h>
#include <stdlib.h>
#include "display.h"
#include "sdldriver.h"
int main (int argc, char **argv)
{
SADisplay *display;
VisVideo *video;
VisBin *bin;
VisEventQueue *localqueue;
VisVideoAttributeOptions *vidoptions;
//char *actorn = "gforce";
/* Setting projectm to default visualization
* Make sure you have it correctly installed ... */
char *actorn = "projectm";
char *inputn = "alsa";
int running = TRUE;
int fullscreen = FALSE;
int visible = TRUE;
int depth;
visual_init (&argc, &argv);
display = display_new (sdl_driver_new ());
/* Libvisual stuff */
if (argc > 1)
actorn = argv[1];
if (argc > 2)
inputn = argv[2];
bin = visual_bin_new ();
visual_bin_set_supported_depth (bin, VISUAL_VIDEO_DEPTH_ALL);
visual_bin_connect_by_names (bin, actorn, inputn);
vidoptions = visual_actor_get_video_attribute_options (visual_bin_get_actor (bin));
depth = visual_video_depth_get_highest (visual_actor_get_supported_depth (visual_bin_get_actor (bin)));
display_create (display, depth, vidoptions, 1024, 768, TRUE);
video = display_get_video (display);
visual_bin_set_video (bin, video);
visual_bin_depth_changed (bin);
visual_bin_switch_set_style (bin, VISUAL_SWITCH_STYLE_MORPH);
visual_bin_switch_set_automatic (bin, TRUE);
visual_bin_switch_set_mode (bin, VISUAL_MORPH_MODE_TIME);
visual_bin_switch_set_time (bin, 4, 0);
visual_bin_realize (bin);
visual_bin_sync (bin, FALSE);
localqueue = visual_event_queue_new ();
/* RUNNING IN FULLSCREEN BY DEFAULT */
display_set_fullscreen (display, fullscreen, FALSE);
while (running) {
VisEventQueue *pluginqueue;
VisEvent *ev;
/* Handle all events */
display_drain_events (display, localqueue);
pluginqueue = visual_plugin_get_eventqueue (visual_actor_get_plugin (visual_bin_get_actor (bin)));
while (visual_event_queue_poll_by_reference (localqueue, &ev)) {
if (ev->type != VISUAL_EVENT_RESIZE)
visual_event_queue_add (pluginqueue, ev);
switch (ev->type) {
case VISUAL_EVENT_RESIZE:
video = display_get_video (display);
visual_bin_set_video (bin, video);
visual_bin_sync (bin, FALSE);
break;
case VISUAL_EVENT_MOUSEMOTION:
break;
case VISUAL_EVENT_MOUSEBUTTONDOWN:
case VISUAL_EVENT_MOUSEBUTTONUP:
break;
case VISUAL_EVENT_KEYDOWN:
switch (ev->event.keyboard.keysym.sym) {
case VKEY_ESCAPE:
running = FALSE;
break;
case VKEY_TAB:
fullscreen = !fullscreen;
display_set_fullscreen (display, fullscreen, TRUE);
/* Resync video */
video = display_get_video (display);
visual_bin_set_video (bin, video);
visual_bin_sync (bin, FALSE);
break;
case VKEY_PAGEUP:
visual_bin_set_morph_by_name (bin, "tentacle");
visual_bin_switch_actor_by_name (bin, "oinksie");
break;
case VKEY_PAGEDOWN:
break;
default:
break;
}
break;
case VISUAL_EVENT_KEYUP:
break;
case VISUAL_EVENT_QUIT:
running = FALSE;
break;
case VISUAL_EVENT_VISIBILITY:
visible = ev->event.visibility.is_visible;
break;
default:
break;
} if (visual_bin_depth_changed (bin) == TRUE) {
vidoptions = visual_actor_get_video_attribute_options (visual_bin_get_actor (bin));
depth = visual_bin_get_depth (bin);
display_create (display, depth, vidoptions, video->width, video->height, TRUE);
video = display_get_video (display);
visual_bin_set_video (bin, video);
visual_bin_sync (bin, TRUE);
}
/* Do a run cycle */
display_lock (display);
display_unlock (display);
visual_bin_run (bin);
display_update_all (display);
display_fps_limit (display, 30);
}
/* Termination procedure */
display_set_fullscreen (display, FALSE, TRUE);
printf ("Total frames: %d, average fps: %f\n", display_fps_total (display), display_fps_average (display));
return 0;
}
}