|
@@ -200,7 +200,47 @@ std::pair<int,int> CMessage::getMaxSizes(std::vector<std::vector<SDL_Surface*> >
|
|
}
|
|
}
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
+SDL_Surface * CMessage::blitTextOnSur(std::vector<std::vector<SDL_Surface*> > * txtg, int & curh, SDL_Surface * ret)
|
|
|
|
+{
|
|
|
|
+ for (int i=0; i<txtg->size();i++)
|
|
|
|
+ {
|
|
|
|
+ int lw=0;
|
|
|
|
+ for (int j=0;j<(*txtg)[i].size();j++)
|
|
|
|
+ lw+=(*txtg)[i][j]->w; //lw - laczna szerokosc linii
|
|
|
|
+ int pw = ret->w/2;
|
|
|
|
+ pw -= lw/2; //poczatek tekstu (x)
|
|
|
|
|
|
|
|
+ int tw = pw;
|
|
|
|
+ for (int j=0;j<(*txtg)[i].size();j++) //blit text
|
|
|
|
+ {
|
|
|
|
+ blitAt((*txtg)[i][j],tw,curh+i*19,ret);
|
|
|
|
+ tw+=(*txtg)[i][j]->w;
|
|
|
|
+ SDL_FreeSurface((*txtg)[i][j]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+SDL_Surface * CMessage::blitCompsOnSur(std::vector<SComponent*> & comps, int maxw, int inter, int & curh, SDL_Surface * ret)
|
|
|
|
+{
|
|
|
|
+ std::vector<std::string> * brdtext;
|
|
|
|
+ if (comps.size())
|
|
|
|
+ brdtext = breakText(comps[0]->subtitle,12,true,true);
|
|
|
|
+ else
|
|
|
|
+ brdtext = NULL;
|
|
|
|
+ curh += 30;
|
|
|
|
+ comps[0]->pos.x = (ret->w/2) - ((comps[0]->getImg()->w)/2);
|
|
|
|
+ comps[0]->pos.y = curh;
|
|
|
|
+ blitAt(comps[0]->getImg(),comps[0]->pos.x,comps[0]->pos.y,ret);
|
|
|
|
+ curh += comps[0]->getImg()->h + 5; //obrazek + przerwa
|
|
|
|
+ for (int i=0; i<brdtext->size();i++) //descr.
|
|
|
|
+ {
|
|
|
|
+ SDL_Surface * tesu = TTF_RenderText_Blended(GEOR13,(*brdtext)[i].c_str(),zwykly);
|
|
|
|
+ blitAt(tesu,((comps[0]->getImg()->w - tesu->w)/2)+comps[0]->pos.x,curh,ret);
|
|
|
|
+ curh+=tesu->h;
|
|
|
|
+ SDL_FreeSurface(tesu);
|
|
|
|
+ }
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
std::vector<std::vector<SDL_Surface*> > * CMessage::drawText(std::vector<std::string> * brtext)
|
|
std::vector<std::vector<SDL_Surface*> > * CMessage::drawText(std::vector<std::string> * brtext)
|
|
{
|
|
{
|
|
std::vector<std::vector<SDL_Surface*> > * txtg = new std::vector<std::vector<SDL_Surface*> >();
|
|
std::vector<std::vector<SDL_Surface*> > * txtg = new std::vector<std::vector<SDL_Surface*> >();
|
|
@@ -276,14 +316,7 @@ CInfoWindow * CMessage::genIWindow(std::string text, int player, int charperline
|
|
//TODO: support for more than one component
|
|
//TODO: support for more than one component
|
|
CInfoWindow * ret = new CInfoWindow();
|
|
CInfoWindow * ret = new CInfoWindow();
|
|
ret->components = comps;
|
|
ret->components = comps;
|
|
- //for (int i=0;i<comps.size();i++)
|
|
|
|
- // comps[i]->
|
|
|
|
std::vector<std::string> * brtext = breakText(text,charperline,true,true);
|
|
std::vector<std::string> * brtext = breakText(text,charperline,true,true);
|
|
- std::vector<std::string> * brdtext;
|
|
|
|
- if (comps.size())
|
|
|
|
- brdtext = breakText(comps[0]->subtitle,12,true,true);
|
|
|
|
- else
|
|
|
|
- brdtext = NULL;
|
|
|
|
std::vector<std::vector<SDL_Surface*> > * txtg = drawText(brtext);
|
|
std::vector<std::vector<SDL_Surface*> > * txtg = drawText(brtext);
|
|
std::pair<int,int> txts = getMaxSizes(txtg);
|
|
std::pair<int,int> txts = getMaxSizes(txtg);
|
|
txts.second = txts.second
|
|
txts.second = txts.second
|
|
@@ -295,50 +328,19 @@ CInfoWindow * CMessage::genIWindow(std::string text, int player, int charperline
|
|
+ 30 //space to first component
|
|
+ 30 //space to first component
|
|
+ comps[0]->getImg()->h
|
|
+ comps[0]->getImg()->h
|
|
+ 5 //img <-> subtitle
|
|
+ 5 //img <-> subtitle
|
|
- + brdtext->size() * 10; //subtitle //!!!!!!!!!!!!!!!!!!!!
|
|
|
|
|
|
+ + 20; //subtitle //!!!!!!!!!!!!!!!!!!!!
|
|
ret->bitmap = drawBox1(txts.first+70,txts.second+70,0);
|
|
ret->bitmap = drawBox1(txts.first+70,txts.second+70,0);
|
|
ret->pos.h=ret->bitmap->h;
|
|
ret->pos.h=ret->bitmap->h;
|
|
ret->pos.w=ret->bitmap->w;
|
|
ret->pos.w=ret->bitmap->w;
|
|
|
|
|
|
int curh = 30; //gorny margines
|
|
int curh = 30; //gorny margines
|
|
- for (int i=0; i<txtg->size();i++)
|
|
|
|
- {
|
|
|
|
- int lw=0;
|
|
|
|
- for (int j=0;j<(*txtg)[i].size();j++)
|
|
|
|
- lw+=(*txtg)[i][j]->w;
|
|
|
|
- int pw = ret->bitmap->w/2;
|
|
|
|
- //int pw = Tmar, ph = Lmar;
|
|
|
|
- pw -= lw/2;
|
|
|
|
-
|
|
|
|
- int tw = pw;
|
|
|
|
- for (int j=0;j<(*txtg)[i].size();j++) //blit text
|
|
|
|
- {
|
|
|
|
- //std::stringstream n;
|
|
|
|
- //n <<"temp_"<<i<<"__"<<j<<".bmp";
|
|
|
|
- //SDL_SaveBMP(ret->bitmap,n.str().c_str());
|
|
|
|
- blitAt((*txtg)[i][j],tw,curh+i*19,ret->bitmap);
|
|
|
|
- tw+=(*txtg)[i][j]->w;
|
|
|
|
- SDL_FreeSurface((*txtg)[i][j]);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ blitTextOnSur(txtg,curh,ret->bitmap);
|
|
curh += (19 * txtg->size()); //wys. tekstu
|
|
curh += (19 * txtg->size()); //wys. tekstu
|
|
|
|
|
|
if (comps.size())
|
|
if (comps.size())
|
|
{
|
|
{
|
|
- curh += 30;
|
|
|
|
- comps[0]->pos.x = (ret->bitmap->w/2) - ((comps[0]->getImg()->w)/2);
|
|
|
|
- comps[0]->pos.y = curh;
|
|
|
|
- blitAt(comps[0]->getImg(),comps[0]->pos.x,comps[0]->pos.y,ret->bitmap);
|
|
|
|
- curh += comps[0]->getImg()->h + 5; //obrazek + przerwa
|
|
|
|
- for (int i=0; i<brdtext->size();i++) //descr.
|
|
|
|
- {
|
|
|
|
- SDL_Surface * tesu = TTF_RenderText_Blended(GEOR13,(*brdtext)[i].c_str(),zwykly);
|
|
|
|
- blitAt(tesu,((comps[0]->getImg()->w - tesu->w)/2)+comps[0]->pos.x,curh,ret->bitmap);
|
|
|
|
- curh+=tesu->h;
|
|
|
|
- SDL_FreeSurface(tesu);
|
|
|
|
- }
|
|
|
|
|
|
+ blitCompsOnSur(comps,200,0,curh,ret->bitmap);
|
|
}
|
|
}
|
|
-
|
|
|
|
curh += 20; //to buttton
|
|
curh += 20; //to buttton
|
|
|
|
|
|
ret->okb.posr.x = (ret->bitmap->w/2) - (ret->okb.imgs[0][0]->w/2);
|
|
ret->okb.posr.x = (ret->bitmap->w/2) - (ret->okb.imgs[0][0]->w/2);
|