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.

2922 lines
93 KiB
C++

// XTPDockingPanePaintManager.cpp : implementation of the CXTPDockingPanePaintManager class.
//
// This file is a part of the XTREME DOCKINGPANE 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 "Resource.h"
#include "Common/XTPVC80Helpers.h"
#include "Common/XTPColorManager.h"
#include "Common/XTPDrawHelpers.h"
#include "Common/XTPResourceImage.h"
#include "Common/XTPResourceManager.h"
#include "Common/XTPWinThemeWrapper.h"
#include "Common/XTPImageManager.h"
#include "Common/XTPSystemHelpers.h"
#include "TabManager/XTPTabManager.h"
#include "TabManager/XTPTabPaintManager.h"
#include "XTPDockingPaneDefines.h"
#include "XTPDockingPaneBase.h"
#include "XTPDockingPaneBaseContainer.h"
#include "XTPDockingPanePaintManager.h"
#include "XTPDockingPaneTabbedContainer.h"
#include "XTPDockingPane.h"
#include "XTPDockingPaneMiniWnd.h"
#include "XTPDockingPaneSplitterContainer.h"
#include "XTPDockingPaneSidePanel.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BOOL CXTPDockingPaneCaptionButton::IsVisible()
{
return m_pPane->IsCaptionButtonVisible(this);
}
AFX_INLINE void XTPDeflateRectDirection(CRect& rc, int left, int top, int right, int bottom, BOOL bVertical)
{
if (bVertical)
{
rc.DeflateRect(top, left, bottom, right);
}
else
{
rc.DeflateRect(left, top, right, bottom);
}
}
AFX_INLINE int XTPGetRectDirectionHeight(const CRect& rc, BOOL bVertical)
{
return bVertical ? rc.Width() : rc.Height();
}
void XTPFillFramePartRect(CDC* pDC, CRect rc, CWnd* pWnd, CWnd* pParentFrame, const CXTPPaintManagerColorGradient& clrHeaderFace, BOOL bHoriz)
{
COLORREF clrLight = clrHeaderFace.clrDark, clrDark = clrHeaderFace.clrLight;
CWnd* pFrame = pParentFrame;
if (XTPColorManager()->IsLowResolution())
{
pDC->FillSolidRect(rc, clrDark);
return;
}
if (pFrame)
{
CRect rcFrame;
pFrame->GetWindowRect(&rcFrame);
pWnd->ScreenToClient(&rcFrame);
if (bHoriz)
{
float fWidth = (float)max(rcFrame.Width(), GetSystemMetrics(SM_CXFULLSCREEN)/ 2);
COLORREF clr1 = XTPDrawHelpers()->BlendColors(clrLight, clrDark, float(rc.left - rcFrame.left) / fWidth);
COLORREF clr2 = XTPDrawHelpers()->BlendColors(clrLight, clrDark, float(rc.right - rcFrame.left) / fWidth);
XTPDrawHelpers()->GradientFill(pDC, rc, clr1, clr2, TRUE);
}
else
{
float fHeight = (float)rcFrame.Height();
COLORREF clr1 = XTPDrawHelpers()->BlendColors(clrLight, clrDark, float(rc.top - rcFrame.top) / fHeight);
COLORREF clr2 = XTPDrawHelpers()->BlendColors(clrLight, clrDark, float(rc.bottom - rcFrame.top) / fHeight);
XTPDrawHelpers()->GradientFill(pDC, rc, clr1, clr2, FALSE);
}
}
}
void AFX_CDECL CXTPDockingPaneCaptionButton::DrawPinnButton(CDC* pDC, CPoint pt, BOOL bPinned)
{
pt.y--;
if (bPinned)
{
pDC->MoveTo(pt.x - 4, pt.y); pDC->LineTo(pt.x - 1, pt.y);
pDC->MoveTo(pt.x - 1, pt.y - 3); pDC->LineTo(pt.x - 1, pt.y + 4);
pDC->MoveTo(pt.x - 1, pt.y + 2); pDC->LineTo(pt.x + 3, pt.y + 2);
pDC->LineTo(pt.x + 3, pt.y - 2); pDC->LineTo(pt.x - 1, pt.y - 2);
pDC->MoveTo(pt.x - 1, pt.y + 1); pDC->LineTo(pt.x + 3, pt.y + 1);
}
else
{
pt.y += 2;
pDC->MoveTo(pt.x - 3, pt.y - 1); pDC->LineTo(pt.x + 4, pt.y - 1);
pDC->MoveTo(pt.x, pt.y - 1); pDC->LineTo(pt.x, pt.y + 3);
pDC->MoveTo(pt.x - 2, pt.y - 1); pDC->LineTo(pt.x - 2, pt.y - 6);
pDC->LineTo(pt.x + 2, pt.y - 6); pDC->LineTo(pt.x + 2, pt.y - 1);
pDC->MoveTo(pt.x + 1, pt.y - 1); pDC->LineTo(pt.x + 1, pt.y - 6);
}
}
void AFX_CDECL CXTPDockingPaneCaptionButton::DrawMaximizeRestoreButton(CDC* pDC, CPoint pt, BOOL bMaximize, COLORREF clr)
{
if (bMaximize)
{
pDC->Draw3dRect(pt.x - 5, pt.y - 5, 9, 9, clr, clr);
pDC->FillSolidRect(pt.x - 5, pt.y - 5, 9, 2, clr);
}
else
{
pDC->Draw3dRect(pt.x - 4, pt.y - 2, 6, 6, clr, clr);
pDC->FillSolidRect(pt.x - 4, pt.y - 2, 6, 2, clr);
pDC->FillSolidRect(pt.x - 2, pt.y - 5, 6, 2, clr);
pDC->SetPixel(pt.x - 2, pt.y - 3, clr);
pDC->FillSolidRect(pt.x + 3, pt.y - 3, 1, 4, clr);
pDC->SetPixel(pt.x + 2, pt.y, clr);
}
}
void CXTPDockingPaneCaptionButton::InvalidateRect()
{
m_pPane->RedrawPane();
}
BOOL CXTPDockingPaneCaptionButton::IsEnabled() const
{
CXTPDockingPane* pPane = CXTPDockingPanePaintManager::GetSelectedPane(GetPane());
if (pPane && ((pPane->GetEnabled() & xtpPaneEnableActions) == 0))
return FALSE;
return TRUE;
}
DWORD CXTPDockingPaneCaptionButton::Click (CWnd* pWnd, CPoint pt, BOOL bClient)
{
if ((::GetCapture() != NULL))
return FALSE;
pWnd->SetCapture();
ASSERT(pWnd == CWnd::GetCapture());
BOOL bClick = FALSE;
CRect rcBtn(m_rcButton);
while (CWnd::GetCapture() == pWnd)
{
BOOL bNewDown = ::PtInRect (rcBtn, pt) != 0;
if (bNewDown != m_bPressed)
{
m_bPressed = bNewDown;
InvalidateRect();
}
MSG msg;
VERIFY(::GetMessage(&msg, NULL, 0, 0));
switch (msg.message)
{
case WM_NCMOUSEMOVE:
break;
case WM_MOUSEMOVE:
pt = CPoint((short signed)LOWORD(msg.lParam), (short signed)HIWORD(msg.lParam));
if (!bClient)
{
pWnd->ClientToScreen (&pt);
CXTPDrawHelpers::ScreenToWindow(pWnd, &pt);
}
break;
case WM_LBUTTONUP:
bClick = m_bPressed;
goto ExitLoop;
case WM_KEYDOWN:
if (msg.wParam != VK_ESCAPE)
break;
case WM_CANCELMODE:
case WM_RBUTTONDOWN:
goto ExitLoop;
default:
DispatchMessage (&msg);
break;
}
}
ExitLoop:
ReleaseCapture();
m_bPressed = FALSE;
CheckForMouseOver (pt);
InvalidateRect();
return bClick;
}
void CXTPDockingPaneCaptionButton::SetRect (CRect rc)
{
ASSERT(m_pPane);
if (!m_pPane)
return;
if (rc != m_rcButton)
{
m_rcButton = rc;
m_pPane->OnCaptionButtonRectChanged(this);
}
}
BOOL CXTPDockingPaneCaptionButton::CheckForMouseOver (CPoint pt)
{
if (!PtInRect (pt) && m_bSelected)
{
m_bSelected = FALSE;
InvalidateRect();
}
if (!m_bSelected && PtInRect (pt) && IsEnabled())
{
TRACKMOUSEEVENT tme =
{
sizeof(TRACKMOUSEEVENT), TME_LEAVE, m_pPane->GetPaneHwnd()
};
_TrackMouseEvent(&tme);
m_bSelected = TRUE;
InvalidateRect();
return TRUE;
}
return FALSE;
}
///////////////////////////////////////////////////////////////////////////////
// CXTPDockingPanePaintManager
CXTPDockingPanePaintManager::CXTPDockingPanePaintManager()
: m_bUseOfficeFont(FALSE)
, m_strOfficeFont(_T("Tahoma"))
{
m_themeToolbar = new CXTPWinThemeWrapper();
m_themeExplorer = new CXTPWinThemeWrapper();
m_themeButton = new CXTPWinThemeWrapper();
m_themeWindow = new CXTPWinThemeWrapper();
m_themeRebar = new CXTPWinThemeWrapper();
m_pTabPaintManager = new CXTPTabPaintManager();
m_pTabPaintManager->SetLayout(xtpTabLayoutSizeToFit);
m_pTabPaintManager->SetPosition(xtpTabPositionBottom);
m_pTabPaintManager->m_clientFrame = xtpTabFrameSingleLine;
m_pTabPaintManager->m_bBoldSelected = FALSE;
m_pTabPaintManager->EnableToolTips();
m_pPanelPaintManager = new CXTPTabPaintManager();
m_pPanelPaintManager->SetLayout(xtpTabLayoutCompressed);
m_pPanelPaintManager->m_clientFrame = xtpTabFrameNone;
m_pPanelPaintManager->m_bBoldSelected = FALSE;
m_pPanelPaintManager->m_bInvertGradient = TRUE;
m_pPanelPaintManager->m_bFillBackground = FALSE;
m_bAutoHidePanelHighlightSelected = TRUE;
m_bDrawSingleTab = FALSE;
m_nSplitterSize = 4;
m_nSplitterIndent = 0;
m_bDrawCaptionIcon = FALSE;
m_rcCaptionMargin.SetRect(0, 2, 0, 1);
m_nCaptionFontGap = 5;
m_bShowCaption = TRUE;
m_bUseStandardFont = TRUE;
m_bHighlightActiveCaption = TRUE;
m_systemTheme = xtpSystemThemeDefault;
m_bUseBoldCaptionFont = TRUE;
m_dwSplitterStyle = xtpPaneSplitterFlat;
m_nCaptionButtonStyle = xtpPaneCaptionButtonDefault;
m_nTitleHeight = 0;
m_nTabsHeight = 0;
m_bLunaTheme = FALSE;
}
DWORD CXTPDockingPanePaintManager::GetSplitterStyle() const
{
return m_dwSplitterStyle;
}
void CXTPDockingPanePaintManager::SetSplitterStyle(DWORD dwStyle)
{
m_dwSplitterStyle = dwStyle;
m_nSplitterSize = dwStyle == xtpPaneSplitterFlat ? 4 : 7;
}
XTPCurrentSystemTheme CXTPDockingPanePaintManager::GetCurrentSystemTheme() const
{
if (m_systemTheme == xtpSystemThemeDefault)
return XTPColorManager()->IsLunaColorsDisabled() ? xtpSystemThemeUnknown :
XTPColorManager()->GetCurrentSystemTheme();
if (m_systemTheme == xtpSystemThemeAuto)
return XTPColorManager()->GetWinThemeWrapperTheme();
return m_systemTheme;
}
void CXTPDockingPanePaintManager::SetLunaTheme(XTPCurrentSystemTheme systemTheme)
{
m_systemTheme = systemTheme;
RefreshMetrics();
}
COLORREF CXTPDockingPanePaintManager::GetXtremeColor(UINT nIndex)
{
if (nIndex > XPCOLOR_LAST) return nIndex;
return m_arrColor[nIndex];
}
void CXTPDockingPanePaintManager::SetColors(int cElements, CONST INT* lpaElements, CONST COLORREF* lpaRgbValues)
{
for (int i = 0; i < cElements; i++)
m_arrColor[lpaElements[i]] = lpaRgbValues[i];
}
CXTPDockingPanePaintManager::~CXTPDockingPanePaintManager()
{
m_pTabPaintManager->InternalRelease();
m_pPanelPaintManager->InternalRelease();
SAFE_DELETE(m_themeToolbar);
SAFE_DELETE(m_themeExplorer);
SAFE_DELETE(m_themeButton);
SAFE_DELETE(m_themeWindow);
SAFE_DELETE(m_themeRebar);
}
CXTPTabPaintManager* CXTPDockingPanePaintManager::SetTabPaintManager(CXTPTabPaintManager* pManager)
{
m_pTabPaintManager->InternalRelease();
m_pTabPaintManager = pManager;
m_pTabPaintManager->SetLayout(xtpTabLayoutSizeToFit);
m_pTabPaintManager->SetPosition(xtpTabPositionBottom);
m_pTabPaintManager->m_bBoldSelected = FALSE;
m_pTabPaintManager->EnableToolTips();
pManager->RefreshMetrics();
return pManager;
}
CXTPTabPaintManager* CXTPDockingPanePaintManager::SetPanelPaintManager(CXTPTabPaintManager* pManager)
{
delete m_pPanelPaintManager;
m_pPanelPaintManager = pManager;
m_pPanelPaintManager->SetLayout(xtpTabLayoutCompressed);
m_pPanelPaintManager->m_clientFrame = xtpTabFrameNone;
m_pPanelPaintManager->m_bBoldSelected = FALSE;
m_pPanelPaintManager->m_bInvertGradient = TRUE;
m_pPanelPaintManager->m_bFillBackground = FALSE;
pManager->RefreshMetrics();
return pManager;
}
void CXTPDockingPanePaintManager::UseOfficeFont(BOOL bUseOfficeFont)
{
m_bUseOfficeFont = bUseOfficeFont;
RefreshMetrics();
}
void CXTPDockingPanePaintManager::SetCaptionFontIndirect(LOGFONT* pLogFont, BOOL bUseStandardFont /*= FALSE*/)
{
m_bUseStandardFont = bUseStandardFont;
if (!pLogFont)
return;
BOOL bUseSystemFont = (pLogFont->lfCharSet > SYMBOL_CHARSET);
if (m_bUseOfficeFont && !bUseSystemFont && bUseStandardFont && XTPDrawHelpers()->FontExists(_T("Tahoma")))
{
STRCPY_S(pLogFont->lfFaceName, LF_FACESIZE, _T("Tahoma"));
}
m_fntTitle.DeleteObject();
VERIFY(m_fntTitle.CreateFontIndirect(pLogFont));
pLogFont->lfOrientation = 900;
pLogFont->lfEscapement = 2700;
pLogFont->lfHeight = pLogFont->lfHeight < 0 ? __min(-11, pLogFont->lfHeight) : pLogFont->lfHeight;
STRCPY_S(pLogFont->lfFaceName, LF_FACESIZE, CXTPDrawHelpers::GetVerticalFontName(m_bUseOfficeFont));
m_fntTitleVertical.DeleteObject();
m_fntTitleVertical.CreateFontIndirect(pLogFont);
CWindowDC dc(CWnd::GetDesktopWindow());
CXTPFontDC font(&dc, &m_fntTitle);
m_nTitleHeight = max(13, dc.GetTextExtent(_T(" "), 1).cy) + m_nCaptionFontGap;
}
void CXTPDockingPanePaintManager::RefreshMetrics()
{
RefreshXtremeColors();
CXTPColorManager* pColorManager = XTPColorManager();
for (int i = 0; i <= XPCOLOR_LAST; i++)
m_arrColor[i] = pColorManager->GetColor(i);
m_clrSplitterGripper.SetStandardValue(m_arrColor[COLOR_3DSHADOW]);
m_clrSplitter.SetStandardValue(m_arrColor[COLOR_3DFACE]);
m_clrSplitterGradient.SetStandardValue(GetSysColor(COLOR_3DFACE), XTPColorManager()->LightColor(GetSysColor(COLOR_3DFACE), GetSysColor(COLOR_WINDOW), 0xcd));
m_clrDisabledCaptionText.SetStandardValue(m_arrColor[COLOR_GRAYTEXT]);
if (m_bUseStandardFont)
{
NONCLIENTMETRICS ncm =
{
sizeof(NONCLIENTMETRICS)
};
VERIFY(::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));
if (!m_bUseBoldCaptionFont)
ncm.lfSmCaptionFont.lfWeight = FW_NORMAL;
ncm.lfSmCaptionFont.lfCharSet = XTPResourceManager()->GetFontCharset();
SetCaptionFontIndirect(&ncm.lfSmCaptionFont, TRUE);
}
m_pTabPaintManager->RefreshMetrics();
m_pPanelPaintManager->RefreshMetrics();
CWindowDC dc(CWnd::GetDesktopWindow());
CXTPFontDC font(&dc, m_pTabPaintManager->GetFont(FALSE));
m_nTabsHeight = max(24, dc.GetTextExtent(_T(" "), 1).cy + 10);
m_themeExplorer->OpenTheme(0, L"EXPLORERBAR");
m_themeButton->OpenTheme(0, L"BUTTON");
m_themeToolbar->OpenThemeData(0, L"TOOLBAR");
m_themeWindow->OpenThemeData(0, L"WINDOW");
m_themeRebar->OpenThemeData(0, L"REBAR");
m_bLunaTheme = FALSE;
}
void CXTPDockingPanePaintManager::Line(CDC* pDC, int x0, int y0, int x1, int y1, int nPen)
{
CXTPPenDC pen(*pDC, GetXtremeColor(nPen));
pDC->MoveTo(x0, y0);
pDC->LineTo(x1, y1);
}
void CXTPDockingPanePaintManager::Line(CDC* pDC, int x0, int y0, int x1, int y1)
{
pDC->MoveTo(x0, y0);
pDC->LineTo(x1, y1);
}
void CXTPDockingPanePaintManager::Rectangle(CDC* pDC, CRect rc, int nBrush, int nPen)
{
pDC->FillSolidRect(rc, GetXtremeColor(nBrush));
pDC->Draw3dRect(rc, GetXtremeColor(nPen), GetXtremeColor(nPen));
}
void CXTPDockingPanePaintManager::Pixel(CDC* pDC, int x, int y, int nPen)
{
pDC->SetPixel(x, y, GetXtremeColor(nPen));
}
CRect CXTPDockingPanePaintManager::GetCaptionGripperRect(const CXTPDockingPaneTabbedContainer* /*pPane*/)
{
return CRect(0, 0, 0, 0);
}
void CXTPDockingPanePaintManager::DrawCaptionButtons(CDC* pDC, CXTPDockingPaneCaptionButtons* pButtons, CRect& rcCaption, COLORREF clr, int nButtonSize, int nButtonGap, BOOL bVertical)
{
if (!pButtons)
return;
CRect rcButton(
bVertical ? CPoint((rcCaption.left + rcCaption.right - nButtonSize) / 2, rcCaption.bottom - nButtonSize) :
CPoint(rcCaption.right - nButtonSize , (rcCaption.top + rcCaption.bottom - nButtonSize) / 2),
CSize(nButtonSize, nButtonSize));
for (int i = 0; i < pButtons->GetSize(); i++)
{
CXTPDockingPaneCaptionButton* pButton = pButtons->GetAt(i);
if (i == 0)
{
CXTPDockingPane* pPane = GetSelectedPane(pButton->GetPane());
if (pPane && ((pPane->GetEnabled() & xtpPaneEnableActions) == 0))
clr = m_clrDisabledCaptionText;
}
if (pButton->IsVisible())
{
pButton->SetRect(rcButton);
DrawCaptionButton(pDC, pButton, clr);
if (bVertical)
{
rcButton.OffsetRect(0, - nButtonSize - nButtonGap);
}
else
{
rcButton.OffsetRect(- nButtonSize - nButtonGap, 0);
}
}
else
{
pButton->SetRect(CXTPEmptyRect());
}
}
if (bVertical)
{
rcCaption.bottom = rcButton.bottom;
}
else
{
rcCaption.right = rcButton.right;
}
}
void CXTPDockingPanePaintManager::DrawCaptionButton(CDC* pDC, CXTPDockingPaneCaptionButton* pButton, COLORREF clrButton)
{
CRect rc = pButton->GetRect();
CPoint pt = rc.CenterPoint();
XTPDockingPaneCaptionButtonStyle nCaptionButtonStyle = m_nCaptionButtonStyle;
if (nCaptionButtonStyle == xtpPaneCaptionButtonThemedToolBar)
{
if (!m_themeToolbar->IsAppThemed())
{
nCaptionButtonStyle = xtpPaneCaptionButtonOffice;
}
else
{
if (pButton->IsPressed())
{
m_themeToolbar->DrawThemeBackground(pDC->GetSafeHdc(), TP_BUTTON, TS_PRESSED, &rc, 0);
}
else if (pButton->IsSelected())
{
m_themeToolbar->DrawThemeBackground(pDC->GetSafeHdc(), TP_BUTTON, TS_HOT, &rc, 0);
}
}
}
if (nCaptionButtonStyle == xtpPaneCaptionButtonThemedToolWindow)
{
if (!m_themeWindow->IsAppThemed() || pButton->GetID() != XTP_IDS_DOCKINGPANE_CLOSE )
{
nCaptionButtonStyle = xtpPaneCaptionButtonOffice;
}
else
{
BOOL bActive = TRUE;
if (pButton->GetPane()->GetType() == xtpPaneTypeTabbedContainer)
bActive = ((CXTPDockingPaneTabbedContainer*)pButton->GetPane())->IsActive();
if (pButton->GetPane()->GetType() == xtpPaneTypeMiniWnd)
bActive = ((CXTPDockingPaneMiniWnd*)pButton->GetPane())->IsActive();
int nState = pButton->IsPressed() ? CBS_PUSHED: pButton->IsSelected() ? CBS_HOT : !bActive ? 5 : CBS_NORMAL;
m_themeWindow->DrawThemeBackground(pDC->GetSafeHdc(), WP_SMALLCLOSEBUTTON, nState, &rc, 0);
return;
}
}
if (nCaptionButtonStyle == xtpPaneCaptionButtonThemedExplorerBar)
{
if (!m_themeExplorer->IsAppThemed())
{
nCaptionButtonStyle = xtpPaneCaptionButtonOffice;
}
else
{
if (pButton->GetID() == XTP_IDS_DOCKINGPANE_CLOSE || pButton->GetID() == XTP_IDS_DOCKINGPANE_AUTOHIDE)
{
BOOL bActive = TRUE;
if (pButton->GetPane()->GetType() == xtpPaneTypeTabbedContainer)
bActive = ((CXTPDockingPaneTabbedContainer*)pButton->GetPane())->IsActive();
if (pButton->GetPane()->GetType() == xtpPaneTypeMiniWnd)
bActive = ((CXTPDockingPaneMiniWnd*)pButton->GetPane())->IsActive();
bActive = m_bHighlightActiveCaption && bActive;
if (pButton->GetID() == XTP_IDS_DOCKINGPANE_CLOSE)
{
int nState = pButton->IsPressed() ? EBHC_PRESSED: bActive || pButton->IsSelected() ? EBHC_HOT : EBHC_NORMAL;
if (SUCCEEDED(m_themeExplorer->DrawThemeBackground(*pDC, EBP_HEADERCLOSE, nState, pButton->GetRect(), 0)))
return;
}
else
{
int nState = pButton->IsPressed() ? EBHP_PRESSED: pButton->IsSelected() ? EBHP_HOT : EBHP_NORMAL;
if (SUCCEEDED(m_themeExplorer->DrawThemeBackground(*pDC, EBP_HEADERPIN, (pButton->GetState() & xtpPanePinPushed ? 0 : 3) + nState, pButton->GetRect(), 0)))
return;
}
}
nCaptionButtonStyle = xtpPaneCaptionButtonThemedButton;
}
}
if (nCaptionButtonStyle == xtpPaneCaptionButtonThemedButton)
{
if (!m_themeButton->IsAppThemed())
{
nCaptionButtonStyle = xtpPaneCaptionButtonOffice;
}
else
{
int nState = pButton->IsPressed() ? PBS_PRESSED: pButton->IsSelected() ? PBS_HOT: PBS_NORMAL;
if (nState != PBS_NORMAL)
{
m_themeButton->DrawThemeBackground(*pDC, BP_PUSHBUTTON, nState, pButton->GetRect(), 0);
m_themeButton->GetThemeColor(BP_PUSHBUTTON, nState, TMT_TEXTCOLOR, &clrButton);
}
}
}
if (nCaptionButtonStyle == xtpPaneCaptionButtonDefault)
{
pDC->DrawFrameControl(&rc, DFC_BUTTON, DFCS_ADJUSTRECT | DFCS_BUTTONPUSH | (pButton->IsPressed() ? DFCS_PUSHED : 0));
if (pButton->IsPressed()) pt.Offset(1, 1);
}
if (nCaptionButtonStyle == xtpPaneCaptionButtonOffice)
{
if (pButton->IsPressed())
{
pDC->Draw3dRect(rc, GetXtremeColor(COLOR_BTNTEXT), GetXtremeColor(COLOR_BTNHILIGHT));
pt.Offset(1, 1);
}
else if (pButton->IsSelected())
pDC->Draw3dRect(rc, GetXtremeColor(COLOR_BTNHILIGHT), GetXtremeColor(COLOR_BTNTEXT));
}
if (nCaptionButtonStyle == xtpPaneCaptionButtonOffice2003)
{
if (pButton->IsSelected())
{
if (!m_bLunaTheme)
{
Rectangle(pDC, rc, XPCOLOR_HIGHLIGHT, XPCOLOR_HIGHLIGHT_BORDER);
clrButton = GetXtremeColor(XPCOLOR_HIGHLIGHT_TEXT);
}
else
{
XTPDrawHelpers()->GradientFill(pDC, rc, RGB(255, 242, 200), RGB(255, 212, 151), FALSE);
pDC->Draw3dRect(rc, GetXtremeColor(XPCOLOR_HIGHLIGHT_BORDER), GetXtremeColor(XPCOLOR_HIGHLIGHT_BORDER));
clrButton = 0;
}
}
if (pButton->IsPressed())
{
if (!m_bLunaTheme)
{
Rectangle(pDC, rc, XPCOLOR_HIGHLIGHT_PUSHED, XPCOLOR_HIGHLIGHT_BORDER);
clrButton = GetXtremeColor(XPCOLOR_PUSHED_TEXT);
}
else
{
XTPDrawHelpers()->GradientFill(pDC, rc, RGB(254, 142, 75), RGB(255, 207, 139), FALSE);
pDC->Draw3dRect(rc, GetXtremeColor(XPCOLOR_HIGHLIGHT_BORDER), GetXtremeColor(XPCOLOR_HIGHLIGHT_BORDER));
clrButton = 0;
}
}
}
DrawCaptionButtonEntry(pDC, pButton, pt, clrButton);
}
void CXTPDockingPanePaintManager::DrawPane(CDC* pDC, CXTPDockingPaneTabbedContainer* pPane, CRect rc)
{
pDC->FillSolidRect(rc, GetXtremeColor(COLOR_3DFACE));
pDC->SetBkMode(TRANSPARENT);
CRect rcCaption(rc);
if (pPane->IsTabsVisible())
{
AdjustCaptionRect(pPane, rc);
m_pTabPaintManager->DrawTabControl(pPane, pDC, rc);
}
if (pPane->IsTitleVisible())
{
DrawCaption(pDC, pPane, rcCaption);
}
}
void CXTPDockingPanePaintManager::GetCaptionRect(const CXTPDockingPaneTabbedContainer* pPane, CRect& rc)
{
if (pPane->IsTitleVisible())
{
GetClientRect(pPane->GetSafeHwnd(), rc);
if (pPane->IsCaptionVertical())
{
rc.right = rc.left + m_nTitleHeight + m_rcCaptionMargin.top + m_rcCaptionMargin.bottom;
}
else
{
rc.bottom = rc.top + m_nTitleHeight + m_rcCaptionMargin.top + m_rcCaptionMargin.bottom;
}
}
else
{
rc.SetRectEmpty();
}
}
void CXTPDockingPanePaintManager::AdjustCaptionRect(const CXTPDockingPaneTabbedContainer* pPane, CRect& rc)
{
if (pPane->IsTitleVisible())
{
if (pPane->IsCaptionVertical())
{
rc.left += m_nTitleHeight + m_rcCaptionMargin.top + m_rcCaptionMargin.bottom;
}
else
{
rc.top += m_nTitleHeight + m_rcCaptionMargin.top + m_rcCaptionMargin.bottom;
}
}
}
void CXTPDockingPanePaintManager::AdjustClientRect(CXTPDockingPaneTabbedContainer* pPane, CRect& rect, BOOL bApply)
{
CPoint pt = rect.TopLeft();
AdjustCaptionRect(pPane, rect);
if (pPane->IsTabsVisible())
{
if (bApply)
{
CClientDC dc(pPane);
CRect rcTabs(rect);
rcTabs.OffsetRect(-pt);
m_pTabPaintManager->RepositionTabControl(pPane, &dc, rcTabs);
}
m_pTabPaintManager->AdjustClientRect(pPane, rect);
}
}
void CXTPDockingPanePaintManager::AdjustClientRect(CXTPDockingPaneSidePanel* pPane, CRect& rect)
{
rect.DeflateRect(3, 3);
AdjustCaptionRect(pPane, rect);
}
void CXTPDockingPanePaintManager::AdjustCaptionRect(const CXTPDockingPaneSidePanel* pPane, CRect& rect)
{
int nTitleFont = GetCaptionHeight();
XTPDockingPaneDirection direction = pPane->GetDirection();
if (direction == xtpPaneDockLeft) rect.left += nTitleFont;
else if (direction == xtpPaneDockRight) rect.right -= nTitleFont;
else if (direction == xtpPaneDockTop) rect.top += nTitleFont;
else if (direction == xtpPaneDockBottom) rect.bottom -= nTitleFont;
}
CRect CXTPDockingPanePaintManager::GetPaneCaptionRect(const CXTPDockingPaneSidePanel* pPane)
{
CXTPClientRect rect(pPane);
rect.DeflateRect(1, 1);
int nTitleFont = GetCaptionHeight();
XTPDockingPaneDirection direction = pPane->GetDirection();
if (direction == xtpPaneDockLeft) rect.right = rect.left + nTitleFont;
else if (direction == xtpPaneDockRight) rect.left = rect.right - nTitleFont;
else if (direction == xtpPaneDockTop) rect.bottom = rect.top + nTitleFont;
else if (direction == xtpPaneDockBottom) rect.top = rect.bottom - nTitleFont;
return rect;
}
void CXTPDockingPanePaintManager::DrawSplitter(CDC* pDC, CXTPDockingPaneSplitterWnd* pSplitter)
{
CXTPClientRect rc((CWnd*)pSplitter);
if (m_dwSplitterStyle & xtpPaneSplitter3D)
{
pDC->FillSolidRect(rc, m_clrSplitter);
if (pSplitter->IsHorizontal())
{
pDC->FillSolidRect(0, 0, rc.Width(), 1, GetXtremeColor(COLOR_3DHIGHLIGHT));
pDC->FillSolidRect(0, rc.bottom - 2, rc.Width(), 1, GetXtremeColor(XPCOLOR_3DSHADOW));
pDC->FillSolidRect(0, rc.bottom - 1, rc.Width(), 1, GetXtremeColor(COLOR_BTNTEXT));
}
else
{
pDC->FillSolidRect(0, 0, 1, rc.Height(), GetXtremeColor(COLOR_3DHIGHLIGHT));
pDC->FillSolidRect(rc.right - 2, 0, 1, rc.Height(), GetXtremeColor(XPCOLOR_3DSHADOW));
pDC->FillSolidRect(rc.right - 1, 0, 1, rc.Height(), GetXtremeColor(COLOR_BTNTEXT));
}
}
else if (m_dwSplitterStyle & xtpPaneSplitterSoft3D)
{
int nCenter = m_nSplitterSize / 2;
if (pSplitter->IsHorizontal())
{
pDC->FillSolidRect(0, 0, rc.Width(), 1, GetXtremeColor(COLOR_3DDKSHADOW));
pDC->FillSolidRect(0, rc.bottom - 1, rc.Width(), 1, GetXtremeColor(COLOR_3DDKSHADOW));
pDC->FillSolidRect(0, 1, rc.Width(), nCenter - 1, GetXtremeColor(COLOR_WINDOW));
pDC->FillSolidRect(0, nCenter, rc.Width(), rc.Height() - nCenter - 1, m_clrSplitter);
}
else
{
pDC->FillSolidRect(0, 0, 1, rc.Height(), GetXtremeColor(COLOR_3DDKSHADOW));
pDC->FillSolidRect(rc.right - 1, 0, 1, rc.Height(), GetXtremeColor(COLOR_3DDKSHADOW));
pDC->FillSolidRect(1, 0, nCenter - 1, rc.Height(), GetXtremeColor(COLOR_WINDOW));
pDC->FillSolidRect(nCenter, 0, rc.Width() - nCenter - 1, rc.Height(), m_clrSplitter);
}
}
else if (m_dwSplitterStyle & xtpPaneSplitterGradient)
{
XTPFillFramePartRect(pDC, rc, (CWnd*)pSplitter, pSplitter->GetParent(), m_clrSplitterGradient, TRUE);
}
else if (m_dwSplitterStyle & xtpPaneSplitterGradientVert)
{
XTPFillFramePartRect(pDC, rc, (CWnd*)pSplitter, pSplitter->GetParent(), m_clrSplitterGradient, FALSE);
}
else
{
pDC->FillSolidRect(rc, m_clrSplitter);
}
if (m_dwSplitterStyle & xtpPaneSplitterGripperOfficeXP)
{
if (pSplitter->IsHorizontal())
{
pDC->FillSolidRect(rc.CenterPoint().x, 0 + 2, 11, 1, m_clrSplitterGripper);
pDC->FillSolidRect(rc.CenterPoint().x, 0 + 4, 11, 1, m_clrSplitterGripper);
}
else
{
pDC->FillSolidRect(2, rc.CenterPoint().y, 1, 11, m_clrSplitterGripper);
pDC->FillSolidRect(4, rc.CenterPoint().y, 1, 11, m_clrSplitterGripper);
}
}
if (m_dwSplitterStyle & xtpPaneSplitterGripperOffice2003)
{
if (pSplitter->IsHorizontal())
{
int nLeft = rc.CenterPoint().x - min(32, rc.Width() /2 - 10);
int nRight = rc.CenterPoint().x + min(32, rc.Width() /2 - 10);
int y = rc.CenterPoint().y - 1;
for (int x = nLeft; x < nRight; x += 4)
{
pDC->FillSolidRect(CRect(x + 1, y + 1, x + 3, y + 3), GetXtremeColor(COLOR_BTNHIGHLIGHT));
pDC->FillSolidRect(CRect(x, y, x + 2, y + 2), m_clrSplitterGripper);
}
}
else
{
int nTop = rc.CenterPoint().y - min(32, rc.Height() /2 - 10);
int nBottom = rc.CenterPoint().y + min(32, rc.Height() /2 - 10);
int x = rc.CenterPoint().x - 1;
for (int y = nTop; y < nBottom; y += 4)
{
pDC->FillSolidRect(CRect(x + 1, y + 1, x + 3, y + 3), GetXtremeColor(COLOR_BTNHIGHLIGHT));
pDC->FillSolidRect(CRect(x, y, x + 2, y + 2), m_clrSplitterGripper);
}
}
}
}
//////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneVisualStudio6Theme
CXTPDockingPaneVisualStudio6Theme::CXTPDockingPaneVisualStudio6Theme()
{
m_nCaptionButtonStyle = xtpPaneCaptionButtonDefault;
}
void CXTPDockingPaneVisualStudio6Theme::DrawCaptionPart(CDC* pDC, CXTPDockingPaneBase* pPane, CRect rcCaption, const CString& strTitle, BOOL bActive, BOOL bVertical)
{
UNREFERENCED_PARAMETER(strTitle);
UNREFERENCED_PARAMETER(bActive);
XTPDeflateRectDirection(rcCaption, 0, 0, 2, 0, bVertical);
DrawCaptionButtons(pDC, pPane->GetCaptionButtons(), rcCaption, m_clrNormalCaptionText, 14, 2, bVertical);
int nOffset = 4;
XTPDeflateRectDirection(rcCaption, 4, 1, 2, 0, bVertical);
if (bVertical)
{
if (rcCaption.bottom > nOffset)
{
int nCenter = rcCaption.CenterPoint().x;
pDC->Draw3dRect(nCenter - 3, nOffset, 3, rcCaption.bottom - nOffset, GetXtremeColor(COLOR_BTNHILIGHT), GetXtremeColor(COLOR_3DSHADOW));
pDC->Draw3dRect(nCenter + 1, nOffset, 3, rcCaption.bottom - nOffset, GetXtremeColor(COLOR_BTNHILIGHT), GetXtremeColor(COLOR_3DSHADOW));
}
}
else
{
if (rcCaption.right > nOffset)
{
int nCenter = rcCaption.CenterPoint().y;
pDC->Draw3dRect(nOffset, nCenter - 3, rcCaption.right - nOffset, 3, GetXtremeColor(COLOR_BTNHILIGHT), GetXtremeColor(COLOR_3DSHADOW));
pDC->Draw3dRect(nOffset, nCenter + 1, rcCaption.right - nOffset, 3, GetXtremeColor(COLOR_BTNHILIGHT), GetXtremeColor(COLOR_3DSHADOW));
}
}
}
///////////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneVisualStudio2003Theme
class CXTPDockingPaneVisualStudio2003Theme::COfficePanelColorSet :
public CXTPTabPaintManager::CColorSetVisualStudio2003
{
public:
virtual void RefreshMetrics();
};
void CXTPDockingPaneVisualStudio2003Theme::COfficePanelColorSet::RefreshMetrics()
{
CColorSetVisualStudio2003::RefreshMetrics();
if (m_pPaintManager->GetAppearance() == xtpTabAppearanceFlat)
{
m_clrSelectedText.SetStandardValue(GetSysColor(COLOR_3DDKSHADOW));
m_clrNormalText.SetStandardValue(GetSysColor(COLOR_3DDKSHADOW));
}
}
CXTPDockingPaneVisualStudio2003Theme::CXTPDockingPaneVisualStudio2003Theme()
{
m_pPanelPaintManager->SetAppearance(xtpTabAppearanceFlat);
m_pPanelPaintManager->SetColorSet(new COfficePanelColorSet);
m_pTabPaintManager->SetAppearance(xtpTabAppearanceVisualStudio);
m_bGradientCaption = FALSE;
m_bUseBoldCaptionFont = FALSE;
m_nCaptionButtonSize = 14;
}
void CXTPDockingPaneVisualStudio2003Theme::RefreshMetrics()
{
CXTPDockingPaneGripperedTheme::RefreshMetrics();
m_clrActiveCaption.SetStandardValue(GetXtremeColor(COLOR_ACTIVECAPTION), GetXtremeColor(27));
m_clrNormalCaption.SetStandardValue(GetXtremeColor(COLOR_INACTIVECAPTION), GetSysColor(28));
m_clrNormalCaptionText.SetStandardValue(GetXtremeColor(COLOR_BTNTEXT));
m_clrActiveCaptionText.SetStandardValue(GetXtremeColor(COLOR_CAPTIONTEXT));
if (XTPSystemVersion()->IsWin95())
{
// Windows 95
m_clrNormalCaption.SetStandardValue(GetXtremeColor(COLOR_INACTIVECAPTION));
m_clrActiveCaption.SetStandardValue(GetXtremeColor(COLOR_ACTIVECAPTION));
}
}
COLORREF CXTPDockingPaneVisualStudio2003Theme::FillCaptionPart(CDC* pDC, CXTPDockingPaneBase* pPane, CRect rcCaption, BOOL bActive, BOOL bVertical)
{
if (m_bGradientCaption)
{
XTPDrawHelpers()->GradientFill(pDC, rcCaption, bActive ? m_clrActiveCaption : m_clrNormalCaption, !bVertical);
}
else
{
if (bActive)
{
pDC->FillSolidRect(rcCaption, m_clrActiveCaption.clrLight);
}
else if (pPane->GetType() != xtpPaneTypeSidePanel)
{
CXTPPenDC pen(*pDC, GetXtremeColor(XPCOLOR_3DSHADOW));
pDC->MoveTo(rcCaption.left + 1, rcCaption.top); pDC->LineTo(rcCaption.right - 1 , rcCaption.top);
pDC->MoveTo(rcCaption.left, rcCaption.top + 1); pDC->LineTo(rcCaption.left, rcCaption.bottom - 1);
pDC->MoveTo(rcCaption.left + 1, rcCaption.bottom - 1); pDC->LineTo(rcCaption.right - 1 , rcCaption.bottom - 1);
pDC->MoveTo(rcCaption.right -1 , rcCaption.top + 1); pDC->LineTo(rcCaption.right - 1, rcCaption.bottom - 1);
}
}
return bActive ? m_clrActiveCaptionText : m_clrNormalCaptionText;
}
void CXTPDockingPaneVisualStudio2003Theme::DrawCaptionPart(CDC* pDC, CXTPDockingPaneBase* pPane, CRect rcCaption, const CString& strTitle, BOOL bActive, BOOL bVertical)
{
COLORREF clrButton = FillCaptionPart(pDC, pPane, rcCaption, bActive, bVertical);
COLORREF clrText = bActive ? m_clrActiveCaptionText : m_clrNormalCaptionText;
XTPDeflateRectDirection(rcCaption, 0, 0, 2, 0, bVertical);
DrawCaptionButtons(pDC, pPane->GetCaptionButtons(), rcCaption, clrButton, m_nCaptionButtonSize, 2, bVertical);
// Title text
pDC->SetTextColor(IsCaptionEnabled(pPane) ? clrText : m_clrDisabledCaptionText);
XTPDeflateRectDirection(rcCaption, 4, 1, 0, 0, bVertical);
DrawCaptionIcon(pDC, pPane, rcCaption, bVertical);
DrawCaptionText(pDC, strTitle, rcCaption, bVertical);
}
///////////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneDefaultTheme
CXTPDockingPaneDefaultTheme::CXTPDockingPaneDefaultTheme()
{
m_pPanelPaintManager->SetAppearance(xtpTabAppearancePropertyPage);
m_pTabPaintManager->SetAppearance(xtpTabAppearancePropertyPage);
m_nCaptionButtonStyle = xtpPaneCaptionButtonDefault;
}
void CXTPDockingPaneDefaultTheme::RefreshMetrics()
{
CXTPDockingPanePaintManager::RefreshMetrics();
m_clrActiveCaption.SetStandardValue(GetXtremeColor(COLOR_ACTIVECAPTION));
m_clrNormalCaption.SetStandardValue(GetXtremeColor(COLOR_INACTIVECAPTION));
m_clrActiveCaptionText.SetStandardValue(GetXtremeColor(COLOR_CAPTIONTEXT));
m_clrNormalCaptionText.SetStandardValue(GetXtremeColor(COLOR_INACTIVECAPTIONTEXT));
}
void CXTPDockingPaneDefaultTheme::DrawFloatingFrame(CDC* pDC, CXTPDockingPaneMiniWnd* pPane, CRect rc)
{
pDC->Draw3dRect(rc, GetXtremeColor(COLOR_3DFACE), 0);
rc.DeflateRect(1, 1);
pDC->Draw3dRect(rc, GetXtremeColor(COLOR_3DHIGHLIGHT), GetXtremeColor(COLOR_3DSHADOW));
rc.DeflateRect(1, 1);
pDC->Draw3dRect(rc, GetXtremeColor(COLOR_3DFACE), GetXtremeColor(COLOR_3DFACE));
int nTitleHeight = m_nTitleHeight;
CRect rcCaption(rc);
rcCaption.DeflateRect(0, 0, 0, rc.Height() - nTitleHeight - 3);
CXTPBufferDC dcCache(*pDC, rcCaption);
dcCache.SetBkMode(TRANSPARENT);
dcCache.FillSolidRect(rcCaption, GetXtremeColor(COLOR_3DFACE));
CString strTitle;
pPane->GetWindowText(strTitle);
rcCaption.DeflateRect(1, 2, 1, 2);
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
DrawCaptionPart(&dcCache, pPane, rcCaption, strTitle, bActive, FALSE);
}
void CXTPDockingPaneDefaultTheme::DrawSidePanel(CDC* pDC, CXTPDockingPaneSidePanel* pPane, CRect rc)
{
pDC->FillSolidRect(rc, GetXtremeColor(COLOR_3DFACE));
pDC->SetBkMode(TRANSPARENT);
pDC->Draw3dRect(rc, GetXtremeColor(COLOR_WINDOWFRAME), GetXtremeColor(COLOR_WINDOWFRAME));
CRect rcCaption = GetPaneCaptionRect(pPane);
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
CString strTitle = pPane->GetTitle();
DrawCaptionPart(pDC, pPane, rcCaption, strTitle, bActive, pPane->GetDirection() == xtpPaneDockLeft || pPane->GetDirection() == xtpPaneDockRight);
}
void CXTPDockingPaneDefaultTheme::DrawCaptionPart(CDC* pDC, CXTPDockingPaneBase* pPane, CRect rcCaption, const CString& strTitle, BOOL bActive, BOOL bVertical)
{
pDC->FillSolidRect(rcCaption, bActive ? m_clrActiveCaption : m_clrNormalCaption);
XTPDeflateRectDirection(rcCaption, 0, 0, 2, 0, bVertical);
DrawCaptionButtons(pDC, pPane->GetCaptionButtons(), rcCaption, GetXtremeColor(COLOR_BTNTEXT), 14, 0, bVertical);
pDC->SetTextColor(IsCaptionEnabled(pPane) ? (bActive ? m_clrActiveCaptionText : m_clrNormalCaptionText) : m_clrDisabledCaptionText);
XTPDeflateRectDirection(rcCaption, 4, 1, 0, 0, bVertical);
DrawCaptionIcon(pDC, pPane, rcCaption, bVertical);
DrawCaptionText(pDC, strTitle, rcCaption, bVertical);
}
void CXTPDockingPaneDefaultTheme::DrawCaption(CDC* pDC, CXTPDockingPaneTabbedContainer* pPane, CRect rc)
{
BOOL bVertical = pPane->IsCaptionVertical();
CRect rcCaption(rc);
XTPDeflateRectDirection(rcCaption, 0, 2, 0, XTPGetRectDirectionHeight(rc, bVertical) - m_nTitleHeight - 1, bVertical);
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
if (bVertical)
{
pDC->FillSolidRect(rc.left, rc.top, rcCaption.right + 2, rcCaption.Height(), GetXtremeColor(COLOR_3DFACE));
}
else
{
pDC->FillSolidRect(rc.left, rc.top, rc.Width(), rcCaption.bottom + 2, GetXtremeColor(COLOR_3DFACE));
}
DrawCaptionPart(pDC, pPane, rcCaption, pPane->GetTitle(), bActive, bVertical);
}
///////////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneGripperedTheme
void CXTPDockingPanePaintManager::DrawCaptionButtonEntry(CDC* pDC, CXTPDockingPaneCaptionButton* pButton, CPoint pt, COLORREF clrButton)
{
CXTPPenDC pen(*pDC, clrButton);
if (pButton->GetID() == XTP_IDS_DOCKINGPANE_CLOSE)
{
pDC->MoveTo(pt.x - 4, pt.y - 3 - 1); pDC->LineTo(pt.x + 3 , pt.y + 4 - 1);
pDC->MoveTo(pt.x - 4, pt.y + 3 - 1); pDC->LineTo(pt.x + 3 , pt.y - 4 - 1);
pDC->MoveTo(pt.x - 3, pt.y - 3 - 1); pDC->LineTo(pt.x + 4 , pt.y + 4 - 1);
pDC->MoveTo(pt.x - 3, pt.y + 3 - 1); pDC->LineTo(pt.x + 4 , pt.y - 4 - 1);
}
else if (pButton->GetID() == XTP_IDS_DOCKINGPANE_AUTOHIDE)
{
CXTPDockingPaneCaptionButton::DrawPinnButton(pDC, pt, pButton->GetState() & xtpPanePinPushed);
}
else if (pButton->GetID() == XTP_IDS_DOCKINGPANE_MAXIMIZE || pButton->GetID() == XTP_IDS_DOCKINGPANE_RESTORE)
{
CXTPDockingPaneCaptionButton::DrawMaximizeRestoreButton(pDC, pt, pButton->GetID() == XTP_IDS_DOCKINGPANE_MAXIMIZE, clrButton);
}
else if (pButton->GetID() == XTP_IDS_DOCKINGPANE_MENU)
{
CXTPBrushDC brush (*pDC, clrButton);
CPoint pts[] =
{
CPoint(pt.x - 4, pt.y - 1), CPoint(pt.x - 1, pt.y + 2) , CPoint(pt.x, pt.y + 2), CPoint(pt.x + 3, pt.y - 1)
};
pDC->Polygon(pts, 4);
}
}
CXTPDockingPaneGripperedTheme::CXTPDockingPaneGripperedTheme()
{
m_nCaptionButtonStyle = xtpPaneCaptionButtonOffice;
}
void CXTPDockingPaneGripperedTheme::RefreshMetrics()
{
CXTPDockingPaneDefaultTheme::RefreshMetrics();
m_clrActiveCaption.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
m_clrNormalCaption.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
m_clrActiveCaptionText.SetStandardValue(GetXtremeColor(COLOR_BTNTEXT));
m_clrNormalCaptionText.SetStandardValue(GetXtremeColor(COLOR_BTNTEXT));
}
void CXTPDockingPaneGripperedTheme::DrawCaptionPart(CDC* pDC, CXTPDockingPaneBase* pPane, CRect rcCaption, const CString& strTitle, BOOL bActive, BOOL bVertical)
{
COLORREF clrText = bActive ? m_clrActiveCaptionText : m_clrNormalCaptionText;
XTPDeflateRectDirection(rcCaption, 0, 0, 2, 0, bVertical);
DrawCaptionButtons(pDC, pPane->GetCaptionButtons(), rcCaption, clrText, 14, 2, bVertical);
int nOffset = 4;
XTPDeflateRectDirection(rcCaption, 4, 1, 2, 0, bVertical);
if (!strTitle.IsEmpty())
{
pDC->SetTextColor(IsCaptionEnabled(pPane) ? clrText : m_clrDisabledCaptionText);
DrawCaptionIcon(pDC, pPane, rcCaption, bVertical);
int nWidth = DrawCaptionText(pDC, strTitle, rcCaption, bVertical, TRUE);
nOffset = nWidth + 4 + (bVertical ? rcCaption.top : rcCaption.left);
}
if (bVertical)
{
if (rcCaption.bottom > nOffset)
{
int nCenter = rcCaption.CenterPoint().x;
pDC->Draw3dRect(nCenter - 3, nOffset, 3, rcCaption.bottom - nOffset, GetXtremeColor(COLOR_BTNHILIGHT), GetXtremeColor(COLOR_3DSHADOW));
pDC->Draw3dRect(nCenter + 1, nOffset, 3, rcCaption.bottom - nOffset, GetXtremeColor(COLOR_BTNHILIGHT), GetXtremeColor(COLOR_3DSHADOW));
}
}
else
{
if (rcCaption.right > nOffset)
{
int nCenter = rcCaption.CenterPoint().y;
pDC->Draw3dRect(nOffset, nCenter - 3, rcCaption.right - nOffset, 3, GetXtremeColor(COLOR_BTNHILIGHT), GetXtremeColor(COLOR_3DSHADOW));
pDC->Draw3dRect(nOffset, nCenter + 1, rcCaption.right - nOffset, 3, GetXtremeColor(COLOR_BTNHILIGHT), GetXtremeColor(COLOR_3DSHADOW));
}
}
}
void CXTPDockingPaneGripperedTheme::DrawFloatingFrame(CDC* pDC, CXTPDockingPaneMiniWnd* pPane, CRect rc)
{
CXTPDockingPaneDefaultTheme::DrawFloatingFrame(pDC, pPane, rc);
}
void CXTPDockingPaneGripperedTheme::DrawCaption(CDC* pDC, CXTPDockingPaneTabbedContainer* pPane, CRect rc)
{
BOOL bVertical = pPane->IsCaptionVertical();
int nTitleHeight = m_nTitleHeight;
CRect rcCaption(rc);
XTPDeflateRectDirection(rcCaption, 0, m_rcCaptionMargin.top, 0, XTPGetRectDirectionHeight(rc, bVertical) - nTitleHeight - 1, bVertical);
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
if (bVertical)
{
pDC->FillSolidRect(rc.left, rc.top, rcCaption.right + 2, rc.Height(), GetXtremeColor(COLOR_3DFACE));
}
else
{
pDC->FillSolidRect(rc.left, rc.top, rc.Width(), rcCaption.bottom + 2, GetXtremeColor(COLOR_3DFACE));
}
DrawCaptionPart(pDC, pPane, rcCaption, pPane->GetTitle(), bActive, bVertical);
}
//////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneWinExplorerTheme
CXTPDockingPaneWinExplorerTheme::CXTPDockingPaneWinExplorerTheme()
{
m_bUseBoldCaptionFont = FALSE;
m_rcCaptionMargin.SetRect(0, 0, 0, 0);
m_nCaptionFontGap = 9;
m_nCaptionButtonStyle = xtpPaneCaptionButtonThemedToolBar;
}
void CXTPDockingPaneWinExplorerTheme::DrawCaptionPart(CDC* pDC, CXTPDockingPaneBase* pPane, CRect rcCaption, const CString& strTitle, BOOL bActive, BOOL bVertical)
{
if (m_themeRebar->IsAppThemed())
{
CWnd* pWnd = CWnd::FromHandle(pPane->GetPaneHwnd());
ASSERT(pWnd);
if (!pWnd)
return;
if (pPane->GetType() == xtpPaneTypeMiniWnd)
{
CRect rcClient;
pWnd->GetWindowRect(rcClient);
rcClient.OffsetRect(-rcClient.TopLeft());
m_themeRebar->DrawThemeBackground(pDC->GetSafeHdc(), 0, 0, &rcClient, &rcCaption);
}
else
{
CWnd* pParent = pPane->GetDockingSite();
CRect rc, rcParent, rcClient, rcClipRect;
pWnd->GetClientRect(&rcClient);
rcClipRect = rcClient;
if (pParent)
{
pParent->GetWindowRect(rcParent);
pWnd->GetWindowRect(rc);
rcClient.TopLeft() += rcParent.TopLeft() - rc.TopLeft();
rcClient.BottomRight() += rcParent.BottomRight() - rc.BottomRight();
}
m_themeRebar->DrawThemeBackground(pDC->GetSafeHdc(), 0, 0, &rcClient, &rcCaption);
}
}
COLORREF clrText = bActive ? m_clrActiveCaptionText : m_clrNormalCaptionText;
XTPDeflateRectDirection(rcCaption, 0, 0, 2, 0, bVertical);
DrawCaptionButtons(pDC, pPane->GetCaptionButtons(), rcCaption, clrText, 16, 2, bVertical);
pDC->SetTextColor(IsCaptionEnabled(pPane) ? clrText : m_clrDisabledCaptionText);
XTPDeflateRectDirection(rcCaption, 4, 1, 0, 0, bVertical);
DrawCaptionIcon(pDC, pPane, rcCaption, bVertical);
DrawCaptionText(pDC, strTitle, rcCaption, bVertical);
}
void CXTPDockingPaneWinExplorerTheme::RefreshMetrics()
{
CXTPDockingPaneGripperedTheme::RefreshMetrics();
if (m_themeRebar->IsAppThemed())
{
m_pPanelPaintManager->SetAppearance(xtpTabAppearancePropertyPage);
m_pPanelPaintManager->SetColor(xtpTabColorWinNative);
m_pPanelPaintManager->m_bHotTracking = TRUE;
m_pTabPaintManager->SetAppearance(xtpTabAppearancePropertyPage);
m_pTabPaintManager->SetColor(xtpTabColorWinNative);
m_pTabPaintManager->m_bHotTracking = TRUE;
}
else
{
m_pPanelPaintManager->SetAppearance(xtpTabAppearanceFlat);
m_pPanelPaintManager->m_bHotTracking = FALSE;
m_pTabPaintManager->SetAppearance(xtpTabAppearanceVisualStudio);
m_pTabPaintManager->m_bHotTracking = FALSE;
}
}
///////////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneOffice2002VisioTheme
CXTPDockingPaneOffice2002VisioTheme::CXTPDockingPaneOffice2002VisioTheme()
{
m_pPanelPaintManager->SetAppearance(xtpTabAppearanceFlat);
m_pTabPaintManager->SetAppearance(xtpTabAppearanceVisio);
m_pTabPaintManager->SetPosition(xtpTabPositionTop);
m_nCaptionFontGap = 2;
m_nCaptionButtonStyle = xtpPaneCaptionButtonOffice2003;
}
void CXTPDockingPaneOffice2002VisioTheme::RefreshMetrics()
{
CXTPDockingPanePaintManager::RefreshMetrics();
}
void CXTPDockingPaneOffice2002VisioTheme::AdjustCaptionRect(const CXTPDockingPaneTabbedContainer* pPane, CRect& rc)
{
CXTPDockingPaneVisualStudio2003Theme::AdjustCaptionRect(pPane, rc);
BOOL bVertical = pPane->IsCaptionVertical();
XTPDeflateRectDirection(rc, 3, 0, 3, 3, bVertical);
if (!pPane->IsTitleVisible())
{
rc.DeflateRect(0, 3, 0, 0);
}
if (!pPane->IsTabsVisible() && m_pTabPaintManager->m_clientFrame != xtpTabFrameNone)
{
rc.DeflateRect(1, 1);
}
}
void CXTPDockingPaneOffice2002VisioTheme::DrawPane(CDC* pDC, CXTPDockingPaneTabbedContainer* pPane, CRect rc)
{
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
pDC->FillSolidRect(rc, GetXtremeColor(bActive ? XPCOLOR_HIGHLIGHT : XPCOLOR_TOOLBAR_FACE));
pDC->SetBkMode(TRANSPARENT);
CRect rcClient(rc);
if (pPane->IsTitleVisible())
{
pDC->FillSolidRect(rc.left, rc.top, rc.Width(), 1, m_clrSplitter);
DrawCaption(pDC, pPane, rc);
rcClient.top++;
}
AdjustCaptionRect(pPane, rc);
if (pPane->IsTabsVisible())
{
m_pTabPaintManager->DrawTabControl(pPane, pDC, rc);
}
else if (m_pTabPaintManager->m_clientFrame != xtpTabFrameNone)
{
pDC->Draw3dRect(rc.left - 1, rc.top - 1, rc.Width() + 2, rc.Height() + 2, m_pTabPaintManager->GetColorSet()->m_clrFrameBorder, m_pTabPaintManager->GetColorSet()->m_clrFrameBorder);
}
Pixel(pDC, rcClient.left, rcClient.top, XPCOLOR_3DFACE);
Pixel(pDC, rcClient.right - 1, rcClient.top, XPCOLOR_3DFACE);
Pixel(pDC, rcClient.left, rcClient.bottom -1, XPCOLOR_3DFACE);
Pixel(pDC, rcClient.right - 1, rcClient.bottom -1, XPCOLOR_3DFACE);
}
void CXTPDockingPaneOffice2002VisioTheme::DrawFloatingFrame(CDC* pDC, CXTPDockingPaneMiniWnd* pPane, CRect rc)
{
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
COLORREF clrFrame = GetXtremeColor(bActive ? XPCOLOR_HIGHLIGHT : XPCOLOR_TOOLBAR_FACE);
pDC->Draw3dRect(rc, clrFrame, 0);
rc.DeflateRect(1, 1);
pDC->Draw3dRect(rc, GetXtremeColor(COLOR_3DHIGHLIGHT), GetXtremeColor(COLOR_3DSHADOW));
rc.DeflateRect(1, 1);
pDC->Draw3dRect(rc, clrFrame, clrFrame);
int nTitleHeight = m_nTitleHeight;
CRect rcCaption(rc);
rcCaption.DeflateRect(0, 0, 0, rc.Height() - nTitleHeight - 3);
pDC->FillSolidRect(rcCaption, clrFrame);
rcCaption.right -= 2;
DrawCaptionButtons(pDC, pPane->GetCaptionButtons(), rcCaption, GetXtremeColor(COLOR_BTNTEXT), 16, 0, FALSE);
CString strTitle;
pPane->GetWindowText(strTitle);
int nRight = rcCaption.right;
COLORREF clrText = GetXtremeColor(COLOR_BTNTEXT);
int nLeft = 4;
if (!strTitle.IsEmpty())
{
pDC->SetBkMode(TRANSPARENT);
CRect rcText(rcCaption.left + 4, rcCaption.top + 1, nRight - 2, rcCaption.bottom);
pDC->SetTextColor(clrText);
CXTPFontDC font(pDC, &m_fntTitle);
pDC->DrawText(strTitle, rcText, DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER | DT_NOPREFIX);
CRect rcCalc(0, 0, 0, 0);
pDC->DrawText(strTitle, rcCalc, DT_CALCRECT | DT_SINGLELINE | DT_NOPREFIX);
nLeft = rcCalc.Width() + rcCaption.left + 14;
}
nRight -= 4;
if (nRight - nLeft > 0)
{
int nCenter = rcCaption.CenterPoint().y;
Line(pDC, nLeft, nCenter - 3, nRight, nCenter - 3, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
Line(pDC, nLeft, nCenter - 1, nRight, nCenter - 1, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
Line(pDC, nLeft, nCenter + 1, nRight, nCenter + 1, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
Line(pDC, nLeft, nCenter + 3, nRight, nCenter + 3, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
}
}
void CXTPDockingPaneOffice2002VisioTheme::DrawCaption(CDC* pDC, CXTPDockingPaneTabbedContainer* pPane, CRect rc)
{
BOOL bVertical = pPane->IsCaptionVertical();
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
int nTitleHeight = m_nTitleHeight;
CString strTitle = pPane->GetTitle();
CRect rcCaption(rc);
XTPDeflateRectDirection(rcCaption, 0, 2, 1, XTPGetRectDirectionHeight(rc, bVertical) - nTitleHeight - 3, bVertical);
DrawCaptionButtons(pDC, pPane->GetCaptionButtons(), rcCaption, 0, 16, 0, bVertical);
COLORREF clrText = GetXtremeColor(COLOR_BTNTEXT);
int nOffset = 4;
XTPDeflateRectDirection(rcCaption, 4, 1, 2, 0, bVertical);
if (!strTitle.IsEmpty())
{
pDC->SetTextColor(IsCaptionEnabled(pPane) ? clrText : m_clrDisabledCaptionText);
int nWidth = DrawCaptionText(pDC, strTitle, rcCaption, bVertical, TRUE);
nOffset = nWidth + 10 + (bVertical ? rcCaption.top : rcCaption.left);
}
if (bVertical)
{
if (rcCaption.bottom - nOffset > 0)
{
int nCenter = rcCaption.CenterPoint().x;
Line(pDC, nCenter - 3, nOffset, nCenter - 3, rcCaption.bottom, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
Line(pDC, nCenter - 1, nOffset, nCenter - 1, rcCaption.bottom, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
Line(pDC, nCenter + 1, nOffset, nCenter + 1, rcCaption.bottom, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
Line(pDC, nCenter + 3, nOffset, nCenter + 3, rcCaption.bottom, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
}
}
else
{
if (rcCaption.right - nOffset > 0)
{
int nCenter = rcCaption.CenterPoint().y;
Line(pDC, nOffset, nCenter - 3, rcCaption.right, nCenter - 3, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
Line(pDC, nOffset, nCenter - 1, rcCaption.right, nCenter - 1, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
Line(pDC, nOffset, nCenter + 1, rcCaption.right, nCenter + 1, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
Line(pDC, nOffset, nCenter + 3, rcCaption.right, nCenter + 3, !bActive ? XPCOLOR_TOOLBAR_GRIPPER : COLOR_BTNTEXT);
}
}
}
///////////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneOffice2003VisioTheme
CXTPDockingPaneOffice2003VisioTheme::CXTPDockingPaneOffice2003VisioTheme()
{
}
///////////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneOffice2007VisioTheme
CXTPDockingPaneOffice2007VisioTheme::CXTPDockingPaneOffice2007VisioTheme()
{
}
///////////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneOffice2003Theme
CXTPDockingPaneOffice2003Theme::CXTPDockingPaneOffice2003Theme()
{
m_bDrawGripper = TRUE;
m_bRoundedCaption = TRUE;
m_nCaptionFontGap = 7;
m_bUseBoldCaptionFont = TRUE;
m_pPanelPaintManager->SetAppearance(xtpTabAppearancePropertyPageFlat);
m_pPanelPaintManager->SetColor(xtpTabColorOffice2003);
m_pPanelPaintManager->m_bHotTracking = TRUE;
m_pTabPaintManager->SetAppearance(xtpTabAppearancePropertyPageFlat);
m_pTabPaintManager->SetColor(xtpTabColorOffice2003);
m_pTabPaintManager->m_bHotTracking = TRUE;
m_nCaptionButtonStyle = xtpPaneCaptionButtonOffice2003;
}
CXTPDockingPaneOffice2003Theme::~CXTPDockingPaneOffice2003Theme()
{
}
void CXTPDockingPaneOffice2003Theme::RefreshMetrics()
{
CXTPDockingPaneVisualStudio2003Theme::RefreshMetrics();
m_clrNormalCaption.SetStandardValue(XTPColorManager()->LightColor(GetXtremeColor(COLOR_3DFACE), GetXtremeColor(COLOR_WINDOW), 0xcd), GetXtremeColor(COLOR_3DFACE));
m_clrNormalCaptionText.SetStandardValue(GetXtremeColor(COLOR_BTNTEXT));
m_clrActiveCaption.SetStandardValue(GetXtremeColor(XPCOLOR_HIGHLIGHT_CHECKED));
m_clrActiveCaptionText.SetStandardValue(GetXtremeColor(COLOR_BTNTEXT));
m_bLunaTheme = FALSE;
if (XTPColorManager()->IsLowResolution())
{
m_clrNormalCaption.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
m_clrActiveCaption.SetStandardValue(GetXtremeColor(COLOR_HIGHLIGHT));
m_clrActiveCaptionText.SetStandardValue(GetXtremeColor(COLOR_HIGHLIGHTTEXT));
}
XTPCurrentSystemTheme systemTheme = GetCurrentSystemTheme();
switch (systemTheme)
{
case xtpSystemThemeBlue:
case xtpSystemThemeRoyale:
case xtpSystemThemeAero:
{
m_clrNormalCaption.SetStandardValue(RGB(221, 236, 254), RGB(129, 169, 226), 0.75f);
m_clrSplitter.SetStandardValue(RGB(216, 231, 252));
m_clrSplitterGripper.SetStandardValue(GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
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(158, 190, 245), 0
};
SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
m_bLunaTheme = TRUE;
}
break;
case xtpSystemThemeOlive:
{
m_clrNormalCaption.SetStandardValue(RGB(244, 247, 222), RGB(183, 198, 145), 0.3f);
m_clrSplitter.SetStandardValue(RGB(226, 231, 191));
m_clrSplitterGripper.SetStandardValue(GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
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(217, 217, 167), 0
};
SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
m_bLunaTheme = TRUE;
}
break;
case xtpSystemThemeSilver:
{
m_clrNormalCaption.SetStandardValue(RGB(249, 249, 255), RGB(156, 155, 183), 0.75f);
m_clrSplitter.SetStandardValue(RGB(223, 223, 234));
m_clrSplitterGripper.SetStandardValue(GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
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(215, 215, 229), 0
};
SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
m_bLunaTheme = TRUE;
}
break;
}
if (m_bLunaTheme)
{
m_clrActiveCaption.SetStandardValue(RGB(255, 213, 140), RGB(255, 166, 76));
m_clrSplitterGradient.SetStandardValue(XTPColorManager()->grcDockBar);
}
}
CRect CXTPDockingPaneOffice2003Theme::GetCaptionGripperRect(const CXTPDockingPaneTabbedContainer* /*pPane*/)
{
return CRect(0, 0, 10, m_nTitleHeight);
}
CRect CXTPDockingPaneOffice2003Theme::GetPaneCaptionRect(const CXTPDockingPaneSidePanel* pPane)
{
CXTPClientRect rect(pPane);
rect.DeflateRect(1, 1);
int nTitleFont = GetCaptionHeight() + 2;
XTPDockingPaneDirection direction = pPane->GetDirection();
if (direction == xtpPaneDockLeft) rect.right = rect.left + nTitleFont;
else if (direction == xtpPaneDockRight) rect.left = rect.right - nTitleFont;
else if (direction == xtpPaneDockTop) rect.bottom = rect.top + nTitleFont;
else if (direction == xtpPaneDockBottom) rect.top = rect.bottom - nTitleFont;
return rect;
}
int CXTPDockingPanePaintManager::DrawCaptionText(CDC* pDC, const CString& strTitle, CRect rcText, BOOL bVertical, BOOL bCalcWidth)
{
int nWidth = 0;
if (strTitle.IsEmpty())
return 0;
if (bVertical)
{
CXTPFontDC font(pDC, &m_fntTitleVertical);
CSize sz = pDC->GetTextExtent(strTitle);
if (rcText.bottom > rcText.top)
{
rcText.left = (rcText.right - (rcText.Width() - sz.cy) / 2);
rcText.right = rcText.left + rcText.Height();
pDC->DrawText(strTitle, rcText, DT_NOPREFIX | DT_SINGLELINE | DT_NOCLIP | DT_END_ELLIPSIS);
}
nWidth = sz.cx;
}
else
{
CXTPFontDC font(pDC, &m_fntTitle);
pDC->DrawText(strTitle, rcText, DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER | DT_NOPREFIX);
if (bCalcWidth)
{
CXTPEmptyRect rcCalc;
pDC->DrawText(strTitle, rcCalc, DT_CALCRECT | DT_SINGLELINE | DT_NOPREFIX);
nWidth = rcCalc.Width();
}
}
return nWidth;
}
CXTPDockingPane* CXTPDockingPanePaintManager::GetSelectedPane(CXTPDockingPaneBase* pPane)
{
if (pPane->GetType() == xtpPaneTypeTabbedContainer)
{
return ((CXTPDockingPaneTabbedContainer*)pPane)->GetSelected();
}
if (pPane->GetType() == xtpPaneTypeSidePanel)
{
return ((CXTPDockingPaneSidePanel*)pPane)->GetSelectedPane();
}
else if (pPane->GetType() == xtpPaneTypeMiniWnd)
{
CXTPDockingPaneBaseList lst;
pPane->FindPane(xtpPaneTypeTabbedContainer, &lst);
if (lst.GetCount() == 1)
{
return ((CXTPDockingPaneTabbedContainer*)lst.GetHead())->GetSelected();
}
}
return NULL;
}
BOOL CXTPDockingPanePaintManager::IsCaptionEnabled(CXTPDockingPaneBase* pPane)
{
CXTPDockingPane* pSelectedPane = GetSelectedPane(pPane);
if (!pSelectedPane)
return TRUE;
return pSelectedPane->GetEnabled() & xtpPaneEnableClient;
}
void CXTPDockingPanePaintManager::DrawCaptionIcon(CDC* pDC, CXTPDockingPaneBase* pPane, CRect& rcCaption, BOOL bVertical)
{
if (!m_bDrawCaptionIcon)
return;
CSize szIcon = GetTabPaintManager()->m_szIcon;
CXTPDockingPane* pSelectedPane = GetSelectedPane(pPane);
CXTPImageManagerIcon* pImage = pSelectedPane ? pSelectedPane->GetIcon(szIcon.cx) : NULL;
if (!pImage)
return;
BOOL bEnabled = IsCaptionEnabled(pPane);
CXTPImageManagerIconHandle& imageHandle = !bEnabled ? pImage->GetDisabledIcon(): pImage->GetIcon();
if (!bVertical && rcCaption.Width() >= szIcon.cx)
{
pImage->Draw(pDC, CPoint(rcCaption.left, rcCaption.CenterPoint().y - szIcon.cy / 2),
imageHandle, szIcon);
rcCaption.left += szIcon.cx + 3;
}
else if (bVertical && rcCaption.Height() >= szIcon.cy)
{
pImage->Draw(pDC, CPoint(rcCaption.CenterPoint().x - szIcon.cy / 2, rcCaption.top),
imageHandle, szIcon);
rcCaption.top += szIcon.cy + 3;
}
}
void CXTPDockingPaneOffice2003Theme::DrawCaptionPart(CDC* pDC, CXTPDockingPaneBase* pPane, CRect rcCaption, const CString& strTitle, BOOL bActive, BOOL bVertical)
{
COLORREF clrText = bActive ? m_clrActiveCaptionText : m_clrNormalCaptionText ;
XTPDeflateRectDirection(rcCaption, 0, 0, 4, 0, bVertical);
DrawCaptionButtons(pDC, pPane->GetCaptionButtons(), rcCaption, clrText, 16, 0, bVertical);
if (!bVertical && m_bDrawGripper && (rcCaption.right > rcCaption.left + 7))
{
for (int y = rcCaption.top + 5; y < rcCaption.bottom - 3; y += 4)
{
pDC->FillSolidRect(rcCaption.left + 4 + 2, y + 1, 2, 2, GetXtremeColor(COLOR_WINDOW));
pDC->FillSolidRect(rcCaption.left + 3 + 2, y, 2, 2, GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
}
rcCaption.left += 8;
}
if (bVertical && m_bDrawGripper && (rcCaption.bottom > rcCaption.top + 7))
{
for (int x = rcCaption.left + 3; x < rcCaption.right - 5; x += 4)
{
pDC->FillSolidRect(x + 2, rcCaption.top + 4 + 2, 2, 2, GetXtremeColor(COLOR_WINDOW));
pDC->FillSolidRect(x + 1, rcCaption.top + 3 + 2, 2, 2, GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
}
rcCaption.top += 8;
}
pDC->SetTextColor(IsCaptionEnabled(pPane) ? clrText : m_clrDisabledCaptionText);
XTPDeflateRectDirection(rcCaption, 6, 1, 2, 0, bVertical);
DrawCaptionIcon(pDC, pPane, rcCaption, bVertical);
DrawCaptionText(pDC, strTitle, rcCaption, bVertical);
}
void CXTPDockingPaneOffice2003Theme::DrawFloatingFrame(CDC* pDC, CXTPDockingPaneMiniWnd* pPane, CRect rc)
{
COLORREF clrFrame = GetXtremeColor(XPCOLOR_MENUBAR_BORDER);
pDC->Draw3dRect(rc, clrFrame, clrFrame);
rc.DeflateRect(1, 1);
pDC->Draw3dRect(rc, clrFrame, clrFrame);
rc.DeflateRect(1, 1);
pDC->Draw3dRect(rc, clrFrame, clrFrame);
XTPDrawHelpers()->ExcludeCorners(pDC, rc);
pDC->Draw3dRect(rc, m_clrNormalCaption.clrDark, m_clrNormalCaption.clrDark);
int nTitleHeight = m_nTitleHeight;
CRect rcCaption(rc);
rcCaption.DeflateRect(0, 0, 0, rc.Height() - nTitleHeight - 3);
CXTPBufferDC dcCache(*pDC, rcCaption);
dcCache.SetBkMode(TRANSPARENT);
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
XTPDrawHelpers()->GradientFill(&dcCache, rcCaption,
bActive ? m_clrActiveCaption : m_clrNormalCaption, FALSE);
dcCache.SetPixel(rcCaption.left, rcCaption.bottom, m_clrNormalCaption.clrDark);
dcCache.SetPixel(rcCaption.right - 1, rcCaption.bottom, m_clrNormalCaption.clrDark);
rcCaption.DeflateRect(1, 0);
CString strTitle;
pPane->GetWindowText(strTitle);
DrawCaptionPart(&dcCache, pPane, rcCaption, strTitle, bActive, FALSE);
}
void CXTPDockingPaneOffice2003Theme::DrawSidePanel(CDC* pDC, CXTPDockingPaneSidePanel* pPane, CRect rc)
{
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
pDC->FillSolidRect(rc, bActive ? m_clrActiveCaption : m_clrNormalCaption);
pDC->SetBkMode(TRANSPARENT);
pDC->Draw3dRect(rc, GetXtremeColor(COLOR_WINDOWFRAME), GetXtremeColor(COLOR_WINDOWFRAME));
rc.DeflateRect(1, 1);
CRect rcCaption = rc;
int nTitleFont = GetCaptionHeight() + 2;
XTPDockingPaneDirection direction = pPane->GetDirection();
if (direction == xtpPaneDockLeft) rcCaption.right = rcCaption.left + nTitleFont;
else if (direction == xtpPaneDockRight) rcCaption.left = rcCaption.right - nTitleFont;
else if (direction == xtpPaneDockTop) rcCaption.bottom = rcCaption.top + nTitleFont;
else if (direction == xtpPaneDockBottom) rcCaption.top = rcCaption.bottom - nTitleFont;
BOOL bVertical = direction == xtpPaneDockLeft || direction == xtpPaneDockRight;
XTPDrawHelpers()->GradientFill(pDC, rcCaption, bActive ? m_clrActiveCaption : m_clrNormalCaption, bVertical);
DrawCaptionPart(pDC, pPane, rcCaption, pPane->GetTitle(), bActive, bVertical);
}
void CXTPDockingPaneOffice2003Theme::DrawCaption(CDC* pDC, CXTPDockingPaneTabbedContainer* pPane, CRect rc)
{
BOOL bVertical = pPane->IsCaptionVertical();
int nTitleHeight = m_nTitleHeight;
CRect rcCaption(rc);
if (bVertical)
{
rcCaption.DeflateRect(0, 0, rc.Width() - nTitleHeight - 3, 0);
}
else
{
rcCaption.DeflateRect(0, 0, 0, rc.Height() - nTitleHeight - 3);
}
CRect rcFill(rcCaption);
if (m_bRoundedCaption)
{
XTPDeflateRectDirection(rcFill, 1, 0, 0, 0, bVertical);
pDC->FillSolidRect(rcCaption, m_clrSplitter);
XTPDrawHelpers()->ExcludeCorners(pDC, rcFill);
}
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
XTPDrawHelpers()->GradientFill(pDC, rcFill,
bActive ? m_clrActiveCaption : m_clrNormalCaption, bVertical);
if (!m_bRoundedCaption)
{
pDC->FillSolidRect(rcCaption.left, rcCaption.top, 1, rcCaption.Height(), GetXtremeColor(XPCOLOR_FRAME));
pDC->FillSolidRect(rcCaption.left, rcCaption.top, rcCaption.Width(), 1, GetXtremeColor(XPCOLOR_FRAME));
pDC->FillSolidRect(rcCaption.right - 1, rcCaption.top, 1, rcCaption.Height(), GetXtremeColor(XPCOLOR_FRAME));
}
CString strTitle = pPane->GetTitle();
DrawCaptionPart(pDC, pPane, rcCaption, strTitle, bActive, bVertical);
}
//////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneOffice2007Theme
CXTPDockingPaneOffice2007Theme::CXTPDockingPaneOffice2007Theme()
{
m_bRoundedCaption = FALSE;
m_dwSplitterStyle = xtpPaneSplitterGradientVert;
m_bDrawGripper = FALSE;
m_pPanelPaintManager->SetAppearance(xtpTabAppearancePropertyPage2007);
m_pPanelPaintManager->m_bHotTracking = TRUE;
m_pTabPaintManager->SetAppearance(xtpTabAppearancePropertyPage2007);
m_pTabPaintManager->m_bHotTracking = TRUE;
m_pPanelPaintManager->m_rcButtonMargin.SetRect(2, 1, 2, 1);
m_pTabPaintManager->m_rcButtonMargin.SetRect(2, 1, 2, 1);
m_nCaptionFontGap = 5;
}
void CXTPDockingPaneOffice2007Theme::DrawCaption(CDC* pDC, CXTPDockingPaneTabbedContainer* pPane, CRect rc)
{
BOOL bVertical = pPane->IsCaptionVertical();
int nTitleHeight = m_nTitleHeight;
CRect rcCaption(rc);
if (bVertical)
{
rcCaption.DeflateRect(0, 0, rc.Width() - nTitleHeight - 3, 0);
}
else
{
rcCaption.DeflateRect(0, 0, 0, rc.Height() - nTitleHeight - 3);
}
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
XTPDrawHelpers()->GradientFill(pDC, rcCaption, bActive ? m_clrActiveCaption : m_clrNormalCaption, bVertical);
DrawCaptionPart(pDC, pPane, rcCaption, pPane->GetTitle(), bActive, bVertical);
}
void CXTPDockingPaneOffice2007Theme::RefreshMetrics()
{
CXTPDockingPaneOffice2003Theme::RefreshMetrics();
CXTPResourceImages* pImages = XTPResourceImages();
if (pImages->IsValid())
{
m_arrColor[XPCOLOR_FRAME] = pImages->GetImageColor(_T("Window"), _T("WindowFrame"));
m_arrColor[XPCOLOR_3DFACE] = pImages->GetImageColor(_T("Window"), _T("ButtonFace"));
m_arrColor[COLOR_3DHIGHLIGHT] = pImages->GetImageColor(_T("Window"), _T("EdgeHighLightColor"));
m_clrSplitter.SetStandardValue(pImages->GetImageColor(_T("DockingPane"), _T("Splitter")));
m_clrSplitterGripper.SetStandardValue(m_arrColor[XPCOLOR_FRAME]);
m_arrColor[XPCOLOR_TOOLBAR_GRIPPER] = pImages->GetImageColor(_T("Toolbar"), _T("ToolbarGripper"));
m_arrColor[XPCOLOR_MENUBAR_BORDER] = pImages->GetImageColor(_T("Toolbar"), _T("MenuPopupBorder"));
m_bLunaTheme = TRUE;
m_clrSplitterGradient.SetStandardValue(pImages->GetImageColor(_T("DockingPane"), _T("SplitterLight")),
pImages->GetImageColor(_T("DockingPane"), _T("SplitterDark")));
m_clrNormalCaption.SetStandardValue(pImages->GetImageColor(_T("DockingPane"), _T("NormalCaptionLight")),
pImages->GetImageColor(_T("DockingPane"), _T("NormalCaptionDark")), 0.25f);
m_clrNormalCaptionText.SetStandardValue(pImages->GetImageColor(_T("DockingPane"), _T("NormalCaptionText")));
m_clrActiveCaption.SetStandardValue(pImages->GetImageColor(_T("DockingPane"), _T("ActiveCaptionLight")),
pImages->GetImageColor(_T("DockingPane"), _T("ActiveCaptionDark")), 0.25f);
m_clrActiveCaptionText.SetStandardValue(pImages->GetImageColor(_T("DockingPane"), _T("ActiveCaptionText")));
}
else
{
m_arrColor[XPCOLOR_FRAME] = RGB(101, 147, 207);
m_arrColor[XPCOLOR_3DFACE] = RGB(191, 219, 255);
m_arrColor[COLOR_3DHIGHLIGHT] = RGB(255, 255, 255);
m_clrNormalCaption.SetStandardValue(RGB(227, 239, 255), RGB(175, 210, 255), 0.25f);
m_clrSplitter.SetStandardValue(RGB(216, 231, 252));
m_clrSplitterGripper.SetStandardValue(GetXtremeColor(XPCOLOR_TOOLBAR_GRIPPER));
m_clrSplitterGradient.SetStandardValue(RGB(190, 218, 254), RGB(100, 143, 203));
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(158, 190, 245), 0
};
SetColors(sizeof(nElements)/sizeof(INT), nElements, clrValues);
m_bLunaTheme = TRUE;
m_clrActiveCaption.SetStandardValue(RGB(255, 231, 162), RGB(255, 166, 76));
m_clrNormalCaptionText.SetStandardValue(RGB(8, 55, 114));
m_clrActiveCaptionText.SetStandardValue(RGB(8, 55, 114));
}
}
//////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneOffice2007OutlookTheme
CXTPDockingPaneOffice2007OutlookTheme::CXTPDockingPaneOffice2007OutlookTheme()
{
m_nCaptionFontGap = 3;
}
void CXTPDockingPaneOffice2007OutlookTheme::DrawCaption(CDC* pDC, CXTPDockingPaneTabbedContainer* pPane, CRect rc)
{
BOOL bVertical = pPane->IsCaptionVertical();
int nTitleHeight = m_nTitleHeight;
CRect rcCaption(rc);
if (bVertical)
{
rcCaption.DeflateRect(0, 0, rc.Width() - nTitleHeight - 3, 0);
}
else
{
rcCaption.DeflateRect(0, 0, 0, rc.Height() - nTitleHeight - 3);
}
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
XTPDrawHelpers()->GradientFill(pDC, rcCaption, bActive ? m_clrActiveCaption : m_clrNormalCaption, bVertical);
if (bVertical)
{
pDC->FillSolidRect(rcCaption.left, rcCaption.top, rcCaption.Width(), 1, GetXtremeColor(XPCOLOR_FRAME));
pDC->FillSolidRect(rcCaption.left, rcCaption.top, 1, rcCaption.Height(), GetXtremeColor(XPCOLOR_FRAME));
pDC->FillSolidRect(rcCaption.left, rcCaption.bottom - 1, rcCaption.Width(), 1, GetXtremeColor(XPCOLOR_FRAME));
pDC->FillSolidRect(rcCaption.left + 1, rcCaption.top + 1, rcCaption.Width() - 1, 1, GetXtremeColor(COLOR_3DHIGHLIGHT));
pDC->FillSolidRect(rcCaption.left + 1, rcCaption.top + 1, 1, rcCaption.Height() - 2, GetXtremeColor(COLOR_3DHIGHLIGHT));
}
else
{
pDC->FillSolidRect(rcCaption.left, rcCaption.top, rcCaption.Width(), 1, GetXtremeColor(XPCOLOR_FRAME));
pDC->FillSolidRect(rcCaption.left, rcCaption.top, 1, rcCaption.Height(), GetXtremeColor(XPCOLOR_FRAME));
pDC->FillSolidRect(rcCaption.right - 1, rcCaption.top, 1, rcCaption.Height(), GetXtremeColor(XPCOLOR_FRAME));
pDC->FillSolidRect(rcCaption.left + 1, rcCaption.top + 1, rcCaption.Width() - 2, 1, GetXtremeColor(COLOR_3DHIGHLIGHT));
pDC->FillSolidRect(rcCaption.left + 1, rcCaption.top + 1, 1, rcCaption.Height() - 1, GetXtremeColor(COLOR_3DHIGHLIGHT));
}
DrawCaptionPart(pDC, pPane, rcCaption, pPane->GetTitle(), bActive, bVertical);
}
void CXTPDockingPaneOffice2007OutlookTheme::RefreshMetrics()
{
CXTPDockingPaneOffice2007Theme::RefreshMetrics();
if (m_bUseStandardFont)
{
LOGFONT lf;
VERIFY(CXTPDrawHelpers::GetIconLogFont(&lf));
CString strOfficeFont = _T("Segoe UI");
BOOL bOfficeFont = XTPDrawHelpers()->FontExists(m_strOfficeFont);
if (bOfficeFont)
{
STRCPY_S(lf.lfFaceName, LF_FACESIZE, strOfficeFont);
if (XTPSystemVersion()->IsClearTypeTextQualitySupported()) lf.lfQuality = 5;
}
else
{
STRCPY_S(lf.lfFaceName, LF_FACESIZE, _T("Arial"));
}
lf.lfWeight = FW_BOLD;
lf.lfHeight = 20;
SetCaptionFontIndirect(&lf);
}
}
//////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneOffice2007WordTheme
CXTPDockingPaneOffice2007WordTheme::CXTPDockingPaneOffice2007WordTheme()
{
m_bRoundedCaption = FALSE;
m_dwSplitterStyle = xtpPaneSplitterFlat;
m_bDrawGripper = FALSE;
m_pPanelPaintManager->SetAppearance(xtpTabAppearancePropertyPageAccess2007);
m_pPanelPaintManager->m_bHotTracking = TRUE;
m_pTabPaintManager->SetAppearance(xtpTabAppearancePropertyPageAccess2007);
m_pTabPaintManager->m_bHotTracking = TRUE;
m_nCaptionFontGap = 2;
m_nSplitterSize = 0;
m_nSplitterIndent = 2;
}
void CXTPDockingPaneOffice2007WordTheme::DrawCaption(CDC* pDC, CXTPDockingPaneTabbedContainer* pPane, CRect rc)
{
BOOL bVertical = pPane->IsCaptionVertical();
int nTitleHeight = m_nTitleHeight;
CRect rcCaption(rc);
if (bVertical)
{
rcCaption.DeflateRect(0, 0, rc.Width() - nTitleHeight - 3, 0);
}
else
{
rcCaption.DeflateRect(0, 0, 0, rc.Height() - nTitleHeight - 3);
}
CRect rcFill(rcCaption);
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
XTPDrawHelpers()->GradientFill(pDC, rcFill, bActive ? m_clrActiveCaption : m_clrNormalCaption, bVertical);
CString strTitle = pPane->GetTitle();
DrawCaptionPart(pDC, pPane, rcCaption, strTitle, bActive, bVertical);
}
void CXTPDockingPaneOffice2007WordTheme::DrawCaptionPart(CDC* pDC, CXTPDockingPaneBase* pPane, CRect rcCaption, const CString& strTitle, BOOL bActive, BOOL bVertical)
{
COLORREF clrText = bActive ? m_clrActiveCaptionText : m_clrNormalCaptionText;
DrawCaptionButtons(pDC, pPane->GetCaptionButtons(), rcCaption, clrText, 16, 0, bVertical);
pDC->SetTextColor(IsCaptionEnabled(pPane) ? clrText : m_clrDisabledCaptionText);
XTPDeflateRectDirection(rcCaption, 2, 1, 2, 0, bVertical);
DrawCaptionIcon(pDC, pPane, rcCaption, bVertical);
DrawCaptionText(pDC, strTitle, rcCaption, bVertical);
}
BOOL CXTPDockingPaneOffice2007WordTheme::PaneHasBorders(CXTPDockingPaneTabbedContainer* pPane) const
{
return pPane->IsTitleVisible();
}
void CXTPDockingPaneOffice2007WordTheme::AdjustClientRect(CXTPDockingPaneTabbedContainer* pPane, CRect& rect, BOOL bApply)
{
if (PaneHasBorders(pPane))
{
rect.DeflateRect(3, 3);
}
CXTPDockingPaneOffice2003Theme::AdjustClientRect(pPane, rect, bApply);
}
void CXTPDockingPaneOffice2007WordTheme::DrawPane(CDC* pDC, CXTPDockingPaneTabbedContainer* pPane, CRect rc)
{
if (m_bOffice2010Style)
{
pDC->FillSolidRect(rc, m_arrColor[XPCOLOR_3DFACE]);
pDC->Draw3dRect(rc.left, rc.top, rc.Width(), rc.Height(), m_arrColor[XPCOLOR_TOOLBAR_GRIPPER], m_arrColor[XPCOLOR_TOOLBAR_GRIPPER]);
rc.DeflateRect(3, 3);
}
else
{
if (PaneHasBorders(pPane))
{
pDC->FillSolidRect(rc, m_arrColor[XPCOLOR_FRAME]);
pDC->FillSolidRect(rc.left + 3, rc.top + 2, rc.Width() - 6, 1, m_arrColor[XPCOLOR_TOOLBAR_GRIPPER]);
pDC->FillSolidRect(rc.left + 2, rc.top + 3, 1, rc.Height() - 5, m_arrColor[XPCOLOR_TOOLBAR_GRIPPER]);
pDC->FillSolidRect(rc.right - 3, rc.top + 3, 1, rc.Height() - 5, m_arrColor[XPCOLOR_TOOLBAR_GRIPPER]);
pDC->FillSolidRect(rc.left + 2, rc.bottom - 3, rc.Width() - 4, 1, m_arrColor[XPCOLOR_TOOLBAR_GRIPPER]);
rc.DeflateRect(3, 3);
}
}
CXTPDockingPaneOffice2003Theme::DrawPane(pDC, pPane, rc);
}
void CXTPDockingPaneOffice2007WordTheme::RefreshMetrics()
{
CXTPDockingPaneOffice2003Theme::RefreshMetrics();
CXTPResourceImages* pImages = XTPResourceImages();
pImages->AssertValid();
m_bOffice2010Style = pImages->GetImageInt(_T("DockingPane"), _T("Office2010Style"), FALSE);
m_arrColor[XPCOLOR_FRAME] = pImages->GetImageColor(_T("DockingPane"), _T("WordSplitter"));
m_arrColor[XPCOLOR_3DFACE] = pImages->GetImageColor(_T("DockingPane"), _T("WordPaneBackground"));
m_arrColor[COLOR_3DHIGHLIGHT] = pImages->GetImageColor(_T("Window"), _T("EdgeHighLightColor"));
m_arrColor[XPCOLOR_TOOLBAR_GRIPPER] = pImages->GetImageColor(_T("DockingPane"), _T("WordPaneBorder"));
m_arrColor[XPCOLOR_MENUBAR_BORDER] = pImages->GetImageColor(_T("DockingPane"), _T("WordSplitter"));
m_arrColor[XPCOLOR_HIGHLIGHT_BORDER] = pImages->GetImageColor(_T("Window"), _T("HighlightSelectedBorder"));
m_arrColor[XPCOLOR_HIGHLIGHT] = pImages->GetImageColor(_T("Window"), _T("HighlightSelected"));
m_arrColor[XPCOLOR_HIGHLIGHT_PUSHED_BORDER] = pImages->GetImageColor(_T("Window"), _T("HighlightPressedBorder"));
m_arrColor[XPCOLOR_HIGHLIGHT_PUSHED] = pImages->GetImageColor(_T("Window"), _T("HighlightPressed"));
m_arrColor[XPCOLOR_HIGHLIGHT_TEXT] = 0;
m_arrColor[XPCOLOR_PUSHED_TEXT] = 0;
m_bLunaTheme = FALSE;
m_clrSplitterGradient.SetStandardValue(pImages->GetImageColor(_T("DockingPane"), _T("WordSplitter")));
m_clrSplitter.SetStandardValue(m_clrSplitterGradient);
m_clrNormalCaption.SetStandardValue(pImages->GetImageColor(_T("DockingPane"), _T("WordNormalCaption")));
m_clrNormalCaptionText.SetStandardValue(pImages->GetImageColor(_T("DockingPane"), _T("WordCaptionText")));
m_clrActiveCaption.SetStandardValue(pImages->GetImageColor(_T("DockingPane"), _T("WordActiveCaption")));
m_clrActiveCaptionText.SetStandardValue(pImages->GetImageColor(_T("DockingPane"), _T("WordCaptionText")));
m_clrSplitterGripper.SetStandardValue(m_clrNormalCaptionText);
if (m_bOffice2010Style)
{
m_nSplitterSize = 4;
m_nSplitterIndent = 0;
}
else
{
m_nSplitterSize = 0;
m_nSplitterIndent = 2;
}
if (m_bOffice2010Style)
{
m_arrColor[XPCOLOR_MENUBAR_BORDER] = m_arrColor[XPCOLOR_TOOLBAR_GRIPPER];
}
}
///////////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneOffice2003OutlookTheme
CXTPDockingPaneOffice2003OutlookTheme::CXTPDockingPaneOffice2003OutlookTheme()
{
m_bDrawGripper = FALSE;
m_bRoundedCaption = FALSE;
m_nCaptionFontGap = 3;
}
CXTPDockingPaneOffice2003OutlookTheme::~CXTPDockingPaneOffice2003OutlookTheme()
{
}
void CXTPDockingPaneOffice2003OutlookTheme::RefreshMetrics()
{
CXTPDockingPaneOffice2003Theme::RefreshMetrics();
if (m_bUseStandardFont)
{
LOGFONT lf;
VERIFY(CXTPDrawHelpers::GetIconLogFont(&lf));
STRCPY_S(lf.lfFaceName, LF_FACESIZE, _T("Arial"));
lf.lfWeight = FW_BOLD;
lf.lfHeight = 20;
SetCaptionFontIndirect(&lf);
}
if (m_bLunaTheme)
{
m_clrNormalCaption.SetStandardValue(XTPColorManager()->grcCaption);
m_clrNormalCaptionText.SetStandardValue(RGB(255, 255, 255));
}
else
{
m_clrNormalCaption.SetStandardValue(XTPColorManager()->LightColor(
GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_WINDOW), 0xcd),
GetXtremeColor(COLOR_3DSHADOW));
}
}
CRect CXTPDockingPaneOffice2003OutlookTheme::GetCaptionGripperRect(const CXTPDockingPaneTabbedContainer* /*pPane*/)
{
return CRect(0, 0, 0, 0);
}
//////////////////////////////////////////////////////////////////////////
///
CXTPDockingPaneWinNativeTheme::CXTPDockingPaneWinNativeTheme()
{
m_pPanelPaintManager->SetAppearance(xtpTabAppearancePropertyPage);
m_pPanelPaintManager->SetColor(xtpTabColorWinNative);
m_pPanelPaintManager->m_bHotTracking = TRUE;
m_pTabPaintManager->SetAppearance(xtpTabAppearancePropertyPage);
m_pTabPaintManager->SetColor(xtpTabColorWinNative);
m_pTabPaintManager->m_bHotTracking = TRUE;
m_bGradientCaption = TRUE;
m_nCaptionFontGap = 7;
m_nCaptionButtonStyle = xtpPaneCaptionButtonThemedExplorerBar;
}
void CXTPDockingPaneWinNativeTheme::RefreshMetrics()
{
CXTPDockingPaneVisualStudio2003Theme::RefreshMetrics();
if (m_themeWindow->IsAppThemed())
{
m_clrActiveCaptionText.SetStandardValue(GetXtremeColor(COLOR_CAPTIONTEXT));
m_clrNormalCaptionText.SetStandardValue(GetXtremeColor(COLOR_INACTIVECAPTIONTEXT));
}
}
void CXTPDockingPaneWinNativeTheme::DrawFloatingFrame(CDC* pDC, CXTPDockingPaneMiniWnd* pPane, CRect rc)
{
if (!m_themeWindow->IsAppThemed())
{
CXTPDockingPaneVisualStudio2003Theme::DrawFloatingFrame(pDC, pPane, rc);
return;
}
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
int nState = bActive ? CS_ACTIVE : CS_INACTIVE;
m_themeWindow->DrawThemeBackground(pDC->GetSafeHdc(), WP_SMALLFRAMELEFT, nState, CRect(rc.left, rc.top, rc.left + 3, rc.bottom), 0);
m_themeWindow->DrawThemeBackground(pDC->GetSafeHdc(), WP_SMALLFRAMERIGHT, nState, CRect(rc.right - 3, rc.top, rc.right, rc.bottom), 0);
m_themeWindow->DrawThemeBackground(pDC->GetSafeHdc(), WP_SMALLFRAMEBOTTOM, nState, CRect(rc.left, rc.bottom - 3, rc.right, rc.bottom), 0);
int nTitleHeight = m_nTitleHeight;
CRect rcCaption(rc);
rcCaption.DeflateRect(0, 0, 0, rc.Height() - nTitleHeight - 3 - 2);
CXTPBufferDC dcCache(*pDC, rcCaption);
dcCache.SetBkMode(TRANSPARENT);
m_themeWindow->DrawThemeBackground(dcCache, WP_SMALLCAPTION, nState, rcCaption, 0);
rcCaption.DeflateRect(3, 0);
CString strTitle;
pPane->GetWindowText(strTitle);
DrawCaptionPart(&dcCache, pPane, rcCaption, strTitle, bActive, FALSE);
}
void CXTPDockingPaneWinNativeTheme::DrawSidePanel(CDC* pDC, CXTPDockingPaneSidePanel* pPane, CRect rc)
{
CXTPDockingPaneVisualStudio2003Theme::DrawSidePanel(pDC, pPane, rc);
}
void CXTPDockingPaneWinNativeTheme::DrawCaptionPart(CDC* pDC, CXTPDockingPaneBase* pPane, CRect rcCaption, const CString& strTitle, BOOL bActive, BOOL bVertical)
{
if (!m_themeWindow->IsAppThemed())
{
CXTPDockingPaneVisualStudio2003Theme::DrawCaptionPart(pDC, pPane, rcCaption, strTitle, bActive, bVertical);
return;
}
COLORREF clrText = bActive ? m_clrActiveCaptionText : m_clrNormalCaptionText;
COLORREF clrButton = clrText;
if (pPane->GetType() == xtpPaneTypeSidePanel)
{
clrButton = FillCaptionPart(pDC, pPane, rcCaption, bActive, bVertical);
}
XTPDeflateRectDirection(rcCaption, 0, 0, 2, 0, bVertical);
DrawCaptionButtons(pDC, pPane->GetCaptionButtons(), rcCaption, clrButton, 16, 3, bVertical);
pDC->SetTextColor(IsCaptionEnabled(pPane) ? clrText : m_clrDisabledCaptionText);
XTPDeflateRectDirection(rcCaption, 4, 1, 0, 0, bVertical);
DrawCaptionIcon(pDC, pPane, rcCaption, bVertical);
DrawCaptionText(pDC, strTitle, rcCaption, bVertical);
}
void CXTPDockingPaneWinNativeTheme::DrawCaption(CDC* pDC, CXTPDockingPaneTabbedContainer* pPane, CRect rc)
{
if (!m_themeWindow->IsAppThemed())
{
CXTPDockingPaneVisualStudio2003Theme::DrawCaption(pDC, pPane, rc);
return;
}
BOOL bVertical = pPane->IsCaptionVertical();
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
CRect rcCaption(0, 0, rc.right, m_nTitleHeight + 1);
if (bVertical)
{
rcCaption = CRect(0, 0, m_nTitleHeight + 1, rc.bottom);
}
m_themeWindow->DrawThemeBackground(pDC->GetSafeHdc(), WP_SMALLCAPTION, bActive ? CS_ACTIVE : CS_INACTIVE, rcCaption, 0);
CString strTitle = pPane->GetTitle();
DrawCaptionPart(pDC, pPane, rcCaption, strTitle, bActive, bVertical);
}
//////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneVisualStudio2005Beta1Theme
class CXTPDockingPaneVisualStudio2005Beta1Theme::CColorSetVisualStudio2005 : public CXTPTabPaintManager::CColorSetOffice2003
{
public:
CColorSetVisualStudio2005(BOOL bHighlightSelected)
{
m_bHighlightSelected = bHighlightSelected;
m_bTransparentButton = FALSE;
m_bGradientButton = FALSE;
}
void RefreshMetrics();
void XTPFillFramePartRect(CDC* pDC, CRect rc, CWnd* pWnd, CWnd* pSite)
{
::XTPFillFramePartRect(pDC, rc, pWnd, pSite, m_clrHeaderFace, TRUE);
}
void FillHeader(CDC* pDC, CRect rc, CXTPTabManager* pTabManager)
{
XTPFillFramePartRect(pDC, rc, (CXTPDockingPaneTabbedContainer*)pTabManager, ((CXTPDockingPaneTabbedContainer*)pTabManager)->GetDockingSite());
}
COLORREF FillPropertyButton(CDC* pDC, CRect rcItem, CXTPTabManagerItem* pItem)
{
if (m_bTransparentButton && (!m_bHighlightSelected || !pItem->IsSelected()))
return COLORREF_NULL;
if (m_bGradientButton)
return CColorSetOffice2003::FillPropertyButton(pDC, rcItem, pItem);
return CXTPTabPaintManagerColorSet::FillPropertyButton(pDC, rcItem, pItem);
}
protected:
BOOL m_bGradientButton;
BOOL m_bTransparentButton;
BOOL m_bHighlightSelected;
};
void CXTPDockingPaneVisualStudio2005Beta1Theme::CColorSetVisualStudio2005::RefreshMetrics()
{
CXTPTabPaintManagerColorSet ::RefreshMetrics();
if (m_bHighlightSelected)
{
m_clrButtonSelected.SetStandardValue(XTPColorManager()->LightColor(
GetSysColor(COLOR_HIGHLIGHT), GetSysColor(COLOR_WINDOW), 0x02));
m_clrSelectedText.SetStandardValue(GetSysColor(COLOR_WINDOWTEXT));
}
else
{
m_clrSelectedText.SetStandardValue(GetSysColor(COLOR_3DDKSHADOW));
}
m_clrHeaderFace.SetStandardValue(GetSysColor(COLOR_3DFACE), XTPColorManager()->LightColor(GetSysColor(COLOR_3DFACE), GetSysColor(COLOR_WINDOW), 0xcd));
m_clrNormalText.SetStandardValue(GetSysColor(COLOR_3DDKSHADOW));
m_bGradientButton = FALSE;
m_bLunaTheme = FALSE;
switch (XTPColorManager()->GetCurrentSystemTheme())
{
case xtpSystemThemeSilver:
m_bGradientButton = TRUE;
m_clrButtonNormal.SetStandardValue(RGB(242, 242, 247));
m_csPropertyPage2003.clrBorderTopHighlight.SetStandardValue(RGB(255, 255, 255));
m_csPropertyPage2003.clrDarkShadow.SetStandardValue(RGB(145, 155, 156));
m_csPropertyPage2003.clrFrameBorder.SetStandardValue(RGB(145, 155, 156));
m_csPropertyPage2003.clrBorderLeftHighlight.SetStandardValue(RGB(190, 190, 216));
m_clrHeaderFace.SetStandardValue(RGB(215, 215, 229), RGB(243, 243, 247));
break;
case xtpSystemThemeBlue:
m_bGradientButton = TRUE;
m_csPropertyPage2003.clrBorderTopHighlight.SetStandardValue(RGB(255, 255, 255));
m_clrHeaderFace.SetStandardValue(RGB(229, 229, 215), RGB(244, 241, 231));
break;
case xtpSystemThemeOlive:
m_bGradientButton = TRUE;
m_csPropertyPage2003.clrBorderTopHighlight.SetStandardValue(RGB(255, 255, 255));
m_clrHeaderFace.SetStandardValue(RGB(229, 229, 215), RGB(244, 241, 231));
break;
}
m_clrAutoHideFace.SetStandardValue(m_clrHeaderFace);
}
class CXTPDockingPaneVisualStudio2005Beta1Theme::CColorSetVisualStudio2003 : public CColorSetVisualStudio2005
{
public:
CColorSetVisualStudio2003(BOOL bHighlightSelected)
: CColorSetVisualStudio2005(bHighlightSelected)
{
m_bTransparentButton = TRUE;
}
void RefreshMetrics();
};
void CXTPDockingPaneVisualStudio2005Beta1Theme::CColorSetVisualStudio2003::RefreshMetrics()
{
CColorSetVisualStudio2005::RefreshMetrics();
m_bGradientButton = FALSE;
m_bLunaTheme = FALSE;
switch (XTPColorManager()->GetCurrentSystemTheme())
{
case xtpSystemThemeSilver:
case xtpSystemThemeBlue:
case xtpSystemThemeOlive:
m_clrNormalText.SetStandardValue(RGB(113, 111, 100));
if (!m_bHighlightSelected) m_clrSelectedText.SetStandardValue(RGB(113, 111, 100));
break;
}
}
CXTPDockingPaneVisualStudio2005Beta1Theme::CXTPDockingPaneVisualStudio2005Beta1Theme()
{
CXTPTabPaintManager::CAppearanceSetPropertyPageFlat* pAppearanceFlat = (CXTPTabPaintManager::CAppearanceSetPropertyPageFlat*)
m_pTabPaintManager->SetAppearance(xtpTabAppearancePropertyPageFlat);
m_pTabPaintManager->m_bDisableLunaColors = TRUE;
pAppearanceFlat->m_bBlurPoints = FALSE;
m_pTabPaintManager->SetColorSet(new CColorSetVisualStudio2005(TRUE));
m_pTabPaintManager->m_bHotTracking = FALSE;
m_pTabPaintManager->m_clientFrame = xtpTabFrameNone;
m_pPanelPaintManager->m_bDisableLunaColors = TRUE;
pAppearanceFlat = (CXTPTabPaintManager::CAppearanceSetPropertyPageFlat*)m_pPanelPaintManager->SetAppearance(xtpTabAppearancePropertyPageFlat);
pAppearanceFlat->m_bBlurPoints = FALSE;
m_pPanelPaintManager->SetColorSet(new CColorSetVisualStudio2005(FALSE));
m_pPanelPaintManager->m_bHotTracking = FALSE;
m_pPanelPaintManager->SetLayout(xtpTabLayoutAutoSize);
m_rcCaptionMargin.SetRect(0, 0, 0, 0);
m_bGradientCaption = TRUE;
m_bUseBoldCaptionFont = FALSE;
m_dwSplitterStyle = xtpPaneSplitterGradient;
m_systemTheme = xtpSystemThemeUnknown;
}
void CXTPDockingPaneVisualStudio2005Beta1Theme::RefreshMetrics()
{
CXTPDockingPaneVisualStudio2003Theme::RefreshMetrics();
m_clrNormalCaptionText.SetStandardValue(GetXtremeColor(COLOR_INACTIVECAPTIONTEXT));
switch (XTPColorManager()->GetCurrentSystemTheme())
{
case xtpSystemThemeBlue:
m_clrSplitterGradient.SetStandardValue(RGB(229, 229, 215), RGB(244, 241, 231));
m_clrNormalCaption.SetStandardValue(RGB(216, 215, 198), RGB(238, 239, 229));
m_clrNormalCaptionText.SetStandardValue(0);
break;
case xtpSystemThemeOlive:
m_clrSplitterGradient.SetStandardValue(RGB(229, 229, 215), RGB(244, 241, 231));
m_clrNormalCaption.SetStandardValue(RGB(216, 215, 198), RGB(238, 239, 229));
m_clrNormalCaptionText.SetStandardValue(0);
break;
case xtpSystemThemeSilver:
m_clrSplitterGradient.SetStandardValue(RGB(215, 215, 229), RGB(243, 243, 247));
m_clrNormalCaption.SetStandardValue(RGB(224, 224, 235), RGB(242, 242, 246));
m_clrActiveCaption.SetStandardValue(RGB(160, 158, 186), RGB(224, 225, 235));
m_clrNormalCaptionText.SetStandardValue(0);
break;
}
}
CXTPDockingPaneVisualStudio2005Beta2Theme::CXTPDockingPaneVisualStudio2005Beta2Theme()
{
m_pTabPaintManager->SetAppearance(xtpTabAppearanceVisualStudio2005);
m_pTabPaintManager->SetColorSet(new CColorSetVisualStudio2005(TRUE));
m_pPanelPaintManager->SetAppearance(xtpTabAppearanceVisualStudio2005);
m_pPanelPaintManager->SetColorSet(new CColorSetVisualStudio2005(TRUE));
}
CXTPDockingPaneVisualStudio2005Theme::CXTPDockingPaneVisualStudio2005Theme()
{
CXTPTabPaintManager::CAppearanceSetPropertyPageFlat* pAppearance =
new CXTPTabPaintManager::CAppearanceSetPropertyPageFlat;
pAppearance->m_bBlurPoints = FALSE;
m_pPanelPaintManager->SetAppearanceSet(pAppearance);
m_pPanelPaintManager->SetColorSet(new CColorSetVisualStudio2003(FALSE));
m_pPanelPaintManager->m_bRotateImageOnVerticalDraw = TRUE;
pAppearance = new CXTPTabPaintManager::CAppearanceSetPropertyPageFlat;
pAppearance->m_bBlurPoints = FALSE;
pAppearance->m_bVisualStudio2005Style = TRUE;
m_pTabPaintManager->SetAppearanceSet(pAppearance);
m_pTabPaintManager->SetColorSet(new CColorSetVisualStudio2003(TRUE));
m_pTabPaintManager->m_clientFrame = xtpTabFrameSingleLine;
m_pTabPaintManager->m_rcClientMargin.top = 1;
}
void CXTPDockingPaneVisualStudio2005Beta2Theme::RefreshMetrics()
{
CXTPDockingPaneVisualStudio2005Beta1Theme::RefreshMetrics();
m_clrNormalCaption.SetStandardValue(GetXtremeColor(COLOR_INACTIVECAPTION));
m_clrActiveCaption.SetStandardValue(GetXtremeColor(COLOR_ACTIVECAPTION));
m_clrCaptionBorder = GetXtremeColor(COLOR_3DSHADOW);
switch (XTPColorManager()->GetCurrentSystemTheme())
{
case xtpSystemThemeBlue:
m_clrNormalCaption.SetStandardValue(RGB(204, 199, 186));
m_clrActiveCaption.SetStandardValue(RGB(59, 128, 237), RGB(49, 106, 197));
m_clrNormalCaptionText.SetStandardValue(0);
break;
case xtpSystemThemeOlive:
m_clrNormalCaption.SetStandardValue(RGB(204, 199, 186));
m_clrActiveCaption.SetStandardValue(RGB(182, 195, 146), RGB(145, 160, 117));
m_clrNormalCaptionText.SetStandardValue(0);
break;
case xtpSystemThemeSilver:
m_clrNormalCaption.SetStandardValue(RGB(240, 240, 245));
m_clrActiveCaption.SetStandardValue(RGB(211, 212, 221), RGB(166, 165, 191));
m_clrNormalCaptionText.SetStandardValue(0);
m_clrCaptionBorder = RGB(145, 155, 156);
break;
}
}
COLORREF CXTPDockingPaneVisualStudio2005Beta2Theme::FillCaptionPart(CDC* pDC, CXTPDockingPaneBase* pPane, CRect rcCaption, BOOL bActive, BOOL bVertical)
{
XTPDrawHelpers()->GradientFill(pDC, rcCaption, bActive ? m_clrActiveCaption : m_clrNormalCaption, bVertical);
if (pPane->GetType() == xtpPaneTypeSidePanel)
return bActive ? m_clrActiveCaptionText : m_clrNormalCaptionText;
CXTPPenDC pen(*pDC, m_clrCaptionBorder);
if (bVertical)
{
pDC->MoveTo(rcCaption.right, rcCaption.bottom - 1);
pDC->LineTo(rcCaption.left , rcCaption.bottom - 1);
pDC->LineTo(rcCaption.left, rcCaption.top);
pDC->LineTo(rcCaption.right, rcCaption.top);
}
else
{
pDC->MoveTo(rcCaption.left, rcCaption.bottom);
pDC->LineTo(rcCaption.left , rcCaption.top);
pDC->LineTo(rcCaption.right - 1, rcCaption.top);
pDC->LineTo(rcCaption.right - 1, rcCaption.bottom - 1);
}
return bActive ? m_clrActiveCaptionText : m_clrNormalCaptionText;
}
//////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneVisualStudio2008Theme
CXTPDockingPaneVisualStudio2008Theme::CXTPDockingPaneVisualStudio2008Theme()
{
}
void CXTPDockingPaneVisualStudio2008Theme::RefreshMetrics()
{
CXTPDockingPaneVisualStudio2005Theme::RefreshMetrics();
if (m_themeRebar->IsAppThemed())
{
m_pPanelPaintManager->SetAppearance(xtpTabAppearancePropertyPage);
m_pPanelPaintManager->SetColor(xtpTabColorWinNative);
m_pPanelPaintManager->m_bHotTracking = TRUE;
m_pTabPaintManager->SetAppearance(xtpTabAppearancePropertyPage);
m_pTabPaintManager->SetColor(xtpTabColorWinNative);
m_pTabPaintManager->m_bHotTracking = TRUE;
}
}
//////////////////////////////////////////////////////////////////////////
// CXTPDockingPaneVisualStudio2010Theme
CXTPDockingPaneVisualStudio2010Theme::CXTPDockingPaneVisualStudio2010Theme()
{
m_nCaptionFontGap = 6;
m_nCaptionButtonSize = 15;
m_bAutoHidePanelHighlightSelected = FALSE;
CXTPTabPaintManager::CAppearanceSetVisualStudio2010* pAppearance =
new CXTPTabPaintManager::CAppearanceSetVisualStudio2010();
pAppearance->m_rcHeaderMargin.left = 0;
pAppearance->m_rcHeaderMargin.right = 0;
m_pTabPaintManager->SetAppearanceSet(pAppearance);
m_pTabPaintManager->SetColorSet(new CXTPTabPaintManager::CColorSetVisualStudio2010(TRUE));
m_pTabPaintManager->m_clientFrame = xtpTabFrameSingleLine;
m_pTabPaintManager->m_rcClientMargin.top = 1;
pAppearance =
new CXTPTabPaintManager::CAppearanceSetVisualStudio2010();
pAppearance->m_bDrawNormalTab = TRUE;
m_pPanelPaintManager->SetAppearanceSet(pAppearance);
pAppearance->m_rcHeaderMargin.left = 0;
m_pPanelPaintManager->SetColor(xtpTabColorVisualStudio2010);
m_pTabPaintManager->m_bHotTracking = TRUE;
m_pPanelPaintManager->m_bHotTracking = TRUE;
m_nCaptionButtonStyle = xtpPaneCaptionButtonOffice2003;
}
void CXTPDockingPaneVisualStudio2010Theme::RefreshMetrics()
{
CXTPDockingPaneVisualStudio2005Theme::RefreshMetrics();
m_bLunaTheme = XTPSystemVersion()->IsWinVistaOrGreater();
COLORREF clrBackground = m_pTabPaintManager->GetColorSet()->m_clrAutoHideFace;
m_clrNormalCaption.SetStandardValue(RGB(77,96,130), RGB(61, 82, 119));
m_clrActiveCaption.SetStandardValue(RGB(255, 232, 166));
m_clrCaptionBorder = clrBackground;
m_clrSplitter.SetStandardValue(clrBackground);
m_clrSplitterGradient.SetStandardValue(clrBackground);
m_clrNormalCaptionText.SetStandardValue(RGB(255, 255, 255));
m_clrActiveCaptionText.SetStandardValue(0);
if (!m_bLunaTheme)
{
m_clrNormalCaption.SetStandardValue(RGB(74, 97, 132));
m_clrActiveCaption.SetStandardValue(RGB(255, 243, 206));
}
m_arrColor[XPCOLOR_3DFACE] = clrBackground;
m_arrColor[XPCOLOR_HIGHLIGHT] = RGB(255, 255, 247);
m_arrColor[XPCOLOR_HIGHLIGHT_BORDER] = RGB(231, 195, 99);
m_arrColor[XPCOLOR_HIGHLIGHT_PUSHED] = RGB(255, 235, 165);
m_arrColor[XPCOLOR_HIGHLIGHT_PUSHED_BORDER] = RGB(231, 195, 99);
m_arrColor[XPCOLOR_PUSHED_TEXT] = RGB(0, 0, 0);
m_arrColor[XPCOLOR_HIGHLIGHT_TEXT] = RGB(0, 0, 0);
}
void CXTPDockingPaneVisualStudio2010Theme::DrawFloatingFrame(CDC* pDC, CXTPDockingPaneMiniWnd* pPane, CRect rc)
{
pDC->Draw3dRect(rc, m_clrCaptionBorder, m_clrCaptionBorder);
rc.DeflateRect(1, 1);
pDC->Draw3dRect(rc, m_clrCaptionBorder, m_clrCaptionBorder);
rc.DeflateRect(1, 1);
pDC->Draw3dRect(rc, m_clrCaptionBorder, m_clrCaptionBorder);
int nTitleHeight = m_nTitleHeight;
CRect rcCaption(rc);
rcCaption.DeflateRect(0, 0, 0, rc.Height() - nTitleHeight - 3);
CXTPBufferDC dcCache(*pDC, rcCaption);
dcCache.SetBkMode(TRANSPARENT);
dcCache.FillSolidRect(rcCaption, m_clrCaptionBorder);
CString strTitle;
pPane->GetWindowText(strTitle);
rcCaption.DeflateRect(1, 2, 1, 0);
BOOL bActive = m_bHighlightActiveCaption && pPane->IsActive();
DrawCaptionPart(&dcCache, pPane, rcCaption, strTitle, bActive, FALSE);
}
COLORREF CXTPDockingPaneVisualStudio2010Theme::FillCaptionPart(CDC* pDC, CXTPDockingPaneBase* /*pPane*/, CRect rcCaption, BOOL bActive, BOOL bVertical)
{
CXTPPaintManagerColorGradient& clr = bActive ? m_clrActiveCaption : m_clrNormalCaption;
XTPDrawHelpers()->GradientFill(pDC, rcCaption, clr, bVertical);
if (bActive)
{
CRect rTop(rcCaption);
if (!bVertical) rTop.bottom = rTop.top + rTop.Height() / 2;
else rTop.right = rTop.left + rTop.Width() / 2;
XTPDrawHelpers()->GradientFill(pDC, rTop, RGB(255, 252, 242), RGB(255, 243, 207), bVertical);
}
if (!bVertical)
{
pDC->SetPixel(rcCaption.left, rcCaption.top, CXTPDrawHelpers::BlendColors(clr, m_clrCaptionBorder, (double)60 / 255));
pDC->SetPixel(rcCaption.left + 1, rcCaption.top, CXTPDrawHelpers::BlendColors(clr, m_clrCaptionBorder, (double)120 / 255));
pDC->SetPixel(rcCaption.left, rcCaption.top + 1, CXTPDrawHelpers::BlendColors(clr, m_clrCaptionBorder, (double)120 / 255));
pDC->SetPixel(rcCaption.right - 1, rcCaption.top, CXTPDrawHelpers::BlendColors(clr, m_clrCaptionBorder, (double)60 / 255));
pDC->SetPixel(rcCaption.right - 2, rcCaption.top, CXTPDrawHelpers::BlendColors(clr, m_clrCaptionBorder, (double)120 / 255));
pDC->SetPixel(rcCaption.right - 1, rcCaption.top + 1, CXTPDrawHelpers::BlendColors(clr, m_clrCaptionBorder, (double)120 / 255));
}
return bActive ? RGB(115, 97, 57) : RGB(206, 215, 222);
}
void CXTPDockingPaneVisualStudio2010Theme::DrawCaptionButtonEntry(CDC* pDC, CXTPDockingPaneCaptionButton* pButton, CPoint pt, COLORREF clrButton)
{
if (pButton->GetID() == XTP_IDS_DOCKINGPANE_AUTOHIDE)
{
CXTPPenDC pen(*pDC, clrButton);
pt.y--;
if (pButton->GetState() & xtpPanePinPushed)
{
pDC->MoveTo(pt.x - 5, pt.y); pDC->LineTo(pt.x - 1, pt.y);
pDC->MoveTo(pt.x - 1, pt.y - 3); pDC->LineTo(pt.x - 1, pt.y + 4);
pDC->MoveTo(pt.x - 1, pt.y + 2); pDC->LineTo(pt.x + 5, pt.y + 2);
pDC->LineTo(pt.x + 5, pt.y - 2); pDC->LineTo(pt.x - 1, pt.y - 2);
pDC->MoveTo(pt.x - 1, pt.y + 1); pDC->LineTo(pt.x + 5, pt.y + 1);
}
else
{
pt.y += 2;
pDC->MoveTo(pt.x - 3, pt.y - 1 + 1); pDC->LineTo(pt.x + 4, pt.y - 1 + 1);
pDC->MoveTo(pt.x, pt.y - 1 + 1); pDC->LineTo(pt.x, pt.y + 3 + 2);
pDC->MoveTo(pt.x - 2, pt.y - 1 + 1); pDC->LineTo(pt.x - 2, pt.y - 6);
pDC->LineTo(pt.x + 2, pt.y - 6); pDC->LineTo(pt.x + 2, pt.y - 1 + 1);
pDC->MoveTo(pt.x + 1, pt.y - 1 + 1); pDC->LineTo(pt.x + 1, pt.y - 6);
}
}
else
{
CXTPDockingPaneVisualStudio2008Theme::DrawCaptionButtonEntry(pDC, pButton, pt, clrButton);
}
}