| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_ | 7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_ |
| 8 #define CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_ | 8 #define CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_ |
| 9 | 9 |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 class CPDF_PageObject : public CPDF_GraphicStates { | 281 class CPDF_PageObject : public CPDF_GraphicStates { |
| 282 public: | 282 public: |
| 283 enum Type { | 283 enum Type { |
| 284 TEXT = 1, | 284 TEXT = 1, |
| 285 PATH, | 285 PATH, |
| 286 IMAGE, | 286 IMAGE, |
| 287 SHADING, | 287 SHADING, |
| 288 FORM, | 288 FORM, |
| 289 }; | 289 }; |
| 290 | 290 |
| 291 static CPDF_PageObject* Create(int type); | 291 static CPDF_PageObject* Create(Type type); |
| 292 virtual ~CPDF_PageObject(); | 292 virtual ~CPDF_PageObject(); |
| 293 | 293 |
| 294 CPDF_PageObject* Clone() const; | 294 CPDF_PageObject* Clone() const; |
| 295 void Copy(const CPDF_PageObject* pSrcObject); | 295 void Copy(const CPDF_PageObject* pSrcObject); |
| 296 | 296 |
| 297 virtual Type GetType() const = 0; |
| 297 virtual void Transform(const CFX_Matrix& matrix) = 0; | 298 virtual void Transform(const CFX_Matrix& matrix) = 0; |
| 299 virtual bool IsText() const { return false; } |
| 300 virtual bool IsPath() const { return false; } |
| 301 virtual bool IsImage() const { return false; } |
| 302 virtual bool IsShading() const { return false; } |
| 303 virtual bool IsForm() const { return false; } |
| 304 virtual CPDF_TextObject* AsText() { return nullptr; } |
| 305 virtual const CPDF_TextObject* AsText() const { return nullptr; } |
| 306 virtual CPDF_PathObject* AsPath() { return nullptr; } |
| 307 virtual const CPDF_PathObject* AsPath() const { return nullptr; } |
| 308 virtual CPDF_ImageObject* AsImage() { return nullptr; } |
| 309 virtual const CPDF_ImageObject* AsImage() const { return nullptr; } |
| 310 virtual CPDF_ShadingObject* AsShading() { return nullptr; } |
| 311 virtual const CPDF_ShadingObject* AsShading() const { return nullptr; } |
| 312 virtual CPDF_FormObject* AsForm() { return nullptr; } |
| 313 virtual const CPDF_FormObject* AsForm() const { return nullptr; } |
| 298 | 314 |
| 299 void RemoveClipPath(); | 315 void RemoveClipPath(); |
| 300 void AppendClipPath(CPDF_Path path, int type, FX_BOOL bAutoMerge); | 316 void AppendClipPath(CPDF_Path path, int type, FX_BOOL bAutoMerge); |
| 301 void CopyClipPath(CPDF_PageObject* pObj); | 317 void CopyClipPath(CPDF_PageObject* pObj); |
| 302 void TransformClipPath(CFX_Matrix& matrix); | 318 void TransformClipPath(CFX_Matrix& matrix); |
| 303 void TransformGeneralState(CFX_Matrix& matrix); | 319 void TransformGeneralState(CFX_Matrix& matrix); |
| 304 void SetColorState(CPDF_ColorState state) { m_ColorState = state; } | 320 void SetColorState(CPDF_ColorState state) { m_ColorState = state; } |
| 305 FX_RECT GetBBox(const CFX_Matrix* pMatrix) const; | 321 FX_RECT GetBBox(const CFX_Matrix* pMatrix) const; |
| 306 | 322 |
| 307 const Type m_Type; | |
| 308 FX_FLOAT m_Left; | 323 FX_FLOAT m_Left; |
| 309 FX_FLOAT m_Right; | 324 FX_FLOAT m_Right; |
| 310 FX_FLOAT m_Top; | 325 FX_FLOAT m_Top; |
| 311 FX_FLOAT m_Bottom; | 326 FX_FLOAT m_Bottom; |
| 312 CPDF_ContentMark m_ContentMark; | 327 CPDF_ContentMark m_ContentMark; |
| 313 | 328 |
| 314 protected: | 329 protected: |
| 315 virtual void CopyData(const CPDF_PageObject* pSrcObject) = 0; | 330 virtual void CopyData(const CPDF_PageObject* pSrcObject) = 0; |
| 316 | 331 |
| 317 void RecalcBBox(); | 332 void RecalcBBox(); |
| 318 CPDF_PageObject(Type type) : m_Type(type) {} | |
| 319 }; | 333 }; |
| 320 | 334 |
| 321 struct CPDF_TextObjectItem { | 335 struct CPDF_TextObjectItem { |
| 322 FX_DWORD m_CharCode; | 336 FX_DWORD m_CharCode; |
| 323 FX_FLOAT m_OriginX; | 337 FX_FLOAT m_OriginX; |
| 324 FX_FLOAT m_OriginY; | 338 FX_FLOAT m_OriginY; |
| 325 }; | 339 }; |
| 326 | 340 |
| 327 class CPDF_TextObject : public CPDF_PageObject { | 341 class CPDF_TextObject : public CPDF_PageObject { |
| 328 public: | 342 public: |
| 329 CPDF_TextObject(); | 343 CPDF_TextObject(); |
| 330 ~CPDF_TextObject() override; | 344 ~CPDF_TextObject() override; |
| 331 | 345 |
| 346 // CPDF_PageObject: |
| 347 Type GetType() const override { return TEXT; }; |
| 348 void Transform(const CFX_Matrix& matrix) override; |
| 349 bool IsText() const override { return true; }; |
| 350 CPDF_TextObject* AsText() override { return this; }; |
| 351 const CPDF_TextObject* AsText() const override { return this; }; |
| 352 |
| 332 int CountItems() const { return m_nChars; } | 353 int CountItems() const { return m_nChars; } |
| 333 | 354 |
| 334 void GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const; | 355 void GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const; |
| 335 | 356 |
| 336 int CountChars() const; | 357 int CountChars() const; |
| 337 | 358 |
| 338 void GetCharInfo(int index, FX_DWORD& charcode, FX_FLOAT& kerning) const; | 359 void GetCharInfo(int index, FX_DWORD& charcode, FX_FLOAT& kerning) const; |
| 339 void GetCharInfo(int index, CPDF_TextObjectItem* pInfo) const; | 360 void GetCharInfo(int index, CPDF_TextObjectItem* pInfo) const; |
| 340 | 361 |
| 341 void GetCharRect(int index, CFX_FloatRect& rect) const; | 362 void GetCharRect(int index, CFX_FloatRect& rect) const; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 358 void SetText(const CFX_ByteString& text); | 379 void SetText(const CFX_ByteString& text); |
| 359 | 380 |
| 360 void SetText(CFX_ByteString* pStrs, FX_FLOAT* pKerning, int nSegs); | 381 void SetText(CFX_ByteString* pStrs, FX_FLOAT* pKerning, int nSegs); |
| 361 | 382 |
| 362 void SetText(int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pKernings); | 383 void SetText(int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pKernings); |
| 363 | 384 |
| 364 void SetPosition(FX_FLOAT x, FX_FLOAT y); | 385 void SetPosition(FX_FLOAT x, FX_FLOAT y); |
| 365 | 386 |
| 366 void SetTextState(CPDF_TextState TextState); | 387 void SetTextState(CPDF_TextState TextState); |
| 367 | 388 |
| 368 // CPDF_PageObject: | |
| 369 void Transform(const CFX_Matrix& matrix) override; | |
| 370 | |
| 371 void CalcCharPos(FX_FLOAT* pPosArray) const; | 389 void CalcCharPos(FX_FLOAT* pPosArray) const; |
| 372 | 390 |
| 373 void SetData(int nChars, | 391 void SetData(int nChars, |
| 374 FX_DWORD* pCharCodes, | 392 FX_DWORD* pCharCodes, |
| 375 FX_FLOAT* pCharPos, | 393 FX_FLOAT* pCharPos, |
| 376 FX_FLOAT x, | 394 FX_FLOAT x, |
| 377 FX_FLOAT y); | 395 FX_FLOAT y); |
| 378 | 396 |
| 379 void GetData(int& nChars, FX_DWORD*& pCharCodes, FX_FLOAT*& pCharPos) { | 397 void GetData(int& nChars, FX_DWORD*& pCharCodes, FX_FLOAT*& pCharPos) { |
| 380 nChars = m_nChars; | 398 nChars = m_nChars; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 404 | 422 |
| 405 int m_nChars; | 423 int m_nChars; |
| 406 | 424 |
| 407 FX_DWORD* m_pCharCodes; | 425 FX_DWORD* m_pCharCodes; |
| 408 | 426 |
| 409 FX_FLOAT* m_pCharPos; | 427 FX_FLOAT* m_pCharPos; |
| 410 }; | 428 }; |
| 411 | 429 |
| 412 class CPDF_PathObject : public CPDF_PageObject { | 430 class CPDF_PathObject : public CPDF_PageObject { |
| 413 public: | 431 public: |
| 414 CPDF_PathObject() : CPDF_PageObject(PATH) {} | 432 CPDF_PathObject() {} |
| 415 ~CPDF_PathObject() override {} | 433 ~CPDF_PathObject() override {} |
| 416 | 434 |
| 435 // CPDF_PageObject: |
| 436 Type GetType() const override { return PATH; }; |
| 417 void Transform(const CFX_Matrix& maxtrix) override; | 437 void Transform(const CFX_Matrix& maxtrix) override; |
| 438 bool IsPath() const override { return true; }; |
| 439 CPDF_PathObject* AsPath() override { return this; }; |
| 440 const CPDF_PathObject* AsPath() const override { return this; }; |
| 418 | 441 |
| 419 void SetGraphState(CPDF_GraphState GraphState); | 442 void SetGraphState(CPDF_GraphState GraphState); |
| 420 | 443 |
| 421 void CalcBoundingBox(); | 444 void CalcBoundingBox(); |
| 422 | 445 |
| 423 CPDF_Path m_Path; | 446 CPDF_Path m_Path; |
| 424 | 447 |
| 425 int m_FillType; | 448 int m_FillType; |
| 426 | 449 |
| 427 FX_BOOL m_bStroke; | 450 FX_BOOL m_bStroke; |
| 428 | 451 |
| 429 CFX_Matrix m_Matrix; | 452 CFX_Matrix m_Matrix; |
| 430 | 453 |
| 431 protected: | 454 protected: |
| 432 void CopyData(const CPDF_PageObject* pSrcObject) override; | 455 void CopyData(const CPDF_PageObject* pSrcObject) override; |
| 433 }; | 456 }; |
| 434 | 457 |
| 435 class CPDF_ImageObject : public CPDF_PageObject { | 458 class CPDF_ImageObject : public CPDF_PageObject { |
| 436 public: | 459 public: |
| 437 CPDF_ImageObject(); | 460 CPDF_ImageObject(); |
| 438 ~CPDF_ImageObject() override; | 461 ~CPDF_ImageObject() override; |
| 439 | 462 |
| 463 // CPDF_PageObject: |
| 464 Type GetType() const override { return IMAGE; }; |
| 440 void Transform(const CFX_Matrix& matrix) override; | 465 void Transform(const CFX_Matrix& matrix) override; |
| 466 bool IsImage() const override { return true; }; |
| 467 CPDF_ImageObject* AsImage() override { return this; }; |
| 468 const CPDF_ImageObject* AsImage() const override { return this; }; |
| 441 | 469 |
| 442 CPDF_Image* m_pImage; | 470 CPDF_Image* m_pImage; |
| 443 | 471 |
| 444 CFX_Matrix m_Matrix; | 472 CFX_Matrix m_Matrix; |
| 445 | 473 |
| 446 void CalcBoundingBox(); | 474 void CalcBoundingBox(); |
| 447 | 475 |
| 448 private: | 476 private: |
| 449 void CopyData(const CPDF_PageObject* pSrcObject) override; | 477 void CopyData(const CPDF_PageObject* pSrcObject) override; |
| 450 }; | 478 }; |
| 451 | 479 |
| 452 class CPDF_ShadingObject : public CPDF_PageObject { | 480 class CPDF_ShadingObject : public CPDF_PageObject { |
| 453 public: | 481 public: |
| 454 CPDF_ShadingObject(); | 482 CPDF_ShadingObject(); |
| 455 ~CPDF_ShadingObject() override; | 483 ~CPDF_ShadingObject() override; |
| 456 | 484 |
| 457 CPDF_ShadingPattern* m_pShading; | 485 // CPDF_PageObject: |
| 458 | 486 Type GetType() const override { return SHADING; }; |
| 459 CFX_Matrix m_Matrix; | |
| 460 | |
| 461 void Transform(const CFX_Matrix& matrix) override; | 487 void Transform(const CFX_Matrix& matrix) override; |
| 488 bool IsShading() const override { return true; }; |
| 489 CPDF_ShadingObject* AsShading() override { return this; }; |
| 490 const CPDF_ShadingObject* AsShading() const override { return this; }; |
| 462 | 491 |
| 463 void CalcBoundingBox(); | 492 void CalcBoundingBox(); |
| 464 | 493 |
| 494 CPDF_ShadingPattern* m_pShading; |
| 495 CFX_Matrix m_Matrix; |
| 496 |
| 465 protected: | 497 protected: |
| 466 void CopyData(const CPDF_PageObject* pSrcObject) override; | 498 void CopyData(const CPDF_PageObject* pSrcObject) override; |
| 467 }; | 499 }; |
| 468 | 500 |
| 469 class CPDF_FormObject : public CPDF_PageObject { | 501 class CPDF_FormObject : public CPDF_PageObject { |
| 470 public: | 502 public: |
| 471 CPDF_FormObject() : CPDF_PageObject(FORM), m_pForm(nullptr) {} | 503 CPDF_FormObject() : m_pForm(nullptr) {} |
| 472 ~CPDF_FormObject() override; | 504 ~CPDF_FormObject() override; |
| 473 | 505 |
| 506 // CPDF_PageObject: |
| 507 Type GetType() const override { return FORM; }; |
| 474 void Transform(const CFX_Matrix& matrix) override; | 508 void Transform(const CFX_Matrix& matrix) override; |
| 509 bool IsForm() const override { return true; }; |
| 510 CPDF_FormObject* AsForm() override { return this; }; |
| 511 const CPDF_FormObject* AsForm() const override { return this; }; |
| 512 |
| 475 void CalcBoundingBox(); | 513 void CalcBoundingBox(); |
| 476 | 514 |
| 477 CPDF_Form* m_pForm; | 515 CPDF_Form* m_pForm; |
| 478 CFX_Matrix m_FormMatrix; | 516 CFX_Matrix m_FormMatrix; |
| 479 | 517 |
| 480 protected: | 518 protected: |
| 481 void CopyData(const CPDF_PageObject* pSrcObject) override; | 519 void CopyData(const CPDF_PageObject* pSrcObject) override; |
| 482 }; | 520 }; |
| 483 | 521 |
| 484 #endif // CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_ | 522 #endif // CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_ |
| OLD | NEW |