diff options
Diffstat (limited to 'print/XpsRasFilter/src')
23 files changed, 0 insertions, 5217 deletions
diff --git a/print/XpsRasFilter/src/BitmapHandler.cpp b/print/XpsRasFilter/src/BitmapHandler.cpp deleted file mode 100644 index d887ddab..00000000 --- a/print/XpsRasFilter/src/BitmapHandler.cpp +++ /dev/null @@ -1,361 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// BitmapHandler.cpp -// -// Abstract: -// -// Abstract class that encapsulates the processing done to each -// individual band bitmap, as well as the concrete implemention -// that streams the bands as Tiffs to the output stream. -// - -#include "precomp.h" -#include "WppTrace.h" -#include "Exception.h" -#include "filtertypes.h" -#include "UnknownBase.h" -#include "xpsrasfilter.h" -#include "OMConvertor.h" -#include "rasinterface.h" -#include "BitmapHandler.h" - -#include "BitmapHandler.tmh" - -namespace xpsrasfilter -{ - -// -//Routine Name: -// -// TiffStreamBitmapHandler::CreateTiffStreamBitmapHandler -// -//Routine Description: -// -// Static factory method that creates an instance of -// TiffStreamBitmapHandler. -// -//Arguments: -// -// pStream - Filter output stream (IPrintWriteStream) -// -//Return Value: -// -// TiffStreamBitmapHandler_t (smart ptr) -// The new TiffStreamBitmapHandler. -// -TiffStreamBitmapHandler_t -TiffStreamBitmapHandler::CreateTiffStreamBitmapHandler( - const IPrintWriteStream_t &pStream - ) -{ - IWICImagingFactory_t pWICFactory; - - // - // Create an instance of a WIC Imaging Factory - // - THROW_ON_FAILED_HRESULT( - ::CoCreateInstance( - CLSID_WICImagingFactory, - NULL, - CLSCTX_INPROC_SERVER, - __uuidof(IWICImagingFactory), - reinterpret_cast<LPVOID*>(&pWICFactory) - ) - ); - - // - // Construct the TiffStreamBitmapHandler and return it - // - TiffStreamBitmapHandler_t toReturn( - new TiffStreamBitmapHandler( - pWICFactory, - pStream - ) - ); - - return toReturn; -} - -// -//Routine Name: -// -// TiffStreamBitmapHandler::TiffStreamBitmapHandler -// -//Routine Description: -// -// Construct the bitmap handler with the WIC factory -// and filter output stream. -// -//Arguments: -// -// pWICFactory - Windows Imaging Components object factory -// pStream - Output stream -// pHG - Encoder cache HGLOBAL -// -TiffStreamBitmapHandler::TiffStreamBitmapHandler( - const IWICImagingFactory_t &pWICFactory, - const IPrintWriteStream_t &pStream - ) : m_pWICFactory(pWICFactory), - m_pWriter(pStream), - m_nextTiffStart(0), - m_numTiffs(0), - m_tiffStarts(0) -{ -} - -// -//Routine Name: -// -// TiffStreamBitmapHandler::ProcessBitmap -// -//Routine Description: -// -// Encode the bitmap as a TIFF and stream out of the filter. -// -//Arguments: -// -// bitmap - bitmap of a single band, to stream -// -void -TiffStreamBitmapHandler::ProcessBitmap( - const IWICBitmap_t &bitmap - ) -{ - - // - // Create an empty HGLOBAL to hold the encode cache - // - SafeHGlobal_t pHG( - new SafeHGlobal(GMEM_SHARE | GMEM_MOVEABLE, 0) - ); - - // - // Create a stream to the encode buffer so that WIC can - // encode the TIFF in-memory - // - IStream_t pIStream; - - THROW_ON_FAILED_HRESULT( - ::CreateStreamOnHGlobal( - *pHG, - FALSE, // Do NOT Free the HGLOBAL on Release of the stream - &pIStream - ) - ); - - // - // Create a WIC TIFF Encoder on the stream - // - IWICBitmapEncoder_t pWICEncoder; - THROW_ON_FAILED_HRESULT( - m_pWICFactory->CreateEncoder(GUID_ContainerFormatTiff, NULL, &pWICEncoder) - ); - THROW_ON_FAILED_HRESULT( - pWICEncoder->Initialize(pIStream, WICBitmapEncoderNoCache) - ); - - // - // Create a new frame for the band and configure it - // - IWICBitmapFrameEncode_t pWICFrame; - IPropertyBag2_t pFramePropertyBag; - - THROW_ON_FAILED_HRESULT( - pWICEncoder->CreateNewFrame(&pWICFrame, &pFramePropertyBag) - ); - - { - // - // Write the compression method to the frame's property bag - // - PROPBAG2 option = { 0 }; - option.pstrName = L"TiffCompressionMethod"; - - VARIANT varValue; - VariantInit(&varValue); - varValue.vt = VT_UI1; - varValue.bVal = WICTiffCompressionLZW; - - THROW_ON_FAILED_HRESULT( - pFramePropertyBag->Write( - 1, // number of properties being set - &option, - &varValue - ) - ); - } - - THROW_ON_FAILED_HRESULT( - pWICFrame->Initialize(pFramePropertyBag) - ); - - // - // Set the frame's size - // - UINT bitmapWidth, bitmapHeight; - THROW_ON_FAILED_HRESULT( - bitmap->GetSize(&bitmapWidth, &bitmapHeight) - ); - THROW_ON_FAILED_HRESULT( - pWICFrame->SetSize(bitmapWidth, bitmapHeight) - ); - - // - // Set the frame's resolution - // - DOUBLE xDPI, yDPI; - THROW_ON_FAILED_HRESULT( - bitmap->GetResolution(&xDPI, &yDPI) - ); - THROW_ON_FAILED_HRESULT( - pWICFrame->SetResolution(xDPI, yDPI) - ); - - // - // Set the frame's pixel format - // - WICPixelFormatGUID format; - THROW_ON_FAILED_HRESULT( - bitmap->GetPixelFormat(&format) - ); - THROW_ON_FAILED_HRESULT( - pWICFrame->SetPixelFormat(&format) - ); - - // - // Write the bitmap data to the frame - // - WICRect rect = {0, 0, 0, 0}; - rect.Width = bitmapWidth; - rect.Height = bitmapHeight; - THROW_ON_FAILED_HRESULT( - pWICFrame->WriteSource(bitmap, &rect) - ); - - // - // Commit the frame and encoder - // - THROW_ON_FAILED_HRESULT( - pWICFrame->Commit() - ); - THROW_ON_FAILED_HRESULT( - pWICEncoder->Commit() - ); - - // - // Get the size of the TIFF from the stream position - // - ULARGE_INTEGER tiffSize; - LARGE_INTEGER zero; - zero.QuadPart = 0; - - THROW_ON_FAILED_HRESULT( - pIStream->Seek(zero, SEEK_CUR, &tiffSize) - ); - - ULONG cb; - - THROW_ON_FAILED_HRESULT( - ::ULongLongToULong(tiffSize.QuadPart, &cb) - ); - - // - // Update the list of Tiff locations so that it can be written to - // the end of the Tiff stream. - // - m_tiffStarts.push_back(m_nextTiffStart); - m_nextTiffStart += tiffSize.QuadPart; - m_numTiffs++; - - { - // - // Get a pointer to the HGLOBAL memory - // - HGlobalLock_t lock = pHG->Lock(); - BYTE *pCache = lock->GetAddress(); - - // - // Write the encoded Tiff to the output stream - // - ULONG written; - - THROW_ON_FAILED_HRESULT( - m_pWriter->WriteBytes(pCache, cb, &written) - ); - } -} - -// -//Routine Name: -// -// TiffStreamBitmapHandler::WriteFooter -// -//Routine Description: -// -// Write the footer to the stream, making it easier -// to decode the individual TIFFs later. The footer -// looks like this: -// -// |<--8 bytes--->| -// -// +--------------+ -// | Tiff 1 start | -// +--------------+ -// | Tiff 2 start | -// +--------------+ -// | ... | -// +--------------+ -// | Tiff N start | -// +--------------+ -// | N | -// +--------------+ -// -void -TiffStreamBitmapHandler::WriteFooter() -{ - ULONG written; - - // - // Write the vector of Tiff starts to the stream, if any Tiffs - // have been written to the stream. - // - if (m_numTiffs > 0) - { - ULONG toWrite; - - THROW_ON_FAILED_HRESULT( - SizeTToULong( - sizeof(ULONGLONG) * m_tiffStarts.size(), - &toWrite - ) - ); - - THROW_ON_FAILED_HRESULT( - m_pWriter->WriteBytes( - reinterpret_cast<BYTE *>(&m_tiffStarts[0]), - toWrite, - &written - ) - ); - } - - // - // Write the number of Tiffs to the stream - // - THROW_ON_FAILED_HRESULT( - m_pWriter->WriteBytes( - reinterpret_cast<BYTE *>(&m_numTiffs), - sizeof(m_numTiffs), - &written - ) - ); -} - -} // namespace xpsrasfilter diff --git a/print/XpsRasFilter/src/BitmapHandler.h b/print/XpsRasFilter/src/BitmapHandler.h deleted file mode 100644 index 3f78dc30..00000000 --- a/print/XpsRasFilter/src/BitmapHandler.h +++ /dev/null @@ -1,64 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// BitmapHandler.h -// -// Abstract: -// -// Abstract class that encapsulates the processing done to each -// individual band bitmap, as well as the concrete implemention -// that streams the bands as Tiffs to the output stream. -// - -#pragma once - -namespace xpsrasfilter -{ - -class TiffStreamBitmapHandler -{ -public: - - static - TiffStreamBitmapHandler_t - CreateTiffStreamBitmapHandler( - const IPrintWriteStream_t &pStream - ); - - void - ProcessBitmap( - const IWICBitmap_t &bitmap - ); - - void - WriteFooter(); - -private: - IWICImagingFactory_t m_pWICFactory; - IPrintWriteStream_t m_pWriter; // output stream - - // - // Members to keep track of where each Tiff - // starts in the output stream - // - ULONGLONG m_nextTiffStart; - ULONGLONG m_numTiffs; - std::vector<ULONGLONG> m_tiffStarts; - - // - // Constructor is private; use CreateTiffStreamBitmapHandler - // to create instances - // - TiffStreamBitmapHandler( - const IWICImagingFactory_t &pWICFactory, - const IPrintWriteStream_t &pStream - ); -}; - -} // namespace xpsrasfilter diff --git a/print/XpsRasFilter/src/Exception.cpp b/print/XpsRasFilter/src/Exception.cpp deleted file mode 100644 index 141c1ac3..00000000 --- a/print/XpsRasFilter/src/Exception.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// Exception.cpp -// -// Abstract: -// -// Exception routine definitions. -// - -#include "precomp.h" -#include "WppTrace.h" -#include "Exception.h" - -#include "Exception.tmh" - -namespace xpsrasfilter -{ - -void ThrowHRException( - HRESULT hr, - char const *fileName, - int lineNum - ) -{ - DoTraceMessage( - XPSRASFILTER_TRACE_ERROR, - L"Throwing HRESULT Exception from %s:%d (HRESULT=%!HRESULT!)", - fileName, - lineNum, - hr - ); - - throw hr_error(hr); -} - -} // namespace xpsrasfilter diff --git a/print/XpsRasFilter/src/Exception.h b/print/XpsRasFilter/src/Exception.h deleted file mode 100644 index 887bfbc4..00000000 --- a/print/XpsRasFilter/src/Exception.h +++ /dev/null @@ -1,86 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// Exception.h -// -// Abstract: -// -// Exception macro and class declarations. -// - -#pragma once - -// -// Macro to convert HRESULT into an exception throw -// -#ifndef THROW_ON_FAILED_HRESULT -#define THROW_ON_FAILED_HRESULT(func_) \ -{ \ - HRESULT hr_ = func_; \ - if (FAILED(hr_)) { xpsrasfilter::ThrowHRException(hr_, __FILE__, __LINE__); } \ -} -#endif // THROW_ON_FAILED_HRESULT - -#ifndef THROW_LAST_ERROR -#define THROW_LAST_ERROR() \ -{ \ - HRESULT errhr_ = HRESULT_FROM_WIN32(::GetLastError()); \ - THROW_ON_FAILED_HRESULT(errhr_); \ -} -#endif // THROW_LAST_ERROR - -// -// Macro to catch various exceptions, including -// HRESULT-turned-exceptions. -// -// Because we have defined USE_NATIVE_EH=1, the -// catch(...) block will not catch structural -// exceptions. -// -#ifndef CATCH_VARIOUS -#define CATCH_VARIOUS(hr_) \ - catch(std::bad_alloc const& ) \ - { \ - hr_ = E_OUTOFMEMORY; \ - } \ - catch(xpsrasfilter::hr_error const& e) \ - { \ - hr_ = e.hr; \ - } \ - catch(std::exception const& ) \ - { \ - hr_ = E_FAIL; \ - } \ - catch(...) \ - { \ - hr_ = E_UNEXPECTED; \ - } -#endif // CATCH_VARIOUS - -namespace xpsrasfilter -{ - -// -// HRESULT exception -// -struct hr_error -{ - HRESULT hr; - - hr_error(HRESULT hr_in) : hr(hr_in) - { } -}; - -void ThrowHRException( - HRESULT hr, - char const *fileName, - int lineNum - ); - -} // namespace xpsrasfilter diff --git a/print/XpsRasFilter/src/OMConvertor.cpp b/print/XpsRasFilter/src/OMConvertor.cpp deleted file mode 100644 index 2cd478c2..00000000 --- a/print/XpsRasFilter/src/OMConvertor.cpp +++ /dev/null @@ -1,774 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// omconvertor.cpp -// -// Abstract: -// -// Object model conversion routines. This class provides routines -// to convert from filter pipeline objects into Xps Object Model -// objects. -// - -#include "precomp.h" -#include "WppTrace.h" -#include "Exception.h" -#include "filtertypes.h" -#include "UnknownBase.h" -#include "OMConvertor.h" - -#include "OMConvertor.tmh" - -namespace xpsrasfilter -{ - -// -//Routine Name: -// -// CreateXpsOMPageFromIFixedPage -// -//Routine Description: -// -// This is the main method called by the filter. It -// proceeds to call the remaining Create* methods -// to convert from the print pipeline Object Model -// to the Xps Object Model. -// -// Takes an IFixedPage (print pipeline Object Model) -// and converts it to an IXpsOMPage (Xps Object Model). -// -//Arguments: -// -// pPageIn - IFixedPage to convert -// pOMFactory - Xps Object Model Object Factory -// pOpcFactory - Opc Object Factory -// -//Return Value: -// -// IXpsOMPage_t (smart pointer) -// Result IXpsOMPage -// -IXpsOMPage_t -CreateXpsOMPageFromIFixedPage( - const IFixedPage_t &pPageIn, - const IXpsOMObjectFactory_t &pOMFactory, - const IOpcFactory_t &pOpcFactory - ) -{ - // - // Get additional page parameters (uri and stream) - // - IOpcPartUri_t pPartUri; - IStream_t pPartStream; - - pPartStream = GetStreamFromPart( - static_cast<IPartBase_t>(pPageIn) - ); - pPartUri = CreateOpcPartUriFromPart( - static_cast<IPartBase_t>(pPageIn), - pOpcFactory - ); - - // - // Call Xps Object Model to create the page resource - // - IXpsOMPage_t pPageOut; - - THROW_ON_FAILED_HRESULT( - pOMFactory->CreatePageFromStream( - pPartStream, - pPartUri, - CollectPageResources(pPageIn, pOMFactory, pOpcFactory), - FALSE, // Do not reuse objects - &pPageOut - ) - ); - - return pPageOut; -} - -// -//Routine Name: -// -// CreateImageFromIPartImage -// -//Routine Description: -// -// Takes an IPartImage (print pipeline Object Model) -// and converts it to an IXpsOMImageResource (Xps Object Model). -// -//Arguments: -// -// pImageIn - IPartImage to convert -// pOMFactory - Xps Object Model Object Factory -// pOpcFactory - Opc Object Factory -// -//Return Value: -// -// IXpsOMImageResource_t (smart pointer) -// Result IXpsOMImageResource -// -IXpsOMImageResource_t -CreateImageFromIPartImage( - const IPartImage_t &pImageIn, - const IXpsOMObjectFactory_t &pOMFactory, - const IOpcFactory_t &pOpcFactory - ) -{ - // - // Get IPartBase parameters (stream and uri) - // - IStream_t pPartStream; - IOpcPartUri_t pPartUri; - - pPartStream = GetStreamFromPart( - static_cast<IPartBase_t>(pImageIn) - ); - pPartUri = CreateOpcPartUriFromPart( - static_cast<IPartBase_t>(pImageIn), - pOpcFactory - ); - - // - // Get the image type and convert it to the corresponding enum - // - BSTR_t strContentType; - XPS_IMAGE_TYPE type = XPS_IMAGE_TYPE_WDP; - - THROW_ON_FAILED_HRESULT( - pImageIn->GetImageProperties(&strContentType) - ); - - if (0 == _wcsicmp(strContentType, L"image/jpeg")) - { - type = XPS_IMAGE_TYPE_JPEG; - } - else if (0 == _wcsicmp(strContentType, L"image/png")) - { - type = XPS_IMAGE_TYPE_PNG; - } - else if (0 == _wcsicmp(strContentType, L"image/tiff")) - { - type = XPS_IMAGE_TYPE_TIFF; - } - else if (0 == _wcsicmp(strContentType, L"image/vnd.ms-photo")) - { - type = XPS_IMAGE_TYPE_WDP; - } - else - { - // - // unknown content type - // - THROW_ON_FAILED_HRESULT(E_INVALIDARG); - } - - // - // Call Xps Object Model to create the image resource - // - IXpsOMImageResource_t pImageOut; - - THROW_ON_FAILED_HRESULT( - pOMFactory->CreateImageResource( - pPartStream, - type, - pPartUri, - &pImageOut - ) - ); - - return pImageOut; -} - -// -//Routine Name: -// -// CreateProfileFromIPartColorProfile -// -//Routine Description: -// -// Takes an IPartColorProfile (print pipeline Object Model) -// and converts it to an IXpsOMColorProfileResource (Xps Object Model). -// -//Arguments: -// -// pProfileIn - IPartColorProfile to convert -// pOMFactory - Xps Object Model Object Factory -// pOpcFactory - Opc Object Factory -// -//Return Value: -// -// IXpsOMColorProfileResource_t (smart pointer) -// Result IXpsOMColorProfileResource -// -IXpsOMColorProfileResource_t -CreateProfileFromIPartColorProfile( - const IPartColorProfile_t &pProfileIn, - const IXpsOMObjectFactory_t &pOMFactory, - const IOpcFactory_t &pOpcFactory - ) -{ - // - // Get IPartBase parameters (stream and uri) - // - IStream_t pPartStream; - IOpcPartUri_t pPartUri; - - pPartStream = GetStreamFromPart( - static_cast<IPartBase_t>(pProfileIn) - ); - pPartUri = CreateOpcPartUriFromPart( - static_cast<IPartBase_t>(pProfileIn), - pOpcFactory - ); - - // - // Call Xps Object Model to create the color profile resource - // - IXpsOMColorProfileResource_t pProfileOut; - - THROW_ON_FAILED_HRESULT( - pOMFactory->CreateColorProfileResource( - pPartStream, - pPartUri, - &pProfileOut - ) - ); - - return pProfileOut; -} - -// -//Routine Name: -// -// CreateDictionaryFromIPartResourceDictionary -// -//Routine Description: -// -// Takes an IPartResourceDictionary (print pipeline Object Model) -// and converts it to an IXpsOMRemoteDictionaryResource (Xps Object Model). -// -//Arguments: -// -// pDictionaryIn - IPartResourceDictionary to convert -// pOMFactory - Xps Object Model Object Factory -// pOpcFactory - Opc Object Factory -// pResources - The resources of the fixed page -// -//Return Value: -// -// IXpsOMRemoteDictionaryResource_t (smart pointer) -// Result IXpsOMRemoteDictionaryResource -// -IXpsOMRemoteDictionaryResource_t -CreateDictionaryFromIPartResourceDictionary( - const IPartResourceDictionary_t &pDictionaryIn, - const IXpsOMObjectFactory_t &pOMFactory, - const IOpcFactory_t &pOpcFactory, - const IXpsOMPartResources_t &pResources - ) -{ - // - // Get IPartBase parameters (stream and uri) - // - IStream_t pPartStream; - IOpcPartUri_t pPartUri; - - pPartStream = GetStreamFromPart( - static_cast<IPartBase_t>(pDictionaryIn) - ); - pPartUri = CreateOpcPartUriFromPart( - static_cast<IPartBase_t>(pDictionaryIn), - pOpcFactory - ); - - // - // Call Xps Object Model to create the remote dictionary resource - // - IXpsOMRemoteDictionaryResource_t pDictionaryOut; - - THROW_ON_FAILED_HRESULT( - pOMFactory->CreateRemoteDictionaryResourceFromStream( - pPartStream, - pPartUri, - pResources, - &pDictionaryOut) - ); - - return pDictionaryOut; -} - -// -//Routine Name: -// -// CreateFontFromIPartFont -// -//Routine Description: -// -// Takes an IPartFont (print pipeline Object Model) -// and converts it to an IXpsOMFontResource (Xps Object Model). -// -//Arguments: -// -// pFontIn - IPartFont to convert -// pFactory - Xps Object Model Object Factory -// pOpcFactory - Opc Object Factory -// -//Return Value: -// -// IXpsOMFontResource_t (smart pointer) -// Result IXpsOMFontResource -// -IXpsOMFontResource_t -CreateFontFromIPartFont( - const IPartFont_t &pFontIn, - const IXpsOMObjectFactory_t &pOMFactory, - const IOpcFactory_t &pOpcFactory - ) -{ - // - // Get IPartBase parameters (stream and uri) - // - IStream_t pPartStream; - IOpcPartUri_t pPartUri; - - pPartStream = GetStreamFromPart( - static_cast<IPartBase_t>(pFontIn) - ); - pPartUri = CreateOpcPartUriFromPart( - static_cast<IPartBase_t>(pFontIn), - pOpcFactory - ); - - // - // Get the font restriction - // - EXpsFontRestriction eFontRestriction = Xps_Restricted_Font_Installable; - - { - IPartFont2_t pFont2In; - - if (SUCCEEDED(pFontIn->QueryInterface(__uuidof(IPartFont2), reinterpret_cast<void **>(&pFont2In)))) - { - pFont2In->GetFontRestriction(&eFontRestriction); - } - } - - // - // Get the font obfuscation - // - EXpsFontOptions eFontOptions; - - { - BSTR_t contentType; - - THROW_ON_FAILED_HRESULT( - pFontIn->GetFontProperties(&contentType, &eFontOptions) - ); - } - - // - // It is necessary to combine the obfuscation and restriction - // attributes from the print pipeline into the one parameter that - // the Xps Object Model consumes. - // - - XPS_FONT_EMBEDDING omEmbedding; - - if (eFontOptions == Font_Normal) - { - omEmbedding = XPS_FONT_EMBEDDING_NORMAL; - } - else if (eFontOptions == Font_Obfusticate && - (eFontRestriction & - (Xps_Restricted_Font_PreviewPrint | - Xps_Restricted_Font_NoEmbedding))) - { - // - // If the font is obfuscated, and either the PreviewPrint or - // NoEmbedding restriction flags are set, then create a - // Restricted font - // - omEmbedding = XPS_FONT_EMBEDDING_RESTRICTED; - } - else - { - omEmbedding = XPS_FONT_EMBEDDING_OBFUSCATED; - } - - // - // Call Xps Object Model to create the font resource - // - IXpsOMFontResource_t pFontOut; - - THROW_ON_FAILED_HRESULT( - pOMFactory->CreateFontResource( - pPartStream, - omEmbedding, - pPartUri, - FALSE, // fonts received from the pipeline are already de-obfuscated - &pFontOut - ) - ); - - return pFontOut; -} - -// -//Routine Name: -// -// CollectPageResources -// -//Routine Description: -// -// Iterates over all of the resources related to -// a fixed page and adds them to a resource -// collection. -// -//Arguments: -// -// pPage - The page to query for resources -// pOMFactory - Xps Object Model Object Factory -// pOpcFactory - Opc Object Factory -// -//Return Value: -// -// IXpsOMPartResources_t (smart pointer) -// The resource collection of all of the resources of the page -// -IXpsOMPartResources_t -CollectPageResources( - const IFixedPage_t &pPage, - const IXpsOMObjectFactory_t &pOMFactory, - const IOpcFactory_t &pOpcFactory - ) -{ - IXpsOMPartResources_t pResources; - - IXpsOMFontResourceCollection_t pFonts; - IXpsOMImageResourceCollection_t pImages; - IXpsOMColorProfileResourceCollection_t pProfiles; - IXpsOMRemoteDictionaryResourceCollection_t pDictionaries; - - // - // collection of resource dictionaries saved for later processing. - // - ResourceDictionaryList_t dictionaryList; - - // - // Create the resource collection and get all of the - // resource-specific sub-collections. - // - THROW_ON_FAILED_HRESULT( - pOMFactory->CreatePartResources(&pResources) - ); - THROW_ON_FAILED_HRESULT( - pResources->GetFontResources(&pFonts) - ); - THROW_ON_FAILED_HRESULT( - pResources->GetImageResources(&pImages) - ); - THROW_ON_FAILED_HRESULT( - pResources->GetColorProfileResources(&pProfiles) - ); - THROW_ON_FAILED_HRESULT( - pResources->GetRemoteDictionaryResources(&pDictionaries) - ); - // - // Get the XpsPartIterator and iterate through all of the parts - // related to this fixed page. - // - IXpsPartIterator_t itPart; - - THROW_ON_FAILED_HRESULT( - pPage->GetXpsPartIterator(&itPart) - ); - - for (; !itPart->IsDone(); itPart->Next()) - { - BSTR_t uri; - IUnknown_t pUnkPart; - - THROW_ON_FAILED_HRESULT( - itPart->Current(&uri, &pUnkPart) - ); - - IPartFont_t pFontPart; - IPartImage_t pImagePart; - IPartColorProfile_t pProfilePart; - IPartResourceDictionary_t pDictionaryPart; - - if (SUCCEEDED(pUnkPart.QueryInterface(&pFontPart))) - { - // - // Convert the font part to Xps Object Model and add it to the - // font resource collection - // - THROW_ON_FAILED_HRESULT( - pFonts->Append( - CreateFontFromIPartFont( - pFontPart, - pOMFactory, - pOpcFactory - ) - ) - ); - } - else if (SUCCEEDED(pUnkPart.QueryInterface(&pImagePart))) - { - // - // Convert the image part to Xps Object Model and add it to the - // image resource collection - // - THROW_ON_FAILED_HRESULT( - pImages->Append( - CreateImageFromIPartImage( - pImagePart, - pOMFactory, - pOpcFactory - ) - ) - ); - } - else if (SUCCEEDED(pUnkPart.QueryInterface(&pProfilePart))) - { - // - // Convert the color profile part to Xps Object Model and add it - // to the color profile resource collection - // - THROW_ON_FAILED_HRESULT( - pProfiles->Append( - CreateProfileFromIPartColorProfile( - pProfilePart, - pOMFactory, - pOpcFactory - ) - ) - ); - } - else if (SUCCEEDED(pUnkPart.QueryInterface(&pDictionaryPart))) - { - // - // In order to process the remote resource dictionary, all of - // its linked resources must be present in pResources. To ensure - // this, we delay the conversion of the remote resource - // dictionaries until all of the other resources have been converted. - // - dictionaryList.push_back(pDictionaryPart); - } - else - { - // - // Any other page resources are ignored - // - } - } - - for (ResourceDictionaryList_t::const_iterator it = dictionaryList.begin(); - it != dictionaryList.end(); - ++it) - { - // - // Convert the remote dictionary to Xps Object Model and add it - // to the remote dictionary collection - // - THROW_ON_FAILED_HRESULT( - pDictionaries->Append( - CreateDictionaryFromIPartResourceDictionary( - *it, - pOMFactory, - pOpcFactory, - pResources - ) - ) - ); - } - - return pResources; -} - -// -//Routine Name: -// -// GetStreamFromPart -// -//Routine Description: -// -// Gets the IStream from this part. -// -//Arguments: -// -// pPart - An Xps Part -// -//Return Value: -// -// IStream_t (smart pointer) -// The stream of the part's content -// -IStream_t -GetStreamFromPart( - const IPartBase_t &pPart - ) -{ - // - // Get the IPrintReadStream for the part from the pipeline Object Model - // - IPrintReadStream_t pStream; - THROW_ON_FAILED_HRESULT( - pPart->GetStream(&pStream) - ); - - return CreateIStreamFromIPrintReadStream(pStream); -} - -// -//Routine Name: -// -// CreateIStreamFromIPrintReadStream -// -//Routine Description: -// -// Creates an IStream from an IPrintReadStream. -// -//Arguments: -// -// pReadStream - A Print Pipeline IPrintReadStream -// -//Return Value: -// -// IStream_t (smart pointer) -// A stream with the same content as the argument stream. -// -IStream_t -CreateIStreamFromIPrintReadStream( - const IPrintReadStream_t &pReadStream - ) -{ - // - // Get the size of the stream - // - ULONGLONG tmpPos; - size_t partSize; - - THROW_ON_FAILED_HRESULT( - pReadStream->Seek(0, SEEK_END, &tmpPos) - ); - - // - // GlobalAlloc can only allocate size_t bytes, so - // throw if the part is larger than that - // - THROW_ON_FAILED_HRESULT( - ULongLongToSizeT(tmpPos, &partSize) - ); - - THROW_ON_FAILED_HRESULT( - pReadStream->Seek(0, SEEK_SET, &tmpPos) - ); - - // - // Allocate an HGLOBAL for the part cache - // - SafeHGlobal_t pHBuf( - new SafeHGlobal(GMEM_FIXED, partSize) - ); - - // - // Read the part into the cache - // - { - // - // Lock the HGLOBAL and get the address of the buffer - // from the RAII lock object - // - HGlobalLock_t lock = pHBuf->Lock(); - BYTE *pBuffer = lock->GetAddress(); - - // - // Allow the number of bytes to read to be clipped to max ULONG - // and then spin on fEOF until the stream is exhausted - // - ULONG numToRead; - - if (FAILED(SizeTToULong(partSize, &numToRead))) - { - numToRead = MAXUINT; - } - - BOOL fEOF; - ULONG numRead; - size_t pos = 0; - - // - // Iterate until all bytes from the stream - // have been read into the buffer - // - do - { - THROW_ON_FAILED_HRESULT( - pReadStream->ReadBytes(pBuffer + pos, numToRead, &numRead, &fEOF) - ); - - pos += numRead; - } while (!fEOF && numRead); - } - - // - // Create an IStream from the part cache - // - IStream_t pIStream = pHBuf->ConvertToIStream(); - - LARGE_INTEGER zero = {0}; - THROW_ON_FAILED_HRESULT( - pIStream->Seek(zero, SEEK_SET, NULL) - ); - - return pIStream; -} - -// -//Routine Name: -// -// CreateOpcPartUriFromPart -// -//Routine Description: -// -// Gets the Opc Uri from the Xps Part. -// -//Arguments: -// -// pPart - An Xps Part -// pFactory - Opc Factory -// -//Return Value: -// -// IOpcPartUri_t (smart pointer) -// The Uri of the part -// -IOpcPartUri_t -CreateOpcPartUriFromPart( - const IPartBase_t &pPart, - const IOpcFactory_t &pFactory - ) -{ - BSTR_t strPartUri; - - THROW_ON_FAILED_HRESULT( - pPart->GetUri(&strPartUri) - ); - - IOpcPartUri_t pPartUri; - THROW_ON_FAILED_HRESULT( - pFactory->CreatePartUri(strPartUri, &pPartUri) - ); - return pPartUri; -} - -} // namespace xpsrasfilter - diff --git a/print/XpsRasFilter/src/OMConvertor.h b/print/XpsRasFilter/src/OMConvertor.h deleted file mode 100644 index 7257da3b..00000000 --- a/print/XpsRasFilter/src/OMConvertor.h +++ /dev/null @@ -1,90 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// omconvertor.h -// -// Abstract: -// -// Object model conversion routines. -// - -#pragma once - -namespace xpsrasfilter -{ - -// -// Top-level Create Page routine -// -IXpsOMPage_t -CreateXpsOMPageFromIFixedPage( - const IFixedPage_t &pPageIn, - const IXpsOMObjectFactory_t &pFactory, - const IOpcFactory_t &pOpcFactory - ); - -// -// Individual Part conversion routines -// -IXpsOMImageResource_t -CreateImageFromIPartImage( - const IPartImage_t &pImageIn, - const IXpsOMObjectFactory_t &pFactory, - const IOpcFactory_t &pOpcFactory - ); - -IXpsOMColorProfileResource_t -CreateProfileFromIPartColorProfile( - const IPartColorProfile_t &pProfileIn, - const IXpsOMObjectFactory_t &pFactory, - const IOpcFactory_t &pOpcFactory - ); - -IXpsOMRemoteDictionaryResource_t -CreateDictionaryFromIPartResourceDictionary( - const IPartResourceDictionary_t &pDictionaryIn, - const IXpsOMObjectFactory_t &pFactory, - const IOpcFactory_t &pOpcFactory, - const IXpsOMPartResources_t &pResources - ); - -IXpsOMFontResource_t -CreateFontFromIPartFont( - const IPartFont_t &pFontIn, - const IXpsOMObjectFactory_t &pFactory, - const IOpcFactory_t &pOpcFactory - ); - -// -// Utility Routines -// -IStream_t -GetStreamFromPart( - const IPartBase_t &pPart - ); - -IOpcPartUri_t -CreateOpcPartUriFromPart( - const IPartBase_t &pPart, - const IOpcFactory_t &pOpcFactory - ); - -IXpsOMPartResources_t -CollectPageResources( - const IFixedPage_t &pPage, - const IXpsOMObjectFactory_t &pFactory, - const IOpcFactory_t &pOpcFactory - ); - -IStream_t -CreateIStreamFromIPrintReadStream( - const IPrintReadStream_t &pReadStream - ); - -} // namespace xpsrasfilter diff --git a/print/XpsRasFilter/src/PThandler.cpp b/print/XpsRasFilter/src/PThandler.cpp deleted file mode 100644 index 6b158032..00000000 --- a/print/XpsRasFilter/src/PThandler.cpp +++ /dev/null @@ -1,781 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// PThandler.cpp -// -// Abstract: -// -// Print Ticket Handler class definition. -// - -#include "precomp.h" -#include "WppTrace.h" -#include "Exception.h" -#include "filtertypes.h" -#include "UnknownBase.h" -#include "OMConvertor.h" -#include "rasinterface.h" -#include "xpsrasfilter.h" -#include "PTHandler.h" - -#include "PThandler.tmh" - -namespace xpsrasfilter -{ - -// -// This is an arbitrary page margin that is used to simulate -// an imageable area for scaling calculations. -// -const FLOAT g_pageMargin = 0.25f; - -// -//Routine Name: -// -// PrintTicketHandler::CreatePrintTicketHandler -// -//Routine Description: -// -// Static factory method that creates an instance of -// PrintTicketHandler. -// -//Arguments: -// -// pPropertyBag - Property Bag -// -//Return Value: -// -// PrintTicketHandler_t (smart ptr) -// The new PrintTicketHandler. -// -PrintTicketHandler_t -PrintTicketHandler::CreatePrintTicketHandler( - const IPrintPipelinePropertyBag_t &pPropertyBag - ) -{ - // - // Create MSXML DOM document - // - IXMLDOMDocument2_t pDOMDoc; - - THROW_ON_FAILED_HRESULT( - ::CoCreateInstance( - __uuidof(DOMDocument60), - NULL, - CLSCTX_INPROC_SERVER, - __uuidof(IXMLDOMDocument2), - reinterpret_cast<LPVOID*>(&pDOMDoc) - ) - ); - - // - // Get the default user Print Ticket Stream Factory - // - Variant_t varUserPrintTicket; - THROW_ON_FAILED_HRESULT( - pPropertyBag->GetProperty( - XPS_FP_USER_PRINT_TICKET, - &varUserPrintTicket - ) - ); - IUnknown_t pUnk = varUserPrintTicket.punkVal; - - IPrintReadStreamFactory_t pStreamFactory; - - THROW_ON_FAILED_HRESULT( - pUnk.QueryInterface(&pStreamFactory) - ); - - // - // Get the default user Print Ticket stream - // and wrap it in an IStream - // - - IPrintReadStream_t pUserPrintTicketStream; - - THROW_ON_FAILED_HRESULT( - pStreamFactory->GetStream(&pUserPrintTicketStream) - ); - - IStream_t pUserPrintTicket = - CreateIStreamFromIPrintReadStream(pUserPrintTicketStream); - - // - // Get the Printer Name - // - Variant_t varPrinterName; - THROW_ON_FAILED_HRESULT( - pPropertyBag->GetProperty( - XPS_FP_PRINTER_NAME, - &varPrinterName - ) - ); - - BSTR_t pPrinterName(varPrinterName.bstrVal); - - // - // Get the User Security Token - // Avoid CComVariant if getting the XPS_FP_USER_TOKEN property. - // Please refer to http://go.microsoft.com/fwlink/?LinkID=255534 for detailed information. - // - SafeVariant varUserSecurityToken; - THROW_ON_FAILED_HRESULT( - pPropertyBag->GetProperty( - XPS_FP_USER_TOKEN, - &varUserSecurityToken - ) - ); - - // - // Open the Print Ticket Provider - // - SafeHPTProvider_t pHProvider( - new SafeHPTProvider( - pPrinterName, - varUserSecurityToken.byref - ) - ); - - PrintTicketHandler_t toReturn( - new PrintTicketHandler( - pDOMDoc, - pHProvider, - pUserPrintTicket - ) - ); - - return toReturn; -} - -// -//Routine Name: -// -// PrintTicketHandler::PrintTicketHandler -// -//Routine Description: -// -// Constructor for the Print Ticket Handler. -// -//Arguments: -// -// pDoc - initialized MSXML DOM document -// pHProvider - handle to the Print Ticket Provider -// -PrintTicketHandler::PrintTicketHandler( - const IXMLDOMDocument2_t &pDoc, - SafeHPTProvider_t pHProvider, - const IStream_t &pUserPrintTicket - ) : m_pDOMDoc(pDoc), - m_pHProvider(pHProvider), - m_pDefaultUserPrintTicket(pUserPrintTicket) -{ -} - -// -//Routine Name: -// -// PrintTicketHandler::ProcessPrintTicket -// -//Routine Description: -// -// Gets the print ticket from the part, merges with -// the base ticket, and returns the result. -// -//Arguments: -// -// pBasePrintTicket - Base Print Ticket -// pDeltaPrintTicketPart - Delta Print Pipeline Print Ticket Part -// scope - Scope of the merged Print Ticket -// -//Return Value: -// -// IStream_t (smart pointer) -// Merged stream -// -IStream_t -PrintTicketHandler::ProcessPrintTicket( - const IStream_t &pBasePrintTicket, - const IPartPrintTicket_t &pDeltaPrintTicketPart, - EPrintTicketScope scope - ) -{ - IStream_t pMergedPrintTicket; - IStream_t pDeltaPrintTicket; - - pDeltaPrintTicket = GetStreamFromPart( - static_cast<IPartBase_t>(pDeltaPrintTicketPart) - ); - - // - // Before calling PTMergeAndValidatePrintTicket, both input - // Print Ticket streams MUST be at position 0. The temp Print - // Ticket stream is already at position 0, but the Base Print - // Ticket may not be. Seek it to 0 to be sure. - // - LARGE_INTEGER zero; - zero.QuadPart = 0; - THROW_ON_FAILED_HRESULT( - pBasePrintTicket->Seek(zero, SEEK_SET, NULL) - ); - - // - // Merge the delta Print Ticket with the - // base Print Ticket - // - THROW_ON_FAILED_HRESULT( - ::CreateStreamOnHGlobal( - NULL, - TRUE, // delete on release - &pMergedPrintTicket - ) - ); - - m_pHProvider->PTMergeAndValidatePrintTicket( - pBasePrintTicket, - pDeltaPrintTicket, - scope, - pMergedPrintTicket - ); - - return pMergedPrintTicket; -} - -// -//Routine Name: -// -// PrintTicketHandler::ProcessPart -// -//Routine Description: -// -// Merges the Fixed Document Sequence Print Ticket with -// the default user Print Ticket and caches the result. -// -//Arguments: -// -// pFDS - Fixed Document Sequence part -// -void -PrintTicketHandler::ProcessPart( - const IFixedDocumentSequence_t &pFDS - ) -{ - IPartPrintTicket_t pPrintTicket; - - HRESULT hr = pFDS->GetPrintTicket(&pPrintTicket); - - // - // E_ELEMENT_NOT_FOUND means that this Fixed Document Sequence - // does not have a Print Ticket. Propagate the Default User - // Print Ticket. - // All other failed HRESULTs should be thrown. - // - if (hr == E_ELEMENT_NOT_FOUND) - { - m_pJobPrintTicket = m_pDefaultUserPrintTicket; - return; - } - - THROW_ON_FAILED_HRESULT(hr); - - m_pDocumentPrintTicket = NULL; - m_pPagePrintTicket = NULL; - - m_pJobPrintTicket = ProcessPrintTicket( - m_pDefaultUserPrintTicket, - pPrintTicket, - kPTJobScope - ); -} - -// -//Routine Name: -// -// PrintTicketHandler::ProcessPart -// -//Routine Description: -// -// Merges the Fixed Document Print Ticket with the -// Fixed Document Sequence Print Ticket and caches -// the result. The tickets are merged at the Document -// scope, so the result contains no job-level features. -// -//Arguments: -// -// pFD - Fixed Document part -// -void -PrintTicketHandler::ProcessPart( - const IFixedDocument_t &pFD - ) -{ - IPartPrintTicket_t pPrintTicket; - - HRESULT hr = pFD->GetPrintTicket(&pPrintTicket); - - // - // E_ELEMENT_NOT_FOUND means that this Fixed Document - // does not have a Print Ticket. Propagate the Job - // Print Ticket. - // All other failed HRESULTs should be thrown. - // - if (hr == E_ELEMENT_NOT_FOUND) - { - m_pDocumentPrintTicket = m_pJobPrintTicket; - return; - } - - THROW_ON_FAILED_HRESULT(hr); - - m_pPagePrintTicket = NULL; - - m_pDocumentPrintTicket = ProcessPrintTicket( - m_pJobPrintTicket, - pPrintTicket, - kPTDocumentScope - ); -} - -// -//Routine Name: -// -// PrintTicketHandler::ProcessPart -// -//Routine Description: -// -// Merges the Fixed Page Print Ticket with the -// Fixed Document Print Ticket and caches the result. -// The tickets are merged at the Page scope, so the -// result contains no job-level or document-level features. -// -//Arguments: -// -// pFP - Fixed Page part -// -void -PrintTicketHandler::ProcessPart( - const IFixedPage_t &pFP - ) -{ - IPartPrintTicket_t pPrintTicket; - - HRESULT hr = pFP->GetPrintTicket(&pPrintTicket); - - // - // E_ELEMENT_NOT_FOUND means that this Fixed Page - // does not have a Print Ticket. Propagate the Document - // Print Ticket. - // All other failed HRESULTs should be thrown. - // - if (hr == E_ELEMENT_NOT_FOUND) - { - m_pPagePrintTicket = m_pDocumentPrintTicket; - return; - } - - THROW_ON_FAILED_HRESULT(hr); - - m_pPagePrintTicket = ProcessPrintTicket( - m_pDocumentPrintTicket, - pPrintTicket, - kPTPageScope - ); -} - -// -//Routine Name: -// -// PrintTicketHandler::GetMergedPrintTicketParams -// -//Routine Description: -// -// Queries a set of parameters from the merged print ticket. -// -// NOTE: Relies on successful calls to all three PrintTicket -// processing methods. -// -//Return Value: -// -// ParametersFromPrintTicket -// The set of parameters queried from the merged -// Print Ticket. -// -ParametersFromPrintTicket -PrintTicketHandler::GetMergedPrintTicketParams() -{ - DoTraceMessage(XPSRASFILTER_TRACE_VERBOSE, L"Getting Print Ticket parameters"); - - if (!m_pPagePrintTicket) - { - DoTraceMessage(XPSRASFILTER_TRACE_ERROR, L"GetMergedPrintTicketParams called before ProcessPagePrintTicket"); - THROW_ON_FAILED_HRESULT(E_FAIL); - } - - ParametersFromPrintTicket params; - - // - // Seek the Page-level Print Ticket to 0 - // - LARGE_INTEGER zero; - zero.QuadPart = 0; - THROW_ON_FAILED_HRESULT( - m_pPagePrintTicket->Seek(zero, SEEK_SET, NULL) - ); - - // - // Load the print ticket stream into a DOM document - // - // NOTE: We are only looking for features at the Page scope for this sample, - // so we only extract features from the effective page-level PrintTicket. - // - Variant_t varStream(m_pPagePrintTicket); - VARIANT_BOOL success; - - THROW_ON_FAILED_HRESULT( - m_pDOMDoc->load(varStream, &success) - ); - if (!success) - { - WPP_LOG_ON_FAILED_HRESULT(E_FAIL); - THROW_ON_FAILED_HRESULT(E_FAIL); - } - - // - // Set the DOM Selection namespace to simplify queries - // - BSTR_t ns(L"xmlns:psf='http://schemas.microsoft.com/windows/2003/08/printing/printschemaframework'"); - Variant_t nsProp(ns); - THROW_ON_FAILED_HRESULT( - m_pDOMDoc->setProperty(L"SelectionNamespaces", nsProp) - ); - - // - // Query the print ticket for parameters of interest - // - params.destDPI = QueryDPI(); - params.scaling = QueryScaling(); - params.physicalPageSize = QueryPhysicalPageSize(); - - // - // We simulate imageable area by assuming a constant margin of - // around the entire page - // - params.imageableArea.x = g_pageMargin * xpsDPI; - params.imageableArea.y = g_pageMargin * xpsDPI; - params.imageableArea.height = params.physicalPageSize.height - - 2 * g_pageMargin * xpsDPI; - params.imageableArea.width = params.physicalPageSize.width - - 2 * g_pageMargin * xpsDPI; - - return params; -} - -// -//Routine Name: -// -// PrintTicketHandler::QueryDPI -// -//Routine Description: -// -// Queries the DPI from the Print Ticket using an XPath query. -// -//Return Value: -// -// FLOAT -// DPI from the Print Ticket. -// -FLOAT -PrintTicketHandler::QueryDPI() -{ - // - // Default DPI: 96 DPI - // - FLOAT dpi = 96.0; - - // - // Perform the page resolution query on the print ticket - // - IXMLDOMNodeList_t pNodes; - - // - // The following XPath query is fairly straightforward, except for the - // predicate attached to Feature. This is necessary to match both the - // keyword AND the namespace of the "name" of the Feature as in: - // - // <psf:Feature name="psk:PageResolution"> - // - // In order to match the keyword, we match the substring after the colon: - // - // [substring-after(@name,':')='PageResolution'] - // - // We also need to ensure that the namespace refers to the correct - // printschemakeywords namespace. Thus we get: - // - // [name(namespace::*[.=PRINTSCHEMAKEYWORDNS])=substring-before(@name,':')] - // - // where PRINTSCHEMAKEYWORDNS is: - // - // http://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords - // - BSTR_t query(L"psf:PrintTicket/psf:Feature[substring-after(@name,':')='PageResolution']" - L"[name(namespace::*[.='http://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords'])=substring-before(@name,':')]" - L"/*/*/psf:Value"); - - THROW_ON_FAILED_HRESULT( - m_pDOMDoc->selectNodes(query, &pNodes) - ); - - if (pNodes) - { - // - // The Print Ticket may have both X and Y resolutions defined, but - // the Xps Rasterization Service only accepts a single resolution. - // We query for both X and Y resolutions and take the larger of the - // two as the destination DPI. The resultant raster data could then - // be scaled down in the other dimension to achieve the non-square - // pixels. - // - - LONG numResolutions; - - THROW_ON_FAILED_HRESULT( - pNodes->get_length(&numResolutions) - ); - - if (numResolutions != 0 && - numResolutions != 1 && - numResolutions != 2) - { - // - // We expect 0, 1, or 2 resolutions to be set in the Print Ticket. - // Throw if this is not the case. - // - THROW_ON_FAILED_HRESULT(E_UNEXPECTED); - } - - LONG maxResolution = 0; - - for (INT i = 0; i < numResolutions; i++) - { - IXMLDOMNode_t pCurrentNode; - - THROW_ON_FAILED_HRESULT( - pNodes->get_item(i, &pCurrentNode) - ); - - BSTR_t strResolution; - - THROW_ON_FAILED_HRESULT( - pCurrentNode->get_text(&strResolution) - ); - - LONG resolution; - - THROW_ON_FAILED_HRESULT( - ::VarI4FromStr( - strResolution, - LOCALE_USER_DEFAULT, - 0, // no custom flags - &resolution - ) - ); - - if (resolution > maxResolution) - { - maxResolution = resolution; - } - } - - dpi = static_cast<FLOAT>(maxResolution); - } - - DoTraceMessage(XPSRASFILTER_TRACE_VERBOSE, L"Got DPI: %f", dpi); - - return dpi; -} - -// -//Routine Name: -// -// PrintTicketHandler::QueryPhysicalPageSize -// -//Routine Description: -// -// Queries the physical page size from the -// Print Ticket using an XPath query. -// -//Return Value: -// -// XPS_SIZE -// Physical page size from the Print Ticket (in XPS units). -// -XPS_SIZE -PrintTicketHandler::QueryPhysicalPageSize() -{ - // - // Default page size: 8.5" x 11" at Xps DPI - // - XPS_SIZE pageSize = {11.0f * xpsDPI, - 8.5f * xpsDPI}; - - { - // - // Perform the page width query on the print ticket - // - IXMLDOMNode_t pNode; - - // - // See the comment in PrintTicketHandler::QueryDPI() for details - // about this XPath query. - // - BSTR_t query(L"psf:PrintTicket/psf:Feature[substring-after(@name,':')='PageMediaSize']" - L"[name(namespace::*[.='http://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords'])=substring-before(@name,':')]" - L"/*/psf:ScoredProperty[substring-after(@name,':')='MediaSizeWidth']" - L"[name(namespace::*[.='http://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords'])=substring-before(@name,':')]" - L"/psf:Value"); - - THROW_ON_FAILED_HRESULT( - m_pDOMDoc->selectSingleNode(query, &pNode) - ); - - if (pNode) - { - BSTR_t strWidth; - THROW_ON_FAILED_HRESULT( - pNode->get_text(&strWidth) - ); - - LONG width; - THROW_ON_FAILED_HRESULT( - ::VarI4FromStr( - strWidth, - LOCALE_USER_DEFAULT, - 0, // no custom flags - &width - ) - ); - - // - // the page dimensions are in microns; convert to Xps units - // - pageSize.width = MicronsToXpsUnits(width); - } - } - - { - // - // Perform the page height query on the print ticket - // - IXMLDOMNode_t pNode; - - // - // See the comment in PrintTicketHandler::QueryDPI() for details - // about this XPath query. - // - BSTR_t query(L"psf:PrintTicket/psf:Feature[substring-after(@name,':')='PageMediaSize']" - L"[name(namespace::*[.='http://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords'])=substring-before(@name,':')]" - L"/*/psf:ScoredProperty[substring-after(@name,':')='MediaSizeHeight']" - L"[name(namespace::*[.='http://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords'])=substring-before(@name,':')]" - L"/psf:Value"); - - THROW_ON_FAILED_HRESULT( - m_pDOMDoc->selectSingleNode(query, &pNode) - ); - - if (pNode) - { - BSTR_t strHeight; - THROW_ON_FAILED_HRESULT( - pNode->get_text(&strHeight) - ); - - LONG height; - THROW_ON_FAILED_HRESULT( - ::VarI4FromStr( - strHeight, - LOCALE_USER_DEFAULT, - 0, // no custom flags - &height - ) - ); - - // - // the page dimensions are in microns; convert to Xps unit - // - pageSize.height = MicronsToXpsUnits(height); - } - } - - { - // - // Perform the landscape query on the print ticket - // - IXMLDOMNode_t pNode; - - // - // See the comment in PrintTicketHandler::QueryDPI() for details - // about this XPath query. - // - BSTR_t query(L"psf:PrintTicket/psf:Feature[substring-after(@name,':')='PageOrientation']" - L"[name(namespace::*[.='http://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords'])=substring-before(@name,':')]" - L"/psf:Option[substring-after(@name,':')='Landscape']" - L"[name(namespace::*[.='http://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords'])=substring-before(@name,':')]"); - - THROW_ON_FAILED_HRESULT( - m_pDOMDoc->selectSingleNode(query, &pNode) - ); - - if (pNode) - { - // - // landscape. swap height and width. - // - FLOAT tmp; - - tmp = pageSize.height; - pageSize.height = pageSize.width; - pageSize.width = tmp; - } - - DoTraceMessage(XPSRASFILTER_TRACE_VERBOSE, L"Physical Page Size: %f x %f", pageSize.width, pageSize.height); - } - - return pageSize; -} - -// -//Routine Name: -// -// PrintTicketHandler::QueryScaling -// -//Routine Description: -// -// Queries the desired type of scaling from the -// Print Ticket using an XPath query. -// -//Return Value: -// -// PrintTicketScaling -// Scaling type from the Print Ticket. -// -PrintTicketScaling -PrintTicketHandler::QueryScaling() -{ - // - // Default Scaling: FitApplicationBleedSizeToPageImageableSize - // - PrintTicketScaling scaling = SCALE_BLEEDTOIMAGEABLE; - - // - // We do not query for media scaling. Rather, we always return - // the equivalent of FitApplicationBleedSizeToPageImageableSize - // - return scaling; -} - -} // namespace xpsrasfilter diff --git a/print/XpsRasFilter/src/PThandler.h b/print/XpsRasFilter/src/PThandler.h deleted file mode 100644 index 103e5d78..00000000 --- a/print/XpsRasFilter/src/PThandler.h +++ /dev/null @@ -1,112 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// PThandler.h -// -// Abstract: -// -// Print Ticket Handler class declaration. -// - -#pragma once - -namespace xpsrasfilter -{ - -class PrintTicketHandler -{ -public: - static - PrintTicketHandler_t - CreatePrintTicketHandler( - const IPrintPipelinePropertyBag_t &pPropertyBag - ); - - void - ProcessPart( - const IFixedDocumentSequence_t &pFDS - ); - - void - ProcessPart( - const IFixedDocument_t &pFD - ); - - void - ProcessPart( - const IFixedPage_t &pFP - ); - - ParametersFromPrintTicket - GetMergedPrintTicketParams(); - -private: - // - // Constructor is private; use CreatePrintTicketHandler - // to create instances. - // - PrintTicketHandler( - const IXMLDOMDocument2_t &pDoc, - SafeHPTProvider_t pHProvider, - const IStream_t &pUserPrintTicket - ); - - IStream_t - ProcessPrintTicket( - const IStream_t &pBasePrintTicket, - const IPartPrintTicket_t &pDeltaPrintTicketPart, - EPrintTicketScope scope - ); - - // - // Inline function to convert from microns to Xps Units - // - inline - FLOAT - MicronsToXpsUnits( - long dimensionInMicrons - ) - { - const FLOAT micronsPerInch = 25400.0f; // 2.54 cm/in --> 25400 um/in - - return ((static_cast<FLOAT>(dimensionInMicrons) / micronsPerInch) * xpsDPI); - } - - // - // Routines to query parameters from the DOM document - // - FLOAT - QueryDPI(); - - XPS_SIZE - QueryPhysicalPageSize(); - - PrintTicketScaling - QueryScaling(); - - // - // MSXML DOM document - // - IXMLDOMDocument2_t m_pDOMDoc; - - // - // Handle to the Print Ticket Provider - // - SafeHPTProvider_t m_pHProvider; - - // - // Cached Print Tickets - // - IStream_t m_pDefaultUserPrintTicket; - IStream_t m_pJobPrintTicket; - IStream_t m_pDocumentPrintTicket; - IStream_t m_pPagePrintTicket; -}; - -} // namespace xpsrasfilter diff --git a/print/XpsRasFilter/src/UnknownBase.h b/print/XpsRasFilter/src/UnknownBase.h deleted file mode 100644 index 5ecd2487..00000000 --- a/print/XpsRasFilter/src/UnknownBase.h +++ /dev/null @@ -1,158 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// UnknownBase.h -// -// Abstract: -// -// IUnknown implementation common to filter components derived from -// IUnknown. -// - -#pragma once - -namespace xpsrasfilter -{ - -template <class Interface> -class UnknownBase : public Interface -{ -public: - UnknownBase() : m_cRef(1) { } - virtual ~UnknownBase() { }; - - // - //Routine Name: - // - // UnknownBase::QueryInterface - // - //Routine Description: - // - // Implements IUnknown QueryInterface. - // - //Arguments: - // - // riid - id of the interface - // ppv - void pointer to the requested interface - // - //Return Value: - // - // HRESULT - // S_OK - On success - // E_NOINTERFACE - Invalid interface - // - _Must_inspect_result_ - HRESULT STDMETHODCALLTYPE - QueryInterface( - _In_ REFIID riid, - _Outptr_ PVOID *ppv - ) - { - HRESULT hr = S_OK; - - if (ppv == NULL) - { - WPP_LOG_ON_FAILED_HRESULT(E_POINTER); - - return E_POINTER; - } - - if (riid == IID_IUnknown) - { - *ppv = static_cast<IUnknown *>(this); - } - else if (riid == __uuidof(Interface)) - { - *ppv = static_cast<Interface *>(this); - } - else - { - *ppv = NULL; - WPP_LOG_ON_FAILED_HRESULT( - hr = E_NOINTERFACE - ); - } - - if (SUCCEEDED(hr)) - { - AddRef(); - } - - return hr; - } - - // - //Routine Name: - // - // UnknownBase::AddRef - // - //Routine Description: - // - // Implements IUnknown reference count increment - // on the current interface. - // - //Arguments: - // - // None - // - //Return Value: - // - // ULONG - // New reference count - // - ULONG STDMETHODCALLTYPE - AddRef() - { - return ::InterlockedIncrement(&m_cRef); - } - - // - //Routine Name: - // - // UnknownBase::Release - // - //Routine Description: - // - // Implements IUnknown reference count decrement - // on the current interface. - // - //Arguments: - // - // None - // - //Return Value: - // - // ULONG - // New reference count - // - //Note: - // - // The drv_at annotation tells Prefast to consider this object's memory - // freed after Release has been called. - // - _At_(this, __drv_freesMem(object)) - ULONG STDMETHODCALLTYPE - Release() - { - ULONG cRef = ::InterlockedDecrement(&m_cRef); - - if (0 == cRef) - { - delete this; - } - - return cRef; - } - -private: - volatile ULONG m_cRef; // interface reference count -}; - -} // namespace xpsrasfilter - diff --git a/print/XpsRasFilter/src/WppTrace.cpp b/print/XpsRasFilter/src/WppTrace.cpp deleted file mode 100644 index b788c461..00000000 --- a/print/XpsRasFilter/src/WppTrace.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// WppTrace.h -// -// Abstract: -// -// WPP tracing definitions. -// - -#include "precomp.h" -#include "WppTrace.h" - -#include "WppTrace.tmh" - -namespace xpsrasfilter -{ - -void TraceFailedHRESULT( - HRESULT hr, - char const *fileName, - int lineNum, - wchar_t const *extraText - ) -{ - DoTraceMessage(XPSRASFILTER_TRACE_ERROR, - "Failed HRESULT (%!HRESULT!) at %s:%d (%S)", - hr, - fileName, - lineNum, - extraText - ); -} - -} // namespace xpsrasfilter diff --git a/print/XpsRasFilter/src/WppTrace.h b/print/XpsRasFilter/src/WppTrace.h deleted file mode 100644 index 4f33db3b..00000000 --- a/print/XpsRasFilter/src/WppTrace.h +++ /dev/null @@ -1,58 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// WppTrace.h -// -// Abstract: -// -// WPP tracing definitions. -// - -#pragma once - -#define WPP_CONTROL_GUIDS WPP_DEFINE_CONTROL_GUID( \ - XpsRasFilter, \ - (EB4C6075, 0B67, 4a79, A0A3, 7CD9DF881194), \ - WPP_DEFINE_BIT(XPSRASFILTER_TRACE_ERROR) \ - WPP_DEFINE_BIT(XPSRASFILTER_TRACE_WARNING) \ - WPP_DEFINE_BIT(XPSRASFILTER_TRACE_INFO) \ - WPP_DEFINE_BIT(XPSRASFILTER_TRACE_VERBOSE) \ - ) - -#define WPP_LOG_ON_FAILED_HRESULT_WITH_TEXT(func_,text_) \ - { \ - HRESULT hr_ = func_; \ - if (FAILED(hr_)) \ - { \ - xpsrasfilter::TraceFailedHRESULT( \ - hr_, \ - __FILE__, \ - __LINE__, \ - text_ \ - ); \ - } \ - } - -#define WPP_LOG_ON_FAILED_HRESULT(func_) \ - { \ - WPP_LOG_ON_FAILED_HRESULT_WITH_TEXT(func_, L"") \ - } - -namespace xpsrasfilter -{ - -void -TraceFailedHRESULT( - HRESULT hr, - char const *fileName, - int lineNum, - wchar_t const *extraText - ); - -} // namespace xpsrasfilter diff --git a/print/XpsRasFilter/src/dllentry.cpp b/print/XpsRasFilter/src/dllentry.cpp deleted file mode 100644 index 8e19ae16..00000000 --- a/print/XpsRasFilter/src/dllentry.cpp +++ /dev/null @@ -1,326 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// dllentry.cpp -// -// Abstract: -// -// Xps Rasterization Service filter DLL entry points. -// - -#include "precomp.h" -#include "WppTrace.h" -#include "Exception.h" -#include "filtertypes.h" -#include "UnknownBase.h" -#include "xpsrasfilter.h" - -#include "dllentry.tmh" - -namespace xpsrasfilter -{ - -// -// Class Factory returned by DllGetClassObject() -// -class __declspec( uuid("CFF7BE69-E62D-403b-BE4F-48EC73F5DA1A") ) XPSRasFilterFactory : public UnknownBase<IClassFactory> -{ -public: - XPSRasFilterFactory() : - m_serverLocks(0) - { - ::InterlockedIncrement(&XPSRasFilter::ms_numObjects); - } - - ~XPSRasFilterFactory() - { - ::InterlockedDecrement(&XPSRasFilter::ms_numObjects); - } - - // - //Routine Name: - // - // XPSRasFilterFactory::CreateInstance - // - //Routine Description: - // - // Returns an instance of XPSRasFilter. - // - //Arguments: - // - // pUnkOuter - Outer class (must be NULL) - // riid - Requested interface (IPrintPipelineFilter) - // ppvObject - Pointer to the requested interface - // - //Return Value: - // - // HRESULT - // S_OK - On success - // Otherwise - Failure - // - HRESULT - STDMETHODCALLTYPE - CreateInstance( - IUnknown *pUnkOuter, - REFIID riid, - void **ppvObject - ) - { - HRESULT hr = S_OK; - - if (pUnkOuter != NULL) - { - WPP_LOG_ON_FAILED_HRESULT(CLASS_E_NOAGGREGATION); - - return CLASS_E_NOAGGREGATION; - } - - if (ppvObject == NULL) - { - WPP_LOG_ON_FAILED_HRESULT(E_POINTER); - - return E_POINTER; - } - - *ppvObject = NULL; - - xpsrasfilter::XPSRasFilter *pFilter = NULL; - - // - // XpsRasFilter::XpsRasFilter() can throw, as can new - // - try - { - DoTraceMessage(XPSRASFILTER_TRACE_INFO, L"Instantiating filter"); - pFilter = new xpsrasfilter::XPSRasFilter(); - } - CATCH_VARIOUS(hr) - - if (SUCCEEDED(hr)) - { - WPP_LOG_ON_FAILED_HRESULT( - hr = pFilter->QueryInterface(riid, ppvObject) - ); - - pFilter->Release(); - } - - return hr; - } - - // - //Routine Name: - // - // XPSRasFilterFactory::LockServer - // - //Routine Description: - // - // Allows clients to lock the filter factory in - // memory. - // - //Arguments: - // - // fLock - TRUE - lock; FALSE - unlock - // - //Return Value: - // - // HRESULT - // S_OK - On success - // - HRESULT - STDMETHODCALLTYPE - LockServer( - BOOL fLock - ) - { - LONG result; - - if (fLock) // lock - { - result = ::InterlockedIncrement(&m_serverLocks); - - if (result == 1) - { - // - // This was the first 'lock' call; increment the - // global numObjects - // - ::InterlockedIncrement(&XPSRasFilter::ms_numObjects); - } - } - else // unlock - { - result = ::InterlockedDecrement(&m_serverLocks); - - if (result == 0) - { - // - // All locks have been unlocked; decrement the - // global numObjects - // - ::InterlockedDecrement(&XPSRasFilter::ms_numObjects); - } - } - - return S_OK; - } - -private: - volatile LONG m_serverLocks; -}; - -} // namespace xpsrasfilter - -// -//Routine Name: -// -// DllGetClassObject -// -//Routine Description: -// -// Returns an instance of XPSRasFilterFactory. -// -//Arguments: -// -// rclsid - Requested class (XPSRasFilter) -// riid - Requested interface (IClassFactory) -// ppv - Pointer to the requested interface -// -//Return Value: -// -// HRESULT -// S_OK - On success -// Otherwise - Failure -// -STDAPI -DllGetClassObject( - _In_ REFCLSID rclsid, - _In_ REFIID riid, - _Outptr_ LPVOID *ppv - ) -{ - HRESULT hr = S_OK; - - if (ppv == NULL) - { - WPP_LOG_ON_FAILED_HRESULT(E_POINTER); - - return E_POINTER; - } - - *ppv = NULL; - - if (rclsid != __uuidof(xpsrasfilter::XPSRasFilterFactory)) - { - WPP_LOG_ON_FAILED_HRESULT(CLASS_E_CLASSNOTAVAILABLE); - - return CLASS_E_CLASSNOTAVAILABLE; - } - - DoTraceMessage(XPSRASFILTER_TRACE_INFO, L"Instantiating class factory"); - - xpsrasfilter::XPSRasFilterFactory *pFactory = NULL; - pFactory = new(std::nothrow) xpsrasfilter::XPSRasFilterFactory(); - - if (pFactory == NULL) - { - WPP_LOG_ON_FAILED_HRESULT(E_OUTOFMEMORY); - - hr = E_OUTOFMEMORY; - } - - if (SUCCEEDED(hr)) - { - WPP_LOG_ON_FAILED_HRESULT( - hr = pFactory->QueryInterface(riid, ppv) - ); - - pFactory->Release(); - } - - return hr; -} - -// -//Routine Name: -// -// DllCanUnloadNow -// -//Routine Description: -// -// Checks whether the DLL can be unloaded. That is, -// whether there are any instances of XPSRasFilter. -// -//Arguments: -// -// None -// -//Return Value: -// -// HRESULT -// S_OK - Can unload. -// Otherwise - Cannot unload. -// -STDAPI -DllCanUnloadNow() -{ - return (0 == xpsrasfilter::XPSRasFilter::ms_numObjects) ? S_OK : S_FALSE; -} - -// -//Routine Name: -// -// DllMain -// -//Routine Description: -// -// Initializes WPP tracing when the DLL is loaded -// and cleans up WPP tracing when the DLL is unloaded. -// -//Arguments: -// -// None -// -//Return Value: -// -// HRESULT -// S_OK - On success. -// Otherwise - Otherwise. -// -extern "C" -BOOL -WINAPI -DllMain( - _In_ HINSTANCE hinstDLL, - _In_ DWORD fdwReason, - _In_opt_ LPVOID /*lpvReserved*/ - ) -{ - switch(fdwReason) - { - case DLL_PROCESS_ATTACH: - - ::DisableThreadLibraryCalls(hinstDLL); - - WPP_INIT_TRACING(L"XpsRasFilter"); - DoTraceMessage(XPSRASFILTER_TRACE_INFO, L"DLL_PROCESS_ATTACH"); - - break; - - case DLL_PROCESS_DETACH: - - DoTraceMessage(XPSRASFILTER_TRACE_INFO, L"DLL_PROCESS_DETACH"); - WPP_CLEANUP(); - - break; - } - - return TRUE; -} - diff --git a/print/XpsRasFilter/src/filtertypes.h b/print/XpsRasFilter/src/filtertypes.h deleted file mode 100644 index 6b5c35e6..00000000 --- a/print/XpsRasFilter/src/filtertypes.h +++ /dev/null @@ -1,497 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// filtertypes.h -// -// Abstract: -// -// Smart pointer types. Shared structures and enums. -// - -#pragma once - -// -// XpsDrv Print Pipeline types -// -typedef CComPtr<IXpsDocument> IXpsDocument_t; -typedef CComPtr<IFixedDocumentSequence> IFixedDocumentSequence_t; -typedef CComPtr<IFixedDocument> IFixedDocument_t; -typedef CComPtr<IFixedPage> IFixedPage_t; -typedef CComPtr<IPrintReadStreamFactory> IPrintReadStreamFactory_t; -typedef CComPtr<IPrintReadStream> IPrintReadStream_t; -typedef CComPtr<IPrintWriteStream> IPrintWriteStream_t; -typedef CComPtr<IInterFilterCommunicator> IInterFilterCommunicator_t; -typedef CComPtr<IPrintPipelinePropertyBag> IPrintPipelinePropertyBag_t; -typedef CComPtr<IPrintPipelineManagerControl> IPrintPipelineManagerControl_t; -typedef CComPtr<IXpsDocumentProvider> IXpsDocumentProvider_t; -typedef CComPtr<IXpsDocumentConsumer> IXpsDocumentConsumer_t; -typedef CComPtr<IXpsPartIterator> IXpsPartIterator_t; -typedef CComPtr<IPartBase> IPartBase_t; -typedef CComPtr<IPartFont2> IPartFont2_t; -typedef CComPtr<IPartFont> IPartFont_t; -typedef CComPtr<IPartImage> IPartImage_t; -typedef CComPtr<IPartColorProfile> IPartColorProfile_t; -typedef CComPtr<IPartResourceDictionary> IPartResourceDictionary_t; -typedef std::vector<CAdapt<IPartResourceDictionary_t>> ResourceDictionaryList_t; -typedef CComPtr<IPartPrintTicket> IPartPrintTicket_t; - -// -// Xps Object Model types -// -typedef CComPtr<IXpsOMObjectFactory> IXpsOMObjectFactory_t; -typedef CComPtr<IXpsOMPartResources> IXpsOMPartResources_t; -typedef CComPtr<IXpsOMFontResourceCollection> IXpsOMFontResourceCollection_t; -typedef CComPtr<IXpsOMImageResourceCollection> IXpsOMImageResourceCollection_t; -typedef CComPtr<IXpsOMColorProfileResourceCollection> IXpsOMColorProfileResourceCollection_t; -typedef CComPtr<IXpsOMRemoteDictionaryResourceCollection> IXpsOMRemoteDictionaryResourceCollection_t; -typedef CComPtr<IXpsOMFontResource> IXpsOMFontResource_t; -typedef CComPtr<IXpsOMImageResource> IXpsOMImageResource_t; -typedef CComPtr<IXpsOMColorProfileResource> IXpsOMColorProfileResource_t; -typedef CComPtr<IXpsOMRemoteDictionaryResource> IXpsOMRemoteDictionaryResource_t; -typedef CComPtr<IXpsOMPage> IXpsOMPage_t; - -// -// Opc Types -// -typedef CComPtr<IOpcFactory> IOpcFactory_t; -typedef CComPtr<IOpcPartUri> IOpcPartUri_t; - -// -// Common types -// -typedef CComPtr<IStream> IStream_t; -typedef CComPtr<IUnknown> IUnknown_t; -typedef CComBSTR BSTR_t; -typedef CComVariant Variant_t; -typedef CComPtr<IPropertyBag2> IPropertyBag2_t; - -// -// WIC types -// -typedef CComPtr<IWICImagingFactory> IWICImagingFactory_t; -typedef CComPtr<IWICBitmap> IWICBitmap_t; -typedef CComPtr<IWICStream> IWICStream_t; -typedef CComPtr<IWICBitmapEncoder> IWICBitmapEncoder_t; -typedef CComPtr<IWICBitmapFrameEncode> IWICBitmapFrameEncode_t; - -// -// Xps Rasterization Service types -// -typedef CComPtr<IXpsRasterizationFactory> IXpsRasterizationFactory_t; -typedef CComPtr<IXpsRasterizer> IXpsRasterizer_t; - -// -// MSXML DOM types -// -typedef CComPtr<IXMLDOMDocument2> IXMLDOMDocument2_t; -typedef CComPtr<IXMLDOMNode> IXMLDOMNode_t; -typedef CComPtr<IXMLDOMNodeList> IXMLDOMNodeList_t; - -namespace xpsrasfilter -{ - -// -// Supported types of print ticket scaling -// -enum PrintTicketScaling -{ - SCALE_NONE, - SCALE_BLEEDTOIMAGEABLE, - SCALE_CONTENTTOIMAGEABLE, - SCALE_MEDIASIZETOIMAGEABLE, - SCALE_MEDIASIZETOMEDIASIZE -}; - -// -// Parameters that can be read from the Print Ticket -// to feed into rasterization calculations. -// -struct ParametersFromPrintTicket -{ - XPS_SIZE physicalPageSize; // in XPS units - PrintTicketScaling scaling; // scaling type - FLOAT destDPI; // target rasterization dpi - XPS_RECT imageableArea; // in XPS units -}; - -// -// Parameters read from the FixedPage -// to feed into rasterization calculations. -// -struct ParametersFromFixedPage -{ - XPS_SIZE fixedPageSize; // in XPS units - XPS_RECT bleedBoxRect; // in XPS units - XPS_RECT contentBoxRect; // in XPS units -}; - -// -// Forward Declarations -// -class RasterizationInterface; -class PrintTicketHandler; -class TiffStreamBitmapHandler; -class FilterLiveness; - -} // namespace xpsrasfilter - -// -// This class handles setting and clearing the security -// context, based on a token. This token is retrieved from -// the filter pipeline, and we do not want to free it. -// -class ScopeImpersonation -{ -public: - ScopeImpersonation( - HANDLE token - ) - { - if ( - !SetThreadToken( - NULL, // set the current thread's token - token - ) - ) - { - THROW_LAST_ERROR(); - } - } - - ~ScopeImpersonation() - { - if ( - !SetThreadToken( - NULL, // set the current thread's token - NULL // revert to default security context - ) - ) - { - // - // We couldn't revert the security context. The filter pipeline - // manager will clean up the thread when operation is complete, - // when it is determined that the security context was not - // reverted. Since there are no security implications with - // running this filter in an elevated context, we can log the - // error and continue to run. - // - DWORD error = ::GetLastError(); - - WPP_LOG_ON_FAILED_HRESULT_WITH_TEXT( - HRESULT_FROM_WIN32(error), - L"Failed to revert thread security context." - ); - } - } - -private: - ScopeImpersonation(ScopeImpersonation const&); - ScopeImpersonation& operator=(ScopeImpersonation const&); -}; - -// -// RAII object to make HGLOBAL locks exception-safe. This requires -// unlocking during unwind. -// -class HGlobalLock -{ -public: - HGlobalLock( - HGLOBAL hG - ) : - m_hGlobal(hG) - { - m_pAddress = static_cast<BYTE *>( - ::GlobalLock(m_hGlobal) - ); - - if (!m_pAddress) - { - THROW_LAST_ERROR(); - } - } - - ~HGlobalLock() - { - if (!::GlobalUnlock(m_hGlobal)) - { - WPP_LOG_ON_FAILED_HRESULT( - HRESULT_FROM_WIN32(::GetLastError()) - ); - } - } - - BYTE* - GetAddress() - { - return m_pAddress; - } -private: - HGLOBAL m_hGlobal; - BYTE *m_pAddress; - - HGlobalLock(HGlobalLock const&); - HGlobalLock& operator=(HGlobalLock const&); - -}; - -typedef std::auto_ptr<HGlobalLock> HGlobalLock_t; - -// -// Safe handle to make HGLOBAL exception-safe. This requires both -// freeing and unlocking during unwind. -// -class SafeHGlobal -{ -public: - - SafeHGlobal( - UINT flags, - SIZE_T size - ) - { - m_hGlobal = ::GlobalAlloc(flags, size); - - if (!m_hGlobal) - { - THROW_ON_FAILED_HRESULT(E_OUTOFMEMORY); - } - } - - virtual - ~SafeHGlobal() - { - if (m_hGlobal) - { - // - // Free the HGLOBAL - // - ::GlobalFree(m_hGlobal); - } - } - - operator HGLOBAL() - { - return m_hGlobal; - } - - // - // Passes ownership of the HGLOBAL from this safe handle - // to a new IStream. - // - IStream_t - ConvertToIStream() - { - IStream_t pStream; - - THROW_ON_FAILED_HRESULT( - ::CreateStreamOnHGlobal( - m_hGlobal, - TRUE, // Free the HGLOBAL on Release of the stream - &pStream - ) - ); - - m_hGlobal = NULL; - - return pStream; - } - - HGlobalLock_t - Lock() - { - HGlobalLock_t toReturn( - new HGlobalLock(m_hGlobal) - ); - return toReturn; - } - -private: - - HGLOBAL m_hGlobal; - - SafeHGlobal(SafeHGlobal const&); - SafeHGlobal& operator=(SafeHGlobal const&); - -}; - -// -// Safe handle to make HPTPROVIDER exception safe. This -// requires closing the provider during unwind. -// -class SafeHPTProvider -{ -public: - SafeHPTProvider( - const wchar_t *printerName, - HANDLE userSecurityToken - ) : - m_token(userSecurityToken) - { - // - // We impersonate the user while we call PTQuerySchemaVersionSupport - // and PTOpenProviderEx. - // - ScopeImpersonation impersonate(m_token); - - DWORD maxVersion, - tempVersion; - - THROW_ON_FAILED_HRESULT( - ::PTQuerySchemaVersionSupport( - printerName, - &maxVersion - ) - ); - - THROW_ON_FAILED_HRESULT( - ::PTOpenProviderEx( - printerName, - maxVersion, // maximum version - maxVersion, // preferred version - &m_hProvider, - &tempVersion // version used by the provider - ) - ); - } - - virtual - ~SafeHPTProvider() - { - WPP_LOG_ON_FAILED_HRESULT( - ::PTCloseProvider(m_hProvider) - ); - } - - void - PTMergeAndValidatePrintTicket( - const IStream_t &pBasePrintTicket, - const IStream_t &pDeltaPrintTicket, - EPrintTicketScope scope, - _Inout_ IStream_t &pMergedPrintTicket - ) - { - // - // We impersonate the user while we call PTMergeAndValidatePrintTicket. - // - ScopeImpersonation impersonate(m_token); - - BSTR_t error; - - HRESULT hr = ::PTMergeAndValidatePrintTicket( - m_hProvider, - pBasePrintTicket, - pDeltaPrintTicket, - scope, - pMergedPrintTicket, - &error - ); - - WPP_LOG_ON_FAILED_HRESULT_WITH_TEXT( - hr, - error - ); - - THROW_ON_FAILED_HRESULT(hr); - } - -private: - - HPTPROVIDER m_hProvider; - HANDLE m_token; - - SafeHPTProvider(SafeHPTProvider const&); - SafeHPTProvider& operator=(SafeHPTProvider const&); -}; - -// -// CoInitialize/CoUninitialize RAII object -// -// This object ensures that COM is initialized for the duration -// of the XpsRasFilter's lifetime, and then uninitialized after -// all of the COM objects, regardless of how the filter exits -// -class SafeCoInit -{ -public: - SafeCoInit() : - m_doCoUninitialize(FALSE) - { - // - // Initialize COM - // - HRESULT hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED); - - if (FAILED(hr) && - hr != RPC_E_CHANGED_MODE) - { - // - // RPC_E_CHANGED_MODE indicates that we attempted to change the - // threading model. It is safe to ignore since we do not *require* - // multi-threading. Throw on any other errors. - // - - THROW_ON_FAILED_HRESULT(hr); - } - else if (SUCCEEDED(hr)) - { - // - // It is important that we only call CoUninitialize() if we - // succeeded in setting the threading model. - // - - m_doCoUninitialize = TRUE; - } - } - - ~SafeCoInit() - { - if (m_doCoUninitialize) - { - ::CoUninitialize(); - } - } -private: - SafeCoInit(SafeCoInit const&); - SafeCoInit& operator=(SafeCoInit const&); - - BOOL m_doCoUninitialize; -}; - -// -// RAII object to make VARIANT exception-safe. This requires -// VariantClear during unwind. -// -class SafeVariant : public VARIANT -{ -public: - SafeVariant() - { - ::VariantInit(this); - } - - ~SafeVariant() - { - ::VariantClear(this); - } -private: - SafeVariant(SafeVariant const&); - SafeVariant& operator=(SafeVariant const&); -}; - -// -// Internal Types -// -typedef std::auto_ptr<xpsrasfilter::RasterizationInterface> RasterizationInterface_t; -typedef std::auto_ptr<xpsrasfilter::PrintTicketHandler> PrintTicketHandler_t; -typedef std::auto_ptr<xpsrasfilter::TiffStreamBitmapHandler> TiffStreamBitmapHandler_t; -typedef std::auto_ptr<SafeHGlobal> SafeHGlobal_t; -typedef std::auto_ptr<SafeHPTProvider> SafeHPTProvider_t; -typedef CComPtr<xpsrasfilter::FilterLiveness> FilterLiveness_t; - diff --git a/print/XpsRasFilter/src/precomp.h b/print/XpsRasFilter/src/precomp.h deleted file mode 100644 index 8cfbe37b..00000000 --- a/print/XpsRasFilter/src/precomp.h +++ /dev/null @@ -1,87 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// precomp.h -// -// Abstract: -// -// Precompiled header for the Xps Rasterization Service sample filter. -// - -#pragma once - -// -// Define this as a usermode driver for analysis purposes -// -#include <DriverSpecs.h> -__user_driver - -// -// Standard Annotation Language include -// -#include <sal.h> - -// -// Windows includes -// -#include <windows.h> - -// Standard includes -#include <cstring> -#include <intsafe.h> -#include <new> -#include <memory> - -// STL -#include <vector> - -// -// COM includes -// -#include <objbase.h> -#include <oleauto.h> - -// -// Filter pipeline includes -// -#include <winspool.h> -#include <filterpipeline.h> -#include <filterpipelineutil.h> -#include <prntvpt.h> - -// -// ATL -// -#include <atlbase.h> - -// -// WIC -// -#include <wincodec.h> - -// -// MSXML -// -#include <msxml6.h> - -// -// OPC Layer -// -#include <msopc.h> - -// -// Xps Object Model -// -#include <XpsObjectModel.h> - -// -// Xps Rasterization Service -// -#include <xpsrassvc.h> - diff --git a/print/XpsRasFilter/src/precompsrc.cpp b/print/XpsRasFilter/src/precompsrc.cpp deleted file mode 100644 index 5944cf51..00000000 --- a/print/XpsRasFilter/src/precompsrc.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "precomp.h"
\ No newline at end of file diff --git a/print/XpsRasFilter/src/rasinterface.cpp b/print/XpsRasFilter/src/rasinterface.cpp deleted file mode 100644 index adbf73e4..00000000 --- a/print/XpsRasFilter/src/rasinterface.cpp +++ /dev/null @@ -1,412 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// rasinterface.cpp -// -// Abstract: -// -// Class to wrap rasterization-related calculations, interactions with -// the Xps Rasterization Service, Xps Rasterization Service Callback, -// and eventual raster output (i.e. TIFF encoding) -// - -#include "precomp.h" -#include "WppTrace.h" -#include "Exception.h" -#include "filtertypes.h" -#include "UnknownBase.h" -#include "xpsrasfilter.h" -#include "OMConvertor.h" -#include "rasinterface.h" -#include "BitmapHandler.h" - -#include "rasinterface.tmh" - -namespace xpsrasfilter -{ - -// -//Routine Name: -// -// RasterizationInterface::CreateRasterizationInterface -// -//Routine Description: -// -// Static factory method that creates an instance of -// RasterizationInterface. -// -//Arguments: -// -// pPropertyBag - Property Bag -// pStream - Filter output stream (IPrintWriteStream) -// -//Return Value: -// -// RasterizationInterface_t (smart ptr) -// The new RasterizationInterface. -// -RasterizationInterface_t -RasterizationInterface::CreateRasterizationInterface( - const IPrintPipelinePropertyBag_t &pPropertyBag, - const IPrintWriteStream_t &pStream - ) -{ - Variant_t varRasFactory; - IXpsRasterizationFactory_t pXPSRasFactory; - - // - // Get the Xps Rasterization Service factory. Since XpsRasterService.dll - // is specified as an OptionalFilterServiceProvider in the filter pipeline - // configuration file, the factory may not be available in the property bag - // (e.g. when running on Windows Vista, Windows XP, etc). In this case, - // this call will fail and the filter could fail, as we do here, or could - // default to some other behavior. - // - THROW_ON_FAILED_HRESULT( - pPropertyBag->GetProperty( - L"MS_IXpsRasterizationFactory", - &varRasFactory - ) - ); - - IUnknown_t pUnk(varRasFactory.punkVal); - - THROW_ON_FAILED_HRESULT( - pUnk.QueryInterface(&pXPSRasFactory) - ); - - // - // Prepare the rasterization/encode/stream interface - // - TiffStreamBitmapHandler_t pBitmapHandler( - TiffStreamBitmapHandler::CreateTiffStreamBitmapHandler(pStream) - ); - - RasterizationInterface_t pReturnInterface( - new RasterizationInterface( - pXPSRasFactory, - pBitmapHandler - ) - ); - - return pReturnInterface; -} - -// -//Routine Name: -// -// RasterizationInterface::RasterizationInterface -// -//Routine Description: -// -// Construct the Rasterization Interface with the -// IXpsRasterizationFactory interface and bitmap -// handler. -// -//Arguments: -// -// pRasFactory - Xps Rasterization Service object factory -// pBitmapHandler - Class to handle band bitmaps -// -RasterizationInterface::RasterizationInterface( - const IXpsRasterizationFactory_t &pRasFactory, - TiffStreamBitmapHandler_t pBitmapHandler - ) : m_pXPSRasFactory(pRasFactory), - m_pBitmapHandler(pBitmapHandler) -{ -} - -// -//Routine Name: -// -// RasterizationInterface::FinishRasterization -// -//Routine Description: -// -// Tell the Rasterization Interface that the last -// page has been rasterized. -// -//Arguments: -// -// None -// -void -RasterizationInterface::FinishRasterization() -{ - m_pBitmapHandler->WriteFooter(); -} - - -// -//Routine Name: -// -// RasterizationInterface::RasterizeAndStreamPage -// -//Routine Description: -// -// Given an IXpsOMPage and a set of Print Ticket -// parameters, this method invokes the Xps Rasterization -// Service for each band of the page, and outputs the -// resultant raster data. -// -//Arguments: -// -// pPage - page to rasterize -// printTicketparams - raw parameters from the print ticket(s) -// -void -RasterizationInterface::RasterizePage( - const IXpsOMPage_t &pPage, - const ParametersFromPrintTicket &printTicketParams, - const FilterLiveness_t &pLiveness - ) -{ - // - // Calculate rasterization parameters - // - ParametersFromFixedPage fixedPageParams; - THROW_ON_FAILED_HRESULT( - pPage->GetPageDimensions(&fixedPageParams.fixedPageSize) - ); - THROW_ON_FAILED_HRESULT( - pPage->GetBleedBox(&fixedPageParams.bleedBoxRect) - ); - THROW_ON_FAILED_HRESULT( - pPage->GetContentBox(&fixedPageParams.contentBoxRect) - ); - - RasterizationParameters rastParams( - printTicketParams, - fixedPageParams - ); - - // - // Create the Rasterizer - // - IXpsRasterizer_t rasterizer; - THROW_ON_FAILED_HRESULT( - m_pXPSRasFactory->CreateRasterizer( - pPage, - rastParams.rasterizationDPI, - XPSRAS_RENDERING_MODE_ANTIALIASED, - XPSRAS_RENDERING_MODE_ANTIALIASED, - &rasterizer - ) - ); - - // - // Set the minimal line width to 1 pixel - // - THROW_ON_FAILED_HRESULT( - rasterizer->SetMinimalLineWidth(1) - ); - - // - // Loop over bands - // - INT bandOriginY = 0; - - while (pLiveness->IsAlive() && - bandOriginY < rastParams.rasterHeight) - { - DoTraceMessage(XPSRASFILTER_TRACE_VERBOSE, L"Rasterizing Band"); - - IWICBitmap_t bitmap; - - // - // Calculate the height of this band - // - INT bandHeight = rastParams.bandHeight; - if (bandOriginY + rastParams.bandHeight >= rastParams.rasterHeight) - { - bandHeight = rastParams.rasterHeight - bandOriginY; - } - - // - // Rasterize this band - // - { - HRESULT hr = rasterizer->RasterizeRect( - rastParams.originX, - bandOriginY + rastParams.originY, - rastParams.rasterWidth, - bandHeight, - static_cast<IXpsRasterizerNotificationCallback *>(pLiveness), - &bitmap - ); - - // - // Do not throw if we have cancelled rasterization - // - if (hr == HRESULT_FROM_WIN32(ERROR_PRINT_CANCELLED)) - { - DoTraceMessage(XPSRASFILTER_TRACE_VERBOSE, L"Rasterization Cancelled"); - return; - } - - THROW_ON_FAILED_HRESULT(hr); - } - - bandOriginY += bandHeight; - - // - // The resolution of the bitmap defaults to the - // rasterization DPI, which includes the scaling factor. - // We want the output bitmap to reflect the destination DPI. - // - THROW_ON_FAILED_HRESULT( - bitmap->SetResolution( - printTicketParams.destDPI, - printTicketParams.destDPI - ) - ); - - // - // Encode the raster data as TIFF and stream out - // - m_pBitmapHandler->ProcessBitmap(bitmap); - } -} - -// -//Routine Name: -// -// RasterizationParameters::RasterizationParameters -// -//Routine Description: -// -// Given a set of fixed page parameters and a set of Print Ticket -// parameters, this constructor calculates the parameters necessary to -// invoke the Xps Rasterization Service. -// -//Arguments: -// -// printTicketparams - raw parameters from the print ticket(s) -// fixedPageParams - raw parameters from the fixed page -// -RasterizationParameters::RasterizationParameters( - const ParametersFromPrintTicket &printTicketParams, - const ParametersFromFixedPage &fixedPageParams - ) -{ - // - // Rasterize the entire physical page at the desired resolution. The fixed page - // is scaled and traslated to place it correctly witin the physical page. - // - rasterHeight = static_cast<INT>( - printTicketParams.physicalPageSize.height - * (printTicketParams.destDPI / xpsDPI) - + 0.5 - ); - rasterWidth = static_cast<INT>( - printTicketParams.physicalPageSize.width - * (printTicketParams.destDPI / xpsDPI) - + 0.5 - ); - - // - // Determine the source rectangle for the scale operation - // - XPS_RECT srcRect = {0,0,0,0}; - - switch(printTicketParams.scaling) - { - case SCALE_BLEEDTOIMAGEABLE: - - srcRect = fixedPageParams.bleedBoxRect; - - break; - default: - DoTraceMessage(XPSRASFILTER_TRACE_ERROR, L"Unknown scaling type"); - THROW_ON_FAILED_HRESULT(E_UNEXPECTED); - break; - } - - // - // Determine the destination rectangle for the scale operation - // - XPS_RECT destRect = {0,0,0,0}; - - switch(printTicketParams.scaling) - { - case SCALE_BLEEDTOIMAGEABLE: - - destRect = printTicketParams.imageableArea; - - break; - default: - DoTraceMessage(XPSRASFILTER_TRACE_ERROR, L"Unknown scaling type"); - THROW_ON_FAILED_HRESULT(E_UNEXPECTED); - break; - } - - - // - // Because we want to fit the fixed page into a physical page of - // potentially different aspect ratio, it is necessary to calculate - // the scaling factor assuming either the height or width constrains - // the operation; the rasterization dpi is then the smaller of the two. - // - // - // The basic calculation for scaling factor is: - // - // Scaling Factor = (Destination Dimension / Source Dimension) - // - // Multiplying by desired Destination DPI we get the DPI at which to - // rasterize the source content in order to get the desired size - // - // Rasterization DPI = Scaling Factor * Desired Destination DPI - // - { - FLOAT heightScalingFactor = destRect.height / srcRect.height; - FLOAT widthScalingFactor = destRect.width / srcRect.width; - - FLOAT heightRastDPI = heightScalingFactor * printTicketParams.destDPI; - FLOAT widthRastDPI = widthScalingFactor * printTicketParams.destDPI; - - rasterizationDPI = min(heightRastDPI, widthRastDPI); - } - - // - // To determine the rasterization origin, subtract the translation - // due to the destination rectangle (e.g. imageable area) from the - // translation due to the choice of scale (e.g. bleed box origin) - // - { - FLOAT srcOffsetX = srcRect.x * rasterizationDPI / xpsDPI; - FLOAT srcOffsetY = srcRect.y * rasterizationDPI / xpsDPI; - - FLOAT destOffsetX = destRect.x * printTicketParams.destDPI / xpsDPI; - FLOAT destOffsetY = destRect.y * printTicketParams.destDPI / xpsDPI; - - originX = static_cast<INT>(srcOffsetX - destOffsetX - 0.5); - originY = static_cast<INT>(srcOffsetY - destOffsetY - 0.5); - } - - // - // The height of each band is determined by the maximum band size (in bytes) - // divided by 4 bytes per pixel to get the total pixels, and then divided by - // the width of the raster data. This results in a band bitmap that is close - // to the target band size. - // - bandHeight = (RasterizationInterface::ms_targetBandSize / 4) / rasterWidth; - - if (bandHeight == 0) - { - // - // The physical page is too wide to rasterize at this - // maximum band size and dpi. Throw. - // - THROW_ON_FAILED_HRESULT( - E_OUTOFMEMORY - ); - } -} - -} // namespace xpsrasfilter diff --git a/print/XpsRasFilter/src/rasinterface.h b/print/XpsRasFilter/src/rasinterface.h deleted file mode 100644 index 3fae74cf..00000000 --- a/print/XpsRasFilter/src/rasinterface.h +++ /dev/null @@ -1,107 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// rasinterface.h -// -// Abstract: -// -// Class to wrap rasterization-related calculations, interactions with -// the Xps Rasterization Service, Xps Rasterization Service Callback, -// and eventual raster output (i.e. TIFF encoding) -// - -#pragma once - -namespace xpsrasfilter -{ - -class RasterizationInterface -{ -public: - static - RasterizationInterface_t - CreateRasterizationInterface( - const IPrintPipelinePropertyBag_t &pPropertyBag, - const IPrintWriteStream_t &pStream - ); - - RasterizationInterface(); - - void - RasterizePage( - const IXpsOMPage_t &pPage, - const ParametersFromPrintTicket &printTicketParams, - const FilterLiveness_t &pLiveness - ); - - void - CancelRasterization(); - - void - FinishRasterization(); - - // - // Target band size; 16MB - // - const static LONG ms_targetBandSize = 1024 * 1024 * 16; - -private: - - // - // Constructor is private; use CreateRasterizationInterface - // to create instances - // - RasterizationInterface( - const IXpsRasterizationFactory_t &pRasFactory, - TiffStreamBitmapHandler_t pBitmapHandler - ); - - // - // prevent copy semantics - // - RasterizationInterface(const RasterizationInterface&); - RasterizationInterface& operator=(const RasterizationInterface&); - - // - // Internal data members - // - - // - // Xps Rasterization Service Factory - // - IXpsRasterizationFactory_t m_pXPSRasFactory; - - // - // Bitmap Handler - // - TiffStreamBitmapHandler_t m_pBitmapHandler; -}; - -// -// Parameters that determine how a page is rasterized, in the -// units that the Rasterization Service expects -// -struct RasterizationParameters -{ - FLOAT rasterizationDPI; // dpi (scaling factor) - INT rasterHeight; // total size of raster - INT rasterWidth; - INT originX; // origin of the rasterization (translation) - INT originY; - INT bandHeight; // height of individual bands - - RasterizationParameters( - const ParametersFromPrintTicket &printTicketParams, - const ParametersFromFixedPage &fixedPageParams - ); -}; - -const FLOAT xpsDPI = 96.0f; - -} // namespace xpsrasfilter diff --git a/print/XpsRasFilter/src/xpsrasfilter.cpp b/print/XpsRasFilter/src/xpsrasfilter.cpp deleted file mode 100644 index 1199a540..00000000 --- a/print/XpsRasFilter/src/xpsrasfilter.cpp +++ /dev/null @@ -1,396 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// xpsrasfilter.cpp -// -// Abstract: -// -// Xps Rasterization Service filter implementation. -// - -#include "precomp.h" -#include "WppTrace.h" -#include "Exception.h" -#include "filtertypes.h" -#include "UnknownBase.h" -#include "OMConvertor.h" -#include "rasinterface.h" -#include "BitmapHandler.h" -#include "PThandler.h" -#include "xpsrasfilter.h" - -#include "xpsrasfilter.tmh" - -namespace xpsrasfilter -{ - -long XPSRasFilter::ms_numObjects = 0; // Initialize static object count - -// -//Routine Name: -// -// XPSRasFilter::XPSRasFilter -// -//Routine Description: -// -// Xps Rasterization Service sample filter default constructor. -// -//Arguments: -// -// None -// -//Return Value: -// -// None -// -XPSRasFilter::XPSRasFilter() -{ - // - // Take ownership with no AddRef - // - m_pLiveness.Attach(new FilterLiveness()); - - ::InterlockedIncrement(&ms_numObjects); -} - -// -//Routine Name: -// -// XPSRasFilter::~XPSRasFilter -// -//Routine Description: -// -// Xps Rasterization Service sample filter destructor. -// -//Arguments: -// -// None -// -//Return Value: -// -// None -// -XPSRasFilter::~XPSRasFilter() -{ - ::InterlockedDecrement(&ms_numObjects); -} - -// -//Routine Name: -// -// XPSRasFilter::InitializeFilter -// -//Routine Description: -// -// Exception boundary wrapper for IPrintPipelineFilter initialization. -// -//Arguments: -// -// pICommunicator - interface to interfilter communicator -// pIPropertyBag - interface to pipeline property bag -// pIPipelineControl - interface to pipeline control methods -// -//Return Value: -// -// ULONG -// New reference count -// -_Must_inspect_result_ -HRESULT STDMETHODCALLTYPE -XPSRasFilter::InitializeFilter( - _In_ IInterFilterCommunicator *pICommunicator, - _In_ IPrintPipelinePropertyBag *pIPropertyBag, - _In_ IPrintPipelineManagerControl *pIPipelineControl - ) -{ - DoTraceMessage(XPSRASFILTER_TRACE_INFO, L"Initializing Filter"); - - if (pICommunicator == NULL || - pIPropertyBag == NULL || - pIPipelineControl == NULL) - { - WPP_LOG_ON_FAILED_HRESULT(E_POINTER); - - return E_POINTER; - } - - HRESULT hr = S_OK; - - try - { - InitializeFilter_throws( - pICommunicator, - pIPropertyBag - ); - } - CATCH_VARIOUS(hr); - - return hr; -} - -// -//Routine Name: -// -// XPSRasFilter::InitializeFilter_throws -// -//Routine Description: -// -// Implements IPrintPipelineFilter initialization. Gets -// all necessary communication interfaces. -// -//Arguments: -// -// pICommunicator - interface to interfilter communicator -// pIPropertyBag - interface to pipeline property bag -// -VOID -XPSRasFilter::InitializeFilter_throws( - const IInterFilterCommunicator_t &pICommunicator, - const IPrintPipelinePropertyBag_t &pIPropertyBag - ) -{ - // - // Get the pipeline communication interfaces - // - THROW_ON_FAILED_HRESULT( - pICommunicator->RequestReader(reinterpret_cast<void**>(&m_pReader)) - ); - THROW_ON_FAILED_HRESULT( - pICommunicator->RequestWriter(reinterpret_cast<void**>(&m_pWriter)) - ); - - { - // - // Check to ensure that the provided interfaces are as expected. - // That is, that the GUIDs were correctly listed in the - // pipeline configuration file - // - IXpsDocumentProvider_t pReaderCheck; - IPrintWriteStream_t pWriterCheck; - - THROW_ON_FAILED_HRESULT( - m_pReader.QueryInterface(&pReaderCheck) - ); - THROW_ON_FAILED_HRESULT( - m_pWriter.QueryInterface(&pWriterCheck) - ); - } - - // - // Save a pointer to the Property Bag for further - // initialization, later. - // - m_pIPropertyBag = pIPropertyBag; -} - -// -//Routine Name: -// -// XPSRasFilter::ShutdownOperation -// -//Routine Description: -// -// Called asynchronously by the pipeline manager -// to shutdown filter operation. -// -//Arguments: -// -// None -// -//Return Value: -// -// HRESULT -// S_OK - On success -// -_Must_inspect_result_ -HRESULT -XPSRasFilter::ShutdownOperation() -{ - DoTraceMessage(XPSRASFILTER_TRACE_INFO, L"Shutting Down Operation"); - - m_pLiveness->Cancel(); - - return S_OK; -} - -// -//Routine Name: -// -// XPSRasFilter::StartOperation -// -//Routine Description: -// -// Called by the pipeline manager to start processing -// a document. Exception boundary for page processing. -// -//Arguments: -// -// None -// -//Return Value: -// -// HRESULT -// S_OK - On success -// Otherwise - Failure -// -_Must_inspect_result_ -HRESULT -XPSRasFilter::StartOperation() -{ - HRESULT hr = S_OK; - - DoTraceMessage(XPSRASFILTER_TRACE_INFO, L"Starting Operation"); - - // - // Process the Xps Package - // - try { - StartOperation_throws(); - } - CATCH_VARIOUS(hr); - - m_pWriter->Close(); - - return hr; -} - -// -//Routine Name: -// -// XPSRasFilter::StartOperation_throws -// -//Routine Description: -// -// Iterates over the 'trunk' parts of the document -// and calls appropriate processing methods. -// -//Arguments: -// -// None -// -void -XPSRasFilter::StartOperation_throws() -{ - // - // CoInitialize/CoUninitialize RAII object. - // COM is inititalized for the lifetime of this method. - // - SafeCoInit coInit; - - IXpsOMObjectFactory_t pOMFactory; - - // - // Create Xps Object Model Object Factory instance - // - THROW_ON_FAILED_HRESULT( - ::CoCreateInstance( - __uuidof(XpsOMObjectFactory), - NULL, - CLSCTX_INPROC_SERVER, - __uuidof(IXpsOMObjectFactory), - reinterpret_cast<LPVOID*>(&pOMFactory) - ) - ); - - IOpcFactory_t pOpcFactory; - - // - // Create Opc Object Factory instance - // - THROW_ON_FAILED_HRESULT( - ::CoCreateInstance( - __uuidof(OpcFactory), - NULL, - CLSCTX_INPROC_SERVER, - __uuidof(IOpcFactory), - reinterpret_cast<LPVOID*>(&pOpcFactory) - ) - ); - - // - // Create the rasterization interface - // - RasterizationInterface_t pRasInterface = - RasterizationInterface::CreateRasterizationInterface( - m_pIPropertyBag, - m_pWriter - ); - - // - // Create the Print Ticket Handler - // - PrintTicketHandler_t pPrintTicketHandler = - PrintTicketHandler::CreatePrintTicketHandler( - m_pIPropertyBag - ); - - IUnknown_t pUnk; - - // - // Get first part - // - THROW_ON_FAILED_HRESULT(m_pReader->GetXpsPart(&pUnk)); - - while (m_pLiveness->IsAlive() && - pUnk != NULL) - { - IXpsDocument_t pDoc; - IFixedDocumentSequence_t pFDS; - IFixedDocument_t pFD; - IFixedPage_t pFP; - - if (SUCCEEDED(pUnk.QueryInterface(&pFP))) - { - DoTraceMessage(XPSRASFILTER_TRACE_VERBOSE, L"Handling a Page"); - - pPrintTicketHandler->ProcessPart(pFP); - - ParametersFromPrintTicket printTicketParams = - pPrintTicketHandler->GetMergedPrintTicketParams(); - - pRasInterface->RasterizePage( - CreateXpsOMPageFromIFixedPage(pFP, pOMFactory, pOpcFactory), - printTicketParams, - m_pLiveness - ); - } - else if (SUCCEEDED(pUnk.QueryInterface(&pFD))) - { - pPrintTicketHandler->ProcessPart(pFD); - } - else if (SUCCEEDED(pUnk.QueryInterface(&pFDS))) - { - pPrintTicketHandler->ProcessPart(pFDS); - } - else if (SUCCEEDED(pUnk.QueryInterface(&pDoc))) - { - // - // Do nothing with the XML Document part - // - } - else - { - // - // Any other document 'trunk' parts are ignored. - // - } - - pUnk.Release(); - - // - // Get Next Part - // - THROW_ON_FAILED_HRESULT(m_pReader->GetXpsPart(&pUnk)); - } - - pRasInterface->FinishRasterization(); -} - -} // namespace xpsrasfilter - diff --git a/print/XpsRasFilter/src/xpsrasfilter.def b/print/XpsRasFilter/src/xpsrasfilter.def deleted file mode 100644 index a3dac1cc..00000000 --- a/print/XpsRasFilter/src/xpsrasfilter.def +++ /dev/null @@ -1,22 +0,0 @@ -; THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -; ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -; THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -; PARTICULAR PURPOSE. -; -; Copyright (c) Microsoft Corporation. All rights reserved -; -; File Name: -; -; xpsrasfilter.def -; -; Abstract: -; -; Defines DLL exports for xpsrasfilter.dll -; - -LIBRARY "xpsrasfilter.dll" - -EXPORTS - DllGetClassObject PRIVATE - DllCanUnloadNow PRIVATE - diff --git a/print/XpsRasFilter/src/xpsrasfilter.h b/print/XpsRasFilter/src/xpsrasfilter.h deleted file mode 100644 index 2ad3a4f9..00000000 --- a/print/XpsRasFilter/src/xpsrasfilter.h +++ /dev/null @@ -1,141 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// xpsrasfilter.h -// -// Abstract: -// -// Xps Rasterization Service sample filter definition. The -// XPSRasFilter provides the interface to the filter pipeline manager. -// - -#pragma once - -namespace xpsrasfilter -{ - -// -// Class to maintain the shared state of operation between multiple components -// of the filter. Also provides the callback for the Xps Rasterization Service. -// -class FilterLiveness : public UnknownBase<IXpsRasterizerNotificationCallback> -{ -public: - - FilterLiveness() : - m_isAlive(TRUE) - {} - - virtual - ~FilterLiveness() {} - - BOOL - IsAlive() - { - return m_isAlive; - } - - void - Cancel() - { - // - // May be called from a different thread - // - m_isAlive = FALSE; - } - - // - // IXpsRasterizerNotificationCallback Method - // - virtual _Must_inspect_result_ - HRESULT STDMETHODCALLTYPE - Continue() - { - return (m_isAlive) ? (S_OK) : (HRESULT_FROM_WIN32(ERROR_PRINT_CANCELLED)); - } - -private: - volatile BOOL m_isAlive; - - // - // prevent copy semantics - // - FilterLiveness(const FilterLiveness&); - FilterLiveness& operator=(const FilterLiveness&); -}; - -class XPSRasFilter : public UnknownBase<IPrintPipelineFilter> -{ - -public: - - static LONG ms_numObjects; // Number of instances of XPSRasFilter - - XPSRasFilter(); - - virtual - ~XPSRasFilter(); - - // - // IPrintPipelineFilter Methods - // - virtual _Must_inspect_result_ - HRESULT STDMETHODCALLTYPE - InitializeFilter( - _In_ IInterFilterCommunicator *pICommunicator, - _In_ IPrintPipelinePropertyBag *pIPropertyBag, - _In_ IPrintPipelineManagerControl *pIPipelineControl - ); - - virtual _Must_inspect_result_ - HRESULT STDMETHODCALLTYPE - ShutdownOperation(); - - virtual _Must_inspect_result_ - HRESULT STDMETHODCALLTYPE - StartOperation(); - -private: - // - // prevent copy semantics - // - XPSRasFilter(const XPSRasFilter&); - XPSRasFilter& operator=(const XPSRasFilter&); - - // - // Xps package part reader - // - IXpsDocumentProvider_t m_pReader; - IPrintWriteStream_t m_pWriter; - - // - // Pipeline Property Bag - // - IPrintPipelinePropertyBag_t m_pIPropertyBag; - - // - // IPrintPipelineFilter Methods (throwing) - // - VOID - StartOperation_throws(); - - VOID - InitializeFilter_throws( - const IInterFilterCommunicator_t &pICommunicator, - const IPrintPipelinePropertyBag_t &pIPropertyBag - ); - - // - // Keeps track of whether the operation has been cancelled - // - FilterLiveness_t m_pLiveness; -}; - -} // namespace xpsrasfilter - diff --git a/print/XpsRasFilter/src/xpsrasfilter.rc b/print/XpsRasFilter/src/xpsrasfilter.rc deleted file mode 100644 index d7f2fc40..00000000 --- a/print/XpsRasFilter/src/xpsrasfilter.rc +++ /dev/null @@ -1,28 +0,0 @@ -// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF -// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Copyright (c) Microsoft Corporation. All rights reserved -// -// File Name: -// -// xpsrasfilter.rc -// -// Abstract: -// -// Xps Rasterization Service filter resource file. -// - -#include <windows.h> -#include <ntverp.h> - -#define VER_FILETYPE VFT_DLL -#define VER_FILESUBTYPE VFT2_UNKNOWN -#define VER_FILEDESCRIPTION_STR "XPS Rasterization Service WDK Sample Filter" -#define VER_INTERNALNAME_STR "xpsrasfilter.dll" -#define VER_ORIGINALFILENAME_STR "xpsrasfilter.dll" -#define VER_FILEVERSION 0, 3, VER_PRODUCTBUILD, VER_PRODUCTBUILD_QFE - -#include "common.ver" - diff --git a/print/XpsRasFilter/src/xpsrasfilter.vcxproj b/print/XpsRasFilter/src/xpsrasfilter.vcxproj deleted file mode 100644 index 267efbef..00000000 --- a/print/XpsRasFilter/src/xpsrasfilter.vcxproj +++ /dev/null @@ -1,454 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ARM64"> - <Configuration>Debug</Configuration> - <Platform>ARM64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ARM64"> - <Configuration>Release</Configuration> - <Platform>ARM64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{D8784A15-C959-4CDF-B5B8-A603F347BDA4}</ProjectGuid> - <RootNamespace>$(MSBuildProjectName)</RootNamespace> - <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration> - <Platform Condition="'$(Platform)' == ''">Win32</Platform> - <SampleGuid>{29519C3F-63DD-4C01-B6A7-E1E7B4B517BD}</SampleGuid> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>False</UseDebugLibraries> - <DriverTargetPlatform>Desktop</DriverTargetPlatform> - <DriverType /> - <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset> - <ConfigurationType>DynamicLibrary</ConfigurationType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>False</UseDebugLibraries> - <DriverTargetPlatform>Desktop</DriverTargetPlatform> - <DriverType /> - <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset> - <ConfigurationType>DynamicLibrary</ConfigurationType> - </PropertyGroup> - <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>True</UseDebugLibraries> - <DriverTargetPlatform>Desktop</DriverTargetPlatform> - <DriverType /> - <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset> - <ConfigurationType>DynamicLibrary</ConfigurationType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>True</UseDebugLibraries> - <DriverTargetPlatform>Desktop</DriverTargetPlatform> - <DriverType /> - <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset> - <ConfigurationType>DynamicLibrary</ConfigurationType> - </PropertyGroup> - <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>False</UseDebugLibraries> - <DriverTargetPlatform>Desktop</DriverTargetPlatform> - <DriverType /> - <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset> - <ConfigurationType>DynamicLibrary</ConfigurationType> - </PropertyGroup> - <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <TargetVersion>Windows10</TargetVersion> - <UseDebugLibraries>True</UseDebugLibraries> - <DriverTargetPlatform>Desktop</DriverTargetPlatform> - <DriverType /> - <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset> - <ConfigurationType>DynamicLibrary</ConfigurationType> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <PropertyGroup> - <OutDir>$(IntDir)</OutDir> - </PropertyGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> - </ImportGroup> - <ItemGroup Label="WrappedTaskItems"> - <ClCompile Include="dllentry.cpp"> - <WppEnabled>true</WppEnabled> - <WppFileExtensions>.cpp.cxx.h.hxx.inl</WppFileExtensions> - <WppPreserveExtensions>.h.hxx.inl</WppPreserveExtensions> - <WppModuleName>XpsRasFilter</WppModuleName> - <WppDllMacro>true</WppDllMacro> - <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile> - <PreCompiledHeader>Use</PreCompiledHeader> - <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile> - </ClCompile> - <ClCompile Include="xpsrasfilter.cpp"> - <WppEnabled>true</WppEnabled> - <WppFileExtensions>.cpp.cxx.h.hxx.inl</WppFileExtensions> - <WppPreserveExtensions>.h.hxx.inl</WppPreserveExtensions> - <WppModuleName>XpsRasFilter</WppModuleName> - <WppDllMacro>true</WppDllMacro> - <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile> - <PreCompiledHeader>Use</PreCompiledHeader> - <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile> - </ClCompile> - <ClCompile Include="omconvertor.cpp"> - <WppEnabled>true</WppEnabled> - <WppFileExtensions>.cpp.cxx.h.hxx.inl</WppFileExtensions> - <WppPreserveExtensions>.h.hxx.inl</WppPreserveExtensions> - <WppModuleName>XpsRasFilter</WppModuleName> - <WppDllMacro>true</WppDllMacro> - <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile> - <PreCompiledHeader>Use</PreCompiledHeader> - <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile> - </ClCompile> - <ClCompile Include="Exception.cpp"> - <WppEnabled>true</WppEnabled> - <WppFileExtensions>.cpp.cxx.h.hxx.inl</WppFileExtensions> - <WppPreserveExtensions>.h.hxx.inl</WppPreserveExtensions> - <WppModuleName>XpsRasFilter</WppModuleName> - <WppDllMacro>true</WppDllMacro> - <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile> - <PreCompiledHeader>Use</PreCompiledHeader> - <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile> - </ClCompile> - <ClCompile Include="WppTrace.cpp"> - <WppEnabled>true</WppEnabled> - <WppFileExtensions>.cpp.cxx.h.hxx.inl</WppFileExtensions> - <WppPreserveExtensions>.h.hxx.inl</WppPreserveExtensions> - <WppModuleName>XpsRasFilter</WppModuleName> - <WppDllMacro>true</WppDllMacro> - <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile> - <PreCompiledHeader>Use</PreCompiledHeader> - <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile> - </ClCompile> - <ClCompile Include="rasinterface.cpp"> - <WppEnabled>true</WppEnabled> - <WppFileExtensions>.cpp.cxx.h.hxx.inl</WppFileExtensions> - <WppPreserveExtensions>.h.hxx.inl</WppPreserveExtensions> - <WppModuleName>XpsRasFilter</WppModuleName> - <WppDllMacro>true</WppDllMacro> - <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile> - <PreCompiledHeader>Use</PreCompiledHeader> - <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile> - </ClCompile> - <ClCompile Include="PThandler.cpp"> - <WppEnabled>true</WppEnabled> - <WppFileExtensions>.cpp.cxx.h.hxx.inl</WppFileExtensions> - <WppPreserveExtensions>.h.hxx.inl</WppPreserveExtensions> - <WppModuleName>XpsRasFilter</WppModuleName> - <WppDllMacro>true</WppDllMacro> - <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile> - <PreCompiledHeader>Use</PreCompiledHeader> - <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile> - </ClCompile> - <ClCompile Include="BitmapHandler.cpp"> - <WppEnabled>true</WppEnabled> - <WppFileExtensions>.cpp.cxx.h.hxx.inl</WppFileExtensions> - <WppPreserveExtensions>.h.hxx.inl</WppPreserveExtensions> - <WppModuleName>XpsRasFilter</WppModuleName> - <WppDllMacro>true</WppDllMacro> - <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile> - <PreCompiledHeader>Use</PreCompiledHeader> - <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile> - </ClCompile> - <OtherWpp Include="xpsrasfilter.rc"> - <WppEnabled>true</WppEnabled> - <WppFileExtensions>.cpp.cxx.h.hxx.inl</WppFileExtensions> - <WppPreserveExtensions>.h.hxx.inl</WppPreserveExtensions> - <WppModuleName>XpsRasFilter</WppModuleName> - <WppDllMacro>true</WppDllMacro> - </OtherWpp> - </ItemGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <TargetName>xpsrasfilter</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> - <TargetName>xpsrasfilter</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <TargetName>xpsrasfilter</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> - <TargetName>xpsrasfilter</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <TargetName>xpsrasfilter</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <TargetName>xpsrasfilter</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Link> - <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol> - <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> - <Link> - <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol> - <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Link> - <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol> - <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> - <Link> - <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol> - <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Link> - <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol> - <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Link> - <EntryPointSymbol Condition="'$(Platform)'=='win32'">_DllMainCRTStartup@12</EntryPointSymbol> - <EntryPointSymbol Condition="'$(Platform)'!='win32'">_DllMainCRTStartup</EntryPointSymbol> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </Midl> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);uuid.lib;prntvpt.lib;Kernel32.lib;winspool.lib;ole32.lib;oleaut32.lib;Advapi32.lib</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </Midl> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);uuid.lib;prntvpt.lib;Kernel32.lib;winspool.lib;ole32.lib;oleaut32.lib;Advapi32.lib</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </Midl> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);uuid.lib;prntvpt.lib;Kernel32.lib;winspool.lib;ole32.lib;oleaut32.lib;Advapi32.lib</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </Midl> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);uuid.lib;prntvpt.lib;Kernel32.lib;winspool.lib;ole32.lib;oleaut32.lib;Advapi32.lib</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </Midl> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);uuid.lib;prntvpt.lib;Kernel32.lib;winspool.lib;ole32.lib;oleaut32.lib;Advapi32.lib</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ResourceCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ResourceCompile> - <ClCompile> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </ClCompile> - <Midl> - <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories> - </Midl> - <Link> - <AdditionalDependencies>%(AdditionalDependencies);uuid.lib;prntvpt.lib;Kernel32.lib;winspool.lib;ole32.lib;oleaut32.lib;Advapi32.lib</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <UseOfAtl>Dynamic</UseOfAtl> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> - <UseOfAtl>Dynamic</UseOfAtl> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <UseOfAtl>Dynamic</UseOfAtl> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> - <UseOfAtl>Dynamic</UseOfAtl> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <UseOfAtl>Dynamic</UseOfAtl> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <UseOfAtl>Dynamic</UseOfAtl> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <ExceptionHandling>Sync</ExceptionHandling> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> - <ClCompile> - <ExceptionHandling>Sync</ExceptionHandling> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <ExceptionHandling>Sync</ExceptionHandling> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> - <ClCompile> - <ExceptionHandling>Sync</ExceptionHandling> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <ExceptionHandling>Sync</ExceptionHandling> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <ExceptionHandling>Sync</ExceptionHandling> - <TreatWarningAsError>true</TreatWarningAsError> - <WarningLevel>Level4</WarningLevel> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Link> - <ModuleDefinitionFile>xpsrasfilter.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'"> - <Link> - <ModuleDefinitionFile>xpsrasfilter.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Link> - <ModuleDefinitionFile>xpsrasfilter.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> - <Link> - <ModuleDefinitionFile>xpsrasfilter.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Link> - <ModuleDefinitionFile>xpsrasfilter.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Link> - <ModuleDefinitionFile>xpsrasfilter.def</ModuleDefinitionFile> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="precompsrc.cpp"> - <AdditionalIncludeDirectories>;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreCompiledHeaderFile>precomp.h</PreCompiledHeaderFile> - <PreCompiledHeader>Create</PreCompiledHeader> - <PreCompiledHeaderOutputFile>$(IntDir)\precomp.h.pch</PreCompiledHeaderOutputFile> - </ClCompile> - <ResourceCompile Include="xpsrasfilter.rc" /> - </ItemGroup> - <ItemGroup> - <Inf Exclude="@(Inf)" Include="*.inf" /> - <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" /> - </ItemGroup> - <ItemGroup> - <None Exclude="@(None)" Include="*.txt;*.htm;*.html" /> - <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" /> - <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" /> - </ItemGroup> - <ItemGroup> - <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> -</Project>
\ No newline at end of file diff --git a/print/XpsRasFilter/src/xpsrasfilter.vcxproj.Filters b/print/XpsRasFilter/src/xpsrasfilter.vcxproj.Filters deleted file mode 100644 index 220e456f..00000000 --- a/print/XpsRasFilter/src/xpsrasfilter.vcxproj.Filters +++ /dev/null @@ -1,178 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions> - <UniqueIdentifier>{8AFE48DE-3776-4F24-9EB1-3DA85555D037}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files"> - <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> - <UniqueIdentifier>{01B86B81-A94E-4D93-8DCE-7DC040F8B64B}</UniqueIdentifier> - </Filter> - <Filter Include="Resource Files"> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions> - <UniqueIdentifier>{26A0ED4E-3E48-4ECB-96A1-B4B7F18BC8C9}</UniqueIdentifier> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="BitmapHandler.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="dllentry.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="Exception.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="omconvertor.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="precompsrc.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="PThandler.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="rasinterface.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="WppTrace.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="xpsrasfilter.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ResourceCompile Include="xpsrasfilter.rc"> - <Filter>Resource Files</Filter> - </ResourceCompile> - </ItemGroup> - <ItemGroup> - <ClInclude Include="BitmapHandler.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Exception.h" /> - <ClInclude Include="filtertypes.h" /> - <ClInclude Include="OMConvertor.h" /> - <ClInclude Include="precomp.h" /> - <ClInclude Include="PThandler.h" /> - <ClInclude Include="rasinterface.h" /> - <ClInclude Include="UnknownBase.h" /> - <ClInclude Include="WppTrace.h" /> - <ClInclude Include="xpsrasfilter.h" /> - <ClInclude Include="BitmapHandler.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Exception.h" /> - <ClInclude Include="filtertypes.h" /> - <ClInclude Include="OMConvertor.h" /> - <ClInclude Include="precomp.h" /> - <ClInclude Include="PThandler.h" /> - <ClInclude Include="rasinterface.h" /> - <ClInclude Include="UnknownBase.h" /> - <ClInclude Include="WppTrace.h" /> - <ClInclude Include="xpsrasfilter.h" /> - <ClInclude Include="BitmapHandler.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Exception.h" /> - <ClInclude Include="filtertypes.h" /> - <ClInclude Include="OMConvertor.h" /> - <ClInclude Include="precomp.h" /> - <ClInclude Include="PThandler.h" /> - <ClInclude Include="rasinterface.h" /> - <ClInclude Include="UnknownBase.h" /> - <ClInclude Include="WppTrace.h" /> - <ClInclude Include="xpsrasfilter.h" /> - <ClInclude Include="BitmapHandler.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Exception.h" /> - <ClInclude Include="filtertypes.h" /> - <ClInclude Include="OMConvertor.h" /> - <ClInclude Include="precomp.h" /> - <ClInclude Include="PThandler.h" /> - <ClInclude Include="rasinterface.h" /> - <ClInclude Include="UnknownBase.h" /> - <ClInclude Include="WppTrace.h" /> - <ClInclude Include="xpsrasfilter.h" /> - <ClInclude Include="BitmapHandler.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Exception.h" /> - <ClInclude Include="filtertypes.h" /> - <ClInclude Include="OMConvertor.h" /> - <ClInclude Include="precomp.h" /> - <ClInclude Include="PThandler.h" /> - <ClInclude Include="rasinterface.h" /> - <ClInclude Include="UnknownBase.h" /> - <ClInclude Include="WppTrace.h" /> - <ClInclude Include="xpsrasfilter.h" /> - <ClInclude Include="BitmapHandler.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Exception.h" /> - <ClInclude Include="filtertypes.h" /> - <ClInclude Include="OMConvertor.h" /> - <ClInclude Include="precomp.h" /> - <ClInclude Include="PThandler.h" /> - <ClInclude Include="rasinterface.h" /> - <ClInclude Include="UnknownBase.h" /> - <ClInclude Include="WppTrace.h" /> - <ClInclude Include="xpsrasfilter.h" /> - <ClInclude Include="BitmapHandler.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Exception.h" /> - <ClInclude Include="filtertypes.h" /> - <ClInclude Include="OMConvertor.h" /> - <ClInclude Include="precomp.h" /> - <ClInclude Include="PThandler.h" /> - <ClInclude Include="rasinterface.h" /> - <ClInclude Include="UnknownBase.h" /> - <ClInclude Include="WppTrace.h" /> - <ClInclude Include="xpsrasfilter.h" /> - <ClInclude Include="BitmapHandler.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Exception.h" /> - <ClInclude Include="filtertypes.h" /> - <ClInclude Include="OMConvertor.h" /> - <ClInclude Include="precomp.h" /> - <ClInclude Include="PThandler.h" /> - <ClInclude Include="rasinterface.h" /> - <ClInclude Include="UnknownBase.h" /> - <ClInclude Include="WppTrace.h" /> - <ClInclude Include="xpsrasfilter.h" /> - <ClInclude Include="BitmapHandler.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Exception.h" /> - <ClInclude Include="filtertypes.h" /> - <ClInclude Include="OMConvertor.h" /> - <ClInclude Include="precomp.h" /> - <ClInclude Include="PThandler.h" /> - <ClInclude Include="rasinterface.h" /> - <ClInclude Include="UnknownBase.h" /> - <ClInclude Include="WppTrace.h" /> - <ClInclude Include="xpsrasfilter.h" /> - <ClInclude Include="BitmapHandler.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="Exception.h" /> - <ClInclude Include="filtertypes.h" /> - <ClInclude Include="OMConvertor.h" /> - <ClInclude Include="precomp.h" /> - <ClInclude Include="PThandler.h" /> - <ClInclude Include="rasinterface.h" /> - <ClInclude Include="UnknownBase.h" /> - <ClInclude Include="WppTrace.h" /> - <ClInclude Include="xpsrasfilter.h" /> - </ItemGroup> - <ItemGroup> - <None Include="xpsrasfilter.def"> - <Filter>Source Files</Filter> - </None> - </ItemGroup> -</Project>
\ No newline at end of file |
