diff options
Diffstat (limited to 'xfa/fde/css/cfde_csscomputedstyle.cpp')
-rw-r--r-- | xfa/fde/css/cfde_csscomputedstyle.cpp | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/xfa/fde/css/cfde_csscomputedstyle.cpp b/xfa/fde/css/cfde_csscomputedstyle.cpp new file mode 100644 index 0000000000..010f573c04 --- /dev/null +++ b/xfa/fde/css/cfde_csscomputedstyle.cpp @@ -0,0 +1,204 @@ +// Copyright 2017 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/fde/css/cfde_csscomputedstyle.h" + +#include "third_party/base/stl_util.h" +#include "xfa/fde/css/cfde_cssstringvalue.h" +#include "xfa/fde/css/cfde_cssvaluelist.h" + +CFDE_CSSComputedStyle::CFDE_CSSComputedStyle() : m_dwRefCount(1) {} + +CFDE_CSSComputedStyle::~CFDE_CSSComputedStyle() {} + +uint32_t CFDE_CSSComputedStyle::Retain() { + return ++m_dwRefCount; +} + +uint32_t CFDE_CSSComputedStyle::Release() { + uint32_t dwRefCount = --m_dwRefCount; + if (dwRefCount == 0) + delete this; + return dwRefCount; +} + +bool CFDE_CSSComputedStyle::GetCustomStyle(const CFX_WideStringC& wsName, + CFX_WideString& wsValue) const { + for (int32_t i = pdfium::CollectionSize<int32_t>(m_CustomProperties) - 2; + i > -1; i -= 2) { + if (wsName == m_CustomProperties[i]) { + wsValue = m_CustomProperties[i + 1]; + return true; + } + } + return false; +} + +int32_t CFDE_CSSComputedStyle::CountFontFamilies() const { + return m_InheritedData.m_pFontFamily + ? m_InheritedData.m_pFontFamily->CountValues() + : 0; +} + +const CFX_WideString CFDE_CSSComputedStyle::GetFontFamily(int32_t index) const { + return static_cast<CFDE_CSSStringValue*>( + m_InheritedData.m_pFontFamily->GetValue(index)) + ->Value(); +} + +uint16_t CFDE_CSSComputedStyle::GetFontWeight() const { + return m_InheritedData.m_wFontWeight; +} + +FDE_CSSFontVariant CFDE_CSSComputedStyle::GetFontVariant() const { + return m_InheritedData.m_eFontVariant; +} + +FDE_CSSFontStyle CFDE_CSSComputedStyle::GetFontStyle() const { + return m_InheritedData.m_eFontStyle; +} + +FX_FLOAT CFDE_CSSComputedStyle::GetFontSize() const { + return m_InheritedData.m_fFontSize; +} + +FX_ARGB CFDE_CSSComputedStyle::GetColor() const { + return m_InheritedData.m_dwFontColor; +} + +void CFDE_CSSComputedStyle::SetFontWeight(uint16_t wFontWeight) { + m_InheritedData.m_wFontWeight = wFontWeight; +} + +void CFDE_CSSComputedStyle::SetFontVariant(FDE_CSSFontVariant eFontVariant) { + m_InheritedData.m_eFontVariant = eFontVariant; +} + +void CFDE_CSSComputedStyle::SetFontStyle(FDE_CSSFontStyle eFontStyle) { + m_InheritedData.m_eFontStyle = eFontStyle; +} + +void CFDE_CSSComputedStyle::SetFontSize(FX_FLOAT fFontSize) { + m_InheritedData.m_fFontSize = fFontSize; +} + +void CFDE_CSSComputedStyle::SetColor(FX_ARGB dwFontColor) { + m_InheritedData.m_dwFontColor = dwFontColor; +} + +const FDE_CSSRect* CFDE_CSSComputedStyle::GetBorderWidth() const { + return m_NonInheritedData.m_bHasBorder ? &(m_NonInheritedData.m_BorderWidth) + : nullptr; +} + +const FDE_CSSRect* CFDE_CSSComputedStyle::GetMarginWidth() const { + return m_NonInheritedData.m_bHasMargin ? &(m_NonInheritedData.m_MarginWidth) + : nullptr; +} + +const FDE_CSSRect* CFDE_CSSComputedStyle::GetPaddingWidth() const { + return m_NonInheritedData.m_bHasPadding ? &(m_NonInheritedData.m_PaddingWidth) + : nullptr; +} + +void CFDE_CSSComputedStyle::SetMarginWidth(const FDE_CSSRect& rect) { + m_NonInheritedData.m_MarginWidth = rect; + m_NonInheritedData.m_bHasMargin = true; +} + +void CFDE_CSSComputedStyle::SetPaddingWidth(const FDE_CSSRect& rect) { + m_NonInheritedData.m_PaddingWidth = rect; + m_NonInheritedData.m_bHasPadding = true; +} + +FDE_CSSDisplay CFDE_CSSComputedStyle::GetDisplay() const { + return m_NonInheritedData.m_eDisplay; +} + +FX_FLOAT CFDE_CSSComputedStyle::GetLineHeight() const { + return m_InheritedData.m_fLineHeight; +} + +const FDE_CSSLength& CFDE_CSSComputedStyle::GetTextIndent() const { + return m_InheritedData.m_TextIndent; +} + +FDE_CSSTextAlign CFDE_CSSComputedStyle::GetTextAlign() const { + return m_InheritedData.m_eTextAlign; +} + +FDE_CSSVerticalAlign CFDE_CSSComputedStyle::GetVerticalAlign() const { + return m_NonInheritedData.m_eVerticalAlign; +} + +FX_FLOAT CFDE_CSSComputedStyle::GetNumberVerticalAlign() const { + return m_NonInheritedData.m_fVerticalAlign; +} + +uint32_t CFDE_CSSComputedStyle::GetTextDecoration() const { + return m_NonInheritedData.m_dwTextDecoration; +} + +const FDE_CSSLength& CFDE_CSSComputedStyle::GetLetterSpacing() const { + return m_InheritedData.m_LetterSpacing; +} + +void CFDE_CSSComputedStyle::SetLineHeight(FX_FLOAT fLineHeight) { + m_InheritedData.m_fLineHeight = fLineHeight; +} + +void CFDE_CSSComputedStyle::SetTextIndent(const FDE_CSSLength& textIndent) { + m_InheritedData.m_TextIndent = textIndent; +} + +void CFDE_CSSComputedStyle::SetTextAlign(FDE_CSSTextAlign eTextAlign) { + m_InheritedData.m_eTextAlign = eTextAlign; +} + +void CFDE_CSSComputedStyle::SetNumberVerticalAlign(FX_FLOAT fAlign) { + m_NonInheritedData.m_eVerticalAlign = FDE_CSSVerticalAlign::Number, + m_NonInheritedData.m_fVerticalAlign = fAlign; +} + +void CFDE_CSSComputedStyle::SetTextDecoration(uint32_t dwTextDecoration) { + m_NonInheritedData.m_dwTextDecoration = dwTextDecoration; +} + +void CFDE_CSSComputedStyle::SetLetterSpacing( + const FDE_CSSLength& letterSpacing) { + m_InheritedData.m_LetterSpacing = letterSpacing; +} + +void CFDE_CSSComputedStyle::AddCustomStyle(const CFX_WideString& wsName, + const CFX_WideString& wsValue) { + m_CustomProperties.push_back(wsName); + m_CustomProperties.push_back(wsValue); +} + +CFDE_CSSComputedStyle::InheritedData::InheritedData() + : m_LetterSpacing(FDE_CSSLengthUnit::Normal), + m_WordSpacing(FDE_CSSLengthUnit::Normal), + m_TextIndent(FDE_CSSLengthUnit::Point, 0), + m_pFontFamily(nullptr), + m_fFontSize(12.0f), + m_fLineHeight(14.0f), + m_dwFontColor(0xFF000000), + m_wFontWeight(400), + m_eFontVariant(FDE_CSSFontVariant::Normal), + m_eFontStyle(FDE_CSSFontStyle::Normal), + m_eTextAlign(FDE_CSSTextAlign::Left) {} + +CFDE_CSSComputedStyle::NonInheritedData::NonInheritedData() + : m_MarginWidth(FDE_CSSLengthUnit::Point, 0), + m_BorderWidth(FDE_CSSLengthUnit::Point, 0), + m_PaddingWidth(FDE_CSSLengthUnit::Point, 0), + m_fVerticalAlign(0.0f), + m_eDisplay(FDE_CSSDisplay::Inline), + m_eVerticalAlign(FDE_CSSVerticalAlign::Baseline), + m_dwTextDecoration(0), + m_bHasMargin(false), + m_bHasBorder(false), + m_bHasPadding(false) {} |