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.

198 lines
5.5 KiB
C++

// XTPMarkupThickness.cpp: implementation of the CXTPMarkupThickness 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 "Common/XTPVc80Helpers.h"
#include "Common/XTPResourceManager.h"
#include "XTPMarkupObject.h"
#include "XTPMarkupBuilder.h"
#include "XTPMarkupThickness.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////////
// CXTPMarkupThickness
IMPLEMENT_MARKUPCLASS(NULL, CXTPMarkupThickness, CXTPMarkupObject);
void CXTPMarkupThickness::RegisterMarkupClass()
{
}
CXTPMarkupThickness* CXTPMarkupThickness::CreateValue()
{
static CXTPMarkupAutoPtr defaultValues(new CXTPMarkupThickness());
return (CXTPMarkupThickness*)defaultValues.AddRef();
}
CXTPMarkupThickness::CXTPMarkupThickness()
: left (0)
, top (0)
, right (0)
, bottom(0)
{
// Nothing
}
CXTPMarkupThickness::CXTPMarkupThickness(const CXTPMarkupThickness &other)
: left (other.left)
, top (other.top)
, right (other.right)
, bottom(other.bottom)
{
// Nothing
}
CXTPMarkupThickness::CXTPMarkupThickness(long nThickness)
: left (nThickness)
, top (nThickness)
, right (nThickness)
, bottom(nThickness)
{
// Nothing
}
CXTPMarkupThickness::CXTPMarkupThickness(long nLeft, long nTop, long nRight, long nBottom)
: left (nLeft)
, top (nTop)
, right (nRight)
, bottom(nBottom)
{
// Nothing
}
CRect CXTPMarkupThickness::HelperDeflateRect(CRect rt, CXTPMarkupThickness* thick)
{
if (!thick)
return rt;
return CRect(CPoint(rt.left + thick->left, rt.top + thick->top),
CSize(max(0, (rt.Width() - thick->left) - thick->right), max(0, (rt.Height() - thick->top) - thick->bottom)));
}
CXTPMarkupObject* CXTPMarkupThickness::ConvertFrom(CXTPMarkupBuilder *pBuilder, CXTPMarkupObject* pObject) const
{
UNREFERENCED_PARAMETER(pBuilder);
if (IsStringObject(pObject))
{
LPCWSTR lpszValue = *((CXTPMarkupString*)pObject);
int nLength = ((CXTPMarkupString*)pObject)->GetLength();
if (wcschr(lpszValue, L',') == NULL)
{
int nThickness = _wtoi(lpszValue);
if ((nLength > 2) && _wcsicmp(lpszValue + nLength - 2, L"pt") == 0)
{
return new CXTPMarkupThickness(MulDiv(nThickness, 96, 72));
}
if ((nLength > 2) && _wcsicmp(lpszValue + nLength - 2, L"in") == 0)
{
return new CXTPMarkupThickness(nThickness * 96);
}
if ((nLength > 2) && _wcsicmp(lpszValue + nLength - 2, L"cm") == 0)
{
return new CXTPMarkupThickness(int((double)nThickness * 37.79528));
}
if ((nLength > 2) && _wcsicmp(lpszValue + nLength - 2, L"mm") == 0)
{
return new CXTPMarkupThickness(int((double)nThickness * 3.779528));
}
return new CXTPMarkupThickness(nThickness);
}
else
{
if ((nLength > 2) && _wcsicmp(lpszValue + nLength - 2, L"pt") == 0)
{
int left = 0, top = 0, right = 0, bottom = 0;
if ( WSCANF_S(lpszValue, L"%ipt, %ipt, %ipt, %ipt", &left, &top, &right, &bottom) != 4)
return NULL;
return new CXTPMarkupThickness(MulDiv(left, 96, 72), MulDiv(top, 96, 72), MulDiv(right, 96, 72), MulDiv(bottom, 96, 72));
}
if ((nLength > 2) && _wcsicmp(lpszValue + nLength - 2, L"in") == 0)
{
int left = 0, top = 0, right = 0, bottom = 0;
if ( WSCANF_S(lpszValue, L"%iin, %iin, %iin, %iin", &left, &top, &right, &bottom) != 4)
return NULL;
return new CXTPMarkupThickness(left * 96, top * 96, right * 96, bottom * 96);
}
if ((nLength > 2) && _wcsicmp(lpszValue + nLength - 2, L"cm") == 0)
{
int left = 0, top = 0, right = 0, bottom = 0;
if ( WSCANF_S(lpszValue, L"%icm, %icm, %icm, %icm", &left, &top, &right, &bottom) != 4)
return NULL;
return new CXTPMarkupThickness(int((double)left * 37.79528), int((double)top * 37.79528), int((double)right * 37.79528), int((double)bottom * 37.79528));
}
if ((nLength > 2) && _wcsicmp(lpszValue + nLength - 2, L"mm") == 0)
{
int left = 0, top = 0, right = 0, bottom = 0;
if ( WSCANF_S(lpszValue, L"%imm, %imm, %imm, %imm", &left, &top, &right, &bottom) != 4)
return NULL;
return new CXTPMarkupThickness(int((double)left * 3.779528), int((double)top * 3.779528), int((double)right * 3.779528), int((double)bottom * 3.779528));
}
int left = 0, top = 0, right = 0, bottom = 0;
if ( WSCANF_S(lpszValue, L"%i, %i, %i, %i", &left, &top, &right, &bottom) != 4)
return NULL;
return new CXTPMarkupThickness(left, top, right, bottom);
}
}
return NULL;
}
BOOL CXTPMarkupThickness::IsEqual(const CXTPMarkupObject *pObject) const
{
if (!pObject)
return FALSE;
if (pObject->GetType() != MARKUP_TYPE(CXTPMarkupThickness))
return FALSE;
const CXTPMarkupThickness *pOther = reinterpret_cast<const CXTPMarkupThickness*>(pObject);
return left == pOther->left &&
top == pOther->top &&
right == pOther->right &&
bottom == pOther->bottom;
}