1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-07-17 01:32:21 +02:00

[new] dodanie do CPreGameTextHandlera funkcji wypruwających tytuł/treść danej opcji

[change] przesunięcie CPreGameTextHandlera do CPreGeme'a
[new] Pomoc kontekstowa dlaw wszystkich opcji w menu głównym (plansza główna)
[bugfix] Gdy okienko znika nie ma błędów w wyświetlaniu (przycięte przyciski)
[new] Funkcja do wygodnego generowania kolorów w rozszerzeniach SDLa i odświeżania recta
[new] Generowanie okien dwuprzyciskowych (sporo jest z tym związanych zmian)


***Uwaga - to okno dwuprzyciskowe (a właściwie jego obsługa) nie jest dokończone - jest parę bugów o których wiem. Nie mam siły ich teraz poprawiać, a Ty pewnie zaraz wejdziesz i będziesz ciekaw zmian, więc wgrywam, ale nie zdziw się, gdy jakiś odkryjesz.***

I musisz dodać nowe defy, które zaraz dostaniesz na pocztę.
This commit is contained in:
Michał W. Urbańczyk
2007-06-13 14:02:43 +00:00
parent dde1d09194
commit cc3d526a79
8 changed files with 171 additions and 56 deletions

View File

@ -84,7 +84,8 @@ std::vector<std::string> * CMessage::breakText(std::string text)
ret->push_back(text);
return ret;
}
SDL_Surface * CMessage::genMessage(std::string title, std::string text, EWindowType type)
SDL_Surface * CMessage::genMessage
(std::string title, std::string text, EWindowType type, std::vector<CSemiDefHandler*> *addPics, void * cb)
{
//max x 320 okolo 30 znakow
std::vector<std::string> * tekst;
@ -95,12 +96,17 @@ SDL_Surface * CMessage::genMessage(std::string title, std::string text, EWindowT
}
else tekst = breakText(text);
int ww, hh; //wymiary boksa
if (319>60*13*text.length())
ww = 60*13*text.length();
if (319>30+13*text.length())
ww = 30+13*text.length();
else ww = 319;
if (title.length())
hh=130+(21*tekst->size());
else hh=80+(21*tekst->size());
hh=110+(21*tekst->size());
else hh=60+(21*tekst->size());
if (type==EWindowType::yesOrNO) //make place for buttons
{
if (ww<200) ww=200;
hh+=70;
}
SDL_Surface * ret = drawBox1(ww,hh);
//prepare title text
@ -110,13 +116,26 @@ SDL_Surface * CMessage::genMessage(std::string title, std::string text, EWindowT
SDL_BlitSurface(titleText,NULL,ret,&tytul);
SDL_FreeSurface(titleText);
//draw text
for (int i=0; i<tekst->size(); i++)
for (int i=0; i<tekst->size(); i++)
{
SDL_Surface * tresc = TTF_RenderText_Shaded(TNRB,(*tekst)[i].c_str(),zwykly,tlo);
SDL_Rect trescRect = genRect(tresc->h,tresc->w,((ret->w/2)-(tresc->w/2)),77+i*21);
SDL_BlitSurface(tresc,NULL,ret,&trescRect);
SDL_FreeSurface(tresc);
}
if (type==EWindowType::yesOrNO) // add buttons
{
int by = 40+77+tekst->size()*21;
int hwo = (*addPics)[0]->ourImages[0].bitmap->w, hwc=(*addPics)[0]->ourImages[0].bitmap->w;
//ok
SDL_Rect trescRect = genRect((*addPics)[0]->ourImages[0].bitmap->h,hwo,((ret->w/2)-hwo-10),by);
SDL_BlitSurface((*addPics)[0]->ourImages[0].bitmap,NULL,ret,&trescRect);
((std::vector<SDL_Rect>*)(cb))->push_back(trescRect);
//cancel
trescRect = genRect((*addPics)[1]->ourImages[0].bitmap->h,hwc,((ret->w/2)+10),by);
SDL_BlitSurface((*addPics)[1]->ourImages[0].bitmap,NULL,ret,&trescRect);
((std::vector<SDL_Rect>*)(cb))->push_back(trescRect);
}
delete tekst;
return ret;
}