Allow for changing control overlay image

This commit is contained in:
Varun Patil 2019-05-29 23:30:52 +05:30
parent 558a6511bc
commit ee3c189d6b
4 changed files with 17 additions and 4 deletions

View File

@ -480,7 +480,9 @@ parseOverlayButtonDesc(const ptree &pt, TouchOverlay::Button &out)
static void static void
parseOverlayDesc(const ptree &pt, TouchOverlay &out) parseOverlayDesc(const ptree &pt, TouchOverlay &out)
{ {
out.image = pt.get<std::string>("image"); for (auto &img : pt.get_child("images")) {
out.images[img.second.get<int>("id")] = img.second.get<std::string>("file");
}
const ptree &buttons = pt.get_child("buttons"); const ptree &buttons = pt.get_child("buttons");
for (ptree::const_iterator ci = buttons.begin(); ci != buttons.end(); ++ci) for (ptree::const_iterator ci = buttons.begin(); ci != buttons.end(); ++ci)

View File

@ -24,11 +24,12 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <map>
#include <set> #include <set>
struct TouchOverlay struct TouchOverlay
{ {
std::string image; std::map<int, std::string> images;
struct Button struct Button
{ {

View File

@ -503,12 +503,16 @@ struct GraphicsPrivate
TEXFBO::allocEmpty(frozenScene, scRes.x, scRes.y); TEXFBO::allocEmpty(frozenScene, scRes.x, scRes.y);
TEXFBO::linkFBO(frozenScene); TEXFBO::linkFBO(frozenScene);
setOverlay(0);
FloatRect screenRect(0, 0, scRes.x, scRes.y); FloatRect screenRect(0, 0, scRes.x, scRes.y);
screenQuad.setTexPosRect(screenRect, screenRect); screenQuad.setTexPosRect(screenRect, screenRect);
fpsLimiter.resetFrameAdjust(); fpsLimiter.resetFrameAdjust();
}
const std::string &olImage = rtData->config.touchOverlay.image; void setOverlay(int id) {
const std::string &olImage = threadData->config.touchOverlay.images[id];
if (!olImage.empty()) if (!olImage.empty())
{ {
SDL_RWops *ops = SDL_RWFromFile(olImage.c_str(), "rb"); SDL_RWops *ops = SDL_RWFromFile(olImage.c_str(), "rb");
@ -862,6 +866,11 @@ void Graphics::frameReset()
p->fpsLimiter.resetFrameAdjust(); p->fpsLimiter.resetFrameAdjust();
} }
void Graphics::setOverlay(int id)
{
p->setOverlay(id);
}
static void guardDisposed() {} static void guardDisposed() {}
DEF_ATTR_RD_SIMPLE(Graphics, FrameRate, int, p->frameRate) DEF_ATTR_RD_SIMPLE(Graphics, FrameRate, int, p->frameRate)

View File

@ -40,6 +40,7 @@ public:
const char *filename = "", const char *filename = "",
int vague = 40); int vague = 40);
void frameReset(); void frameReset();
void setOverlay(int);
DECL_ATTR( FrameRate, int ) DECL_ATTR( FrameRate, int )
DECL_ATTR( FrameCount, int ) DECL_ATTR( FrameCount, int )