void MenuWidget::insertItem(std::string text, int pos) { int size = items_texts.size(); assert(pos <= size); if(pos < 0)pos = size; items_texts.insert(items_texts.begin()+pos, text); items_checked.insert(items_checked.begin()+pos, false); items_rects.insert(items_rects.begin()+pos, hgeRect()); recompute_dimensions(); }
///////////////// PRIVATE ///////////////// void MenuWidget::recompute_dimensions(){ const float x = rect.x1, y = rect.y1; // h = summ, w = max float dh = font.GetHeight(); float h = dh * items_texts.size(); float w = 0; // update max for(int i=0; i<items_texts.size(); i++){ float cur_w = font.GetStringWidth(items_texts[i].c_str()); if(cur_w > w) w = cur_w; } // update rects for(int i=0; i<items_rects.size(); i++){ float cur_w = font.GetStringWidth(items_texts[i].c_str()); items_rects[i] = hgeRect(x + (w - cur_w) / 2, y + dh * i, x + w - (w - cur_w) / 2, y + dh * (i+1)); // center } rect = hgeRect(x, y, x+w, y+h); }
MenuWidget::MenuWidget(float x, float y) :font("font1.fnt") { focused_item = -1; is_visible = 0; rect = hgeRect(x, y, 0, 0); color.SetHWColor(0xFFFFE060); light_color.SetHWColor(0xFFFFFFFF); shadow.SetHWColor(0x30000000); offset = 2; timer = 0; frame = 2; spf = 0.1f; recompute_dimensions(); }
hgeRect Object::getClientRect() const { return hgeRect(windowRect.x1 + borderSize, windowRect.y1 + borderSize, windowRect.x2 - borderSize, windowRect.y2 - borderSize); }