1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
// Copyright 2016 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "core/fpdfapi/fpdf_page/include/cpdf_generalstatedata.h"
#include "core/fpdfapi/fpdf_parser/include/cpdf_document.h"
#include "core/fpdfapi/fpdf_render/render_int.h"
namespace {
static int GetBlendTypeInternal(const CFX_ByteStringC& mode) {
switch (mode.GetID()) {
case FXBSTR_ID('N', 'o', 'r', 'm'):
case FXBSTR_ID('C', 'o', 'm', 'p'):
return FXDIB_BLEND_NORMAL;
case FXBSTR_ID('M', 'u', 'l', 't'):
return FXDIB_BLEND_MULTIPLY;
case FXBSTR_ID('S', 'c', 'r', 'e'):
return FXDIB_BLEND_SCREEN;
case FXBSTR_ID('O', 'v', 'e', 'r'):
return FXDIB_BLEND_OVERLAY;
case FXBSTR_ID('D', 'a', 'r', 'k'):
return FXDIB_BLEND_DARKEN;
case FXBSTR_ID('L', 'i', 'g', 'h'):
return FXDIB_BLEND_LIGHTEN;
case FXBSTR_ID('C', 'o', 'l', 'o'):
if (mode.GetLength() == 10)
return FXDIB_BLEND_COLORDODGE;
if (mode.GetLength() == 9)
return FXDIB_BLEND_COLORBURN;
return FXDIB_BLEND_COLOR;
case FXBSTR_ID('H', 'a', 'r', 'd'):
return FXDIB_BLEND_HARDLIGHT;
case FXBSTR_ID('S', 'o', 'f', 't'):
return FXDIB_BLEND_SOFTLIGHT;
case FXBSTR_ID('D', 'i', 'f', 'f'):
return FXDIB_BLEND_DIFFERENCE;
case FXBSTR_ID('E', 'x', 'c', 'l'):
return FXDIB_BLEND_EXCLUSION;
case FXBSTR_ID('H', 'u', 'e', 0):
return FXDIB_BLEND_HUE;
case FXBSTR_ID('S', 'a', 't', 'u'):
return FXDIB_BLEND_SATURATION;
case FXBSTR_ID('L', 'u', 'm', 'i'):
return FXDIB_BLEND_LUMINOSITY;
}
return FXDIB_BLEND_NORMAL;
}
} // namespace
CPDF_GeneralStateData::CPDF_GeneralStateData() {
FXSYS_memset(this, 0, sizeof(CPDF_GeneralStateData));
FXSYS_strcpy((FX_CHAR*)m_BlendMode, "Normal");
m_StrokeAlpha = 1.0f;
m_FillAlpha = 1.0f;
m_Flatness = 1.0f;
m_Matrix.SetIdentity();
}
CPDF_GeneralStateData::CPDF_GeneralStateData(const CPDF_GeneralStateData& src) {
FXSYS_memcpy(this, &src, sizeof(CPDF_GeneralStateData));
if (src.m_pTransferFunc && src.m_pTransferFunc->m_pPDFDoc) {
CPDF_DocRenderData* pDocCache =
src.m_pTransferFunc->m_pPDFDoc->GetRenderData();
if (!pDocCache)
return;
m_pTransferFunc = pDocCache->GetTransferFunc(m_pTR);
}
}
CPDF_GeneralStateData::~CPDF_GeneralStateData() {
if (m_pTransferFunc && m_pTransferFunc->m_pPDFDoc) {
CPDF_DocRenderData* pDocCache = m_pTransferFunc->m_pPDFDoc->GetRenderData();
if (!pDocCache)
return;
pDocCache->ReleaseTransferFunc(m_pTR);
}
}
void CPDF_GeneralStateData::SetBlendMode(const CFX_ByteStringC& blend_mode) {
if (blend_mode.GetLength() > 15) {
return;
}
FXSYS_memcpy(m_BlendMode, blend_mode.GetPtr(), blend_mode.GetLength());
m_BlendMode[blend_mode.GetLength()] = 0;
m_BlendType = GetBlendTypeInternal(blend_mode);
}
|