Handle filter widths in xf86Rotate
This commit is contained in:
parent
ddc8466137
commit
ee6326a6b8
|
@ -309,6 +309,8 @@ struct _xf86Crtc {
|
||||||
PictFilterPtr filter;
|
PictFilterPtr filter;
|
||||||
xFixed *params;
|
xFixed *params;
|
||||||
int nparams;
|
int nparams;
|
||||||
|
int filter_width;
|
||||||
|
int filter_height;
|
||||||
Bool transform_in_use;
|
Bool transform_in_use;
|
||||||
/**
|
/**
|
||||||
* Bounding box in screen space
|
* Bounding box in screen space
|
||||||
|
|
|
@ -118,6 +118,10 @@ xf86RotateCrtcRedisplay (xf86CrtcPtr crtc, RegionPtr region)
|
||||||
BoxRec dst_box;
|
BoxRec dst_box;
|
||||||
|
|
||||||
dst_box = *b;
|
dst_box = *b;
|
||||||
|
dst_box.x1 -= crtc->filter_width >> 2;
|
||||||
|
dst_box.x2 += crtc->filter_width >> 2;
|
||||||
|
dst_box.y1 -= crtc->filter_width >> 2;
|
||||||
|
dst_box.y2 += crtc->filter_width >> 2;
|
||||||
PictureTransformBounds (&dst_box, &crtc->framebuffer_to_crtc);
|
PictureTransformBounds (&dst_box, &crtc->framebuffer_to_crtc);
|
||||||
CompositePicture (PictOpSrc,
|
CompositePicture (PictOpSrc,
|
||||||
src, NULL, dst,
|
src, NULL, dst,
|
||||||
|
@ -322,6 +326,11 @@ xf86CrtcRotate (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation)
|
||||||
/* if this is called during ScreenInit() we don't have pScrn->pScreen yet */
|
/* if this is called during ScreenInit() we don't have pScrn->pScreen yet */
|
||||||
ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
|
ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
|
||||||
PictTransform crtc_to_fb, fb_to_crtc;
|
PictTransform crtc_to_fb, fb_to_crtc;
|
||||||
|
xFixed *new_params = NULL;
|
||||||
|
int new_nparams = 0;
|
||||||
|
PictFilterPtr new_filter = NULL;
|
||||||
|
int new_width = 0;
|
||||||
|
int new_height = 0;
|
||||||
|
|
||||||
PictureTransformInitIdentity (&crtc_to_fb);
|
PictureTransformInitIdentity (&crtc_to_fb);
|
||||||
PictureTransformInitIdentity (&fb_to_crtc);
|
PictureTransformInitIdentity (&fb_to_crtc);
|
||||||
|
@ -385,9 +394,6 @@ xf86CrtcRotate (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation)
|
||||||
#ifdef RANDR_12_INTERFACE
|
#ifdef RANDR_12_INTERFACE
|
||||||
if (crtc->randr_crtc)
|
if (crtc->randr_crtc)
|
||||||
{
|
{
|
||||||
xFixed *new_params = NULL;
|
|
||||||
int new_nparams = 0;
|
|
||||||
PictFilterPtr new_filter = NULL;
|
|
||||||
|
|
||||||
RRTransformPtr transform = RRCrtcGetTransform (crtc->randr_crtc);
|
RRTransformPtr transform = RRCrtcGetTransform (crtc->randr_crtc);
|
||||||
if (transform)
|
if (transform)
|
||||||
|
@ -405,11 +411,6 @@ xf86CrtcRotate (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation)
|
||||||
PictureTransformMultiply (&crtc_to_fb, &transform->transform, &crtc_to_fb);
|
PictureTransformMultiply (&crtc_to_fb, &transform->transform, &crtc_to_fb);
|
||||||
PictureTransformMultiply (&fb_to_crtc, &fb_to_crtc, &transform->inverse);
|
PictureTransformMultiply (&fb_to_crtc, &fb_to_crtc, &transform->inverse);
|
||||||
}
|
}
|
||||||
if (crtc->params)
|
|
||||||
xfree (crtc->params);
|
|
||||||
crtc->params = new_params;
|
|
||||||
crtc->nparams = new_nparams;
|
|
||||||
crtc->filter = new_filter;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
|
@ -418,12 +419,19 @@ xf86CrtcRotate (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation)
|
||||||
*/
|
*/
|
||||||
if (PictureTransformIsIdentity (&crtc_to_fb))
|
if (PictureTransformIsIdentity (&crtc_to_fb))
|
||||||
{
|
{
|
||||||
crtc->transform_in_use = FALSE;
|
PictureTransformInitTranslate (&crtc_to_fb,
|
||||||
PictureTransformInitTranslate (&crtc->crtc_to_framebuffer,
|
|
||||||
F (-crtc->x), F (-crtc->y));
|
F (-crtc->x), F (-crtc->y));
|
||||||
PictureTransformInitTranslate (&crtc->framebuffer_to_crtc,
|
PictureTransformInitTranslate (&fb_to_crtc,
|
||||||
F ( crtc->x), F ( crtc->y));
|
F ( crtc->x), F ( crtc->y));
|
||||||
xf86RotateDestroy (crtc);
|
xf86RotateDestroy (crtc);
|
||||||
|
crtc->transform_in_use = FALSE;
|
||||||
|
if (new_params)
|
||||||
|
xfree (new_params);
|
||||||
|
new_params = NULL;
|
||||||
|
new_nparams = 0;
|
||||||
|
new_filter = NULL;
|
||||||
|
new_width = 0;
|
||||||
|
new_height = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -494,17 +502,26 @@ xf86CrtcRotate (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation)
|
||||||
NULL,
|
NULL,
|
||||||
old_width,
|
old_width,
|
||||||
old_height);
|
old_height);
|
||||||
|
if (new_params)
|
||||||
|
xfree (new_params);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
crtc->transform_in_use = TRUE;
|
crtc->transform_in_use = TRUE;
|
||||||
crtc->crtc_to_framebuffer = crtc_to_fb;
|
|
||||||
crtc->framebuffer_to_crtc = fb_to_crtc;
|
|
||||||
crtc->bounds.x1 = 0;
|
|
||||||
crtc->bounds.x2 = crtc->mode.HDisplay;
|
|
||||||
crtc->bounds.y1 = 0;
|
|
||||||
crtc->bounds.y2 = crtc->mode.VDisplay;
|
|
||||||
PictureTransformBounds (&crtc->bounds, &crtc_to_fb);
|
|
||||||
}
|
}
|
||||||
|
crtc->crtc_to_framebuffer = crtc_to_fb;
|
||||||
|
crtc->framebuffer_to_crtc = fb_to_crtc;
|
||||||
|
if (crtc->params)
|
||||||
|
xfree (crtc->params);
|
||||||
|
crtc->params = new_params;
|
||||||
|
crtc->nparams = new_nparams;
|
||||||
|
crtc->filter = new_filter;
|
||||||
|
crtc->filter_width = new_width;
|
||||||
|
crtc->filter_height = new_height;
|
||||||
|
crtc->bounds.x1 = 0;
|
||||||
|
crtc->bounds.x2 = crtc->mode.HDisplay;
|
||||||
|
crtc->bounds.y1 = 0;
|
||||||
|
crtc->bounds.y2 = crtc->mode.VDisplay;
|
||||||
|
PictureTransformBounds (&crtc->bounds, &crtc_to_fb);
|
||||||
|
|
||||||
/* All done */
|
/* All done */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
Loading…
Reference in New Issue