From 642e82eddf451c43d786ef1e4dbe26ea8af33445 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Wed, 17 Jun 2020 13:22:30 +0800 Subject: [PATCH] prntvpt: Add support for custom scaling to ticket XML writer. Signed-off-by: Dmitry Timoshkov Signed-off-by: Alexandre Julliard --- dlls/prntvpt/ticket.c | 47 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/dlls/prntvpt/ticket.c b/dlls/prntvpt/ticket.c index f012a16f7af..8f1da24af8c 100644 --- a/dlls/prntvpt/ticket.c +++ b/dlls/prntvpt/ticket.c @@ -825,6 +825,16 @@ static HRESULT create_ParameterInit(IXMLDOMElement *root, const WCHAR *name, IXM return add_attribute(*child, L"name", name); } +static HRESULT create_ParameterRef(IXMLDOMElement *root, const WCHAR *name, IXMLDOMElement **child) +{ + HRESULT hr; + + hr = create_element(root, L"psf:ParameterRef", child); + if (hr != S_OK) return hr; + + return add_attribute(*child, L"name", name); +} + static HRESULT create_ScoredProperty(IXMLDOMElement *root, const WCHAR *name, IXMLDOMElement **child) { HRESULT hr; @@ -889,12 +899,41 @@ static HRESULT write_PageScaling(IXMLDOMElement *root, const struct ticket *tick hr = create_Feature(root, L"psk:PageScaling", &feature); if (hr != S_OK) return hr; - if (ticket->page.scaling != 100) - FIXME("page.scaling: %d\n", ticket->page.scaling); + if (ticket->page.scaling == 100) + { + hr = create_Option(feature, L"psk:None", &option); + if (hr == S_OK) IXMLDOMElement_Release(option); + } + else + { + hr = create_Option(feature, L"psk:CustomSquare", &option); + if (hr == S_OK) + { + IXMLDOMElement *property, *parameter; - hr = create_Option(feature, L"psk:None", &option); + hr = create_ScoredProperty(option, L"psk:Scale", &property); + if (hr == S_OK) + { + hr = create_ParameterRef(property, L"psk:PageScalingScale", ¶meter); + if (hr == S_OK) + { + IXMLDOMElement_Release(parameter); + + hr = create_ParameterInit(root, L"psk:PageScalingScale", ¶meter); + if (hr == S_OK) + { + hr = write_int_value(parameter, ticket->page.scaling); + IXMLDOMElement_Release(parameter); + } + } + + IXMLDOMElement_Release(property); + } + + IXMLDOMElement_Release(option); + } + } - if (option) IXMLDOMElement_Release(option); IXMLDOMElement_Release(feature); return hr; }