You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.1 KiB
110 lines
3.1 KiB
// 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 |
|
|
|
#ifndef XFA_FXGRAPHICS_CFX_GRAPHICS_H_ |
|
#define XFA_FXGRAPHICS_CFX_GRAPHICS_H_ |
|
|
|
#include <memory> |
|
#include <vector> |
|
|
|
#include "core/fxcrt/fx_system.h" |
|
#include "core/fxge/cfx_fxgedevice.h" |
|
#include "core/fxge/cfx_graphstatedata.h" |
|
#include "core/fxge/cfx_renderdevice.h" |
|
#include "core/fxge/fx_dib.h" |
|
#include "core/fxge/fx_font.h" |
|
|
|
class CFX_Color; |
|
class CFX_Path; |
|
|
|
using FX_FillMode = int32_t; |
|
|
|
enum FX_DashStyle { |
|
FX_DASHSTYLE_Solid = 0, |
|
FX_DASHSTYLE_Dash = 1, |
|
FX_DASHSTYLE_Dot = 2, |
|
FX_DASHSTYLE_DashDot = 3, |
|
FX_DASHSTYLE_DashDotDot = 4 |
|
}; |
|
|
|
enum class FX_HatchStyle { |
|
Horizontal = 0, |
|
Vertical = 1, |
|
ForwardDiagonal = 2, |
|
BackwardDiagonal = 3, |
|
Cross = 4, |
|
DiagonalCross = 5 |
|
}; |
|
|
|
class CFX_RenderDevice; |
|
|
|
class CFX_Graphics { |
|
public: |
|
explicit CFX_Graphics(CFX_RenderDevice* renderDevice); |
|
~CFX_Graphics(); |
|
|
|
void SaveGraphState(); |
|
void RestoreGraphState(); |
|
|
|
CFX_RectF GetClipRect() const; |
|
CFX_Matrix* GetMatrix(); |
|
CFX_RenderDevice* GetRenderDevice(); |
|
|
|
void SetLineCap(CFX_GraphStateData::LineCap lineCap); |
|
void SetLineDash(FX_FLOAT dashPhase, FX_FLOAT* dashArray, int32_t dashCount); |
|
void SetLineDash(FX_DashStyle dashStyle); |
|
void SetLineWidth(FX_FLOAT lineWidth, bool isActOnDash = false); |
|
void SetStrokeColor(CFX_Color* color); |
|
void SetFillColor(CFX_Color* color); |
|
void SetClipRect(const CFX_RectF& rect); |
|
void StrokePath(CFX_Path* path, CFX_Matrix* matrix = nullptr); |
|
void FillPath(CFX_Path* path, |
|
FX_FillMode fillMode = FXFILL_WINDING, |
|
CFX_Matrix* matrix = nullptr); |
|
void StretchImage(CFX_DIBSource* source, |
|
const CFX_RectF& rect, |
|
CFX_Matrix* matrix = nullptr); |
|
void ConcatMatrix(const CFX_Matrix* matrix); |
|
|
|
protected: |
|
int32_t m_type; |
|
|
|
private: |
|
struct TInfo { |
|
TInfo(); |
|
explicit TInfo(const TInfo& info); |
|
TInfo& operator=(const TInfo& other); |
|
|
|
CFX_GraphStateData graphState; |
|
CFX_Matrix CTM; |
|
bool isActOnDash; |
|
CFX_Color* strokeColor; |
|
CFX_Color* fillColor; |
|
} m_info; |
|
|
|
void RenderDeviceSetLineDash(FX_DashStyle dashStyle); |
|
void RenderDeviceStrokePath(CFX_Path* path, CFX_Matrix* matrix); |
|
void RenderDeviceFillPath(CFX_Path* path, |
|
FX_FillMode fillMode, |
|
CFX_Matrix* matrix); |
|
void RenderDeviceStretchImage(CFX_DIBSource* source, |
|
const CFX_RectF& rect, |
|
CFX_Matrix* matrix); |
|
|
|
void FillPathWithPattern(CFX_Path* path, |
|
FX_FillMode fillMode, |
|
CFX_Matrix* matrix); |
|
void FillPathWithShading(CFX_Path* path, |
|
FX_FillMode fillMode, |
|
CFX_Matrix* matrix); |
|
|
|
void SetDIBitsWithMatrix(CFX_DIBSource* source, CFX_Matrix* matrix); |
|
|
|
CFX_RenderDevice* m_renderDevice; |
|
std::vector<std::unique_ptr<TInfo>> m_infoStack; |
|
}; |
|
|
|
#endif // XFA_FXGRAPHICS_CFX_GRAPHICS_H_
|
|
|