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.

162 lines
4.0 KiB
C++

// XTPMarkupPath.cpp: implementation of the CXTPMarkupPath class.
//
// This file is a part of the XTREME TOOLKIT PRO 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 <math.h>
#include <Common/XTPVC80Helpers.h>
#include <Markup/XTPMarkupObject.h>
#include <Markup/XTPMarkupInputElement.h>
#include <Markup/XTPMarkupUIElement.h>
#include <Markup/XTPMarkupFrameworkElement.h>
#include <Markup/XTPMarkupShape.h>
#include <Markup/XTPMarkupDrawingContext.h>
#include <Markup/XTPMarkupBuilder.h>
#include <Markup/XTPMarkupThickness.h>
#include "XTPMarkupPath.h"
#include "XTPMarkupPathData.h"
#include "XTPMarkupPathGeometry.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////////
// CXTPMarkupPath
CXTPMarkupDependencyProperty* CXTPMarkupPath::m_pPropertyData = NULL;
IMPLEMENT_MARKUPCLASS(L"Path", CXTPMarkupPath, CXTPMarkupShape)
void CXTPMarkupPath::RegisterMarkupClass()
{
m_pPropertyData = CXTPMarkupDependencyProperty::Register(L"Data", MARKUP_TYPE(CXTPMarkupPathData), MARKUP_TYPE(CXTPMarkupPath),
new CXTPMarkupPropertyMetadata(NULL, CXTPMarkupPropertyMetadata::flagAffectsMeasure));
}
CXTPMarkupPath::CXTPMarkupPath()
{
}
CXTPMarkupPath::~CXTPMarkupPath()
{
}
void CXTPMarkupPath::SetContentObject(CXTPMarkupBuilder *pBuilder, CXTPMarkupObject *pContent)
{
UNREFERENCED_PARAMETER(pBuilder);
if (pContent->IsKindOf(MARKUP_TYPE(CXTPMarkupPathData)))
{
SetValue(m_pPropertyData, pContent);
}
else
{
CXTPMarkupObject::SetContentObject(pBuilder, pContent);
}
}
CXTPMarkupPathData* CXTPMarkupPath::GetData() const
{
return MARKUP_STATICCAST(CXTPMarkupPathData, GetValue(m_pPropertyData));
}
CSize CXTPMarkupPath::MeasureOverride(CXTPMarkupDrawingContext *pDC, CSize szAvailableSize)
{
UNREFERENCED_PARAMETER(pDC);
CXTPMarkupPathData *pData = GetData();
if (NULL == pData)
{
return CSize(0, 0);
}
CRect rcBounds = pData->GetBounds();
CSize szBound(max(rcBounds.Width(), rcBounds.right), max(rcBounds.Height(),rcBounds.bottom));
if (GetStretch() != xtpMarkupStretchNone)
{
if (szAvailableSize.cx < INT_MAX)
szBound.cx = szAvailableSize.cx;
if (szAvailableSize.cy < INT_MAX)
szBound.cy = szAvailableSize.cy;
}
return szBound;
}
void CXTPMarkupPath::OnRender(CXTPMarkupDrawingContext *pDC)
{
CXTPMarkupStrokeStyle strokeStyle;
GetStrokeStyle(&strokeStyle);
CXTPMarkupBrush *pFillBrush = GetFill();
if (!strokeStyle.pStrokeBrush && !pFillBrush)
return;
CXTPMarkupPathData* pData = GetData();
if (!pData)
return;
if (GetStretch() != xtpMarkupStretchNone)
{
CXTPMarkupPathData* pGeometryStretch = pData->Stretch(GetRenderSize());
pDC->DrawPath(pGeometryStretch, &strokeStyle, pFillBrush);
delete pGeometryStretch;
}
else
{
pDC->DrawPath(pData, &strokeStyle, pFillBrush);
}
}
#ifdef _XTP_ACTIVEX
/////////////////////////////////////////////////////////////////////////
// Path
BEGIN_DISPATCH_MAP(CXTPMarkupPath, CXTPMarkupShape)
END_DISPATCH_MAP()
// {10259842-AE6D-46a8-BC77-CEE7D5CE9ED7}
static const GUID IID_IMarkupPath =
{ 0x10259842, 0xae6d, 0x46a8, { 0xbc, 0x77, 0xce, 0xe7, 0xd5, 0xce, 0x9e, 0xd7 } };
BEGIN_INTERFACE_MAP(CXTPMarkupPath, CXTPMarkupFrameworkElement)
INTERFACE_PART(CXTPMarkupPath, IID_IMarkupPath, Dispatch)
END_INTERFACE_MAP()
IMPLEMENT_OLETYPELIB_EX(CXTPMarkupPath, IID_IMarkupPath)
#endif