windows-nt/Source/XPSP1/NT/shell/themes/uxtheme/borderfill.h
2020-09-26 16:20:57 +08:00

80 lines
2.8 KiB
C++

//---------------------------------------------------------------------------
// BorderFill.h - implements the drawing API for bgtype = BorderFill
//---------------------------------------------------------------------------
#pragma once
//---------------------------------------------------------------------------
#include "DrawBase.h"
//---------------------------------------------------------------------------
class CRenderObj; // forward
class CSimpleFile; // forward
//---------------------------------------------------------------------------
// Note: draw objects like CBorderFill cannot have virtual methods
// since they reside in the shared memory map file.
//---------------------------------------------------------------------------
class CBorderFill : public CDrawBase
{
public:
//---- loader methods ----
HRESULT PackProperties(CRenderObj *pRender, BOOL fNoDraw, int iPartId, int iStateId);
static BOOL KeyProperty(int iPropId);
void DumpProperties(CSimpleFile *pFile, BYTE *pbThemeData, BOOL fFullInfo);
//---- drawing/measuring methods ----
HRESULT DrawBackground(CRenderObj *pRender, HDC hdcOrig, const RECT *pRect,
OPTIONAL const DTBGOPTS *pOptions);
HRESULT GetBackgroundRegion(CRenderObj *pRender, OPTIONAL HDC hdc, const RECT *pRect,
HRGN *pRegion);
BOOL IsBackgroundPartiallyTransparent();
HRESULT HitTestBackground(CRenderObj *pRender, OPTIONAL HDC hdc,
DWORD dwHTFlags, const RECT *pRect, HRGN hrgn, POINT ptTest, OUT WORD *pwHitCode);
HRESULT GetBackgroundContentRect(CRenderObj *pRender, OPTIONAL HDC hdc,
const RECT *pBoundingRect, RECT *pContentRect);
HRESULT GetBackgroundExtent(CRenderObj *pRender, OPTIONAL HDC hdc,
const RECT *pContentRect, RECT *pExtentRect);
HRESULT GetPartSize(HDC hdc, THEMESIZE eSize, SIZE *psz);
//---- helper methods ----
void GetContentMargins(CRenderObj *pRender, OPTIONAL HDC hdc, MARGINS *pMargins);
HRESULT DrawComplexBackground(CRenderObj *pRender, HDC hdcOrig,
const RECT *pRect, BOOL fGettingRegion, BOOL fBorder, BOOL fContent,
OPTIONAL const RECT *pClipRect);
public:
//---- general ----
BOOL _fNoDraw; // this is used for bgtype=none
//---- border ----
BORDERTYPE _eBorderType;
COLORREF _crBorder;
int _iBorderSize;
int _iRoundCornerWidth;
int _iRoundCornerHeight;
//---- fill ----
FILLTYPE _eFillType;
COLORREF _crFill;
int _iDibOffset;
//---- margins ----
MARGINS _ContentMargins;
//---- gradients ----
int _iGradientPartCount;
COLORREF _crGradientColors[5];
int _iGradientRatios[5];
//---- id ----
int _iSourcePartId;
int _iSourceStateId;
};
//---------------------------------------------------------------------------