Kaydet (Commit) d3e888cf authored tarafından Dmitriy Shilin's avatar Dmitriy Shilin Kaydeden (comit) Mike Kaganski

tdf#107792 vcl/win: simplify WinSalInstance::CreateVirtualDevice

Change-Id: I7e2fd41f8c4359374af143aaf7544bb61a8878c7
Reviewed-on: https://gerrit.libreoffice.org/67189Reviewed-by: 's avatarMike Kaganski <mike.kaganski@collabora.com>
Tested-by: 's avatarMike Kaganski <mike.kaganski@collabora.com>
üst 20c4c3ac
...@@ -78,25 +78,11 @@ std::unique_ptr<SalVirtualDevice> WinSalInstance::CreateVirtualDevice( SalGraphi ...@@ -78,25 +78,11 @@ std::unique_ptr<SalVirtualDevice> WinSalInstance::CreateVirtualDevice( SalGraphi
const SystemGraphicsData* pData ) const SystemGraphicsData* pData )
{ {
WinSalGraphics* pGraphics = static_cast<WinSalGraphics*>(pSGraphics); WinSalGraphics* pGraphics = static_cast<WinSalGraphics*>(pSGraphics);
HDC hDC = nullptr;
sal_uInt16 nBitCount;
switch (eFormat)
{
case DeviceFormat::BITMASK:
nBitCount = 1;
break;
default:
nBitCount = 0;
break;
}
HDC hDC = nullptr;
HBITMAP hBmp = nullptr;
if( pData ) if( pData )
{ {
hDC = (pData->hDC) ? pData->hDC : GetDC(pData->hWnd); hDC = (pData->hDC) ? pData->hDC : GetDC(pData->hWnd);
hBmp = nullptr;
if (hDC) if (hDC)
{ {
nDX = GetDeviceCaps( hDC, HORZRES ); nDX = GetDeviceCaps( hDC, HORZRES );
...@@ -112,39 +98,47 @@ std::unique_ptr<SalVirtualDevice> WinSalInstance::CreateVirtualDevice( SalGraphi ...@@ -112,39 +98,47 @@ std::unique_ptr<SalVirtualDevice> WinSalInstance::CreateVirtualDevice( SalGraphi
{ {
hDC = CreateCompatibleDC( pGraphics->getHDC() ); hDC = CreateCompatibleDC( pGraphics->getHDC() );
SAL_WARN_IF( !hDC, "vcl", "CreateCompatibleDC failed: " << WindowsErrorString( GetLastError() ) ); SAL_WARN_IF( !hDC, "vcl", "CreateCompatibleDC failed: " << WindowsErrorString( GetLastError() ) );
}
if (!hDC)
return nullptr;
void *pDummy; sal_uInt16 nBitCount = (eFormat == DeviceFormat::BITMASK) ? 1 : 0;
hBmp = WinSalVirtualDevice::ImplCreateVirDevBitmap(pGraphics->getHDC(), nDX, nDY, nBitCount, &pDummy);
HBITMAP hBmp = nullptr;
if (!pData)
{
// #124826# continue even if hBmp could not be created // #124826# continue even if hBmp could not be created
// if we would return a failure in this case, the process // if we would return a failure in this case, the process
// would terminate which is not required // would terminate which is not required
hBmp = WinSalVirtualDevice::ImplCreateVirDevBitmap(pGraphics->getHDC(),
nDX, nDY, nBitCount,
&o3tl::temporary<void*>(nullptr));
} }
if (hDC) const bool bForeignDC = pData != nullptr && pData->hDC != nullptr;
{ const SalData* pSalData = GetSalData();
WinSalVirtualDevice* pVDev = new WinSalVirtualDevice(hDC, hBmp, nBitCount, (pData != nullptr && pData->hDC != nullptr ), nDX, nDY);
SalData* pSalData = GetSalData();
WinSalGraphics* pVirGraphics = new WinSalGraphics(WinSalGraphics::VIRTUAL_DEVICE, pGraphics->isScreen(), nullptr, pVDev);
pVirGraphics->SetLayout( SalLayoutFlags::NONE ); // by default no! mirroring for VirtualDevices, can be enabled with EnableRTL()
pVirGraphics->setHDC(hDC);
if ( pSalData->mhDitherPal && pVirGraphics->isScreen() )
{
pVirGraphics->setDefPal(SelectPalette( hDC, pSalData->mhDitherPal, TRUE ));
RealizePalette( hDC );
}
pVirGraphics->InitGraphics();
pVDev->setGraphics(pVirGraphics); WinSalVirtualDevice* pVDev = new WinSalVirtualDevice(hDC, hBmp, nBitCount,
bForeignDC, nDX, nDY);
return std::unique_ptr<SalVirtualDevice>(pVDev); WinSalGraphics* pVirGraphics = new WinSalGraphics(WinSalGraphics::VIRTUAL_DEVICE,
} pGraphics->isScreen(), nullptr, pVDev);
else
// by default no! mirroring for VirtualDevices, can be enabled with EnableRTL()
pVirGraphics->SetLayout( SalLayoutFlags::NONE );
pVirGraphics->setHDC(hDC);
if ( pSalData->mhDitherPal && pVirGraphics->isScreen() )
{ {
if ( hBmp ) pVirGraphics->setDefPal(SelectPalette( hDC, pSalData->mhDitherPal, TRUE ));
DeleteBitmap( hBmp ); RealizePalette( hDC );
return nullptr;
} }
pVirGraphics->InitGraphics();
pVDev->setGraphics(pVirGraphics);
return std::unique_ptr<SalVirtualDevice>(pVDev);
} }
WinSalVirtualDevice::WinSalVirtualDevice(HDC hDC, HBITMAP hBMP, sal_uInt16 nBitCount, bool bForeignDC, long nWidth, long nHeight) WinSalVirtualDevice::WinSalVirtualDevice(HDC hDC, HBITMAP hBMP, sal_uInt16 nBitCount, bool bForeignDC, long nWidth, long nHeight)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment