/*********************************************************************** * GetThemeInt (UXTHEME.@) */ HRESULT WINAPI GetThemeInt(HTHEME hTheme, int iPartId, int iStateId, int iPropId, int *piVal) { PTHEME_PROPERTY tp; TRACE("(%d, %d, %d)\n", iPartId, iStateId, iPropId); if(!hTheme) return E_HANDLE; if(!(tp = MSSTYLES_FindProperty(hTheme, iPartId, iStateId, TMT_INT, iPropId))) return E_PROP_ID_UNSUPPORTED; return MSSTYLES_GetPropertyInt(tp, piVal); }
/*********************************************************************** * GetThemeSysInt (UXTHEME.@) */ HRESULT WINAPI GetThemeSysInt(HTHEME hTheme, int iIntID, int *piValue) { PTHEME_PROPERTY tp; TRACE("(%p, %d)\n", hTheme, iIntID); if(!hTheme) return E_HANDLE; if(iIntID < TMT_FIRSTINT || iIntID > TMT_LASTINT) { WARN("Unknown IntID: %d\n", iIntID); return STG_E_INVALIDPARAMETER; } if((tp = MSSTYLES_FindMetric(TMT_INT, iIntID))) return MSSTYLES_GetPropertyInt(tp, piValue); return E_PROP_ID_UNSUPPORTED; }
/*********************************************************************** * GetThemeSysSize (UXTHEME.@) */ int WINAPI GetThemeSysSize(HTHEME hTheme, int iSizeID) { PTHEME_PROPERTY tp; int i, id = -1; int metricMap[] = { SM_CXVSCROLL, TMT_SCROLLBARWIDTH, SM_CYHSCROLL, TMT_SCROLLBARHEIGHT, SM_CXSIZE, TMT_CAPTIONBARWIDTH, SM_CYSIZE, TMT_CAPTIONBARHEIGHT, SM_CXFRAME, TMT_SIZINGBORDERWIDTH, SM_CYFRAME, TMT_SIZINGBORDERWIDTH, /* There is no TMT_SIZINGBORDERHEIGHT, but this works in windows.. */ SM_CXSMSIZE, TMT_SMCAPTIONBARWIDTH, SM_CYSMSIZE, TMT_SMCAPTIONBARHEIGHT, SM_CXMENUSIZE, TMT_MENUBARWIDTH, SM_CYMENUSIZE, TMT_MENUBARHEIGHT }; if(hTheme) { PTHEME_CLASS ptc = (PTHEME_CLASS) hTheme; for(i=0; i<sizeof(metricMap)/sizeof(metricMap[0]); i+=2) { if(metricMap[i] == iSizeID) { id = metricMap[i+1]; break; } } SetLastError(0); if(id != -1) { if((tp = MSSTYLES_FindMetric(ptc->tf, TMT_SIZE, id))) { if(SUCCEEDED(MSSTYLES_GetPropertyInt(tp, &i))) { return i; } } TRACE("Size %d not found in theme, using system metric\n", iSizeID); } else { SetLastError(STG_E_INVALIDPARAMETER); return 0; } } // TODO: Check if this is correct // In windows for SM_CXFRAME this function returns what seems to be the non client metric iBorderWidth if (iSizeID == SM_CXFRAME) return GetSystemMetrics(SM_CXFRAME) - GetSystemMetrics(SM_CXDLGFRAME); return GetSystemMetrics(iSizeID); }
/*********************************************************************** * GetThemeSysSize (UXTHEME.@) */ int WINAPI GetThemeSysSize(HTHEME hTheme, int iSizeID) { PTHEME_PROPERTY tp; int i, id = -1; int metricMap[] = { SM_CXVSCROLL, TMT_SCROLLBARWIDTH, SM_CYHSCROLL, TMT_SCROLLBARHEIGHT, SM_CXSIZE, TMT_CAPTIONBARWIDTH, SM_CYSIZE, TMT_CAPTIONBARHEIGHT, SM_CXFRAME, TMT_SIZINGBORDERWIDTH, SM_CYFRAME, TMT_SIZINGBORDERWIDTH, /* There is no TMT_SIZINGBORDERHEIGHT, but this works in windows.. */ SM_CXSMSIZE, TMT_SMCAPTIONBARWIDTH, SM_CYSMSIZE, TMT_SMCAPTIONBARHEIGHT, SM_CXMENUSIZE, TMT_MENUBARWIDTH, SM_CYMENUSIZE, TMT_MENUBARHEIGHT }; if(hTheme) { for(i=0; i<sizeof(metricMap)/sizeof(metricMap[0]); i+=2) { if(metricMap[i] == iSizeID) { id = metricMap[i+1]; break; } } SetLastError(0); if(id != -1) { if((tp = MSSTYLES_FindMetric(TMT_SIZE, id))) { if(SUCCEEDED(MSSTYLES_GetPropertyInt(tp, &i))) { return i; } } TRACE("Size %d not found in theme, using system metric\n", iSizeID); } else { SetLastError(STG_E_INVALIDPARAMETER); return 0; } } return GetSystemMetrics(iSizeID); }
/*********************************************************************** * 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; }