[PATCH v2 09/12] prntvpt: Add support for custom scaling to ticket XML writer.

Dmitry Timoshkov dmitry at baikal.ru
Wed Jun 17 00:22:30 CDT 2020


Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
 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 f012a16f7a..8f1da24af8 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_ScoredProperty(option, L"psk:Scale", &property);
+            if (hr == S_OK)
+            {
+                hr = create_ParameterRef(property, L"psk:PageScalingScale", &parameter);
+                if (hr == S_OK)
+                {
+                    IXMLDOMElement_Release(parameter);
+
+                    hr = create_ParameterInit(root, L"psk:PageScalingScale", &parameter);
+                    if (hr == S_OK)
+                    {
+                        hr = write_int_value(parameter, ticket->page.scaling);
+                        IXMLDOMElement_Release(parameter);
+                    }
+                }
+
+                IXMLDOMElement_Release(property);
+            }
 
-    hr = create_Option(feature, L"psk:None", &option);
+            IXMLDOMElement_Release(option);
+        }
+    }
 
-    if (option) IXMLDOMElement_Release(option);
     IXMLDOMElement_Release(feature);
     return hr;
 }
-- 
2.26.2




More information about the wine-devel mailing list