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