Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/prntvpt/ticket.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+)
diff --git a/dlls/prntvpt/ticket.c b/dlls/prntvpt/ticket.c index df5cd0399a..1354d2e0f1 100644 --- a/dlls/prntvpt/ticket.c +++ b/dlls/prntvpt/ticket.c @@ -367,6 +367,48 @@ static void read_PageResolution(IXMLDOMDocument2 *doc, struct ticket *ticket) IXMLDOMNode_Release(node); }
+static void read_PageOrientation(IXMLDOMDocument2 *doc, struct ticket *ticket) +{ + IXMLDOMNode *node, *option; + HRESULT hr; + + hr = IXMLDOMDocument2_selectSingleNode(doc, (BSTR)L"psf:PrintTicket/psf:Feature[@name='psk:PageOrientation']", &node); + if (hr != S_OK) return; + + hr = IXMLDOMNode_selectSingleNode(node, (BSTR)L"./psf:Option", &option); + if (hr == S_OK) + { + IXMLDOMElement *element; + + hr = IXMLDOMNode_QueryInterface(option, &IID_IXMLDOMElement, (void **)&element); + if (hr == S_OK) + { + VARIANT var; + + VariantInit(&var); + hr = IXMLDOMElement_getAttribute(element, (BSTR)L"name", &var); + if (hr == S_OK && V_VT(&var) == VT_BSTR) + { + if (!wcscmp(V_BSTR(&var), L"psk:Portrait")) + ticket->page.orientation = DMORIENT_PORTRAIT; + else if (!wcscmp(V_BSTR(&var), L"psk:Landscape")) + ticket->page.orientation = DMORIENT_LANDSCAPE; + else + { + FIXME("%s\n", wine_dbgstr_w(V_BSTR(&var))); + ticket->page.orientation = DMORIENT_PORTRAIT; + } + TRACE("orientation: %s => %d\n", wine_dbgstr_w(V_BSTR(&var)), ticket->page.orientation); + } + VariantClear(&var); + + IXMLDOMElement_Release(element); + } + } + + IXMLDOMNode_Release(node); +} + static void set_SelectionNamespaces(IXMLDOMDocument2 *doc) { IStream *stream; @@ -464,6 +506,7 @@ static HRESULT parse_ticket(IStream *stream, EPrintTicketScope scope, struct tic read_PageOutputColor(doc, ticket); read_PageScaling(doc, ticket); read_PageResolution(doc, ticket); + read_PageOrientation(doc, ticket);
fail: IXMLDOMDocument2_Release(doc);