1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FPDF_AP_H_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../fxcrt/fx_basic.h"
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../fpdfapi/fpdf_parser.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fpdf_vt.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IPVT_FontMap
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual CPDF_Font*						GetPDFFont(FX_INT32 nFontIndex) = 0;
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual CFX_ByteString					GetPDFFontAlias(FX_INT32 nFontIndex) = 0;
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct CPVT_Dash {
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPVT_Dash(FX_INT32 dash, FX_INT32 gap, FX_INT32 phase) : nDash(dash), nGap(gap), nPhase(phase)
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {}
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32			nDash;
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32			nGap;
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32			nPhase;
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CT_TRANSPARENT		0
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define	CT_GRAY				1
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define	CT_RGB				2
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define	CT_CMYK				3
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct CPVT_Color {
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPVT_Color(FX_INT32 type = 0, FX_FLOAT color1 = 0.0f, FX_FLOAT color2 = 0.0f, FX_FLOAT color3 = 0.0f, FX_FLOAT color4 = 0.0f)
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        : nColorType(type), fColor1(color1), fColor2(color2), fColor3(color3), fColor4(color4)
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {}
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32			nColorType;
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT			fColor1;
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT			fColor2;
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT			fColor3;
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT			fColor4;
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPVT_Provider : public IPDF_VariableText_Provider
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPVT_Provider(IPVT_FontMap * pFontMap);
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    virtual ~CPVT_Provider();
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32						GetCharWidth(FX_INT32 nFontIndex, FX_WORD word, FX_INT32 nWordStyle);
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32						GetTypeAscent(FX_INT32 nFontIndex);
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32						GetTypeDescent(FX_INT32 nFontIndex);
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32						GetWordFontIndex(FX_WORD word, FX_INT32 charset, FX_INT32 nFontIndex);
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL							IsLatinWord(FX_WORD word);
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32						GetDefaultFontIndex();
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    IPVT_FontMap *	m_pFontMap;
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PBS_SOLID			0
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PBS_DASH			1
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PBS_BEVELED			2
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PBS_INSET			3
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PBS_UNDERLINED		4
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPVT_GenerateAP
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static FX_BOOL							GenerateTextFieldAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static FX_BOOL							GenerateComboBoxAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static FX_BOOL							GenerateListBoxAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CFX_ByteString					GenerateEditAP(IPVT_FontMap * pFontMap, IPDF_VariableText_Iterator * pIterator,
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            const CPDF_Point & ptOffset, FX_BOOL bContinuous, FX_WORD SubWord = 0, const CPVT_WordRange * pVisible = NULL);
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CFX_ByteString					GenerateBorderAP(const CPDF_Rect & rect, FX_FLOAT fWidth,
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            const CPVT_Color & color, const CPVT_Color & crLeftTop, const CPVT_Color & crRightBottom,
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            FX_INT32 nStyle, const CPVT_Dash & dash);
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    static CFX_ByteString					GenerateColorAP(const CPVT_Color & color, const FX_BOOL & bFillOrStroke);
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
93