From 4d48bbfd5378ffe70a17ad613b9c167ad3ef03b2 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Tue, 7 Nov 2017 20:24:10 +0000 Subject: Rename CXFA_Font to CXFA_FontData This CL renames CXFA_Font to CXFA_FontData to make it clear this is part of the data hierarchy. The GetFontNode methods were renamed to GetFontData to match the return type. Change-Id: I5d5b9200eedc9c8c1bd8929a5a0df3d2663d7e3d Reviewed-on: https://pdfium-review.googlesource.com/17983 Reviewed-by: Tom Sepez Commit-Queue: dsinclair --- BUILD.gn | 4 +- fxjs/cjx_node.cpp | 16 +++--- xfa/fxfa/cxfa_textlayout.cpp | 15 +++--- xfa/fxfa/cxfa_textparser.cpp | 82 +++++++++++++++---------------- xfa/fxfa/cxfa_textprovider.cpp | 6 +-- xfa/fxfa/cxfa_textprovider.h | 4 +- xfa/fxfa/cxfa_widgetacc.cpp | 26 +++++----- xfa/fxfa/parser/cxfa_captiondata.cpp | 6 +-- xfa/fxfa/parser/cxfa_captiondata.h | 4 +- xfa/fxfa/parser/cxfa_font.cpp | 95 ------------------------------------ xfa/fxfa/parser/cxfa_font.h | 36 -------------- xfa/fxfa/parser/cxfa_fontdata.cpp | 95 ++++++++++++++++++++++++++++++++++++ xfa/fxfa/parser/cxfa_fontdata.h | 36 ++++++++++++++ xfa/fxfa/parser/cxfa_widgetdata.cpp | 4 +- xfa/fxfa/parser/cxfa_widgetdata.h | 4 +- 15 files changed, 215 insertions(+), 218 deletions(-) delete mode 100644 xfa/fxfa/parser/cxfa_font.cpp delete mode 100644 xfa/fxfa/parser/cxfa_font.h create mode 100644 xfa/fxfa/parser/cxfa_fontdata.cpp create mode 100644 xfa/fxfa/parser/cxfa_fontdata.h diff --git a/BUILD.gn b/BUILD.gn index 6f3c0140fe..02b51bae4a 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -1825,8 +1825,8 @@ if (pdf_enable_xfa) { "xfa/fxfa/parser/cxfa_exdata.h", "xfa/fxfa/parser/cxfa_filldata.cpp", "xfa/fxfa/parser/cxfa_filldata.h", - "xfa/fxfa/parser/cxfa_font.cpp", - "xfa/fxfa/parser/cxfa_font.h", + "xfa/fxfa/parser/cxfa_fontdata.cpp", + "xfa/fxfa/parser/cxfa_fontdata.h", "xfa/fxfa/parser/cxfa_image.cpp", "xfa/fxfa/parser/cxfa_image.h", "xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp", diff --git a/fxjs/cjx_node.cpp b/fxjs/cjx_node.cpp index 490e3a1094..dcdd0c5bd3 100644 --- a/fxjs/cjx_node.cpp +++ b/fxjs/cjx_node.cpp @@ -1735,23 +1735,23 @@ void CJX_Node::Script_Som_FontColor(CFXJSE_Value* pValue, bool bSetting, XFA_ATTRIBUTE eAttribute) { CXFA_WidgetData* pWidgetData = GetXFANode()->GetWidgetData(); - if (!pWidgetData) { + if (!pWidgetData) return; - } - CXFA_Font font = pWidgetData->GetFont(true); - CXFA_Node* pNode = font.GetNode(); - if (!pNode) { + + CXFA_FontData fontData = pWidgetData->GetFontData(true); + CXFA_Node* pNode = fontData.GetNode(); + if (!pNode) return; - } + if (bSetting) { int32_t r; int32_t g; int32_t b; StrToRGB(pValue->ToWideString(), r, g, b); FX_ARGB color = ArgbEncode(0xff, r, g, b); - font.SetColor(color); + fontData.SetColor(color); } else { - FX_ARGB color = font.GetColor(); + FX_ARGB color = fontData.GetColor(); int32_t a; int32_t r; int32_t g; diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp index 84b183f76b..309c13a56a 100644 --- a/xfa/fxfa/cxfa_textlayout.cpp +++ b/xfa/fxfa/cxfa_textlayout.cpp @@ -27,7 +27,7 @@ #include "xfa/fxfa/cxfa_textprovider.h" #include "xfa/fxfa/cxfa_texttabstopscontext.h" #include "xfa/fxfa/cxfa_textuserdata.h" -#include "xfa/fxfa/parser/cxfa_font.h" +#include "xfa/fxfa/parser/cxfa_fontdata.h" #include "xfa/fxfa/parser/cxfa_node.h" #include "xfa/fxfa/parser/cxfa_para.h" @@ -102,7 +102,6 @@ std::unique_ptr CXFA_TextLayout::CreateBreak(bool bDefault) { } void CXFA_TextLayout::InitBreak(float fLineWidth) { - CXFA_Font font = m_pTextProvider->GetFontNode(); CXFA_Para para = m_pTextProvider->GetParaNode(); float fStart = 0; float fStartPos = 0; @@ -142,10 +141,14 @@ void CXFA_TextLayout::InitBreak(float fLineWidth) { m_pBreak->SetLineBoundary(fStart, fLineWidth); m_pBreak->SetLineStartPos(fStartPos); - if (font) { - m_pBreak->SetHorizontalScale((int32_t)font.GetHorizontalScale()); - m_pBreak->SetVerticalScale((int32_t)font.GetVerticalScale()); - m_pBreak->SetCharSpace(font.GetLetterSpacing()); + + CXFA_FontData fontData = m_pTextProvider->GetFontData(); + if (fontData) { + m_pBreak->SetHorizontalScale( + static_cast(fontData.GetHorizontalScale())); + m_pBreak->SetVerticalScale( + static_cast(fontData.GetVerticalScale())); + m_pBreak->SetCharSpace(fontData.GetLetterSpacing()); } float fFontSize = m_textParser.GetFontSize(m_pTextProvider, nullptr); diff --git a/xfa/fxfa/cxfa_textparser.cpp b/xfa/fxfa/cxfa_textparser.cpp index af9a274a94..ea5f62e81a 100644 --- a/xfa/fxfa/cxfa_textparser.cpp +++ b/xfa/fxfa/cxfa_textparser.cpp @@ -58,8 +58,8 @@ void CXFA_TextParser::InitCSSData(CXFA_TextProvider* pTextProvider) { if (!m_pSelector) { m_pSelector = pdfium::MakeUnique(); - CXFA_Font font = pTextProvider->GetFontNode(); - m_pSelector->SetDefFontSize(font ? font.GetFontSize() : 10.0f); + CXFA_FontData fontData = pTextProvider->GetFontData(); + m_pSelector->SetDefFontSize(fontData ? fontData.GetFontSize() : 10.0f); } if (m_cssInitialized) @@ -90,7 +90,6 @@ std::unique_ptr CXFA_TextParser::LoadDefaultSheetStyle() { RetainPtr CXFA_TextParser::CreateRootStyle( CXFA_TextProvider* pTextProvider) { - CXFA_Font font = pTextProvider->GetFontNode(); CXFA_Para para = pTextProvider->GetParaNode(); auto pStyle = m_pSelector->CreateComputedStyle(nullptr); float fLineHeight = 0; @@ -125,22 +124,24 @@ RetainPtr CXFA_TextParser::CreateRootStyle( pStyle->SetMarginWidth(rtMarginWidth); } - if (font) { - pStyle->SetColor(font.GetColor()); - pStyle->SetFontStyle(font.IsItalic() ? CFX_CSSFontStyle::Italic - : CFX_CSSFontStyle::Normal); - pStyle->SetFontWeight(font.IsBold() ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL); - pStyle->SetNumberVerticalAlign(-font.GetBaselineShift()); - fFontSize = font.GetFontSize(); + CXFA_FontData fontData = pTextProvider->GetFontData(); + if (fontData) { + pStyle->SetColor(fontData.GetColor()); + pStyle->SetFontStyle(fontData.IsItalic() ? CFX_CSSFontStyle::Italic + : CFX_CSSFontStyle::Normal); + pStyle->SetFontWeight(fontData.IsBold() ? FXFONT_FW_BOLD + : FXFONT_FW_NORMAL); + pStyle->SetNumberVerticalAlign(-fontData.GetBaselineShift()); + fFontSize = fontData.GetFontSize(); CFX_CSSLength letterSpacing; - letterSpacing.Set(CFX_CSSLengthUnit::Point, font.GetLetterSpacing()); + letterSpacing.Set(CFX_CSSLengthUnit::Point, fontData.GetLetterSpacing()); pStyle->SetLetterSpacing(letterSpacing); uint32_t dwDecoration = 0; - if (font.GetLineThrough() > 0) + if (fontData.GetLineThrough() > 0) dwDecoration |= CFX_CSSTEXTDECORATION_LineThrough; - if (font.GetUnderline() > 1) + if (fontData.GetUnderline() > 1) dwDecoration |= CFX_CSSTEXTDECORATION_Double; - else if (font.GetUnderline() > 0) + else if (fontData.GetUnderline() > 0) dwDecoration |= CFX_CSSTEXTDECORATION_Underline; pStyle->SetTextDecoration(dwDecoration); @@ -320,12 +321,12 @@ RetainPtr CXFA_TextParser::GetFont( CFX_CSSComputedStyle* pStyle) const { WideStringView wsFamily = L"Courier"; uint32_t dwStyle = 0; - CXFA_Font font = pTextProvider->GetFontNode(); - if (font) { - font.GetTypeface(wsFamily); - if (font.IsBold()) + CXFA_FontData fontData = pTextProvider->GetFontData(); + if (fontData) { + fontData.GetTypeface(wsFamily); + if (fontData.IsBold()) dwStyle |= FXFONT_BOLD; - if (font.IsItalic()) + if (fontData.IsItalic()) dwStyle |= FXFONT_BOLD; } @@ -351,10 +352,8 @@ float CXFA_TextParser::GetFontSize(CXFA_TextProvider* pTextProvider, if (pStyle) return pStyle->GetFontSize(); - CXFA_Font font = pTextProvider->GetFontNode(); - if (font) - return font.GetFontSize(); - return 10; + CXFA_FontData fontData = pTextProvider->GetFontData(); + return fontData ? fontData.GetFontSize() : 10; } int32_t CXFA_TextParser::GetHorScale(CXFA_TextProvider* pTextProvider, @@ -379,9 +378,8 @@ int32_t CXFA_TextParser::GetHorScale(CXFA_TextProvider* pTextProvider, } } - if (CXFA_Font font = pTextProvider->GetFontNode()) - return static_cast(font.GetHorizontalScale()); - return 100; + CXFA_FontData fontData = pTextProvider->GetFontData(); + return fontData ? static_cast(fontData.GetHorizontalScale()) : 100; } int32_t CXFA_TextParser::GetVerScale(CXFA_TextProvider* pTextProvider, @@ -392,9 +390,8 @@ int32_t CXFA_TextParser::GetVerScale(CXFA_TextProvider* pTextProvider, return wsValue.GetInteger(); } - if (CXFA_Font font = pTextProvider->GetFontNode()) - return (int32_t)font.GetVerticalScale(); - return 100; + CXFA_FontData fontData = pTextProvider->GetFontData(); + return fontData ? static_cast(fontData.GetVerticalScale()) : 100; } void CXFA_TextParser::GetUnderline(CXFA_TextProvider* pTextProvider, @@ -403,11 +400,11 @@ void CXFA_TextParser::GetUnderline(CXFA_TextProvider* pTextProvider, int32_t& iPeriod) const { iUnderline = 0; iPeriod = XFA_ATTRIBUTEENUM_All; + CXFA_FontData fontData = pTextProvider->GetFontData(); if (!pStyle) { - CXFA_Font font = pTextProvider->GetFontNode(); - if (font) { - iUnderline = font.GetUnderline(); - iPeriod = font.GetUnderlinePeriod(); + if (fontData) { + iUnderline = fontData.GetUnderline(); + iPeriod = fontData.GetUnderlinePeriod(); } return; } @@ -422,8 +419,8 @@ void CXFA_TextParser::GetUnderline(CXFA_TextProvider* pTextProvider, if (pStyle->GetCustomStyle(L"underlinePeriod", wsValue)) { if (wsValue == L"word") iPeriod = XFA_ATTRIBUTEENUM_Word; - } else if (CXFA_Font font = pTextProvider->GetFontNode()) { - iPeriod = font.GetUnderlinePeriod(); + } else if (fontData) { + iPeriod = fontData.GetUnderlinePeriod(); } } @@ -436,19 +433,18 @@ void CXFA_TextParser::GetLinethrough(CXFA_TextProvider* pTextProvider, return; } - CXFA_Font font = pTextProvider->GetFontNode(); - if (font) - iLinethrough = font.GetLineThrough(); + CXFA_FontData fontData = pTextProvider->GetFontData(); + if (fontData) + iLinethrough = fontData.GetLineThrough(); } FX_ARGB CXFA_TextParser::GetColor(CXFA_TextProvider* pTextProvider, CFX_CSSComputedStyle* pStyle) const { if (pStyle) return pStyle->GetColor(); - if (CXFA_Font font = pTextProvider->GetFontNode()) - return font.GetColor(); - return 0xFF000000; + CXFA_FontData fontData = pTextProvider->GetFontData(); + return fontData ? fontData.GetColor() : 0xFF000000; } float CXFA_TextParser::GetBaseline(CXFA_TextProvider* pTextProvider, @@ -456,8 +452,8 @@ float CXFA_TextParser::GetBaseline(CXFA_TextProvider* pTextProvider, if (pStyle) { if (pStyle->GetVerticalAlign() == CFX_CSSVerticalAlign::Number) return pStyle->GetNumberVerticalAlign(); - } else if (CXFA_Font font = pTextProvider->GetFontNode()) { - return font.GetBaselineShift(); + } else if (CXFA_FontData fontData = pTextProvider->GetFontData()) { + return fontData.GetBaselineShift(); } return 0; } diff --git a/xfa/fxfa/cxfa_textprovider.cpp b/xfa/fxfa/cxfa_textprovider.cpp index 3ac35bb843..6529c01b6c 100644 --- a/xfa/fxfa/cxfa_textprovider.cpp +++ b/xfa/fxfa/cxfa_textprovider.cpp @@ -120,14 +120,14 @@ CXFA_Para CXFA_TextProvider::GetParaNode() { return CXFA_Para(pNode->GetChild(0, XFA_Element::Para, false)); } -CXFA_Font CXFA_TextProvider::GetFontNode() { +CXFA_FontData CXFA_TextProvider::GetFontData() { if (m_eType == XFA_TEXTPROVIDERTYPE_Text) - return m_pWidgetAcc->GetFont(false); + return m_pWidgetAcc->GetFontData(false); CXFA_Node* pNode = m_pWidgetAcc->GetNode()->GetChild(0, XFA_Element::Caption, false); pNode = pNode->GetChild(0, XFA_Element::Font, false); - return pNode ? CXFA_Font(pNode) : m_pWidgetAcc->GetFont(false); + return pNode ? CXFA_FontData(pNode) : m_pWidgetAcc->GetFontData(false); } bool CXFA_TextProvider::IsCheckButtonAndAutoWidth() { diff --git a/xfa/fxfa/cxfa_textprovider.h b/xfa/fxfa/cxfa_textprovider.h index d648b94495..e6549ef646 100644 --- a/xfa/fxfa/cxfa_textprovider.h +++ b/xfa/fxfa/cxfa_textprovider.h @@ -10,7 +10,7 @@ #include "core/fxcrt/fx_string.h" #include "xfa/fxfa/cxfa_textlayout.h" #include "xfa/fxfa/cxfa_widgetacc.h" -#include "xfa/fxfa/parser/cxfa_font.h" +#include "xfa/fxfa/parser/cxfa_fontdata.h" #include "xfa/fxfa/parser/cxfa_para.h" class CXFA_FFDoc; @@ -34,7 +34,7 @@ class CXFA_TextProvider { CXFA_Node* GetTextNode(bool& bRichText); CXFA_Para GetParaNode(); - CXFA_Font GetFontNode(); + CXFA_FontData GetFontData(); bool IsCheckButtonAndAutoWidth(); CXFA_FFDoc* GetDocNode() { return m_pWidgetAcc->GetDoc(); } bool GetEmbbedObj(bool bURI, diff --git a/xfa/fxfa/cxfa_widgetacc.cpp b/xfa/fxfa/cxfa_widgetacc.cpp index ea262f874d..32d925fead 100644 --- a/xfa/fxfa/cxfa_widgetacc.cpp +++ b/xfa/fxfa/cxfa_widgetacc.cpp @@ -712,10 +712,10 @@ void CXFA_WidgetAcc::CalcCaptionSize(CFX_SizeF& szCap) { bVert ? szCap.height = fCapReserve : szCap.width = fCapReserve; } else { float fFontSize = 10.0f; - if (CXFA_Font font = captionData.GetFont()) - fFontSize = font.GetFontSize(); - else if (CXFA_Font widgetfont = GetFont(false)) - fFontSize = widgetfont.GetFontSize(); + if (CXFA_FontData fontData = captionData.GetFontData()) + fFontSize = fontData.GetFontSize(); + else if (CXFA_FontData widgetfontData = GetFontData(false)) + fFontSize = widgetfontData.GetFontSize(); if (bVert) { szCap.height = fCapReserve > 0 ? fCapReserve : fFontSize; @@ -1482,12 +1482,12 @@ void CXFA_WidgetAcc::SetImageEditImage( RetainPtr CXFA_WidgetAcc::GetFDEFont() { WideStringView wsFontName = L"Courier"; uint32_t dwFontStyle = 0; - if (CXFA_Font font = GetFont(false)) { - if (font.IsBold()) + if (CXFA_FontData fontData = GetFontData(false)) { + if (fontData.IsBold()) dwFontStyle |= FXFONT_BOLD; - if (font.IsItalic()) + if (fontData.IsItalic()) dwFontStyle |= FXFONT_ITALIC; - font.GetTypeface(wsFontName); + fontData.GetTypeface(wsFontName); } auto* pDoc = GetDoc(); @@ -1496,9 +1496,8 @@ RetainPtr CXFA_WidgetAcc::GetFDEFont() { } float CXFA_WidgetAcc::GetFontSize() { - float fFontSize = 10.0f; - if (CXFA_Font font = GetFont(false)) - fFontSize = font.GetFontSize(); + CXFA_FontData fontData = GetFontData(false); + float fFontSize = fontData ? fontData.GetFontSize() : 10.0f; return fFontSize < 0.1f ? 10.0f : fFontSize; } @@ -1512,7 +1511,6 @@ float CXFA_WidgetAcc::GetLineHeight() { } FX_ARGB CXFA_WidgetAcc::GetTextColor() { - if (CXFA_Font font = GetFont(false)) - return font.GetColor(); - return 0xFF000000; + CXFA_FontData fontData = GetFontData(false); + return fontData ? fontData.GetColor() : 0xFF000000; } diff --git a/xfa/fxfa/parser/cxfa_captiondata.cpp b/xfa/fxfa/parser/cxfa_captiondata.cpp index db18f9a159..1f84959d05 100644 --- a/xfa/fxfa/parser/cxfa_captiondata.cpp +++ b/xfa/fxfa/parser/cxfa_captiondata.cpp @@ -34,9 +34,9 @@ CXFA_Margin CXFA_CaptionData::GetMargin() { : nullptr); } -CXFA_Font CXFA_CaptionData::GetFont() { - return CXFA_Font(m_pNode ? m_pNode->GetChild(0, XFA_Element::Font, false) - : nullptr); +CXFA_FontData CXFA_CaptionData::GetFontData() { + return CXFA_FontData(m_pNode ? m_pNode->GetChild(0, XFA_Element::Font, false) + : nullptr); } CXFA_Value CXFA_CaptionData::GetValue() { diff --git a/xfa/fxfa/parser/cxfa_captiondata.h b/xfa/fxfa/parser/cxfa_captiondata.h index 605a837a1b..0a14c1f8fa 100644 --- a/xfa/fxfa/parser/cxfa_captiondata.h +++ b/xfa/fxfa/parser/cxfa_captiondata.h @@ -8,7 +8,7 @@ #define XFA_FXFA_PARSER_CXFA_CAPTIONDATA_H_ #include "xfa/fxfa/parser/cxfa_data.h" -#include "xfa/fxfa/parser/cxfa_font.h" +#include "xfa/fxfa/parser/cxfa_fontdata.h" #include "xfa/fxfa/parser/cxfa_margin.h" #include "xfa/fxfa/parser/cxfa_value.h" @@ -22,7 +22,7 @@ class CXFA_CaptionData : public CXFA_Data { int32_t GetPlacementType(); float GetReserve(); CXFA_Margin GetMargin(); - CXFA_Font GetFont(); + CXFA_FontData GetFontData(); CXFA_Value GetValue(); }; diff --git a/xfa/fxfa/parser/cxfa_font.cpp b/xfa/fxfa/parser/cxfa_font.cpp deleted file mode 100644 index 9de43535b5..0000000000 --- a/xfa/fxfa/parser/cxfa_font.cpp +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2016 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/fxfa/parser/cxfa_font.h" - -#include "core/fxge/fx_dib.h" -#include "xfa/fxfa/parser/cxfa_filldata.h" -#include "xfa/fxfa/parser/cxfa_measurement.h" -#include "xfa/fxfa/parser/cxfa_node.h" - -CXFA_Font::CXFA_Font(CXFA_Node* pNode) : CXFA_Data(pNode) {} - -float CXFA_Font::GetBaselineShift() { - return m_pNode->JSNode() - ->GetMeasure(XFA_ATTRIBUTE_BaselineShift) - .ToUnit(XFA_UNIT_Pt); -} - -float CXFA_Font::GetHorizontalScale() { - WideString wsValue; - m_pNode->JSNode()->TryCData(XFA_ATTRIBUTE_FontHorizontalScale, wsValue, true); - int32_t iScale = FXSYS_wtoi(wsValue.c_str()); - return iScale > 0 ? (float)iScale : 100.0f; -} - -float CXFA_Font::GetVerticalScale() { - WideString wsValue; - m_pNode->JSNode()->TryCData(XFA_ATTRIBUTE_FontVerticalScale, wsValue, true); - int32_t iScale = FXSYS_wtoi(wsValue.c_str()); - return iScale > 0 ? (float)iScale : 100.0f; -} - -float CXFA_Font::GetLetterSpacing() { - WideStringView wsValue; - if (!m_pNode->JSNode()->TryCData(XFA_ATTRIBUTE_LetterSpacing, wsValue, true)) - return 0; - - CXFA_Measurement ms(wsValue); - if (ms.GetUnit() == XFA_UNIT_Em) - return ms.GetValue() * GetFontSize(); - return ms.ToUnit(XFA_UNIT_Pt); -} - -int32_t CXFA_Font::GetLineThrough() { - int32_t iValue = 0; - m_pNode->JSNode()->TryInteger(XFA_ATTRIBUTE_LineThrough, iValue, true); - return iValue; -} - -int32_t CXFA_Font::GetUnderline() { - int32_t iValue = 0; - m_pNode->JSNode()->TryInteger(XFA_ATTRIBUTE_Underline, iValue, true); - return iValue; -} - -int32_t CXFA_Font::GetUnderlinePeriod() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_All; - m_pNode->JSNode()->TryEnum(XFA_ATTRIBUTE_UnderlinePeriod, eAttr, true); - return eAttr; -} - -float CXFA_Font::GetFontSize() { - CXFA_Measurement ms; - m_pNode->JSNode()->TryMeasure(XFA_ATTRIBUTE_Size, ms, true); - return ms.ToUnit(XFA_UNIT_Pt); -} - -void CXFA_Font::GetTypeface(WideStringView& wsTypeFace) { - m_pNode->JSNode()->TryCData(XFA_ATTRIBUTE_Typeface, wsTypeFace, true); -} - -bool CXFA_Font::IsBold() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Normal; - m_pNode->JSNode()->TryEnum(XFA_ATTRIBUTE_Weight, eAttr, true); - return eAttr == XFA_ATTRIBUTEENUM_Bold; -} - -bool CXFA_Font::IsItalic() { - XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Normal; - m_pNode->JSNode()->TryEnum(XFA_ATTRIBUTE_Posture, eAttr, true); - return eAttr == XFA_ATTRIBUTEENUM_Italic; -} - -void CXFA_Font::SetColor(FX_ARGB color) { - CXFA_FillData(m_pNode->JSNode()->GetProperty(0, XFA_Element::Fill, true)) - .SetColor(color); -} - -FX_ARGB CXFA_Font::GetColor() { - CXFA_FillData fillData(m_pNode->GetChild(0, XFA_Element::Fill, false)); - return fillData ? fillData.GetColor(true) : 0xFF000000; -} diff --git a/xfa/fxfa/parser/cxfa_font.h b/xfa/fxfa/parser/cxfa_font.h deleted file mode 100644 index af0c348aa7..0000000000 --- a/xfa/fxfa/parser/cxfa_font.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2016 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef XFA_FXFA_PARSER_CXFA_FONT_H_ -#define XFA_FXFA_PARSER_CXFA_FONT_H_ - -#include "core/fxge/fx_dib.h" -#include "xfa/fxfa/parser/cxfa_data.h" - -class CXFA_Node; - -class CXFA_Font : public CXFA_Data { - public: - explicit CXFA_Font(CXFA_Node* pNode); - - float GetBaselineShift(); - float GetHorizontalScale(); - float GetVerticalScale(); - float GetLetterSpacing(); - int32_t GetLineThrough(); - int32_t GetUnderline(); - int32_t GetUnderlinePeriod(); - float GetFontSize(); - void GetTypeface(WideStringView& wsTypeFace); - - bool IsBold(); - bool IsItalic(); - - FX_ARGB GetColor(); - void SetColor(FX_ARGB color); -}; - -#endif // XFA_FXFA_PARSER_CXFA_FONT_H_ diff --git a/xfa/fxfa/parser/cxfa_fontdata.cpp b/xfa/fxfa/parser/cxfa_fontdata.cpp new file mode 100644 index 0000000000..df1e812239 --- /dev/null +++ b/xfa/fxfa/parser/cxfa_fontdata.cpp @@ -0,0 +1,95 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "xfa/fxfa/parser/cxfa_fontdata.h" + +#include "core/fxge/fx_dib.h" +#include "xfa/fxfa/parser/cxfa_filldata.h" +#include "xfa/fxfa/parser/cxfa_measurement.h" +#include "xfa/fxfa/parser/cxfa_node.h" + +CXFA_FontData::CXFA_FontData(CXFA_Node* pNode) : CXFA_Data(pNode) {} + +float CXFA_FontData::GetBaselineShift() { + return m_pNode->JSNode() + ->GetMeasure(XFA_ATTRIBUTE_BaselineShift) + .ToUnit(XFA_UNIT_Pt); +} + +float CXFA_FontData::GetHorizontalScale() { + WideString wsValue; + m_pNode->JSNode()->TryCData(XFA_ATTRIBUTE_FontHorizontalScale, wsValue, true); + int32_t iScale = FXSYS_wtoi(wsValue.c_str()); + return iScale > 0 ? (float)iScale : 100.0f; +} + +float CXFA_FontData::GetVerticalScale() { + WideString wsValue; + m_pNode->JSNode()->TryCData(XFA_ATTRIBUTE_FontVerticalScale, wsValue, true); + int32_t iScale = FXSYS_wtoi(wsValue.c_str()); + return iScale > 0 ? (float)iScale : 100.0f; +} + +float CXFA_FontData::GetLetterSpacing() { + WideStringView wsValue; + if (!m_pNode->JSNode()->TryCData(XFA_ATTRIBUTE_LetterSpacing, wsValue, true)) + return 0; + + CXFA_Measurement ms(wsValue); + if (ms.GetUnit() == XFA_UNIT_Em) + return ms.GetValue() * GetFontSize(); + return ms.ToUnit(XFA_UNIT_Pt); +} + +int32_t CXFA_FontData::GetLineThrough() { + int32_t iValue = 0; + m_pNode->JSNode()->TryInteger(XFA_ATTRIBUTE_LineThrough, iValue, true); + return iValue; +} + +int32_t CXFA_FontData::GetUnderline() { + int32_t iValue = 0; + m_pNode->JSNode()->TryInteger(XFA_ATTRIBUTE_Underline, iValue, true); + return iValue; +} + +int32_t CXFA_FontData::GetUnderlinePeriod() { + XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_All; + m_pNode->JSNode()->TryEnum(XFA_ATTRIBUTE_UnderlinePeriod, eAttr, true); + return eAttr; +} + +float CXFA_FontData::GetFontSize() { + CXFA_Measurement ms; + m_pNode->JSNode()->TryMeasure(XFA_ATTRIBUTE_Size, ms, true); + return ms.ToUnit(XFA_UNIT_Pt); +} + +void CXFA_FontData::GetTypeface(WideStringView& wsTypeFace) { + m_pNode->JSNode()->TryCData(XFA_ATTRIBUTE_Typeface, wsTypeFace, true); +} + +bool CXFA_FontData::IsBold() { + XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Normal; + m_pNode->JSNode()->TryEnum(XFA_ATTRIBUTE_Weight, eAttr, true); + return eAttr == XFA_ATTRIBUTEENUM_Bold; +} + +bool CXFA_FontData::IsItalic() { + XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Normal; + m_pNode->JSNode()->TryEnum(XFA_ATTRIBUTE_Posture, eAttr, true); + return eAttr == XFA_ATTRIBUTEENUM_Italic; +} + +void CXFA_FontData::SetColor(FX_ARGB color) { + CXFA_FillData(m_pNode->JSNode()->GetProperty(0, XFA_Element::Fill, true)) + .SetColor(color); +} + +FX_ARGB CXFA_FontData::GetColor() { + CXFA_FillData fillData(m_pNode->GetChild(0, XFA_Element::Fill, false)); + return fillData ? fillData.GetColor(true) : 0xFF000000; +} diff --git a/xfa/fxfa/parser/cxfa_fontdata.h b/xfa/fxfa/parser/cxfa_fontdata.h new file mode 100644 index 0000000000..cb2dd6068f --- /dev/null +++ b/xfa/fxfa/parser/cxfa_fontdata.h @@ -0,0 +1,36 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef XFA_FXFA_PARSER_CXFA_FONTDATA_H_ +#define XFA_FXFA_PARSER_CXFA_FONTDATA_H_ + +#include "core/fxge/fx_dib.h" +#include "xfa/fxfa/parser/cxfa_data.h" + +class CXFA_Node; + +class CXFA_FontData : public CXFA_Data { + public: + explicit CXFA_FontData(CXFA_Node* pNode); + + float GetBaselineShift(); + float GetHorizontalScale(); + float GetVerticalScale(); + float GetLetterSpacing(); + int32_t GetLineThrough(); + int32_t GetUnderline(); + int32_t GetUnderlinePeriod(); + float GetFontSize(); + void GetTypeface(WideStringView& wsTypeFace); + + bool IsBold(); + bool IsItalic(); + + FX_ARGB GetColor(); + void SetColor(FX_ARGB color); +}; + +#endif // XFA_FXFA_PARSER_CXFA_FONTDATA_H_ diff --git a/xfa/fxfa/parser/cxfa_widgetdata.cpp b/xfa/fxfa/parser/cxfa_widgetdata.cpp index 362f0b5e54..305ead26d9 100644 --- a/xfa/fxfa/parser/cxfa_widgetdata.cpp +++ b/xfa/fxfa/parser/cxfa_widgetdata.cpp @@ -289,8 +289,8 @@ CXFA_CaptionData CXFA_WidgetData::GetCaptionData() { m_pNode->JSNode()->GetProperty(0, XFA_Element::Caption, false)); } -CXFA_Font CXFA_WidgetData::GetFont(bool bModified) { - return CXFA_Font( +CXFA_FontData CXFA_WidgetData::GetFontData(bool bModified) { + return CXFA_FontData( m_pNode->JSNode()->GetProperty(0, XFA_Element::Font, bModified)); } diff --git a/xfa/fxfa/parser/cxfa_widgetdata.h b/xfa/fxfa/parser/cxfa_widgetdata.h index 92fc4484b2..b2cb214ccc 100644 --- a/xfa/fxfa/parser/cxfa_widgetdata.h +++ b/xfa/fxfa/parser/cxfa_widgetdata.h @@ -18,7 +18,7 @@ #include "xfa/fxfa/parser/cxfa_calculatedata.h" #include "xfa/fxfa/parser/cxfa_captiondata.h" #include "xfa/fxfa/parser/cxfa_data.h" -#include "xfa/fxfa/parser/cxfa_font.h" +#include "xfa/fxfa/parser/cxfa_fontdata.h" #include "xfa/fxfa/parser/cxfa_margin.h" #include "xfa/fxfa/parser/cxfa_para.h" #include "xfa/fxfa/parser/cxfa_validate.h" @@ -52,7 +52,7 @@ class CXFA_WidgetData : public CXFA_Data { CXFA_AssistData GetAssistData(); CXFA_BorderData GetBorderData(bool bModified); CXFA_CaptionData GetCaptionData(); - CXFA_Font GetFont(bool bModified); + CXFA_FontData GetFontData(bool bModified); CXFA_Margin GetMargin(); CXFA_Para GetPara(); std::vector GetEventList(); -- cgit v1.2.3