// Copyright 2014 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 _PWL_UTILS_H_ | |
#define _PWL_UTILS_H_ | |
template<class T> T PWL_MIN (const T & i, const T & j) { return ((i < j) ? i : j); } | |
template<class T> T PWL_MAX (const T & i, const T & j) { return ((i > j) ? i : j); } | |
#define PWL_PDF2WIN(color) (FX_BYTE(color*255)) | |
#define PWL_WIN2PDF(color) ((FX_FLOAT)((FX_FLOAT)color/255.0f)) | |
#define PWL_MAKEDWORD(low,high) ((FX_DWORD)((FX_WORD)(low) | (FX_DWORD)(((FX_WORD)(high))<<16))) | |
#define PWL_GETLOWWORD(dword) ((FX_WORD)(dword)) | |
#define PWL_GETHIGHWORD(dword) ((FX_WORD)(dword>>16)) | |
#define PWL_ICONTYPE_CHECKMARK 0 | |
#define PWL_ICONTYPE_CIRCLE 1 | |
#define PWL_ICONTYPE_COMMENT 2 | |
#define PWL_ICONTYPE_CROSS 3 | |
#define PWL_ICONTYPE_HELP 4 | |
#define PWL_ICONTYPE_INSERTTEXT 5 | |
#define PWL_ICONTYPE_KEY 6 | |
#define PWL_ICONTYPE_NEWPARAGRAPH 7 | |
#define PWL_ICONTYPE_TEXTNOTE 8 | |
#define PWL_ICONTYPE_PARAGRAPH 9 | |
#define PWL_ICONTYPE_RIGHTARROW 10 | |
#define PWL_ICONTYPE_RIGHTPOINTER 11 | |
#define PWL_ICONTYPE_STAR 12 | |
#define PWL_ICONTYPE_UPARROW 13 | |
#define PWL_ICONTYPE_UPLEFTARROW 14 | |
#define PWL_ICONTYPE_GRAPH 15 | |
#define PWL_ICONTYPE_PAPERCLIP 16 | |
#define PWL_ICONTYPE_ATTACHMENT 17 | |
#define PWL_ICONTYPE_TAG 18 | |
#define PWL_ICONTYPE_FOXIT 19 | |
#define PWL_ICONTYPE_UNKNOWN -1 | |
//checkbox & radiobutton style | |
#define PCS_CHECK 0 | |
#define PCS_CIRCLE 1 | |
#define PCS_CROSS 2 | |
#define PCS_DIAMOND 3 | |
#define PCS_SQUARE 4 | |
#define PCS_STAR 5 | |
#define PWL_PI 3.14159265358979f | |
#define PWL_BEZIER 0.5522847498308f | |
//pushbutton layout style | |
#define PPBL_LABEL 0 | |
#define PPBL_ICON 1 | |
#define PPBL_ICONTOPLABELBOTTOM 2 | |
#define PPBL_LABELTOPICONBOTTOM 3 | |
#define PPBL_ICONLEFTLABELRIGHT 4 | |
#define PPBL_LABELLEFTICONRIGHT 5 | |
#define PPBL_LABELOVERICON 6 | |
class CPWL_Point : public CPDF_Point | |
{ | |
public: | |
CPWL_Point() : CPDF_Point(0.0f,0.0f){} | |
CPWL_Point(FX_FLOAT fx, FX_FLOAT fy) : CPDF_Point(fx,fy) {} | |
CPWL_Point(const CPWL_Point& point) : CPDF_Point(point.x, point.y) {} | |
}; | |
enum PWL_PATHDATA_TYPE | |
{ | |
PWLPT_MOVETO, | |
PWLPT_LINETO, | |
PWLPT_BEZIERTO, | |
PWLPT_UNKNOWN | |
}; | |
enum PWL_PATH_TYPE | |
{ | |
PWLPT_PATHDATA, | |
PWLPT_STREAM | |
}; | |
class CPWL_PathData | |
{ | |
public: | |
CPWL_PathData() : point(), type(PWLPT_UNKNOWN){} | |
CPWL_PathData(const CPWL_Point& pt, PWL_PATHDATA_TYPE tp) : point(pt), type(tp) {} | |
CPWL_Point point; | |
PWL_PATHDATA_TYPE type; | |
}; | |
class IPWL_SpellCheck; | |
class PWL_CLASS CPWL_Utils | |
{ | |
public: | |
static CPDF_Rect InflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize); | |
static CPDF_Rect DeflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize); | |
static FX_BOOL IntersectRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2); | |
static FX_BOOL ContainsRect(const CPDF_Rect& rcParent, const CPDF_Rect& rcChild); | |
static CPDF_Rect ScaleRect(const CPDF_Rect& rcRect,FX_FLOAT fScale); | |
static CPVT_WordRange OverlapWordRange(const CPVT_WordRange& wr1, const CPVT_WordRange& wr2); | |
static CPDF_Rect GetCenterSquare(const CPDF_Rect & rect); | |
static CPWL_Color SubstractColor(const CPWL_Color & sColor,FX_FLOAT fColorSub); | |
static CPWL_Color DevideColor(const CPWL_Color & sColor,FX_FLOAT fColorDevide); | |
static CPDF_Rect MaxRect(const CPDF_Rect & rect1,const CPDF_Rect & rect2); | |
static CPDF_Rect OffsetRect(const CPDF_Rect & rect,FX_FLOAT x,FX_FLOAT y); | |
static CPDF_Point OffsetPoint(const CPDF_Point & point,FX_FLOAT x,FX_FLOAT y); | |
static FX_COLORREF PWLColorToFXColor(const CPWL_Color& color, FX_INT32 nTransparancy = 255); | |
static FX_BOOL IsBlackOrWhite(const CPWL_Color& color); | |
static CPWL_Color GetReverseColor(const CPWL_Color& color); | |
static CFX_ByteString GetColorAppStream(const CPWL_Color & color,const FX_BOOL & bFillOrStroke = TRUE); | |
static CFX_ByteString GetBorderAppStream(const CPDF_Rect & rect, FX_FLOAT fWidth, | |
const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom, | |
FX_INT32 nStyle, const CPWL_Dash & dash); | |
static CFX_ByteString GetCircleBorderAppStream(const CPDF_Rect & rect, FX_FLOAT fWidth, | |
const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom, | |
FX_INT32 nStyle, const CPWL_Dash & dash); | |
static CFX_ByteString GetRectFillAppStream(const CPDF_Rect & rect,const CPWL_Color & color); | |
static CFX_ByteString GetCircleFillAppStream(const CPDF_Rect & rect,const CPWL_Color & color); | |
static CFX_ByteString GetPushButtonAppStream(const CPDF_Rect & rcBBox, | |
IFX_Edit_FontMap * pFontMap, | |
CPDF_Stream * pIconStream, | |
CPDF_IconFit & IconFit, | |
const CFX_WideString & sLabel, | |
const CPWL_Color & crText, | |
FX_FLOAT fFontSize, | |
FX_INT32 nLayOut); | |
static CFX_ByteString GetCheckBoxAppStream(const CPDF_Rect & rcBBox, | |
FX_INT32 nStyle, | |
const CPWL_Color & crText); | |
static CFX_ByteString GetRadioButtonAppStream(const CPDF_Rect & rcBBox, | |
FX_INT32 nStyle, | |
const CPWL_Color & crText); | |
static CFX_ByteString GetEditAppStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, const CPVT_WordRange * pRange = NULL, | |
FX_BOOL bContinuous = TRUE, FX_WORD SubWord = 0); | |
static CFX_ByteString GetEditSelAppStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, | |
const CPVT_WordRange * pRange = NULL); | |
static CFX_ByteString GetSpellCheckAppStream(IFX_Edit* pEdit, IPWL_SpellCheck* pSpellCheck, | |
const CPDF_Point & ptOffset, | |
const CPVT_WordRange * pRange = NULL); | |
static CFX_ByteString GetTextAppStream(const CPDF_Rect & rcBBox,IFX_Edit_FontMap * pFontMap, | |
const CFX_WideString & sText, FX_INT32 nAlignmentH, FX_INT32 nAlignmentV, | |
FX_FLOAT fFontSize, FX_BOOL bMultiLine, FX_BOOL bAutoReturn, const CPWL_Color & crText); | |
static CFX_ByteString GetDropButtonAppStream(const CPDF_Rect & rcBBox); | |
static void DrawFillRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect, | |
const CPWL_Color & color, FX_INT32 nTransparancy); | |
static void DrawFillRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, | |
const CPDF_Rect & rect,const FX_COLORREF & color); | |
static void DrawStrokeRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect, | |
const FX_COLORREF & color, FX_FLOAT fWidth); | |
static void DrawStrokeLine(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, | |
const CPDF_Point & ptMoveTo, const CPDF_Point & ptLineTo, const FX_COLORREF & color, FX_FLOAT fWidth); | |
static void DrawBorder(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, | |
const CPDF_Rect & rect, FX_FLOAT fWidth, | |
const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom, | |
FX_INT32 nStyle, const CPWL_Dash & dash, FX_INT32 nTransparancy); | |
static void DrawFillArea(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, | |
const CPDF_Point* pPts, FX_INT32 nCount, const FX_COLORREF& color); | |
static void DrawShadow(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, | |
FX_BOOL bVertical, FX_BOOL bHorizontal, CPDF_Rect rect, | |
FX_INT32 nTransparancy, FX_INT32 nStartGray, FX_INT32 nEndGray); | |
static void DrawEditSpellCheck(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, | |
const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, | |
IPWL_SpellCheck* pSpellCheck); | |
public: | |
static void ConvertCMYK2RGB(FX_FLOAT dC,FX_FLOAT dM,FX_FLOAT dY,FX_FLOAT dK,FX_FLOAT &dR,FX_FLOAT &dG,FX_FLOAT &dB); | |
static void ConvertRGB2CMYK(FX_FLOAT dR,FX_FLOAT dG,FX_FLOAT dB,FX_FLOAT &dC,FX_FLOAT &dM,FX_FLOAT &dY,FX_FLOAT &dK); | |
static void ConvertRGB2GRAY(FX_FLOAT dR,FX_FLOAT dG,FX_FLOAT dB,FX_FLOAT &dGray); | |
static void ConvertGRAY2RGB(FX_FLOAT dGray,FX_FLOAT &dR,FX_FLOAT &dG,FX_FLOAT &dB); | |
static void ConvertCMYK2GRAY(FX_FLOAT dC,FX_FLOAT dM,FX_FLOAT dY,FX_FLOAT dK,FX_FLOAT &dGray); | |
static void ConvertGRAY2CMYK(FX_FLOAT dGray,FX_FLOAT &dC,FX_FLOAT &dM,FX_FLOAT &dY,FX_FLOAT &dK); | |
static void PWLColorToARGB(const CPWL_Color& color, FX_INT32& alpha, FX_FLOAT& red, FX_FLOAT& green, FX_FLOAT& blue); | |
public: | |
static CFX_ByteString GetIconAppStream(FX_INT32 nType, const CPDF_Rect& rect, const CPWL_Color& crFill, | |
const CPWL_Color& crStroke = PWL_DEFAULT_BLACKCOLOR); | |
static void DrawIconAppStream(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, | |
FX_INT32 nType, const CPDF_Rect & rect, const CPWL_Color& crFill, | |
const CPWL_Color& crStroke, const FX_INT32 nTransparancy); | |
private: | |
static CFX_ByteString GetAppStreamFromArray(const CPWL_PathData* pPathData, FX_INT32 nCount); | |
static void GetPathDataFromArray(CFX_PathData& path, const CPWL_PathData* pPathData, FX_INT32 nCount); | |
static CFX_ByteString GetAppStream_Check(const CPDF_Rect & rcBBox, const CPWL_Color & crText); | |
static CFX_ByteString GetAppStream_Circle(const CPDF_Rect & rcBBox, const CPWL_Color & crText); | |
static CFX_ByteString GetAppStream_Cross(const CPDF_Rect & rcBBox, const CPWL_Color & crText); | |
static CFX_ByteString GetAppStream_Diamond(const CPDF_Rect & rcBBox, const CPWL_Color & crText); | |
static CFX_ByteString GetAppStream_Square(const CPDF_Rect & rcBBox, const CPWL_Color & crText); | |
static CFX_ByteString GetAppStream_Star(const CPDF_Rect & rcBBox, const CPWL_Color & crText); | |
static CFX_ByteString GetAP_Check(const CPDF_Rect & crBBox); | |
static CFX_ByteString GetAP_Circle(const CPDF_Rect & crBBox); | |
static CFX_ByteString GetAP_Cross(const CPDF_Rect & crBBox); | |
static CFX_ByteString GetAP_Diamond(const CPDF_Rect & crBBox); | |
static CFX_ByteString GetAP_Square(const CPDF_Rect & crBBox); | |
static CFX_ByteString GetAP_Star(const CPDF_Rect & crBBox); | |
static CFX_ByteString GetAP_HalfCircle(const CPDF_Rect & crBBox,FX_FLOAT fRotate); | |
static void GetGraphics_Checkmark(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Circle(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Comment(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Cross(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Help(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_InsertText(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Key(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_NewParagraph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_TextNote(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Paragraph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_RightArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_RightPointer(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Star(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_UpArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_UpLeftArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Graph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Paperclip(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Attachment(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Tag(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
static void GetGraphics_Foxit(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type); | |
}; | |
#endif // !defined(AFX_PWL_UTILS_H__D32812AD_A875_4E08_9D3C_0A57020987C6__INCLUDED_) | |