//*********************************************************************************
void CBCGPShadowRenderer::Draw (CDC* pDC, CRect rect, UINT index/* = 0*/, BYTE alphaSrc/* = 255*/)
{
    if (128 <= alphaSrc)
    {
        CRect rectInter (rect);

        if (CBCGPToolBarImages::IsRTL ())
        {
            rectInter.left   += m_Params.m_rectSides.left;
            rectInter.right   = rectInter.left + m_Params.m_rectSides.left;
        }
        else
        {
            rectInter.right  -= m_Params.m_rectSides.right;
            rectInter.left    = rectInter.right - m_Params.m_rectSides.right;
        }

        rectInter.bottom -= m_Params.m_rectSides.bottom;
        rectInter.top     = rectInter.bottom - m_Params.m_rectSides.bottom;

        FillInterior (pDC, rectInter, index, alphaSrc);
    }

    DrawFrame (pDC, rect, index, alphaSrc);
}
//*********************************************************************************
void CBCGPControlRenderer::Draw (CDC* pDC, CRect rect, UINT index, BYTE alphaSrc/* = 255*/)
{
    CRect rectInter (rect);
    rectInter.left   += m_Params.m_rectSides.left;
    rectInter.top    += m_Params.m_rectSides.top;
    rectInter.right  -= m_Params.m_rectSides.right;
    rectInter.bottom -= m_Params.m_rectSides.bottom;

    FillInterior (pDC, rectInter, index, alphaSrc);

    DrawFrame (pDC, rect, index, alphaSrc);
}
//***************************************************************************************
void CBCGPShowAllButton::OnDraw (CDC* pDC, const CRect& rect, CBCGPToolBarImages* /*pImages*/,
								BOOL /*bHorz*/, BOOL /*bCustomizeMode*/, BOOL bHighlight,
								BOOL /*bDrawBorder*/, BOOL /*bGrayDisabledButtons*/)
{
	ASSERT_VALID (pDC);
	ASSERT_VALID (this);

	CRect rectBar = rect;
	rectBar.DeflateRect (1, 1);

	//----------------------
	// Fill button interior:
	//----------------------
	FillInterior (pDC, rect, bHighlight);

	//-----------------------
	// Draw "show all" image:
	//-----------------------
	CBCGPVisualManager::BCGBUTTON_STATE state = CBCGPVisualManager::ButtonsIsRegular;

	if (bHighlight)
	{
		state = CBCGPVisualManager::ButtonsIsHighlighted;
	}
	else if (m_nStyle & (TBBS_PRESSED | TBBS_CHECKED))
	{
		//-----------------------
		// Pressed in or checked:
		//-----------------------
		state = CBCGPVisualManager::ButtonsIsPressed;
	}

	CBCGPVisualManager::GetInstance ()->OnDrawShowAllMenuItems (pDC,
		rectBar, state);

	//--------------------
	// Draw button border:
	//--------------------
	if (m_nStyle & (TBBS_PRESSED | TBBS_CHECKED))
	{
		//-----------------------
		// Pressed in or checked:
		//-----------------------
		CBCGPVisualManager::GetInstance ()->OnDrawButtonBorder (pDC,
			this, rectBar, CBCGPVisualManager::ButtonsIsPressed);
	}
	else if (bHighlight)
	{
		CBCGPVisualManager::GetInstance ()->OnDrawButtonBorder (pDC,
			this, rectBar, CBCGPVisualManager::ButtonsIsHighlighted);
	}
}
//*****************************************************************************************
void CLineStyleMenuItem::OnDraw (CDC* pDC, const CRect& rect, CMFCToolBarImages* /*pImages*/,
			BOOL /*bHorz*/, BOOL /*bCustomizeMode*/, BOOL bHighlight,
			BOOL /*bDrawBorder*/, BOOL /*bGrayDisabledButtons*/)
{
	ASSERT_VALID (pDC);

	CRect rectItem = rect;
	rectItem.DeflateRect (1, 1);

	//--------------------
	// Fill item interior:
	//--------------------
	FillInterior (pDC, rectItem, bHighlight);

	//-----------------
	// Draw text label:
	//-----------------
	CRect rectText = rectItem;
	rectText.DeflateRect (nHorzMargin, 0);
	rectText.right = rectText.left + afxGlobalData.GetTextWidth () * 4;

	pDC->DrawText (m_strText, rectText, DT_SINGLELINE | DT_VCENTER);

	//-----------
	// Draw line:
	//-----------
	CRect rectLine = rectItem;
	rectLine.left = rectText.right;
	rectLine.DeflateRect (nHorzMargin, 0);

	rectLine.top = (rect.top + rect.bottom - m_nWidth) / 2;
	rectLine.bottom = rectLine.top + m_nWidth;

	pDC->FillSolidRect (rectLine, GetSysColor (COLOR_WINDOWTEXT));

	//-------------
	// Draw border:
	//-------------
	if (m_nStyle & TBBS_CHECKED)
	{
		pDC->Draw3dRect (rectItem, GetSysColor (COLOR_3DSHADOW), GetSysColor (COLOR_3DHILIGHT));
	}
	else if (bHighlight)
	{
		pDC->Draw3dRect (rectItem, GetSysColor (COLOR_3DHILIGHT), GetSysColor (COLOR_3DSHADOW));
	}
}
//*********************************************************************************
void CBCGPControlRenderer::FillInterior (CDC* pDC, CRect rect, UINT index, BYTE alphaSrc/* = 255*/)
{
    FillInterior (pDC, rect, CBCGPToolBarImages::ImageAlignHorzStretch,
                  CBCGPToolBarImages::ImageAlignVertStretch, index, alphaSrc);
}
//*****************************************************************************************
void CBCGPCalendarMenuButton::OnDraw (CDC* pDC, const CRect& rect, CBCGPToolBarImages* pImages,
			BOOL bHorz, BOOL bCustomizeMode, BOOL bHighlight,
			BOOL bDrawBorder, BOOL bGrayDisabledButtons)
{
	ASSERT_VALID (this);
	ASSERT_VALID (pDC);



	if (m_bMenuMode)
	{
		DrawMenuItem (pDC, rect, pImages, bCustomizeMode, bHighlight, bGrayDisabledButtons);
		return;
	}

	//----------------------
	// Fill button interior:
	//----------------------
	FillInterior (pDC, rect, bHighlight || IsDroppedDown ());

	CSize sizeImage = CBCGPMenuImages::Size ();
	if (CBCGPToolBar::IsLargeIcons ())
	{
		sizeImage.cx *= 2;
		sizeImage.cy *= 2;
	}

	CRect rectInternal = rect;
	CSize sizeExtra = m_bExtraSize ? 
		visualManagerInstance->GetButtonExtraBorder () : CSize (0, 0);

	if (sizeExtra != CSize (0, 0))
	{
		rectInternal.DeflateRect (sizeExtra.cx / 2 + 1, sizeExtra.cy / 2 + 1);
	}

	CRect rectParent = rect;
	CRect rectArrow = rectInternal;

	const int nMargin = visualManagerInstance->GetMenuImageMargin ();
	const int xMargin = bHorz ? nMargin : 0;
	const int yMargin = bHorz ? 0 : nMargin;

	rectInternal.DeflateRect (xMargin, yMargin);
	rectParent.DeflateRect (xMargin, yMargin);


	if (m_bDrawDownArrow)
	{
		if (bHorz)
		{
			rectParent.right -= sizeImage.cx + SEPARATOR_SIZE;
			rectArrow.left = rectParent.right - 1;
			rectArrow.OffsetRect (-sizeExtra.cx / 2, -sizeExtra.cy / 2);
		}
		else
		{
			rectParent.bottom -= sizeImage.cy + SEPARATOR_SIZE;
			rectArrow.top = rectParent.bottom - 1;
		}
	}

	UINT uiStyle = m_nStyle;

	if (visualManagerInstance->IsMenuFlatLook ())
	{
		m_nStyle &= ~(TBBS_PRESSED | TBBS_CHECKED);
	}
	else
	{
		if (m_bClickedOnMenu && m_nID != 0 && m_nID != (UINT) -1 && !m_bMenuOnly) 
		{
			m_nStyle &= ~TBBS_PRESSED;
		}
		else if (m_pPopupMenu != NULL)
		{
			m_nStyle |= TBBS_PRESSED;
		}
	}

	BOOL bDisableFill = m_bDisableFill;
	m_bDisableFill = TRUE;

	CBCGPToolbarButton::OnDraw (pDC, rectParent, pImages, bHorz, 
			bCustomizeMode, bHighlight, bDrawBorder, bGrayDisabledButtons);

	m_bDisableFill = bDisableFill;

	if (m_bDrawDownArrow)
	{
		if ((m_nStyle & (TBBS_PRESSED | TBBS_CHECKED)) &&
			!visualManagerInstance->IsMenuFlatLook ())
		{
			rectArrow.OffsetRect (1, 1);
		}

		BOOL bDisabled = (bCustomizeMode && !IsEditable ()) ||
			(!bCustomizeMode && (m_nStyle & TBBS_DISABLED));

		int iImage;
		if (bHorz && !m_bMenuOnly)
		{
			iImage = CBCGPMenuImages::IdArowDown;
		}
		else
		{
			iImage = CBCGPMenuImages::IdArowRight;
		}

		if (m_pPopupMenu != NULL &&
			(m_nStyle & (TBBS_PRESSED | TBBS_CHECKED)) == 0 &&
			!visualManagerInstance->IsMenuFlatLook ())
		{
			rectArrow.OffsetRect (1, 1);
		}

		CBCGPMenuImages::Draw (pDC, (CBCGPMenuImages::IMAGES_IDS) iImage, rectArrow,
							bDisabled ? CBCGPMenuImages::ImageGray : CBCGPMenuImages::ImageBlack,
							sizeImage);
	}

	m_nStyle = uiStyle;

	if (!bCustomizeMode)
	{
		if ((m_nStyle & (TBBS_PRESSED | TBBS_CHECKED)) ||
			m_pPopupMenu != NULL)
		{
			//-----------------------
			// Pressed in or checked:
			//-----------------------
			if (!visualManagerInstance->IsMenuFlatLook () &&
				m_bClickedOnMenu && m_nID != 0 && m_nID != (UINT) -1 && !m_bMenuOnly)
			{
				visualManagerInstance->OnDrawButtonBorder (pDC,
					this, rectParent, visualManager::ButtonsIsHighlighted);

				rectArrow.right --;
				rectArrow.bottom --;

				visualManagerInstance->OnDrawButtonBorder (pDC,
					this, rectArrow, visualManager::ButtonsIsPressed);
			}
			else
			{
				visualManagerInstance->OnDrawButtonBorder (pDC,
					this, rect, visualManager::ButtonsIsPressed);
			}
		}
		else if (bHighlight && !(m_nStyle & TBBS_DISABLED) &&
			!(m_nStyle & (TBBS_CHECKED | TBBS_INDETERMINATE)))
		{
			visualManagerInstance->OnDrawButtonBorder (pDC,
				this, rect, visualManager::ButtonsIsHighlighted);
		}
	}

}