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++
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);
|
|
}
|
|
|
|
}
|
|
|