Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(341)

Side by Side Diff: core/include/fpdfapi/fpdf_pageobj.h

Issue 1811053002: Move core/include/fpdfapi/fpdf_pageobj.h into core/fpdfapi. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/fpdftext/include/ipdf_textpage.h ('k') | fpdfsdk/formfiller/FFL_CBA_Fontmap.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 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 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_
8 #define CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_
9
10 #include <vector>
11
12 #include "core/include/fpdfapi/fpdf_resource.h"
13 #include "core/include/fxge/fx_ge.h"
14
15 class CPDF_ClipPath;
16 class CPDF_ClipPathData;
17 class CPDF_ColorState;
18 class CPDF_ColorStateData;
19 class CPDF_ContentMark;
20 class CPDF_ContentMarkItem;
21 class CPDF_FormObject;
22 class CPDF_GeneralState;
23 class CPDF_GeneralStateData;
24 class CPDF_GraphicStates;
25 class CPDF_GraphState;
26 class CPDF_ImageObject;
27 class CPDF_PageObject;
28 class CPDF_Path;
29 class CPDF_PathObject;
30 class CPDF_ShadingObject;
31 class CPDF_TextObject;
32 class CPDF_TextState;
33 class CPDF_TextStateData;
34 class CPDF_TransferFunc;
35
36 class CPDF_Path : public CFX_CountRef<CFX_PathData> {
37 public:
38 int GetPointCount() const { return m_pObject->m_PointCount; }
39 int GetFlag(int index) const { return m_pObject->m_pPoints[index].m_Flag; }
40 FX_FLOAT GetPointX(int index) const {
41 return m_pObject->m_pPoints[index].m_PointX;
42 }
43 FX_FLOAT GetPointY(int index) const {
44 return m_pObject->m_pPoints[index].m_PointY;
45 }
46 FX_PATHPOINT* GetPoints() const { return m_pObject->m_pPoints; }
47 CFX_FloatRect GetBoundingBox() const { return m_pObject->GetBoundingBox(); }
48 CFX_FloatRect GetBoundingBox(FX_FLOAT line_width,
49 FX_FLOAT miter_limit) const {
50 return m_pObject->GetBoundingBox(line_width, miter_limit);
51 }
52 FX_BOOL IsRect() const { return m_pObject->IsRect(); }
53
54 void Transform(const CFX_Matrix* pMatrix) { GetModify()->Transform(pMatrix); }
55 void Append(CPDF_Path src, const CFX_Matrix* pMatrix) {
56 m_pObject->Append(src.m_pObject, pMatrix);
57 }
58 void AppendRect(FX_FLOAT left,
59 FX_FLOAT bottom,
60 FX_FLOAT right,
61 FX_FLOAT top) {
62 m_pObject->AppendRect(left, bottom, right, top);
63 }
64 };
65
66 class CPDF_ClipPathData {
67 public:
68 CPDF_ClipPathData();
69 CPDF_ClipPathData(const CPDF_ClipPathData&);
70 ~CPDF_ClipPathData();
71
72 void SetCount(int path_count, int text_count);
73
74 int m_PathCount;
75 CPDF_Path* m_pPathList;
76 uint8_t* m_pTypeList;
77 int m_TextCount;
78 CPDF_TextObject** m_pTextList;
79 };
80
81 class CPDF_ClipPath : public CFX_CountRef<CPDF_ClipPathData> {
82 public:
83 FX_DWORD GetPathCount() const { return m_pObject->m_PathCount; }
84 CPDF_Path GetPath(int i) const { return m_pObject->m_pPathList[i]; }
85 int GetClipType(int i) const { return m_pObject->m_pTypeList[i]; }
86 FX_DWORD GetTextCount() const { return m_pObject->m_TextCount; }
87 CPDF_TextObject* GetText(int i) const { return m_pObject->m_pTextList[i]; }
88 CFX_FloatRect GetClipBox() const;
89 void AppendPath(CPDF_Path path, int type, FX_BOOL bAutoMerge);
90 void DeletePath(int layer_index);
91 void AppendTexts(CPDF_TextObject** pTexts, int count);
92 void Transform(const CFX_Matrix& matrix);
93 };
94
95 class CPDF_ColorStateData {
96 public:
97 CPDF_ColorStateData() : m_FillRGB(0), m_StrokeRGB(0) {}
98 CPDF_ColorStateData(const CPDF_ColorStateData& src);
99
100 void Default();
101
102 CPDF_Color m_FillColor;
103 FX_DWORD m_FillRGB;
104 CPDF_Color m_StrokeColor;
105 FX_DWORD m_StrokeRGB;
106 };
107
108 class CPDF_ColorState : public CFX_CountRef<CPDF_ColorStateData> {
109 public:
110 CPDF_Color* GetFillColor() const {
111 return m_pObject ? &m_pObject->m_FillColor : nullptr;
112 }
113
114 CPDF_Color* GetStrokeColor() const {
115 return m_pObject ? &m_pObject->m_StrokeColor : nullptr;
116 }
117
118 void SetFillColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);
119 void SetStrokeColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);
120 void SetFillPattern(CPDF_Pattern* pattern, FX_FLOAT* pValue, int nValues);
121 void SetStrokePattern(CPDF_Pattern* pattern, FX_FLOAT* pValue, int nValues);
122
123 private:
124 void SetColor(CPDF_Color& color,
125 FX_DWORD& rgb,
126 CPDF_ColorSpace* pCS,
127 FX_FLOAT* pValue,
128 int nValues);
129 };
130
131 class CPDF_GraphState : public CFX_CountRef<CFX_GraphStateData> {
132 };
133
134 class CPDF_TextStateData {
135 public:
136 CPDF_TextStateData();
137 CPDF_TextStateData(const CPDF_TextStateData& src);
138 ~CPDF_TextStateData();
139
140 CPDF_Font* m_pFont;
141 CPDF_Document* m_pDocument;
142 FX_FLOAT m_FontSize;
143 FX_FLOAT m_CharSpace;
144 FX_FLOAT m_WordSpace;
145 FX_FLOAT m_Matrix[4];
146 int m_TextMode;
147 FX_FLOAT m_CTM[4];
148 };
149
150 class CPDF_TextState : public CFX_CountRef<CPDF_TextStateData> {
151 public:
152 CPDF_Font* GetFont() const { return m_pObject->m_pFont; }
153 void SetFont(CPDF_Font* pFont);
154 FX_FLOAT GetFontSize() const { return m_pObject->m_FontSize; }
155 FX_FLOAT* GetMatrix() const { return m_pObject->m_Matrix; }
156 FX_FLOAT GetFontSizeV() const;
157 FX_FLOAT GetFontSizeH() const;
158 FX_FLOAT GetBaselineAngle() const;
159 FX_FLOAT GetShearAngle() const;
160 };
161
162 class CPDF_GeneralStateData {
163 public:
164 CPDF_GeneralStateData();
165 CPDF_GeneralStateData(const CPDF_GeneralStateData& src);
166 ~CPDF_GeneralStateData();
167
168 void SetBlendMode(const CFX_ByteStringC& blend_mode);
169
170 char m_BlendMode[16];
171 int m_BlendType;
172 CPDF_Object* m_pSoftMask;
173 FX_FLOAT m_SMaskMatrix[6];
174 FX_FLOAT m_StrokeAlpha;
175 FX_FLOAT m_FillAlpha;
176 CPDF_Object* m_pTR;
177 CPDF_TransferFunc* m_pTransferFunc;
178 CFX_Matrix m_Matrix;
179 int m_RenderIntent;
180 FX_BOOL m_StrokeAdjust;
181 FX_BOOL m_AlphaSource;
182 FX_BOOL m_TextKnockout;
183 FX_BOOL m_StrokeOP;
184 FX_BOOL m_FillOP;
185 int m_OPMode;
186 CPDF_Object* m_pBG;
187 CPDF_Object* m_pUCR;
188 CPDF_Object* m_pHT;
189 FX_FLOAT m_Flatness;
190 FX_FLOAT m_Smoothness;
191 };
192
193 class CPDF_GeneralState : public CFX_CountRef<CPDF_GeneralStateData> {
194 public:
195 void SetRenderIntent(const CFX_ByteString& ri);
196
197 int GetBlendType() const {
198 return m_pObject ? m_pObject->m_BlendType : FXDIB_BLEND_NORMAL;
199 }
200
201 int GetAlpha(FX_BOOL bStroke) const {
202 return m_pObject ? FXSYS_round((bStroke ? m_pObject->m_StrokeAlpha
203 : m_pObject->m_FillAlpha) *
204 255)
205 : 255;
206 }
207 };
208
209 class CPDF_ContentMarkItem {
210 public:
211 enum ParamType { None, PropertiesDict, DirectDict };
212
213 CPDF_ContentMarkItem();
214 CPDF_ContentMarkItem(const CPDF_ContentMarkItem& src);
215 ~CPDF_ContentMarkItem();
216
217 const CFX_ByteString& GetName() const { return m_MarkName; }
218 ParamType GetParamType() const { return m_ParamType; }
219 CPDF_Dictionary* GetParam() const { return m_pParam; }
220 FX_BOOL HasMCID() const;
221 void SetName(const CFX_ByteString& name) { m_MarkName = name; }
222 void SetParam(ParamType type, CPDF_Dictionary* param) {
223 m_ParamType = type;
224 m_pParam = param;
225 }
226
227 private:
228 CFX_ByteString m_MarkName;
229 ParamType m_ParamType;
230 CPDF_Dictionary* m_pParam;
231 };
232
233 class CPDF_ContentMarkData {
234 public:
235 CPDF_ContentMarkData() {}
236 CPDF_ContentMarkData(const CPDF_ContentMarkData& src);
237
238 int CountItems() const;
239 CPDF_ContentMarkItem& GetItem(int index) { return m_Marks[index]; }
240 const CPDF_ContentMarkItem& GetItem(int index) const {
241 return m_Marks[index];
242 }
243
244 int GetMCID() const;
245 void AddMark(const CFX_ByteString& name,
246 CPDF_Dictionary* pDict,
247 FX_BOOL bDictNeedClone);
248 void DeleteLastMark();
249
250 private:
251 std::vector<CPDF_ContentMarkItem> m_Marks;
252 };
253
254 class CPDF_ContentMark : public CFX_CountRef<CPDF_ContentMarkData> {
255 public:
256 int GetMCID() const { return m_pObject ? m_pObject->GetMCID() : -1; }
257
258 FX_BOOL HasMark(const CFX_ByteStringC& mark) const;
259
260 FX_BOOL LookupMark(const CFX_ByteStringC& mark,
261 CPDF_Dictionary*& pDict) const;
262 };
263
264 class CPDF_GraphicStates {
265 public:
266 void CopyStates(const CPDF_GraphicStates& src);
267
268 void DefaultStates();
269
270 CPDF_ClipPath m_ClipPath;
271
272 CPDF_GraphState m_GraphState;
273
274 CPDF_ColorState m_ColorState;
275
276 CPDF_TextState m_TextState;
277
278 CPDF_GeneralState m_GeneralState;
279 };
280
281 class CPDF_PageObject : public CPDF_GraphicStates {
282 public:
283 enum Type {
284 TEXT = 1,
285 PATH,
286 IMAGE,
287 SHADING,
288 FORM,
289 };
290
291 CPDF_PageObject();
292 virtual ~CPDF_PageObject();
293
294 virtual CPDF_PageObject* Clone() const = 0;
295 virtual Type GetType() const = 0;
296 virtual void Transform(const CFX_Matrix& matrix) = 0;
297 virtual bool IsText() const { return false; }
298 virtual bool IsPath() const { return false; }
299 virtual bool IsImage() const { return false; }
300 virtual bool IsShading() const { return false; }
301 virtual bool IsForm() const { return false; }
302 virtual CPDF_TextObject* AsText() { return nullptr; }
303 virtual const CPDF_TextObject* AsText() const { return nullptr; }
304 virtual CPDF_PathObject* AsPath() { return nullptr; }
305 virtual const CPDF_PathObject* AsPath() const { return nullptr; }
306 virtual CPDF_ImageObject* AsImage() { return nullptr; }
307 virtual const CPDF_ImageObject* AsImage() const { return nullptr; }
308 virtual CPDF_ShadingObject* AsShading() { return nullptr; }
309 virtual const CPDF_ShadingObject* AsShading() const { return nullptr; }
310 virtual CPDF_FormObject* AsForm() { return nullptr; }
311 virtual const CPDF_FormObject* AsForm() const { return nullptr; }
312
313 void TransformClipPath(CFX_Matrix& matrix);
314 void TransformGeneralState(CFX_Matrix& matrix);
315 FX_RECT GetBBox(const CFX_Matrix* pMatrix) const;
316
317 FX_FLOAT m_Left;
318 FX_FLOAT m_Right;
319 FX_FLOAT m_Top;
320 FX_FLOAT m_Bottom;
321 CPDF_ContentMark m_ContentMark;
322
323 protected:
324 void CopyData(const CPDF_PageObject* pSrcObject);
325
326 private:
327 CPDF_PageObject(const CPDF_PageObject& src) = delete;
328 void operator=(const CPDF_PageObject& src) = delete;
329 };
330
331 struct CPDF_TextObjectItem {
332 FX_DWORD m_CharCode;
333 FX_FLOAT m_OriginX;
334 FX_FLOAT m_OriginY;
335 };
336
337 class CPDF_TextObject : public CPDF_PageObject {
338 public:
339 CPDF_TextObject();
340 ~CPDF_TextObject() override;
341
342 // CPDF_PageObject:
343 CPDF_TextObject* Clone() const override;
344 Type GetType() const override { return TEXT; };
345 void Transform(const CFX_Matrix& matrix) override;
346 bool IsText() const override { return true; };
347 CPDF_TextObject* AsText() override { return this; };
348 const CPDF_TextObject* AsText() const override { return this; };
349
350 int CountItems() const { return m_nChars; }
351 void GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const;
352 int CountChars() const;
353 void GetCharInfo(int index, FX_DWORD& charcode, FX_FLOAT& kerning) const;
354 void GetCharInfo(int index, CPDF_TextObjectItem* pInfo) const;
355 FX_FLOAT GetCharWidth(FX_DWORD charcode) const;
356 FX_FLOAT GetPosX() const { return m_PosX; }
357 FX_FLOAT GetPosY() const { return m_PosY; }
358 void GetTextMatrix(CFX_Matrix* pMatrix) const;
359 CPDF_Font* GetFont() const { return m_TextState.GetFont(); }
360 FX_FLOAT GetFontSize() const { return m_TextState.GetFontSize(); }
361
362 void SetText(const CFX_ByteString& text);
363 void SetPosition(FX_FLOAT x, FX_FLOAT y);
364
365 void RecalcPositionData() { CalcPositionData(nullptr, nullptr, 1); }
366
367 protected:
368 friend class CPDF_RenderStatus;
369 friend class CPDF_StreamContentParser;
370 friend class CPDF_TextRenderer;
371
372 void SetSegments(const CFX_ByteString* pStrs, FX_FLOAT* pKerning, int nSegs);
373
374 void CalcPositionData(FX_FLOAT* pTextAdvanceX,
375 FX_FLOAT* pTextAdvanceY,
376 FX_FLOAT horz_scale,
377 int level = 0);
378
379 FX_FLOAT m_PosX;
380 FX_FLOAT m_PosY;
381 int m_nChars;
382 FX_DWORD* m_pCharCodes;
383 FX_FLOAT* m_pCharPos;
384 };
385
386 class CPDF_PathObject : public CPDF_PageObject {
387 public:
388 CPDF_PathObject();
389 ~CPDF_PathObject() override;
390
391 // CPDF_PageObject:
392 CPDF_PathObject* Clone() const override;
393 Type GetType() const override { return PATH; };
394 void Transform(const CFX_Matrix& maxtrix) override;
395 bool IsPath() const override { return true; };
396 CPDF_PathObject* AsPath() override { return this; };
397 const CPDF_PathObject* AsPath() const override { return this; };
398
399 void CalcBoundingBox();
400
401 CPDF_Path m_Path;
402 int m_FillType;
403 FX_BOOL m_bStroke;
404 CFX_Matrix m_Matrix;
405 };
406
407 class CPDF_ImageObject : public CPDF_PageObject {
408 public:
409 CPDF_ImageObject();
410 ~CPDF_ImageObject() override;
411
412 // CPDF_PageObject:
413 CPDF_ImageObject* Clone() const override;
414 Type GetType() const override { return IMAGE; };
415 void Transform(const CFX_Matrix& matrix) override;
416 bool IsImage() const override { return true; };
417 CPDF_ImageObject* AsImage() override { return this; };
418 const CPDF_ImageObject* AsImage() const override { return this; };
419
420 void CalcBoundingBox();
421
422 CPDF_Image* m_pImage;
423 CFX_Matrix m_Matrix;
424 };
425
426 class CPDF_ShadingObject : public CPDF_PageObject {
427 public:
428 CPDF_ShadingObject();
429 ~CPDF_ShadingObject() override;
430
431 // CPDF_PageObject:
432 CPDF_ShadingObject* Clone() const override;
433 Type GetType() const override { return SHADING; };
434 void Transform(const CFX_Matrix& matrix) override;
435 bool IsShading() const override { return true; };
436 CPDF_ShadingObject* AsShading() override { return this; };
437 const CPDF_ShadingObject* AsShading() const override { return this; };
438
439 void CalcBoundingBox();
440
441 CPDF_ShadingPattern* m_pShading;
442 CFX_Matrix m_Matrix;
443 };
444
445 class CPDF_FormObject : public CPDF_PageObject {
446 public:
447 CPDF_FormObject();
448 ~CPDF_FormObject() override;
449
450 // CPDF_PageObject:
451 CPDF_FormObject* Clone() const override;
452 Type GetType() const override { return FORM; };
453 void Transform(const CFX_Matrix& matrix) override;
454 bool IsForm() const override { return true; };
455 CPDF_FormObject* AsForm() override { return this; };
456 const CPDF_FormObject* AsForm() const override { return this; };
457
458 void CalcBoundingBox();
459
460 CPDF_Form* m_pForm;
461 CFX_Matrix m_FormMatrix;
462 };
463
464 #endif // CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_
OLDNEW
« no previous file with comments | « core/fpdftext/include/ipdf_textpage.h ('k') | fpdfsdk/formfiller/FFL_CBA_Fontmap.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698