view mde/events.d @ 132:264028f4115a

Cleaned up mde.imde and a couple of widget functions. New mde.menus module to add default menus. The input singleton is now created in mde.input.Input instead of mde.imde.
author Diggory Hardy <diggory.hardy@gmail.com>
date Fri, 23 Jan 2009 14:59:05 +0000
parents 9824bee909fd
children a86f8445ccc8
line wrap: on
line source

/* LICENSE BLOCK
Part of mde: a Modular D game-oriented Engine
Copyright © 2007-2008 Diggory Hardy

This program is free software: you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation, either
version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>. */

/** Handling for all events from SDL_PollEvent.
 *
 * Handles some events, including a quit-request and window resizing, and passes the rest on to the
 * input system. */
module mde.events;

import imde = mde.imde;
import mde.setup.Screen;
import mde.input.Input;

import derelict.sdl.events;
import tango.time.Time;
import tango.util.log.Log : Log, Logger;

private Logger logger;
private Input input;
static this() {
    logger = Log.getLogger ("mde.events");
    input = Input.singleton;
}

void pollEvents (TimeSpan) {
    SDL_Event event;
    while (SDL_PollEvent (&event)) {
        switch (event.type) {
            case SDL_QUIT:
                debug logger.trace ("Quit (from SDL_QUIT event)");
                imde.run = false;
                break;
            case SDL_VIDEORESIZE:
                Screen.resizeEvent (event.resize.w, event.resize.h);
                imde.mainSchedule.request(imde.SCHEDULE.DRAW);
                break;
            case SDL_ACTIVEEVENT:
            case SDL_VIDEOEXPOSE:
                imde.mainSchedule.request(imde.SCHEDULE.DRAW);
                break;
            default:
                try {
                    if (!input.send (event))
                        logger.info ("Unrecognised event with code {}", event.type);
                } catch (Exception e) {
                    logger.error ("Caught input exception; event will be ignored. Exception was:");
                    logger.error (e.msg);
                }
        }
    }
}