1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PDFWindow.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Wnd.h"
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Icon.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Utils.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------------- CPWL_Image ---------------------------------- */
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Image::CPWL_Image() : m_pPDFStream(NULL)
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Image::~CPWL_Image()
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_Image::GetImageAppStream()
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteTextBuf sAppStream;
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString sAlias = this->GetImageAlias();
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcPlate = GetClientRect();
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Matrix mt;
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	mt.SetReverse(GetImageMatrix());
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fHScale = 1.0f;
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fVScale = 1.0f;
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	GetScale(fHScale,fVScale);
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fx = 0.0f;
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fy = 0.0f;
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	GetImageOffset(fx,fy);
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pPDFStream && sAlias.GetLength()>0)
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sAppStream << "q\n";
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sAppStream << rcPlate.left << " " << rcPlate.bottom << " "
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			<< rcPlate.right - rcPlate.left << " " << rcPlate.top - rcPlate.bottom << " re W n\n";
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sAppStream << fHScale << " 0 0 " << fVScale << " " << rcPlate.left + fx << " " << rcPlate.bottom + fy << " cm\n";
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sAppStream << mt.GetA() << " " << mt.GetB() << " " << mt.GetC() << " " << mt.GetD() << " " << mt.GetE() << " " << mt.GetF() << " cm\n";
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sAppStream << "0 g 0 G 1 w /" << sAlias << " Do\n" << "Q\n";
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return sAppStream.GetByteString();
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Image::SetPDFStream(CPDF_Stream * pStream)
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pPDFStream = pStream;
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Stream * CPWL_Image::GetPDFStream()
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return this->m_pPDFStream;
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Image::GetImageSize(FX_FLOAT & fWidth,FX_FLOAT & fHeight)
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fWidth = 0.0f;
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fHeight = 0.0f;
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pPDFStream)
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict())
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_Rect rect = pDict->GetRect("BBox");
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fWidth = rect.right - rect.left;
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fHeight = rect.top - rect.bottom;
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Matrix	CPWL_Image::GetImageMatrix()
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pPDFStream)
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict())
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return pDict->GetMatrix("Matrix");
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return CPDF_Matrix();
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_Image::GetImageAlias()
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_sImageAlias.IsEmpty())
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_pPDFStream)
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict())
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				return pDict->GetString("Name");
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_sImageAlias;
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return CFX_ByteString();
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Image::SetImageAlias(FX_LPCSTR sImageAlias)
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_sImageAlias = sImageAlias;
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Image::GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale)
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fHScale = 1.0f;
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fVScale = 1.0f;
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Image::GetImageOffset(FX_FLOAT & x,FX_FLOAT & y)
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	x = 0.0f;
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	y = 0.0f;
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------------- CPWL_Icon ---------------------------------- */
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Icon::CPWL_Icon() : m_pIconFit(NULL)
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Icon::~CPWL_Icon()
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_Icon::GetScaleMethod()
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pIconFit)
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_pIconFit->GetScaleMethod();
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return 0;
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPWL_Icon::IsProportionalScale()
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pIconFit)
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_pIconFit->IsProportionalScale();
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Icon::GetIconPosition(FX_FLOAT & fLeft, FX_FLOAT & fBottom)
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pIconFit)
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		//m_pIconFit->GetIconPosition(fLeft,fBottom);
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fLeft = 0.0f;
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fBottom = 0.0f;
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Array* pA = m_pIconFit->m_pDict->GetArray("A");
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pA != NULL)
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_DWORD dwCount = pA->GetCount();
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (dwCount > 0) fLeft = pA->GetNumber(0);
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (dwCount > 1) fBottom = pA->GetNumber(1);
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fLeft = 0.0f;
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fBottom = 0.0f;
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_Icon::GetFittingBounds()
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pIconFit)
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_pIconFit->GetFittingBounds();
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Icon::GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale)
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fHScale = 1.0f;
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fVScale = 1.0f;
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pPDFStream)
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_FLOAT fImageWidth,fImageHeight;
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_FLOAT fPlateWidth,fPlateHeight;
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Rect rcPlate = this->GetClientRect();
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fPlateWidth = rcPlate.right - rcPlate.left;
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		fPlateHeight = rcPlate.top - rcPlate.bottom;
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		GetImageSize(fImageWidth,fImageHeight);
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_INT32 nScaleMethod = this->GetScaleMethod();
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		/*
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		enum ScaleMethod
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			Always = 0,	//A, Always scale
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			Bigger,		//B, Scale only when the icon is bigger than the annotation rectangle
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			Smaller,	//S, Scale only when the icon is smaller then the annotation rectangle
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			Never		//N, Never scale
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		};
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		*/
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch (nScaleMethod)
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		default:
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 0:
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f);
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f);
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 1:
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (fPlateWidth < fImageWidth)
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f);
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (fPlateHeight < fImageHeight)
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f);
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 2:
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (fPlateWidth > fImageWidth)
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f);
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (fPlateHeight > fImageHeight)
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f);
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 3:
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_FLOAT fMinScale;
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (IsProportionalScale())
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fMinScale = PWL_MIN(fHScale,fVScale);
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fHScale = fMinScale;
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			fVScale = fMinScale;
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Icon::GetImageOffset(FX_FLOAT & x,FX_FLOAT & y)
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fLeft,fBottom;
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	this->GetIconPosition(fLeft,fBottom);
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	x = 0.0f;
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	y = 0.0f;
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fImageWidth,fImageHeight;
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	GetImageSize(fImageWidth,fImageHeight);
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fHScale,fVScale;
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	GetScale(fHScale,fVScale);
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fImageFactWidth = fImageWidth * fHScale;
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fImageFactHeight = fImageHeight * fVScale;
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT fPlateWidth,fPlateHeight;
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcPlate = this->GetClientRect();
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fPlateWidth = rcPlate.right - rcPlate.left;
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	fPlateHeight = rcPlate.top - rcPlate.bottom;
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	x = (fPlateWidth - fImageFactWidth) * fLeft;
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	y = (fPlateHeight - fImageFactHeight)  * fBottom;
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
273