FX_BOOL CFX_GEFont::GetCharBBox(FX_WCHAR wUnicode, CFX_Rect& bbox, FX_BOOL bRecursive, FX_BOOL bCharCode) { FXSYS_assert(m_pRectArray != NULL); FXSYS_assert(m_pBBoxMap != NULL); void* pRect = NULL; if (!m_pBBoxMap->Lookup((void*)(uintptr_t)wUnicode, pRect)) { IFX_Font* pFont = NULL; int32_t iGlyph = GetGlyphIndex(wUnicode, TRUE, &pFont, bCharCode); if (iGlyph != 0xFFFF && pFont != NULL) { if (pFont == (IFX_Font*)this) { FX_RECT rtBBox; if (m_pFont->GetGlyphBBox(iGlyph, rtBBox)) { Lock(); CFX_Rect rt; rt.Set(rtBBox.left, rtBBox.top, rtBBox.Width(), rtBBox.Height()); int32_t index = m_pRectArray->Add(rt); pRect = m_pRectArray->GetPtrAt(index); m_pBBoxMap->SetAt((void*)(uintptr_t)wUnicode, pRect); Unlock(); } } else if (((CFX_GEFont*)pFont) ->GetCharBBox(wUnicode, bbox, FALSE, bCharCode)) { return TRUE; } } } if (pRect == NULL) { return FALSE; } bbox = *(FX_LPCRECT)pRect; return TRUE; }
void CPDFXFA_Page::GetDisplayMatrix(CFX_Matrix& matrix, int xPos, int yPos, int xSize, int ySize, int iRotate) const { if (!m_pPDFPage && !m_pXFAPageView) return; int nDocType = m_pDocument->GetDocType(); switch (nDocType) { case DOCTYPE_DYNAMIC_XFA: { if (m_pXFAPageView) { CFX_Rect rect; rect.Set(xPos, yPos, xSize, ySize); m_pXFAPageView->GetDisplayMatrix(matrix, rect, iRotate); } } break; case DOCTYPE_PDF: case DOCTYPE_STATIC_XFA: { if (m_pPDFPage) { m_pPDFPage->GetDisplayMatrix(matrix, xPos, yPos, xSize, ySize, iRotate); } } break; default: return; } }
FX_BOOL CFGAS_GEFont::GetCharBBoxInternal(FX_WCHAR wUnicode, CFX_Rect& bbox, FX_BOOL bRecursive, FX_BOOL bCharCode) { ASSERT(m_pRectArray); ASSERT(m_pBBoxMap); void* pRect = nullptr; if (!m_pBBoxMap->Lookup((void*)(uintptr_t)wUnicode, pRect)) { CFGAS_GEFont* pFont = nullptr; int32_t iGlyph = GetGlyphIndex(wUnicode, TRUE, &pFont, bCharCode); if (iGlyph != 0xFFFF && pFont) { if (pFont == this) { FX_RECT rtBBox; if (m_pFont->GetGlyphBBox(iGlyph, rtBBox)) { CFX_Rect rt; rt.Set(rtBBox.left, rtBBox.top, rtBBox.Width(), rtBBox.Height()); int32_t index = m_pRectArray->Add(rt); pRect = m_pRectArray->GetPtrAt(index); m_pBBoxMap->SetAt((void*)(uintptr_t)wUnicode, pRect); } } else if (pFont->GetCharBBoxInternal(wUnicode, bbox, FALSE, bCharCode)) { return TRUE; } } } if (!pRect) return FALSE; bbox = *static_cast<const CFX_Rect*>(pRect); return TRUE; }
void CFDE_TextOut::CalcSize(const FX_WCHAR* pwsStr, int32_t iLength, CFX_Rect& rect) { CFX_RectF rtText; rtText.Set((FX_FLOAT)rect.left, (FX_FLOAT)rect.top, (FX_FLOAT)rect.Width(), (FX_FLOAT)rect.Height()); CalcSize(pwsStr, iLength, rtText); rect.Set((int32_t)rtText.left, (int32_t)rtText.top, (int32_t)rtText.Width(), (int32_t)rtText.Height()); }
void CFX_Matrix::TransformRect(CFX_Rect& rect) const { FX_FLOAT left = (FX_FLOAT)rect.left; FX_FLOAT top = (FX_FLOAT)rect.bottom(); FX_FLOAT right = (FX_FLOAT)rect.right(); FX_FLOAT bottom = (FX_FLOAT)rect.top; TransformRect(left, right, top, bottom); rect.left = FXSYS_round(left); rect.top = FXSYS_round(bottom); rect.width = FXSYS_round(right - left); rect.height = FXSYS_round(top - bottom); }
void FDE_GetPageMatrix(CFX_Matrix& pageMatrix, const CFX_RectF& docPageRect, const CFX_Rect& devicePageRect, int32_t iRotate, FX_DWORD dwCoordinatesType) { FXSYS_assert(iRotate >= 0 && iRotate <= 3); FX_BOOL bFlipX = (dwCoordinatesType & 0x01) != 0; FX_BOOL bFlipY = (dwCoordinatesType & 0x02) != 0; CFX_Matrix m; m.Set((bFlipX ? -1.0f : 1.0f), 0, 0, (bFlipY ? -1.0f : 1.0f), 0, 0); if (iRotate == 0 || iRotate == 2) { m.a *= (FX_FLOAT)devicePageRect.width / docPageRect.width; m.d *= (FX_FLOAT)devicePageRect.height / docPageRect.height; } else { m.a *= (FX_FLOAT)devicePageRect.height / docPageRect.width; m.d *= (FX_FLOAT)devicePageRect.width / docPageRect.height; } m.Rotate(iRotate * 1.57079632675f); switch (iRotate) { case 0: m.e = bFlipX ? (FX_FLOAT)devicePageRect.right() : (FX_FLOAT)devicePageRect.left; m.f = bFlipY ? (FX_FLOAT)devicePageRect.bottom() : (FX_FLOAT)devicePageRect.top; break; case 1: m.e = bFlipY ? (FX_FLOAT)devicePageRect.left : (FX_FLOAT)devicePageRect.right(); m.f = bFlipX ? (FX_FLOAT)devicePageRect.bottom() : (FX_FLOAT)devicePageRect.top; break; case 2: m.e = bFlipX ? (FX_FLOAT)devicePageRect.left : (FX_FLOAT)devicePageRect.right(); m.f = bFlipY ? (FX_FLOAT)devicePageRect.top : (FX_FLOAT)devicePageRect.bottom(); break; case 3: m.e = bFlipY ? (FX_FLOAT)devicePageRect.right() : (FX_FLOAT)devicePageRect.left; m.f = bFlipX ? (FX_FLOAT)devicePageRect.top : (FX_FLOAT)devicePageRect.bottom(); break; default: break; } pageMatrix = m; }
void CFDE_TextOut::SetClipRect(const CFX_Rect& rtClip) { m_rtClip.Set((FX_FLOAT)rtClip.left, (FX_FLOAT)rtClip.top, (FX_FLOAT)rtClip.Width(), (FX_FLOAT)rtClip.Height()); }