You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1648 lines
59 KiB
C++

2 years ago
// XTPOffice2003Theme.cpp : implementation of the CXTPOffice2003Theme class.
//
// This file is a part of the XTREME COMMANDBARS MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Common/XTPVC80Helpers.h"
#include "Common/XTPImageManager.h"
#include "Common/XTPDrawHelpers.h"
#include "Common/XTPColorManager.h"
#include "Common/XTPHookManager.h"
#include "Common/XTPSystemHelpers.h"
#include "Common/XTPWinThemeWrapper.h"
#include "XTPCommandBarsDefines.h"
#include "XTPCommandBar.h"
#include "XTPCommandBars.h"
#include "XTPDockBar.h"
#include "XTPToolBar.h"
#include "XTPDialogBar.h"
#include "XTPControls.h"
#include "XTPControl.h"
#include "XTPControlProgress.h"
#include "XTPMessageBar.h"
#include "XTPScrollBase.h"
#include "XTPStatusBar.h"
#include "XTPPaintManager.h"
#include "XTPOffice2003Theme.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//////////////////////////////////////////////////////////////////////
// CXTPOffice2003Theme
IMPLEMENT_DYNAMIC(CXTPOffice2003Theme, CXTPOfficeTheme)
CXTPOffice2003Theme::CXTPOffice2003Theme()
{
m_iconsInfo.bUseFadedIcons = FALSE;
m_iconsInfo.bIconsWithShadow = FALSE;
m_grcLunaChecked.SetStandardValue(RGB(255, 213, 140), RGB(255, 173, 85));
m_grcLunaPushed.SetStandardValue(RGB(254, 142, 75), RGB(255, 207, 139));
m_grcLunaSelected.SetStandardValue(RGB(255, 242, 200), RGB(255, 212, 151));
m_bThemedStatusBar = TRUE;
m_bPlainSeparators = FALSE;
m_bFlatGripper = FALSE;
m_nToolbarSeparatorMargin = 4;
}
CXTPOffice2003Theme::~CXTPOffice2003Theme()
{
}
void CXTPOffice2003Theme::RefreshMetrics()
{
CXTPOfficeTheme::RefreshMetrics();
HWND hWnd = AfxGetMainWnd() ? AfxGetMainWnd()->GetSafeHwnd() : 0;
m_themeStatusBar->OpenThemeData(hWnd, L"STATUS");
m_clrMenuExpandedGripper.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(COLOR_WINDOW), GetXtremeColor(XPCOLOR_MENUBAR_EXPANDED), 550), GetXtremeColor(XPCOLOR_MENUBAR_EXPANDED));
m_clrCommandBar.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(COLOR_3DFACE), GetXtremeColor(COLOR_WINDOW), 0xcd), GetXtremeColor(COLOR_3DFACE));
m_clrDockBar.SetStandardValue(GetXtremeColor(COLOR_3DFACE), XTPColorManager()->LightColor(GetXtremeColor(COLOR_3DFACE), GetXtremeColor(COLOR_WINDOW), 0xcd));
m_clrTearOffGripper.SetStandardValue(GetXtremeColor(XPCOLOR_TOOLBAR_FACE));
m_clrToolbarShadow.SetStandardValue(GetXtremeColor(XPCOLOR_TOOLBAR_FACE));
m_clrFloatingGripper.SetStandardValue(GetXtremeColor(COLOR_3DSHADOW));
m_clrPopupControl.SetStandardValue(GetXtremeColor(XPCOLOR_MENUBAR_FACE),
XTPColorManager()->LightColor(GetXtremeColor(COLOR_WINDOW), GetXtremeColor(COLOR_3DFACE), 550));
m_clrToolbarExpand.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(XPCOLOR_3DFACE), GetXtremeColor(COLOR_3DSHADOW), 51), GetXtremeColor(COLOR_3DSHADOW));
m_bLunaTheme = FALSE;
m_clrMenuExpand.SetStandardValue(GetXtremeColor(XPCOLOR_MENUBAR_FACE),
XTPColorManager()->LightColor(GetXtremeColor(COLOR_WINDOW), GetXtremeColor(COLOR_3DFACE), 550));
m_clrStatusPane.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(COLOR_3DFACE), GetXtremeColor(COLOR_WINDOW), 70));
m_arrColor[XPCOLOR_SPLITTER_FACE].SetStandardValue(XTPColorManager()->grcDockBar.clrDark);
if (XTPColorManager()->IsLowResolution())
{
m_clrCommandBar.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
m_clrDockBar.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
m_clrPopupControl.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
m_clrToolbarExpand.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
}
switch (GetCurrentSystemTheme())
{
case xtpSystemThemeBlue:
case xtpSystemThemeRoyale:
case xtpSystemThemeAero:
{
m_clrDockBar.SetStandardValue(RGB(158, 190, 245), RGB(196, 218, 250));
m_clrToolbarShadow.SetStandardValue(RGB(59, 97, 156));
m_clrCommandBar.SetStandardValue(RGB(221, 236, 254), RGB(129, 169, 226), 0.75f);
m_clrFloatingGripper.SetStandardValue(RGB(42, 102, 201));
m_clrPopupControl.SetStandardValue(RGB(227, 239, 255), RGB(147, 181, 231));
m_clrToolbarExpand.SetStandardValue(RGB(117, 166, 241), RGB(0, 53, 145), 0.75f);
m_clrMenuExpandedGripper.SetStandardValue(RGB(203, 221, 246), RGB(121, 161, 220));
m_clrMenuExpand.SetStandardValue(0xFEEFE3, 0xE2A981);
m_clrStatusPane.SetStandardValue(RGB(211, 211, 211));
m_pShadowManager->SetShadowColor(RGB(0x16, 0x1E, 0x36));
m_clrTearOffGripper.SetStandardValue(RGB(169, 199, 240));
m_clrDisabledIcon.SetStandardValue(RGB(233, 236, 242), RGB(97, 122, 172));
m_arrColor[XPCOLOR_EDITCTRLBORDER].SetStandardValue(RGB(203, 225, 252));
m_arrColor[XPCOLOR_3DFACE].SetStandardValue(RGB(216, 231, 252));
m_arrColor[XPCOLOR_3DSHADOW].SetStandardValue(RGB(158, 190, 245));
m_arrColor[COLOR_APPWORKSPACE].SetStandardValue(RGB(144, 153, 174));
m_arrColor[XPCOLOR_LABEL].SetStandardValue(RGB(189, 211, 247));
INT nElements[] =
{
XPCOLOR_TOOLBAR_GRIPPER, XPCOLOR_SEPARATOR, XPCOLOR_DISABLED, XPCOLOR_MENUBAR_FACE, XPCOLOR_MENUBAR_BORDER, XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_TOOLBAR_FACE, XPCOLOR_PUSHED_TEXT
};
COLORREF clrValues[] =
{
RGB(39, 65, 118), RGB(106, 140, 203), RGB(109, 150, 208), RGB(246, 246, 246), RGB(0, 45, 150), RGB(255, 238, 194), RGB(0, 0, 128), RGB(0, 0, 128), RGB(0, 0, 128), RGB(254, 128, 62), RGB(255, 192, 111), RGB(196, 219, 249), 0
};
SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
m_bLunaTheme = TRUE;
}
break;
case xtpSystemThemeOlive:
{
m_clrDockBar.SetStandardValue(RGB(217, 217, 167), RGB(242, 241, 228));
m_clrCommandBar.SetStandardValue(RGB(244, 247, 222), RGB(183, 198, 145), 0.3f);
m_clrToolbarShadow.SetStandardValue(RGB(96, 128, 88));
m_clrFloatingGripper.SetStandardValue(RGB(116, 134, 94));
m_clrPopupControl.SetStandardValue(RGB(236, 240, 213), RGB(194, 206, 159));
m_clrToolbarExpand.SetStandardValue(RGB(176, 194, 140), RGB(96, 119, 107), 0.3f);
m_clrMenuExpandedGripper.SetStandardValue(RGB(230, 230, 209), RGB(164, 180, 120), 0.3f);
m_clrMenuExpand.SetStandardValue(0xD5F0EC, 0x93C6B8);
m_clrStatusPane.SetStandardValue(RGB(211, 211, 211));
m_pShadowManager->SetShadowColor(RGB(0x1F, 0x22, 0x19));
m_clrDisabledIcon.SetStandardValue(RGB(243, 244, 240), RGB(131, 144, 113));
m_clrTearOffGripper.SetStandardValue(RGB(197, 212, 159));
m_arrColor[XPCOLOR_EDITCTRLBORDER].SetStandardValue(RGB(216, 227, 182));
m_arrColor[XPCOLOR_3DFACE].SetStandardValue(RGB(226, 231, 191));
m_arrColor[XPCOLOR_3DSHADOW].SetStandardValue(RGB(171, 192, 138));
m_arrColor[COLOR_APPWORKSPACE].SetStandardValue(RGB(151, 160, 123));
m_arrColor[XPCOLOR_LABEL].SetStandardValue(RGB(222, 227, 189));
INT nElements[] =
{
XPCOLOR_TOOLBAR_GRIPPER, XPCOLOR_SEPARATOR, XPCOLOR_DISABLED, XPCOLOR_MENUBAR_FACE, XPCOLOR_MENUBAR_BORDER, XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_TOOLBAR_FACE, XPCOLOR_PUSHED_TEXT
};
COLORREF clrValues[] =
{
RGB(81, 94, 51), RGB(96, 128, 88), RGB(159, 174, 122), RGB(244, 244, 238), RGB(117, 141, 94), RGB(255, 238, 194), RGB(63, 93, 56), RGB(63, 93, 56), RGB(63, 93, 56), RGB(254, 128, 62), RGB(255, 192, 111), RGB(209, 222, 173), 0
};
SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
m_bLunaTheme = TRUE;
}
break;
case xtpSystemThemeSilver:
{
m_clrDockBar.SetStandardValue(RGB(215, 215, 229), RGB(243, 243, 247));
m_clrToolbarShadow.SetStandardValue(RGB(124, 124, 148));
m_clrCommandBar.SetStandardValue(RGB(249, 249, 255), RGB(156, 155, 183), 0.75f);
m_clrFloatingGripper.SetStandardValue(RGB(122, 121, 153));
m_clrPopupControl.SetStandardValue(RGB(233, 231, 241), RGB(186, 185, 205));
m_clrToolbarExpand.SetStandardValue(RGB(179, 178, 200), RGB(118, 116, 146), 0.75f);
m_clrMenuExpandedGripper.SetStandardValue(RGB(215, 215, 226), RGB(133, 131, 162));
m_clrMenuExpand.SetStandardValue(0xF1E8E8, 0xC5AEB0);
m_clrStatusPane.SetStandardValue(RGB(236, 234, 218));
m_pShadowManager->SetShadowColor(RGB(0x24, 0x20, 0x29));
m_clrDisabledIcon.SetStandardValue(RGB(247, 245, 249), RGB(122, 121, 153));
m_clrTearOffGripper.SetStandardValue(RGB(192, 192, 211));
m_arrColor[XPCOLOR_EDITCTRLBORDER].SetStandardValue(RGB(214, 211, 231));
m_arrColor[XPCOLOR_3DFACE].SetStandardValue(RGB(223, 223, 234));
m_arrColor[XPCOLOR_3DSHADOW].SetStandardValue(RGB(177, 176, 195));
m_arrColor[COLOR_APPWORKSPACE].SetStandardValue(RGB(155, 154, 179));
m_arrColor[XPCOLOR_LABEL].SetStandardValue(RGB(214, 215, 231));
INT nElements[] =
{
XPCOLOR_TOOLBAR_GRIPPER, XPCOLOR_SEPARATOR, XPCOLOR_DISABLED, XPCOLOR_MENUBAR_FACE, XPCOLOR_MENUBAR_BORDER, XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_TOOLBAR_FACE, XPCOLOR_PUSHED_TEXT
};
COLORREF clrValues[] =
{
RGB(84, 84, 117), RGB(110, 109, 143), RGB(168, 167, 190), RGB(253, 250, 255), RGB(124, 124, 148), RGB(255, 238, 194), RGB(75, 75, 111), RGB(75, 75, 111), RGB(75, 75, 111), RGB(254, 128, 62), RGB(255, 192, 111), RGB(219, 218, 228), 0
};
SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
m_bLunaTheme = TRUE;
}
break;
}
if (m_bLunaTheme)
{
m_arrColor[XPCOLOR_HIGHLIGHT_DISABLED_BORDER].SetStandardValue(RGB(141, 141, 141));
m_arrColor[XPCOLOR_TOOLBAR_GRAYTEXT].SetStandardValue(RGB(141, 141, 141));
m_arrColor[XPCOLOR_MENUBAR_GRAYTEXT].SetStandardValue(RGB(141, 141, 141));
m_arrColor[XPCOLOR_FLOATBAR_BORDER].SetStandardValue(m_clrFloatingGripper);
}
m_clrMenuGripper.SetStandardValue(m_clrCommandBar);
CreateGradientCircle();
}
void CXTPOffice2003Theme::FillDockBar(CDC* pDC, CXTPDockBar* pBar)
{
if (pBar->GetPosition() == xtpBarTop && pBar->GetCommandBars()->IsDwmEnabled())
{
pDC->FillSolidRect(CXTPClientRect(pBar), 0);
return;
}
if (((CWnd*)pBar)->GetStyle() & CBRS_RIGHT)
pDC->FillSolidRect(CXTPClientRect((CWnd*)pBar), m_clrDockBar.clrDark);
else
{
CXTPClientRect rc((CWnd*)pBar);
CRect rcFill(rc.left, rc.top, max(rc.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2), rc.bottom);
XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
}
}
void CXTPOffice2003Theme::FillMessageBar(CDC* pDC, CXTPMessageBar* pBar)
{
CXTPClientRect rc((CWnd*)pBar);
CRect rcFill(rc.left, rc.top, max(rc.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2), rc.bottom);
XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
CRect rcMessage = pBar->GetMessageRect();
pDC->Draw3dRect(rcMessage, m_clrToolbarShadow, m_clrToolbarShadow);
rcMessage.DeflateRect(1, 1);
pDC->FillSolidRect(rcMessage, GetXtremeColor(COLOR_INFOBK));
}
void CXTPOffice2003Theme::ExcludeCorners(CDC* pDC, CRect rc)
{
pDC->ExcludeClipRect(rc.left, rc.top, rc.left + 1, rc.top + 1);
pDC->ExcludeClipRect(rc.right - 1, rc.top, rc.right, rc.top + 1);
pDC->ExcludeClipRect(rc.left, rc.bottom - 1, rc.left + 1, rc.bottom);
pDC->ExcludeClipRect(rc.right - 1, rc.bottom - 1, rc.right, rc.bottom);
}
void CXTPOffice2003Theme::DrawPopupBarGripper(CDC* pDC, int x, int y, int cx, int cy, BOOL bExpanded)
{
XTPDrawHelpers()->GradientFill(pDC, CRect(CPoint(x, y), CSize(cx, cy)),
bExpanded ? m_clrMenuExpandedGripper : m_clrMenuGripper, TRUE);
}
BOOL CXTPOffice2003Theme::HasFloatingBarGradientEntry(CXTPCommandBar* pBar)
{
return !IsFlatToolBar(pBar) && ((pBar->GetFlags() & xtpFlagAlignAny) != 0);
}
void CXTPOffice2003Theme::FillCommandBarEntry(CDC* pDC, CXTPCommandBar* pBar)
{
CXTPClientRect rc((CWnd*)pBar);
if (pBar->GetPosition() == xtpBarPopup)
{
Rectangle(pDC, rc, XPCOLOR_MENUBAR_BORDER, XPCOLOR_MENUBAR_FACE);
FillIntersectRect(pDC, (CXTPPopupBar*)pBar, GetXtremeColor(XPCOLOR_MENUBAR_FACE));
}
else if (IsFlatToolBar(pBar))
{
CRect rcFill(rc.left, rc.top, max(rc.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2), rc.bottom);
if (IsDockingPosition(pBar->GetPosition()))
{
CWnd* pParent = pBar->GetParent();
if (pParent)
{
CRect rcClient;
pParent->GetWindowRect(rcClient);
pBar->ScreenToClient(rcClient);
rcFill = CRect(rcClient.left, rc.top, rcClient.left + max(rcClient.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2), rc.bottom);
}
}
XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
if (pBar->GetPosition() == xtpBarFloating)
{
COLORREF clr = GetXtremeColor(XPCOLOR_FLOATBAR_BORDER);
pDC->Draw3dRect(rc, clr, clr);
rc.DeflateRect(1, 1);
pDC->Draw3dRect(rc, clr, clr);
pDC->SetPixel(2, 2, clr);
pDC->SetPixel(rc.right - 2, 2, clr);
pDC->SetPixel(2, rc.bottom - 2, clr);
pDC->SetPixel(rc.right - 2, rc.bottom - 2, clr);
}
}
else if (pBar->GetPosition() == xtpBarTop || pBar->GetPosition() == xtpBarBottom)
{
COLORREF clr3DFace = GetXtremeColor(COLOR_3DFACE);
pDC->FillSolidRect(rc, clr3DFace);
CWnd* pWnd = pBar->GetParent();
if (pWnd)
{
CXTPWindowRect rcFill((CWnd*)pWnd);
pBar->ScreenToClient(rcFill);
rcFill.right = rcFill.left + max(rcFill.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2);
XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
pDC->ExcludeClipRect(rc.left, rc.top, rc.left + 3, rc.bottom);
ExcludeCorners(pDC, CRect(rc.left + 3, rc.top + 1, rc.right, rc.bottom - 1));
}
CRect rcFill = rc;
rcFill.top += 1;
int nFirst = pBar->GetControls()->GetNext(-1, +1, FALSE, TRUE);
if (nFirst != -1)
{
CRect rcRow = pBar->GetControls()->GetAt(nFirst)->GetRowRect();
rcFill.bottom = rcRow.bottom + 1;
}
XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrCommandBar, FALSE);
pDC->FillSolidRect(rcFill.left, rcFill.bottom, rcFill.Width(), rc.Height() - rcFill.Height() - 2, m_clrCommandBar.clrDark);
pDC->FillSolidRect(rc.left + 5, rc.bottom - 1, rc.Width() - 7, 1, m_clrToolbarShadow);
pDC->SelectClipRgn(0);
}
else if (pBar->GetPosition() == xtpBarLeft || pBar->GetPosition() == xtpBarRight)
{
COLORREF clr3DFace = GetXtremeColor(COLOR_3DFACE);
pDC->FillSolidRect(rc, clr3DFace);
CWnd* pWnd = pBar->GetParent();
if (pWnd)
{
if (pWnd->GetStyle() & CBRS_RIGHT)
pDC->FillSolidRect(rc, m_clrDockBar.clrDark);
else
{
CXTPWindowRect rcFill((CWnd*)pWnd);
pBar->ScreenToClient(rcFill);
rcFill.right = rcFill.left + max(rcFill.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2);
XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
}
pDC->ExcludeClipRect(rc.left, rc.top, rc.right, rc.top + 3);
ExcludeCorners(pDC, CRect(rc.left + 1, rc.top + 3, rc.right - 1, rc.bottom));
}
CRect rcFill = rc;
rcFill.left += 1;
int nFirst = pBar->GetControls()->GetNext(-1, +1, FALSE, TRUE);
if (nFirst != -1)
{
CRect rcRow = pBar->GetControls()->GetAt(nFirst)->GetRowRect();
rcFill.right = rcRow.right + 1;
}
XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrCommandBar, TRUE);
pDC->FillSolidRect(rc.right - 1, rc.top + 5 , 1, rc.Height() - 7, m_clrToolbarShadow);
pDC->SelectClipRgn(0);
}
else if (pBar->GetPosition() == xtpBarFloating && HasFloatingBarGradientEntry(pBar))
{
pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_TOOLBAR_FACE));
COLORREF clrBorder = GetXtremeColor(XPCOLOR_FLOATBAR_BORDER);
pDC->Draw3dRect(rc, clrBorder, clrBorder);
rc.DeflateRect(1, 1);
pDC->Draw3dRect(rc, clrBorder, clrBorder);
CXTPFontDC font(pDC, GetSmCaptionFont());
CSize sz = pDC->GetTextExtent(_T(" "), 1);
CRect rcFill(rc.left + 2, rc.top + 2 + max(15, sz.cy), rc.right - 2, rc.bottom - 2);
for (int i = 0; i < pBar->GetControlCount(); i++)
{
CXTPControl* pControl = pBar->GetControl(i);
if (pControl->GetWrap() && pControl->IsVisible() && pControl->GetRect().top > rcFill.top)
{
CRect rcRow(rcFill.left, rcFill.top, rcFill.right, pControl->GetRowRect().top);
XTPDrawHelpers()->GradientFill(pDC, rcRow, m_clrCommandBar, FALSE);
rcFill.top = rcRow.bottom;
}
}
XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrCommandBar, FALSE);
pDC->SetPixel(2, 2, clrBorder);
pDC->SetPixel(rc.right - 2, 2, clrBorder);
pDC->SetPixel(2, rc.bottom - 2, clrBorder);
pDC->SetPixel(rc.right - 2, rc.bottom - 2, clrBorder);
}
else
{
CXTPOfficeTheme::FillCommandBarEntry(pDC, pBar);
}
}
CSize CXTPOffice2003Theme::DrawCommandBarSeparator(CDC* pDC, CXTPCommandBar* pBar, CXTPControl* pControl, BOOL bDraw)
{
BOOL bSkipWrapSeparators = pBar->GetPosition() == xtpBarFloating && pBar->GetType() != xtpBarTypePopup;
if (!bDraw && bSkipWrapSeparators)
{
return CSize(6, 0);
}
if (!bDraw)
{
return CXTPOfficeTheme::DrawCommandBarSeparator(pDC, pBar, pControl, bDraw);
}
CRect rc;
pBar->GetClientRect(&rc);
CRect rcControl = pControl->GetRect();
CRect rcRow = pControl->GetRowRect();
if (pBar->GetPosition() == xtpBarRight || pBar->GetPosition() == xtpBarLeft)
{
if (!pControl->GetWrap())
{
Line(pDC, rcRow.left + m_nToolbarSeparatorMargin, rcControl.top - 4, rcRow.right - m_nToolbarSeparatorMargin, rcControl.top - 4, XPCOLOR_SEPARATOR);
if (!m_bPlainSeparators) Line(pDC, rcRow.left + m_nToolbarSeparatorMargin + 1, rcControl.top - 3, rcRow.right - m_nToolbarSeparatorMargin + 1, rcControl.top - 3, COLOR_3DHIGHLIGHT);
}
else
{
Line(pDC, rcRow.right + 2, rcRow.top + m_nToolbarSeparatorMargin, rcRow.right + 2, rcRow.bottom, XPCOLOR_SEPARATOR);
Line(pDC, rcRow.right + 3, rcRow.top + m_nToolbarSeparatorMargin + 1, rcRow.right + 3, rcRow.bottom, COLOR_3DHIGHLIGHT);
}
}
else if (pBar->GetPosition() == xtpBarTop || pBar->GetPosition() == xtpBarBottom || bSkipWrapSeparators)
{
if (!pControl->GetWrap())
{
Line(pDC, rcControl.left - 4, rcRow.top + m_nToolbarSeparatorMargin, rcControl.left - 4, rcRow.bottom - m_nToolbarSeparatorMargin, XPCOLOR_SEPARATOR);
if (!m_bPlainSeparators) Line(pDC, rcControl.left - 3, rcRow.top + m_nToolbarSeparatorMargin + 1, rcControl.left - 3, rcRow.bottom - m_nToolbarSeparatorMargin + 1, COLOR_3DHIGHLIGHT);
}
else if (!bSkipWrapSeparators)
{
Line(pDC, rcRow.left + m_nToolbarSeparatorMargin, rcRow.top - 4, rcRow.right, rcRow.top - 4, XPCOLOR_SEPARATOR);
Line(pDC, rcRow.left + m_nToolbarSeparatorMargin + 1, rcRow.top - 3, rcRow.right, rcRow.top - 3, COLOR_3DHIGHLIGHT);
}
}
else return CXTPOfficeTheme::DrawCommandBarSeparator(pDC, pBar, pControl, bDraw);
return 0;
}
CSize CXTPOffice2003Theme::DrawDialogBarGripper(CDC* pDC, CXTPDialogBar* pBar, BOOL bDraw)
{
CSize sz(8, max(25, m_nTextHeight + 6));
if (pDC && bDraw)
{
CRect rcGripper;
pBar->GetClientRect(&rcGripper);
rcGripper.DeflateRect(3, 3);
rcGripper.bottom = rcGripper.top + sz.cy;
if (pBar->IsActive())
{
if (m_bLunaTheme)
XTPDrawHelpers()->GradientFill(pDC, rcGripper, m_grcLunaChecked, FALSE);
else
pDC->FillSolidRect(rcGripper, GetXtremeColor(XPCOLOR_HIGHLIGHT_CHECKED));
}
else
{
XTPDrawHelpers()->GradientFill(pDC, rcGripper, m_clrCommandBar, FALSE);
}
for (int y = rcGripper.top + 4; y < rcGripper.bottom - 5; y += 4)
{
pDC->FillSolidRect(CRect(4 + 2, y + 1, 6 + 2, y + 3), GetXtremeColor(COLOR_WINDOW));
pDC->FillSolidRect(CRect(3 + 2, y, 5 + 2, y + 2), GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
}
}
return sz;
}
CSize CXTPOffice2003Theme::DrawCommandBarGripper(CDC* pDC, CXTPCommandBar* pBar, BOOL bDraw)
{
if (pBar->IsDialogBar())
return DrawDialogBarGripper(pDC, (CXTPDialogBar*)pBar, bDraw);
CRect rc;
pBar->GetClientRect(&rc);
if (pBar->GetPosition() == xtpBarPopup && pBar->GetType() == xtpBarTypePopup)
{
return CXTPOfficeTheme::DrawCommandBarGripper(pDC, pBar, bDraw);
}
else if (pBar->GetPosition() == xtpBarFloating)
{
return CXTPOfficeTheme::DrawCommandBarGripper(pDC, pBar, bDraw);
}
else if (pBar->GetPosition() == xtpBarRight || pBar->GetPosition() == xtpBarLeft)
{
if (!pDC || !bDraw) return CSize(0, 8 + 1);
for (int x = 5; x < rc.Width() - 7; x += 4)
{
if (!m_bFlatGripper) pDC->FillSolidRect(CRect(x + 1, 4 + 3, x + 3, 6 + 3), GetXtremeColor(COLOR_WINDOW));
pDC->FillSolidRect(CRect(x, 3 + 3, x + 2, 5 + 3), GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
}
}
else if (pBar->GetPosition() == xtpBarTop || pBar->GetPosition() == xtpBarBottom)
{
if (!pDC || !bDraw) return CSize(6, 0);
for (int y = 5; y < rc.Height() - 7; y += 4)
{
if (!m_bFlatGripper) pDC->FillSolidRect(CRect(7, y + 1, 9, y + 3), GetXtremeColor(COLOR_WINDOW));
pDC->FillSolidRect(CRect(6, y, 8, y + 2), GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
}
}
return 0;
}
void CXTPOffice2003Theme::RectangleEx(CDC* pDC, CRect rc, int nColorBorder, BOOL bHoriz, CXTPPaintManagerColorGradient& color)
{
GradientFill(pDC, rc, color.clrLight, color.clrDark, bHoriz);
Draw3dRect(pDC, rc, nColorBorder, nColorBorder);
}
void CXTPOffice2003Theme::DrawRectangle(CDC* pDC, CRect rc, BOOL bSelected, BOOL bPressed, BOOL bEnabled, BOOL bChecked, BOOL bPopuped, XTPBarType barType, XTPBarPosition barPosition /*= xtpBarPopup*/)
{
if (bPopuped)
{
XTPDrawHelpers()->GradientFill(pDC, rc, m_clrPopupControl, FALSE);
Draw3dRect(pDC, rc, XPCOLOR_MENUBAR_BORDER, XPCOLOR_MENUBAR_BORDER);
}
else if (m_bLunaTheme && barType != xtpBarTypePopup && (IsDockingPosition(barPosition) || (barPosition == xtpBarFloating)))
{
BOOL bHoriz = IsVerticalPosition(barPosition);
if (!bEnabled)
{
if (IsKeyboardSelected(bSelected))
RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, bHoriz, bChecked ? m_grcLunaPushed : m_grcLunaSelected);
else if (bChecked)
RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_DISABLED_BORDER, bHoriz, m_grcLunaChecked);
return;
}
else if (bChecked == 2 && !bSelected && !bPressed)
{
Rectangle(pDC, rc, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_3DFACE);
}
else if (bChecked && !bSelected && !bPressed) RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, bHoriz, m_grcLunaChecked);
else if (bChecked && bSelected && !bPressed) RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, bHoriz, m_grcLunaPushed);
else if (IsKeyboardSelected(bPressed) || (bSelected && bPressed)) RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, bHoriz, m_grcLunaPushed);
else if (bSelected || bPressed) RectangleEx(pDC, rc, XPCOLOR_HIGHLIGHT_BORDER, bHoriz, m_grcLunaSelected);
}
else CXTPOfficeTheme::DrawRectangle(pDC, rc, bSelected, bPressed, bEnabled, bChecked, bPopuped, barType, barPosition);
}
void CXTPOffice2003Theme::DrawExpandSymbols(CDC* pDC, BOOL bVertical, CRect rc, BOOL bHiddenExists, COLORREF clr)
{
if (!bVertical)
{
CPoint pt = CPoint(rc.left + rc.Width()/2, rc.bottom - 6);
HorizontalLine(pDC, pt.x - 2, pt.y - 4, pt.x + 3, clr);
Triangle(pDC, CPoint(pt.x -2 , pt.y - 1), CPoint(pt.x + 2, pt.y - 1), CPoint (pt.x, pt.y + 1), clr);
if (bHiddenExists)
{
Triangle(pDC, CPoint(rc.left + 3, rc.top + 5), CPoint(rc.left + 4, rc.top + 6), CPoint(rc.left + 3, rc.top + 7), clr);
Triangle(pDC, CPoint(rc.left + 7, rc.top + 5), CPoint(rc.left + 8, rc.top + 6), CPoint(rc.left + 7, rc.top + 7), clr);
}
}
else
{
CPoint pt = CPoint(rc.right - 5, rc.CenterPoint().y);
VerticalLine(pDC, pt.x - 5, pt.y - 2, pt.y + 3, clr);
Triangle(pDC, CPoint(pt.x , pt.y), CPoint(pt.x - 2, pt.y - 2), CPoint (pt.x - 2, pt.y + 2), clr);
if (bHiddenExists)
{
Triangle(pDC, CPoint(rc.left + 5, rc.top + 3), CPoint(rc.left + 6, rc.top + 4), CPoint(rc.left + 7, rc.top + 3), clr);
Triangle(pDC, CPoint(rc.left + 5, rc.top + 7), CPoint(rc.left + 6, rc.top + 8), CPoint(rc.left + 7, rc.top + 7), clr);
}
}
}
CSize CXTPOffice2003Theme::DrawSpecialControl(CDC* pDC, XTPSpecialControl controlType, CXTPControl* pButton, CXTPCommandBar* pBar, BOOL bDraw, LPVOID lpParam)
{
if (controlType == xtpButtonExpandToolbar)
{
if (!bDraw)
{
CSize szBar = *(CSize*)lpParam;
if (!IsVerticalPosition(pBar->GetPosition()))
pButton->SetRect(CRect(szBar.cx - (11 + 1), 1, szBar.cx - 0, szBar.cy - 0));
else
pButton->SetRect(CRect(0, szBar.cy - (11 + 1), szBar.cx - 0, szBar.cy - 0));
}
else
{
CRect rc = pButton->GetRect();
if (!IsVerticalPosition(pBar->GetPosition()))
{
pDC->ExcludeClipRect(rc.right - 1, rc.top, rc.right, rc.top + 1);
pDC->ExcludeClipRect(rc.right - 1, rc.bottom - 1, rc.right, rc.bottom);
pDC->ExcludeClipRect(rc.left, rc.top + 1, rc.left + 1, rc.bottom - 1);
}
else
{
pDC->ExcludeClipRect(rc.left, rc.bottom - 1, rc.left + 1, rc.bottom);
pDC->ExcludeClipRect(rc.right - 1, rc.bottom - 1, rc.right, rc.bottom);
pDC->ExcludeClipRect(rc.left + 1, rc.top, rc.right - 1, rc.top + 1);
}
if (pButton->GetPopuped())
{
if (m_bLunaTheme) GradientFill(pDC, rc, m_grcLunaPushed.clrLight, m_grcLunaPushed.clrDark, IsVerticalPosition(pBar->GetPosition()));
else pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_HIGHLIGHT_CHECKED));
}
else if (pButton->GetSelected())
{
if (m_bLunaTheme) GradientFill(pDC, rc, m_grcLunaSelected.clrLight, m_grcLunaSelected.clrDark, IsVerticalPosition(pBar->GetPosition()));
else pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_HIGHLIGHT));
}
else
{
XTPDrawHelpers()->GradientFill(pDC, rc, m_clrToolbarExpand, IsVerticalPosition(pBar->GetPosition()));
}
COLORREF clrText = GetXtremeColor(pButton->GetPopuped() ? XPCOLOR_TOOLBAR_TEXT: pButton->GetSelected() ? XPCOLOR_HIGHLIGHT_TEXT : XPCOLOR_TOOLBAR_TEXT);
BOOL bHiddenExists = *(BOOL*)lpParam;
DrawExpandSymbols(pDC, IsVerticalPosition(pBar->GetPosition()), CRect(CPoint(rc.left + 1, rc.top + 1), rc.Size()) , bHiddenExists, GetXtremeColor(COLOR_BTNHIGHLIGHT));
DrawExpandSymbols(pDC, IsVerticalPosition(pBar->GetPosition()), rc, bHiddenExists, clrText);
pDC->SelectClipRgn(0);
}
return 0;
}
if (controlType == xtpButtonExpandMenu)
{
if (bDraw)
{
CXTPPaintManager::DrawControlEntry(pDC, pButton);
CRect rcButton = pButton->GetRect();
int nCenter = rcButton.CenterPoint().x;
m_ilGradientCircle.Draw(pDC, 0, CPoint(nCenter - 7, rcButton.top + 1), ILD_NORMAL);
int nTop = rcButton.top + 5;
CXTPPenDC pen(pDC->GetSafeHdc(), 0);
pDC->MoveTo(nCenter - 2, nTop);
pDC->LineTo(nCenter, nTop + 2);
pDC->LineTo(nCenter + 3, nTop - 1);
pDC->MoveTo(nCenter - 2, nTop + 1);
pDC->LineTo(nCenter, nTop + 3);
pDC->LineTo(nCenter + 3, nTop);
pDC->MoveTo(nCenter - 2, nTop + 4);
pDC->LineTo(nCenter, nTop + 6);
pDC->LineTo(nCenter + 3, nTop + 3);
pDC->MoveTo(nCenter - 2, nTop + 5);
pDC->LineTo(nCenter, nTop + 7);
pDC->LineTo(nCenter + 3, nTop + 4);
}
return CSize(0, 18);
}
return CXTPOfficeTheme::DrawSpecialControl(pDC, controlType, pButton, pBar, bDraw, lpParam);
}
void CXTPOffice2003Theme::CreateGradientCircle()
{
const BYTE clrMask[16 * 16] =
{
0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xEA, 0xC6, 0xB4, 0xB4, 0xB4, 0xC6, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xEA, 0xEA, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x7E, 0x7E, 0xC6, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xEA, 0xFC, 0xFC, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x7E, 0x6C, 0x5A, 0x90, 0xFF, 0xFF,
0xFF, 0xEA, 0xFC, 0xFC, 0xFC, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x7E, 0x6C, 0x5A, 0x36, 0x7E, 0xFF,
0xEA, 0xFC, 0xFC, 0xFC, 0xFC, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x7E, 0x6C, 0x5A, 0x36, 0x24, 0xEA,
0xEA, 0xFC, 0xFC, 0xFC, 0xFC, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x7E, 0x6C, 0x48, 0x36, 0x24, 0x5A,
0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xEA, 0xC6, 0xB4, 0x90, 0x90, 0x7E, 0x6C, 0x48, 0x24, 0x12, 0x24,
0xC6, 0xEA, 0xEA, 0xEA, 0xC6, 0xC6, 0xC6, 0xB4, 0x90, 0x7E, 0x7E, 0x48, 0x36, 0x24, 0x12, 0x12,
0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xB4, 0xB4, 0x90, 0x7E, 0x7E, 0x6C, 0x48, 0x36, 0x12, 0x12, 0x00,
0xC6, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0x90, 0x7E, 0x7E, 0x6C, 0x5A, 0x36, 0x24, 0x12, 0x00, 0x00,
0xC6, 0x90, 0x90, 0x90, 0x90, 0x90, 0x7E, 0x7E, 0x6C, 0x6C, 0x48, 0x36, 0x24, 0x12, 0x00, 0x36,
0xFC, 0x90, 0x7E, 0x7E, 0x7E, 0x7E, 0x6C, 0x6C, 0x5A, 0x5A, 0x36, 0x24, 0x12, 0x00, 0x00, 0xB4,
0xFF, 0xC6, 0x6C, 0x6C, 0x6C, 0x6C, 0x5A, 0x5A, 0x5A, 0x48, 0x36, 0x24, 0x12, 0x00, 0x48, 0xFF,
0xFF, 0xFF, 0xB4, 0x6C, 0x5A, 0x5A, 0x5A, 0x48, 0x48, 0x36, 0x24, 0x12, 0x00, 0x36, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xC6, 0x5A, 0x48, 0x48, 0x48, 0x36, 0x24, 0x24, 0x12, 0x6C, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xB4, 0x6C, 0x48, 0x36, 0x5A, 0x7E, 0xEA, 0xFF, 0xFF, 0xFF, 0xFF
};
m_ilGradientCircle.DeleteImageList();
COLORREF clrLight = m_clrMenuExpand.clrLight;
COLORREF clrDark = m_clrMenuExpand.clrDark;
CWindowDC dc(CWnd::GetDesktopWindow());
CDC dcCircle;
dcCircle.CreateCompatibleDC(&dc);
CBitmap bmp;
VERIFY(bmp.CreateCompatibleBitmap(&dc, 16, 16));
CBitmap* pOldBitmap = (CBitmap*)dcCircle.SelectObject(&bmp);
for (int i = 0; i < 16 * 16; i++)
{
int n = clrMask[i];
int nRed = GetRValue(clrDark) - n * (GetRValue(clrDark) - GetRValue(clrLight)) / 0xFF;
int nGreen = GetGValue(clrDark) - n * (GetGValue(clrDark) - GetGValue(clrLight)) / 0xFF;
int nBlue = GetBValue(clrDark) - n * (GetBValue(clrDark) - GetBValue(clrLight)) / 0xFF;
dcCircle.SetPixel(i / 16, i % 16, n == 0xFF ? RGB(0, 0xFF, 0) : RGB(nRed, nGreen, nBlue));
}
dcCircle.SelectObject(pOldBitmap);
m_ilGradientCircle.Create(16, 16, ILC_COLOR24 | ILC_MASK, 1, 0);
m_ilGradientCircle.Add(&bmp, RGB(0, 0xFF, 0));
ASSERT(m_ilGradientCircle.GetImageCount() == 1);
}
#define RGB_TO_RGBQUAD(r, g, b) (RGB(b, g, r))
HBITMAP CXTPOffice2003Theme::GetModernBitmap(UINT nIDResource)
{
static const struct
{
DWORD rgbqFrom;
DWORD rgbqTo;
}
modernColorMap[] =
{
{ RGB_TO_RGBQUAD(0, 128, 0), RGB_TO_RGBQUAD(0, 151, 94) },
{ RGB_TO_RGBQUAD(255, 0, 0), RGB_TO_RGBQUAD(255, 87, 42) },
{ RGB_TO_RGBQUAD(128, 0, 0), RGB_TO_RGBQUAD(213, 79, 74) },
{ RGB_TO_RGBQUAD(0, 0, 255), RGB_TO_RGBQUAD(58, 123, 252) },
{ RGB_TO_RGBQUAD(0, 0, 128), RGB_TO_RGBQUAD(1, 81, 205) },
{ RGB_TO_RGBQUAD(128, 128, 128), RGB_TO_RGBQUAD(149, 147, 145) },
{ RGB_TO_RGBQUAD(128, 128, 0), RGB_TO_RGBQUAD(228, 167, 8) },
{ RGB_TO_RGBQUAD(192, 192, 192), RGB_TO_RGBQUAD(205, 198, 187) },
{ RGB_TO_RGBQUAD(255, 255, 0), RGB_TO_RGBQUAD(255, 218, 33) }
};
LPCTSTR lpszResourceName = MAKEINTRESOURCE(nIDResource);
ASSERT(lpszResourceName != NULL);
if (!lpszResourceName)
return NULL;
// determine location of the bitmap in resource fork
HINSTANCE hInst = AfxFindResourceHandle(lpszResourceName, RT_BITMAP);
if (!hInst)
return NULL;
HRSRC hRsrc = ::FindResource(hInst, lpszResourceName, RT_BITMAP);
if (hRsrc == NULL)
return NULL;
HGLOBAL hglb = LoadResource(hInst, hRsrc);
if (hglb == NULL)
return NULL;
LPBITMAPINFOHEADER lpBitmap = (LPBITMAPINFOHEADER)LockResource(hglb);
if (lpBitmap == NULL)
return NULL;
// make copy of BITMAPINFOHEADER so we can modify the color table
const int nColorTableSize = 16;
UINT nSize = lpBitmap->biSize + nColorTableSize * sizeof(RGBQUAD);
LPBITMAPINFOHEADER lpBitmapInfo = (LPBITMAPINFOHEADER)::malloc(nSize);
if (lpBitmapInfo == NULL)
return NULL;
MEMCPY_S(lpBitmapInfo, lpBitmap, nSize);
// color table is in RGBQUAD DIB format
DWORD* pColorTable =
(DWORD*)(((LPBYTE)lpBitmapInfo) + (UINT)lpBitmapInfo->biSize);
COLORREF clrMask = XTPImageManager()->GetMaskColor();
for (int iColor = 0; iColor < nColorTableSize; iColor++)
{
// look for matching RGBQUAD color in original
for (int i = 0; i < _countof(modernColorMap); i++)
{
if (pColorTable[iColor] == modernColorMap[i].rgbqFrom
&& clrMask != pColorTable[iColor])
{
pColorTable[iColor] = modernColorMap[i].rgbqTo;
break;
}
}
}
int nWidth = (int)lpBitmapInfo->biWidth;
int nHeight = (int)lpBitmapInfo->biHeight;
HDC hDCScreen = ::GetDC(NULL);
HBITMAP hbm = ::CreateCompatibleBitmap(hDCScreen, nWidth, nHeight);
if (hbm != NULL)
{
HDC hDCGlyphs = ::CreateCompatibleDC(hDCScreen);
HBITMAP hbmOld = (HBITMAP)::SelectObject(hDCGlyphs, hbm);
LPBYTE lpBits;
lpBits = (LPBYTE)(lpBitmap + 1);
lpBits += ((size_t)1 << (lpBitmapInfo->biBitCount)) * sizeof(RGBQUAD);
StretchDIBits(hDCGlyphs, 0, 0, nWidth, nHeight, 0, 0, nWidth, nHeight,
lpBits, (LPBITMAPINFO)lpBitmapInfo, DIB_RGB_COLORS, SRCCOPY);
SelectObject(hDCGlyphs, hbmOld);
::DeleteDC(hDCGlyphs);
}
::ReleaseDC(NULL, hDCScreen);
// free copy of bitmap info struct and resource itself
::free(lpBitmapInfo);
::FreeResource(hglb);
return hbm;
}
BOOL CXTPOffice2003Theme::LoadModernToolbarIcons(UINT nIDResource)
{
HBITMAP hbm = GetModernBitmap(nIDResource);
if (!hbm)
return FALSE;
CBitmap bmp;
bmp.Attach(hbm);
return XTPImageManager()->SetIcons(nIDResource, bmp);
}
BOOL CXTPOffice2003Theme::LoadModernToolbarIcons(UINT nIDResource, UINT* pCommands, int nCount, CSize szIcon)
{
HBITMAP hbm = GetModernBitmap(nIDResource);
if (!hbm)
return FALSE;
CBitmap bmp;
bmp.Attach(hbm);
return XTPImageManager()->SetIcons(bmp, pCommands, nCount, szIcon);
}
CRect CXTPOffice2003Theme::GetCommandBarBorders(CXTPCommandBar* pBar)
{
if (pBar->GetPosition() == xtpBarTop || pBar->GetPosition() == xtpBarBottom)
return CRect(4, 2, 2, 2);
else return CXTPOfficeTheme::GetCommandBarBorders(pBar);
}
CSize CXTPOffice2003Theme::DrawTearOffGripper(CDC* pDC, CRect rcGripper, BOOL bSelected, BOOL bDraw)
{
if (bDraw)
{
CRect rc(1, 1, rcGripper.right + 1, rcGripper.Height() + 1);
pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_MENUBAR_FACE));
rc.DeflateRect(1, 1);
int nLeft = rc.CenterPoint().x - min(32, rcGripper.Width() /2 - 10);
int nRight = rc.CenterPoint().x + min(32, rcGripper.Width() /2 - 10);
if (bSelected)
Rectangle(pDC, rc, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT);
else
pDC->FillSolidRect(rc, m_clrTearOffGripper);
for (int x = nLeft; x < nRight; x += 4)
{
pDC->FillSolidRect(CRect(x + 1, 4 + 1, x + 3, 6 + 1), GetXtremeColor(COLOR_BTNHIGHLIGHT));
pDC->FillSolidRect(CRect(x, 3 + 1, x + 2, 5 + 1), GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
}
}
return CSize(0, 9);
}
void CXTPOffice2003Theme::DrawStatusBarGripper(CDC* pDC, CRect rcClient)
{
if (m_bThemedStatusBar && m_themeStatusBar->IsAppThemed())
{
CRect rcGripper(rcClient.right - 18, rcClient.top, rcClient.right, rcClient.bottom);
m_themeStatusBar->DrawThemeBackground(pDC->GetSafeHdc(), SP_GRIPPER, 0, &rcGripper, 0);
}
else
{
CXTPPenDC penBorder(*pDC, GetXtremeColor(COLOR_3DSHADOW));
int i;
for (i = 0; i < 3; i++)
{
pDC->MoveTo(rcClient.Width() - i * 5, rcClient.Height() - 1);
pDC->LineTo(rcClient.Width(), rcClient.Height() - 1 - i * 5);
pDC->MoveTo(rcClient.Width() - 1 - i * 5, rcClient.Height() - 1);
pDC->LineTo(rcClient.Width(), rcClient.Height() - 2 - i * 5);
pDC->MoveTo(rcClient.Width() - 2 - i * 5, rcClient.Height() - 1);
pDC->LineTo(rcClient.Width(), rcClient.Height() - 3 - i * 5);
}
CXTPPenDC penBorderWhite(*pDC, GetXtremeColor(COLOR_BTNHIGHLIGHT));
for (i = 0; i < 3; i++)
{
pDC->MoveTo(rcClient.Width() - 3 - i * 5, rcClient.Height() - 1);
pDC->LineTo(rcClient.Width(), rcClient.Height() - 4 - i * 5);
}
}
}
void CXTPOffice2003Theme::DrawStatusBarPaneBorder(CDC* pDC, CRect rc, CXTPStatusBarPane* pPane, BOOL bGripperPane)
{
if (m_bThemedStatusBar && m_themeStatusBar->IsAppThemed())
{
CXTPPaintManager::DrawStatusBarPaneBorder(pDC, rc, pPane, bGripperPane);
}
else
{
pDC->Draw3dRect(rc, m_clrStatusPane, m_clrStatusPane);
}
}
//////////////////////////////////////////////////////////////////////////
// CXTPWhidbeyTheme
IMPLEMENT_DYNAMIC(CXTPWhidbeyTheme, CXTPOffice2003Theme)
CXTPWhidbeyTheme::CXTPWhidbeyTheme()
{
m_systemTheme = xtpSystemThemeUnknown;
m_bPlainSeparators = TRUE;
}
CXTPWhidbeyTheme::~CXTPWhidbeyTheme()
{
}
void CXTPWhidbeyTheme::RefreshMetrics()
{
CXTPOffice2003Theme::RefreshMetrics();
m_clrToolbarExpand.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(COLOR_WINDOW), GetXtremeColor(COLOR_3DFACE), 550),
GetXtremeColor(COLOR_3DSHADOW));
if (XTPColorManager()->IsLowResolution())
{
m_clrToolbarExpand.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
}
switch (XTPColorManager()->GetCurrentSystemTheme())
{
case xtpSystemThemeBlue:
m_clrCommandBar.SetStandardValue(RGB(250, 249, 245), RGB(192, 192, 168), 0.75f);
m_clrToolbarExpand.SetStandardValue(RGB(238, 237, 234), RGB(152, 152, 126), 0.75f);
m_clrDockBar.SetStandardValue(RGB(229, 229, 215), RGB(244, 241, 231));
m_clrToolbarShadow.SetStandardValue(RGB(163, 163, 124));
m_clrMenuExpandedGripper.SetStandardValue(RGB(204, 199, 186));
m_clrMenuExpand.SetStandardValue(m_clrCommandBar);
m_clrDisabledIcon.SetStandardValue(RGB(247, 245, 249), RGB(122, 121, 153));
break;
case xtpSystemThemeOlive:
m_clrCommandBar.SetStandardValue(RGB(250, 249, 245), RGB(192, 192, 168), 0.75f);
m_clrToolbarExpand.SetStandardValue(RGB(238, 237, 234), RGB(176, 172, 158), 0.75f);
m_clrDockBar.SetStandardValue(RGB(229, 229, 215), RGB(244, 241, 231));
m_clrToolbarShadow.SetStandardValue(RGB(163, 163, 124));
m_clrMenuExpandedGripper.SetStandardValue(RGB(204, 199, 186));
m_clrMenuExpand.SetStandardValue(m_clrCommandBar);
m_clrDisabledIcon.SetStandardValue(RGB(236, 233, 216), RGB(172, 168, 153));
m_arrColor[XPCOLOR_HIGHLIGHT].SetStandardValue(RGB(182, 198, 141));
m_arrColor[XPCOLOR_HIGHLIGHT_PUSHED].SetStandardValue(RGB(147, 160, 112));
m_arrColor[XPCOLOR_HIGHLIGHT_CHECKED].SetStandardValue(RGB(182, 198, 141));
m_arrColor[XPCOLOR_PUSHED_TEXT].SetStandardValue(RGB(255, 255, 255));
break;
case xtpSystemThemeSilver:
m_clrCommandBar.SetStandardValue(RGB(243, 244, 250), RGB(153, 151, 181), 0.75f);
m_clrToolbarExpand.SetStandardValue(RGB(179, 178, 200), RGB(118, 116, 146), 0.75f);
m_clrDockBar.SetStandardValue(RGB(215, 215, 229), RGB(243, 243, 247));
m_clrMenuExpandedGripper.SetStandardValue(RGB(215, 215, 226), RGB(133, 131, 162));
m_clrMenuExpand.SetStandardValue(0xF1E8E8, 0xC5AEB0);
m_clrToolbarShadow.SetStandardValue(RGB(124, 124, 148));
m_clrDisabledIcon.SetStandardValue(RGB(247, 245, 249), RGB(122, 121, 153));
m_arrColor[XPCOLOR_TOOLBAR_GRAYTEXT].SetStandardValue(RGB(141, 141, 141));
m_arrColor[XPCOLOR_MENUBAR_GRAYTEXT].SetStandardValue(RGB(141, 141, 141));
m_arrColor[XPCOLOR_SEPARATOR].SetStandardValue(RGB(110, 109, 143));
m_arrColor[XPCOLOR_TOOLBAR_GRIPPER].SetStandardValue(RGB(84, 84, 117));
m_arrColor[XPCOLOR_TOOLBAR_FACE].SetStandardValue(RGB(219, 218, 228));
m_clrTearOffGripper.SetStandardValue(RGB(192, 192, 211));
m_clrFloatingGripper.SetStandardValue(RGB(122, 121, 153));
m_arrColor[XPCOLOR_FLOATBAR_BORDER].SetStandardValue(RGB(122, 121, 153));
INT nElements[] =
{
XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_PUSHED_TEXT
};
COLORREF clrValues[] =
{
RGB(255, 238, 194), RGB(75, 75, 111), RGB(75, 75, 111), RGB(75, 75, 111), RGB(254, 128, 62), RGB(255, 192, 111), 0
};
SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
break;
}
m_clrMenuGripper.SetStandardValue(m_clrCommandBar);
CreateGradientCircle();
}
//////////////////////////////////////////////////////////////////////////
// CXTPVisualStudio2008Theme
CXTPVisualStudio2008Theme::CXTPVisualStudio2008Theme()
{
m_nPopupBarTextPadding = 10;
m_pShadowManager->SetShadowOptions(xtpShadowOfficeAlpha);
}
CXTPVisualStudio2008Theme::~CXTPVisualStudio2008Theme()
{
}
void CXTPVisualStudio2008Theme::RefreshMetrics()
{
CXTPWhidbeyTheme::RefreshMetrics();
m_clrMenuGripper.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(COLOR_3DFACE), GetXtremeColor(COLOR_WINDOW), 40), GetXtremeColor(COLOR_3DFACE));
m_clrMenuSelection.SetStandardValue(GetXtremeColor(COLOR_HIGHLIGHT));
m_clrMenuSelectionBorder.SetStandardValue(GetXtremeColor(COLOR_HIGHLIGHT));
m_clrMenuSelectionText.SetStandardValue(GetXtremeColor(COLOR_HIGHLIGHTTEXT));
switch (XTPColorManager()->GetCurrentSystemTheme())
{
case xtpSystemThemeBlue:
case xtpSystemThemeRoyale:
{
m_clrMenuSelectionBorder.SetStandardValue(RGB(152, 181, 226));
m_clrMenuSelection.SetStandardValue(RGB(239,243,250), RGB(193,210,238));
m_clrMenuSelectionText.SetStandardValue(0);
m_clrMenuGripper.SetStandardValue(RGB(241, 241, 241));
m_clrMenuExpandedGripper.SetStandardValue(RGB(215, 227, 234));
m_arrColor[XPCOLOR_LABEL].SetStandardValue(RGB(221, 231, 238));
}
break;
case xtpSystemThemeAero:
{
m_clrMenuSelectionBorder.SetStandardValue(RGB(150,217,249));
m_clrMenuSelection.SetStandardValue(RGB(241,248,251), RGB(186,228,246));
m_clrMenuSelectionText.SetStandardValue(0);
m_clrMenuGripper.SetStandardValue(RGB(244,247,252), RGB(212,216,230));
m_arrColor[XPCOLOR_SEPARATOR].SetStandardValue(RGB(160,160,180));
m_clrDockBar.SetStandardValue(RGB(233,236,250), RGB(244,247,252));
m_clrToolbarShadow.SetStandardValue(RGB(181,190,206));
m_clrCommandBar.SetStandardValue(RGB(250,250,253), RGB(196,203,219), 0.75f);
m_clrFloatingGripper.SetStandardValue(RGB(128, 128, 128));
m_clrPopupControl.SetStandardValue(RGB(255, 255, 255), RGB(118, 184, 219));
m_clrToolbarExpand.SetStandardValue(RGB(195,202,218), RGB(233,236,250), 0.75f);
m_clrStatusPane.SetStandardValue(RGB(160,160,180));
m_pShadowManager->SetShadowColor(0);
m_clrDisabledIcon.SetStandardValue(RGB(244,247,252), RGB(113,124,152));
m_arrColor[XPCOLOR_EDITCTRLBORDER].SetStandardValue(RGB(240, 240, 240));
INT nElements[] =
{
XPCOLOR_TOOLBAR_GRIPPER, XPCOLOR_SEPARATOR, XPCOLOR_DISABLED, XPCOLOR_MENUBAR_FACE, XPCOLOR_MENUBAR_BORDER, XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_CHECKED_BORDER, XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_TOOLBAR_FACE, XPCOLOR_PUSHED_TEXT
};
COLORREF clrValues[] =
{
RGB(160,160,180), RGB(160,160,180), RGB(128,128,128), RGB(240, 240, 240), RGB(160, 160, 160), RGB(182,228,247), RGB(41,153,255), RGB(41,153,255), RGB(48,127,177), RGB(206,237,250), RGB(206,237,250), RGB(233,236,250), 0
};
SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
m_grcLunaChecked.SetStandardValue(RGB(237,248,253), RGB(129,192,224));
m_grcLunaPushed.SetStandardValue(RGB(228,245,252), RGB(124,177,204));
m_grcLunaSelected.SetStandardValue(RGB(237,248,253), RGB(129,192,224));
m_bLunaTheme = TRUE;
}
break;
case xtpSystemThemeOlive:
{
m_clrMenuSelectionBorder.SetStandardValue(RGB(147,160,112));
m_clrMenuSelection.SetStandardValue(RGB(239,242,227), RGB(194,207,158));
m_clrMenuSelectionText.SetStandardValue(0);
m_clrMenuGripper.SetStandardValue(RGB(247,246,239), RGB(233,230,214));
}
break;
case xtpSystemThemeSilver:
{
m_clrMenuSelectionBorder.SetStandardValue(RGB(255,192,111));
m_clrMenuSelection.SetStandardValue(RGB(255,246,204), RGB(255,194,115));
m_clrMenuSelectionText.SetStandardValue(0);
m_clrMenuGripper.SetStandardValue(RGB(232,233,242), RGB(193,193,211));
m_arrColor[XPCOLOR_SEPARATOR].SetStandardValue(RGB(110,109,143));
m_clrPopupControl.SetStandardValue(RGB(232,233,241), RGB(192,191,209));
}
break;
}
}
void CXTPVisualStudio2008Theme::AdjustExcludeRect(CRect& rc, CXTPControl* pControl, BOOL /*bVertical*/)
{
CXTPCommandBar* pParent = pControl->GetParent();
if (pParent->GetType() == xtpBarTypePopup)
rc.InflateRect(1, 0);
}
CRect CXTPVisualStudio2008Theme::GetCommandBarBorders(CXTPCommandBar* pBar)
{
if (pBar->GetPosition() == xtpBarPopup && pBar->GetType() == xtpBarTypePopup)
return CRect(4, 3, 4, 3);
return CXTPWhidbeyTheme::GetCommandBarBorders(pBar);
}
void CXTPVisualStudio2008Theme::DrawPopupBarGripper(CDC* pDC, int x, int y, int cx, int cy, BOOL bExpanded)
{
XTPDrawHelpers()->GradientFill(pDC, CRect(CPoint(x, y), CSize(cx, cy)),
bExpanded ? m_clrMenuExpandedGripper : m_clrMenuGripper, TRUE);
pDC->FillSolidRect(x + cx, y, 1, cy, GetXtremeColor(XPCOLOR_SEPARATOR));
pDC->FillSolidRect(x + cx + 1, y, 1, cy, GetXtremeColor(COLOR_3DHILIGHT));
}
void CXTPVisualStudio2008Theme::AlphaPixel(CDC* pDC, int x, int y, COLORREF clr, int nAlpha)
{
if (nAlpha == 255)
{
pDC->SetPixel(x, y, clr);
}
else
{
COLORREF clrOld = pDC->GetPixel(x, y);
pDC->SetPixel(x, y, CXTPDrawHelpers::BlendColors(clr, clrOld, (double)nAlpha / 255));
}
}
void CXTPVisualStudio2008Theme::AlphaBorder(CDC* pDC, CRect rc, COLORREF clrBorder)
{
pDC->FillSolidRect(rc.left + 3, rc.top, rc.Width() - 6, 1, clrBorder);
pDC->FillSolidRect(rc.left + 3, rc.bottom - 1, rc.Width() - 6, 1, clrBorder);
pDC->FillSolidRect(rc.left, rc.top + 3, 1, rc.Height() - 6, clrBorder);
pDC->FillSolidRect(rc.right - 1 , rc.top + 3, 1, rc.Height() - 6, clrBorder);
AlphaPixel(pDC, rc.left + 1, rc.top + 1, clrBorder, 255);
AlphaPixel(pDC, rc.left + 1, rc.top, clrBorder, 60);
AlphaPixel(pDC, rc.left + 2, rc.top, clrBorder, 120);
AlphaPixel(pDC, rc.left, rc.top + 1, clrBorder, 60);
AlphaPixel(pDC, rc.left, rc.top + 2, clrBorder, 120);
AlphaPixel(pDC, rc.right - 2, rc.top + 1, clrBorder, 255);
AlphaPixel(pDC, rc.right - 3, rc.top, clrBorder, 120);
AlphaPixel(pDC, rc.right - 2, rc.top, clrBorder, 60);
AlphaPixel(pDC, rc.right - 1, rc.top + 1, clrBorder, 60);
AlphaPixel(pDC, rc.right - 1, rc.top + 2, clrBorder, 120);
AlphaPixel(pDC, rc.left + 1, rc.bottom - 2, clrBorder, 255);
AlphaPixel(pDC, rc.left + 1, rc.bottom - 1, clrBorder, 60);
AlphaPixel(pDC, rc.left + 2, rc.bottom - 1, clrBorder, 120);
AlphaPixel(pDC, rc.left, rc.bottom - 2, clrBorder, 60);
AlphaPixel(pDC, rc.left, rc.bottom - 3, clrBorder, 120);
AlphaPixel(pDC, rc.right - 2, rc.bottom - 2, clrBorder, 255);
AlphaPixel(pDC, rc.right - 3, rc.bottom - 1, clrBorder, 120);
AlphaPixel(pDC, rc.right - 2, rc.bottom - 1, clrBorder, 60);
AlphaPixel(pDC, rc.right - 1, rc.bottom - 2, clrBorder, 60);
AlphaPixel(pDC, rc.right - 1, rc.bottom - 3, clrBorder, 120);
}
void CXTPVisualStudio2008Theme::DrawRectangle(CDC* pDC, CRect rc, BOOL bSelected, BOOL bPressed, BOOL bEnabled, BOOL bChecked, BOOL bPopuped, XTPBarType barType, XTPBarPosition barPosition)
{
if (barPosition == xtpBarPopup && barType == xtpBarTypePopup && bSelected && !bChecked && !bPressed)
{
XTPDrawHelpers()->GradientFill(pDC, CRect(rc.left + 1, rc.top + 1, rc.right - 1, rc.bottom - 1), m_clrMenuSelection, FALSE);
COLORREF clrBorder = m_clrMenuSelectionBorder;
AlphaBorder(pDC, rc, clrBorder);
return;
}
if (barType == xtpBarTypeMenuBar && bSelected && !bChecked && !bPressed && bEnabled)
{
COLORREF clrShadow = GetXtremeColor(COLOR_WINDOW);
COLORREF clrBorder = GetXtremeColor(XPCOLOR_HIGHLIGHT_BORDER);
pDC->FillSolidRect(rc.left + 1, rc.top, rc.Width() - 2, 1, clrShadow);
pDC->FillSolidRect(rc.left + 1, rc.bottom - 1, rc.Width() - 2, 1, clrShadow);
pDC->FillSolidRect(rc.left, rc.top + 1, 1, rc.Height() - 2, clrShadow);
pDC->FillSolidRect(rc.right - 1 , rc.top + 1, 1, rc.Height() - 2, clrShadow);
rc.DeflateRect(1, 1);
pDC->Draw3dRect(rc, clrBorder, clrBorder);
COLORREF clrPixel = CXTPDrawHelpers::BlendColors(clrBorder, clrShadow, 0.5);
pDC->SetPixel(rc.left, rc.top, clrPixel);
pDC->SetPixel(rc.left, rc.bottom - 1, clrPixel);
pDC->SetPixel(rc.right - 1, rc.top, clrPixel);
pDC->SetPixel(rc.right - 1, rc.bottom - 1, clrPixel);
rc.DeflateRect(1, 1);
if (!bPopuped)
{
if (m_bLunaTheme) XTPDrawHelpers()->GradientFill(pDC, rc, m_grcLunaSelected, FALSE);
else pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_HIGHLIGHT));
}
else
XTPDrawHelpers()->GradientFill(pDC, rc, m_clrPopupControl, FALSE);
return;
}
if (barType != xtpBarTypePopup && bPopuped && bEnabled)
{
XTPDrawHelpers()->GradientFill(pDC, rc, m_clrPopupControl, FALSE);
Draw3dRect(pDC, rc, XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_BORDER);
return;
}
CXTPWhidbeyTheme::DrawRectangle(pDC, rc, bSelected, bPressed, bEnabled, bChecked, bPopuped, barType, barPosition);
}
COLORREF CXTPVisualStudio2008Theme::GetRectangleTextColor(BOOL bSelected, BOOL bPressed, BOOL bEnabled, BOOL bChecked, BOOL bPopuped, XTPBarType barType, XTPBarPosition barPosition)
{
if (barPosition == xtpBarPopup && barType == xtpBarTypePopup && bSelected && !bPressed && bEnabled)
{
return m_clrMenuSelectionText;
}
return CXTPWhidbeyTheme::GetRectangleTextColor(bSelected, bPressed, bEnabled, bChecked, bPopuped, barType, barPosition);
}
CSize CXTPVisualStudio2008Theme::DrawCommandBarSeparator(CDC* pDC, CXTPCommandBar* pBar, CXTPControl* pControl, BOOL bDraw)
{
if (!bDraw || pBar->GetType() != xtpBarTypePopup || pBar->GetPosition() != xtpBarPopup)
return CXTPWhidbeyTheme::DrawCommandBarSeparator(pDC, pBar, pControl, bDraw);
CRect rc;
pBar->GetClientRect(&rc);
CRect rcControl = pControl->GetRect();
CRect rcRow = pControl->GetRowRect();
if (!pControl->GetWrap())
{
HorizontalLine(pDC, rcControl.left - 1 + GetPopupBarGripperWidth(pBar) + m_nPopupBarTextPadding, rcControl.top - 2, rcControl.right + 1, GetXtremeColor(XPCOLOR_SEPARATOR));
HorizontalLine(pDC, rcControl.left - 1 + GetPopupBarGripperWidth(pBar) + m_nPopupBarTextPadding, rcControl.top - 1, rcControl.right + 1, GetXtremeColor(COLOR_3DHILIGHT));
}
else
{
VerticalLine(pDC, rcControl.left - 2, rcRow.top - 1, rcRow.bottom + 1, GetXtremeColor(XPCOLOR_SEPARATOR));
VerticalLine(pDC, rcControl.left - 1, rcRow.top - 1, rcRow.bottom + 1, GetXtremeColor(COLOR_3DHILIGHT));
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
// CXTPVisualStudio2010Theme
CXTPVisualStudio2010Theme::CXTPVisualStudio2010Theme()
{
m_nPopupBarTextPadding = 10;
m_pShadowManager->SetShadowOptions(xtpShadowOfficeAlpha);
m_bFlatGripper = TRUE;
m_bPlainSeparators = TRUE;
m_bThemedStatusBar = TRUE;
m_nToolbarSeparatorMargin = 2;
}
CXTPVisualStudio2010Theme::~CXTPVisualStudio2010Theme()
{
}
void CXTPVisualStudio2010Theme::RefreshMetrics()
{
CXTPOffice2003Theme::RefreshMetrics();
HWND hWnd = AfxGetMainWnd() ? AfxGetMainWnd()->GetSafeHwnd() : 0;
m_themeStatusBar->OpenThemeData(hWnd, L"STATUS");
m_clrCommandBar.SetStandardValue(RGB(188, 199, 216));
m_clrDockBar.SetStandardValue(RGB(156,170,193));
m_bLunaTheme = FALSE;
m_arrColor[XPCOLOR_SPLITTER_FACE].SetStandardValue(XTPColorManager()->grcDockBar.clrDark);
m_clrToolbarShadow.SetStandardValue(RGB(201, 210, 225));
m_clrFloatingGripper.SetStandardValue(RGB(72, 92, 127));
m_clrPopupControl.SetStandardValue(RGB(233, 236, 238));
m_clrToolbarExpand.SetStandardValue(RGB(213,220,232));
m_clrMenuExpandedGripper.SetStandardValue(RGB(203, 221, 246), RGB(121, 161, 220)); // TODO
m_clrMenuExpand.SetStandardValue(0xFEEFE3, 0xE2A981); // TODO
m_clrStatusPane.SetStandardValue(RGB(255, 255, 255));
m_pShadowManager->SetShadowColor(RGB(0, 0, 0));
m_clrTearOffGripper.SetStandardValue(RGB(169, 199, 240)); // TODO
m_clrDisabledIcon.SetStandardValue(RGB(221, 227, 235), RGB(95, 100, 108));
m_arrColor[XPCOLOR_EDITCTRLBORDER].SetStandardValue(RGB(133, 145, 162));
m_arrColor[XPCOLOR_3DFACE].SetStandardValue(RGB(156, 170, 193));
m_arrColor[XPCOLOR_3DSHADOW].SetStandardValue(RGB(96,114,140));
m_arrColor[COLOR_APPWORKSPACE].SetStandardValue(RGB(47, 65, 95));
m_arrColor[XPCOLOR_LABEL].SetStandardValue(RGB(233, 236, 238));
INT nElements[] =
{
XPCOLOR_TOOLBAR_GRIPPER, XPCOLOR_SEPARATOR, XPCOLOR_DISABLED,
XPCOLOR_MENUBAR_FACE, XPCOLOR_MENUBAR_BORDER, XPCOLOR_HIGHLIGHT,
XPCOLOR_HIGHLIGHT_BORDER, XPCOLOR_HIGHLIGHT_PUSHED_BORDER, XPCOLOR_HIGHLIGHT_CHECKED_BORDER,
XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_CHECKED, XPCOLOR_TOOLBAR_FACE, XPCOLOR_PUSHED_TEXT
};
COLORREF clrValues[] =
{
RGB(97,115,140), RGB(133,145,162), RGB(128, 128, 128),
RGB(221,226,232), RGB(155,167,183), RGB(255, 243, 206),
RGB(231, 195, 99), RGB(229,195,101), RGB(229,195,101),
RGB(255, 235, 165), RGB(255, 239, 189), RGB(188,199,216), 0
};
SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
m_arrColor[XPCOLOR_HIGHLIGHT_DISABLED_BORDER].SetStandardValue(RGB(128, 128, 128));
m_arrColor[XPCOLOR_TOOLBAR_GRAYTEXT].SetStandardValue(RGB(128, 128, 128));
m_arrColor[XPCOLOR_MENUBAR_GRAYTEXT].SetStandardValue(RGB(128, 128, 128));
m_arrColor[XPCOLOR_FLOATBAR_BORDER].SetStandardValue(m_clrFloatingGripper);
m_clrMenuGripper.SetStandardValue(RGB(233, 236, 238));
m_bLunaTheme = XTPSystemVersion()->IsWinVistaOrGreater();
m_grcLunaChecked.SetStandardValue(RGB(255,251,241), RGB(255,238,190));
m_grcLunaPushed.SetStandardValue(RGB(255,232,166), RGB(255,232,166));
m_grcLunaSelected.SetStandardValue(RGB(255,252,242), RGB(255,236,181));
m_clrStatusPane.SetStandardValue(RGB(41, 57, 85));
m_clrStatusTextColor = RGB(255, 255, 255);
m_arrColor[XPCOLOR_TOOLBAR_TEXT].SetStandardValue(RGB(28, 42, 63));
m_clrMenuSeparator.SetStandardValue(RGB(190, 195, 203));
if (!m_bLunaTheme)
{
m_clrDockBar.SetStandardValue(RGB(173, 186, 206));
m_clrCommandBar.SetStandardValue(RGB(189, 199, 222));
m_clrToolbarShadow.SetStandardValue(RGB(206, 211, 231));
m_arrColor[XPCOLOR_MENUBAR_FACE].SetStandardValue(RGB(239, 239, 239));
m_arrColor[XPCOLOR_MENUBAR_BORDER].SetStandardValue(RGB(156, 166, 181));
m_arrColor[XPCOLOR_TOOLBAR_GRIPPER].SetStandardValue(RGB(99, 113, 140));
m_arrColor[XPCOLOR_SEPARATOR].SetStandardValue(RGB(132, 146, 165));
m_arrColor[XPCOLOR_TOOLBAR_TEXT].SetStandardValue(RGB(24, 40, 57));
m_clrMenuSeparator.SetStandardValue(RGB(189, 195, 206));
}
CreateGradientCircle();
}
void CXTPVisualStudio2010Theme::AdjustExcludeRect(CRect& rc, CXTPControl* pControl, BOOL bVertical)
{
CXTPOffice2003Theme::AdjustExcludeRect(rc, pControl, bVertical);
}
CRect CXTPVisualStudio2010Theme::GetCommandBarBorders(CXTPCommandBar* pBar)
{
if (pBar->GetPosition() == xtpBarPopup && pBar->GetType() == xtpBarTypePopup)
return CRect(3, 3, 3, 3);
return CXTPOffice2003Theme::GetCommandBarBorders(pBar);
}
void CXTPVisualStudio2010Theme::DrawPopupBarGripper(CDC* pDC, int x, int y, int cx, int cy, BOOL bExpanded)
{
CXTPOffice2003Theme::DrawPopupBarGripper(pDC, x, y, cx, cy, bExpanded);
}
void CXTPVisualStudio2010Theme::DrawRectangle(CDC* pDC, CRect rc, BOOL bSelected, BOOL bPressed, BOOL bEnabled, BOOL bChecked, BOOL bPopuped, XTPBarType barType, XTPBarPosition barPosition)
{
if (barPosition == xtpBarPopup && barType == xtpBarTypePopup && bSelected && !bChecked && !bPressed)
{
if (m_bLunaTheme)
{
XTPDrawHelpers()->GradientFill(pDC, CRect(rc.left + 1, rc.top + 1, rc.right - 1, rc.bottom - 1), m_grcLunaSelected, FALSE);
}
else
{
pDC->FillSolidRect(CRect(rc.left + 1, rc.top + 1, rc.right - 1, rc.bottom - 1), GetXtremeColor(XPCOLOR_HIGHLIGHT));
}
COLORREF clrBorder = GetXtremeColor(XPCOLOR_HIGHLIGHT_BORDER);
CXTPVisualStudio2008Theme::AlphaBorder(pDC, rc, clrBorder);
return;
}
if (barType == xtpBarTypeMenuBar && bSelected && !bChecked && !bPressed && bEnabled && !bPopuped)
{
COLORREF clrBorder = GetXtremeColor(XPCOLOR_HIGHLIGHT_BORDER);
CXTPVisualStudio2008Theme::AlphaBorder(pDC, rc, clrBorder);
rc.DeflateRect(1, 1);
ExcludeCorners(pDC, rc);
if (m_bLunaTheme) XTPDrawHelpers()->GradientFill(pDC, rc, m_grcLunaSelected, FALSE);
else pDC->FillSolidRect(rc, GetXtremeColor(XPCOLOR_HIGHLIGHT));
return;
}
CXTPOffice2003Theme::DrawRectangle(pDC, rc, bSelected, bPressed, bEnabled, bChecked, bPopuped, barType, barPosition);
}
COLORREF CXTPVisualStudio2010Theme::GetRectangleTextColor(BOOL bSelected, BOOL bPressed, BOOL bEnabled, BOOL bChecked, BOOL bPopuped, XTPBarType barType, XTPBarPosition barPosition)
{
return CXTPOffice2003Theme::GetRectangleTextColor(bSelected, bPressed, bEnabled, bChecked, bPopuped, barType, barPosition);
}
CSize CXTPVisualStudio2010Theme::DrawCommandBarSeparator(CDC* pDC, CXTPCommandBar* pBar, CXTPControl* pControl, BOOL bDraw)
{
if (bDraw && pBar->GetType() == xtpBarTypePopup)
{
CRect rc;
pBar->GetClientRect(&rc);
CRect rcControl = pControl->GetRect();
CRect rcRow = pControl->GetRowRect();
if (!pControl->GetWrap())
HorizontalLine(pDC, rcControl.left - 1 + GetPopupBarGripperWidth(pBar) + m_nPopupBarTextPadding,
rcControl.top - 2, rcControl.right + 1, m_clrMenuSeparator);
else
VerticalLine(pDC, rcControl.left - 2, rcRow.top - 1, rcRow.bottom + 1, m_clrMenuSeparator);
return 0;
}
return CXTPOffice2003Theme::DrawCommandBarSeparator(pDC, pBar, pControl, bDraw);
}
void CXTPVisualStudio2010Theme::FillCommandBarEntry(CDC* pDC, CXTPCommandBar* pBar)
{
CXTPClientRect rc((CWnd*)pBar);
if (pBar->GetType() == xtpBarTypeMenuBar && pBar->GetPosition() != xtpBarFloating)
{
if (m_bLunaTheme)
XTPDrawHelpers()->GradientFill(pDC, rc, RGB(200,209,224), RGB(174,185,205), IsVerticalPosition(pBar->GetPosition()));
else
pDC->FillSolidRect(rc, m_clrDockBar);
}
else if (pBar->GetPosition() == xtpBarTop || pBar->GetPosition() == xtpBarBottom)
{
COLORREF clr3DFace = GetXtremeColor(COLOR_3DFACE);
pDC->FillSolidRect(rc, clr3DFace);
CWnd* pWnd = pBar->GetParent();
if (pWnd)
{
CXTPWindowRect rcFill((CWnd*)pWnd);
pBar->ScreenToClient(rcFill);
rcFill.right = rcFill.left + max(rcFill.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2);
XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
}
CRect rcFill = rc;
rcFill.top += 1;
rcFill.left += 2;
pDC->FillSolidRect(rcFill.left + 1, rcFill.top, rcFill.Width() - 2, 1, m_clrCommandBar.clrDark);
pDC->FillSolidRect(rcFill.left, rcFill.top + 1, rcFill.Width(), rcFill.Height() - 2, m_clrCommandBar.clrDark);
pDC->FillSolidRect(rcFill.left + 1, rcFill.bottom - 1, rcFill.Width() - 2, 1, m_clrCommandBar.clrDark);
CXTPVisualStudio2008Theme::AlphaBorder(pDC, rcFill, m_clrToolbarShadow);
}
else if (pBar->GetPosition() == xtpBarLeft || pBar->GetPosition() == xtpBarRight)
{
COLORREF clr3DFace = GetXtremeColor(COLOR_3DFACE);
pDC->FillSolidRect(rc, clr3DFace);
CWnd* pWnd = pBar->GetParent();
if (pWnd)
{
if (pWnd->GetStyle() & CBRS_RIGHT)
pDC->FillSolidRect(rc, m_clrDockBar.clrDark);
else
{
CXTPWindowRect rcFill((CWnd*)pWnd);
pBar->ScreenToClient(rcFill);
rcFill.right = rcFill.left + max(rcFill.Width(), GetSystemMetrics(SM_CXFULLSCREEN) / 2);
XTPDrawHelpers()->GradientFill(pDC, rcFill, m_clrDockBar, TRUE, rc);
}
}
CRect rcFill = rc;
rcFill.top += 2;
rcFill.left += 1;
pDC->FillSolidRect(rcFill.left + 1, rcFill.top, rcFill.Width() - 2, 1, m_clrCommandBar.clrDark);
pDC->FillSolidRect(rcFill.left, rcFill.top + 1, rcFill.Width(), rcFill.Height() - 2, m_clrCommandBar.clrDark);
pDC->FillSolidRect(rcFill.left + 1, rcFill.bottom - 1, rcFill.Width() - 2, 1, m_clrCommandBar.clrDark);
CXTPVisualStudio2008Theme::AlphaBorder(pDC, rcFill, m_clrToolbarShadow);
}
else
{
CXTPOffice2003Theme::FillCommandBarEntry(pDC, pBar);
}
}
void CXTPVisualStudio2010Theme::FillStatusBar(CDC* pDC, CXTPStatusBar* pBar)
{
pDC->FillSolidRect(CXTPClientRect(pBar), RGB(41, 57, 85));
}
void CXTPVisualStudio2010Theme::DrawStatusBarGripper(CDC* pDC, CRect rcClient)
{
if (m_bThemedStatusBar && m_themeStatusBar->IsAppThemed())
{
for (int y = 0; y <= 3; y++)
{
for (int x = 0; x <= 3 - y; x++)
{
int left = rcClient.right - x * 3 - 4;
int top = rcClient.bottom - y * 3 - 4;
pDC->SetPixel(left, top, RGB(248, 249, 250));
pDC->SetPixel(left + 1, top, RGB(198, 206, 221));
pDC->SetPixel(left, top + 1, RGB(227, 231, 238));
pDC->SetPixel(left + 1, top + 1, RGB(170, 183, 205));
}
}
}
else
{
CXTPOffice2003Theme::DrawStatusBarGripper(pDC, rcClient);
}
}