void ass_synth_blur(ASS_SynthPriv *priv_blur, int opaque_box, int be, double blur_radius, Bitmap *bm_g, Bitmap *bm_o) { if(blur_radius > 0.0 || be){ if (bm_o && !resize_tmp(priv_blur, bm_o->w, bm_o->h)) return; if ((!bm_o || opaque_box) && !resize_tmp(priv_blur, bm_g->w, bm_g->h)) return; } // Apply box blur (multiple passes, if requested) if (be) { uint16_t* tmp = priv_blur->tmp; if (bm_o) { unsigned passes = be; unsigned w = bm_o->w; unsigned h = bm_o->h; unsigned stride = bm_o->stride; unsigned char *buf = bm_o->buffer; if(w && h){ while(passes--){ memset(tmp, 0, stride * 2); if(w < 16){ be_blur_c(buf, w, h, stride, tmp); }else{ priv_blur->be_blur_func(buf, w, h, stride, tmp); } } } } if (!bm_o || opaque_box) { unsigned passes = be; unsigned w = bm_g->w; unsigned h = bm_g->h; unsigned stride = bm_g->stride; unsigned char *buf = bm_g->buffer; if(w && h){ while(passes--){ memset(tmp, 0, stride * 2); priv_blur->be_blur_func(buf, w, h, stride, tmp); } } } } // Apply gaussian blur if (blur_radius > 0.0 && generate_tables(priv_blur, blur_radius)) { if (bm_o) ass_gauss_blur(bm_o->buffer, priv_blur->tmp, bm_o->w, bm_o->h, bm_o->stride, priv_blur->gt2, priv_blur->g_r, priv_blur->g_w); if (!bm_o || opaque_box) ass_gauss_blur(bm_g->buffer, priv_blur->tmp, bm_g->w, bm_g->h, bm_g->stride, priv_blur->gt2, priv_blur->g_r, priv_blur->g_w); } }
static void do_maximize(WWindow *wwin, int dir, int flag, int *saved_size, int max_size) { WResizeTmp rtmp; if(wwin->flags&flag){ calcresize_window(wwin, dir, ANY, *saved_size, &rtmp); resize_tmp(&rtmp); wwin->flags&=~flag; }else{ *saved_size=wwin_size(wwin, dir); calcresize_window(wwin, dir, ANY, max_size, &rtmp); resize_tmp(&rtmp); wwin->flags|=flag; } }
void resize(WWindow *wwin, int delta, int primn, bool settmp) { WScreen *scr=SCREEN_OF(wwin); int s, old; int dir=rtmp.dir; if(XOR_RESIZE) res_draw_rubberband(scr, wwin->geom); tmpsize+=delta; s=calc_resize(SCREEN_OF(wwin), tmpsize, dir); old=rtmp.winsizetmp; calcresize_window(wwin, dir, primn, s, &rtmp); if(settmp) tmpsize=rtmp.winsizetmp; res_draw_moveres(scr, wwin); if(XOR_RESIZE) res_draw_rubberband(scr, wwin->geom); else resize_tmp(&rtmp); }
void end_resize(WWindow *wwin) { WScreen *scr=SCREEN_OF(wwin); if(!resize_mode) return; resize_mode=FALSE; reset_timer(&resize_timer); if(XOR_RESIZE){ res_draw_rubberband(scr, wwin->geom); resize_tmp(&rtmp); XUngrabServer(wglobal.dpy); } XUnmapWindow(wglobal.dpy, scr->grdata.moveres_win); }
void set_width(WWindow *wwin, uint w) { WResizeTmp rtmp; calcresize_window(wwin, HORIZONTAL, ANY, w, &rtmp); resize_tmp(&rtmp); }
void set_height(WWindow *wwin, uint h) { WResizeTmp rtmp; calcresize_window(wwin, VERTICAL, ANY, h, &rtmp); resize_tmp(&rtmp); }