BOOL CXTPSkinManagerClass::GetThemePartSize(int iPartId, int iStateId, RECT *pRect, int eSize, SIZE* pSize)
{
    if (GetThemeEnumValue(iPartId, iStateId, TMT_BGTYPE) != BT_IMAGEFILE)
        return FALSE;

    int nImageFile = (GetThemeEnumValue(iPartId, iStateId, TMT_IMAGESELECTTYPE) != IST_NONE) &&
                     (GetThemeEnumValue(iPartId, iStateId, TMT_GLYPHTYPE, GT_NONE) == GT_NONE) ?
                     TMT_IMAGEFILE1: TMT_IMAGEFILE;

    CString strImageFile = GetThemeString(iPartId, iStateId, nImageFile);
    if (strImageFile.IsEmpty())
    {
        if (nImageFile != TMT_IMAGEFILE1)
            return FALSE;

        strImageFile = GetThemeString(iPartId, iStateId, TMT_IMAGEFILE);
        if (strImageFile.IsEmpty())
            return FALSE;

    }


    CXTPSkinImage* pImage = GetImages()->LoadFile(m_pSchema->GetResourceFile(), strImageFile);
    if (!pImage)
    {
        return FALSE;
    }

    int nImageCount = GetThemeInt(iPartId, iStateId, TMT_IMAGECOUNT, 1);
    if (nImageCount < 1)
        nImageCount = 1;

    BOOL bHorizontalImageLayout = GetThemeEnumValue(iPartId, iStateId, TMT_IMAGELAYOUT, IL_HORIZONTAL) == IL_HORIZONTAL;

    CSize sz(pImage->GetWidth(), pImage->GetHeight());
    if (bHorizontalImageLayout) sz.cx /= nImageCount;
    else sz.cy /= nImageCount;

    if (eSize == TS_TRUE)
    {
        *pSize = sz;
    }
    if (eSize == TS_DRAW)
    {
        if (GetThemeEnumValue(iPartId, iStateId, TMT_SIZINGTYPE, ST_STRETCH) == ST_TRUESIZE)
        {
            *pSize = sz;
            return TRUE;
        }

        if (!pRect)
        {
            pSize->cy = 0;
            pSize->cx = 0;
        }
        else
        {
            pSize->cy = pRect->bottom - pRect->top;
            pSize->cx = pRect->right - pRect->left;
        }

        if (GetThemeBool(iPartId, iStateId, TMT_UNIFORMSIZING, FALSE))
        {
            pSize->cx = MulDiv(pSize->cy, sz.cx, sz.cy);
        }
    }

    return TRUE;
}
Exemple #2
0
BOOL CXpTheme::GetThemeBool(int iPartId, int iStateId, int iPropId, BOOL bDefault)
{_STT();
	BOOL b = bDefault;
	if ( GetThemeBool( iPartId, iStateId, iPropId, &b ) ) return b;
	return b;
}