void dialog_frame::draw_background() { if(auto_restore_) { clear_background(); restorer_ = new surface_restorer(&video_, dim_.exterior); } if (dialog_style_.blur_radius) { surface surf = ::get_surface_portion(video_.getSurface(), dim_.exterior); surf = blur_surface(surf, dialog_style_.blur_radius, false); sdl_blit(surf, NULL, video_.getSurface(), &dim_.exterior); } if(bg_ == NULL) { ERR_DP << "could not find dialog background '" << dialog_style_.panel << "'\n"; return; } for(int i = 0; i < dim_.interior.w; i += bg_->w) { for(int j = 0; j < dim_.interior.h; j += bg_->h) { SDL_Rect src = {0,0,0,0}; src.w = std::min(dim_.interior.w - i, bg_->w); src.h = std::min(dim_.interior.h - j, bg_->h); SDL_Rect dst = src; dst.x = dim_.interior.x + i; dst.y = dim_.interior.y + j; sdl_blit(bg_, &src, video_.getSurface(), &dst); } } }
static void display_render_frame(struct display *d) { int radius = 8; cairo_t *cr; d->shadow = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 128, 128); cr = cairo_create(d->shadow); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); cairo_set_source_rgba(cr, 0, 0, 0, 1); rounded_rect(cr, 16, 16, 112, 112, radius); cairo_fill(cr); cairo_destroy(cr); blur_surface(d->shadow, 64); d->active_frame = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 128, 128); cr = cairo_create(d->active_frame); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); cairo_set_source_rgba(cr, 0.8, 0.8, 0.4, 1); rounded_rect(cr, 16, 16, 112, 112, radius); cairo_fill(cr); cairo_destroy(cr); d->inactive_frame = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 128, 128); cr = cairo_create(d->inactive_frame); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); cairo_set_source_rgba(cr, 0.6, 0.6, 0.6, 1); rounded_rect(cr, 16, 16, 112, 112, radius); cairo_fill(cr); cairo_destroy(cr); }