// 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 _FWL_WIDGETTP_H | |
#define _FWL_WIDGETTP_H | |
class IFWL_ThemeProvider; | |
class IFWL_Widget; | |
class IFDE_TextOut; | |
class IFX_Font; | |
class IFX_FontMgr; | |
#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ | |
class IFX_FontSourceEnum; | |
#endif | |
class CFWL_WidgetTP; | |
class CFWL_ArrowData; | |
class CFWL_WidgetTP { | |
public: | |
virtual FX_BOOL IsValidWidget(IFWL_Widget* pWidget); | |
virtual FX_DWORD GetThemeID(IFWL_Widget* pWidget); | |
virtual FX_DWORD SetThemeID(IFWL_Widget* pWidget, | |
FX_DWORD dwThemeID, | |
FX_BOOL bChildren = TRUE); | |
virtual FWL_ERR GetThemeMatrix(IFWL_Widget* pWidget, CFX_Matrix& matrix); | |
virtual FWL_ERR SetThemeMatrix(IFWL_Widget* pWidget, | |
const CFX_Matrix& matrix); | |
virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams); | |
virtual FX_BOOL DrawText(CFWL_ThemeText* pParams); | |
virtual void* GetCapacity(CFWL_ThemePart* pThemePart, FX_DWORD dwCapacity); | |
virtual FX_BOOL IsCustomizedLayout(IFWL_Widget* pWidget); | |
virtual FWL_ERR GetPartRect(CFWL_ThemePart* pThemePart, CFX_RectF& rtPart); | |
virtual FX_BOOL IsInPart(CFWL_ThemePart* pThemePart, | |
FX_FLOAT fx, | |
FX_FLOAT fy); | |
virtual FX_BOOL CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect); | |
virtual FWL_ERR Initialize(); | |
virtual FWL_ERR Finalize(); | |
virtual ~CFWL_WidgetTP(); | |
FWL_ERR SetFont(IFWL_Widget* pWidget, | |
const FX_WCHAR* strFont, | |
FX_FLOAT fFontSize, | |
FX_ARGB rgbFont); | |
FWL_ERR SetFont(IFWL_Widget* pWidget, | |
IFX_Font* pFont, | |
FX_FLOAT fFontSize, | |
FX_ARGB rgbFont); | |
IFX_Font* GetFont(IFWL_Widget* pWidget); | |
protected: | |
CFWL_WidgetTP(); | |
FX_ERR InitTTO(); | |
FX_ERR FinalizeTTO(); | |
void DrawEdge(CFX_Graphics* pGraphics, | |
FX_DWORD dwStyles, | |
const CFX_RectF* pRect, | |
CFX_Matrix* pMatrix = NULL); | |
void Draw3DRect(CFX_Graphics* pGraphics, | |
FWLTHEME_EDGE eType, | |
FX_FLOAT fWidth, | |
const CFX_RectF* pRect, | |
FX_ARGB cr1, | |
FX_ARGB cr2, | |
FX_ARGB cr3, | |
FX_ARGB cr4, | |
CFX_Matrix* pMatrix = NULL); | |
void Draw3DCircle(CFX_Graphics* pGraphics, | |
FWLTHEME_EDGE eType, | |
FX_FLOAT fWidth, | |
const CFX_RectF* pRect, | |
FX_ARGB cr1, | |
FX_ARGB cr2, | |
FX_ARGB cr3, | |
FX_ARGB cr4, | |
CFX_Matrix* pMatrix = NULL); | |
void DrawBorder(CFX_Graphics* pGraphics, | |
const CFX_RectF* pRect, | |
CFX_Matrix* pMatrix = NULL); | |
void FillBackground(CFX_Graphics* pGraphics, | |
const CFX_RectF* pRect, | |
CFX_Matrix* pMatrix = NULL); | |
void FillSoildRect(CFX_Graphics* pGraphics, | |
FX_ARGB fillColor, | |
const CFX_RectF* pRect, | |
CFX_Matrix* pMatrix = NULL); | |
void DrawAxialShading(CFX_Graphics* pGraphics, | |
FX_FLOAT fx1, | |
FX_FLOAT fy1, | |
FX_FLOAT fx2, | |
FX_FLOAT fy2, | |
FX_ARGB beginColor, | |
FX_ARGB endColor, | |
CFX_Path* path, | |
int32_t fillMode = FXFILL_WINDING, | |
CFX_Matrix* pMatrix = NULL); | |
void DrawAnnulusRect(CFX_Graphics* pGraphics, | |
FX_ARGB fillColor, | |
const CFX_RectF* pRect, | |
FX_FLOAT fRingWidth = 1, | |
CFX_Matrix* pMatrix = NULL); | |
void DrawAnnulusCircle(CFX_Graphics* pGraphics, | |
FX_ARGB fillColor, | |
const CFX_RectF* pRect, | |
FX_FLOAT fWidth = 1, | |
CFX_Matrix* pMatrix = NULL); | |
void DrawFocus(CFX_Graphics* pGraphics, | |
const CFX_RectF* pRect, | |
CFX_Matrix* pMatrix = NULL); | |
void DrawArrow(CFX_Graphics* pGraphics, | |
const CFX_RectF* pRect, | |
FWLTHEME_DIRECTION eDict, | |
FX_ARGB argbFill, | |
FX_BOOL bPressed, | |
CFX_Matrix* pMatrix = NULL); | |
void DrawArrow(CFX_Graphics* pGraphics, | |
const CFX_RectF* pRect, | |
FWLTHEME_DIRECTION eDict, | |
FX_ARGB argSign, | |
CFX_Matrix* pMatrix = NULL); | |
void DrawBtn(CFX_Graphics* pGraphics, | |
const CFX_RectF* pRect, | |
FWLTHEME_STATE eState, | |
CFX_Matrix* pMatrix = NULL); | |
void DrawArrowBtn(CFX_Graphics* pGraphics, | |
const CFX_RectF* pRect, | |
FWLTHEME_DIRECTION eDict, | |
FWLTHEME_STATE eState, | |
CFX_Matrix* pMatrix = NULL); | |
FWLCOLOR BlendColor(FWLCOLOR srcColor, FWLCOLOR renderColor, uint8_t scale); | |
FX_DWORD m_dwRefCount; | |
IFDE_TextOut* m_pTextOut; | |
IFX_Font* m_pFDEFont; | |
FX_FLOAT m_fValue; | |
FX_DWORD m_dwValue; | |
CFX_RectF m_rtMargin; | |
FX_DWORD m_dwThemeID; | |
CFX_Matrix _ctm; | |
}; | |
FX_BOOL FWLTHEME_Init(); | |
void FWLTHEME_Release(); | |
FX_DWORD FWL_GetThemeLayout(FX_DWORD dwThemeID); | |
FX_DWORD FWL_GetThemeColor(FX_DWORD dwThemeID); | |
FX_DWORD FWL_MakeThemeID(FX_DWORD dwLayout, FX_DWORD dwColor); | |
class CFWL_ArrowData { | |
public: | |
static CFWL_ArrowData* GetInstance(); | |
static FX_BOOL IsInstance(); | |
static void DestroyInstance(); | |
virtual ~CFWL_ArrowData(); | |
void SetColorData(FX_DWORD dwID); | |
class CColorData { | |
public: | |
FX_ARGB clrBorder[4]; | |
FX_ARGB clrStart[4]; | |
FX_ARGB clrEnd[4]; | |
FX_ARGB clrSign[4]; | |
} * m_pColorData; | |
protected: | |
CFWL_ArrowData(); | |
static CFWL_ArrowData* m_pInstance; | |
}; | |
class CFWL_FontData { | |
public: | |
CFWL_FontData(); | |
virtual ~CFWL_FontData(); | |
FX_BOOL Equal(const CFX_WideStringC& wsFontFamily, | |
FX_DWORD dwFontStyles, | |
FX_WORD wCodePage); | |
FX_BOOL LoadFont(const CFX_WideStringC& wsFontFamily, | |
FX_DWORD dwFontStyles, | |
FX_WORD wCodePage); | |
IFX_Font* GetFont() const { return m_pFont; } | |
protected: | |
CFX_WideString m_wsFamily; | |
FX_DWORD m_dwStyles; | |
FX_DWORD m_dwCodePage; | |
IFX_Font* m_pFont; | |
IFX_FontMgr* m_pFontMgr; | |
#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ | |
IFX_FontSourceEnum* m_pFontSource; | |
#endif | |
}; | |
class CFWL_FontManager { | |
public: | |
CFWL_FontManager(); | |
virtual ~CFWL_FontManager(); | |
IFX_Font* FindFont(const CFX_WideStringC& wsFontFamily, | |
FX_DWORD dwFontStyles, | |
FX_WORD dwCodePage); | |
protected: | |
CFX_PtrArray m_arrFonts; | |
}; | |
CFWL_FontManager* FWL_GetFontManager(); | |
#endif |