Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cpdf_type3char.cpp
Go to the documentation of this file.
1// Copyright 2016 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "core/fpdfapi/font/cpdf_type3char.h"
8
9#include <utility>
10
11#include "core/fxcrt/fx_system.h"
12#include "core/fxge/dib/cfx_dibitmap.h"
13#include "core/fxge/dib/fx_dib.h"
14
15namespace {
16
17constexpr float kTextUnitInGlyphUnit = 1000.0f;
18
19} // namespace
20
22
23CPDF_Type3Char::~CPDF_Type3Char() = default;
24
25// static
26float CPDF_Type3Char::TextUnitToGlyphUnit(float fTextUnit) {
27 return fTextUnit * kTextUnitInGlyphUnit;
28}
29
30// static
32 pRect->Scale(kTextUnitInGlyphUnit);
33}
34
36 if (m_pBitmap || !m_pForm)
37 return true;
38
39 if (m_bColored)
40 return false;
41
42 auto result = m_pForm->GetBitmapAndMatrixFromSoleImageOfForm();
43 if (!result.has_value())
44 return false;
45
46 std::tie(m_pBitmap, m_ImageMatrix) = result.value();
47 m_pForm.reset();
48 return true;
49}
50
52 pdfium::span<const float> pData) {
53 m_bColored = bColored;
54 m_Width = FXSYS_roundf(TextUnitToGlyphUnit(pData[0]));
55 m_BBox.left = FXSYS_roundf(TextUnitToGlyphUnit(pData[2]));
56 m_BBox.bottom = FXSYS_roundf(TextUnitToGlyphUnit(pData[3]));
57 m_BBox.right = FXSYS_roundf(TextUnitToGlyphUnit(pData[4]));
58 m_BBox.top = FXSYS_roundf(TextUnitToGlyphUnit(pData[5]));
59}
60
62 // Break cycles.
63 m_pForm.reset();
64}
65
67 const CFX_Matrix& matrix) {
68 m_Width = m_Width * matrix.GetXUnit() + 0.5f;
69
70 CFX_FloatRect char_rect;
71 if (m_BBox.right <= m_BBox.left || m_BBox.bottom >= m_BBox.top) {
72 char_rect = pForm->CalcBoundingBox();
74 } else {
75 char_rect = CFX_FloatRect(m_BBox);
76 }
77
78 m_BBox = matrix.TransformRect(char_rect).ToRoundedFxRect();
79}
80
81void CPDF_Type3Char::SetForm(std::unique_ptr<CPDF_Font::FormIface> pForm) {
82 m_pForm = std::move(pForm);
83}
84
86 return m_pBitmap;
87}
FX_RECT ToRoundedFxRect() const
CFX_FloatRect(const FX_RECT &rect)
CFX_FloatRect & operator=(const CFX_FloatRect &that)=default
void Scale(float fScale)
CFX_FloatRect TransformRect(const CFX_FloatRect &rect) const
float GetXUnit() const
virtual CFX_FloatRect CalcBoundingBox() const =0
static float TextUnitToGlyphUnit(float fTextUnit)
void Transform(CPDF_Font::FormIface *pForm, const CFX_Matrix &matrix)
void InitializeFromStreamData(bool bColored, pdfium::span< const float > pData)
RetainPtr< CFX_DIBitmap > GetBitmap()
static void TextUnitRectToGlyphUnitRect(CFX_FloatRect *pRect)
bool LoadBitmapFromSoleImageOfForm()
void SetForm(std::unique_ptr< CPDF_Font::FormIface > pForm)
FX_RECT & operator=(const FX_RECT &that)=default
int32_t bottom
int32_t right
int32_t top
int32_t left