mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1035168 - Use Map api to check if DataSourceSurfaces have data available in DrawTargetCairo. r=Bas
This commit is contained in:
parent
f64669331e
commit
4684fb8f31
@ -130,7 +130,9 @@ static cairo_user_data_key_t surfaceDataKey;
|
||||
void
|
||||
ReleaseData(void* aData)
|
||||
{
|
||||
static_cast<DataSourceSurface*>(aData)->Release();
|
||||
DataSourceSurface *data = static_cast<DataSourceSurface*>(aData);
|
||||
data->Unmap();
|
||||
data->Release();
|
||||
}
|
||||
|
||||
cairo_surface_t*
|
||||
@ -195,12 +197,17 @@ GetCairoSurfaceForSourceSurface(SourceSurface *aSurface, bool aExistingOnly = fa
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
DataSourceSurface::MappedSurface map;
|
||||
if (!data->Map(DataSourceSurface::READ, &map)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
cairo_surface_t* surf =
|
||||
cairo_image_surface_create_for_data(data->GetData(),
|
||||
cairo_image_surface_create_for_data(map.mData,
|
||||
GfxFormatToCairoFormat(data->GetFormat()),
|
||||
data->GetSize().width,
|
||||
data->GetSize().height,
|
||||
data->Stride());
|
||||
map.mStride);
|
||||
|
||||
// In certain scenarios, requesting larger than 8k image fails. Bug 803568
|
||||
// covers the details of how to run into it, but the full detailed
|
||||
@ -212,18 +219,22 @@ GetCairoSurfaceForSourceSurface(SourceSurface *aSurface, bool aExistingOnly = fa
|
||||
// a new surface with a stride that cairo chooses. No need to
|
||||
// set user data since we're not dependent on the original
|
||||
// data.
|
||||
return CopyToImageSurface(data->GetData(),
|
||||
data->GetSize(),
|
||||
data->Stride(),
|
||||
data->GetFormat());
|
||||
cairo_surface_t* result =
|
||||
CopyToImageSurface(map.mData,
|
||||
data->GetSize(),
|
||||
map.mStride,
|
||||
data->GetFormat());
|
||||
data->Unmap();
|
||||
return result;
|
||||
}
|
||||
data->Unmap();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
cairo_surface_set_user_data(surf,
|
||||
&surfaceDataKey,
|
||||
data.forget().drop(),
|
||||
ReleaseData);
|
||||
&surfaceDataKey,
|
||||
data.forget().drop(),
|
||||
ReleaseData);
|
||||
return surf;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user