void menu::style::draw_row_bg(menu& menu_ref, const size_t /*row_index*/, const SDL_Rect& rect, ROW_TYPE type) { menu_ref.bg_restore(rect); int rgb = 0; double alpha = 0.0; switch(type) { case NORMAL_ROW: rgb = normal_rgb_; alpha = normal_alpha_; break; case SELECTED_ROW: rgb = selected_rgb_; alpha = selected_alpha_; break; case HEADING_ROW: rgb = heading_rgb_; alpha = heading_alpha_; break; } #ifdef SDL_GPU sdl::draw_solid_tinted_rectangle(rect.x, rect.y, rect.w, rect.h, (rgb&0xff0000) >> 16,(rgb&0xff00) >> 8,rgb&0xff,alpha, menu_ref.video().getSurface()); sdl::fill_rect(menu_ref.video(), rect, (rgb&0xff0000) >> 16, (rgb&0xff00) >> 8, rgb&0xff, alpha); #else sdl::draw_solid_tinted_rectangle(rect.x, rect.y, rect.w, rect.h, (rgb&0xff0000) >> 16,(rgb&0xff00) >> 8,rgb&0xff,alpha, menu_ref.video().getSurface()); #endif }
void menu::imgsel_style::draw_row_bg(menu& menu_ref, const size_t row_index, const SDL_Rect& rect, ROW_TYPE type) { if(type == SELECTED_ROW && has_background_ && !load_failed_) { if(bg_cache_.width != rect.w || bg_cache_.height != rect.h) { //draw scaled background image //scale image each time (to prevent loss of quality) bg_cache_.surf = scale_surface(img_map_["background"], rect.w, rect.h); bg_cache_.width = rect.w; bg_cache_.height = rect.h; } SDL_Rect clip = rect; menu_ref.video().blit_surface(rect.x,rect.y,bg_cache_.surf,nullptr,&clip); } else { style::draw_row_bg(menu_ref, row_index, rect, type); } }
void menu::imgsel_style::draw_row(menu& menu_ref, const size_t row_index, const SDL_Rect& rect, ROW_TYPE type) { if(!load_failed_) { //draw item inside style::draw_row(menu_ref, row_index, rect, type); if(type == SELECTED_ROW) { // draw border surface image; SDL_Rect area; SDL_Rect clip = rect; area.x = rect.x; area.y = rect.y; image = img_map_["border-top"]; area.x = rect.x; area.y = rect.y; do { menu_ref.video().blit_surface(area.x,area.y,image,nullptr,&clip); area.x += image->w; } while( area.x < rect.x + rect.w ); image = img_map_["border-left"]; area.x = rect.x; area.y = rect.y; do { menu_ref.video().blit_surface(area.x,area.y,image,nullptr,&clip); area.y += image->h; } while( area.y < rect.y + rect.h ); image = img_map_["border-right"]; area.x = rect.x + rect.w - thickness_; area.y = rect.y; do { menu_ref.video().blit_surface(area.x,area.y,image,nullptr,&clip); area.y += image->h; } while( area.y < rect.y + rect.h ); image = img_map_["border-bottom"]; area.x = rect.x; area.y = rect.y + rect.h - thickness_; do { menu_ref.video().blit_surface(area.x,area.y,image,nullptr,&clip); area.x += image->w; } while( area.x < rect.x + rect.w ); image = img_map_["border-topleft"]; area.x = rect.x; area.y = rect.y; menu_ref.video().blit_surface(area.x,area.y,image); image = img_map_["border-topright"]; area.x = rect.x + rect.w - image->w; area.y = rect.y; menu_ref.video().blit_surface(area.x,area.y,image); image = img_map_["border-botleft"]; area.x = rect.x; area.y = rect.y + rect.h - image->h; menu_ref.video().blit_surface(area.x,area.y,image); image = img_map_["border-botright"]; area.x = rect.x + rect.w - image->w; area.y = rect.y + rect.h - image->h; menu_ref.video().blit_surface(area.x,area.y,image); } } else { //default drawing style::draw_row(menu_ref, row_index, rect, type); } }