screen-relative events
[andemo] / src / demo.c
index e17d7ec..f51dcc1 100644 (file)
@@ -37,6 +37,14 @@ int demo_init(void)
        if(dsys_init("data/demoscript") == -1) {
                return -1;
        }
+       if(opt.scrname) {
+               struct demoscreen *scr = dsys_find_screen(opt.scrname);
+               if(scr) {
+                       dsys_run_screen(scr);
+               } else {
+                       fprintf(stderr, "ignoring screen option, no such screen: %s\n", opt.scrname);
+               }
+       }
 
        return 0;
 }
@@ -115,6 +123,12 @@ void demo_keyboard(int key, int pressed)
 
                } else {
                        int i;
+
+                       if(dsys.scr_override && dsys.scr_override->keyboard) {
+                               dsys.scr_override->keyboard(key, pressed);
+                               break;
+                       }
+
                        for(i=0; i<dsys.num_act; i++) {
                                struct demoscreen *scr = dsys.act[i];
                                if(scr->keyboard) scr->keyboard(key, pressed);
@@ -126,6 +140,12 @@ void demo_keyboard(int key, int pressed)
 void demo_mouse(int bn, int pressed, int x, int y)
 {
        int i;
+
+       if(dsys.scr_override && dsys.scr_override->mouse) {
+               dsys.scr_override->mouse(bn, pressed, x, y);
+               return;
+       }
+
        for(i=0; i<dsys.num_act; i++) {
                struct demoscreen *scr = dsys.act[i];
                if(scr->mouse) scr->mouse(bn, pressed, x, y);
@@ -135,6 +155,11 @@ void demo_mouse(int bn, int pressed, int x, int y)
 void demo_motion(int x, int y)
 {
        int i;
+
+       if(dsys.scr_override && dsys.scr_override->motion) {
+               dsys.scr_override->motion(x, y);
+       }
+
        for(i=0; i<dsys.num_act; i++) {
                struct demoscreen *scr = dsys.act[i];
                if(scr->motion) scr->motion(x, y);