randr: Allow panning to be disabled per axis
This commit is contained in:
parent
bad118ace6
commit
e5ab9e6662
|
@ -182,8 +182,8 @@ xf86RandR13Pan (xf86CrtcPtr crtc, int x, int y)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (! crtc->enabled ||
|
if (! crtc->enabled ||
|
||||||
crtc->panningTotalArea.x2 <= crtc->panningTotalArea.x1 ||
|
(crtc->panningTotalArea.x2 <= crtc->panningTotalArea.x1 &&
|
||||||
crtc->panningTotalArea.y2 <= crtc->panningTotalArea.y1)
|
crtc->panningTotalArea.y2 <= crtc->panningTotalArea.y1))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
newX = crtc->x;
|
newX = crtc->x;
|
||||||
|
@ -191,26 +191,36 @@ xf86RandR13Pan (xf86CrtcPtr crtc, int x, int y)
|
||||||
width = crtc->mode.HDisplay;
|
width = crtc->mode.HDisplay;
|
||||||
height = crtc->mode.VDisplay;
|
height = crtc->mode.VDisplay;
|
||||||
|
|
||||||
if (x >= crtc->panningTrackingArea.x1 && x < crtc->panningTrackingArea.x2 &&
|
if ((crtc->panningTrackingArea.x2 <= crtc->panningTrackingArea.x1 ||
|
||||||
y >= crtc->panningTrackingArea.y1 && y < crtc->panningTrackingArea.y2) {
|
(x >= crtc->panningTrackingArea.x1 && x < crtc->panningTrackingArea.x2)) &&
|
||||||
if (x < crtc->x + crtc->panningBorder[0])
|
(crtc->panningTrackingArea.y2 <= crtc->panningTrackingArea.y1 ||
|
||||||
newX = x - crtc->panningBorder[0];
|
(y >= crtc->panningTrackingArea.y1 && y < crtc->panningTrackingArea.y2))) {
|
||||||
if (x >= crtc->x + width - crtc->panningBorder[2])
|
if (crtc->panningTotalArea.x2 > crtc->panningTotalArea.x1) {
|
||||||
newX = x - width + crtc->panningBorder[2] + 1;
|
if (x < crtc->x + crtc->panningBorder[0])
|
||||||
if (y < crtc->y + crtc->panningBorder[1])
|
newX = x - crtc->panningBorder[0];
|
||||||
newY = y - crtc->panningBorder[1];
|
if (x >= crtc->x + width - crtc->panningBorder[2])
|
||||||
if (y >= crtc->y + height - crtc->panningBorder[3])
|
newX = x - width + crtc->panningBorder[2] + 1;
|
||||||
newY = y - height + crtc->panningBorder[3] + 1;
|
}
|
||||||
|
if (crtc->panningTotalArea.y2 > crtc->panningTotalArea.y1) {
|
||||||
|
if (y < crtc->y + crtc->panningBorder[1])
|
||||||
|
newY = y - crtc->panningBorder[1];
|
||||||
|
if (y >= crtc->y + height - crtc->panningBorder[3])
|
||||||
|
newY = y - height + crtc->panningBorder[3] + 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* Validate against [xy]1 after [xy]2, to be sure that results are > 0 for [xy]1 > 0 */
|
/* Validate against [xy]1 after [xy]2, to be sure that results are > 0 for [xy]1 > 0 */
|
||||||
if (newX >= crtc->panningTotalArea.x2 - width)
|
if (crtc->panningTotalArea.x2 > crtc->panningTotalArea.x1) {
|
||||||
newX = crtc->panningTotalArea.x2 - width - 1;
|
if (newX >= crtc->panningTotalArea.x2 - width)
|
||||||
if (newX < crtc->panningTotalArea.x1)
|
newX = crtc->panningTotalArea.x2 - width - 1;
|
||||||
newX = crtc->panningTotalArea.x1;
|
if (newX < crtc->panningTotalArea.x1)
|
||||||
if (newY >= crtc->panningTotalArea.y2 - height)
|
newX = crtc->panningTotalArea.x1;
|
||||||
newY = crtc->panningTotalArea.y2 - height - 1;
|
}
|
||||||
if (newY < crtc->panningTotalArea.y1)
|
if (crtc->panningTotalArea.y2 > crtc->panningTotalArea.y1) {
|
||||||
newY = crtc->panningTotalArea.y1;
|
if (newY >= crtc->panningTotalArea.y2 - height)
|
||||||
|
newY = crtc->panningTotalArea.y2 - height - 1;
|
||||||
|
if (newY < crtc->panningTotalArea.y1)
|
||||||
|
newY = crtc->panningTotalArea.y1;
|
||||||
|
}
|
||||||
if (newX != crtc->x || newY != crtc->y)
|
if (newX != crtc->x || newY != crtc->y)
|
||||||
xf86CrtcSetOrigin (crtc, newX, newY);
|
xf86CrtcSetOrigin (crtc, newX, newY);
|
||||||
}
|
}
|
||||||
|
@ -485,12 +495,16 @@ xf86RandR12ScreenSetSize (ScreenPtr pScreen,
|
||||||
/* Update panning information */
|
/* Update panning information */
|
||||||
for (c = 0; c < config->num_crtc; c++) {
|
for (c = 0; c < config->num_crtc; c++) {
|
||||||
xf86CrtcPtr crtc = config->crtc[c];
|
xf86CrtcPtr crtc = config->crtc[c];
|
||||||
if (crtc->panningTotalArea.x2 > crtc->panningTotalArea.x1 &&
|
if (crtc->panningTotalArea.x2 > crtc->panningTotalArea.x1 ||
|
||||||
crtc->panningTotalArea.y2 > crtc->panningTotalArea.y1) {
|
crtc->panningTotalArea.y2 > crtc->panningTotalArea.y1) {
|
||||||
crtc->panningTotalArea.x2 += width - pScreen->width;
|
if (crtc->panningTotalArea.x2 > crtc->panningTrackingArea.x1)
|
||||||
crtc->panningTotalArea.y2 += height - pScreen->height;
|
crtc->panningTotalArea.x2 += width - pScreen->width;
|
||||||
crtc->panningTrackingArea.x2 += width - pScreen->width;
|
if (crtc->panningTotalArea.y2 > crtc->panningTrackingArea.y1)
|
||||||
crtc->panningTrackingArea.y2 += height - pScreen->height;
|
crtc->panningTotalArea.y2 += height - pScreen->height;
|
||||||
|
if (crtc->panningTrackingArea.x2 > crtc->panningTrackingArea.x1)
|
||||||
|
crtc->panningTrackingArea.x2 += width - pScreen->width;
|
||||||
|
if (crtc->panningTrackingArea.y2 > crtc->panningTrackingArea.y1)
|
||||||
|
crtc->panningTrackingArea.y2 += height - pScreen->height;
|
||||||
xf86RandR13VerifyPanningArea (crtc, width, height);
|
xf86RandR13VerifyPanningArea (crtc, width, height);
|
||||||
xf86RandR13Pan (crtc, randrp->pointerX, randrp->pointerY);
|
xf86RandR13Pan (crtc, randrp->pointerX, randrp->pointerY);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue