2024-06-23 17:36:53 +08:00

95 lines
2.9 KiB
C++

// PaneColorSet.cpp: implementation of the CPaneColorSet class.
//
// (c)1998-2018 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 "PaneColorSet.h"
#ifdef _XTP_INCLUDE_DOCKINGPANE
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPaneColorSet::CPaneColorSet() : m_nTheme(xtpPaneThemeDefault)
{
RefreshMetrics(m_nTheme);
}
CPaneColorSet::~CPaneColorSet()
{
}
void CPaneColorSet::RefreshMetrics(XTPDockingPanePaintTheme nTheme)
{
m_nTheme = nTheme;
switch (m_nTheme)
{
case xtpPaneThemeOffice2013:
case xtpPaneThemeVisualStudio2015:
{
m_clrText = XTPIniColor(_T("DockingPane.Inactive"), _T("TextColor"), ::GetSysColor(COLOR_WINDOWTEXT));
m_clrBack = XTPIniColor(_T("DockingPane.Inactive"), _T("BackgroundColor"), ::GetSysColor(COLOR_WINDOW));
m_clrBorderLite = XTPIniColor(_T("DockingPane"), _T("Background"), ::GetSysColor(COLOR_WINDOW));
m_clrBorderDark = XTPIniColor(_T("DockingPane.Tabs"), _T("ButtonBorder"), ::GetSysColor(COLOR_3DSHADOW));
}
break;
default:
{
m_clrText = ::GetSysColor(COLOR_WINDOWTEXT);
m_clrBack = ::GetSysColor(COLOR_WINDOW);
m_clrBorderLite = ::GetSysColor(COLOR_WINDOW);
m_clrBorderDark = ::GetSysColor(COLOR_3DSHADOW);
}
break;
}
}
void CPaneColorSet::DrawBorders(CDC* pDC, CRect rWindow, CXTPDockingPane* pPane /*=NULL*/)
{
if (!pPane || m_nTheme != xtpPaneThemeVisualStudio2015)
return;
COLORREF pclrDark[4] = { m_clrBorderDark, m_clrBorderDark, m_clrBorderDark, m_clrBorderDark }; // outside: left, top, right, bottom
COLORREF pclrLite[4] = { m_clrBorderLite, m_clrBorderLite, m_clrBorderLite, m_clrBorderLite }; // inside: left, top, right, bottom
// set top border color to inside color.
pclrDark[1] = pclrLite[1];
// if floating or a side panel, set left, right and bottom border color to inside color.
if (pPane->IsFloating() || pPane->IsSidePanel())
{
pclrDark[0] = pclrLite[0];
pclrDark[2] = pclrLite[2];
pclrDark[3] = pclrLite[3];
}
// if tabs are visible, set bottom border to inside color.
else if (pPane->IsTabsVisible())
{
pclrDark[3] = pclrLite[3];
}
CXTPDrawHelpers::DrawBorder(pDC, rWindow, pclrDark, pclrLite);
}
#endif /*_XTP_INCLUDE_DOCKINGPANE*/