// 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*/