Exemplo n.º 1
0
void sdlinput_close(void) {
  if (sdlinput_cursor)
    pointer_free(-1,sdlinput_cursor);
#ifdef CONFIG_SDLSKIN
  if (sdlinput_map)
    g_free(sdlinput_map);
  sdlinput_mapsize = 0;
#endif
}
Exemplo n.º 2
0
static BOOL update_pointer_new(rdpContext* context,
                               const POINTER_NEW_UPDATE* pointer_new)
{
	rdpPointer* pointer;
	rdpCache* cache;

	if (!context || !pointer_new)
		return FALSE;

	cache = context->cache;
	pointer = Pointer_Alloc(context);

	if (!pointer)
		return FALSE;

	pointer->xorBpp = pointer_new->xorBpp;
	pointer->xPos = pointer_new->colorPtrAttr.xPos;
	pointer->yPos = pointer_new->colorPtrAttr.yPos;
	pointer->width = pointer_new->colorPtrAttr.width;
	pointer->height = pointer_new->colorPtrAttr.height;
	pointer->lengthAndMask = pointer_new->colorPtrAttr.lengthAndMask;
	pointer->lengthXorMask = pointer_new->colorPtrAttr.lengthXorMask;

	if (pointer->lengthAndMask)
	{
		pointer->andMaskData = (BYTE*) malloc(pointer->lengthAndMask);

		if (!pointer->andMaskData)
			goto out_fail;

		CopyMemory(pointer->andMaskData, pointer_new->colorPtrAttr.andMaskData,
		           pointer->lengthAndMask);
	}

	if (pointer->lengthXorMask)
	{
		pointer->xorMaskData = (BYTE*) malloc(pointer->lengthXorMask);

		if (!pointer->xorMaskData)
			goto out_fail;

		CopyMemory(pointer->xorMaskData, pointer_new->colorPtrAttr.xorMaskData,
		           pointer->lengthXorMask);
	}

	if (!pointer->New(context, pointer))
		goto out_fail;

	if (!pointer_cache_put(cache->pointer, pointer_new->colorPtrAttr.cacheIndex,
	                       pointer))
		goto out_fail;

	return pointer->Set(context, pointer);
out_fail:
	pointer_free(context, pointer);
	return FALSE;
}
Exemplo n.º 3
0
static BOOL update_pointer_color(rdpContext* context,
                                 const POINTER_COLOR_UPDATE* pointer_color)
{
	rdpPointer* pointer;
	rdpCache* cache = context->cache;
	pointer = Pointer_Alloc(context);

	if (pointer != NULL)
	{
		pointer->xorBpp = 24;
		pointer->xPos = pointer_color->xPos;
		pointer->yPos = pointer_color->yPos;
		pointer->width = pointer_color->width;
		pointer->height = pointer_color->height;
		pointer->lengthAndMask = pointer_color->lengthAndMask;
		pointer->lengthXorMask = pointer_color->lengthXorMask;

		if (pointer->lengthAndMask && pointer_color->xorMaskData)
		{
			pointer->andMaskData = (BYTE*) malloc(pointer->lengthAndMask);

			if (!pointer->andMaskData)
				goto out_fail;

			CopyMemory(pointer->andMaskData, pointer_color->andMaskData,
			           pointer->lengthAndMask);
		}

		if (pointer->lengthXorMask && pointer_color->xorMaskData)
		{
			pointer->xorMaskData = (BYTE*) malloc(pointer->lengthXorMask);

			if (!pointer->xorMaskData)
				goto out_fail;

			CopyMemory(pointer->xorMaskData, pointer_color->xorMaskData,
			           pointer->lengthXorMask);
		}

		if (!pointer->New(context, pointer))
			goto out_fail;

		if (!pointer_cache_put(cache->pointer, pointer_color->cacheIndex, pointer))
			goto out_fail;

		return pointer->Set(context, pointer);
	}

	return FALSE;
out_fail:
	pointer_free(context, pointer);
	return FALSE;
}
Exemplo n.º 4
0
BOOL pointer_cache_put(rdpPointerCache* pointer_cache, UINT32 index,
                       rdpPointer* pointer)
{
	rdpPointer* prevPointer;

	if (index >= pointer_cache->cacheSize)
	{
		WLog_ERR(TAG,  "invalid pointer index:%"PRIu32"", index);
		return FALSE;
	}

	prevPointer = pointer_cache->entries[index];
	pointer_free(pointer_cache->update->context, prevPointer);
	pointer_cache->entries[index] = pointer;
	return TRUE;
}
Exemplo n.º 5
0
void pointer_cache_free(rdpPointerCache* pointer_cache)
{
	if (pointer_cache != NULL)
	{
		UINT32 i;
		rdpPointer* pointer;

		for (i = 0; i < pointer_cache->cacheSize; i++)
		{
			pointer = pointer_cache->entries[i];
			pointer_free(pointer_cache->update->context, pointer);
		}

		free(pointer_cache->entries);
		free(pointer_cache);
	}
}
Exemplo n.º 6
0
 /*! Sets the underlying pointer to the specified value, freeing the
  * previous pointer and taking ownership of the specified one. */
 void pointer_reset(T * p = NULL) noexcept
 {
     pointer_free(pointer);
     pointer = p;
 }