void CFDE_TextOut::OnDraw(const CFX_RectF& rtClip) { if (!m_pRenderDevice) return; int32_t iLines = m_ttoLines.GetSize(); if (iLines < 1) return; CFDE_Brush* pBrush = new CFDE_Brush; pBrush->SetColor(m_TxtColor); CFDE_Pen* pPen = nullptr; m_pRenderDevice->SaveState(); if (rtClip.Width() > 0.0f && rtClip.Height() > 0.0f) { m_pRenderDevice->SetClipRect(rtClip); } for (int32_t i = 0; i < iLines; i++) { CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); int32_t iPieces = pLine->GetSize(); for (int32_t j = 0; j < iPieces; j++) { FDE_TTOPIECE* pPiece = pLine->GetPtrAt(j); if (!pPiece) continue; int32_t iCount = GetDisplayPos(pPiece); if (iCount > 0) { m_pRenderDevice->DrawString(pBrush, m_pFont, m_CharPos.data(), iCount, m_fFontSize, &m_Matrix); } DrawLine(pPiece, pPen); } } m_pRenderDevice->RestoreState(); delete pBrush; delete pPen; }
void CFDE_TextOut::OnDraw(const CFX_RectF& rtClip) { if (!m_pRenderDevice || m_ttoLines.empty()) return; auto pBrush = pdfium::MakeUnique<CFDE_Brush>(); pBrush->SetColor(m_TxtColor); m_pRenderDevice->SaveState(); if (rtClip.Width() > 0.0f && rtClip.Height() > 0.0f) m_pRenderDevice->SetClipRect(rtClip); auto pPen = pdfium::MakeUnique<CFDE_Pen>(); pPen->SetColor(m_TxtColor); for (auto& line : m_ttoLines) { int32_t iPieces = line.GetSize(); for (int32_t j = 0; j < iPieces; j++) { FDE_TTOPIECE* pPiece = line.GetPtrAt(j); if (!pPiece) continue; int32_t iCount = GetDisplayPos(pPiece); if (iCount > 0) { m_pRenderDevice->DrawString(pBrush.get(), m_pFont, m_CharPos.data(), iCount, m_fFontSize, &m_Matrix); } DrawLine(pPiece, pPen.get()); } } m_pRenderDevice->RestoreState(); }