1// Copyright 2016 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "core/fpdfapi/render/cpdf_renderoptions.h"
8
9CPDF_RenderOptions::CPDF_RenderOptions()
10    : m_ColorMode(RENDER_COLOR_NORMAL),
11      m_Flags(RENDER_CLEARTYPE),
12      m_Interpolation(0),
13      m_AddFlags(0),
14      m_dwLimitCacheSize(1024 * 1024 * 100),
15      m_HalftoneLimit(-1),
16      m_bDrawAnnots(false) {}
17
18CPDF_RenderOptions::CPDF_RenderOptions(const CPDF_RenderOptions& rhs)
19    : m_ColorMode(rhs.m_ColorMode),
20      m_BackColor(rhs.m_BackColor),
21      m_ForeColor(rhs.m_ForeColor),
22      m_Flags(rhs.m_Flags),
23      m_Interpolation(rhs.m_Interpolation),
24      m_AddFlags(rhs.m_AddFlags),
25      m_dwLimitCacheSize(rhs.m_dwLimitCacheSize),
26      m_HalftoneLimit(rhs.m_HalftoneLimit),
27      m_bDrawAnnots(rhs.m_bDrawAnnots),
28      m_pOCContext(rhs.m_pOCContext) {}
29
30CPDF_RenderOptions::~CPDF_RenderOptions() {}
31
32FX_ARGB CPDF_RenderOptions::TranslateColor(FX_ARGB argb) const {
33  if (m_ColorMode == RENDER_COLOR_NORMAL)
34    return argb;
35
36  if (m_ColorMode == RENDER_COLOR_ALPHA)
37    return argb;
38
39  int a, r, g, b;
40  ArgbDecode(argb, a, r, g, b);
41  int gray = FXRGB2GRAY(r, g, b);
42  if (m_ColorMode == RENDER_COLOR_TWOCOLOR) {
43    int color = (r - gray) * (r - gray) + (g - gray) * (g - gray) +
44                (b - gray) * (b - gray);
45    if (gray < 35 && color < 20)
46      return ArgbEncode(a, m_ForeColor);
47
48    if (gray > 221 && color < 20)
49      return ArgbEncode(a, m_BackColor);
50
51    return argb;
52  }
53  int fr = FXSYS_GetRValue(m_ForeColor);
54  int fg = FXSYS_GetGValue(m_ForeColor);
55  int fb = FXSYS_GetBValue(m_ForeColor);
56  int br = FXSYS_GetRValue(m_BackColor);
57  int bg = FXSYS_GetGValue(m_BackColor);
58  int bb = FXSYS_GetBValue(m_BackColor);
59  r = (br - fr) * gray / 255 + fr;
60  g = (bg - fg) * gray / 255 + fg;
61  b = (bb - fb) * gray / 255 + fb;
62  return ArgbEncode(a, r, g, b);
63}
64