Beispiel #1
0
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);
    }
}
Beispiel #2
0
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;
	}
}
Beispiel #3
0
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);
}
Beispiel #4
0
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);
}
Beispiel #5
0
void set_width(WWindow *wwin, uint w)
{
	WResizeTmp rtmp;
	calcresize_window(wwin, HORIZONTAL, ANY, w, &rtmp);
	resize_tmp(&rtmp);
}
Beispiel #6
0
void set_height(WWindow *wwin, uint h)
{
	WResizeTmp rtmp;
	calcresize_window(wwin, VERTICAL, ANY, h, &rtmp);
	resize_tmp(&rtmp);
}