private void ProcessBufferedKeyboard()
        {
            int count = Sdl.SDL_PeepEvents(
                events, BufferSize, Sdl.SDL_GETEVENT,
                (Sdl.SDL_KEYDOWNMASK | Sdl.SDL_KEYUPMASK));

            // no events to process
            if (count == 0)
            {
                return;
            }

            // fire an event for each key event
            for (int i = 0; i < count; i++)
            {
                bool down = (events[i].type == Sdl.SDL_KEYDOWN);

                Axiom.Input.KeyCodes keyCode = ConvertKeyEnum(events[i].key.keysym.sym);

                KeyChanged(keyCode, down);
            }
        }
        /// <summary>
        ///		Used to convert a Sdl enum val to a Axiom.Input.KeyCodes enum val.
        /// </summary>
        /// <param name="key">Sdl code to query.</param>
        /// <returns>The equivalent enum value in the Axiom.KeyCodes enum.</returns>
        private Axiom.Input.KeyCodes ConvertKeyEnum(int key)
        {
            // TODO: Quotes
            Axiom.Input.KeyCodes axiomKey = 0;

            switch (key)
            {
            case Sdl.SDLK_a:
                axiomKey = Axiom.Input.KeyCodes.A;
                break;

            case Sdl.SDLK_b:
                axiomKey = Axiom.Input.KeyCodes.B;
                break;

            case Sdl.SDLK_c:
                axiomKey = Axiom.Input.KeyCodes.C;
                break;

            case Sdl.SDLK_d:
                axiomKey = Axiom.Input.KeyCodes.D;
                break;

            case Sdl.SDLK_e:
                axiomKey = Axiom.Input.KeyCodes.E;
                break;

            case Sdl.SDLK_f:
                axiomKey = Axiom.Input.KeyCodes.F;
                break;

            case Sdl.SDLK_g:
                axiomKey = Axiom.Input.KeyCodes.G;
                break;

            case Sdl.SDLK_h:
                axiomKey = Axiom.Input.KeyCodes.H;
                break;

            case Sdl.SDLK_i:
                axiomKey = Axiom.Input.KeyCodes.I;
                break;

            case Sdl.SDLK_j:
                axiomKey = Axiom.Input.KeyCodes.J;
                break;

            case Sdl.SDLK_k:
                axiomKey = Axiom.Input.KeyCodes.K;
                break;

            case Sdl.SDLK_l:
                axiomKey = Axiom.Input.KeyCodes.L;
                break;

            case Sdl.SDLK_m:
                axiomKey = Axiom.Input.KeyCodes.M;
                break;

            case Sdl.SDLK_n:
                axiomKey = Axiom.Input.KeyCodes.N;
                break;

            case Sdl.SDLK_o:
                axiomKey = Axiom.Input.KeyCodes.O;
                break;

            case Sdl.SDLK_p:
                axiomKey = Axiom.Input.KeyCodes.P;
                break;

            case Sdl.SDLK_q:
                axiomKey = Axiom.Input.KeyCodes.Q;
                break;

            case Sdl.SDLK_r:
                axiomKey = Axiom.Input.KeyCodes.R;
                break;

            case Sdl.SDLK_s:
                axiomKey = Axiom.Input.KeyCodes.S;
                break;

            case Sdl.SDLK_t:
                axiomKey = Axiom.Input.KeyCodes.T;
                break;

            case Sdl.SDLK_u:
                axiomKey = Axiom.Input.KeyCodes.U;
                break;

            case Sdl.SDLK_v:
                axiomKey = Axiom.Input.KeyCodes.V;
                break;

            case Sdl.SDLK_w:
                axiomKey = Axiom.Input.KeyCodes.W;
                break;

            case Sdl.SDLK_x:
                axiomKey = Axiom.Input.KeyCodes.X;
                break;

            case Sdl.SDLK_y:
                axiomKey = Axiom.Input.KeyCodes.Y;
                break;

            case Sdl.SDLK_z:
                axiomKey = Axiom.Input.KeyCodes.Z;
                break;

            case Sdl.SDLK_LEFT:
                axiomKey = Axiom.Input.KeyCodes.Left;
                break;

            case Sdl.SDLK_RIGHT:
                axiomKey = Axiom.Input.KeyCodes.Right;
                break;

            case Sdl.SDLK_UP:
                axiomKey = Axiom.Input.KeyCodes.Up;
                break;

            case Sdl.SDLK_DOWN:
                axiomKey = Axiom.Input.KeyCodes.Down;
                break;

            case Sdl.SDLK_ESCAPE:
                axiomKey = Axiom.Input.KeyCodes.Escape;
                break;

            case Sdl.SDLK_F1:
                axiomKey = Axiom.Input.KeyCodes.F1;
                break;

            case Sdl.SDLK_F2:
                axiomKey = Axiom.Input.KeyCodes.F2;
                break;

            case Sdl.SDLK_F3:
                axiomKey = Axiom.Input.KeyCodes.F3;
                break;

            case Sdl.SDLK_F4:
                axiomKey = Axiom.Input.KeyCodes.F4;
                break;

            case Sdl.SDLK_F5:
                axiomKey = Axiom.Input.KeyCodes.F5;
                break;

            case Sdl.SDLK_F6:
                axiomKey = Axiom.Input.KeyCodes.F6;
                break;

            case Sdl.SDLK_F7:
                axiomKey = Axiom.Input.KeyCodes.F7;
                break;

            case Sdl.SDLK_F8:
                axiomKey = Axiom.Input.KeyCodes.F8;
                break;

            case Sdl.SDLK_F9:
                axiomKey = Axiom.Input.KeyCodes.F9;
                break;

            case Sdl.SDLK_F10:
                axiomKey = Axiom.Input.KeyCodes.F10;
                break;

            case Sdl.SDLK_0:
                axiomKey = Axiom.Input.KeyCodes.D0;
                break;

            case Sdl.SDLK_1:
                axiomKey = Axiom.Input.KeyCodes.D1;
                break;

            case Sdl.SDLK_2:
                axiomKey = Axiom.Input.KeyCodes.D2;
                break;

            case Sdl.SDLK_3:
                axiomKey = Axiom.Input.KeyCodes.D3;
                break;

            case Sdl.SDLK_4:
                axiomKey = Axiom.Input.KeyCodes.D4;
                break;

            case Sdl.SDLK_5:
                axiomKey = Axiom.Input.KeyCodes.D5;
                break;

            case Sdl.SDLK_6:
                axiomKey = Axiom.Input.KeyCodes.D6;
                break;

            case Sdl.SDLK_7:
                axiomKey = Axiom.Input.KeyCodes.D7;
                break;

            case Sdl.SDLK_8:
                axiomKey = Axiom.Input.KeyCodes.D8;
                break;

            case Sdl.SDLK_9:
                axiomKey = Axiom.Input.KeyCodes.D9;
                break;

            case Sdl.SDLK_F11:
                axiomKey = Axiom.Input.KeyCodes.F11;
                break;

            case Sdl.SDLK_F12:
                axiomKey = Axiom.Input.KeyCodes.F12;
                break;

            case Sdl.SDLK_RETURN:
                axiomKey = Axiom.Input.KeyCodes.Enter;
                break;

            case Sdl.SDLK_TAB:
                axiomKey = Axiom.Input.KeyCodes.Tab;
                break;

            case Sdl.SDLK_LSHIFT:
                axiomKey = Axiom.Input.KeyCodes.LeftShift;
                break;

            case Sdl.SDLK_RSHIFT:
                axiomKey = Axiom.Input.KeyCodes.RightShift;
                break;

            case Sdl.SDLK_LCTRL:
                axiomKey = Axiom.Input.KeyCodes.LeftControl;
                break;

            case Sdl.SDLK_RCTRL:
                axiomKey = Axiom.Input.KeyCodes.RightControl;
                break;

            case Sdl.SDLK_PERIOD:
                axiomKey = Axiom.Input.KeyCodes.Period;
                break;

            case Sdl.SDLK_COMMA:
                axiomKey = Axiom.Input.KeyCodes.Comma;
                break;

            case Sdl.SDLK_HOME:
                axiomKey = Axiom.Input.KeyCodes.Home;
                break;

            case Sdl.SDLK_PAGEUP:
                axiomKey = Axiom.Input.KeyCodes.PageUp;
                break;

            case Sdl.SDLK_PAGEDOWN:
                axiomKey = Axiom.Input.KeyCodes.PageDown;
                break;

            case Sdl.SDLK_END:
                axiomKey = Axiom.Input.KeyCodes.End;
                break;

            case Sdl.SDLK_SEMICOLON:
                axiomKey = Axiom.Input.KeyCodes.Semicolon;
                break;

            case Sdl.SDLK_MINUS:
                axiomKey = Axiom.Input.KeyCodes.Subtract;
                break;

            case Sdl.SDLK_PLUS:
                axiomKey = Axiom.Input.KeyCodes.Add;
                break;

            case Sdl.SDLK_BACKSPACE:
                axiomKey = Axiom.Input.KeyCodes.Backspace;
                break;

            case Sdl.SDLK_DELETE:
                axiomKey = Axiom.Input.KeyCodes.Delete;
                break;

            case Sdl.SDLK_INSERT:
                axiomKey = Axiom.Input.KeyCodes.Insert;
                break;

            case Sdl.SDLK_LALT:
                axiomKey = Axiom.Input.KeyCodes.LeftAlt;
                break;

            case Sdl.SDLK_RALT:
                axiomKey = Axiom.Input.KeyCodes.RightAlt;
                break;

            case Sdl.SDLK_SPACE:
                axiomKey = Axiom.Input.KeyCodes.Space;
                break;

            case Sdl.SDLK_BACKQUOTE:
                axiomKey = Axiom.Input.KeyCodes.Tilde;
                break;

            case Sdl.SDLK_LEFTBRACKET:
                axiomKey = Axiom.Input.KeyCodes.OpenBracket;
                break;

            case Sdl.SDLK_RIGHTBRACKET:
                axiomKey = Axiom.Input.KeyCodes.CloseBracket;
                break;

            case Sdl.SDLK_EQUALS:
                axiomKey = KeyCodes.Plus;
                break;

            case Sdl.SDLK_SLASH:
                axiomKey = KeyCodes.QuestionMark;
                break;

            case Sdl.SDLK_QUOTE:
                axiomKey = KeyCodes.Quotes;
                break;

            case Sdl.SDLK_BACKSLASH:
                axiomKey = KeyCodes.Backslash;
                break;
            }

            return(axiomKey);
        }