summaryrefslogtreecommitdiff
path: root/print/XpsRasFilter
diff options
context:
space:
mode:
Diffstat (limited to 'print/XpsRasFilter')
-rw-r--r--print/XpsRasFilter/README.md43
-rw-r--r--print/XpsRasFilter/XpsRasFilter.sln34
-rw-r--r--print/XpsRasFilter/install/xpsrassmpl-PipelineConfig.xml32
-rw-r--r--print/XpsRasFilter/install/xpsrassmpl.gpd342
-rw-r--r--print/XpsRasFilter/install/xpsrassmpl.inf98
-rw-r--r--print/XpsRasFilter/src/BitmapHandler.cpp361
-rw-r--r--print/XpsRasFilter/src/BitmapHandler.h64
-rw-r--r--print/XpsRasFilter/src/Exception.cpp43
-rw-r--r--print/XpsRasFilter/src/Exception.h86
-rw-r--r--print/XpsRasFilter/src/OMConvertor.cpp774
-rw-r--r--print/XpsRasFilter/src/OMConvertor.h90
-rw-r--r--print/XpsRasFilter/src/PThandler.cpp781
-rw-r--r--print/XpsRasFilter/src/PThandler.h112
-rw-r--r--print/XpsRasFilter/src/UnknownBase.h158
-rw-r--r--print/XpsRasFilter/src/WppTrace.cpp41
-rw-r--r--print/XpsRasFilter/src/WppTrace.h58
-rw-r--r--print/XpsRasFilter/src/dllentry.cpp326
-rw-r--r--print/XpsRasFilter/src/filtertypes.h497
-rw-r--r--print/XpsRasFilter/src/precomp.h87
-rw-r--r--print/XpsRasFilter/src/precompsrc.cpp1
-rw-r--r--print/XpsRasFilter/src/rasinterface.cpp412
-rw-r--r--print/XpsRasFilter/src/rasinterface.h107
-rw-r--r--print/XpsRasFilter/src/xpsrasfilter.cpp396
-rw-r--r--print/XpsRasFilter/src/xpsrasfilter.def22
-rw-r--r--print/XpsRasFilter/src/xpsrasfilter.h141
-rw-r--r--print/XpsRasFilter/src/xpsrasfilter.rc28
-rw-r--r--print/XpsRasFilter/src/xpsrasfilter.vcxproj454
-rw-r--r--print/XpsRasFilter/src/xpsrasfilter.vcxproj.Filters178
28 files changed, 0 insertions, 5766 deletions
diff --git a/print/XpsRasFilter/README.md b/print/XpsRasFilter/README.md
deleted file mode 100644
index 55f637df..00000000
--- a/print/XpsRasFilter/README.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-page_type: sample
-description: "Implements an XPSDrv filter that rasterizes fixed pages in an XPS document."
-languages:
-- cpp
-products:
-- windows
-- windows-wdk
----
-
-# XPS Rasterization Filter Service Sample
-
-This sample implements an XPSDrv filter that rasterizes fixed pages in an XPS document. Hardware vendors can modify this sample to build an XPSDrv filter that produces bitmap images for their printers or other display devices. The sample uses the XPS Rasterization Service that creates rasterizer objects for use by XPSDrv filters. A rasterizer object takes an XPS Object Model (XPS OM) page object and creates a bitmap of a specified region of the page. The sample implements an XPSDrv filter (xpsrasfilter.dll) that can be inserted into the XPS Filter Pipeline. For each fixed page in an XPS document, the sample filter does the following:
-
-- Uses the XPS rasterization service to create a rasterizer object for the fixed page.
-
-- Partitions the fixed page into several horizontal bands.
-
-- Uses the rasterizer object to render each horizontal band as a bitmap image.
-
-The Print Filter Pipeline is part of the XPS Print Path [Windows Print Path Overview](https://docs.microsoft.com/windows-hardware/drivers/print/windows-print-path-overview). Fixed pages are sent as an XPS data stream from the XPS Spooler to the print filter pipeline. The print filter pipeline manager takes the XPS fixed page, calls each filter in the order defined in the pipeline configuration file, and then sends either Fixed Page OM objects or a data stream to each filter as required. The filters process the data and return either Fixed Page OM objects or a data stream back to the print filter pipeline manager.
-
-For more information, see [IXpsDocumentProvider](https://docs.microsoft.com/windows-hardware/drivers/ddi/content/filterpipeline/nn-filterpipeline-ixpsdocumentprovider), [IXpsDocumentConsumer](https://docs.microsoft.com/windows-hardware/drivers/ddi/content/filterpipeline/nn-filterpipeline-ixpsdocumentconsumer), [IPrintWriteStream](https://docs.microsoft.com/windows-hardware/drivers/ddi/content/filterpipeline/nn-filterpipeline-iprintwritestream), and [IPrintReadStream](https://docs.microsoft.com/windows-hardware/drivers/ddi/content/filterpipeline/nn-filterpipeline-iprintreadstream).
-
-As a print filter pipeline service, the XPS Rasterization Service can be loaded into the filter pipeline when the pipeline is initialized by adding a filter service provider tag to the configuration XML file (for example, \<FilterServiceProvider dll="XpsRasterService.dll"/\>). The service is then available to be called by the filters when they are initialized and called by the print filter pipeline manager.
-
-The XPS Rasterization Service operates as follows:
-
-- The calling filter initializes an instance of the rasterizer by passing in the XPS OM for the fixed page.
-
-- The calling filter calls the RasterizeRect method of the rasterizer to render a specified rectangle area of the fixed page.
-
-- RasterizeRect writes the WIC (Windows Imaging Component) bitmap data to memory. (The address is specified as a parameter to RasterizeRect.)
-
-The default parameters in this sample are as follows:
-
-- Letter-sized physical page (can override in print ticket).
-
-- 0.25-inch margins (creating an 8-inch by 10.5-inch imageable area).
-
-- Scaling is set to FitApplicationBleedSizeToImageableSize.
-
-- Destination resolution set to 96 dpi (can override in print ticket).
diff --git a/print/XpsRasFilter/XpsRasFilter.sln b/print/XpsRasFilter/XpsRasFilter.sln
deleted file mode 100644
index 1c155e19..00000000
--- a/print/XpsRasFilter/XpsRasFilter.sln
+++ /dev/null
@@ -1,34 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26430.16
-MinimumVisualStudioVersion = 12.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpsrasfilter", "src\xpsrasfilter.vcxproj", "{D8784A15-C959-4CDF-B5B8-A603F347BDA4}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|ARM64 = Debug|ARM64
- Debug|Win32 = Debug|Win32
- Debug|x64 = Debug|x64
- Release|ARM64 = Release|ARM64
- Release|Win32 = Release|Win32
- Release|x64 = Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Debug|ARM64.ActiveCfg = Debug|ARM64
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Debug|ARM64.Build.0 = Debug|ARM64
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Debug|Win32.ActiveCfg = Debug|Win32
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Debug|Win32.Build.0 = Debug|Win32
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Debug|x64.ActiveCfg = Debug|x64
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Debug|x64.Build.0 = Debug|x64
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Release|ARM64.ActiveCfg = Release|ARM64
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Release|ARM64.Build.0 = Release|ARM64
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Release|Win32.ActiveCfg = Release|Win32
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Release|Win32.Build.0 = Release|Win32
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Release|x64.ActiveCfg = Release|x64
- {D8784A15-C959-4CDF-B5B8-A603F347BDA4}.Release|x64.Build.0 = Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/print/XpsRasFilter/install/xpsrassmpl-PipelineConfig.xml b/print/XpsRasFilter/install/xpsrassmpl-PipelineConfig.xml
deleted file mode 100644
index c391b545..00000000
--- a/print/XpsRasFilter/install/xpsrassmpl-PipelineConfig.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
-
-Copyright (c) 2005 Microsoft Corporation
-
-All rights reserved.
-
-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.
-
-File Name:
-
- xpsrassmpl-pipelineconfig.xml
-
-Abstract:
-
- XPSRas WDK sample driver filter configuration file.
-
--->
-
-<Filters>
- <Filter dll = "xpsrasfilter.dll"
- clsid = "{CFF7BE69-E62D-403b-BE4F-48EC73F5DA1A}"
- name = "XPSRas WDK Sample Filter">
- <Input guid = "{b8cf8530-5562-47c4-ab67-b1f69ecf961e}" comment="IID_IXpsDocumentProvider"/>
- <Output guid = "{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream"/>
- </Filter>
- <OptionalFilterServiceProvider dll="XpsRasterService.dll"/>
-</Filters>
-
-
diff --git a/print/XpsRasFilter/install/xpsrassmpl.gpd b/print/XpsRasFilter/install/xpsrassmpl.gpd
deleted file mode 100644
index 0c300802..00000000
--- a/print/XpsRasFilter/install/xpsrassmpl.gpd
+++ /dev/null
@@ -1,342 +0,0 @@
-*%
-*% Copyright (c) 2005 Microsoft Corporation
-*%
-*% All rights reserved.
-*%
-*% 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.
-*%
-*% File Name:
-*%
-*% xpsrassmpl.gpd
-*%
-*% Abstract:
-*%
-*% Xps Rasterization Service WDK sample driver install file GPD file.
-*%
-
-*GPDFileVersion: "1.0"
-*GPDSpecVersion: "1.0"
-*GPDFileName: "xpsrassmpl.gpd"
-*Include: "msxpsinc.gpd"
-*Include: "StdNames.gpd"
-*ModelName: "XPSRas WDK Sample Driver"
-*MasterUnits: PAIR(1200, 1200)
-*ResourceDLL: "unires.dll"
-*PrinterType: PAGE
-*MaxCopies: 1
-
-*%******************************************************************************
-*% PageMediaSize - Paper Size
-*%******************************************************************************
-*Feature: PaperSize
-{
- *rcNameID: =PAPER_SIZE_DISPLAY
- *DefaultOption: LETTER
-
- *Option: A3
- {
- *rcNameID: =RCID_DMPAPER_SYSTEM_NAME
- *PageProtectMem: 9667
- *switch: Orientation
- {
- *case: PORTRAIT
- {
- *PrintableArea: PAIR(13460, 19440)
- *PrintableOrigin: PAIR(284, 200)
- *CursorOrigin: PAIR(284, 200)
- }
- *case: LANDSCAPE_CC270
- {
- *PrintableArea: PAIR(13628, 19368)
- *PrintableOrigin: PAIR(200, 236)
- *CursorOrigin: PAIR(200, 19604)
- }
- }
- }
-
- *Option: A4
- {
- *rcNameID: =RCID_DMPAPER_SYSTEM_NAME
- *PageProtectMem: 4249
- *switch: Orientation
- {
- *case: PORTRAIT
- {
- *PrintableArea: PAIR(9352, 13628)
- *PrintableOrigin: PAIR(284, 200)
- *CursorOrigin: PAIR(284, 200)
- }
- *case: LANDSCAPE_CC270
- {
- *PrintableArea: PAIR(9520, 13556)
- *PrintableOrigin: PAIR(200, 236)
- *CursorOrigin: PAIR(200, 13792)
- }
- }
- }
-
- *Option: B4
- {
- *rcNameID: =RCID_DMPAPER_SYSTEM_NAME
- *PageProtectMem: 6391
- *switch: Orientation
- {
- *case: PORTRAIT
- {
- *PrintableArea: PAIR(11572, 16796)
- *PrintableOrigin: PAIR(284, 200)
- *CursorOrigin: PAIR(284, 200)
- }
- *case: LANDSCAPE_CC270
- {
- *PrintableArea: PAIR(11740, 16724)
- *PrintableOrigin: PAIR(200, 236)
- *CursorOrigin: PAIR(200, 16960)
- }
- }
- }
-
- *Option: B5
- {
- *rcNameID: =RCID_DMPAPER_SYSTEM_NAME
- *PageProtectMem: 3198
- *switch: Orientation
- {
- *case: PORTRAIT
- {
- *PrintableArea: PAIR(7900, 11140)
- *PrintableOrigin: PAIR(352, 300)
- *CursorOrigin: PAIR(300, 100)
- }
- *case: LANDSCAPE_CC270
- {
- *PrintableArea: PAIR(7760, 11140)
- *PrintableOrigin: PAIR(300, 400)
- *CursorOrigin: PAIR(100, 11940)
- }
- }
- }
-
- *Option: EXECUTIVE
- {
- *rcNameID: =RCID_DMPAPER_SYSTEM_NAME
- *PageProtectMem: 4109
- *switch: Orientation
- {
- *case: PORTRAIT
- {
- *PrintableArea: PAIR(8100, 11500)
- *PrintableOrigin: PAIR(300, 300)
- *CursorOrigin: PAIR(300, 200)
- }
- *case: LANDSCAPE_CC270
- {
- *PrintableArea: PAIR(8300, 11500)
- *PrintableOrigin: PAIR(200, 300)
- *CursorOrigin: PAIR(200, 12300)
- }
- }
- }
-
- *Option: ENV_10
- {
- *rcNameID: =RCID_DMPAPER_SYSTEM_NAME
- *PageProtectMem: 4109
- *switch: Orientation
- {
- *case: PORTRAIT
- {
- *PrintableArea: PAIR(4348, 11000)
- *PrintableOrigin: PAIR(300, 200)
- *CursorOrigin: PAIR(300, 200)
- }
- *case: LANDSCAPE_CC270
- {
- *PrintableArea: PAIR(4548, 10920)
- *PrintableOrigin: PAIR(200, 240)
- *CursorOrigin: PAIR(200, 11160)
- }
- }
- }
-
- *Option: LEGAL
- {
- *rcNameID: =RCID_DMPAPER_SYSTEM_NAME
- *PageProtectMem: 1692
- *switch: Orientation
- {
- *case: PORTRAIT
- {
- *PrintableArea: PAIR(9000, 15500)
- *PrintableOrigin: PAIR(400, 600)
- *CursorOrigin: PAIR(180, 300)
- }
- *case: LANDSCAPE_CC270
- {
- *PrintableArea: PAIR(9000, 15500)
- *PrintableOrigin: PAIR(400, 900)
- *CursorOrigin: PAIR(180, 16500)
- }
- }
- }
-
- *Option: LETTER
- {
- *rcNameID: =RCID_DMPAPER_SYSTEM_NAME
- *PageProtectMem: 1028
- *switch: Orientation
- {
- *case: PORTRAIT
- {
- *PrintableArea: PAIR(9500, 12500)
- *PrintableOrigin: PAIR(400, 400)
- *CursorOrigin: PAIR(300, 300)
- }
- *case: LANDSCAPE_CC270
- {
- *PrintableArea: PAIR(9500, 12200)
- *PrintableOrigin: PAIR(450, 300)
- *CursorOrigin: PAIR(200, 12900)
- }
- }
- }
-
- *Option: ENV_MONARCH
- {
- *rcNameID: =RCID_DMPAPER_SYSTEM_NAME
- *PageProtectMem: 4109
- *switch: Orientation
- {
- *case: PORTRAIT
- {
- *PrintableArea: PAIR(4048, 8600)
- *PrintableOrigin: PAIR(300, 200)
- *CursorOrigin: PAIR(300, 200)
- }
- *case: LANDSCAPE_CC270
- {
- *PrintableArea: PAIR(4248, 8520)
- *PrintableOrigin: PAIR(200, 240)
- *CursorOrigin: PAIR(200, 8760)
- }
- }
- }
-
- *Option: TABLOID
- {
- *rcNameID: =RCID_DMPAPER_SYSTEM_NAME
- *PageProtectMem: 4109
- *switch: Orientation
- {
- *case: PORTRAIT
- {
- *PrintableArea: PAIR(12000, 19200)
- *PrintableOrigin: PAIR(400, 400)
- *CursorOrigin: PAIR(400, 400)
- }
- *case: LANDSCAPE_CC270
- {
- *PrintableArea: PAIR(12000, 19200)
- *PrintableOrigin: PAIR(400, 600)
- *CursorOrigin: PAIR(400, 18000)
- }
- }
- }
-}
-
-*%******************************************************************************
-*% PageOrientation
-*%******************************************************************************
-*Feature: Orientation
-{
- *rcNameID: =ORIENTATION_DISPLAY
- *DefaultOption: PORTRAIT
-
- *Option: PORTRAIT
- {
- *rcNameID: =PORTRAIT_DISPLAY
- }
-
- *Option: LANDSCAPE_CC270
- {
- *rcNameID: =LANDSCAPE_DISPLAY
- }
-}
-
-*%******************************************************************************
-*% Resolution
-*%******************************************************************************
-*Feature: Resolution
-{
- *rcNameID: =RESOLUTION_DISPLAY
- *DefaultOption: DPI600
-
- *Option: DPI600
- {
- *Name: "600 x 600 " =DOTS_PER_INCH
- *DPI: PAIR(600, 600)
- *TextDPI: PAIR(600, 600)
- *SpotDiameter: 100
- *Command: CmdBeginRaster { *Cmd : "<1B>*v7S<1B>*r1A" }
- *Command: CmdEndRaster { *Cmd : "<1B>*rC" }
- *Command: CmdSendBlockData { *Cmd : "<1B>*b" %d{NumOfDataBytes}"W" }
- }
-
- *Option: DPI1200
- {
- *Name: "1200 x 1200 " =DOTS_PER_INCH
- *DPI: PAIR(1200, 1200)
- *TextDPI: PAIR(1200, 1200)
- *SpotDiameter: 100
- *Command: CmdBeginRaster { *Cmd : "<1B>*v7S<1B>*r1A" }
- *Command: CmdEndRaster { *Cmd : "<1B>*rC" }
- *Command: CmdSendBlockData { *Cmd : "<1B>*b" %d{NumOfDataBytes}"W" }
- }
-}
-
-*%******************************************************************************
-*% Input Bin
-*%******************************************************************************
-*Feature: InputBin
-{
- *rcNameID: =PAPER_SOURCE_DISPLAY
- *DefaultOption: UPPER
- *ConcealFromUI?: TRUE
-
- *Option: UPPER
- {
- *rcNameID: =UPPER_TRAY_DISPLAY
- }
-}
-
-
-*%******************************************************************************
-*% Printer Memory
-*%******************************************************************************
-*Feature: Memory
-{
- *rcNameID: =PRINTER_MEMORY_DISPLAY
- *DefaultOption: 32768KB
- *Option: 16384KB
- {
- *Name: "16MB"
- *MemoryConfigKB: PAIR(16384, 13950)
- }
- *Option: 32768KB
- {
- *Name: "32MB"
- *MemoryConfigKB: PAIR(32768, 28350)
- }
-}
-
-*%******************************************************************************
-*% Cursor Commands
-*%******************************************************************************
-*Command: CmdCR { *Cmd : "<0D>" }
-*Command: CmdLF { *Cmd : "<0A>" }
-*Command: CmdFF { *Cmd : "<0C>" }
-
-
diff --git a/print/XpsRasFilter/install/xpsrassmpl.inf b/print/XpsRasFilter/install/xpsrassmpl.inf
deleted file mode 100644
index d16530be..00000000
--- a/print/XpsRasFilter/install/xpsrassmpl.inf
+++ /dev/null
@@ -1,98 +0,0 @@
-;
-; Copyright (c) 2005 Microsoft Corporation
-;
-; All rights reserved.
-;
-; 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.
-;
-; File Name:
-;
-; xpsrassmpl.inf
-;
-; Abstract:
-;
-; Xps Rasterization Service WDK sample driver install file
-;
-[Version]
-Signature="$Windows NT$"
-Provider=%ProviderString%
-ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318}
-Class=Printer
-DriverVer=10/17/2008,6.1.6930.0
-
-[Manufacturer]
-%ManufacturerName%=Standard,NTx86.6.1,NTia64.6.1,NTamd64.6.1,NTarm64.6.1
-
-
-[Standard.NTx86.6.1]
-"XPSRas WDK Sample Driver" = INSTALL_FILTER
-
-[Standard.NTia64.6.1]
-"XPSRas WDK Sample Driver" = INSTALL_FILTER
-
-[Standard.NTamd64.6.1]
-"XPSRas WDK Sample Driver" = INSTALL_FILTER
-
-[Standard.NTarm64.6.1]
-"XPSRas WDK Sample Driver" = INSTALL_FILTER
-
-[INSTALL_FILTER]
-CopyFiles=XPSRasSample
-DriverFile=mxdwdrv.dll
-ConfigFile=UniDrvUI.dll
-HelpFile=UniDrv.HLP
-DataFile=xpsrassmpl.GPD
-CoreDriverSections="{D20EA372-DD35-4950-9ED8-A6335AFE79F0},UNIDRV.OEM", "{D20EA372-DD35-4950-9ED8-A6335AFE79F5},XPSDRV.OEM,XPSGPD.OEM"
-
-[PrinterPackageInstallation.x86]
-PackageAware=TRUE
-CoreDriverDependencies={D20EA372-DD35-4950-9ED8-A6335AFE79F0}, {D20EA372-DD35-4950-9ED8-A6335AFE79F5}
-
-[PrinterPackageInstallation.amd64]
-PackageAware=TRUE
-CoreDriverDependencies={D20EA372-DD35-4950-9ED8-A6335AFE79F0}, {D20EA372-DD35-4950-9ED8-A6335AFE79F5}
-
-[PrinterPackageInstallation.ia64]
-PackageAware=TRUE
-CoreDriverDependencies={D20EA372-DD35-4950-9ED8-A6335AFE79F0}, {D20EA372-DD35-4950-9ED8-A6335AFE79F5}
-
-[PrinterPackageInstallation.arm64]
-PackageAware=TRUE
-CoreDriverDependencies={D20EA372-DD35-4950-9ED8-A6335AFE79F0}, {D20EA372-DD35-4950-9ED8-A6335AFE79F5}
-
-[DestinationDirs]
-DefaultDestDir=66000
-
-[XPSRasSample]
-xpsrassmpl.gpd
-xpsrassmpl-pipelineconfig.xml
-xpsrasfilter.dll
-
-[SourceDisksNames.x86]
-1 = %Location%,,
-2 = %Location%,,,x86
-
-[SourceDisksNames.ia64]
-1 = %Location%,,
-2 = %Location%,,,ia64
-
-[SourceDisksNames.amd64]
-1 = %Location%,,
-2 = %Location%,,,amd64
-
-[SourceDisksNames.arm64]
-1 = %Location%,,
-2 = %Location%,,,arm64
-
-[SourceDisksFiles]
-xpsrassmpl.gpd = 1
-xpsrassmpl-pipelineconfig.xml = 1
-xpsrasfilter.dll = 2
-
-[Strings]
-Location="XPSRas WDK Sample Driver"
-ProviderString = "TODO-Set-Provider"
-ManufacturerName="TODO-Set-Manufacturer" \ No newline at end of file
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