|
|
|
@ -33,6 +33,7 @@ distribution.
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
#include "tinythread.h"
|
|
|
|
|
#include "dfhack/modules/Graphic.h"
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Plugin loading functions
|
|
|
|
@ -284,9 +285,44 @@ DFhackCExport vPtr SDL_SetVideoMode(int width, int height, int bpp, uint32_t fla
|
|
|
|
|
{
|
|
|
|
|
return _SDL_SetVideoMode(width, height, bpp, flags);
|
|
|
|
|
}
|
|
|
|
|
static int (*_SDL_UpperBlit)(vPtr src, vPtr srcrect, vPtr dst, vPtr dstrect) = 0;
|
|
|
|
|
DFhackCExport int SDL_UpperBlit(vPtr src, vPtr srcrect, vPtr dst, vPtr dstrect)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
static int (*_SDL_UpperBlit)(DFHack::DFSDL_Surface* src, DFHack::DFSDL_Rect* srcrect, DFHack::DFSDL_Surface* dst, DFHack::DFSDL_Rect* dstrect) = 0;
|
|
|
|
|
DFhackCExport int 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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -745,7 +781,7 @@ bool FirstCall()
|
|
|
|
|
_SDL_SetVideoMode = (void*(*)(int, int, int, uint32_t))GetProcAddress(realSDLlib,"SDL_SetVideoMode");
|
|
|
|
|
_SDL_ShowCursor = (int (*)(int))GetProcAddress(realSDLlib,"SDL_ShowCursor");
|
|
|
|
|
_SDL_UnlockSurface = (void (*)(void*))GetProcAddress(realSDLlib,"SDL_UnlockSurface");
|
|
|
|
|
_SDL_UpperBlit = (int (*)(void*, void*, void*, void*))GetProcAddress(realSDLlib,"SDL_UpperBlit");
|
|
|
|
|
_SDL_UpperBlit = (int (*)(DFHack::DFSDL_Surface*, DFHack::DFSDL_Rect*, DFHack::DFSDL_Surface*, DFHack::DFSDL_Rect*))GetProcAddress(realSDLlib,"SDL_UpperBlit");
|
|
|
|
|
_SDL_WM_SetCaption = (void (*)(const char*, const char*))GetProcAddress(realSDLlib,"SDL_WM_SetCaption");
|
|
|
|
|
_SDL_WM_SetIcon = (void (*)(void*, uint8_t*))GetProcAddress(realSDLlib,"SDL_WM_SetIcon");
|
|
|
|
|
_SDL_mutexP = (int (*)(vPtr))GetProcAddress(realSDLlib,"SDL_mutexP");
|
|
|
|
@ -781,4 +817,3 @@ bool FirstCall()
|
|
|
|
|
inited = true;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|