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