/** * @file XTPCommandBarsResourceTheme.cpp * * @copyright * (c) 1998-2025 Codejock Software, All Rights Reserved. * * This source file is the property of Codejock Software and must not be * redistributed by any means without the explicit written permission of * Codejock Software. * * The use of this source code is governed by the terms and conditions specified * in the Toolkit Pro license agreement. Codejock Software grants you, as a * single software developer, the limited right to use this software on one * computer only. * * Contact Information: * support@codejock.com * http://www.codejock.com * */ #include "StdAfx.h" #include "Common/XTPTypeId.h" #include "Common/XTPFramework.h" #include "Common/XTPSystemHelpers.h" #include "Common/XTPSynchro.h" #include "Common/XTPApplication.h" #include "Common/XTPSingleton.h" #include "Common/XTPGdiObjects.h" #include "Common/XTPDrawHelpers.h" #include "Common/XTPResourceImage.h" #include "Common/XTPHookManager.h" #include "Common/XTPColorManager.h" #include "Common/ScrollBar/XTPScrollBase.h" #include "Common/ScrollBar/XTPScrollBarPaintManager.h" #include "Common/ScrollBar/Themes/XTPScrollBarThemeResource.h" #include "CommandBars/XTPCommandBarsDefines.h" #include "CommandBars/XTPPaintManager.h" #include "CommandBars/XTPControl.h" #include "CommandBars/XTPControlButton.h" #include "CommandBars/XTPControlPopup.h" #include "CommandBars/XTPControlGallery.h" // Progress #include "CommandBars/Progress/XTPProgressPaintManager.h" #include "CommandBars/Progress/XTPProgressThemeResource.h" // Slider #include "CommandBars/Slider/XTPSliderPaintManager.h" #include "CommandBars/Slider/XTPSliderThemeResource.h" // Message bar #include "CommandBars/MessageBar/XTPMessageBarPaintManager.h" #include "CommandBars/MessageBar/XTPMessageBarThemeResource.h" // Status bar #include "CommandBars/StatusBar/XTPStatusBarPaintManager.h" #include "CommandBars/StatusBar/XTPStatusBarThemeResource.h" // Frame #include "CommandBars/Frame/XTPFramePaintManager.h" #include "CommandBars/Frame/XTPFrameThemeOffice2007.h" #include "CommandBars/Themes/XTPCommandBarsOfficeXPTheme.h" #include "CommandBars/Themes/XTPCommandBarsOffice2003Theme.h" #include "CommandBars/Themes/XTPCommandBarsResourceTheme.h" #include "CommandBars/Gallery/XTPControlGalleryResourceTheme.h" #ifdef _XTP_INCLUDE_RIBBON # include "Ribbon/XTPRibbonPaintManager.h" # include "Ribbon/Themes/XTPRibbonThemeResource.h" #endif #ifndef OIC_WINLOGO # define OIC_WINLOGO 32517 #endif #ifndef LAYOUT_BITMAPORIENTATIONPRESERVED # define LAYOUT_BITMAPORIENTATIONPRESERVED 0x00000008 #endif #include "Common/Base/Diagnostic/XTPDisableNoisyWarnings.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// IMPLEMENT_DYNAMIC(CXTPResourceTheme, CXTPOffice2003Theme) CXTPResourceTheme::CXTPResourceTheme() { m_pShadowManager->SetShadowOptions(xtpShadowOfficeAlpha | xtpShadowShowPopupControl); m_systemTheme = xtpSystemThemeUnknown; m_bThemedStatusBar = TRUE; m_bOffice2007Padding = TRUE; SAFE_DELETE(m_pGalleryPaintManager); m_pGalleryPaintManager = new CXTPControlGalleryResourceTheme(this); SAFE_DELETE(m_pSliderPaintManager); m_pSliderPaintManager = new CXTPSliderResourceTheme(this); SAFE_DELETE(m_pProgressPaintManager); m_pProgressPaintManager = new CXTPProgressResourceTheme(this); SAFE_DELETE(m_pScrollBarPaintManager); m_pScrollBarPaintManager = new CXTPScrollBarThemeResource(); SAFE_DELETE(m_pStatusBarPaintManager); m_pStatusBarPaintManager = new CXTPStatusBarThemeResource(this); // Message bar paint manager SAFE_DELETE(m_pMessageBarPaintManager); m_pMessageBarPaintManager = new CXTPMessageBarThemeResource(this); m_pImages = XTPResourceImages(); } CXTPFramePaintManager* CXTPResourceTheme::GetFramePaintManager() { if (!m_pFramePaintManager) { m_pFramePaintManager = new CXTPRibbonOffice2007FrameTheme(this); m_pFramePaintManager->RefreshMetrics(); } return m_pFramePaintManager; } CXTPRibbonPaintManager* CXTPResourceTheme::GetRibbonPaintManager() { #ifdef _XTP_INCLUDE_RIBBON if (!m_pRibbonPaintManager) { m_pRibbonPaintManager = new CXTPRibbonThemeResource(this); m_pRibbonPaintManager->RefreshMetrics(); } #endif return m_pRibbonPaintManager; } CXTPResourceTheme::~CXTPResourceTheme() { m_pImages->RemoveAll(); } CXTPResourceImages* CXTPResourceTheme::GetImages() const { return m_pImages; } void CXTPResourceTheme::SetImages(CXTPResourceImages* pImages) { m_pImages = pImages; } void CXTPResourceTheme::SetImageHandle(HMODULE hResource, LPCTSTR lpszIniFileName) { GetImages()->SetHandle(hResource, lpszIniFileName); RefreshMetrics(); } CXTPResourceImage* CXTPResourceTheme::LoadImage(LPCTSTR lpszFileName) { return GetImages()->LoadFile(lpszFileName); } BOOL CXTPResourceTheme::IsImagesAvailable() { return TRUE; } COLORREF CXTPResourceTheme::GetRectangleTextColor(BOOL bSelected, BOOL bPressed, BOOL bEnabled, BOOL bChecked, BOOL bPopuped, XTPBarType barType, XTPBarPosition barPosition) { if (barType == xtpBarTypeMenuBar && !bSelected && bEnabled && !bPressed && !bChecked && !bPopuped) { return m_clrMenuBarText; } return CXTPOffice2003Theme::GetRectangleTextColor(bSelected, bPressed, bEnabled, bChecked, bPopuped, barType, barPosition); } void CXTPResourceTheme::RefreshMetrics() { CXTPOffice2003Theme::RefreshMetrics(); if (!GetImages()->IsValid()) return; m_clrStatusBarShadow = GetImages()->GetImageColor(_T("StatusBar"), _T("StatusBarShadow")); m_clrStatusBarTop.SetStandardValue(GetImages()->GetImageColor(_T("StatusBar"), _T("StatusBarFaceTopLight")), GetImages()->GetImageColor(_T("StatusBar"), _T("StatusBarFaceTopDark"))); m_clrStatusBarBottom.SetStandardValue( GetImages()->GetImageColor(_T("StatusBar"), _T("StatusBarFaceBottomLight")), GetImages()->GetImageColor(_T("StatusBar"), _T("StatusBarFaceBottomDark"))); m_clrDockBar.SetStandardValue(GetImages()->GetImageColor(_T("Toolbar"), _T("DockBarFace"))); m_clrCommandBar.SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("ToolbarFaceLight")), GetImages()->GetImageColor(_T("Toolbar"), _T("ToolbarFaceDark")), 0.75f); m_clrToolbarShadow.SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("ToolbarFaceShadow"))); m_clrToolbarExpand.SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("ControlToolbarExpandLight")), GetImages()->GetImageColor(_T("Toolbar"), _T("ControlToolbarExpandDark")), 0.75f); m_clrPopupControl.SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("ControlHighlightPopupedLight")), GetImages()->GetImageColor(_T("Toolbar"), _T("ControlHighlightPopupedDark"))); m_clrMenuGripper.SetStandardValue(GetImages()->GetImageColor(_T("Toolbar"), _T("MenuPopupGripperLight")), GetImages()->GetImageColor(_T("Toolbar"), _T("MenuPopupGripperDark"))); m_clrMenuExpandedGripper.SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("MenuPopupExpandedGripperLight")), GetImages()->GetImageColor(_T("Toolbar"), _T("MenuPopupExpandedGripperDark"))); m_clrMenuExpand = m_clrPopupControl; m_pShadowManager->SetShadowColor(0); m_clrTearOffGripper.SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("MenuPopupTearOffGripper"))); m_clrMenuBarText = GetImages()->GetImageColor(_T("Toolbar"), _T("MenuBarText")); m_arrColor[XPCOLOR_MENUBAR_FACE].SetStandardValue(RGB(246, 246, 246)); m_arrColor[XPCOLOR_MENUBAR_BORDER].SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("MenuPopupBorder"))); m_arrColor[XPCOLOR_TOOLBAR_GRIPPER].SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("ToolbarGripper"))); m_arrColor[XPCOLOR_MENUBAR_TEXT].SetStandardValue(0); m_arrColor[XPCOLOR_HIGHLIGHT_TEXT].SetStandardValue(0); m_arrColor[XPCOLOR_TOOLBAR_TEXT].SetStandardValue(0); m_arrColor[XPCOLOR_TOOLBAR_GRAYTEXT].SetStandardValue(RGB(141, 141, 141)); m_arrColor[XPCOLOR_HIGHLIGHT_DISABLED_BORDER].SetStandardValue(RGB(141, 141, 141)); m_arrColor[XPCOLOR_MENUBAR_GRAYTEXT].SetStandardValue(RGB(141, 141, 141)); m_arrColor[XPCOLOR_FRAME].SetStandardValue( GetImages()->GetImageColor(_T("Window"), _T("WindowFrame"))); m_clrFloatingGripper.SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("FloatingBarGripper"))); m_clrFloatingGripperText.SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("FloatingBarGripperText"))); m_arrColor[XPCOLOR_FLOATBAR_BORDER].SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("FloatingBarBorder"))); m_arrColor[COLOR_APPWORKSPACE].SetStandardValue( GetImages()->GetImageColor(_T("Workspace"), _T("AppWorkspace"))); m_arrColor[XPCOLOR_3DFACE].SetStandardValue( GetImages()->GetImageColor(_T("Window"), _T("ButtonFace"))); m_arrColor[XPCOLOR_3DSHADOW].SetStandardValue(m_clrToolbarShadow); m_arrColor[XPCOLOR_TOOLBAR_FACE].SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("ToolbarFace"))); m_arrColor[XPCOLOR_SEPARATOR].SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("ToolbarSeparator"))); m_arrColor[XPCOLOR_DISABLED].SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("ControlDisabledIcon"))); m_clrWorkspaceClientTop = GetImages()->GetImageColor(_T("Workspace"), _T("WorkspaceClientTop")); m_clrWorkspaceClientMiddle = GetImages()->GetImageColor(_T("Workspace"), _T("WorkspaceClientMiddle")); m_clrWorkspaceClientBottom = GetImages()->GetImageColor(_T("Workspace"), _T("WorkspaceClientBottom")); m_arrColor[XPCOLOR_HIGHLIGHT].SetStandardValue( GetImages()->GetImageColor(_T("Window"), _T("HighlightSelected"))); m_arrColor[XPCOLOR_HIGHLIGHT_BORDER].SetStandardValue( GetImages()->GetImageColor(_T("Window"), _T("HighlightSelectedBorder"))); m_arrColor[XPCOLOR_HIGHLIGHT_PUSHED].SetStandardValue( GetImages()->GetImageColor(_T("Window"), _T("HighlightPressed"))); m_arrColor[XPCOLOR_HIGHLIGHT_PUSHED_BORDER].SetStandardValue( GetImages()->GetImageColor(_T("Window"), _T("HighlightPressedBorder"))); m_arrColor[XPCOLOR_HIGHLIGHT_CHECKED].SetStandardValue( GetImages()->GetImageColor(_T("Window"), _T("HighlightChecked"))); m_arrColor[XPCOLOR_HIGHLIGHT_CHECKED_BORDER].SetStandardValue( GetImages()->GetImageColor(_T("Window"), _T("HighlightCheckedBorder"))); m_arrColor[XPCOLOR_PUSHED_TEXT].SetStandardValue(0); m_bLunaTheme = TRUE; m_grcLunaSelected.SetStandardValue(GetImages()->GetImageColor(_T("Window"), _T("HighlightSelectedLight")), GetImages()->GetImageColor(_T("Window"), _T("HighlightSelectedDark"))); m_grcLunaChecked.SetStandardValue(GetImages()->GetImageColor(_T("Window"), _T("HighlightCheckedLight")), GetImages()->GetImageColor(_T("Window"), _T("HighlightCheckedDark"))); m_grcLunaPushed.SetStandardValue(GetImages()->GetImageColor(_T("Window"), _T("HighlightPressedLight")), GetImages()->GetImageColor(_T("Window"), _T("HighlightPressedDark"))); m_arrColor[XPCOLOR_LABEL].SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("ControlLabel"))); m_arrColor[XPCOLOR_EDITCTRLBORDER].SetStandardValue( GetImages()->GetImageColor(_T("Toolbar"), _T("ControlEditBorder"))); m_clrDisabledIcon.SetStandardValue(GetImages()->GetImageColor(_T("Toolbar"), _T("ControlDisabledIconLight")), GetImages()->GetImageColor(_T("Toolbar"), _T("ControlDisabledIconDark"))); m_nMessageBarHeight = XTP_DPI_Y( GetImages()->GetImageInt(_T("MessageBar"), _T("MessageBarHeight"))); m_szMessageBarDefaultButtonSize = XTP_DPI( GetImages()->GetImageSize(_T("MessageBar"), _T("MessageBarDefaultButtonSize"))); m_clrMessageBar.SetStandardValue(GetImages()->GetImageColor(_T("MessageBar"), _T("MessageBarLight")), GetImages()->GetImageColor(_T("MessageBar"), _T("MessageBarDark"))); m_clrMessageBarFrame = GetImages()->GetImageColor(_T("MessageBar"), _T("MessageBarFrame")); m_clrMessageBarText = GetImages()->GetImageColor(_T("MessageBar"), _T("MessageBarText")); m_clrMessageBarFace = GetImages()->GetImageColor(_T("MessageBar"), _T("MessageBar")); CreateGradientCircle(); } void CXTPResourceTheme::FillWorkspace(CDC* pDC, CRect rc, CRect rcExclude) { if (!XTPResourceImages()->IsValid()) return; CXTPResourceImage* pImage = LoadImage(_T("WORKSPACETOPLEFT")); _ASSERTE(pImage); if (NULL != pImage) { CRgn rgn; rgn.CreateRectRgnIndirect(rc); pDC->SelectClipRgn(&rgn); pDC->ExcludeClipRect(rcExclude); CRect rcSrc(pImage->GetSource()); CRect rcTopLeft(rc); rcTopLeft.bottom = rcTopLeft.top + XTP_DPI_Y(rcSrc.Height()); rcTopLeft.right = rcTopLeft.left + max(rcTopLeft.Width(), XTP_DPI_X(rcSrc.Width())); pImage->DrawImage(pDC, rcTopLeft, rcSrc, CRect(rcSrc.Width() - 1, 0, 0, 0)); CRect rcFill(rc.left, rc.top + XTP_DPI_Y(rcSrc.Height()), rc.right, rc.bottom); CRect rcFillTop(rcFill.left, rcFill.top, rcFill.right, rcFill.top + rcFill.Height() * 2 / 3); CRect rcFillBottom(rcFill.left, rcFillTop.bottom, rcFill.right, rcFill.bottom); XTPDrawHelpers()->GradientFill(pDC, rcFillTop, m_clrWorkspaceClientTop, m_clrWorkspaceClientMiddle, FALSE); XTPDrawHelpers()->GradientFill(pDC, rcFillBottom, m_clrWorkspaceClientMiddle, m_clrWorkspaceClientBottom, FALSE); pDC->SelectClipRgn(NULL); rgn.DeleteObject(); } }