summaryrefslogtreecommitdiff
path: root/print/XPSDrvSmpl/src/ui/wmdmptcnv.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'print/XPSDrvSmpl/src/ui/wmdmptcnv.cpp')
-rw-r--r--print/XPSDrvSmpl/src/ui/wmdmptcnv.cpp591
1 files changed, 0 insertions, 591 deletions
diff --git a/print/XPSDrvSmpl/src/ui/wmdmptcnv.cpp b/print/XPSDrvSmpl/src/ui/wmdmptcnv.cpp
deleted file mode 100644
index 22cfde42..00000000
--- a/print/XPSDrvSmpl/src/ui/wmdmptcnv.cpp
+++ /dev/null
@@ -1,591 +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:
-
- wmdmptcnv.cpp
-
-Abstract:
-
- PageWatermark devmode <-> PrintTicket conversion class implementation.
- The class defines a common data representation between the DevMode (GPD) and PrintTicket
- representations and implements the conversion and validation methods required
- by CFeatureDMPTConvert.
-
---*/
-
-#include "precomp.h"
-#include "debug.h"
-#include "globals.h"
-#include "xdstring.h"
-#include "wmdmptcnv.h"
-#include "wmpchndlr.h"
-
-using XDPrintSchema::PageWatermark::WatermarkData;
-using XDPrintSchema::PageWatermark::EWatermarkOption;
-using XDPrintSchema::PageWatermark::NoWatermark;
-using XDPrintSchema::PageWatermark::TextWatermark;
-using XDPrintSchema::PageWatermark::BitmapWatermark;
-using XDPrintSchema::PageWatermark::VectorWatermark;
-using XDPrintSchema::PageWatermark::WatermarkData;
-using XDPrintSchema::PageWatermark::WatermarkData;
-using XDPrintSchema::PageWatermark::WatermarkData;
-using XDPrintSchema::PageWatermark::WatermarkData;
-
-using XDPrintSchema::PageWatermark::Layering::ELayeringOption;
-using XDPrintSchema::PageWatermark::Layering::Overlay;
-using XDPrintSchema::PageWatermark::Layering::Underlay;
-
-//
-// Look-up data converting GPD PageWatermarkType feature options to
-// watermark type enumeration
-//
-PCSTR g_pszWatermarkTypeFeature = "PageWatermarkType";
-static GPDStringToOption<EWatermarkOption> g_watermarkTypeOption[] = {
- {"None", NoWatermark},
- {"Text", TextWatermark},
- {"Raster", BitmapWatermark},
- {"Vector", VectorWatermark},
-};
-UINT g_cWatermarkTypeOption = sizeof(g_watermarkTypeOption)/sizeof(GPDStringToOption<EWatermarkOption>);
-
-//
-// Look-up data converting GPD PageWatermarkLayering feature options to
-// watermark layering enumeration
-//
-PCSTR g_pszLayeringFeature = "PageWatermarkLayering";
-static GPDStringToOption<ELayeringOption> g_watermarkLayeringOption[] = {
- {"Overlay", Overlay},
- {"Underlay", Underlay},
-};
-UINT g_cLayeringOption = sizeof(g_watermarkLayeringOption)/sizeof(GPDStringToOption<ELayeringOption>);
-
-/*++
-
-Routine Name:
-
- CWatermarkDMPTConv::CWatermarkDMPTConv
-
-Routine Description:
-
- CWatermarkDMPTConv class constructor
-
-Arguments:
-
- None
-
-Return Value:
-
- None
-
---*/
-CWatermarkDMPTConv::CWatermarkDMPTConv()
-{
-}
-
-/*++
-
-Routine Name:
-
- CWatermarkDMPTConv::~CWatermarkDMPTConv
-
-Routine Description:
-
- CWatermarkDMPTConv class destructor
-
-Arguments:
-
- None
-
-Return Value:
-
- None
-
---*/
-CWatermarkDMPTConv::~CWatermarkDMPTConv()
-{
-}
-
-/*++
-
-Routine Name:
-
- CWatermarkDMPTConv::GetPTDataSettingsFromDM
-
-Routine Description:
-
- Populates the watermark data structure from the Devmode passed in.
-
-Arguments:
-
- pDevmode - pointer to input devmode buffer.
- cbDevmode - size in bytes of full input devmode.
- pPrivateDevmode - pointer to input private devmode buffer.
- cbDrvPrivateSize - size in bytes of private devmode.
- pDataSettings - Pointer to watermark data structure to be updated.
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CWatermarkDMPTConv::GetPTDataSettingsFromDM(
- _In_ PDEVMODE pDevmode,
- _In_ ULONG cbDevmode,
- _In_ PVOID pPrivateDevmode,
- _In_ ULONG cbDrvPrivateSize,
- _Out_ WatermarkData* pDataSettings
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(pDevmode, E_POINTER)) &&
- SUCCEEDED(hr = CHECK_POINTER(pPrivateDevmode, E_POINTER)) &&
- SUCCEEDED(hr = CHECK_POINTER(pDataSettings, E_POINTER)))
- {
- if (cbDevmode < sizeof(DEVMODE) ||
- cbDrvPrivateSize == 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- //
- // Retrieve the GPD and devmode controlled settings
- //
- CUIProperties uiProperties(static_cast<POEMDEV>(pPrivateDevmode));
-
- DWORD dwTextColor = 0;
- if (SUCCEEDED(hr) &&
- SUCCEEDED(hr = GetOptionFromGPDString<EWatermarkOption>(pDevmode,
- cbDevmode,
- g_pszWatermarkTypeFeature,
- g_watermarkTypeOption,
- g_cWatermarkTypeOption,
- pDataSettings->type)) &&
- SUCCEEDED(hr = GetOptionFromGPDString<ELayeringOption>(pDevmode,
- cbDevmode,
- g_pszLayeringFeature,
- g_watermarkLayeringOption,
- g_cLayeringOption,
- pDataSettings->layering)) &&
- SUCCEEDED(hr = uiProperties.GetItem(g_pszWMOffsetWidth, &pDataSettings->widthOrigin, sizeof(pDataSettings->widthOrigin))) &&
- SUCCEEDED(hr = uiProperties.GetItem(g_pszWMOffsetHeight, &pDataSettings->heightOrigin, sizeof(pDataSettings->heightOrigin))) &&
- SUCCEEDED(hr = uiProperties.GetItem(g_pszWMSizeWidth, &pDataSettings->widthExtent, sizeof(pDataSettings->widthExtent))) &&
- SUCCEEDED(hr = uiProperties.GetItem(g_pszWMSizeHeight, &pDataSettings->heightExtent, sizeof(pDataSettings->heightExtent))) &&
- SUCCEEDED(hr = uiProperties.GetItem(g_pszWMTransparency, &pDataSettings->transparency, sizeof(pDataSettings->transparency))) &&
- SUCCEEDED(hr = uiProperties.GetItem(g_pszWMAngle, &pDataSettings->angle, sizeof(pDataSettings->angle))) &&
- SUCCEEDED(hr = uiProperties.GetItem(g_pszWMFontSize, &pDataSettings->txtData.fontSize, sizeof(pDataSettings->txtData.fontSize))) &&
- SUCCEEDED(hr = uiProperties.GetItem(g_pszWMFontColor, &dwTextColor, sizeof(dwTextColor))))
- {
- //
- // Convert the color to the txtData BSTR
- //
- try
- {
- CStringXDW cstrColor;
- cstrColor.Format(L"#%08X", dwTextColor);
- pDataSettings->txtData.bstrFontColor.Empty();
- pDataSettings->txtData.bstrFontColor.Attach(cstrColor.AllocSysString());
- }
- catch (CXDException& e)
- {
- hr = e;
- }
-
- TCHAR text[MAX_WATERMARK_TEXT + 1] = {0};
-
- if (SUCCEEDED(hr) &&
- SUCCEEDED(hr = uiProperties.GetItem(g_pszWMText, text, MAX_WATERMARK_TEXT * sizeof(TCHAR))))
- {
- pDataSettings->txtData.bstrText = text;
-
- //
- // Convert measurements from 100ths of an inch to microns
- //
- pDataSettings->widthOrigin = HUNDREDTH_OFINCH_TO_MICRON(pDataSettings->widthOrigin);
- pDataSettings->heightOrigin = HUNDREDTH_OFINCH_TO_MICRON(pDataSettings->heightOrigin);
- pDataSettings->widthExtent = HUNDREDTH_OFINCH_TO_MICRON(pDataSettings->widthExtent);
- pDataSettings->heightExtent = HUNDREDTH_OFINCH_TO_MICRON(pDataSettings->heightExtent);
- }
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CWatermarkDMPTConv::MergePTDataSettingsWithPT
-
-Routine Description:
-
- This method updates the watermark data structure from a PrintTicket description.
-
-Arguments:
-
- pPrintTicket - Pointer to the input PrintTicket.
- pDataSettings - Pointer to the watermark data structure
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CWatermarkDMPTConv::MergePTDataSettingsWithPT(
- _In_ IXMLDOMDocument2* pPrintTicket,
- _Inout_ WatermarkData* pDataSettings
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr) &&
- SUCCEEDED(hr = CHECK_POINTER(pPrintTicket, E_POINTER)) &&
- SUCCEEDED(hr = CHECK_POINTER(pDataSettings, E_POINTER)))
- {
- try
- {
- //
- // Get the watermark settings from the PrintTicket and set the options in
- // the input Watermark data structure
- //
- WatermarkData wmData;
- CWMPTHandler wmPTHndlr(pPrintTicket);
-
- if (SUCCEEDED(hr = wmPTHndlr.GetData(&wmData)))
- {
- //
- // Only update settings relevant to the feature so that we do not unset
- // other watermark settings in the devmode
- //
- pDataSettings->type = NoWatermark;
- switch (wmData.type)
- {
- case TextWatermark:
- {
- pDataSettings->type = TextWatermark;
- pDataSettings->widthOrigin = wmData.widthOrigin;
- pDataSettings->heightOrigin = wmData.heightOrigin;
- pDataSettings->transparency = wmData.transparency;
- pDataSettings->angle = wmData.angle;
- pDataSettings->layering = wmData.layering;
- pDataSettings->txtData.bstrFontColor = wmData.txtData.bstrFontColor;
- pDataSettings->txtData.fontSize = wmData.txtData.fontSize;
- pDataSettings->txtData.bstrText = wmData.txtData.bstrText;
- }
- break;
-
- case BitmapWatermark:
- {
- pDataSettings->type = BitmapWatermark;
- pDataSettings->widthOrigin = wmData.widthOrigin;
- pDataSettings->heightOrigin = wmData.heightOrigin;
- pDataSettings->widthExtent = wmData.widthExtent;
- pDataSettings->heightExtent = wmData.heightExtent;
- pDataSettings->transparency = wmData.transparency;
- pDataSettings->angle = wmData.angle;
- pDataSettings->layering = wmData.layering;
- }
- break;
-
- case VectorWatermark:
- {
- pDataSettings->type = VectorWatermark;
- pDataSettings->widthOrigin = wmData.widthOrigin;
- pDataSettings->heightOrigin = wmData.heightOrigin;
- pDataSettings->widthExtent = wmData.widthExtent;
- pDataSettings->heightExtent = wmData.heightExtent;
- pDataSettings->transparency = wmData.transparency;
- pDataSettings->angle = wmData.angle;
- pDataSettings->layering = wmData.layering;
- }
- break;
-
- case NoWatermark:
- break;
-
- default:
- {
- WARNING("Unrecognized watermark feature - setting to default\n");
- }
- break;
- }
- }
- else if (hr == E_ELEMENT_NOT_FOUND)
- {
- //
- // Watermark setting not in the PT - this is not an error. Just
- // leave the type as NoWatermark and reset the HRESULT to S_OK
- //
- hr = S_OK;
- }
- }
- catch (CXDException& e)
- {
- hr = e;
- }
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CWatermarkDMPTConv::SetPTDataInDM
-
-Routine Description:
-
- This method updates the watermark options in the devmode from the UI Settings.
-
-Arguments:
-
- dataSettings - Reference to watermark data settings to be updated.
- pDevmode - pointer to devmode to be updated.
- cbDevmode - size in bytes of full devmode.
- pPrivateDevmode - pointer to input private devmode buffer.
- cbDrvPrivateSize - size in bytes of private devmode.
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CWatermarkDMPTConv::SetPTDataInDM(
- _In_ CONST WatermarkData& dataSettings,
- _Inout_ PDEVMODE pDevmode,
- _In_ ULONG cbDevmode,
- _Inout_ PVOID pPrivateDevmode,
- _In_ ULONG cbDrvPrivateSize
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(pDevmode, E_POINTER)) &&
- SUCCEEDED(hr = CHECK_POINTER(pPrivateDevmode, E_POINTER)))
- {
- if (cbDevmode < sizeof(DEVMODE) ||
- cbDrvPrivateSize == 0)
- {
- hr = E_INVALIDARG;
- }
- }
-
- //
- // Convert from microns to 100ths of an inch before writing to the DevMode
- //
- if (SUCCEEDED(hr))
- {
- INT widthOrigin = MICRON_TO_HUNDREDTH_OFINCH(dataSettings.widthOrigin);
- INT heightOrigin = MICRON_TO_HUNDREDTH_OFINCH(dataSettings.heightOrigin);
- INT widthExtent = MICRON_TO_HUNDREDTH_OFINCH(dataSettings.widthExtent);
- INT heightExtent = MICRON_TO_HUNDREDTH_OFINCH(dataSettings.heightExtent);
-
- //
- // Set the GPD and devmode controlled settings
- //
- CUIProperties uiProperties(static_cast<POEMDEV>(pPrivateDevmode));
- if (SUCCEEDED(hr = SetGPDStringFromOption<EWatermarkOption>(pDevmode,
- cbDevmode,
- g_pszWatermarkTypeFeature,
- g_watermarkTypeOption,
- g_cWatermarkTypeOption,
- dataSettings.type)) &&
- SUCCEEDED(hr = SetGPDStringFromOption<ELayeringOption>(pDevmode,
- cbDevmode,
- g_pszLayeringFeature,
- g_watermarkLayeringOption,
- g_cLayeringOption,
- dataSettings.layering)) &&
- SUCCEEDED(hr = uiProperties.SetItem(g_pszWMOffsetWidth, &widthOrigin, sizeof(widthOrigin))) &&
- SUCCEEDED(hr = uiProperties.SetItem(g_pszWMOffsetHeight, &heightOrigin, sizeof(heightOrigin))) &&
- SUCCEEDED(hr = uiProperties.SetItem(g_pszWMSizeWidth, &widthExtent, sizeof(widthExtent))) &&
- SUCCEEDED(hr = uiProperties.SetItem(g_pszWMSizeHeight, &heightExtent, sizeof(heightExtent))) &&
- SUCCEEDED(hr = uiProperties.SetItem(g_pszWMTransparency, &dataSettings.transparency, sizeof(dataSettings.transparency))) &&
- SUCCEEDED(hr = uiProperties.SetItem(g_pszWMAngle, &dataSettings.angle, sizeof(dataSettings.angle))) &&
- SUCCEEDED(hr = uiProperties.SetItem(g_pszWMFontSize, &dataSettings.txtData.fontSize, sizeof(dataSettings.txtData.fontSize))))
- {
- try
- {
- //
- // Convert the font color to a channel array
- //
- BYTE fontColor[4] = {0};
- CStringXDW cstrFontColor(dataSettings.txtData.bstrFontColor);
- cstrFontColor.Trim();
- if (cstrFontColor.Find(L"#") == 0)
- {
- cstrFontColor.Delete(0);
- cstrFontColor.Trim();
- }
-
- cstrFontColor.Truncate(8);
- INT cChannel = 3;
- while (cstrFontColor.GetLength() > 0 &&
- cChannel < sizeof(DWORD) &&
- cChannel >= 0)
- {
- //
- // Add the data a channel at a time so we dont overflow wcstol
- //
-#pragma prefast(suppress:__WARNING_MUST_USE, "All possible two-digit hex numbers are valid.")
- fontColor[cChannel] = static_cast<BYTE>(wcstol(cstrFontColor.Left(2), NULL, 16));
-
- //
- // Delete the channel from the color ref string
- //
- cstrFontColor.Delete(0, 2);
-
- //
- // Traverse array in reverse to correct for endianness
- //
- cChannel--;
- }
-
- hr = uiProperties.SetItem(g_pszWMFontColor, fontColor, sizeof(DWORD));
-
- //
- // Set the text string
- //
- if (SUCCEEDED(hr))
- {
- CStringXD text(dataSettings.txtData.bstrText);
- text.Truncate(MAX_WATERMARK_TEXT);
-
- hr = uiProperties.SetItem(g_pszWMText, text.GetBuffer(), (text.GetLength() + 1) * sizeof(TCHAR));
- }
- }
- catch (CXDException& e)
- {
- hr = e;
- }
- }
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CWatermarkDMPTConv::SetPTDataInPT
-
-Routine Description:
-
- This method updates the watemark PrintTicket description from watermark data structure.
-
-Arguments:
-
- drvSettings - Reference to watermark data structure to update from.
- pPrintTicket - Pointer to the PrintTicket to be updated.
-
-Return Value:
-
- HRESULT
- S_OK - On success
- E_* - On error
-
---*/
-HRESULT
-CWatermarkDMPTConv::SetPTDataInPT(
- _In_ CONST WatermarkData& dataSettings,
- _Inout_ IXMLDOMDocument2* pPrintTicket
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(pPrintTicket, E_POINTER)))
- {
- try
- {
- CWMPTHandler wmPTHndlr(pPrintTicket);
- hr = wmPTHndlr.SetData(&dataSettings);
- }
- catch (CXDException& e)
- {
- hr = e;
- }
- }
- else
- {
- hr = E_POINTER;
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-
-/*++
-
-Routine Name:
-
- CWatermarkDMPTConv::CompletePrintCapabilities
-
-Routine Description:
-
- Unidrv calls this routine with an input Device Capabilities Document
- that is partially populated with Device capabilities information
- filled in by Unidrv for features that it understands. The plug-in
- needs to read any private features in the input PrintTicket, delete
- them and add them back under Printschema namespace so that higher
- level applications can understand them and make use of them.
-
-Arguments:
-
- pPrintTicket - pointer to input PrintTicket
- pCapabilities - pointer to Device Capabilities Document.
-
-Return Value:
-
- HRESULT
- S_OK - Always
-
---*/
-HRESULT STDMETHODCALLTYPE
-CWatermarkDMPTConv::CompletePrintCapabilities(
- _In_opt_ IXMLDOMDocument2*,
- _Inout_ IXMLDOMDocument2* pPrintCapabilities
- )
-{
- HRESULT hr = S_OK;
-
- if (SUCCEEDED(hr = CHECK_POINTER(pPrintCapabilities, E_POINTER)))
- {
- try
- {
- CWMPCHandler watermarkpcHandler(pPrintCapabilities);
- watermarkpcHandler.SetCapabilities();
- }
- catch(CXDException& e)
- {
- hr = e;
- }
- }
-
- ERR_ON_HR(hr);
- return hr;
-}
-