DFBResult IImageProvider_Real::RenderTo( CoreSurface *destination, const DFBRectangle *rect ) { DFBResult ret; IDirectFBSurface *surface; D_MAGIC_ASSERT( obj, ImageProviderDispatch ); DIRECT_ALLOCATE_INTERFACE( surface, IDirectFBSurface ); if (!surface) return (DFBResult) D_OOM(); ret = IDirectFBSurface_Construct( surface, NULL, NULL, NULL, NULL, destination, DSCAPS_NONE, core, obj->idirectfb ); if (ret) return ret; ret = obj->provider->RenderTo( obj->provider, surface, rect ); surface->Release( surface ); return ret; }
DFBResult IDirectFBSurface_Layer_Construct( IDirectFBSurface *thiz, IDirectFBSurface *parent, DFBRectangle *wanted, DFBRectangle *granted, CoreLayerRegion *region, DFBSurfaceCapabilities caps, CoreDFB *core ) { DFBResult ret; CoreSurface *surface; DIRECT_ALLOCATE_INTERFACE_DATA(thiz, IDirectFBSurface_Layer); D_DEBUG_AT( Surface, "%s( %p )\n", __FUNCTION__, thiz ); if (dfb_layer_region_ref( region )) return DFB_FUSION; ret = dfb_layer_region_get_surface( region, &surface ); if (ret) { dfb_layer_region_unref( region ); DIRECT_DEALLOCATE_INTERFACE(thiz); return ret; } ret = IDirectFBSurface_Construct( thiz, parent, wanted, granted, NULL, surface, surface->config.caps | caps, core ); if (ret) { dfb_surface_unref( surface ); dfb_layer_region_unref( region ); return ret; } dfb_surface_unref( surface ); data->region = region; thiz->Release = IDirectFBSurface_Layer_Release; thiz->Flip = IDirectFBSurface_Layer_Flip; thiz->GetSubSurface = IDirectFBSurface_Layer_GetSubSurface; return DFB_OK; }