view pytouhou/lib/_sdl.pxd @ 512:b39ad30c6620

Add a pure SDL backend.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Thu, 05 Dec 2013 01:55:39 +0100
parents 36bc577b2392
children a7dc55ad9380
line wrap: on
line source

# -*- encoding: utf-8 -*-
##
## Copyright (C) 2013 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
##
## 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; version 3 only.
##
## 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.
##

cdef extern from "SDL.h" nogil:
    ctypedef unsigned int Uint32
    ctypedef unsigned short Uint16
    ctypedef unsigned char Uint8

    int SDL_INIT_VIDEO

    int SDL_Init(Uint32 flags)
    void SDL_Quit()


IF UNAME_SYSNAME == "Windows":
    cdef extern from "SDL_main.h" nogil:
        void SDL_SetMainReady()


cdef extern from "SDL_error.h" nogil:
    const char *SDL_GetError()


cdef extern from "SDL_video.h" nogil:
    ctypedef enum SDL_GLattr:
        SDL_GL_CONTEXT_MAJOR_VERSION
        SDL_GL_CONTEXT_MINOR_VERSION
        SDL_GL_DOUBLEBUFFER
        SDL_GL_DEPTH_SIZE

    ctypedef enum SDL_WindowFlags:
        SDL_WINDOWPOS_CENTERED
        SDL_WINDOW_OPENGL
        SDL_WINDOW_RESIZABLE

    ctypedef struct SDL_Window:
        pass

    ctypedef void *SDL_GLContext

    int SDL_GL_SetAttribute(SDL_GLattr attr, int value)
    SDL_Window *SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
    SDL_GLContext SDL_GL_CreateContext(SDL_Window *window)
    void SDL_GL_SwapWindow(SDL_Window *window)
    void SDL_GL_DeleteContext(SDL_GLContext context)
    void SDL_DestroyWindow(SDL_Window *window)

    void SDL_SetWindowSize(SDL_Window *window, int w, int h)


cdef extern from "SDL_scancode.h" nogil:
    ctypedef enum SDL_Scancode:
        SDL_SCANCODE_Z
        SDL_SCANCODE_X
        SDL_SCANCODE_LSHIFT
        SDL_SCANCODE_UP
        SDL_SCANCODE_DOWN
        SDL_SCANCODE_LEFT
        SDL_SCANCODE_RIGHT
        SDL_SCANCODE_LCTRL
        SDL_SCANCODE_ESCAPE


cdef extern from "SDL_events.h" nogil:
    ctypedef enum SDL_EventType:
        SDL_KEYDOWN
        SDL_QUIT
        SDL_WINDOWEVENT

    ctypedef struct SDL_Keysym:
        SDL_Scancode scancode

    ctypedef struct SDL_KeyboardEvent:
        Uint32 type
        SDL_Keysym keysym

    ctypedef enum SDL_WindowEventID:
        SDL_WINDOWEVENT_RESIZED

    ctypedef struct SDL_WindowEvent:
        Uint32 type
        SDL_WindowEventID event
        int data1
        int data2

    ctypedef union SDL_Event:
        Uint32 type
        SDL_KeyboardEvent key
        SDL_WindowEvent window

    int SDL_PollEvent(SDL_Event *event)


cdef extern from "SDL_keyboard.h" nogil:
    const Uint8 *SDL_GetKeyboardState(int *numkeys)


cdef extern from "SDL_timer.h" nogil:
    Uint32 SDL_GetTicks()
    void SDL_Delay(Uint32 ms)


cdef extern from "SDL_rect.h" nogil:
    ctypedef struct SDL_Rect:
        int x, y
        int w, h


cdef extern from "SDL_surface.h" nogil:
    ctypedef struct SDL_Surface:
        int w, h
        unsigned char *pixels

    void SDL_FreeSurface(SDL_Surface *surface)
    int SDL_BlitSurface(SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect)
    SDL_Surface *SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask)


cdef extern from "SDL_rwops.h" nogil:
    ctypedef struct SDL_RWops:
        pass

    SDL_RWops *SDL_RWFromConstMem(const void *mem, int size)
    int SDL_RWclose(SDL_RWops *context)


cdef extern from "SDL_image.h" nogil:
    int IMG_INIT_PNG

    int IMG_Init(int flags)
    void IMG_Quit()
    SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)


cdef extern from "SDL_mixer.h" nogil:
    ctypedef enum:
        MIX_DEFAULT_FORMAT

    ctypedef struct Mix_Music:
        pass

    ctypedef struct Mix_Chunk:
        pass

    int Mix_Init(int flags)
    void Mix_Quit()

    int Mix_OpenAudio(int frequency, Uint16 format_, int channels, int chunksize)
    void Mix_CloseAudio()

    int Mix_AllocateChannels(int numchans)

    Mix_Music *Mix_LoadMUS(const char *filename)
    Mix_Chunk *Mix_LoadWAV_RW(SDL_RWops *src, int freesrc)

    void Mix_FreeMusic(Mix_Music *music)
    void Mix_FreeChunk(Mix_Chunk *chunk)

    int Mix_PlayMusic(Mix_Music *music, int loops)
    #int Mix_SetLoopPoints(Mix_Music *music, double start, double end)

    int Mix_Volume(int channel, int volume)
    int Mix_VolumeChunk(Mix_Chunk *chunk, int volume)
    int Mix_VolumeMusic(int volume)

    int Mix_PlayChannel(int channel, Mix_Chunk *chunk, int loops)


cdef extern from "SDL_pixels.h" nogil:
    ctypedef struct SDL_Color:
        Uint8 r, g, b, a


cdef extern from "SDL_ttf.h" nogil:
    ctypedef struct TTF_Font:
        pass

    int TTF_Init()
    void TTF_Quit()
    TTF_Font *TTF_OpenFont(const char *filename, int ptsize)
    void TTF_CloseFont(TTF_Font *font)
    SDL_Surface *TTF_RenderUTF8_Blended(TTF_Font *font, const char *text, SDL_Color fg)


cdef extern from "SDL_blendmode.h" nogil:
    ctypedef enum SDL_BlendMode:
        SDL_BLENDMODE_NONE
        SDL_BLENDMODE_BLEND
        SDL_BLENDMODE_ADD
        SDL_BLENDMODE_MOD


cdef extern from "SDL_render.h" nogil:
    ctypedef struct SDL_Renderer:
        pass

    ctypedef struct SDL_Texture:
        pass

    ctypedef struct SDL_Point:
        pass

    SDL_Renderer *SDL_CreateRenderer(SDL_Window *window, int index, Uint32 flags)
    void SDL_RenderPresent(SDL_Renderer *renderer)
    int SDL_RenderClear(SDL_Renderer *renderer)
    SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *surface)
    int SDL_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, const SDL_Rect *dstrect)
    int SDL_RenderCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, const SDL_Rect *dstrect, double angle, const SDL_Point *center, bint flip)
    int SDL_RenderSetClipRect(SDL_Renderer *renderer, const SDL_Rect *rect)
    int SDL_RenderSetViewport(SDL_Renderer *renderer, const SDL_Rect *rect)

    int SDL_SetTextureColorMod(SDL_Texture *texture, Uint8 r, Uint8 g, Uint8 b)
    int SDL_SetTextureAlphaMod(SDL_Texture *texture, Uint8 alpha)
    int SDL_SetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode blend_mode)