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_FXGE_FX_GE_H_ 8 #define CORE_INCLUDE_FXGE_FX_GE_H_ 9 10 #include "fx_dib.h" 11 #include "fx_font.h" 12 13 class CFX_Font; 14 class CFX_FontMgr; 15 class CFX_FontCache; 16 class CFX_FaceCache; 17 class IFX_RenderDeviceDriver; 18 class CCodec_ModuleMgr; 19 20 class CFX_GEModule { 21 public: 22 static void Create(const char** pUserFontPaths); 23 24 static void Use(CFX_GEModule* pMgr); 25 26 static CFX_GEModule* Get(); 27 28 static void Destroy(); 29 30 public: 31 CFX_FontCache* GetFontCache(); 32 CFX_FontMgr* GetFontMgr() { return m_pFontMgr; } 33 void SetTextGamma(FX_FLOAT gammaValue); 34 const uint8_t* GetTextGammaTable(); 35 36 void SetCodecModule(CCodec_ModuleMgr* pCodecModule) { 37 m_pCodecModule = pCodecModule; 38 } 39 CCodec_ModuleMgr* GetCodecModule() { return m_pCodecModule; } 40 FXFT_Library m_FTLibrary; 41 void* GetPlatformData() { return m_pPlatformData; } 42 43 protected: 44 explicit CFX_GEModule(const char** pUserFontPaths); 45 46 ~CFX_GEModule(); 47 void InitPlatform(); 48 void DestroyPlatform(); 49 50 private: 51 uint8_t m_GammaValue[256]; 52 CFX_FontCache* m_pFontCache; 53 CFX_FontMgr* m_pFontMgr; 54 CCodec_ModuleMgr* m_pCodecModule; 55 void* m_pPlatformData; 56 const char** m_pUserFontPaths; 57 }; 58 typedef struct { 59 FX_FLOAT m_PointX; 60 61 FX_FLOAT m_PointY; 62 63 int m_Flag; 64 } FX_PATHPOINT; 65 #define FXPT_CLOSEFIGURE 0x01 66 #define FXPT_LINETO 0x02 67 #define FXPT_BEZIERTO 0x04 68 #define FXPT_MOVETO 0x06 69 #define FXPT_TYPE 0x06 70 #define FXFILL_ALTERNATE 1 71 #define FXFILL_WINDING 2 72 class CFX_ClipRgn { 73 public: 74 CFX_ClipRgn(int device_width, int device_height); 75 76 CFX_ClipRgn(const FX_RECT& rect); 77 78 CFX_ClipRgn(const CFX_ClipRgn& src); 79 80 ~CFX_ClipRgn(); 81 82 typedef enum { RectI, MaskF } ClipType; 83 84 void Reset(const FX_RECT& rect); 85 86 ClipType GetType() const { return m_Type; } 87 88 const FX_RECT& GetBox() const { return m_Box; } 89 90 CFX_DIBitmapRef GetMask() const { return m_Mask; } 91 92 void IntersectRect(const FX_RECT& rect); 93 94 void IntersectMaskF(int left, int top, CFX_DIBitmapRef Mask); 95 96 protected: 97 ClipType m_Type; 98 99 FX_RECT m_Box; 100 101 CFX_DIBitmapRef m_Mask; 102 103 void IntersectMaskRect(FX_RECT rect, FX_RECT mask_box, CFX_DIBitmapRef Mask); 104 }; 105 #define FX_GAMMA(value) (value) 106 #define FX_GAMMA_INVERSE(value) (value) 107 inline FX_ARGB ArgbGamma(FX_ARGB argb) { 108 return argb; 109 } 110 inline FX_ARGB ArgbGammaInverse(FX_ARGB argb) { 111 return argb; 112 } 113 class CFX_PathData { 114 public: 115 CFX_PathData(); 116 117 CFX_PathData(const CFX_PathData& src); 118 119 ~CFX_PathData(); 120 121 int GetPointCount() const { return m_PointCount; } 122 123 int GetFlag(int index) const { return m_pPoints[index].m_Flag; } 124 125 FX_FLOAT GetPointX(int index) const { return m_pPoints[index].m_PointX; } 126 127 FX_FLOAT GetPointY(int index) const { return m_pPoints[index].m_PointY; } 128 129 FX_PATHPOINT* GetPoints() const { return m_pPoints; } 130 131 void SetPointCount(int nPoints); 132 void AllocPointCount(int nPoints); 133 void AddPointCount(int addPoints); 134 135 CFX_FloatRect GetBoundingBox() const; 136 137 CFX_FloatRect GetBoundingBox(FX_FLOAT line_width, FX_FLOAT miter_limit) const; 138 139 void Transform(const CFX_Matrix* pMatrix); 140 141 FX_BOOL IsRect() const; 142 143 FX_BOOL GetZeroAreaPath(CFX_PathData& NewPath, 144 CFX_Matrix* pMatrix, 145 FX_BOOL& bThin, 146 FX_BOOL bAdjust) const; 147 148 FX_BOOL IsRect(const CFX_Matrix* pMatrix, CFX_FloatRect* rect) const; 149 150 void Append(const CFX_PathData* pSrc, const CFX_Matrix* pMatrix); 151 void AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top); 152 153 void SetPoint(int index, FX_FLOAT x, FX_FLOAT y, int flag); 154 155 void TrimPoints(int nPoints); 156 157 void Copy(const CFX_PathData& src); 158 159 protected: 160 friend class CPDF_Path; 161 162 int m_PointCount; 163 164 FX_PATHPOINT* m_pPoints; 165 166 int m_AllocCount; 167 }; 168 class CFX_GraphStateData { 169 public: 170 CFX_GraphStateData(); 171 172 CFX_GraphStateData(const CFX_GraphStateData& src); 173 174 ~CFX_GraphStateData(); 175 176 void Copy(const CFX_GraphStateData& src); 177 178 void SetDashCount(int count); 179 180 typedef enum { LineCapButt = 0, LineCapRound = 1, LineCapSquare = 2 } LineCap; 181 LineCap m_LineCap; 182 int m_DashCount; 183 FX_FLOAT* m_DashArray; 184 FX_FLOAT m_DashPhase; 185 186 typedef enum { 187 LineJoinMiter = 0, 188 LineJoinRound = 1, 189 LineJoinBevel = 2, 190 } LineJoin; 191 LineJoin m_LineJoin; 192 FX_FLOAT m_MiterLimit; 193 FX_FLOAT m_LineWidth; 194 }; 195 #define FXDC_DEVICE_CLASS 1 196 #define FXDC_PIXEL_WIDTH 2 197 #define FXDC_PIXEL_HEIGHT 3 198 #define FXDC_BITS_PIXEL 4 199 #define FXDC_HORZ_SIZE 5 200 #define FXDC_VERT_SIZE 6 201 #define FXDC_RENDER_CAPS 7 202 #define FXDC_DITHER_BITS 8 203 #define FXDC_DISPLAY 1 204 #define FXDC_PRINTER 2 205 #define FXRC_GET_BITS 0x01 206 #define FXRC_BIT_MASK 0x02 207 #define FXRC_ALPHA_MASK 0x04 208 #define FXRC_ALPHA_PATH 0x10 209 #define FXRC_ALPHA_IMAGE 0x20 210 #define FXRC_ALPHA_OUTPUT 0x40 211 #define FXRC_BLEND_MODE 0x80 212 #define FXRC_SOFT_CLIP 0x100 213 #define FXRC_CMYK_OUTPUT 0x200 214 #define FXRC_BITMASK_OUTPUT 0x400 215 #define FXRC_BYTEMASK_OUTPUT 0x800 216 #define FXRENDER_IMAGE_LOSSY 0x1000 217 #define FXFILL_ALTERNATE 1 218 #define FXFILL_WINDING 2 219 #define FXFILL_FULLCOVER 4 220 #define FXFILL_RECT_AA 8 221 #define FX_FILL_STROKE 16 222 #define FX_STROKE_ADJUST 32 223 #define FX_STROKE_TEXT_MODE 64 224 #define FX_FILL_TEXT_MODE 128 225 #define FX_ZEROAREA_FILL 256 226 #define FXFILL_NOPATHSMOOTH 512 227 #define FXTEXT_CLEARTYPE 0x01 228 #define FXTEXT_BGR_STRIPE 0x02 229 #define FXTEXT_PRINTGRAPHICTEXT 0x04 230 #define FXTEXT_NO_NATIVETEXT 0x08 231 #define FXTEXT_PRINTIMAGETEXT 0x10 232 #define FXTEXT_NOSMOOTH 0x20 233 typedef struct { 234 FX_DWORD m_GlyphIndex; 235 FX_FLOAT m_OriginX, m_OriginY; 236 int m_FontCharWidth; 237 FX_BOOL m_bGlyphAdjust; 238 FX_FLOAT m_AdjustMatrix[4]; 239 FX_DWORD m_ExtGID; 240 FX_BOOL m_bFontStyle; 241 } FXTEXT_CHARPOS; 242 class CFX_RenderDevice { 243 public: 244 CFX_RenderDevice(); 245 246 virtual ~CFX_RenderDevice(); 247 248 void SetDeviceDriver(IFX_RenderDeviceDriver* pDriver); 249 250 IFX_RenderDeviceDriver* GetDeviceDriver() const { return m_pDeviceDriver; } 251 252 FX_BOOL StartRendering(); 253 254 void EndRendering(); 255 256 void SaveState(); 257 258 void RestoreState(FX_BOOL bKeepSaved = FALSE); 259 260 int GetWidth() const { return m_Width; } 261 262 int GetHeight() const { return m_Height; } 263 264 int GetDeviceClass() const { return m_DeviceClass; } 265 266 int GetBPP() const { return m_bpp; } 267 268 int GetRenderCaps() const { return m_RenderCaps; } 269 270 int GetDeviceCaps(int id) const; 271 272 CFX_Matrix GetCTM() const; 273 274 CFX_DIBitmap* GetBitmap() const { return m_pBitmap; } 275 void SetBitmap(CFX_DIBitmap* pBitmap) { m_pBitmap = pBitmap; } 276 277 FX_BOOL CreateCompatibleBitmap(CFX_DIBitmap* pDIB, 278 int width, 279 int height) const; 280 281 const FX_RECT& GetClipBox() const { return m_ClipBox; } 282 283 FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData, 284 const CFX_Matrix* pObject2Device, 285 int fill_mode); 286 287 FX_BOOL SetClip_Rect(const FX_RECT* pRect); 288 289 FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData, 290 const CFX_Matrix* pObject2Device, 291 const CFX_GraphStateData* pGraphState); 292 293 FX_BOOL DrawPath(const CFX_PathData* pPathData, 294 const CFX_Matrix* pObject2Device, 295 const CFX_GraphStateData* pGraphState, 296 FX_DWORD fill_color, 297 FX_DWORD stroke_color, 298 int fill_mode, 299 int alpha_flag = 0, 300 void* pIccTransform = NULL, 301 int blend_type = FXDIB_BLEND_NORMAL); 302 303 FX_BOOL SetPixel(int x, 304 int y, 305 FX_DWORD color, 306 int alpha_flag = 0, 307 void* pIccTransform = NULL); 308 309 FX_BOOL FillRect(const FX_RECT* pRect, 310 FX_DWORD color, 311 int alpha_flag = 0, 312 void* pIccTransform = NULL, 313 int blend_type = FXDIB_BLEND_NORMAL); 314 315 FX_BOOL DrawCosmeticLine(FX_FLOAT x1, 316 FX_FLOAT y1, 317 FX_FLOAT x2, 318 FX_FLOAT y2, 319 FX_DWORD color, 320 int fill_mode = 0, 321 int alpha_flag = 0, 322 void* pIccTransform = NULL, 323 int blend_type = FXDIB_BLEND_NORMAL); 324 325 FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, 326 int left, 327 int top, 328 void* pIccTransform = NULL); 329 330 CFX_DIBitmap* GetBackDrop(); 331 332 FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, 333 int left, 334 int top, 335 int blend_type = FXDIB_BLEND_NORMAL, 336 void* pIccTransform = NULL); 337 338 FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, 339 int left, 340 int top, 341 int dest_width, 342 int dest_height, 343 FX_DWORD flags = 0, 344 void* pIccTransform = NULL, 345 int blend_type = FXDIB_BLEND_NORMAL); 346 347 FX_BOOL SetBitMask(const CFX_DIBSource* pBitmap, 348 int left, 349 int top, 350 FX_DWORD color, 351 int alpha_flag = 0, 352 void* pIccTransform = NULL); 353 354 FX_BOOL StretchBitMask(const CFX_DIBSource* pBitmap, 355 int left, 356 int top, 357 int dest_width, 358 int dest_height, 359 FX_DWORD color, 360 FX_DWORD flags = 0, 361 int alpha_flag = 0, 362 void* pIccTransform = NULL); 363 364 FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, 365 int bitmap_alpha, 366 FX_DWORD color, 367 const CFX_Matrix* pMatrix, 368 FX_DWORD flags, 369 void*& handle, 370 int alpha_flag = 0, 371 void* pIccTransform = NULL, 372 int blend_type = FXDIB_BLEND_NORMAL); 373 374 FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause); 375 376 void CancelDIBits(void* handle); 377 378 FX_BOOL DrawNormalText(int nChars, 379 const FXTEXT_CHARPOS* pCharPos, 380 CFX_Font* pFont, 381 CFX_FontCache* pCache, 382 FX_FLOAT font_size, 383 const CFX_Matrix* pText2Device, 384 FX_DWORD fill_color, 385 FX_DWORD text_flags, 386 int alpha_flag = 0, 387 void* pIccTransform = NULL); 388 389 FX_BOOL DrawTextPath(int nChars, 390 const FXTEXT_CHARPOS* pCharPos, 391 CFX_Font* pFont, 392 CFX_FontCache* pCache, 393 FX_FLOAT font_size, 394 const CFX_Matrix* pText2User, 395 const CFX_Matrix* pUser2Device, 396 const CFX_GraphStateData* pGraphState, 397 FX_DWORD fill_color, 398 FX_DWORD stroke_color, 399 CFX_PathData* pClippingPath, 400 int nFlag = 0, 401 int alpha_flag = 0, 402 void* pIccTransform = NULL, 403 int blend_type = FXDIB_BLEND_NORMAL); 404 virtual void Begin() {} 405 virtual void End() {} 406 407 private: 408 CFX_DIBitmap* m_pBitmap; 409 410 int m_Width; 411 412 int m_Height; 413 414 int m_bpp; 415 416 int m_RenderCaps; 417 418 int m_DeviceClass; 419 420 FX_RECT m_ClipBox; 421 422 protected: 423 IFX_RenderDeviceDriver* m_pDeviceDriver; 424 425 private: 426 void InitDeviceInfo(); 427 428 void UpdateClipBox(); 429 }; 430 class CFX_FxgeDevice : public CFX_RenderDevice { 431 public: 432 CFX_FxgeDevice(); 433 ~CFX_FxgeDevice() override; 434 435 FX_BOOL Attach(CFX_DIBitmap* pBitmap, 436 int dither_bits = 0, 437 FX_BOOL bRgbByteOrder = FALSE, 438 CFX_DIBitmap* pOriDevice = NULL, 439 FX_BOOL bGroupKnockout = FALSE); 440 441 FX_BOOL Create(int width, 442 int height, 443 FXDIB_Format format, 444 int dither_bits = 0, 445 CFX_DIBitmap* pOriDevice = NULL); 446 447 protected: 448 FX_BOOL m_bOwnedBitmap; 449 }; 450 class CFX_SkiaDevice : public CFX_RenderDevice { 451 public: 452 CFX_SkiaDevice(); 453 ~CFX_SkiaDevice() override; 454 455 FX_BOOL Attach(CFX_DIBitmap* pBitmap, 456 int dither_bits = 0, 457 FX_BOOL bRgbByteOrder = FALSE, 458 CFX_DIBitmap* pOriDevice = NULL, 459 FX_BOOL bGroupKnockout = FALSE); 460 461 FX_BOOL Create(int width, 462 int height, 463 FXDIB_Format format, 464 int dither_bits = 0, 465 CFX_DIBitmap* pOriDevice = NULL); 466 467 protected: 468 FX_BOOL m_bOwnedBitmap; 469 }; 470 471 class IFX_RenderDeviceDriver { 472 public: 473 static IFX_RenderDeviceDriver* CreateFxgeDriver( 474 CFX_DIBitmap* pBitmap, 475 FX_BOOL bRgbByteOrder = FALSE, 476 CFX_DIBitmap* pOriDevice = NULL, 477 FX_BOOL bGroupKnockout = FALSE); 478 479 virtual ~IFX_RenderDeviceDriver() {} 480 virtual void Begin() {} 481 virtual void End() {} 482 483 virtual int GetDeviceCaps(int caps_id) = 0; 484 485 virtual CFX_Matrix GetCTM() const { return CFX_Matrix(); } 486 487 virtual FX_BOOL IsPSPrintDriver() { return FALSE; } 488 489 virtual FX_BOOL StartRendering() { return TRUE; } 490 491 virtual void EndRendering() {} 492 493 virtual void SaveState() = 0; 494 495 virtual void RestoreState(FX_BOOL bKeepSaved = FALSE) = 0; 496 497 virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData, 498 const CFX_Matrix* pObject2Device, 499 int fill_mode) = 0; 500 501 virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData, 502 const CFX_Matrix* pObject2Device, 503 const CFX_GraphStateData* pGraphState) { 504 return FALSE; 505 } 506 507 virtual FX_BOOL DrawPath(const CFX_PathData* pPathData, 508 const CFX_Matrix* pObject2Device, 509 const CFX_GraphStateData* pGraphState, 510 FX_DWORD fill_color, 511 FX_DWORD stroke_color, 512 int fill_mode, 513 int alpha_flag = 0, 514 void* pIccTransform = NULL, 515 int blend_type = FXDIB_BLEND_NORMAL) = 0; 516 517 virtual FX_BOOL SetPixel(int x, 518 int y, 519 FX_DWORD color, 520 int alpha_flag = 0, 521 void* pIccTransform = NULL) { 522 return FALSE; 523 } 524 525 virtual FX_BOOL FillRect(const FX_RECT* pRect, 526 FX_DWORD fill_color, 527 int alpha_flag = 0, 528 void* pIccTransform = NULL, 529 int blend_type = FXDIB_BLEND_NORMAL) { 530 return FALSE; 531 } 532 533 virtual FX_BOOL DrawCosmeticLine(FX_FLOAT x1, 534 FX_FLOAT y1, 535 FX_FLOAT x2, 536 FX_FLOAT y2, 537 FX_DWORD color, 538 int alpha_flag = 0, 539 void* pIccTransform = NULL, 540 int blend_type = FXDIB_BLEND_NORMAL) { 541 return FALSE; 542 } 543 544 virtual FX_BOOL GetClipBox(FX_RECT* pRect) = 0; 545 546 virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, 547 int left, 548 int top, 549 void* pIccTransform = NULL, 550 FX_BOOL bDEdge = FALSE) { 551 return FALSE; 552 } 553 virtual CFX_DIBitmap* GetBackDrop() { return NULL; } 554 555 virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, 556 FX_DWORD color, 557 const FX_RECT* pSrcRect, 558 int dest_left, 559 int dest_top, 560 int blend_type, 561 int alpha_flag = 0, 562 void* pIccTransform = NULL) = 0; 563 564 virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, 565 FX_DWORD color, 566 int dest_left, 567 int dest_top, 568 int dest_width, 569 int dest_height, 570 const FX_RECT* pClipRect, 571 FX_DWORD flags, 572 int alpha_flag = 0, 573 void* pIccTransform = NULL, 574 int blend_type = FXDIB_BLEND_NORMAL) = 0; 575 576 virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, 577 int bitmap_alpha, 578 FX_DWORD color, 579 const CFX_Matrix* pMatrix, 580 FX_DWORD flags, 581 void*& handle, 582 int alpha_flag = 0, 583 void* pIccTransform = NULL, 584 int blend_type = FXDIB_BLEND_NORMAL) = 0; 585 586 virtual FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause) { 587 return FALSE; 588 } 589 590 virtual void CancelDIBits(void* handle) {} 591 592 virtual FX_BOOL DrawDeviceText(int nChars, 593 const FXTEXT_CHARPOS* pCharPos, 594 CFX_Font* pFont, 595 CFX_FontCache* pCache, 596 const CFX_Matrix* pObject2Device, 597 FX_FLOAT font_size, 598 FX_DWORD color, 599 int alpha_flag = 0, 600 void* pIccTransform = NULL) { 601 return FALSE; 602 } 603 604 virtual void* GetPlatformSurface() { return NULL; } 605 606 virtual int GetDriverType() { return 0; } 607 608 virtual void ClearDriver() {} 609 }; 610 611 class IFX_PSOutput { 612 public: 613 virtual void Release() = 0; 614 virtual void OutputPS(const FX_CHAR* string, int len) = 0; 615 616 protected: 617 virtual ~IFX_PSOutput() {} 618 }; 619 620 class CPSFont; 621 class CFX_PSRenderer { 622 public: 623 CFX_PSRenderer(); 624 625 ~CFX_PSRenderer(); 626 627 void Init(IFX_PSOutput* pOutput, 628 int ps_level, 629 int width, 630 int height, 631 FX_BOOL bCmykOutput); 632 FX_BOOL StartRendering(); 633 void EndRendering(); 634 635 void SaveState(); 636 637 void RestoreState(FX_BOOL bKeepSaved = FALSE); 638 639 void SetClip_PathFill(const CFX_PathData* pPathData, 640 const CFX_Matrix* pObject2Device, 641 int fill_mode); 642 643 void SetClip_PathStroke(const CFX_PathData* pPathData, 644 const CFX_Matrix* pObject2Device, 645 const CFX_GraphStateData* pGraphState); 646 647 FX_RECT GetClipBox() { return m_ClipBox; } 648 649 FX_BOOL DrawPath(const CFX_PathData* pPathData, 650 const CFX_Matrix* pObject2Device, 651 const CFX_GraphStateData* pGraphState, 652 FX_DWORD fill_color, 653 FX_DWORD stroke_color, 654 int fill_mode, 655 int alpha_flag = 0, 656 void* pIccTransform = NULL); 657 658 FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, 659 FX_DWORD color, 660 int dest_left, 661 int dest_top, 662 int alpha_flag = 0, 663 void* pIccTransform = NULL); 664 665 FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, 666 FX_DWORD color, 667 int dest_left, 668 int dest_top, 669 int dest_width, 670 int dest_height, 671 FX_DWORD flags, 672 int alpha_flag = 0, 673 void* pIccTransform = NULL); 674 675 FX_BOOL DrawDIBits(const CFX_DIBSource* pBitmap, 676 FX_DWORD color, 677 const CFX_Matrix* pMatrix, 678 FX_DWORD flags, 679 int alpha_flag = 0, 680 void* pIccTransform = NULL); 681 682 FX_BOOL DrawText(int nChars, 683 const FXTEXT_CHARPOS* pCharPos, 684 CFX_Font* pFont, 685 CFX_FontCache* pCache, 686 const CFX_Matrix* pObject2Device, 687 FX_FLOAT font_size, 688 FX_DWORD color, 689 int alpha_flag = 0, 690 void* pIccTransform = NULL); 691 692 private: 693 IFX_PSOutput* m_pOutput; 694 695 int m_PSLevel; 696 697 CFX_GraphStateData m_CurGraphState; 698 699 FX_BOOL m_bGraphStateSet; 700 701 FX_BOOL m_bCmykOutput; 702 703 FX_BOOL m_bColorSet; 704 705 FX_DWORD m_LastColor; 706 707 FX_RECT m_ClipBox; 708 709 CFX_ArrayTemplate<CPSFont*> m_PSFontList; 710 711 CFX_ArrayTemplate<FX_RECT> m_ClipBoxStack; 712 FX_BOOL m_bInited; 713 714 void OutputPath(const CFX_PathData* pPathData, 715 const CFX_Matrix* pObject2Device); 716 717 void SetGraphState(const CFX_GraphStateData* pGraphState); 718 719 void SetColor(FX_DWORD color, int alpha_flag, void* pIccTransform); 720 721 void FindPSFontGlyph(CFX_FaceCache* pFaceCache, 722 CFX_Font* pFont, 723 const FXTEXT_CHARPOS& charpos, 724 int& ps_fontnum, 725 int& ps_glyphindex); 726 727 void WritePSBinary(const uint8_t* data, int len); 728 }; 729 730 #endif // CORE_INCLUDE_FXGE_FX_GE_H_ 731