bool testGraphicsInUserSurface ( )
{
	DFBSurfaceDescription 	surfacedesc = { (DFBSurfaceDescriptionFlags) 0 };
	IDirectFBSurface 	*pUserSurface, *pSubSurface;
	DFBResult 	err;
	RECT stWndRect;

	surfacedesc.flags = (DFBSurfaceDescriptionFlags) (DSDESC_CAPS | DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT);
	surfacedesc.caps = (DFBSurfaceCapabilities) (DSCAPS_DOUBLE);
   surfacedesc.caps = (DFBSurfaceCapabilities) (surfacedesc.caps | DSCAPS_VIDEOONLY);
	surfacedesc.width = 720;
	surfacedesc.height = 576;
	surfacedesc.pixelformat = DSPF_ARGB;

	err = dfb->CreateSurface( dfb, &surfacedesc, &pUserSurface );

	if (err != DFB_OK)
	{
		printf ("CreateSurface failed: with errcode[%d]\n", err);
		return false;
	}

	stWndRect.Xval = 20;
	stWndRect.Yval = 20;
	stWndRect.width = 220;
	stWndRect.height = 60;

	drawImageInUserSurface ( pUserSurface, "logo.png", stWndRect );

	err = pUserSurface->GetSubSurface(pUserSurface, (DFBRectangle*)&stWndRect, &pSubSurface);
	if (err != DFB_OK)
	{
		printf("failed to get subsurface handle\n");
		pSubSurface = pUserSurface;
	}

   err = primary->Blit (primary, pSubSurface, NULL, 20, 20 );
	if (err != DFB_OK)
	{
		printf("failed to blit user surface over primary surface\n");
		return false;
	}

	return true;
}

