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.

447 lines
14 KiB
C++

// XTPPopupPaintManager.cpp: implementation of the CXTPPopupPaintManager class.
//
// This file is a part of the XTREME CONTROLS 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/XTPDrawHelpers.h"
#include "Common/XTPRichRender.h"
#include "Common/XTPResourceImage.h"
#include "Common/XTPColorManager.h"
#include "../Defines.h"
#include "XTPPopupPaintManager.h"
#include "XTPPopupItem.h"
#include "XTPPopupControl.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CXTPPopupPaintManager::CXTPPopupPaintManager()
{
}
CXTPPopupPaintManager::~CXTPPopupPaintManager()
{
}
void CXTPPopupPaintManager::RefreshMetrics()
{
m_fntText.DeleteObject();
LOGFONT lfIcon;
VERIFY(CXTPDrawHelpers::GetIconLogFont(&lfIcon));
VERIFY(m_fntText.CreateFontIndirect(&lfIcon));
m_clrText = GetXtremeColor(COLOR_BTNTEXT);
m_clrBackground.SetStandardValue(GetXtremeColor(COLOR_3DFACE));
m_clrFrame.SetStandardValue(GetXtremeColor(COLOR_3DSHADOW));
m_clrButtonSelected = m_clrButtonPressed = (COLORREF)-1;
m_clrButtonPressedBorder.SetStandardValue(GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_3DHIGHLIGHT));
m_clrButtonSelectedBorder.SetStandardValue(GetXtremeColor(COLOR_3DHIGHLIGHT), GetXtremeColor(COLOR_3DSHADOW));
}
void CXTPPopupPaintManager::DrawBackground(CDC* pDC, CXTPPopupControl* pControl, CRect rcClient)
{
if (pControl->GetBackgroundBitmap() > 0)
{
CXTPImageManagerIcon* pImage = pControl->GetImageManager()->GetImage(pControl->GetBackgroundBitmap(), 0);
if (pImage)
{
pImage->Draw(pDC, CPoint(0, 0));
}
}
else
{
XTPDrawHelpers()->GradientFill(pDC, rcClient, m_clrBackground, TRUE);
if (m_clrFrame.clrLight != (COLORREF)-1)
pDC->Draw3dRect(rcClient, m_clrFrame.clrLight, m_clrFrame.clrDark);
}
}
void CXTPPopupPaintManager::DrawButton(CDC* pDC, CXTPPopupItem* pItem)
{
if (pItem->IsPressed() && pItem->IsSelected())
{
if (m_clrButtonPressed != (COLORREF)-1)
pDC->FillSolidRect(pItem->GetRect(), m_clrButtonPressed);
pDC->Draw3dRect(pItem->GetRect(), m_clrButtonPressedBorder.clrLight, m_clrButtonPressedBorder.clrDark);
}
else if (pItem->IsSelected() || pItem->IsPressed())
{
if (m_clrButtonSelected != (COLORREF)-1)
pDC->FillSolidRect(pItem->GetRect(), m_clrButtonSelected);
pDC->Draw3dRect(pItem->GetRect(), m_clrButtonSelectedBorder.clrLight, m_clrButtonSelectedBorder.clrDark);
}
}
void CXTPPopupPaintManager::SetFont(HFONT hFont)
{
LOGFONT lf;
CFont::FromHandle(hFont)->GetLogFont(&lf);
m_fntText.DeleteObject();
m_fntText.CreateFontIndirect(&lf);
}
void CXTPPopupPaintManager::DrawItem(CDC* pDC, CXTPPopupItem* pItem)
{
CRect rc = pItem->GetRect();
if (pItem->GetBackgroundColor() != (COLORREF)-1)
pDC->FillSolidRect(rc, pItem->GetBackgroundColor());
if (pItem->GetBorderColor() != (COLORREF)-1)
pDC->Draw3dRect(rc, pItem->GetBorderColor(), pItem->GetBorderColor());
CXTPImageManagerIcon* pIcon = pItem->GetImage();
if (pIcon)
{
rc.OffsetRect(pItem->GetIconOffset());
if (pItem->IsPressed() && pItem->IsSelected())
{
if (pItem->IsButton())
DrawButton(pDC, pItem);
pIcon->Draw(pDC, rc.TopLeft(), pIcon->GetCheckedIcon());
}
else if (pItem->IsSelected() || pItem->IsPressed())
{
if (pItem->IsButton())
DrawButton(pDC, (CXTPPopupItem*)pItem);
pIcon->Draw(pDC, rc.TopLeft(), pIcon->GetHotIcon());
}
else
{
pIcon->Draw(pDC, rc.TopLeft(), pIcon->GetIcon());
}
return;
}
if (pItem->IsButton())
DrawButton(pDC, (CXTPPopupItem*)pItem);
if (!pItem->GetCaption().IsEmpty())
{
CXTPRichRender* pRichRender = pItem->m_pRichRender;
CFont fntUnderline;
CFont* pFont = pItem->GetTextFont();
if ((pItem->IsSelected() && pItem->IsHyperLink() && pItem->IsUnderline()) || pItem->IsBold())
{
LOGFONT lpLogFont;
pFont->GetLogFont(&lpLogFont);
lpLogFont.lfUnderline = (pItem->IsSelected() && pItem->IsHyperLink() && pItem->IsUnderline());
lpLogFont.lfWeight = pItem->IsBold() ? FW_BOLD : FW_NORMAL;
VERIFY(fntUnderline.CreateFontIndirect(&lpLogFont));
pFont = &fntUnderline;
}
CRect rcText(pItem->GetRect());
CXTPFontDC font(pDC, pFont);
if (pRichRender)
{
pRichRender->DrawText(pDC, rcText);
}
else
{
if ((pItem->GetTextAlignment() & (DT_WORDBREAK | DT_VCENTER)) == (DT_WORDBREAK | DT_VCENTER))
{
CRect rcTextHeight(rcText.left, 0, rcText.right, 0);
pDC->DrawText(pItem->GetCaption(), rcTextHeight, pItem->GetTextAlignment() | DT_CALCRECT);
rcText.top = (rcText.top + rcText.bottom - rcTextHeight.bottom) / 2;
}
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(pItem->GetTextColor() == (COLORREF)-1 ? m_clrText : pItem->GetTextColor());
pDC->DrawText(pItem->GetCaption(), rcText, pItem->GetTextAlignment());
}
}
}
//////////////////////////////////////////////////////////////////////////
// CXTPPopupThemeOffice2000
CXTPPopupThemeOffice2000::CXTPPopupThemeOffice2000()
{
}
CXTPPopupThemeOffice2000::~CXTPPopupThemeOffice2000()
{
}
void CXTPPopupThemeOffice2000::RefreshMetrics()
{
CXTPPopupPaintManager::RefreshMetrics();
m_clrFrame.SetStandardValue(GetXtremeColor(COLOR_3DHIGHLIGHT), GetXtremeColor(COLOR_3DSHADOW));
}
void CXTPPopupThemeOffice2000::DrawBackground(CDC* pDC, CXTPPopupControl* pControl, CRect rcClient)
{
if (pControl->GetBackgroundBitmap() > 0)
{
CXTPPopupPaintManager::DrawBackground(pDC, pControl, rcClient);
return;
}
XTPDrawHelpers()->GradientFill(pDC, rcClient, m_clrBackground, FALSE);
pDC->Draw3dRect(rcClient, m_clrFrame.clrLight, m_clrFrame.clrDark);
rcClient.DeflateRect(1, 1);
//rcClient.DeflateRect(2, 2);
CRect rcBackground(rcClient.left, rcClient.top, rcClient.right, rcClient.top + 22);
XTPDrawHelpers()->GradientFill(pDC, rcBackground, RGB(0, 0, 128), RGB(24, 180, 192), TRUE);
rcClient.DeflateRect(1, 1);
rcBackground = CRect(rcClient.left, rcBackground.top + 23 , rcClient.right, rcClient.bottom);
pDC->Draw3dRect(rcBackground, m_clrFrame.clrDark, m_clrFrame.clrLight);
rcBackground.DeflateRect(1, 1);
pDC->Draw3dRect(rcBackground, m_clrFrame.clrLight, m_clrFrame.clrDark);
rcBackground.DeflateRect(1, 1);
rcBackground.right = rcBackground.left + 30;
XTPDrawHelpers()->GradientFill(pDC, rcBackground, RGB(0, 0, 128), RGB(0, 0, 128), FALSE);
}
//////////////////////////////////////////////////////////////////////////
// CXTPPopupThemeOfficeXP
CXTPPopupThemeOfficeXP::CXTPPopupThemeOfficeXP()
{
}
CXTPPopupThemeOfficeXP::~CXTPPopupThemeOfficeXP()
{
}
void CXTPPopupThemeOfficeXP::RefreshMetrics()
{
CXTPPopupThemeOffice2000::RefreshMetrics();
m_clrBackground.SetStandardValue(GetXtremeColor(XPCOLOR_TOOLBAR_FACE));
m_clrButtonSelected = GetXtremeColor(XPCOLOR_HIGHLIGHT);
m_clrButtonPressed = GetXtremeColor(XPCOLOR_HIGHLIGHT_PUSHED);
m_clrButtonSelectedBorder.SetStandardValue(GetXtremeColor(XPCOLOR_HIGHLIGHT_BORDER));
m_clrButtonPressedBorder.SetStandardValue(GetXtremeColor(XPCOLOR_HIGHLIGHT_BORDER));
m_clrFrame.SetStandardValue(GetXtremeColor(COLOR_3DSHADOW));
}
void CXTPPopupThemeOfficeXP::DrawBackground(CDC* pDC, CXTPPopupControl* pControl, CRect rcClient)
{
if (pControl->GetBackgroundBitmap() > 0)
{
CXTPPopupPaintManager::DrawBackground(pDC, pControl, rcClient);
return;
}
XTPDrawHelpers()->GradientFill(pDC, rcClient, m_clrBackground, FALSE);
pDC->Draw3dRect(rcClient, m_clrFrame.clrLight, m_clrFrame.clrDark);
rcClient.DeflateRect(1, 1);
CRect rcBackground(rcClient.left, rcClient.top, rcClient.right, rcClient.top + 22);
XTPDrawHelpers()->GradientFill(pDC, rcBackground, RGB(0, 0, 128), RGB(24, 180, 192), TRUE);
rcBackground = CRect(rcClient.left, rcBackground.top + 22 , rcClient.right, rcClient.bottom);
rcBackground.DeflateRect(1, 1);
rcBackground.right = rcBackground.left + 30;
XTPDrawHelpers()->GradientFill(pDC, rcBackground, RGB(0, 0, 128), RGB(0, 0, 128), FALSE);
}
//////////////////////////////////////////////////////////////////////////
// CXTPPopupThemeOffice2003
CXTPPopupThemeOffice2003::CXTPPopupThemeOffice2003()
{
}
CXTPPopupThemeOffice2003::~CXTPPopupThemeOffice2003()
{
}
void CXTPPopupThemeOffice2003::RefreshMetrics()
{
CXTPPopupThemeOfficeXP::RefreshMetrics();
m_clrBackground.SetStandardValue(XTPColorManager()->grcDockBar.clrDark, XTPColorManager()->grcDockBar.clrLight);//.SetStandardValue(RGB(214, 231, 252), RGB(168, 198, 238));
m_clrGripper.SetStandardValue(XTPColorManager()->grcShortcutBarGripper);
m_clrFrame.SetStandardValue(GetXtremeColor(XPCOLOR_FRAME));
if (!XTPColorManager()->IsLunaColorsDisabled())
{
XTPCurrentSystemTheme systemTheme = XTPColorManager()->GetCurrentSystemTheme();
switch (systemTheme)
{
case xtpSystemThemeBlue:
case xtpSystemThemeRoyale:
case xtpSystemThemeAero:
m_clrButtonSelected = RGB(255, 238, 194);
m_clrButtonPressed = RGB(254, 128, 62);
m_clrButtonPressedBorder.SetStandardValue(RGB(0, 0, 128));
m_clrButtonSelectedBorder.SetStandardValue(RGB(0, 0, 128));
break;
case xtpSystemThemeOlive:
m_clrButtonSelected = RGB(255, 238, 194);
m_clrButtonPressed = RGB(254, 128, 62);
m_clrButtonPressedBorder.SetStandardValue(RGB(63, 93, 56));
m_clrButtonSelectedBorder.SetStandardValue(RGB(63, 93, 56));
break;
case xtpSystemThemeSilver:
m_clrButtonSelected = RGB(255, 238, 194);
m_clrButtonPressed = RGB(254, 128, 62);
m_clrButtonPressedBorder.SetStandardValue(RGB(75, 75, 111));
m_clrButtonSelectedBorder.SetStandardValue(RGB(75, 75, 111));
break;
}
}
}
void CXTPPopupThemeOffice2003::DrawBackground(CDC* pDC, CXTPPopupControl* pControl, CRect rcClient)
{
if (pControl->GetBackgroundBitmap() > 0)
{
CXTPPopupPaintManager::DrawBackground(pDC, pControl, rcClient);
return;
}
XTPDrawHelpers()->GradientFill(pDC, rcClient, m_clrBackground, FALSE);
pDC->Draw3dRect(rcClient, m_clrFrame.clrLight, m_clrFrame.clrDark);
rcClient.DeflateRect(1, 1);
CRect rcGripper(rcClient);
rcGripper.bottom = rcGripper.top + 7;
XTPDrawHelpers()->GradientFill(pDC, rcGripper, m_clrGripper, FALSE);
int nRight = max (2, (rcGripper.Width() - 4 * 9) / 2);
for (int i = 0; i < 9; i++)
{
pDC->FillSolidRect(nRight, rcGripper.top + 1, 2, 2, RGB(40, 50, 71));
pDC->FillSolidRect(nRight + 1, rcGripper.top + 2, 2, 2, RGB(249, 249, 251));
pDC->FillSolidRect(nRight + 1, rcGripper.top + 2, 1, 1, RGB(97, 116, 152));
nRight += 4;
}
}
//////////////////////////////////////////////////////////////////////////
// CXTPPopupThemeResource
CXTPPopupThemeResource::CXTPPopupThemeResource()
{
}
void CXTPPopupThemeResource::RefreshMetrics()
{
CXTPPopupThemeOffice2003::RefreshMetrics();
CXTPResourceImages* pImages = XTPResourceImages();
m_clrBackground.SetStandardValue(
pImages->GetImageColor(_T("PopupControl"), _T("BackgroundLight")),
pImages->GetImageColor(_T("PopupControl"), _T("BackgroundDark")));
m_clrGripper.SetStandardValue(
pImages->GetImageColor(_T("PopupControl"), _T("CaptionLight")),
pImages->GetImageColor(_T("PopupControl"), _T("CaptionDark")));
m_clrFrame.SetStandardValue(
pImages->GetImageColor(_T("PopupControl"), _T("FrameBorder")));
m_clrText = pImages->GetImageColor(_T("PopupControl"), _T("NormalText"));
m_clrButtonSelected = pImages->GetImageColor(_T("PopupControl"), _T("ButtonSelected"));
m_clrButtonPressed = pImages->GetImageColor(_T("PopupControl"), _T("ButtonPressed"));
m_clrButtonPressedBorder.SetStandardValue(pImages->GetImageColor(_T("PopupControl"), _T("ButtonBorder")));
m_clrButtonSelectedBorder.SetStandardValue(pImages->GetImageColor(_T("PopupControl"), _T("ButtonBorder")));
}
//////////////////////////////////////////////////////////////////////////
// CXTPPopupThemeMSN
CXTPPopupThemeMSN::CXTPPopupThemeMSN()
{
}
CXTPPopupThemeMSN::~CXTPPopupThemeMSN()
{
}
void CXTPPopupThemeMSN::RefreshMetrics()
{
CXTPPopupThemeOffice2000::RefreshMetrics();
m_clrButtonSelected = RGB(194, 238, 255);
m_clrButtonSelectedBorder.SetStandardValue(RGB(114, 142, 184));
m_clrButtonPressed = RGB(134, 162, 224);
m_clrButtonPressedBorder.SetStandardValue(RGB(114, 142, 184));
}
void CXTPPopupThemeMSN::DrawBackground(CDC* pDC, CXTPPopupControl* pControl, CRect rcClient)
{
if (pControl->GetBackgroundBitmap() > 0)
{
CXTPPopupPaintManager::DrawBackground(pDC, pControl, rcClient);
return;
}
pDC->Draw3dRect(rcClient, RGB(166, 180, 207), RGB(69, 86, 144));
rcClient.DeflateRect(1, 1);
pDC->Draw3dRect(rcClient, RGB(255, 255, 255), RGB(207, 222, 244));
rcClient.DeflateRect(1, 1);
CRect rcBackground(rcClient.left, rcClient.top, rcClient.right, rcClient.top + 12);
XTPDrawHelpers()->GradientFill(pDC, rcBackground, RGB(207, 215, 236), RGB(255, 255, 255) , FALSE);
rcBackground = CRect(rcClient.left, rcBackground.bottom, rcClient.right, rcClient.top + 23);
XTPDrawHelpers()->GradientFill(pDC, rcBackground, RGB(255, 255, 255), RGB(207, 221, 244), FALSE);
rcBackground = CRect(rcClient.left, rcBackground.bottom, rcClient.right, rcClient.top + 40);
XTPDrawHelpers()->GradientFill(pDC, rcBackground, RGB(207, 221, 244), RGB(255, 255, 255), FALSE);
rcBackground = CRect(rcClient.left, rcBackground.bottom, rcClient.right, rcClient.bottom);
XTPDrawHelpers()->GradientFill(pDC, rcBackground, RGB(255, 255, 255), RGB(207, 221, 244), FALSE);
CRect rcFrame(rcClient.left, rcClient.top + 22, rcClient.right, rcClient.bottom);
pDC->Draw3dRect(rcFrame, RGB(114, 142, 184), RGB(185, 201, 239));
}