105 lines
4.1 KiB
C
105 lines
4.1 KiB
C
|
/*
|
||
|
* Copyright © 2010 Keith Packard
|
||
|
*
|
||
|
* Permission to use, copy, modify, distribute, and sell this software and its
|
||
|
* documentation for any purpose is hereby granted without fee, provided that
|
||
|
* the above copyright notice appear in all copies and that both that copyright
|
||
|
* notice and this permission notice appear in supporting documentation, and
|
||
|
* that the name of the copyright holders not be used in advertising or
|
||
|
* publicity pertaining to distribution of the software without specific,
|
||
|
* written prior permission. The copyright holders make no representations
|
||
|
* about the suitability of this software for any purpose. It is provided "as
|
||
|
* is" without express or implied warranty.
|
||
|
*
|
||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||
|
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||
|
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||
|
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||
|
* OF THIS SOFTWARE.
|
||
|
*/
|
||
|
|
||
|
#include "randrstr.h"
|
||
|
#include "swaprep.h"
|
||
|
|
||
|
void
|
||
|
RRCrtcSpriteTransformSet(RRCrtcPtr crtc,
|
||
|
PictTransform *position_transform,
|
||
|
PictTransform *image_transform,
|
||
|
struct pict_f_transform *f_position_transform,
|
||
|
struct pict_f_transform *f_image_transform)
|
||
|
{
|
||
|
ScreenPtr pScreen;
|
||
|
rrScrPrivPtr pScrPriv;
|
||
|
|
||
|
pScreen = crtc->pScreen;
|
||
|
pScrPriv = rrGetScrPriv(pScreen);
|
||
|
crtc->client_sprite_position_transform = *position_transform;
|
||
|
crtc->client_sprite_image_transform = *image_transform;
|
||
|
crtc->client_sprite_f_position_transform = *f_position_transform;
|
||
|
crtc->client_sprite_f_image_transform = *f_image_transform;
|
||
|
if (pScrPriv->rrSetCrtcSpriteTransform)
|
||
|
(*pScrPriv->rrSetCrtcSpriteTransform) (pScreen, crtc,
|
||
|
&crtc->client_sprite_f_position_transform,
|
||
|
&crtc->client_sprite_f_image_transform);
|
||
|
}
|
||
|
|
||
|
int
|
||
|
ProcRRSetCrtcSpriteTransform (ClientPtr client)
|
||
|
{
|
||
|
REQUEST(xRRSetCrtcSpriteTransformReq);
|
||
|
RRCrtcPtr crtc;
|
||
|
PictTransform position_transform, image_transform;
|
||
|
struct pixman_f_transform f_position_transform, f_image_transform;
|
||
|
|
||
|
REQUEST_AT_LEAST_SIZE(xRRSetCrtcSpriteTransformReq);
|
||
|
VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
|
||
|
|
||
|
PictTransform_from_xRenderTransform (&position_transform, &stuff->positionTransform);
|
||
|
PictTransform_from_xRenderTransform (&image_transform, &stuff->imageTransform);
|
||
|
pixman_f_transform_from_pixman_transform (&f_position_transform, &position_transform);
|
||
|
pixman_f_transform_from_pixman_transform (&f_image_transform, &image_transform);
|
||
|
|
||
|
RRCrtcSpriteTransformSet (crtc, &position_transform, &image_transform,
|
||
|
&f_position_transform, &f_image_transform);
|
||
|
return Success;
|
||
|
}
|
||
|
|
||
|
#define CrtcSpriteTransformExtra (SIZEOF(xRRGetCrtcSpriteTransformReply) - 32)
|
||
|
|
||
|
int
|
||
|
ProcRRGetCrtcSpriteTransform (ClientPtr client)
|
||
|
{
|
||
|
REQUEST(xRRGetCrtcSpriteTransformReq);
|
||
|
xRRGetCrtcSpriteTransformReply *reply;
|
||
|
RRCrtcPtr crtc;
|
||
|
int n;
|
||
|
char *extra;
|
||
|
|
||
|
REQUEST_SIZE_MATCH (xRRGetCrtcSpriteTransformReq);
|
||
|
VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
|
||
|
|
||
|
reply = malloc(sizeof (xRRGetCrtcSpriteTransformReply));
|
||
|
if (!reply)
|
||
|
return BadAlloc;
|
||
|
|
||
|
extra = (char *) (reply + 1);
|
||
|
reply->type = X_Reply;
|
||
|
reply->sequenceNumber = client->sequence;
|
||
|
reply->length = bytes_to_int32(CrtcSpriteTransformExtra);
|
||
|
|
||
|
xRenderTransform_from_PictTransform(&reply->positionTransform, &crtc->client_sprite_position_transform);
|
||
|
xRenderTransform_from_PictTransform(&reply->imageTransform, &crtc->client_sprite_image_transform);
|
||
|
|
||
|
if (client->swapped) {
|
||
|
swaps (&reply->sequenceNumber, n);
|
||
|
swapl (&reply->length, n);
|
||
|
SwapLongs((CARD32 *) &reply->positionTransform, bytes_to_int32(sizeof(xRenderTransform)));
|
||
|
SwapLongs((CARD32 *) &reply->imageTransform, bytes_to_int32(sizeof(xRenderTransform)));
|
||
|
}
|
||
|
WriteToClient (client, sizeof (xRRGetCrtcSpriteTransformReply), (char *) reply);
|
||
|
free(reply);
|
||
|
return Success;
|
||
|
}
|