mirror of
https://github.com/mpv-player/mpv
synced 2024-12-25 00:02:13 +00:00
vo_xv: avoid clearing too much on resize
vo_xv set the "use_fs" parameter to vo_x11_clearwindow_part(). This meant it always used the whole screen size to calculate the area to clear. I can't see why overriding the vo->dwidth/dheight values would ever be the right thing to do (if in fullscreen they should be set to match that), so remove the use_fs parameter and always use the dwidth/dheight values in the function. Also delete code drawing back borders in vo_xv_draw colorkey. That should already happen in vo_x11_clearwindow_part(); if it doesn't then things need to be fixed anyway because colorkey code only ran in fullscreen mode (but borders must work in window mode too).
This commit is contained in:
parent
9298acdd60
commit
aeafa7a2b4
@ -103,7 +103,7 @@ static void check_events(void)
|
||||
vo_x11_clearwindow(mDisplay, vo_window);
|
||||
else if (ret & VO_EVENT_EXPOSE)
|
||||
vo_x11_clearwindow_part(mDisplay, vo_window, myximage->width,
|
||||
myximage->height, 0);
|
||||
myximage->height);
|
||||
if (ret & VO_EVENT_EXPOSE && int_pause)
|
||||
flip_page();
|
||||
}
|
||||
|
@ -187,7 +187,7 @@ static void resize(struct vo *vo)
|
||||
calc_src_dst_rects(vo, ctx->image_width, ctx->image_height, &ctx->src_rect,
|
||||
&ctx->dst_rect, NULL, NULL);
|
||||
struct vo_rect *dst = &ctx->dst_rect;
|
||||
vo_x11_clearwindow_part(vo, vo->x11->window, dst->width, dst->height, 1);
|
||||
vo_x11_clearwindow_part(vo, vo->x11->window, dst->width, dst->height);
|
||||
vo_xv_draw_colorkey(vo, dst->left, dst->top, dst->width, dst->height);
|
||||
}
|
||||
|
||||
|
@ -1129,18 +1129,17 @@ final:
|
||||
}
|
||||
|
||||
void vo_x11_clearwindow_part(struct vo *vo, Window vo_window,
|
||||
int img_width, int img_height, int use_fs)
|
||||
int img_width, int img_height)
|
||||
{
|
||||
struct vo_x11_state *x11 = vo->x11;
|
||||
struct MPOpts *opts = vo->opts;
|
||||
Display *mDisplay = vo->x11->display;
|
||||
int u_dheight, u_dwidth, left_ov, left_ov2;
|
||||
|
||||
if (x11->f_gc == None)
|
||||
return;
|
||||
|
||||
u_dheight = use_fs ? opts->vo_screenheight : vo->dheight;
|
||||
u_dwidth = use_fs ? opts->vo_screenwidth : vo->dwidth;
|
||||
u_dheight = vo->dheight;
|
||||
u_dwidth = vo->dwidth;
|
||||
if ((u_dheight <= img_height) && (u_dwidth <= img_width))
|
||||
return;
|
||||
|
||||
@ -2302,7 +2301,6 @@ int vo_xv_init_colorkey(struct vo *vo)
|
||||
void vo_xv_draw_colorkey(struct vo *vo, int32_t x, int32_t y,
|
||||
int32_t w, int32_t h)
|
||||
{
|
||||
struct MPOpts *opts = vo->opts;
|
||||
struct vo_x11_state *x11 = vo->x11;
|
||||
if( x11->xv_ck_info.method == CK_METHOD_MANUALFILL ||
|
||||
x11->xv_ck_info.method == CK_METHOD_BACKGROUND )//less tearing than XClearWindow()
|
||||
@ -2312,30 +2310,6 @@ void vo_xv_draw_colorkey(struct vo *vo, int32_t x, int32_t y,
|
||||
x, y,
|
||||
w, h );
|
||||
}
|
||||
|
||||
/* draw black bars if needed */
|
||||
/* TODO! move this to vo_x11_clearwindow_part() */
|
||||
if ( vo_fs )
|
||||
{
|
||||
XSetForeground(x11->display, x11->vo_gc, 0 );
|
||||
/* making non-overlap fills, requires 8 checks instead of 4 */
|
||||
if ( y > 0 )
|
||||
XFillRectangle(x11->display, x11->window, x11->vo_gc,
|
||||
0, 0,
|
||||
opts->vo_screenwidth, y);
|
||||
if (x > 0)
|
||||
XFillRectangle(x11->display, x11->window, x11->vo_gc,
|
||||
0, 0,
|
||||
x, opts->vo_screenheight);
|
||||
if (x + w < opts->vo_screenwidth)
|
||||
XFillRectangle(x11->display, x11->window, x11->vo_gc,
|
||||
x + w, 0,
|
||||
opts->vo_screenwidth, opts->vo_screenheight);
|
||||
if (y + h < opts->vo_screenheight)
|
||||
XFillRectangle(x11->display, x11->window, x11->vo_gc,
|
||||
0, y + h,
|
||||
opts->vo_screenwidth, opts->vo_screenheight);
|
||||
}
|
||||
}
|
||||
|
||||
/** \brief Tests if a valid argument for the ck suboption was given. */
|
||||
|
@ -137,7 +137,7 @@ void vo_x11_create_vo_window(struct vo *vo, XVisualInfo *vis,
|
||||
int x, int y, unsigned int width, unsigned int height, int flags,
|
||||
Colormap col_map, const char *classname, const char *title);
|
||||
void vo_x11_clearwindow_part(struct vo *vo, Window vo_window,
|
||||
int img_width, int img_height, int use_fs);
|
||||
int img_width, int img_height);
|
||||
void vo_x11_clearwindow(struct vo *vo, Window vo_window);
|
||||
void vo_x11_ontop(struct vo *vo);
|
||||
void vo_x11_border(struct vo *vo);
|
||||
|
Loading…
Reference in New Issue
Block a user