/*********************************************************************** * MSSTYLES_FindProperty * * Locate a property in a class. Part and state IDs will be used as a * preference, but may be ignored in the attempt to locate the property. * Will scan the entire chain of overrides for this class. */ PTHEME_PROPERTY MSSTYLES_FindProperty(PTHEME_CLASS tc, int iPartId, int iStateId, int iPropertyPrimitive, int iPropertyId) { PTHEME_CLASS next = tc; PTHEME_PARTSTATE ps; PTHEME_PROPERTY tp; TRACE("(%p, %d, %d, %d)\n", tc, iPartId, iStateId, iPropertyId); /* Try and find an exact match on part & state */ while(next && (ps = MSSTYLES_FindPartState(next, iPartId, iStateId, &next))) { if((tp = MSSTYLES_PSFindProperty(ps, iPropertyPrimitive, iPropertyId))) { return tp; } } /* If that fails, and we didn't already try it, search for just part */ if(iStateId != 0) iStateId = 0; /* As a last ditch attempt..go for just class */ else if(iPartId != 0) iPartId = 0; else return NULL; if((tp = MSSTYLES_FindProperty(tc, iPartId, iStateId, iPropertyPrimitive, iPropertyId))) return tp; return NULL; }
/*********************************************************************** * GetThemeBool (UXTHEME.@) */ HRESULT WINAPI GetThemeBool(HTHEME hTheme, int iPartId, int iStateId, int iPropId, BOOL *pfVal) { PTHEME_PROPERTY tp; TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId); if(!hTheme) return E_HANDLE; if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_BOOL, iPropId))) return E_PROP_ID_UNSUPPORTED; return MSSTYLES_GetPropertyBool(tp, pfVal); }
/*********************************************************************** * GetThemeColor (UXTHEME.@) */ HRESULT WINAPI GetThemeColor(HTHEME hTheme, int iPartId, int iStateId, int iPropId, COLORREF *pColor) { PTHEME_PROPERTY tp; TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId); if(!hTheme) return E_HANDLE; if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_COLOR, iPropId))) return E_PROP_ID_UNSUPPORTED; return MSSTYLES_GetPropertyColor(tp, pColor); }
/*********************************************************************** * GetThemeString (UXTHEME.@) */ HRESULT WINAPI GetThemeString(HTHEME hTheme, int iPartId, int iStateId, int iPropId, LPWSTR pszBuff, int cchMaxBuffChars) { PTHEME_PROPERTY tp; TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId); if(!hTheme) return E_HANDLE; if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_FILENAME, iPropId))) return E_PROP_ID_UNSUPPORTED; return MSSTYLES_GetPropertyString(tp, pszBuff, cchMaxBuffChars); }
/*********************************************************************** * GetThemeRect (UXTHEME.@) */ HRESULT WINAPI GetThemeRect(HTHEME hTheme, int iPartId, int iStateId, int iPropId, RECT *pRect) { PTHEME_PROPERTY tp; TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId); if(!hTheme) return E_HANDLE; if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_RECT, iPropId))) return E_PROP_ID_UNSUPPORTED; return MSSTYLES_GetPropertyRect(tp, pRect); }
/*********************************************************************** * GetThemePosition (UXTHEME.@) */ HRESULT WINAPI GetThemePosition(HTHEME hTheme, int iPartId, int iStateId, int iPropId, POINT *pPoint) { PTHEME_PROPERTY tp; TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId); if(!hTheme) return E_HANDLE; if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_POSITION, iPropId))) return E_PROP_ID_UNSUPPORTED; return MSSTYLES_GetPropertyPosition(tp, pPoint); }
/*********************************************************************** * GetThemeFont (UXTHEME.@) */ HRESULT WINAPI GetThemeFont(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, int iPropId, LOGFONTW *pFont) { PTHEME_PROPERTY tp; TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId); if(!hTheme) return E_HANDLE; if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_FONT, iPropId))) return E_PROP_ID_UNSUPPORTED; return MSSTYLES_GetPropertyFont(tp, hdc, pFont); }
/*********************************************************************** * GetThemeMargins (UXTHEME.@) */ HRESULT WINAPI GetThemeMargins(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, int iPropId, RECT *prc, MARGINS *pMargins) { PTHEME_PROPERTY tp; TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId); memset (pMargins, 0, sizeof (MARGINS)); if(!hTheme) return E_HANDLE; if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_MARGINS, iPropId))) return E_PROP_ID_UNSUPPORTED; return MSSTYLES_GetPropertyMargins(tp, prc, pMargins); }
/*********************************************************************** * GetThemePropertyOrigin (UXTHEME.@) */ HRESULT WINAPI GetThemePropertyOrigin(HTHEME hTheme, int iPartId, int iStateId, int iPropId, PROPERTYORIGIN *pOrigin) { PTHEME_PROPERTY tp; TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId); if(!hTheme) return E_HANDLE; if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, 0, iPropId))) { *pOrigin = PO_NOTFOUND; return S_OK; } *pOrigin = tp->origin; return S_OK; }
/*********************************************************************** * GetThemeEnumValue (UXTHEME.@) */ HRESULT WINAPI GetThemeEnumValue(HTHEME hTheme, int iPartId, int iStateId, int iPropId, int *piVal) { HRESULT hr; WCHAR val[60]; PTHEME_PROPERTY tp; TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId); if(!hTheme) return E_HANDLE; if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_ENUM, iPropId))) return E_PROP_ID_UNSUPPORTED; hr = MSSTYLES_GetPropertyString(tp, val, sizeof(val)/sizeof(val[0])); if(FAILED(hr)) return hr; if(!MSSTYLES_LookupEnum(val, iPropId, piVal)) return E_PROP_ID_UNSUPPORTED; return S_OK; }
/*********************************************************************** * GetThemeMetric (UXTHEME.@) */ HRESULT WINAPI GetThemeMetric(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, int iPropId, int *piVal) { PTHEME_PROPERTY tp; WCHAR val[60]; HRESULT hr; TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId); if(!hTheme) return E_HANDLE; if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, 0, iPropId))) return E_PROP_ID_UNSUPPORTED; switch(tp->iPrimitiveType) { case TMT_POSITION: /* Only the X coord is retrieved */ case TMT_MARGINS: /* Only the cxLeftWidth member is retrieved */ case TMT_INTLIST: /* Only the first int is retrieved */ case TMT_SIZE: case TMT_INT: return MSSTYLES_GetPropertyInt(tp, piVal); case TMT_BOOL: return MSSTYLES_GetPropertyBool(tp, piVal); case TMT_COLOR: return MSSTYLES_GetPropertyColor(tp, (COLORREF*)piVal); case TMT_ENUM: hr = MSSTYLES_GetPropertyString(tp, val, sizeof(val)/sizeof(val[0])); if(FAILED(hr)) return hr; if(!MSSTYLES_LookupEnum(val, iPropId, piVal)) return E_PROP_ID_UNSUPPORTED; return S_OK; case TMT_FILENAME: /* Windows does return a value for this, but its value doesn't make sense */ FIXME("Filename\n"); break; } return E_PROP_ID_UNSUPPORTED; }