#include "xfa/fde/cfde_textout.h"
#include <algorithm>
#include <utility>
#include "build/build_config.h"
#include "core/fxcrt/check.h"
#include "core/fxcrt/check_op.h"
#include "core/fxcrt/compiler_specific.h"
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_extension.h"
#include "core/fxcrt/fx_system.h"
#include "core/fxcrt/numerics/safe_conversions.h"
#include "core/fxcrt/stl_util.h"
#include "core/fxge/cfx_font.h"
#include "core/fxge/cfx_path.h"
#include "core/fxge/cfx_renderdevice.h"
#include "core/fxge/cfx_substfont.h"
#include "core/fxge/cfx_textrenderoptions.h"
#include "core/fxge/fx_font.h"
#include "core/fxge/text_char_pos.h"
#include "xfa/fgas/font/cfgas_gefont.h"
#include "xfa/fgas/layout/cfgas_txtbreak.h"
namespace pdfium {
namespace {
bool TextAlignmentVerticallyCentered(const FDE_TextAlignment align) { … }
bool IsTextAlignmentTop(const FDE_TextAlignment align) { … }
}
bool CFDE_TextOut::DrawString(CFX_RenderDevice* device,
FX_ARGB color,
const RetainPtr<CFGAS_GEFont>& pFont,
span<TextCharPos> pCharPos,
float fFontSize,
const CFX_Matrix& matrix) { … }
CFDE_TextOut::Piece::Piece() = default;
CFDE_TextOut::Piece::Piece(const Piece& that) = default;
CFDE_TextOut::Piece::~Piece() = default;
CFDE_TextOut::CFDE_TextOut()
: … { … }
CFDE_TextOut::~CFDE_TextOut() = default;
void CFDE_TextOut::SetFont(RetainPtr<CFGAS_GEFont> pFont) { … }
void CFDE_TextOut::SetFontSize(float fFontSize) { … }
void CFDE_TextOut::SetStyles(const FDE_TextStyle& dwStyles) { … }
void CFDE_TextOut::SetAlignment(FDE_TextAlignment iAlignment) { … }
void CFDE_TextOut::SetLineSpace(float fLineSpace) { … }
void CFDE_TextOut::SetLineBreakTolerance(float fTolerance) { … }
void CFDE_TextOut::CalcLogicSize(WideStringView str, CFX_SizeF* pSize) { … }
void CFDE_TextOut::CalcLogicSize(WideStringView str, CFX_RectF* pRect) { … }
bool CFDE_TextOut::RetrieveLineWidth(CFGAS_Char::BreakType dwBreakStatus,
float* pStartPos,
float* pWidth,
float* pHeight) { … }
void CFDE_TextOut::DrawLogicText(CFX_RenderDevice* device,
const WideString& str,
const CFX_RectF& rect) { … }
void CFDE_TextOut::LoadText(const WideString& str, const CFX_RectF& rect) { … }
bool CFDE_TextOut::RetrievePieces(CFGAS_Char::BreakType dwBreakStatus,
bool bReload,
const CFX_RectF& rect,
size_t* pStartChar,
int32_t* pPieceWidths) { … }
void CFDE_TextOut::AppendPiece(const Piece& piece,
bool bNeedReload,
bool bEnd) { … }
void CFDE_TextOut::Reload(const CFX_RectF& rect) { … }
void CFDE_TextOut::ReloadLinePiece(Line* line, const CFX_RectF& rect) { … }
void CFDE_TextOut::DoAlignment(const CFX_RectF& rect) { … }
size_t CFDE_TextOut::GetDisplayPos(const Piece* pPiece) { … }
CFDE_TextOut::Line::Line() = default;
CFDE_TextOut::Line::Line(const Line& that) = default;
CFDE_TextOut::Line::~Line() = default;
size_t CFDE_TextOut::Line::AddPiece(size_t index, const Piece& piece) { … }
size_t CFDE_TextOut::Line::GetSize() const { … }
const CFDE_TextOut::Piece* CFDE_TextOut::Line::GetPieceAtIndex(
size_t index) const { … }
CFDE_TextOut::Piece* CFDE_TextOut::Line::GetPieceAtIndex(size_t index) { … }
void CFDE_TextOut::Line::RemoveLast(size_t count) { … }
}