void menu::clear_item(int item) { SDL_Rect rect = get_item_rect(item); if (rect.w == 0) return; bg_restore(rect); }
void palette_manager::scroll_top() { const SDL_Rect rect = gui_.palette_area(); active_palette().set_start_item(0); bg_restore(rect); set_dirty(); }
void help_text_area::draw_contents() { SDL_Rect const &loc = inner_location(); bg_restore(); surface screen = video().getSurface(); clip_rect_setter clip_rect_set(screen, &loc); for(std::list<item>::const_iterator it = items_.begin(), end = items_.end(); it != end; ++it) { SDL_Rect dst = it->rect; dst.y -= get_position(); if (dst.y < static_cast<int>(loc.h) && dst.y + it->rect.h > 0) { dst.x += loc.x; dst.y += loc.y; if (it->box) { for (int i = 0; i < box_width; ++i) { sdl::draw_rectangle(dst.x, dst.y, it->rect.w - i * 2, it->rect.h - i * 2, 0, screen); ++dst.x; ++dst.y; } } sdl_blit(it->surf, NULL, screen, &dst); } } update_rect(loc); }
void palette_manager::resrote_palete_bg(bool scroll_top) { const SDL_Rect rect = gui_.palette_area(); if (scroll_top) { active_palette().set_start_item(0); } bg_restore(rect); set_dirty(); }
void menu::draw() { if(hidden()) { return; } if(!dirty()) { for(std::set<int>::const_iterator i = invalid_.begin(); i != invalid_.end(); ++i) { if(*i == -1) { SDL_Rect heading_rect = inner_location(); heading_rect.h = heading_height(); bg_restore(heading_rect); style_->draw_row(*this,0,heading_rect,HEADING_ROW); update_rect(heading_rect); } else if(*i >= 0 && *i < int(item_pos_.size())) { const unsigned int pos = item_pos_[*i]; const SDL_Rect& rect = get_item_rect(*i); bg_restore(rect); style_->draw_row(*this,pos,rect, (!out_ && pos == selected_) ? SELECTED_ROW : NORMAL_ROW); update_rect(rect); } } invalid_.clear(); return; } invalid_.clear(); bg_restore(); util::scoped_ptr<clip_rect_setter> clipper(NULL); if(clip_rect()) clipper.assign(new clip_rect_setter(video().getSurface(), *clip_rect())); draw_contents(); update_rect(location()); set_dirty(false); }
void scrollarea::test_scrollbar() { if (recursive_) return; recursive_ = true; if (shown_scrollbar_ != has_scrollbar()) { bg_restore(); bg_cancel(); update_location(location()); } recursive_ = false; }
void widget::set_location(SDL_Rect const &rect) { if(rect_.x == rect.x && rect_.y == rect.y && rect_.w == rect.w && rect_.h == rect.h) return; if(state_ == UNINIT && rect.x != -1234 && rect.y != -1234) state_ = DRAWN; bg_restore(); bg_cancel(); rect_ = rect; set_dirty(true); update_location(rect); }
void widget::hide_override(bool value) { if (hidden_override_ != value) { hidden_override_ = value; if (state_ == DIRTY || state_ == DRAWN) { if (value) { bg_restore(); } else { bg_update(); set_dirty(true); } } } }
void widget::draw() { if (hidden() || !dirty()) return; bg_restore(); clip_rect_setter clipper(video().getSurface(), &clip_rect_, clip_); draw_contents(); update_rect(rect_); set_dirty(false); }
void widget::hide(bool value) { if (value) { if ((state_ == DIRTY || state_ == DRAWN) && !hidden_override_) bg_restore(); state_ = HIDDEN; } else if (state_ == HIDDEN) { state_ = DRAWN; if (!hidden_override_) { bg_update(); set_dirty(true); } } }
void widget::draw() { if (hidden() || !dirty()) return; bg_restore(); util::scoped_ptr<clip_rect_setter> clipper(NULL); if (clip_) clipper.assign(new clip_rect_setter(video().getSurface(), clip_rect_)); draw_contents(); update_rect(rect_); set_dirty(false); }
void widget::draw() { if (hidden() ) //|| !dirty()) // KP: always assume dirty with openGL rendering return; bg_restore(); util::scoped_ptr<clip_rect_setter> clipper(NULL); if (clip_) clipper.assign(new clip_rect_setter(/*video().getSurface(),*/ clip_rect_)); draw_contents(); // update_rect(rect_); // set_dirty(false); }
void widget::volatile_undraw() { if (!volatile_) return; bg_restore(); }
void tristate_button::draw_contents() { surface image(NULL); surface overlay(NULL); surface base = baseImage_; int offset = 0; switch (state_) { case UNINIT: return; case NORMAL: break; case TOUCHED_LEFT: overlay = touchedUpImage_; base = touchedBaseImage_; break; case TOUCHED_RIGHT: overlay = touchedDownImage_; base = touchedBaseImage_; break; case TOUCHED_BOTH_LEFT: case TOUCHED_BOTH_RIGHT: overlay = touchedBothImage_; base = touchedBaseImage_; break; case ACTIVE: // overlay = activeImage_; base = activeBaseImage_; break; case PRESSED_LEFT: base = activeBaseImage_; overlay = pressedUpImage_; break; case PRESSED_RIGHT: base = activeBaseImage_; overlay = pressedDownImage_; break; case PRESSED_BOTH: base = activeBaseImage_; overlay = pressedBothImage_; break; case PRESSED_ACTIVE_LEFT: overlay = pressedUpActiveImage_; base = activeBaseImage_; break; case PRESSED_ACTIVE_BOTH: overlay = pressedBothActiveImage_; base = activeBaseImage_; break; case PRESSED_ACTIVE_RIGHT: overlay = pressedDownActiveImage_; base = activeBaseImage_; break; } image = base; const int image_w = image->w; SDL_Rect const &loc = location(); SDL_Rect clipArea = loc; const int texty = loc.y + loc.h / 2 - textRect_.h / 2 + offset; int textx; clipArea.w += image_w + checkbox_horizontal_padding; textx = loc.x + image_w + checkbox_horizontal_padding / 2; SDL_Color button_color = font::BUTTON_COLOR; surface scalled_item; scalled_item.assign(scale_surface(itemImage_, 36, 36)); // blit_surface want neutral surfaces surface nitem = make_neutral_surface(scalled_item); surface nbase = make_neutral_surface(base); //TODO avoid magic numbers SDL_Rect r = sdl::create_rect(1, 1, 0, 0); blit_surface(nitem, NULL, nbase, &r); if (!overlay.null()) { surface noverlay = make_neutral_surface(overlay); blit_surface(noverlay, NULL, nbase, NULL); } // TODO for later reference // SDL_SetAlpha(nbase, SDL_SRCALPHA, SDL_ALPHA_OPAQUE); // SDL_SetAlpha(image, 0, 0); // // TODO might be needed. bg_restore(); image = nbase; video().blit_surface(loc.x, loc.y, image); clipArea.x += offset; clipArea.y += offset; clipArea.w -= 2 * offset; clipArea.h -= 2 * offset; font::draw_text(&video(), clipArea, font_size, button_color, label_, textx, texty); update_rect(loc); }
void tristate_button::draw_contents() { surface image(nullptr); surface overlay(nullptr); surface base = baseImage_; int offset = 0; switch (state_) { case UNINIT: return; case NORMAL: break; case TOUCHED_LEFT: overlay = touchedUpImage_; base = touchedBaseImage_; break; case TOUCHED_RIGHT: overlay = touchedDownImage_; base = touchedBaseImage_; break; case TOUCHED_BOTH_LEFT: case TOUCHED_BOTH_RIGHT: overlay = touchedBothImage_; base = touchedBaseImage_; break; case ACTIVE: // overlay = activeImage_; base = activeBaseImage_; break; case PRESSED_LEFT: base = activeBaseImage_; overlay = pressedUpImage_; break; case PRESSED_RIGHT: base = activeBaseImage_; overlay = pressedDownImage_; break; case PRESSED_BOTH: base = activeBaseImage_; overlay = pressedBothImage_; break; case PRESSED_ACTIVE_LEFT: overlay = pressedUpActiveImage_; base = activeBaseImage_; break; case PRESSED_ACTIVE_BOTH: overlay = pressedBothActiveImage_; base = activeBaseImage_; break; case PRESSED_ACTIVE_RIGHT: overlay = pressedDownActiveImage_; base = activeBaseImage_; break; } image = base; const int image_w = image->w; const SDL_Rect& loc = location(); SDL_Rect clipArea = loc; const int texty = loc.y + loc.h / 2 - textRect_.h / 2 + offset; int textx; clipArea.w += image_w + checkbox_horizontal_padding; textx = loc.x + image_w + checkbox_horizontal_padding / 2; color_t button_color = font::BUTTON_COLOR; surface scalled_item; scalled_item.assign(scale_surface(itemImage_, 36, 36)); surface nitem = make_neutral_surface(scalled_item); surface nbase = make_neutral_surface(base); //TODO avoid magic numbers SDL_Rect r {1, 1, 0, 0}; sdl_blit(nitem, nullptr, nbase, &r); if (!overlay.null()) { surface noverlay = make_neutral_surface(overlay); sdl_blit(noverlay, nullptr, nbase, nullptr); } bg_restore(); image = nbase; video().blit_surface(loc.x, loc.y, image); clipArea.x += offset; clipArea.y += offset; clipArea.w -= 2 * offset; clipArea.h -= 2 * offset; font::draw_text(&video(), clipArea, font_size, button_color, label_, textx, texty); }