|
|
|
@ -53,7 +53,7 @@ void MenuMenu::up() {
|
|
|
|
|
|
|
|
|
|
void MenuMenu::down() {
|
|
|
|
|
do {
|
|
|
|
|
if(itempos==menuitems.size()-1)
|
|
|
|
|
if((unsigned int)itempos==menuitems.size()-1)
|
|
|
|
|
itempos = 0;
|
|
|
|
|
else
|
|
|
|
|
itempos++;
|
|
|
|
@ -78,8 +78,9 @@ void MenuMenu::charInput(char c) {
|
|
|
|
|
|
|
|
|
|
void MenuMenu::resetItemPos() {
|
|
|
|
|
dohighlight = true;
|
|
|
|
|
for(itempos = 0; itempos<menuitems.size()&&!menuitems[itempos]->isSelectable(); itempos++);
|
|
|
|
|
if(itempos==menuitems.size()) {
|
|
|
|
|
for(itempos = 0; (unsigned int)itempos<menuitems.size()&&!menuitems[itempos]->isSelectable(); itempos++);
|
|
|
|
|
|
|
|
|
|
if((unsigned int)itempos==menuitems.size()) {
|
|
|
|
|
itempos = 0;
|
|
|
|
|
dohighlight = false;
|
|
|
|
|
}
|
|
|
|
@ -87,12 +88,13 @@ void MenuMenu::resetItemPos() {
|
|
|
|
|
|
|
|
|
|
void MenuMenu::render() {
|
|
|
|
|
Punkt2D pos = menupos;
|
|
|
|
|
pos.y += offset;
|
|
|
|
|
if(centerScreenX) {
|
|
|
|
|
SDL_Surface *screen = SDL_GetVideoSurface();
|
|
|
|
|
pos.x = screen->w/2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int clen=0, vlen=0, height=0;
|
|
|
|
|
int clen=0, vlen=0, height=0, fullvalwidth=0;
|
|
|
|
|
for(unsigned int i=0; i<menuitems.size(); i++) {
|
|
|
|
|
fontengine.setSize(basefontsize+menuitems[i]->getFontSizeAdd());
|
|
|
|
|
|
|
|
|
@ -100,23 +102,41 @@ void MenuMenu::render() {
|
|
|
|
|
vlen = std::max(vlen, fontengine.getTextWidth(menuitems[i]->getValue()));
|
|
|
|
|
height += basefontsize + menuitems[i]->getFontSizeAdd() + offset;
|
|
|
|
|
}
|
|
|
|
|
fullvalwidth = clen + vlen + valuewidth;
|
|
|
|
|
|
|
|
|
|
std::cout << "clen: " << clen << " und " << (int) paintbackground << std::endl;
|
|
|
|
|
|
|
|
|
|
if(paintbackground&&false) {
|
|
|
|
|
if(paintbackground&&true) {
|
|
|
|
|
// geht noch nicht ganz
|
|
|
|
|
glDisable(GL_TEXTURE_2D);
|
|
|
|
|
glColor3f(0.4f, 0.4f, 0.4f);
|
|
|
|
|
SDL_Rect bgarea = { pos.x-(clen/2)-((vlen>0)?(valuewidth/2+vlen/2):0),
|
|
|
|
|
pos.y,
|
|
|
|
|
clen+((vlen>0)?vlen/2+valuewidth/2:0),
|
|
|
|
|
height };
|
|
|
|
|
std::cout << bgarea.x << " " << bgarea.y << " " << bgarea.w << " " << bgarea.h << std::endl;
|
|
|
|
|
glEnable(GL_BLEND);
|
|
|
|
|
glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
|
|
|
|
|
|
|
|
|
|
SDL_Rect bgarea = { 0, (int)pos.y, 0, height };
|
|
|
|
|
|
|
|
|
|
if(vlen>0&&fullvalwidth>=clen) {
|
|
|
|
|
bgarea.x = (int)pos.x-fullvalwidth/2;
|
|
|
|
|
bgarea.w = fullvalwidth;
|
|
|
|
|
} else {
|
|
|
|
|
bgarea.x = (int)pos.x-clen/2;
|
|
|
|
|
bgarea.w = clen;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::cout << "clen: " << clen << " fvw: " << fullvalwidth << std::endl;
|
|
|
|
|
|
|
|
|
|
// SDL_Rect bgarea = { pos.x-(clen/2)-((vlen>0)?(valuewidth+vlen):0),
|
|
|
|
|
// pos.y,
|
|
|
|
|
// clen+((vlen>0)?vlen+valuewidth:0),
|
|
|
|
|
// height };
|
|
|
|
|
// std::cout << bgarea.x << " " << bgarea.y << " " << bgarea.w << " " << bgarea.h << std::endl;
|
|
|
|
|
bgarea.x -= offset;
|
|
|
|
|
bgarea.y -= offset;
|
|
|
|
|
bgarea.w += offset*2;
|
|
|
|
|
bgarea.h += offset;
|
|
|
|
|
|
|
|
|
|
GLFontEngine::paintSDLRect(bgarea);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(unsigned int i=0; i<menuitems.size(); i++) {
|
|
|
|
|
menuitems[i]->render(pos, centermenu, basefontsize, maxwidth, valuewidth, (itempos==i)&&dohighlight, clen, vlen);
|
|
|
|
|
menuitems[i]->render(pos, centermenu, basefontsize, maxwidth, valuewidth, ((unsigned int)itempos==i)&&dohighlight, clen, vlen);
|
|
|
|
|
pos.y += basefontsize + menuitems[i]->getFontSizeAdd() + offset;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|