|
|
|
@ -64,6 +64,15 @@ DYLD_INTERPOSE(DFH_SDL_Init,SDL_Init);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_PollEvent,SDL_PollEvent);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_Quit,SDL_Quit);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_NumJoysticks,SDL_NumJoysticks);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_CreateRGBSurface,SDL_CreateRGBSurface);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_CreateRGBSurfaceFrom,SDL_CreateRGBSurfaceFrom);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_UnlockSurface,SDL_UnlockSurface);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_LockSurface,SDL_LockSurface);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_ConvertSurface,SDL_ConvertSurface);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_FreeSurface,SDL_FreeSurface);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_GetMouseState,SDL_GetMouseState);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_GetVideoSurface,SDL_GetVideoSurface);
|
|
|
|
|
DYLD_INTERPOSE(DFH_SDL_UpperBlit,SDL_UpperBlit);
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* SDL part starts here *
|
|
|
|
@ -169,3 +178,96 @@ DFhackCExport int DFH_SDL_Init(uint32_t flags)
|
|
|
|
|
int ret = SDL_Init(flags);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// New SDL functions starting in r5
|
|
|
|
|
static int (*_SDL_CreateRGBSurface)(uint32_t flags, int width, int height, int depth,
|
|
|
|
|
uint32_t Rmask, uint32_t Gmask, uint32_t Bmask, uint32_t Amask) = 0;
|
|
|
|
|
DFhackCExport vPtr DFH_SDL_CreateRGBSurface(uint32_t flags, int width, int height, int depth,
|
|
|
|
|
uint32_t Rmask, uint32_t Gmask, uint32_t Bmask, uint32_t Amask)
|
|
|
|
|
{
|
|
|
|
|
return SDL_CreateRGBSurface(flags, width, height, depth, Rmask, Gmask, Bmask, Amask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static vPtr (*_SDL_CreateRGBSurfaceFrom)(vPtr pixels, int width, int height, int depth, int pitch,
|
|
|
|
|
uint32_t Rmask, uint32_t Gmask, uint32_t Bmask, uint32_t Amask) = 0;
|
|
|
|
|
DFhackCExport vPtr DFH_SDL_CreateRGBSurfaceFrom(vPtr pixels, int width, int height, int depth, int pitch,
|
|
|
|
|
uint32_t Rmask, uint32_t Gmask, uint32_t Bmask, uint32_t Amask)
|
|
|
|
|
{
|
|
|
|
|
return SDL_CreateRGBSurfaceFrom(pixels, width, height, depth, pitch, Rmask, Gmask, Bmask, Amask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void (*_SDL_FreeSurface)(vPtr surface) = 0;
|
|
|
|
|
DFhackCExport void DFH_SDL_FreeSurface(vPtr surface)
|
|
|
|
|
{
|
|
|
|
|
SDL_FreeSurface(surface);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static vPtr (*_SDL_ConvertSurface)(vPtr surface, vPtr format, uint32_t flags) = 0;
|
|
|
|
|
DFhackCExport vPtr DFH_SDL_ConvertSurface(vPtr surface, vPtr format, uint32_t flags)
|
|
|
|
|
{
|
|
|
|
|
return SDL_ConvertSurface(surface, format, flags);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int (*_SDL_LockSurface)(vPtr surface) = 0;
|
|
|
|
|
DFhackCExport int DFH_SDL_LockSurface(vPtr surface)
|
|
|
|
|
{
|
|
|
|
|
return SDL_LockSurface(surface);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void (*_SDL_UnlockSurface)(vPtr surface) = 0;
|
|
|
|
|
DFhackCExport void DFH_SDL_UnlockSurface(vPtr surface)
|
|
|
|
|
{
|
|
|
|
|
SDL_UnlockSurface(surface);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static uint8_t (*_SDL_GetMouseState)(int *, int *) = 0;
|
|
|
|
|
DFhackCExport uint8_t DFH_SDL_GetMouseState(int *x, int *y)
|
|
|
|
|
{
|
|
|
|
|
return SDL_GetMouseState(x,y);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void * (*_SDL_GetVideoSurface)( void ) = 0;
|
|
|
|
|
DFhackCExport void * DFH_SDL_GetVideoSurface(void)
|
|
|
|
|
{
|
|
|
|
|
return SDL_GetVideoSurface();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int (*_SDL_UpperBlit)(DFHack::DFSDL_Surface* src, DFHack::DFSDL_Rect* srcrect, DFHack::DFSDL_Surface* dst, DFHack::DFSDL_Rect* dstrect) = 0;
|
|
|
|
|
DFhackCExport int DFH_SDL_UpperBlit(DFHack::DFSDL_Surface* src, DFHack::DFSDL_Rect* srcrect, DFHack::DFSDL_Surface* dst, DFHack::DFSDL_Rect* dstrect)
|
|
|
|
|
{
|
|
|
|
|
if ( dstrect != NULL && dstrect->h != 0 && dstrect->w != 0 )
|
|
|
|
|
{
|
|
|
|
|
DFHack::Core & c = DFHack::Core::getInstance();
|
|
|
|
|
DFHack::Graphic* g = c.getGraphic();
|
|
|
|
|
DFHack::DFTileSurface* ov = g->Call(dstrect->x/dstrect->w, dstrect->y/dstrect->h);
|
|
|
|
|
|
|
|
|
|
if ( ov != NULL )
|
|
|
|
|
{
|
|
|
|
|
if ( ov->paintOver )
|
|
|
|
|
{
|
|
|
|
|
SDL_UpperBlit(src, srcrect, dst, dstrect);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DFHack::DFSDL_Rect* dstrect2 = new DFHack::DFSDL_Rect;
|
|
|
|
|
dstrect2->x = dstrect->x;
|
|
|
|
|
dstrect2->y = dstrect->y;
|
|
|
|
|
dstrect2->w = dstrect->w;
|
|
|
|
|
dstrect2->h = dstrect->h;
|
|
|
|
|
|
|
|
|
|
if ( ov->dstResize != NULL )
|
|
|
|
|
{
|
|
|
|
|
DFHack::DFSDL_Rect* r = (DFHack::DFSDL_Rect*)ov->dstResize;
|
|
|
|
|
dstrect2->x += r->x;
|
|
|
|
|
dstrect2->y += r->y;
|
|
|
|
|
dstrect2->w += r->w;
|
|
|
|
|
dstrect2->h += r->h;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int result = SDL_UpperBlit(ov->surface, ov->rect, dst, dstrect2);
|
|
|
|
|
delete dstrect2;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return SDL_UpperBlit(src, srcrect, dst, dstrect);
|
|
|
|
|
}
|