// PaneColorSet.cpp: implementation of the CPaneColorSet class. // // (c)1998-2025 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" ////////////////////////////////////////////////////////////////////// // 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: { m_clrText = XTPIniColor(_T("DockingPane.Inactive"), _T("TextColor"), RGB(43, 87, 154)); m_clrBack = XTPIniColor(_T("DockingPane.Inactive"), _T("BackgroundColor"), RGB(255, 255, 255)); m_clrBorderLite = m_clrBack; m_clrBorderDark = m_clrBack; } break; case xtpPaneThemeVisualStudio2012: { m_clrText = XTPIniColor(_T("DockingPane.Inactive"), _T("TextColor"), RGB(68, 68, 68)); m_clrBack = XTPIniColor(_T("DockingPane.Inactive"), _T("BackgroundColor"), RGB(246, 246, 246)); m_clrBorderLite = XTPIniColor(_T("DockingPane.Tabs"), _T("ButtonSelected"), RGB(246, 246, 246)); m_clrBorderDark = XTPIniColor(_T("DockingPane.Tabs"), _T("ButtonSelected"), RGB(246, 246, 246)); } break; case xtpPaneThemeVisualStudio2015: case xtpPaneThemeVisualStudio2017: case xtpPaneThemeVisualStudio2019: case xtpPaneThemeVisualStudio2022: { m_clrText = XTPIniColor(_T("DockingPane.Inactive"), _T("TextColor"), RGB(68, 68, 68)); m_clrBack = XTPIniColor(_T("DockingPane.Inactive"), _T("BackgroundColor"), RGB(246, 246, 246)); m_clrBorderLite = XTPIniColor(_T("DockingPane.Tabs"), _T("ButtonSelected"), RGB(246, 246, 246)); m_clrBorderDark = XTPIniColor(_T("DockingPane.Tabs"), _T("ButtonBorder"), RGB(204, 206, 219)); } break; case xtpPaneThemeNativeWindows10: case xtpPaneThemeNativeWindows11: { m_clrText = XTPIniColor(_T("DockingPane.Inactive"), _T("TextColor"), RGB(68, 68, 68)); m_clrBack = XTPIniColor(_T("DockingPane.Inactive"), _T("BackgroundColor"), RGB(246, 246, 246)); m_clrBorderLite = XTPIniColor(_T("DockingPane.Tabs"), _T("ButtonSelected"), RGB(246, 246, 246)); m_clrBorderDark = XTPIniColor(_T("DockingPane.Tabs"), _T("ButtonBorder"), RGB(204, 206, 219)); } 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*/) { 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 if (pPane && (m_nTheme == xtpPaneThemeVisualStudio2015 || m_nTheme == xtpPaneThemeVisualStudio2017 || m_nTheme == xtpPaneThemeVisualStudio2019 || m_nTheme == xtpPaneThemeVisualStudio2022)) { // 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); }