diff options
Diffstat (limited to 'fpdfsdk/src/pdfwindow/PWL_Icon.cpp')
-rw-r--r-- | fpdfsdk/src/pdfwindow/PWL_Icon.cpp | 370 |
1 files changed, 169 insertions, 201 deletions
diff --git a/fpdfsdk/src/pdfwindow/PWL_Icon.cpp b/fpdfsdk/src/pdfwindow/PWL_Icon.cpp index 71174dfb0a..29e0aa86f5 100644 --- a/fpdfsdk/src/pdfwindow/PWL_Icon.cpp +++ b/fpdfsdk/src/pdfwindow/PWL_Icon.cpp @@ -9,254 +9,222 @@ #include "../../include/pdfwindow/PWL_Icon.h" #include "../../include/pdfwindow/PWL_Utils.h" -/* ------------------------------- CPWL_Image ---------------------------------- */ +/* ------------------------------- CPWL_Image ---------------------------------- + */ -CPWL_Image::CPWL_Image() : m_pPDFStream(NULL) -{ -} +CPWL_Image::CPWL_Image() : m_pPDFStream(NULL) {} -CPWL_Image::~CPWL_Image() -{ -} +CPWL_Image::~CPWL_Image() {} -CFX_ByteString CPWL_Image::GetImageAppStream() -{ - CFX_ByteTextBuf sAppStream; +CFX_ByteString CPWL_Image::GetImageAppStream() { + CFX_ByteTextBuf sAppStream; - CFX_ByteString sAlias = GetImageAlias(); - CPDF_Rect rcPlate = GetClientRect(); - CPDF_Matrix mt; - mt.SetReverse(GetImageMatrix()); + CFX_ByteString sAlias = GetImageAlias(); + CPDF_Rect rcPlate = GetClientRect(); + CPDF_Matrix mt; + mt.SetReverse(GetImageMatrix()); - FX_FLOAT fHScale = 1.0f; - FX_FLOAT fVScale = 1.0f; - GetScale(fHScale,fVScale); + FX_FLOAT fHScale = 1.0f; + FX_FLOAT fVScale = 1.0f; + GetScale(fHScale, fVScale); - FX_FLOAT fx = 0.0f; - FX_FLOAT fy = 0.0f; - GetImageOffset(fx,fy); + FX_FLOAT fx = 0.0f; + FX_FLOAT fy = 0.0f; + GetImageOffset(fx, fy); - if (m_pPDFStream && sAlias.GetLength()>0) - { - sAppStream << "q\n"; - sAppStream << rcPlate.left << " " << rcPlate.bottom << " " - << rcPlate.right - rcPlate.left << " " << rcPlate.top - rcPlate.bottom << " re W n\n"; + if (m_pPDFStream && sAlias.GetLength() > 0) { + sAppStream << "q\n"; + sAppStream << rcPlate.left << " " << rcPlate.bottom << " " + << rcPlate.right - rcPlate.left << " " + << rcPlate.top - rcPlate.bottom << " re W n\n"; - sAppStream << fHScale << " 0 0 " << fVScale << " " << rcPlate.left + fx << " " << rcPlate.bottom + fy << " cm\n"; - sAppStream << mt.GetA() << " " << mt.GetB() << " " << mt.GetC() << " " << mt.GetD() << " " << mt.GetE() << " " << mt.GetF() << " cm\n"; + sAppStream << fHScale << " 0 0 " << fVScale << " " << rcPlate.left + fx + << " " << rcPlate.bottom + fy << " cm\n"; + sAppStream << mt.GetA() << " " << mt.GetB() << " " << mt.GetC() << " " + << mt.GetD() << " " << mt.GetE() << " " << mt.GetF() << " cm\n"; - sAppStream << "0 g 0 G 1 w /" << sAlias << " Do\n" << "Q\n"; - } + sAppStream << "0 g 0 G 1 w /" << sAlias << " Do\n" + << "Q\n"; + } - return sAppStream.GetByteString(); + return sAppStream.GetByteString(); } -void CPWL_Image::SetPDFStream(CPDF_Stream * pStream) -{ - m_pPDFStream = pStream; +void CPWL_Image::SetPDFStream(CPDF_Stream* pStream) { + m_pPDFStream = pStream; } -CPDF_Stream * CPWL_Image::GetPDFStream() -{ - return m_pPDFStream; +CPDF_Stream* CPWL_Image::GetPDFStream() { + return m_pPDFStream; } -void CPWL_Image::GetImageSize(FX_FLOAT & fWidth,FX_FLOAT & fHeight) -{ - fWidth = 0.0f; - fHeight = 0.0f; - - if (m_pPDFStream) - { - if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict()) - { - CPDF_Rect rect = pDict->GetRect("BBox"); - - fWidth = rect.right - rect.left; - fHeight = rect.top - rect.bottom; - } - } -} +void CPWL_Image::GetImageSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) { + fWidth = 0.0f; + fHeight = 0.0f; -CPDF_Matrix CPWL_Image::GetImageMatrix() -{ - if (m_pPDFStream) - { - if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict()) - { - return pDict->GetMatrix("Matrix"); - } - } - - return CPDF_Matrix(); -} + if (m_pPDFStream) { + if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) { + CPDF_Rect rect = pDict->GetRect("BBox"); -CFX_ByteString CPWL_Image::GetImageAlias() -{ - if (m_sImageAlias.IsEmpty()) - { - if (m_pPDFStream) - { - if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict()) - { - return pDict->GetString("Name"); - } - } - } - else - return m_sImageAlias; - - return CFX_ByteString(); + fWidth = rect.right - rect.left; + fHeight = rect.top - rect.bottom; + } + } } -void CPWL_Image::SetImageAlias(const FX_CHAR* sImageAlias) -{ - m_sImageAlias = sImageAlias; -} +CPDF_Matrix CPWL_Image::GetImageMatrix() { + if (m_pPDFStream) { + if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) { + return pDict->GetMatrix("Matrix"); + } + } -void CPWL_Image::GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale) -{ - fHScale = 1.0f; - fVScale = 1.0f; + return CPDF_Matrix(); } +CFX_ByteString CPWL_Image::GetImageAlias() { + if (m_sImageAlias.IsEmpty()) { + if (m_pPDFStream) { + if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) { + return pDict->GetString("Name"); + } + } + } else + return m_sImageAlias; -void CPWL_Image::GetImageOffset(FX_FLOAT & x,FX_FLOAT & y) -{ - x = 0.0f; - y = 0.0f; + return CFX_ByteString(); } -/* ------------------------------- CPWL_Icon ---------------------------------- */ +void CPWL_Image::SetImageAlias(const FX_CHAR* sImageAlias) { + m_sImageAlias = sImageAlias; +} -CPWL_Icon::CPWL_Icon() : m_pIconFit(NULL) -{ +void CPWL_Image::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) { + fHScale = 1.0f; + fVScale = 1.0f; } -CPWL_Icon::~CPWL_Icon() -{ +void CPWL_Image::GetImageOffset(FX_FLOAT& x, FX_FLOAT& y) { + x = 0.0f; + y = 0.0f; } -int32_t CPWL_Icon::GetScaleMethod() -{ - if (m_pIconFit) - return m_pIconFit->GetScaleMethod(); +/* ------------------------------- CPWL_Icon ---------------------------------- + */ - return 0; -} +CPWL_Icon::CPWL_Icon() : m_pIconFit(NULL) {} -FX_BOOL CPWL_Icon::IsProportionalScale() -{ - if (m_pIconFit) - return m_pIconFit->IsProportionalScale(); +CPWL_Icon::~CPWL_Icon() {} - return FALSE; -} +int32_t CPWL_Icon::GetScaleMethod() { + if (m_pIconFit) + return m_pIconFit->GetScaleMethod(); -void CPWL_Icon::GetIconPosition(FX_FLOAT & fLeft, FX_FLOAT & fBottom) -{ - if (m_pIconFit) - { - //m_pIconFit->GetIconPosition(fLeft,fBottom); - fLeft = 0.0f; - fBottom = 0.0f; - CPDF_Array* pA = m_pIconFit->m_pDict ? m_pIconFit->m_pDict->GetArray("A") : NULL; - if (pA != NULL) - { - FX_DWORD dwCount = pA->GetCount(); - if (dwCount > 0) fLeft = pA->GetNumber(0); - if (dwCount > 1) fBottom = pA->GetNumber(1); - } - } - else - { - fLeft = 0.0f; - fBottom = 0.0f; - } + return 0; } -FX_BOOL CPWL_Icon::GetFittingBounds() -{ - if (m_pIconFit) - return m_pIconFit->GetFittingBounds(); +FX_BOOL CPWL_Icon::IsProportionalScale() { + if (m_pIconFit) + return m_pIconFit->IsProportionalScale(); - return FALSE; + return FALSE; } -void CPWL_Icon::GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale) -{ - fHScale = 1.0f; - fVScale = 1.0f; - - if (m_pPDFStream) - { - FX_FLOAT fImageWidth,fImageHeight; - FX_FLOAT fPlateWidth,fPlateHeight; - - CPDF_Rect rcPlate = GetClientRect(); - fPlateWidth = rcPlate.right - rcPlate.left; - fPlateHeight = rcPlate.top - rcPlate.bottom; - - GetImageSize(fImageWidth,fImageHeight); - - int32_t nScaleMethod = GetScaleMethod(); - - switch (nScaleMethod) - { - default: - case 0: - fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f); - fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f); - break; - case 1: - if (fPlateWidth < fImageWidth) - fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f); - if (fPlateHeight < fImageHeight) - fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f); - break; - case 2: - if (fPlateWidth > fImageWidth) - fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f); - if (fPlateHeight > fImageHeight) - fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f); - break; - case 3: - break; - } - - FX_FLOAT fMinScale; - if (IsProportionalScale()) - { - fMinScale = PWL_MIN(fHScale,fVScale); - fHScale = fMinScale; - fVScale = fMinScale; - } - } +void CPWL_Icon::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) { + if (m_pIconFit) { + // m_pIconFit->GetIconPosition(fLeft,fBottom); + fLeft = 0.0f; + fBottom = 0.0f; + CPDF_Array* pA = + m_pIconFit->m_pDict ? m_pIconFit->m_pDict->GetArray("A") : NULL; + if (pA != NULL) { + FX_DWORD dwCount = pA->GetCount(); + if (dwCount > 0) + fLeft = pA->GetNumber(0); + if (dwCount > 1) + fBottom = pA->GetNumber(1); + } + } else { + fLeft = 0.0f; + fBottom = 0.0f; + } } -void CPWL_Icon::GetImageOffset(FX_FLOAT & x,FX_FLOAT & y) -{ - FX_FLOAT fLeft,fBottom; +FX_BOOL CPWL_Icon::GetFittingBounds() { + if (m_pIconFit) + return m_pIconFit->GetFittingBounds(); - GetIconPosition(fLeft, fBottom); - x = 0.0f; - y = 0.0f; + return FALSE; +} + +void CPWL_Icon::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) { + fHScale = 1.0f; + fVScale = 1.0f; - FX_FLOAT fImageWidth,fImageHeight; - GetImageSize(fImageWidth,fImageHeight); + if (m_pPDFStream) { + FX_FLOAT fImageWidth, fImageHeight; + FX_FLOAT fPlateWidth, fPlateHeight; - FX_FLOAT fHScale,fVScale; - GetScale(fHScale,fVScale); + CPDF_Rect rcPlate = GetClientRect(); + fPlateWidth = rcPlate.right - rcPlate.left; + fPlateHeight = rcPlate.top - rcPlate.bottom; - FX_FLOAT fImageFactWidth = fImageWidth * fHScale; - FX_FLOAT fImageFactHeight = fImageHeight * fVScale; + GetImageSize(fImageWidth, fImageHeight); - FX_FLOAT fPlateWidth,fPlateHeight; - CPDF_Rect rcPlate = GetClientRect(); - fPlateWidth = rcPlate.right - rcPlate.left; - fPlateHeight = rcPlate.top - rcPlate.bottom; + int32_t nScaleMethod = GetScaleMethod(); - x = (fPlateWidth - fImageFactWidth) * fLeft; - y = (fPlateHeight - fImageFactHeight) * fBottom; + switch (nScaleMethod) { + default: + case 0: + fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f); + fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f); + break; + case 1: + if (fPlateWidth < fImageWidth) + fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f); + if (fPlateHeight < fImageHeight) + fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f); + break; + case 2: + if (fPlateWidth > fImageWidth) + fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f); + if (fPlateHeight > fImageHeight) + fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f); + break; + case 3: + break; + } + + FX_FLOAT fMinScale; + if (IsProportionalScale()) { + fMinScale = PWL_MIN(fHScale, fVScale); + fHScale = fMinScale; + fVScale = fMinScale; + } + } } +void CPWL_Icon::GetImageOffset(FX_FLOAT& x, FX_FLOAT& y) { + FX_FLOAT fLeft, fBottom; + + GetIconPosition(fLeft, fBottom); + x = 0.0f; + y = 0.0f; + + FX_FLOAT fImageWidth, fImageHeight; + GetImageSize(fImageWidth, fImageHeight); + + FX_FLOAT fHScale, fVScale; + GetScale(fHScale, fVScale); + + FX_FLOAT fImageFactWidth = fImageWidth * fHScale; + FX_FLOAT fImageFactHeight = fImageHeight * fVScale; + + FX_FLOAT fPlateWidth, fPlateHeight; + CPDF_Rect rcPlate = GetClientRect(); + fPlateWidth = rcPlate.right - rcPlate.left; + fPlateHeight = rcPlate.top - rcPlate.bottom; + + x = (fPlateWidth - fImageFactWidth) * fLeft; + y = (fPlateHeight - fImageFactHeight) * fBottom; +} |