diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2018-01-03 16:53:33 -0500 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-01-04 14:47:31 +0000 |
commit | e83a915ebd3afaa897dbbf3e6cb3d2a2cb198595 (patch) | |
tree | b9c632251a7500be1e0acfe6d18ce35003ca2785 /xfa/fxfa/parser/cxfa_font.cpp | |
parent | 45da0f2d84c97a9856492265a1fc706d04bdfccd (diff) | |
download | pdfium-e83a915ebd3afaa897dbbf3e6cb3d2a2cb198595.tar.xz |
Fold CXFA_FontData into CXFA_Font
This CL removes the CXFA_FontData wrapper and puts the functionality
into CXFA_Font.
Change-Id: Id7e3a71106816a05843a62645f5955a70f7eaeaa
Reviewed-on: https://pdfium-review.googlesource.com/22113
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'xfa/fxfa/parser/cxfa_font.cpp')
-rw-r--r-- | xfa/fxfa/parser/cxfa_font.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/xfa/fxfa/parser/cxfa_font.cpp b/xfa/fxfa/parser/cxfa_font.cpp index eb5c312173..c78cbd14b8 100644 --- a/xfa/fxfa/parser/cxfa_font.cpp +++ b/xfa/fxfa/parser/cxfa_font.cpp @@ -8,6 +8,8 @@ #include "fxjs/xfa/cjx_font.h" #include "third_party/base/ptr_util.h" +#include "xfa/fxfa/parser/cxfa_fill.h" +#include "xfa/fxfa/parser/cxfa_measurement.h" namespace { @@ -63,3 +65,71 @@ CXFA_Font::CXFA_Font(CXFA_Document* doc, XFA_PacketType packet) pdfium::MakeUnique<CJX_Font>(this)) {} CXFA_Font::~CXFA_Font() {} + +float CXFA_Font::GetBaselineShift() const { + return JSObject() + ->GetMeasure(XFA_Attribute::BaselineShift) + .ToUnit(XFA_Unit::Pt); +} + +float CXFA_Font::GetHorizontalScale() { + WideString wsValue = JSObject()->GetCData(XFA_Attribute::FontHorizontalScale); + int32_t iScale = FXSYS_wtoi(wsValue.c_str()); + return iScale > 0 ? (float)iScale : 100.0f; +} + +float CXFA_Font::GetVerticalScale() { + WideString wsValue = JSObject()->GetCData(XFA_Attribute::FontVerticalScale); + int32_t iScale = FXSYS_wtoi(wsValue.c_str()); + return iScale > 0 ? (float)iScale : 100.0f; +} + +float CXFA_Font::GetLetterSpacing() { + WideString wsValue = JSObject()->GetCData(XFA_Attribute::LetterSpacing); + CXFA_Measurement ms(wsValue.AsStringView()); + if (ms.GetUnit() == XFA_Unit::Em) + return ms.GetValue() * GetFontSize(); + return ms.ToUnit(XFA_Unit::Pt); +} + +int32_t CXFA_Font::GetLineThrough() { + return JSObject()->GetInteger(XFA_Attribute::LineThrough); +} + +int32_t CXFA_Font::GetUnderline() { + return JSObject()->GetInteger(XFA_Attribute::Underline); +} + +XFA_AttributeEnum CXFA_Font::GetUnderlinePeriod() { + return JSObject() + ->TryEnum(XFA_Attribute::UnderlinePeriod, true) + .value_or(XFA_AttributeEnum::All); +} + +float CXFA_Font::GetFontSize() const { + return JSObject()->GetMeasure(XFA_Attribute::Size).ToUnit(XFA_Unit::Pt); +} + +WideString CXFA_Font::GetTypeface() { + return JSObject()->GetCData(XFA_Attribute::Typeface); +} + +bool CXFA_Font::IsBold() { + return JSObject()->GetEnum(XFA_Attribute::Weight) == XFA_AttributeEnum::Bold; +} + +bool CXFA_Font::IsItalic() { + return JSObject()->GetEnum(XFA_Attribute::Posture) == + XFA_AttributeEnum::Italic; +} + +void CXFA_Font::SetColor(FX_ARGB color) { + JSObject() + ->GetProperty<CXFA_Fill>(0, XFA_Element::Fill, true) + ->SetColor(color); +} + +FX_ARGB CXFA_Font::GetColor() { + CXFA_Fill* fill = GetChild<CXFA_Fill>(0, XFA_Element::Fill, false); + return fill ? fill->GetColor(true) : 0xFF000000; +} |