mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
genWindow can center on the last mouse event instead of the screen. Fixes bug 188.
This commit is contained in:
parent
ad0848f1d2
commit
5a9752fb8c
@ -1900,7 +1900,7 @@ void CAdvMapInt::handleRightClick(std::string text, tribool down, CIntObject * c
|
||||
{
|
||||
if (down)
|
||||
{
|
||||
CSimpleWindow * temp = CMessage::genWindow(text,LOCPLINT->playerID);
|
||||
CSimpleWindow * temp = CMessage::genWindow(text,LOCPLINT->playerID,true);
|
||||
CRClickPopupInt *rcpi = new CRClickPopupInt(temp,true);
|
||||
GH.pushInt(rcpi);
|
||||
}
|
||||
|
@ -311,7 +311,7 @@ std::vector<std::vector<SDL_Surface*> > * CMessage::drawText(std::vector<std::st
|
||||
} //ends for(int i=0; i<brtext->size();i++)
|
||||
return txtg;
|
||||
}
|
||||
CSimpleWindow * CMessage::genWindow(std::string text, int player, int Lmar, int Rmar, int Tmar, int Bmar)
|
||||
CSimpleWindow * CMessage::genWindow(std::string text, int player, bool centerOnMouse, int Lmar, int Rmar, int Tmar, int Bmar)
|
||||
{
|
||||
CSimpleWindow * ret = new CSimpleWindow();
|
||||
int fontHeight;
|
||||
@ -321,8 +321,19 @@ CSimpleWindow * CMessage::genWindow(std::string text, int player, int Lmar, int
|
||||
ret->bitmap = drawBox1(txts.first+Lmar+Rmar,txts.second+Tmar+Bmar,player);
|
||||
ret->pos.h = ret->bitmap->h;
|
||||
ret->pos.w = ret->bitmap->w;
|
||||
ret->pos.x = screen->w/2 - (ret->pos.w/2);
|
||||
ret->pos.y = screen->h/2 - (ret->pos.h/2);
|
||||
if (centerOnMouse) {
|
||||
ret->pos.x = GH.current->motion.x - ret->pos.w/2;
|
||||
ret->pos.y = GH.current->motion.y - ret->pos.h/2;
|
||||
// Put the window back on screen if necessary
|
||||
amax(ret->pos.x, 0);
|
||||
amax(ret->pos.y, 0);
|
||||
amin(ret->pos.x, conf.cc.resx - ret->pos.w);
|
||||
amin(ret->pos.y, conf.cc.resy - ret->pos.h);
|
||||
} else {
|
||||
// Center on screen
|
||||
ret->pos.x = screen->w/2 - (ret->pos.w/2);
|
||||
ret->pos.y = screen->h/2 - (ret->pos.h/2);
|
||||
}
|
||||
int curh = ret->bitmap->h/2 - (fontHeight*txtg->size())/2;
|
||||
blitTextOnSur(txtg,fontHeight,curh,ret->bitmap);
|
||||
delete brtext;
|
||||
|
@ -62,7 +62,7 @@ public:
|
||||
static std::vector<std::vector<SDL_Surface*> > * drawText(std::vector<std::string> * brtext, int &fontHeigh, TTF_Font *font = NULL);
|
||||
static SDL_Surface * blitTextOnSur(std::vector<std::vector<SDL_Surface*> > * txtg, int fontHeight, int & curh, SDL_Surface * ret, int xCenterPos=-1); //xPos==-1 works as if ret->w/2
|
||||
static void drawIWindow(CInfoWindow * ret, std::string text, int player, int charperline);
|
||||
static CSimpleWindow * genWindow(std::string text, int player, int Lmar=35, int Rmar=35, int Tmar=35, int Bmar=35);//supports h3 text formatting; player sets color of window, Lmar/Rmar/Tmar/Bmar are Left/Right/Top/Bottom margins
|
||||
static CSimpleWindow * genWindow(std::string text, int player, bool centerOnMouse=false, int Lmar=35, int Rmar=35, int Tmar=35, int Bmar=35);//supports h3 text formatting; player sets color of window, Lmar/Rmar/Tmar/Bmar are Left/Right/Top/Bottom margins
|
||||
static SDL_Surface * genMessage(std::string title, std::string text, EWindowType type=infoOnly,
|
||||
std::vector<CDefHandler*> *addPics=NULL, void * cb=NULL);
|
||||
static SDL_Surface * drawBox1(int w, int h, int playerColor=1);
|
||||
|
Loading…
Reference in New Issue
Block a user