[PATCH] mi: removed the invisible cursor and never realize this cursor.
Oliver McFadden
oliver.mcfadden at nokia.com
Fri May 21 01:19:50 PDT 2010
On Fri, 2010-05-21 at 08:44 +0200, Mcfadden Oliver (Nokia-D/Helsinki)
wrote:
> Previously we used an "invisible" cursor, however, this would still
> cause damage events and thus unnecessary redrawing. Now we never realize
> the cursor when it hasn't been defined (via XDefineCursor) or has been
> hidden (via XFixesHideCursor.)
>
> Improves performance when using software cursor sprites, primarily on
> devices where you do not want a visible cursor (touchscreen tablets,
> embedded devices, etc.)
>
> Signed-off-by: Oliver McFadden <oliver.mcfadden at nokia.com>
> ---
> v2 of [PATCH] mi: removed the invisible cursor sprite; use NullCursor instead.
>
> xfixes/cursor.c | 46 ++++------------------------------------------
> 1 files changed, 4 insertions(+), 42 deletions(-)
>
> diff --git a/xfixes/cursor.c b/xfixes/cursor.c
> index 52bdb27..a52f3a0 100644
> --- a/xfixes/cursor.c
> +++ b/xfixes/cursor.c
> @@ -58,7 +58,6 @@ static RESTYPE CursorClientType;
> static RESTYPE CursorHideCountType;
> static RESTYPE CursorWindowType;
> static CursorPtr CursorCurrent[MAXDEVICES];
> -static CursorPtr pInvisibleCursor = NULL;
>
> static int CursorScreenPrivateKeyIndex;
> static DevPrivateKey CursorScreenPrivateKey = &CursorScreenPrivateKeyIndex;
> @@ -135,7 +134,7 @@ CursorDisplayCursor (DeviceIntPtr pDev,
> CursorPtr pCursor)
> {
> CursorScreenPtr cs = GetCursorScreen(pScreen);
> - Bool ret;
> + Bool ret = TRUE;
> DisplayCursorProcPtr backupProc;
>
> Unwrap (cs, pScreen, DisplayCursor, backupProc);
> @@ -147,11 +146,9 @@ CursorDisplayCursor (DeviceIntPtr pDev,
> if (ConnectionInfo)
> CursorVisible = EnableCursor;
>
> - if (cs->pCursorHideCounts != NULL || !CursorVisible) {
> - ret = ((*pScreen->RealizeCursor)(pDev, pScreen, pInvisibleCursor) &&
> - (*pScreen->DisplayCursor) (pDev, pScreen, pInvisibleCursor));
> - } else {
> - ret = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor);
> + if (!cs->pCursorHideCounts && CursorVisible) {
> + ret = ((*pScreen->RealizeCursor)(pDev, pScreen, pCursor) &&
> + (*pScreen->DisplayCursor) (pDev, pScreen, pCursor));
> }
>
> if (pCursor != CursorCurrent[pDev->id])
> @@ -1031,37 +1028,6 @@ CursorFreeWindow (pointer data, XID id)
> return 1;
> }
>
> -static CursorPtr
> -createInvisibleCursor (void)
> -{
> - CursorPtr pCursor;
> - unsigned char *psrcbits, *pmaskbits;
> - CursorMetricRec cm;
> -
> - psrcbits = (unsigned char *) calloc(4, 1);
> - pmaskbits = (unsigned char *) calloc(4, 1);
> - if (psrcbits == NULL || pmaskbits == NULL) {
> - return NULL;
> - }
> -
> - cm.width = 1;
> - cm.height = 1;
> - cm.xhot = 0;
> - cm.yhot = 0;
> -
> - if (AllocARGBCursor(psrcbits, pmaskbits,
> - NULL, &cm,
> - 0, 0, 0,
> - 0, 0, 0,
> - &pCursor, serverClient, (XID)0) != Success)
> - return NullCursor;
> -
> - if (!AddResource(FakeClientID(0), RT_CURSOR, (pointer) pCursor))
> - return NullCursor;
> -
> - return pCursor;
> -}
> -
> Bool
> XFixesCursorInit (void)
> {
> @@ -1090,10 +1056,6 @@ XFixesCursorInit (void)
> CursorWindowType = CreateNewResourceType(CursorFreeWindow,
> "XFixesCursorWindow");
>
> - pInvisibleCursor = createInvisibleCursor();
> - if (pInvisibleCursor == NULL)
> - return BadAlloc;
> -
> return CursorClientType && CursorHideCountType && CursorWindowType;
> }
>
More information about the xorg-devel
mailing list