Dmitry Timoshkov : prntvpt: Add support for custom scaling to ticket XML reader.

Alexandre Julliard julliard at winehq.org
Thu Jun 11 15:26:45 CDT 2020


Module: wine
Branch: master
Commit: a7a977efd9cd7d5bf88625d863d8c376ddaffa77
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a7a977efd9cd7d5bf88625d863d8c376ddaffa77

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Thu Jun 11 14:00:11 2020 +0800

prntvpt: Add support for custom scaling to ticket XML reader.

Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/prntvpt/ticket.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/dlls/prntvpt/ticket.c b/dlls/prntvpt/ticket.c
index 7f65d60352..36e343bbf2 100644
--- a/dlls/prntvpt/ticket.c
+++ b/dlls/prntvpt/ticket.c
@@ -297,6 +297,7 @@ static void read_PageOutputColor(IXMLDOMDocument2 *doc, struct ticket *ticket)
 static void read_PageScaling(IXMLDOMDocument2 *doc, struct ticket *ticket)
 {
     IXMLDOMNode *node, *option;
+    int scaling = 0;
     HRESULT hr;
 
     hr = IXMLDOMDocument2_selectSingleNode(doc, (BSTR)L"psf:PrintTicket/psf:Feature[@name='psk:PageScaling']", &node);
@@ -317,13 +318,11 @@ static void read_PageScaling(IXMLDOMDocument2 *doc, struct ticket *ticket)
             if (hr == S_OK && V_VT(&var) == VT_BSTR)
             {
                 if (!wcscmp(V_BSTR(&var), L"psk:None"))
-                    ticket->page.scaling = 100;
+                    scaling = 100;
+                else if (!wcscmp(V_BSTR(&var), L"psk:CustomSquare"))
+                    scaling = 0; /* psk:PageScalingScale */
                 else
-                {
                     FIXME("%s\n", wine_dbgstr_w(V_BSTR(&var)));
-                    ticket->page.scaling = 100;
-                }
-                TRACE("scaling: %s => %d\n", wine_dbgstr_w(V_BSTR(&var)), ticket->page.scaling);
             }
             VariantClear(&var);
 
@@ -332,6 +331,23 @@ static void read_PageScaling(IXMLDOMDocument2 *doc, struct ticket *ticket)
     }
 
     IXMLDOMNode_Release(node);
+
+    if (!scaling)
+    {
+        hr = IXMLDOMDocument2_selectSingleNode(doc, (BSTR)L"psf:PrintTicket/psf:ParameterInit[@name='psk:PageScalingScale']", &node);
+        if (hr == S_OK)
+        {
+            read_int_value(node, &scaling);
+            IXMLDOMNode_Release(node);
+        }
+    }
+
+    if (scaling)
+        ticket->page.scaling = scaling;
+    else
+        ticket->page.scaling = 100;
+
+    TRACE("page.scaling: %d\n", ticket->page.scaling);
 }
 
 static void read_PageResolution(IXMLDOMDocument2 *doc, struct ticket *ticket)




More information about the wine-cvs mailing list