14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/win32/cpsoutput.h"
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <algorithm>
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_system.h"
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPSOutput::CPSOutput(HDC hDC) {
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_hDC = hDC;
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPSOutput::~CPSOutput() {}
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPSOutput::Release() {
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  delete this;
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPSOutput::OutputPS(const FX_CHAR* str, int len) {
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (len < 0)
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    len = static_cast<int>(FXSYS_strlen(str));
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int sent_len = 0;
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  while (len > 0) {
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FX_CHAR buffer[1026];
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int send_len = std::min(len, 1024);
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    *(reinterpret_cast<uint16_t*>(buffer)) = send_len;
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    FXSYS_memcpy(buffer + 2, str + sent_len, send_len);
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    // TODO(thestig/rbpotter): Do PASSTHROUGH for non-Chromium usage.
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    // ExtEscape(m_hDC, PASSTHROUGH, send_len + 2, buffer, 0, nullptr);
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ::GdiComment(m_hDC, send_len + 2, reinterpret_cast<const BYTE*>(buffer));
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    sent_len += send_len;
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    len -= send_len;
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
41