ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

metric.c
Go to the documentation of this file.
00001 /*
00002  * Win32 5.1 Theme metrics
00003  *
00004  * Copyright (C) 2003 Kevin Koltzau
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Lesser General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2.1 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Lesser General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Lesser General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00019  */
00020 
00021 #include "uxthemep.h"
00022 #include "wine/debug.h"
00023 
00024 WINE_DEFAULT_DEBUG_CHANNEL(uxtheme);
00025 
00026 /***********************************************************************
00027  *      GetThemeSysBool                                     (UXTHEME.@)
00028  */
00029 BOOL WINAPI GetThemeSysBool(HTHEME hTheme, int iBoolID)
00030 {
00031     HRESULT hr;
00032     PTHEME_PROPERTY tp;
00033     BOOL ret;
00034 
00035     TRACE("(%p, %d)\n", hTheme, iBoolID);
00036     SetLastError(0);
00037     if(hTheme) {
00038         if((tp = MSSTYLES_FindMetric(TMT_BOOL, iBoolID))) {
00039             hr = MSSTYLES_GetPropertyBool(tp, &ret);
00040             if(SUCCEEDED(hr))
00041                 return ret;
00042             else
00043                 SetLastError(hr);
00044        }
00045     }
00046     if(iBoolID == TMT_FLATMENUS) {
00047         if(SystemParametersInfoW(SPI_GETFLATMENU, 0, &ret, 0))
00048             return ret;
00049     }
00050     else {
00051         FIXME("Unknown bool id: %d\n", iBoolID);
00052         SetLastError(STG_E_INVALIDPARAMETER);
00053     }
00054     return FALSE;
00055 }
00056 
00057 /***********************************************************************
00058  *      GetThemeSysColor                                    (UXTHEME.@)
00059  */
00060 COLORREF WINAPI GetThemeSysColor(HTHEME hTheme, int iColorID)
00061 {
00062     HRESULT hr;
00063     PTHEME_PROPERTY tp;
00064 
00065     TRACE("(%p, %d)\n", hTheme, iColorID);
00066     SetLastError(0);
00067     if(hTheme) {
00068         if((tp = MSSTYLES_FindMetric(TMT_COLOR, iColorID))) {
00069             COLORREF color;
00070             hr = MSSTYLES_GetPropertyColor(tp, &color);
00071             if(SUCCEEDED(hr))
00072                 return color;
00073             else
00074                 SetLastError(hr);
00075        }
00076     }
00077     return GetSysColor(iColorID);
00078 }
00079 
00080 /***********************************************************************
00081  *      GetThemeSysColorBrush                               (UXTHEME.@)
00082  */
00083 HBRUSH WINAPI GetThemeSysColorBrush(HTHEME hTheme, int iColorID)
00084 {
00085     TRACE("(%p, %d)\n", hTheme, iColorID);
00086     return CreateSolidBrush(GetThemeSysColor(hTheme, iColorID));
00087 }
00088 
00089 /***********************************************************************
00090  *      GetThemeSysFont                                     (UXTHEME.@)
00091  */
00092 HRESULT WINAPI GetThemeSysFont(HTHEME hTheme, int iFontID, LOGFONTW *plf)
00093 {
00094     HRESULT hr = S_OK;
00095     PTHEME_PROPERTY tp;
00096 
00097     TRACE("(%p, %d)\n", hTheme, iFontID);
00098     if(hTheme) {
00099         if((tp = MSSTYLES_FindMetric(TMT_FONT, iFontID))) {
00100             HDC hdc = GetDC(NULL);
00101             hr = MSSTYLES_GetPropertyFont(tp, hdc, plf);
00102             ReleaseDC(NULL, hdc);
00103             if(SUCCEEDED(hr))
00104                 return S_OK;
00105        }
00106     }
00107     if(iFontID == TMT_ICONTITLEFONT) {
00108         if(!SystemParametersInfoW(SPI_GETICONTITLELOGFONT, sizeof(LOGFONTW), plf, 0))
00109             return HRESULT_FROM_WIN32(GetLastError());
00110     }
00111     else {
00112         NONCLIENTMETRICSW ncm;
00113         LOGFONTW *font = NULL;
00114         ncm.cbSize = sizeof(NONCLIENTMETRICSW);
00115         if(!SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &ncm, 0))
00116             return HRESULT_FROM_WIN32(GetLastError());
00117         switch(iFontID) {
00118             case TMT_CAPTIONFONT: font = &ncm.lfCaptionFont; break;
00119             case TMT_SMALLCAPTIONFONT: font = &ncm.lfSmCaptionFont; break;
00120             case TMT_MENUFONT: font = &ncm.lfMenuFont; break;
00121             case TMT_STATUSFONT: font = &ncm.lfStatusFont; break;
00122             case TMT_MSGBOXFONT: font = &ncm.lfMessageFont; break;
00123             default: FIXME("Unknown FontID: %d\n", iFontID); break;
00124         }
00125         if(font) *plf = *font;
00126         else     hr = STG_E_INVALIDPARAMETER;
00127     }
00128     return hr;
00129 }
00130 
00131 /***********************************************************************
00132  *      GetThemeSysInt                                      (UXTHEME.@)
00133  */
00134 HRESULT WINAPI GetThemeSysInt(HTHEME hTheme, int iIntID, int *piValue)
00135 {
00136     PTHEME_PROPERTY tp;
00137 
00138     TRACE("(%p, %d)\n", hTheme, iIntID);
00139     if(!hTheme)
00140         return E_HANDLE;
00141     if(iIntID < TMT_FIRSTINT || iIntID > TMT_LASTINT) {
00142         WARN("Unknown IntID: %d\n", iIntID);
00143         return STG_E_INVALIDPARAMETER;
00144     }
00145     if((tp = MSSTYLES_FindMetric(TMT_INT, iIntID)))
00146         return MSSTYLES_GetPropertyInt(tp, piValue);
00147     return E_PROP_ID_UNSUPPORTED;
00148 }
00149 
00150 /***********************************************************************
00151  *      GetThemeSysSize                                     (UXTHEME.@)
00152  */
00153 int WINAPI GetThemeSysSize(HTHEME hTheme, int iSizeID)
00154 {
00155     PTHEME_PROPERTY tp;
00156     int i, id = -1;
00157     int metricMap[] = {
00158         SM_CXVSCROLL, TMT_SCROLLBARWIDTH,
00159         SM_CYHSCROLL, TMT_SCROLLBARHEIGHT,
00160         SM_CXSIZE, TMT_CAPTIONBARWIDTH,
00161         SM_CYSIZE, TMT_CAPTIONBARHEIGHT,
00162         SM_CXFRAME, TMT_SIZINGBORDERWIDTH,
00163         SM_CYFRAME, TMT_SIZINGBORDERWIDTH, /* There is no TMT_SIZINGBORDERHEIGHT, but this works in windows.. */
00164         SM_CXSMSIZE, TMT_SMCAPTIONBARWIDTH,
00165         SM_CYSMSIZE, TMT_SMCAPTIONBARHEIGHT,
00166         SM_CXMENUSIZE, TMT_MENUBARWIDTH,
00167         SM_CYMENUSIZE, TMT_MENUBARHEIGHT
00168     };
00169 
00170     if(hTheme) {
00171         for(i=0; i<sizeof(metricMap)/sizeof(metricMap[0]); i+=2) {
00172             if(metricMap[i] == iSizeID) {
00173                 id = metricMap[i+1];
00174                 break;
00175             }
00176         }
00177         SetLastError(0);
00178         if(id != -1) {
00179             if((tp = MSSTYLES_FindMetric(TMT_SIZE, id))) {
00180                 if(SUCCEEDED(MSSTYLES_GetPropertyInt(tp, &i))) {
00181                     return i;
00182                 }
00183             }
00184             TRACE("Size %d not found in theme, using system metric\n", iSizeID);
00185         }
00186         else {
00187             SetLastError(STG_E_INVALIDPARAMETER);
00188             return 0;
00189         }
00190     }
00191     return GetSystemMetrics(iSizeID);
00192 }
00193 
00194 /***********************************************************************
00195  *      GetThemeSysString                                   (UXTHEME.@)
00196  */
00197 HRESULT WINAPI GetThemeSysString(HTHEME hTheme, int iStringID,
00198                                  LPWSTR pszStringBuff, int cchMaxStringChars)
00199 {
00200     PTHEME_PROPERTY tp;
00201 
00202     TRACE("(%p, %d)\n", hTheme, iStringID);
00203     if(!hTheme)
00204         return E_HANDLE;
00205     if(iStringID < TMT_FIRSTSTRING || iStringID > TMT_LASTSTRING) {
00206         WARN("Unknown StringID: %d\n", iStringID);
00207         return STG_E_INVALIDPARAMETER;
00208     }
00209     if((tp = MSSTYLES_FindMetric(TMT_STRING, iStringID)))
00210         return MSSTYLES_GetPropertyString(tp, pszStringBuff, cchMaxStringChars);
00211     return E_PROP_ID_UNSUPPORTED;
00212 }

Generated on Thu May 24 2012 04:27:19 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.