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.
1142 lines
42 KiB
C++
1142 lines
42 KiB
C++
// XTPRibbonTheme.cpp: implementation of the CXTPRibbonPaintManager class.
|
|
//
|
|
// This file is a part of the XTREME RIBBON 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 "Common/XTPImageManager.h"
|
|
#include "Common/XTPHookManager.h"
|
|
#include "Common/XTPMarkupRender.h"
|
|
#include "Common/XTPColorManager.h"
|
|
#include "Common/XTPSystemHelpers.h"
|
|
#include "Common/XTPDrawHelpers.h"
|
|
|
|
#include "TabManager/XTPTabManager.h"
|
|
#include "TabManager/XTPTabPaintManager.h"
|
|
|
|
#include "CommandBars/XTPCommandBarsDefines.h"
|
|
#include "CommandBars/XTPCommandBar.h"
|
|
#include "CommandBars/XTPToolBar.h"
|
|
#include "CommandBars/XTPMenuBar.h"
|
|
#include "CommandBars/XTPPopupBar.h"
|
|
#include "CommandBars/XTPControls.h"
|
|
#include "CommandBars/XTPControl.h"
|
|
#include "CommandBars/XTPControlButton.h"
|
|
#include "CommandBars/XTPControlPopup.h"
|
|
|
|
#include "CommandBars/XTPPaintManager.h"
|
|
#include "CommandBars/XTPCommandBarsFrameHook.h"
|
|
|
|
|
|
#include "XTPRibbonGroup.h"
|
|
#include "XTPRibbonPopups.h"
|
|
#include "XTPRibbonBar.h"
|
|
#include "XTPRibbonTab.h"
|
|
#include "XTPRibbonControlTab.h"
|
|
#include "XTPRibbonPaintManager.h"
|
|
#include "XTPRibbonSystemTheme.h"
|
|
#include "XTPRibbonSystemButton.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
CXTPRibbonSystemTheme::CXTPRibbonSystemTheme(CXTPPaintManager* pPaintManager)
|
|
: CXTPRibbonPaintManager(pPaintManager)
|
|
{
|
|
m_pMarkupContext = XTPMarkupCreateContext(0);
|
|
}
|
|
|
|
|
|
CXTPRibbonSystemTheme::~CXTPRibbonSystemTheme()
|
|
{
|
|
XTPMarkupReleaseContext(m_pMarkupContext);
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::RenderMarkup(CDC* pDC, CRect rc, LPCTSTR lpszMarkupText)
|
|
{
|
|
CXTPMarkupUIElement* pMarkupUIElement = XTPMarkupParseText(m_pMarkupContext, lpszMarkupText);
|
|
|
|
XTPMarkupRenderElement(pMarkupUIElement, pDC->GetSafeHdc(), rc);
|
|
|
|
XTPMarkupReleaseElement(pMarkupUIElement);
|
|
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::RefreshMetrics()
|
|
{
|
|
CXTPRibbonPaintManager::RefreshMetrics();
|
|
|
|
m_clrRibbonFace = GetSysColor(COLOR_3DFACE);
|
|
m_clrMinimizedFrameEdgeShadow = GetSysColor(COLOR_3DSHADOW);
|
|
m_clrMinimizedFrameEdgeHighLight = GetSysColor(COLOR_3DHIGHLIGHT);
|
|
m_clrRibbonGroupCaptionText = GetSysColor(COLOR_BTNTEXT);
|
|
|
|
m_pTabPaintManager->GetColorSet()->m_clrHighlightText.SetStandardValue(m_clrRibbonGroupCaptionText);
|
|
m_pTabPaintManager->GetColorSet()->m_clrNormalText.SetStandardValue(m_clrRibbonGroupCaptionText);
|
|
m_pTabPaintManager->GetColorSet()->m_clrSelectedText.SetStandardValue(m_clrRibbonGroupCaptionText);
|
|
|
|
m_clrRecentFileListEdgeShadow = GetSysColor(COLOR_3DSHADOW);
|
|
m_clrRecentFileListEdgeHighLight = GetSysColor(COLOR_3DHIGHLIGHT);
|
|
|
|
m_nGroupSpacing = 2;
|
|
m_bFlatFrame = FALSE;
|
|
}
|
|
|
|
|
|
void CXTPRibbonSystemTheme::DrawRibbonTab(CDC* pDC, CXTPRibbonTab* pItem)
|
|
{
|
|
XTPTabPosition tabPosition = pItem->GetTabManager()->GetPosition();
|
|
|
|
CRect rcEntry(pItem->GetRect());
|
|
CXTPTabPaintManagerAppearanceSet::InflateRectEx(rcEntry, CRect(0, 1, -1, -1), tabPosition);
|
|
|
|
XTPRibbonTabContextColor tabColor = pItem->GetContextColor();
|
|
|
|
if (tabColor != xtpRibbonTabContextColorNone)
|
|
{
|
|
CXTPRibbonPaintManager::DrawRibbonTab(pDC, pItem);
|
|
return;
|
|
}
|
|
|
|
|
|
CXTPRibbonBar* pRibbonBar = pItem->GetRibbonBar();
|
|
|
|
BOOL bSelected = pItem->IsSelected();
|
|
BOOL bHighlighted = pItem->IsHighlighted();
|
|
BOOL bFocused = pItem->IsFocused();
|
|
|
|
if (bSelected && pRibbonBar->IsRibbonMinimized())
|
|
{
|
|
CXTPRibbonControlTab* pControlTab = (CXTPRibbonControlTab*)pItem->GetTabManager();
|
|
if (pControlTab->GetCommandBar() && pControlTab->GetCommandBar()->IsTrackingMode())
|
|
{
|
|
bFocused = bHighlighted = FALSE;
|
|
}
|
|
else if (pControlTab->GetSelected() && bFocused)
|
|
{
|
|
bFocused = bSelected = FALSE;
|
|
bHighlighted = TRUE;
|
|
}
|
|
else
|
|
{
|
|
bFocused = bSelected = FALSE;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (bSelected || bHighlighted)
|
|
{
|
|
|
|
LPCTSTR lpszMarkupText = NULL;
|
|
if (bSelected && bFocused)
|
|
{
|
|
lpszMarkupText =
|
|
_T("<Grid Margin = '0, 0, 0, 0' ClipToBounds='True'>")
|
|
_T("<Border Margin = '2, 2, 2, -2' BorderThickness='1' CornerRadius = '3' BorderBrush='{x:Static SystemColors.HighlightBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0.2' Color='{x:Static SystemColors.ControlLightLightColor}'/>")
|
|
_T(" <GradientStop Offset='1.3' Color='{x:Static SystemColors.HighlightColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
|
|
_T("<Border Margin='3, 3, 3, -2' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlLightLightBrush}'/>")
|
|
|
|
_T("</Grid>");
|
|
|
|
}
|
|
else if (bSelected && bHighlighted)
|
|
{
|
|
lpszMarkupText =
|
|
_T("<Grid Margin = '0, 0, 0, 0' ClipToBounds='True'>")
|
|
_T("<Border Margin = '2, 2, 2, -2' BorderThickness='1' CornerRadius = '3' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0.2' Color='{x:Static SystemColors.ControlLightLightColor}'/>")
|
|
_T(" <GradientStop Offset='1.3' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
|
|
_T("<Border Margin='3, 3, 3, -2' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlLightLightBrush}'/>")
|
|
|
|
_T("<Border Margin = '1, 1, 1, -3' BorderThickness='3' CornerRadius = '3'><Border.BorderBrush>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='-0.2' Color='Transparent'/>")
|
|
_T(" <GradientStop Offset='2' Color='{x:Static SystemColors.HighlightColor}'/>")
|
|
_T("</LinearGradientBrush></Border.BorderBrush></Border>")
|
|
|
|
_T("</Grid>");
|
|
|
|
}
|
|
else if (bSelected)
|
|
{
|
|
lpszMarkupText =
|
|
_T("<Grid Margin = '0, 0, 0, 0' ClipToBounds='True'>")
|
|
_T("<Border Margin = '2, 2, 2, -2' BorderThickness='1' CornerRadius = '3' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0.2' Color='{x:Static SystemColors.ControlLightLightColor}'/>")
|
|
_T(" <GradientStop Offset='1.3' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
|
|
_T("<Border Margin='3, 3, 3, -2' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlLightLightBrush}'/>")
|
|
_T("</Grid>");
|
|
}
|
|
else if (bHighlighted)
|
|
{
|
|
lpszMarkupText =
|
|
_T("<Grid Margin = '0, 0, 0, 0' ClipToBounds='True'>")
|
|
_T("<Border Margin = '2, 2, 2, -2' BorderThickness='1' CornerRadius = '3' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0.2' Color='Transparent'/>")
|
|
_T(" <GradientStop Offset='1.3' Color='{x:Static SystemColors.ControlDarkColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
|
|
_T("<Border Margin='3, 3, 3, -2' CornerRadius = '2' BorderThickness='1' BorderBrush='#A0FFFFFF'/>")
|
|
_T("</Grid>");
|
|
|
|
}
|
|
|
|
|
|
RenderMarkup(pDC, rcEntry, lpszMarkupText);
|
|
}
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::FillRibbonBar(CDC* pDC, CXTPRibbonBar* pRibbonBar)
|
|
{
|
|
|
|
CXTPClientRect rcRibbonClient(pRibbonBar);
|
|
if (pRibbonBar->IsFrameThemeEnabled())
|
|
rcRibbonClient.top += m_nRibbonCaptionHeight;
|
|
|
|
CRect rcRibbonTabs(rcRibbonClient.left, rcRibbonClient.top, rcRibbonClient.right, rcRibbonClient.top + m_nTabsHeight);
|
|
CRect rcRibbonGroups(rcRibbonClient.left, rcRibbonTabs.bottom, rcRibbonClient.right, rcRibbonClient.bottom);
|
|
|
|
pDC->FillSolidRect(rcRibbonTabs, m_clrRibbonFace);
|
|
pDC->FillSolidRect(rcRibbonGroups, m_clrRibbonFace);
|
|
|
|
if (pRibbonBar->IsQuickAccessBelowRibbon())
|
|
{
|
|
CRect rcQuickAccess = pRibbonBar->GetQuickAccessRect();
|
|
pDC->Draw3dRect(rcQuickAccess, GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DSHADOW));
|
|
}
|
|
|
|
if (!pRibbonBar->IsGroupsVisible() && !pRibbonBar->IsQuickAccessBelowRibbon())
|
|
{
|
|
m_pPaintManger->HorizontalLine(pDC, rcRibbonClient.left, rcRibbonClient.bottom - 2, rcRibbonClient.right, m_clrMinimizedFrameEdgeShadow);
|
|
m_pPaintManger->HorizontalLine(pDC, rcRibbonClient.left, rcRibbonClient.bottom - 1, rcRibbonClient.right, m_clrMinimizedFrameEdgeHighLight);
|
|
}
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::FillGroupRect(CDC* pDC, CXTPRibbonTab* /*pActiveTab*/, CRect rcGroups)
|
|
{
|
|
LPCTSTR lpszMarkupText =
|
|
|
|
_T("<Grid>")
|
|
_T("<Border><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='#00FFFFFF'/>")
|
|
_T(" <GradientStop Offset='1.5' Color='{x:Static SystemColors.ControlDarkColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
|
|
|
|
_T("<Border Margin='1, 0, 1, 2' CornerRadius = '3' BorderThickness='1'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlLightLightColor}'/>")
|
|
_T(" <GradientStop Offset='0.2' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background><Border.BorderBrush>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlDarkColor}'/>")
|
|
_T(" <GradientStop Offset='0.6' Color='{x:Static SystemColors.ControlDarkColor}'/>")
|
|
_T(" <GradientStop Offset='1.2' Color='{x:Static SystemColors.ControlDarkDarkColor}'/>")
|
|
_T("</LinearGradientBrush></Border.BorderBrush></Border>")
|
|
_T("<Border Margin='2, 1, 2, 3' CornerRadius = '3' BorderThickness='1, 1, 1, 1'> <Border.BorderBrush>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='#00FFFFFF'/>")
|
|
_T(" <GradientStop Offset='0.2' Color='#00FFFFFF'/>")
|
|
_T(" <GradientStop Offset='1' Color='#6FFFFFFF'/>")
|
|
_T("</LinearGradientBrush></Border.BorderBrush></Border>")
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, rcGroups, lpszMarkupText);
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::FillGroupPopupToolBar(CDC* pDC, CXTPRibbonGroup* /*pGroup*/, CXTPCommandBar* pCommandBar)
|
|
{
|
|
pDC->SetBkMode(TRANSPARENT);
|
|
|
|
CXTPClientRect rcRibbon(pCommandBar);
|
|
|
|
pDC->FillSolidRect(rcRibbon, m_clrRibbonFace);
|
|
}
|
|
|
|
|
|
void CXTPRibbonSystemTheme::DrawGroup(CDC* pDC, CXTPRibbonGroup* pGroup)
|
|
{
|
|
CRect rcGroup(pGroup->GetRect());
|
|
|
|
CRect rcGroupClient(rcGroup.left, rcGroup.top, rcGroup.right, rcGroup.bottom - m_nGroupCaptionHeight);
|
|
CRect rcGroupCaption(rcGroup.left, rcGroupClient.bottom, rcGroup.right, rcGroup.bottom);
|
|
|
|
|
|
if (!pGroup->IsReduced())
|
|
{
|
|
|
|
if (pGroup->IsHighlighted())
|
|
{
|
|
LPCTSTR lpszMarkupText =
|
|
|
|
_T("<Grid>")
|
|
_T("<Border Margin='1, 1, 0, 0' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlLightLightBrush}'/>")
|
|
_T("<Border Margin='1, 1, 2, 2' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlLightLightBrush}'/>")
|
|
_T("<Border Margin='0, 0, 1, 1' Background='#5FFFFFFF' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'/>")
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, rcGroup, lpszMarkupText);
|
|
|
|
lpszMarkupText =
|
|
|
|
_T("<Grid>")
|
|
_T("<Border Margin='1, 0, 2, 2'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,-0.4' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T(" <GradientStop Offset='1' Color='{x:Static SystemColors.ControlDarkColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, rcGroupCaption, lpszMarkupText);
|
|
|
|
lpszMarkupText =
|
|
|
|
_T("<Grid>")
|
|
_T("<Border Margin='1, 1, 2, 2' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlLightLightBrush}'/>")
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, rcGroup, lpszMarkupText);
|
|
|
|
}
|
|
else
|
|
{
|
|
LPCTSTR lpszMarkupText =
|
|
|
|
_T("<Grid>")
|
|
_T("<Border Margin='1, 1, 0, 0' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlLightLightBrush}'/>")
|
|
_T("<Border Margin='0, 0, 1, 1' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'/>")
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, rcGroup, lpszMarkupText);
|
|
|
|
lpszMarkupText =
|
|
|
|
_T("<Grid>")
|
|
_T("<Border Margin='1, 0, 2, 2'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,-0.2' EndPoint='0,1.2'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T(" <GradientStop Offset='1' Color='{x:Static SystemColors.ControlDarkColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, rcGroupCaption, lpszMarkupText);
|
|
}
|
|
|
|
|
|
CString strCaption = pGroup->GetCaption();
|
|
XTPDrawHelpers()->StripMnemonics(strCaption);
|
|
|
|
CXTPFontDC font(pDC, &m_fontGroupCaption);
|
|
|
|
CRect rcGroupCaptionText(rcGroupCaption);
|
|
rcGroupCaptionText.OffsetRect(0, -1);
|
|
if (pGroup->IsOptionButtonVisible())
|
|
rcGroupCaptionText.right -= m_nGroupCaptionHeight + 1;
|
|
rcGroupCaptionText.DeflateRect(2, 2);
|
|
|
|
pDC->SetTextColor(m_clrRibbonGroupCaptionText);
|
|
pDC->DrawText(strCaption, rcGroupCaptionText, DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_END_ELLIPSIS | DT_CENTER);
|
|
}
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::DrawRibbonFrameCaption(CDC* pDC, CXTPRibbonBar* pRibbonBar, BOOL bActive)
|
|
{
|
|
if (pRibbonBar->IsDwmEnabled())
|
|
{
|
|
CXTPRibbonPaintManager::DrawRibbonFrameCaption(pDC, pRibbonBar, bActive);
|
|
return;
|
|
}
|
|
|
|
CFrameWnd* pSite = (CFrameWnd*)pRibbonBar->GetSite();
|
|
CRect rcCaption = pRibbonBar->GetCaptionRect();
|
|
|
|
if (!pRibbonBar->IsDwmEnabled())
|
|
{
|
|
|
|
LPCTSTR lpszMarkupText = bActive ?
|
|
_T("<Border BorderThickness='0,0,0,1' BorderBrush='{x:Static SystemColors.ActiveCaptionBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.GradientActiveCaptionColor}'/>")
|
|
_T(" <GradientStop Offset='0.2' Color='{x:Static SystemColors.ActiveCaptionColor}'/>")
|
|
_T(" <GradientStop Offset='1.5' Color='{x:Static SystemColors.GradientActiveCaptionColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>") :
|
|
|
|
_T("<Border BorderThickness='0,0,0,1' BorderBrush='{x:Static SystemColors.InactiveCaptionBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.GradientInactiveCaptionColor}'/>")
|
|
_T(" <GradientStop Offset='0.2' Color='{x:Static SystemColors.InactiveCaptionColor}'/>")
|
|
_T(" <GradientStop Offset='1.5' Color='{x:Static SystemColors.GradientInactiveCaptionColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>");
|
|
|
|
RenderMarkup(pDC, rcCaption, lpszMarkupText);
|
|
}
|
|
else
|
|
{
|
|
pDC->FillSolidRect(rcCaption, 0);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
if (!pRibbonBar->IsQuickAccessBelowRibbon() && pRibbonBar->IsQuickAccessVisible() &&
|
|
((CXTPControls*)pRibbonBar->GetQuickAccessControls())->GetVisibleCount() > 0)
|
|
{
|
|
CRect rcQuickAccess = pRibbonBar->GetQuickAccessRect();
|
|
CRect rcQuickAccessArea(rcQuickAccess.left - 15, rcQuickAccess.top + 2, rcQuickAccess.right, rcQuickAccess.top + 2 + pRibbonBar->GetQuickAccessHeight());
|
|
|
|
CString strMarkupText;
|
|
|
|
rcQuickAccessArea.DeflateRect(1, 2, 3, 2);
|
|
|
|
CSize sz = rcQuickAccessArea.Size();
|
|
|
|
strMarkupText.Format(
|
|
_T("<Path Data='M0 0 S %i %i %i %i L %i %i S %i %i %i %i l 0 0 S %i %i %i %i Z' Stroke='#22FFFFFF' StrokeThickness='2' Fill='#44FFFFFF' ></Path>")
|
|
, sz.cy /2, 0, sz.cy / 2, sz.cy,
|
|
sz.cx - sz.cy / 2, sz.cy, sz.cx, sz.cy, sz.cx, sz.cy / 2, sz.cx, 0, sz.cx - sz.cy /2, 0);
|
|
|
|
RenderMarkup(pDC, rcQuickAccessArea, strMarkupText);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
if (pRibbonBar->GetSystemButton() == NULL)
|
|
{
|
|
HICON hIcon = m_pPaintManger->GetFramePaintManager()->GetFrameSmallIcon(pSite);
|
|
if (hIcon)
|
|
{
|
|
CSize szIcon(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON));
|
|
|
|
int nTop = (rcCaption.Height() - szIcon.cy)/2;
|
|
int nLeft = rcCaption.left + 10;
|
|
|
|
DrawIconEx(pDC->GetSafeHdc(), nLeft, nTop, hIcon,
|
|
szIcon.cx, szIcon.cy, 0, NULL, DI_NORMAL);
|
|
}
|
|
}
|
|
|
|
|
|
CRect rcCaptionText = pRibbonBar->GetCaptionTextRect();
|
|
|
|
CXTPRibbonTabContextHeaders* pContextHeaders = pRibbonBar->GetContextHeaders();
|
|
if (pContextHeaders->GetCount() != 0)
|
|
{
|
|
DrawRibbonFrameContextHeaders(pDC, pRibbonBar, pContextHeaders);
|
|
}
|
|
|
|
CXTPFontDC font(pDC, &m_pPaintManger->GetFramePaintManager()->m_fontFrameCaption);
|
|
|
|
CString strWindowText;
|
|
pSite->GetWindowText(strWindowText);
|
|
rcCaptionText.left += max(0, (rcCaptionText.Width() - pDC->GetTextExtent(strWindowText).cx) / 2);
|
|
|
|
if (pSite->GetStyle() & WS_MAXIMIZE)
|
|
{
|
|
rcCaptionText.top += pRibbonBar->GetFrameHook()->GetFrameBorder() / 2;
|
|
}
|
|
|
|
if (!pRibbonBar->IsDwmEnabled())
|
|
{
|
|
m_pPaintManger->GetFramePaintManager()->DrawCaptionText(pDC, rcCaptionText, pSite, bActive);
|
|
}
|
|
else
|
|
{
|
|
DrawDwmCaptionText(pDC, rcCaptionText, strWindowText, pSite, bActive);
|
|
}
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::DrawRibbonFrameCaptionBar(CDC* pDC, CXTPRibbonBar* pRibbonBar)
|
|
{
|
|
CRect rcCaption = pRibbonBar->GetCaptionRect();
|
|
rcCaption.top--;
|
|
|
|
|
|
LPCTSTR lpszMarkupText =
|
|
_T("<Border BorderThickness='0,0,0,1' BorderBrush='{x:Static SystemColors.ActiveCaptionBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.GradientActiveCaptionColor}'/>")
|
|
_T(" <GradientStop Offset='0.2' Color='{x:Static SystemColors.ActiveCaptionColor}'/>")
|
|
_T(" <GradientStop Offset='1.5' Color='{x:Static SystemColors.GradientActiveCaptionColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>");
|
|
|
|
RenderMarkup(pDC, rcCaption, lpszMarkupText);
|
|
|
|
|
|
if (!pRibbonBar->IsQuickAccessBelowRibbon() && pRibbonBar->IsQuickAccessVisible() &&
|
|
((CXTPControls*)pRibbonBar->GetQuickAccessControls())->GetVisibleCount() > 0)
|
|
{
|
|
CRect rcQuickAccess = pRibbonBar->GetQuickAccessRect();
|
|
int nFrameBorder = 0;
|
|
CRect rcQuickAccessArea(rcQuickAccess.left - 15, nFrameBorder, rcQuickAccess.right, pRibbonBar->GetQuickAccessHeight() + nFrameBorder);
|
|
|
|
CString strMarkupText;
|
|
|
|
rcQuickAccessArea.DeflateRect(1, 2, 3, 2);
|
|
|
|
CSize sz = rcQuickAccessArea.Size();
|
|
|
|
strMarkupText.Format(
|
|
_T("<Path Data='M0 0 S %i %i %i %i L %i %i S %i %i %i %i l 0 0 S %i %i %i %i Z' Stroke='#22FFFFFF' StrokeThickness='2' Fill='#44FFFFFF' ></Path>")
|
|
, sz.cy /2, 0, sz.cy / 2, sz.cy,
|
|
sz.cx - sz.cy / 2, sz.cy, sz.cx, sz.cy, sz.cx, sz.cy / 2, sz.cx, 0, sz.cx - sz.cy /2, 0);
|
|
|
|
RenderMarkup(pDC, rcQuickAccessArea, strMarkupText);
|
|
|
|
}
|
|
|
|
CXTPRibbonTabContextHeaders* pContextHeaders = pRibbonBar->GetContextHeaders();
|
|
if (pContextHeaders->GetCount() != 0)
|
|
{
|
|
DrawRibbonFrameContextHeaders(pDC, pRibbonBar, pContextHeaders);
|
|
}
|
|
}
|
|
|
|
|
|
CSize CXTPRibbonSystemTheme::DrawControlGroupOption(CDC* pDC, CXTPControl* pControlGroupOption, BOOL bDraw)
|
|
{
|
|
if (bDraw)
|
|
{
|
|
CRect rc = pControlGroupOption->GetRect();
|
|
|
|
m_pPaintManger->DrawRectangle(pDC, rc, pControlGroupOption->GetSelected(), pControlGroupOption->GetPressed(), TRUE, FALSE, FALSE, xtpBarTypeNormal, xtpBarTop);
|
|
|
|
rc = CRect(CPoint((rc.left + rc.right - 6) / 2, (rc.bottom + rc.top - 8) / 2), CSize(6, 8));
|
|
|
|
CXTPPenDC pen(*pDC, 0);
|
|
CXTPBrushDC brush(*pDC, 0);
|
|
pDC->MoveTo(rc.left, rc.top + 5);
|
|
pDC->LineTo(rc.left, rc.top);
|
|
pDC->LineTo(rc.left + 6, rc.top);
|
|
pDC->MoveTo(rc.left + 3, rc.top + 3);
|
|
pDC->LineTo(rc.left + 7, rc.top + 7);
|
|
|
|
XTPDrawHelpers()->Triangle(pDC, CPoint(rc.left + 3, rc.top + 6), CPoint(rc.left + 6, rc.top + 3), CPoint(rc.left + 6, rc.top + 6));
|
|
|
|
pen.Color(0xFFFFFF);
|
|
pDC->MoveTo(rc.left + 1, rc.top + 5);
|
|
pDC->LineTo(rc.left + 1, rc.top + 1);
|
|
pDC->LineTo(rc.left + 6, rc.top + 1);
|
|
|
|
pDC->MoveTo(rc.left + 4, rc.top + 7);
|
|
pDC->LineTo(rc.left + 7, rc.top + 7);
|
|
pDC->LineTo(rc.left + 7, rc.top + 2);
|
|
pDC->SetPixel(rc.left + 4, rc.top + 3, 0xFFFFFF);
|
|
}
|
|
|
|
return CSize(15, 14);
|
|
}
|
|
|
|
CSize CXTPRibbonSystemTheme::DrawControlGroupPopup(CDC* pDC, CXTPControlPopup* pControlGroupPopup, BOOL bDraw)
|
|
{
|
|
CXTPRibbonGroup* pRibbonGroup = pControlGroupPopup->GetRibbonGroup();
|
|
|
|
|
|
if (!pRibbonGroup)
|
|
{
|
|
if (bDraw)
|
|
{
|
|
m_pPaintManger->DrawControlEntry(pDC, pControlGroupPopup);
|
|
}
|
|
return m_pPaintManger->DrawControlToolBarParent(pDC, pControlGroupPopup, bDraw);
|
|
}
|
|
|
|
if (bDraw)
|
|
{
|
|
CRect rc = pControlGroupPopup->GetRect();
|
|
|
|
if (pControlGroupPopup->GetPopuped())
|
|
{
|
|
LPCTSTR lpszMarkupText =
|
|
|
|
_T("<Grid>")
|
|
_T("<Border Margin='1, 1, 2, 2' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlLightLightBrush}'/>")
|
|
_T("<Border Margin='0, 0, 1, 1' Background='#5FFFFFFF' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='-0.2' Color='{x:Static SystemColors.ControlDarkColor}'/>")
|
|
_T(" <GradientStop Offset='2' Color='Transparent'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, rc, lpszMarkupText);
|
|
}
|
|
else if (pControlGroupPopup->GetSelected())
|
|
{
|
|
LPCTSTR lpszMarkupText =
|
|
|
|
_T("<Grid>")
|
|
_T("<Border Margin='1, 1, 2, 2' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlLightLightBrush}'/>")
|
|
_T("<Border Margin='0, 0, 1, 1' Background='#5FFFFFFF' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'/>")
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, rc, lpszMarkupText);
|
|
|
|
}
|
|
else
|
|
{
|
|
LPCTSTR lpszMarkupText =
|
|
_T("<Grid>")
|
|
_T("<Border Margin='1, 1, 2, 2' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlLightLightBrush}'/>")
|
|
_T("<Border Margin='0, 0, 1, 1' CornerRadius = '2' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'/>")
|
|
_T("</Grid>");
|
|
RenderMarkup(pDC, rc, lpszMarkupText);
|
|
}
|
|
}
|
|
|
|
CSize szButton(max(42, m_pPaintManger->m_nTextHeight * 2 - 3), GetEditHeight() * 3);
|
|
|
|
CXTPFontDC font(pDC, m_pPaintManger->GetControlFont(pControlGroupPopup));
|
|
|
|
int nSplitDropDownHeight = m_pPaintManger->GetSplitDropDownHeight();
|
|
|
|
if (bDraw)
|
|
{
|
|
CXTPImageManagerIcon* pImageIcon = pControlGroupPopup->GetImage(0);
|
|
BOOL bDrawImage = (pImageIcon != NULL);
|
|
|
|
CRect rcButton = pControlGroupPopup->GetRect();
|
|
if (bDrawImage)
|
|
{
|
|
CSize sz(pImageIcon->GetWidth(), pImageIcon->GetHeight());
|
|
|
|
CPoint pt = CPoint(rcButton.CenterPoint().x - sz.cx / 2, rcButton.top + 4);
|
|
|
|
if (sz.cx < 20)
|
|
{
|
|
|
|
pt.y = rcButton.top + 9;
|
|
}
|
|
|
|
m_pPaintManger->DrawImage(pDC, pt, sz, pImageIcon,
|
|
pControlGroupPopup->GetSelected(), pControlGroupPopup->GetPressed(),
|
|
pControlGroupPopup->GetEnabled(), FALSE, pControlGroupPopup->GetPopuped());
|
|
}
|
|
|
|
CRect rcText = rcButton;
|
|
rcText.bottom -= m_nGroupCaptionHeight + 2;
|
|
rcText.top = rcText.bottom - nSplitDropDownHeight;
|
|
|
|
pDC->SetTextColor(m_pPaintManger->GetControlTextColor(pControlGroupPopup));
|
|
m_pPaintManger->DrawControlText2(pDC, pControlGroupPopup, rcText, TRUE, FALSE, TRUE);
|
|
}
|
|
else
|
|
{
|
|
CSize szText = m_pPaintManger->DrawControlText2(pDC, pControlGroupPopup, CXTPEmptyRect(), FALSE, FALSE, TRUE);
|
|
|
|
szButton.cx = max(szButton.cx, szText.cx + 5);
|
|
}
|
|
return szButton;
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::DrawRibbonQuickAccessButton(CDC* pDC, CXTPControlPopup* pControl)
|
|
{
|
|
|
|
m_pPaintManger->DrawRectangle(pDC, pControl->GetRect(), pControl->GetSelected(), pControl->GetPressed(), pControl->GetEnabled(), FALSE,
|
|
pControl->GetPopuped(), xtpBarTypeNormal, xtpBarTop);
|
|
|
|
|
|
{
|
|
COLORREF clr = GetSysColor(COLOR_3DHIGHLIGHT);
|
|
|
|
CXTPPenDC pen(*pDC, clr);
|
|
CXTPBrushDC brush(*pDC, clr);
|
|
|
|
CPoint pt = pControl->GetRect().CenterPoint();
|
|
pt.y++;
|
|
|
|
pDC->MoveTo(pt.x - 2, pt.y - 3);
|
|
pDC->LineTo(pt.x + 3, pt.y - 3);
|
|
|
|
XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 2, pt.y), CPoint(pt.x + 2, pt.y), CPoint(pt.x, pt.y + 2));
|
|
}
|
|
|
|
{
|
|
COLORREF clr = GetSysColor(COLOR_BTNTEXT);
|
|
|
|
CXTPPenDC pen(*pDC, clr);
|
|
CXTPBrushDC brush(*pDC, clr);
|
|
|
|
CPoint pt = pControl->GetRect().CenterPoint();
|
|
|
|
pDC->MoveTo(pt.x - 2, pt.y - 3);
|
|
pDC->LineTo(pt.x + 3, pt.y - 3);
|
|
|
|
XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 2, pt.y), CPoint(pt.x + 2, pt.y), CPoint(pt.x, pt.y + 2));
|
|
}
|
|
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::DrawRibbonQuickAccessMoreButton(CDC* pDC, CXTPControlPopup* pControl)
|
|
{
|
|
m_pPaintManger->DrawRectangle(pDC, pControl->GetRect(), pControl->GetSelected(), pControl->GetPressed(), pControl->GetEnabled(), FALSE,
|
|
pControl->GetPopuped(), xtpBarTypeNormal, xtpBarTop);
|
|
|
|
{
|
|
COLORREF clr = GetSysColor(COLOR_3DHIGHLIGHT);
|
|
|
|
CXTPPenDC pen(*pDC, clr);
|
|
CXTPBrushDC brush(*pDC, clr);
|
|
|
|
CPoint pt = pControl->GetRect().CenterPoint();
|
|
|
|
XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 3, pt.y - 2), CPoint(pt.x - 1, pt.y), CPoint(pt.x - 3, pt.y + 2));
|
|
XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x + 1, pt.y - 2), CPoint(pt.x + 3, pt.y), CPoint(pt.x + 1, pt.y + 2));
|
|
}
|
|
|
|
{
|
|
COLORREF clr = GetSysColor(COLOR_BTNTEXT);
|
|
|
|
CXTPPenDC pen(*pDC, clr);
|
|
CXTPBrushDC brush(*pDC, clr);
|
|
|
|
CPoint pt = pControl->GetRect().CenterPoint();
|
|
|
|
|
|
XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 3, pt.y - 1), CPoint(pt.x - 2, pt.y), CPoint(pt.x - 3, pt.y + 1));
|
|
XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x + 1, pt.y - 1), CPoint(pt.x + 2, pt.y), CPoint(pt.x + 1, pt.y + 1));
|
|
}
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::FillMorePopupToolBarEntry(CDC* pDC, CXTPCommandBar* pBar)
|
|
{
|
|
CRect rc;
|
|
pBar->GetClientRect(&rc);
|
|
|
|
pDC->FillSolidRect(rc, m_clrRibbonFace);
|
|
pDC->Draw3dRect(rc, GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_3DSHADOW));
|
|
}
|
|
|
|
|
|
void CXTPRibbonSystemTheme::FillSystemPopupBarEntry(CDC* pDC, CXTPPopupBar* pBar)
|
|
{
|
|
CXTPClientRect rc(pBar);
|
|
|
|
|
|
LPCTSTR lpszMarkupText =
|
|
|
|
_T("<Grid>")
|
|
_T("<Border BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlDarkBrush}' Background='{x:Static SystemColors.WindowBrush}'/>")
|
|
_T("<Border Margin='1' BorderThickness='5, 17, 5, 28' BorderBrush='{x:Static SystemColors.ControlBrush}'/>")
|
|
|
|
_T("<Border Margin='1, 1, 1, 0' Height = '10' VerticalAlignment='Top'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlLightLightColor}'/>")
|
|
_T(" <GradientStop Offset='1' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
|
|
_T("<Border Margin='5, 17, 5, 28' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlDarkBrush}' />")
|
|
_T("<Border Margin='4, 16, 4, 27' BorderThickness='1' BorderBrush='{x:Static SystemColors.ControlLightLightBrush}' />")
|
|
|
|
_T("<Border Margin='1, 0, 1, 1' Height = '26' VerticalAlignment='Bottom'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T(" <GradientStop Offset='1' Color='{x:Static SystemColors.ControlDarkColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, rc, lpszMarkupText);
|
|
|
|
CXTPRibbonControlSystemButton* pControlPopup = DYNAMIC_DOWNCAST(CXTPRibbonControlSystemButton, pBar->GetControlPopup());
|
|
|
|
if (!pControlPopup)
|
|
return;
|
|
|
|
|
|
CXTPRibbonBar* pRibbonBar = DYNAMIC_DOWNCAST(CXTPRibbonBar, pControlPopup->GetParent());
|
|
if (!pRibbonBar)
|
|
return;
|
|
|
|
|
|
CRect rcPopup = pControlPopup->GetRect();
|
|
pControlPopup->GetParent()->ClientToScreen(rcPopup);
|
|
pBar->ScreenToClient(rcPopup);
|
|
|
|
if (pRibbonBar->IsCaptionVisible() && CRect().IntersectRect(rcPopup, rc))
|
|
{
|
|
DrawRibbonFrameSystemButton(pDC, pControlPopup, rcPopup);
|
|
}
|
|
|
|
for (int i = 0; i < pBar->GetControlCount(); i++)
|
|
{
|
|
CXTPControl* pControl = pBar->GetControl(i);
|
|
if (pControl && pControl->GetWrap())
|
|
{
|
|
CRect rcRow = pControl->GetRowRect();
|
|
pDC->FillSolidRect(rcRow, GetXtremeColor(XPCOLOR_TOOLBAR_FACE));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void CXTPRibbonSystemTheme::DrawSystemPopupBarButton(CDC* pDC, CXTPControl* pButton)
|
|
{
|
|
LPCTSTR lpszMarkupText =
|
|
|
|
pButton->GetSelected() ?
|
|
_T("<Grid>")
|
|
_T("<Border BorderThickness='1' CornerRadius='2' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T(" <GradientStop Offset='1' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
_T("</Grid>") :
|
|
|
|
_T("<Grid>")
|
|
_T("<Border BorderThickness='1' CornerRadius='2' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlLightLightColor}'/>")
|
|
_T(" <GradientStop Offset='1' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border>")
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, pButton->GetRect(), lpszMarkupText);
|
|
|
|
|
|
m_pPaintManger->DrawControlToolBarParent(pDC, pButton, TRUE);
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::DrawRibbonFrameSystemButton(CDC* pDC, CXTPRibbonControlSystemButton* pControl, CRect rc)
|
|
{
|
|
CXTPRibbonBar* pRibbonBar = (CXTPRibbonBar*)pControl->GetParent();
|
|
|
|
if (!pRibbonBar->IsCaptionVisible() || !pRibbonBar->IsTabsVisible())
|
|
{
|
|
m_pPaintManger->DrawControlToolBarParent(pDC, pControl, TRUE);
|
|
return;
|
|
}
|
|
|
|
XTPImageState nState = xtpImageNormal;
|
|
if (pControl->GetPopuped())
|
|
nState = xtpImagePressed;
|
|
else if (pControl->GetSelected())
|
|
nState = xtpImageHot;
|
|
|
|
CXTPImageManagerIcon* pIcon = pControl->GetImage(32);
|
|
|
|
if (pIcon && pIcon->GetWidth() > 32)
|
|
{
|
|
CPoint ptIcon((rc.left + rc.right - pIcon->GetWidth()) / 2, (rc.top + rc.bottom - pIcon->GetHeight()) / 2);
|
|
|
|
pIcon->m_bDrawComposited = pControl->HasDwmCompositedRect();
|
|
pIcon->Draw(pDC, ptIcon, pIcon->GetIcon(nState));
|
|
pIcon->m_bDrawComposited = FALSE;
|
|
return;
|
|
}
|
|
|
|
|
|
int nOffset = 0;
|
|
if (rc.top < 0)
|
|
{
|
|
nOffset = rc.top;
|
|
rc.OffsetRect(0, -nOffset);
|
|
}
|
|
|
|
{
|
|
CSize szDest(46, 45);
|
|
CPoint ptDest((rc.left + rc.right - szDest.cx) / 2, nOffset + (rc.top + rc.bottom - szDest.cy) / 2);
|
|
LPCTSTR lpszMarkupText = NULL;
|
|
|
|
if (pControl->GetPopuped())
|
|
{
|
|
|
|
lpszMarkupText =
|
|
_T("<Grid Margin='0, 2, 0, 0'>")
|
|
|
|
_T("<Ellipse Width='38' Height='38' Margin='0, 0, -1, -1'>")
|
|
_T("<Ellipse.Fill>")
|
|
_T("<LinearGradientBrush StartPoint='1, 1' EndPoint='0,0'>")
|
|
_T("<GradientStop Offset='0' Color='#32000000' />")
|
|
_T("<GradientStop Offset='0.95' Color='#01000000' />")
|
|
_T("<GradientStop Offset='1' Color='Transparent' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Fill> ")
|
|
_T("</Ellipse> ")
|
|
_T("<Ellipse Width='37' Height='37'>")
|
|
_T("<Ellipse.Fill>")
|
|
_T("<SolidColorBrush Color='{x:Static SystemColors.HighlightColor}' />")
|
|
_T("</Ellipse.Fill> ")
|
|
_T("</Ellipse>")
|
|
_T("<Ellipse Width='37' Height='37' StrokeThickness='1'>")
|
|
_T("<Ellipse.Fill>")
|
|
_T("<LinearGradientBrush StartPoint='0, 0' EndPoint='0, 1'>")
|
|
_T("<GradientStop Offset='0' Color='#FEFFFFFF' />")
|
|
_T("<GradientStop Offset='0.25' Color='#AAFFFFFF' />")
|
|
_T("<GradientStop Offset='0.5' Color='#55FFFFFF' />")
|
|
_T("<GradientStop Offset='0.5' Color='#00FFFFFF' />")
|
|
_T("<GradientStop Offset='1' Color='#66FFFFFF' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Fill>")
|
|
_T("<Ellipse.Stroke>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T("<GradientStop Offset='0' Color='{x:Static SystemColors.ControlDarkColor}' />")
|
|
_T("<GradientStop Offset='0.5' Color='{x:Static SystemColors.ControlDarkColor}' />")
|
|
_T("<GradientStop Offset='1' Color='{x:Static SystemColors.ControlDarkColor}' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Stroke>")
|
|
_T("</Ellipse> ")
|
|
_T("<Ellipse Width='35' Height='35' StrokeThickness='1'>")
|
|
_T("<Ellipse.Stroke>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='1,1'>")
|
|
_T("<GradientStop Offset='0' Color='#55E1E7EF' />")
|
|
_T("<GradientStop Offset='0.5' Color='#55BCC8DB' />")
|
|
_T("<GradientStop Offset='1' Color='#55FFFFFF' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Stroke>")
|
|
_T("</Ellipse>")
|
|
_T("</Grid>");
|
|
}
|
|
else if (pControl->GetSelected())
|
|
{
|
|
lpszMarkupText =
|
|
_T("<Grid Margin='0, 2, 0, 0'>")
|
|
|
|
_T("<Ellipse Width='38' Height='38' Margin='0, 0, -1, -1'>")
|
|
_T("<Ellipse.Fill>")
|
|
_T("<LinearGradientBrush StartPoint='1, 1' EndPoint='0,0'>")
|
|
_T("<GradientStop Offset='0' Color='#32000000' />")
|
|
_T("<GradientStop Offset='0.95' Color='#01000000' />")
|
|
_T("<GradientStop Offset='1' Color='Transparent' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Fill> ")
|
|
_T("</Ellipse> ")
|
|
_T("<Ellipse Width='37' Height='37'>")
|
|
_T("<Ellipse.Fill>")
|
|
_T("<LinearGradientBrush StartPoint='0, 0' EndPoint='0,1'>")
|
|
_T("<GradientStop Offset='0' Color='{x:Static SystemColors.ControlDarkColor}' />")
|
|
_T("<GradientStop Offset='1' Color='{x:Static SystemColors.HighlightColor}' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Fill> ")
|
|
_T("</Ellipse>")
|
|
_T("<Ellipse Width='37' Height='37' StrokeThickness='1'>")
|
|
_T("<Ellipse.Fill>")
|
|
_T("<LinearGradientBrush StartPoint='0, 0' EndPoint='0, 1'>")
|
|
_T("<GradientStop Offset='0' Color='#FEFFFFFF' />")
|
|
_T("<GradientStop Offset='0.25' Color='#AAFFFFFF' />")
|
|
_T("<GradientStop Offset='0.5' Color='#55FFFFFF' />")
|
|
_T("<GradientStop Offset='0.5' Color='#00FFFFFF' />")
|
|
_T("<GradientStop Offset='1' Color='#66FFFFFF' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Fill>")
|
|
_T("<Ellipse.Stroke>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T("<GradientStop Offset='0' Color='{x:Static SystemColors.ControlDarkColor}' />")
|
|
_T("<GradientStop Offset='0.5' Color='{x:Static SystemColors.ControlDarkColor}' />")
|
|
_T("<GradientStop Offset='1' Color='{x:Static SystemColors.ControlDarkColor}' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Stroke>")
|
|
_T("</Ellipse> ")
|
|
_T("<Ellipse Width='35' Height='35' StrokeThickness='1'>")
|
|
_T("<Ellipse.Stroke>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='1,1'>")
|
|
_T("<GradientStop Offset='0' Color='#55E1E7EF' />")
|
|
_T("<GradientStop Offset='0.5' Color='#55BCC8DB' />")
|
|
_T("<GradientStop Offset='1' Color='#55FFFFFF' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Stroke>")
|
|
_T("</Ellipse>")
|
|
_T("</Grid>");
|
|
}
|
|
else
|
|
{
|
|
|
|
lpszMarkupText =
|
|
_T("<Grid Margin='0, 2, 0, 0'>")
|
|
|
|
_T("<Ellipse Width='38' Height='38' Margin='0, 0, -1, -1'>")
|
|
_T("<Ellipse.Fill>")
|
|
_T("<LinearGradientBrush StartPoint='1, 1' EndPoint='0,0'>")
|
|
_T("<GradientStop Offset='0' Color='#32000000' />")
|
|
_T("<GradientStop Offset='0.95' Color='#01000000' />")
|
|
_T("<GradientStop Offset='1' Color='Transparent' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Fill> ")
|
|
_T("</Ellipse> ")
|
|
_T("<Ellipse Width='37' Height='37'>")
|
|
_T("<Ellipse.Fill>")
|
|
_T("<SolidColorBrush Color='{x:Static SystemColors.ControlDarkColor}' />")
|
|
_T("</Ellipse.Fill> ")
|
|
_T("</Ellipse>")
|
|
_T("<Ellipse Width='37' Height='37' StrokeThickness='1'>")
|
|
_T("<Ellipse.Fill>")
|
|
_T("<LinearGradientBrush StartPoint='0, 0' EndPoint='0, 1'>")
|
|
_T("<GradientStop Offset='0' Color='#FEFFFFFF' />")
|
|
_T("<GradientStop Offset='0.25' Color='#AAFFFFFF' />")
|
|
_T("<GradientStop Offset='0.5' Color='#55FFFFFF' />")
|
|
_T("<GradientStop Offset='0.5' Color='#00FFFFFF' />")
|
|
_T("<GradientStop Offset='1' Color='#66FFFFFF' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Fill>")
|
|
_T("<Ellipse.Stroke>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T("<GradientStop Offset='0' Color='{x:Static SystemColors.ControlDarkColor}' />")
|
|
_T("<GradientStop Offset='0.5' Color='{x:Static SystemColors.ControlDarkColor}' />")
|
|
_T("<GradientStop Offset='1' Color='{x:Static SystemColors.ControlDarkColor}' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Stroke>")
|
|
_T("</Ellipse> ")
|
|
_T("<Ellipse Width='35' Height='35' StrokeThickness='1'>")
|
|
_T("<Ellipse.Stroke>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='1,1'>")
|
|
_T("<GradientStop Offset='0' Color='#E1E7EF' />")
|
|
_T("<GradientStop Offset='0.5' Color='#BCC8DB' />")
|
|
_T("<GradientStop Offset='1' Color='#FFFFFF' />")
|
|
_T("</LinearGradientBrush>")
|
|
_T("</Ellipse.Stroke>")
|
|
_T("</Ellipse>")
|
|
_T("</Grid>");
|
|
}
|
|
|
|
RenderMarkup(pDC, CRect(ptDest, szDest), lpszMarkupText);
|
|
|
|
}
|
|
|
|
if (pIcon)
|
|
{
|
|
CPoint ptIcon((rc.left + rc.right - pIcon->GetWidth()) / 2, nOffset + (rc.top + rc.bottom + 1 - pIcon->GetHeight()) / 2);
|
|
pIcon->m_bDrawComposited = pControl->HasDwmCompositedRect();
|
|
pIcon->Draw(pDC, ptIcon, pIcon->GetIcon(nState));
|
|
pIcon->m_bDrawComposited = FALSE;
|
|
}
|
|
else
|
|
{
|
|
CWnd* pSite = pControl->GetParent()->GetSite();
|
|
HICON hIcon = m_pPaintManger->GetFramePaintManager()->GetFrameLargeIcon(pSite);
|
|
if (hIcon)
|
|
{
|
|
CPoint ptIcon((rc.left + rc.right - 33) / 2, nOffset + (rc.top + rc.bottom - 31) / 2);
|
|
|
|
DrawIconEx(pDC->GetSafeHdc(), ptIcon.x, ptIcon.y, hIcon, 32, 32, NULL, NULL, DI_NORMAL);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CXTPRibbonSystemTheme::DrawRibbonScrollButton(CDC* pDC, CXTPControl* pControl, BOOL bScrollLeft)
|
|
{
|
|
CRect rc(pControl->GetRect());
|
|
|
|
if (bScrollLeft)
|
|
{
|
|
LPCTSTR lpszMarkupText =
|
|
_T("<Grid ClipToBounds='True' Background='{x:Static SystemColors.ControlBrush}' Margin='0, 0, 0, 2'>")
|
|
_T("<Border Margin='1, 0, -3, 0' Background='{x:Static SystemColors.ControlBrush}' BorderThickness='1' CornerRadius='3' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'/>")
|
|
_T("<Border Margin='1, 0, 0, 0' BorderThickness='0, 0, 1, 0' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'/>")
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, rc, lpszMarkupText);
|
|
}
|
|
else
|
|
{
|
|
LPCTSTR lpszMarkupText =
|
|
_T("<Grid ClipToBounds='True' Background='{x:Static SystemColors.ControlBrush}' Margin='0, 0, 0, 2'>")
|
|
_T("<Border Margin='-3, 0, 1, 0' Background='{x:Static SystemColors.ControlBrush}' BorderThickness='1' CornerRadius='3' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'/>")
|
|
_T("<Border Margin='0, 0, 1, 0' BorderThickness='1, 0, 0, 0' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'/>")
|
|
_T("</Grid>");
|
|
|
|
RenderMarkup(pDC, rc, lpszMarkupText);
|
|
}
|
|
|
|
CPoint pt = rc.CenterPoint();
|
|
|
|
if (bScrollLeft)
|
|
{
|
|
XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 1, pt.y), CPoint(pt.x + 1, pt.y - 2), CPoint(pt.x + 1, pt.y + 2), GetSysColor(COLOR_BTNTEXT));
|
|
}
|
|
else
|
|
{
|
|
XTPDrawHelpers()->Triangle(pDC, CPoint(pt.x - 1, pt.y - 2), CPoint(pt.x + 1, pt.y), CPoint(pt.x - 1, pt.y + 2), GetSysColor(COLOR_BTNTEXT));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
BOOL CXTPRibbonSystemTheme::DrawRibbonGroupControlEntry(CDC* pDC, CXTPControl* pButton)
|
|
{
|
|
if (pButton->GetRibbonGroup() && pButton->GetRibbonGroup()->IsControlsGrouping())
|
|
{
|
|
if (!pButton->GetSelected())
|
|
{
|
|
BOOL bLeft = pButton->GetBeginGroup() || pButton->GetWrap();
|
|
|
|
int nIndexNext = pButton->GetControls()->GetNext(pButton->GetIndex());
|
|
|
|
BOOL bRight = nIndexNext <= pButton->GetIndex() ||
|
|
pButton->GetControls()->GetAt(nIndexNext)->GetBeginGroup() ||
|
|
pButton->GetControls()->GetAt(nIndexNext)->GetWrap();
|
|
|
|
|
|
LPCTSTR lpszMarkupText = NULL;
|
|
|
|
if (bLeft && bRight)
|
|
lpszMarkupText = _T("<Grid><Border BorderThickness='1' CornerRadius='2' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlLightLightColor}'/>")
|
|
_T(" <GradientStop Offset='1' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border></Grid>");
|
|
else if (bLeft)
|
|
lpszMarkupText = _T("<Grid ClipToBounds='True'><Border Margin='0, 0, -2, 0' BorderThickness='1' CornerRadius='2' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlLightLightColor}'/>")
|
|
_T(" <GradientStop Offset='1' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border><Rectangle Width='1' Stretch='Fill' Fill = '{x:Static SystemColors.ControlDarkBrush}' HorizontalAlignment='Right' /> </Grid>");
|
|
else if (bRight)
|
|
lpszMarkupText = _T("<Grid ClipToBounds='True'><Border Margin='-2, 0, 0, 0' BorderThickness='1' CornerRadius='2' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlLightLightColor}'/>")
|
|
_T(" <GradientStop Offset='1' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border></Grid>");
|
|
else
|
|
lpszMarkupText = _T("<Grid ClipToBounds='True'><Border Margin='-2, 0, -2, 0' BorderThickness='1' CornerRadius='2' BorderBrush='{x:Static SystemColors.ControlDarkBrush}'><Border.Background>")
|
|
_T("<LinearGradientBrush StartPoint='0,0' EndPoint='0,1'>")
|
|
_T(" <GradientStop Offset='0' Color='{x:Static SystemColors.ControlLightLightColor}'/>")
|
|
_T(" <GradientStop Offset='1' Color='{x:Static SystemColors.ControlColor}'/>")
|
|
_T("</LinearGradientBrush></Border.Background></Border><Rectangle Width='1' Stretch='Fill' Fill = '{x:Static SystemColors.ControlDarkBrush}' HorizontalAlignment='Right' /></Grid>");
|
|
|
|
RenderMarkup(pDC, pButton->GetRect(), lpszMarkupText);
|
|
return FALSE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|