summaryrefslogtreecommitdiff
path: root/xfa/fde/css/fde_cssstyleselector.h
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fde/css/fde_cssstyleselector.h')
-rw-r--r--xfa/fde/css/fde_cssstyleselector.h231
1 files changed, 39 insertions, 192 deletions
diff --git a/xfa/fde/css/fde_cssstyleselector.h b/xfa/fde/css/fde_cssstyleselector.h
index 13ed58910b..b20cdec8af 100644
--- a/xfa/fde/css/fde_cssstyleselector.h
+++ b/xfa/fde/css/fde_cssstyleselector.h
@@ -37,7 +37,7 @@ class CFDE_CSSRuleCollection {
CFDE_CSSRuleCollection();
~CFDE_CSSRuleCollection();
- void AddRulesFrom(const CFDE_CSSStyleSheetArray& sheets,
+ void AddRulesFrom(const CFX_ArrayTemplate<IFDE_CSSStyleSheet*>& sheets,
uint32_t dwMediaList,
CFGAS_FontMgr* pFontMgr);
void Clear();
@@ -89,18 +89,18 @@ class CFDE_CSSStyleSelector {
void SetDefFontSize(FX_FLOAT fFontSize);
- bool SetStyleSheet(FDE_CSSSTYLESHEETGROUP eType, IFDE_CSSStyleSheet* pSheet);
- bool SetStyleSheets(FDE_CSSSTYLESHEETGROUP eType,
- const CFDE_CSSStyleSheetArray* pArray);
- void SetStylePriority(FDE_CSSSTYLESHEETGROUP eType,
- FDE_CSSSTYLESHEETPRIORITY ePriority);
+ bool SetStyleSheet(FDE_CSSStyleSheetGroup eType, IFDE_CSSStyleSheet* pSheet);
+ bool SetStyleSheets(FDE_CSSStyleSheetGroup eType,
+ const CFX_ArrayTemplate<IFDE_CSSStyleSheet*>* pArray);
+ void SetStylePriority(FDE_CSSStyleSheetGroup eType,
+ FDE_CSSStyleSheetPriority ePriority);
void UpdateStyleIndex(uint32_t dwMediaList);
CFDE_CSSAccelerator* InitAccelerator();
IFDE_CSSComputedStyle* CreateComputedStyle(
IFDE_CSSComputedStyle* pParentStyle);
int32_t MatchDeclarations(CXFA_CSSTagProvider* pTag,
CFDE_CSSDeclarationArray& matchedDecls,
- FDE_CSSPSEUDO ePseudoType = FDE_CSSPSEUDO_NONE);
+ FDE_CSSPseudo ePseudoType = FDE_CSSPseudo::NONE);
void ComputeStyle(CXFA_CSSTagProvider* pTag,
const CFDE_CSSDeclaration** ppDeclArray,
int32_t iDeclCount,
@@ -110,10 +110,10 @@ class CFDE_CSSStyleSelector {
void Reset();
void MatchRules(FDE_CSSTagCache* pCache,
FDE_CSSRuleData* pList,
- FDE_CSSPSEUDO ePseudoType);
+ FDE_CSSPseudo ePseudoType);
bool MatchSelector(FDE_CSSTagCache* pCache,
CFDE_CSSSelector* pSel,
- FDE_CSSPSEUDO ePseudoType);
+ FDE_CSSPseudo ePseudoType);
void AppendInlineStyle(CFDE_CSSDeclaration* pDecl,
const FX_WCHAR* psz,
int32_t iLen);
@@ -121,222 +121,70 @@ class CFDE_CSSStyleSelector {
const CFDE_CSSDeclaration** ppDeclArray,
int32_t iDeclCount,
IFDE_CSSComputedStyle* pDestStyle);
- void ApplyProperty(FDE_CSSPROPERTY eProperty,
+ void ApplyProperty(FDE_CSSProperty eProperty,
IFDE_CSSValue* pValue,
CFDE_CSSComputedStyle* pComputedStyle);
- FX_FLOAT ApplyNumber(FDE_CSSPRIMITIVETYPE eUnit,
+ FX_FLOAT ApplyNumber(FDE_CSSPrimitiveType eUnit,
FX_FLOAT fValue,
FX_FLOAT fPercentBase);
bool SetLengthWithPercent(FDE_CSSLENGTH& width,
- FDE_CSSPRIMITIVETYPE eType,
+ FDE_CSSPrimitiveType eType,
IFDE_CSSPrimitiveValue* pPrimitive,
FX_FLOAT fFontSize);
- FX_FLOAT ToFontSize(FDE_CSSPROPERTYVALUE eValue, FX_FLOAT fCurFontSize);
- FDE_CSSDISPLAY ToDisplay(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSTEXTALIGN ToTextAlign(FDE_CSSPROPERTYVALUE eValue);
- uint16_t ToFontWeight(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSFONTSTYLE ToFontStyle(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSBORDERSTYLE ToBorderStyle(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSVERTICALALIGN ToVerticalAlign(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSLISTSTYLETYPE ToListStyleType(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSLISTSTYLEPOSITION ToListStylePosition(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSVISIBILITY ToVisibility(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSWHITESPACE ToWhiteSpace(FDE_CSSPROPERTYVALUE eValue);
+ FX_FLOAT ToFontSize(FDE_CSSPropertyValue eValue, FX_FLOAT fCurFontSize);
+ FDE_CSSDisplay ToDisplay(FDE_CSSPropertyValue eValue);
+ FDE_CSSTextAlign ToTextAlign(FDE_CSSPropertyValue eValue);
+ uint16_t ToFontWeight(FDE_CSSPropertyValue eValue);
+ FDE_CSSFontStyle ToFontStyle(FDE_CSSPropertyValue eValue);
+ FDE_CSSVerticalAlign ToVerticalAlign(FDE_CSSPropertyValue eValue);
uint32_t ToTextDecoration(IFDE_CSSValueList* pList);
- FDE_CSSTEXTTRANSFORM ToTextTransform(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSFONTVARIANT ToFontVariant(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSFLOAT ToFloat(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSCLEAR ToClear(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSWRITINGMODE ToWritingMode(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSWORDBREAK ToWordBreak(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSPAGEBREAK ToPageBreak(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSOVERFLOW ToOverflow(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSLINEBREAK ToLineBreak(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSTEXTCOMBINE ToTextCombine(FDE_CSSPROPERTYVALUE eValue);
- bool ToTextEmphasisMark(FDE_CSSPROPERTYVALUE eValue,
- FDE_CSSTEXTEMPHASISMARK& eMark);
- bool ToTextEmphasisFill(FDE_CSSPROPERTYVALUE eValue,
- FDE_CSSTEXTEMPHASISFILL& eFill);
- FDE_CSSCURSOR ToCursor(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSPOSITION ToPosition(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSCAPTIONSIDE ToCaptionSide(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSBKGREPEAT ToBKGRepeat(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSBKGATTACHMENT ToBKGAttachment(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSRUBYALIGN ToRubyAlign(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSRUBYOVERHANG ToRubyOverhang(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSRUBYPOSITION ToRubyPosition(FDE_CSSPROPERTYVALUE eValue);
- FDE_CSSRUBYSPAN ToRubySpan(FDE_CSSPROPERTYVALUE eValue);
+ FDE_CSSFontVariant ToFontVariant(FDE_CSSPropertyValue eValue);
CFGAS_FontMgr* const m_pFontMgr;
FX_FLOAT m_fDefFontSize;
- CFDE_CSSStyleSheetArray m_SheetGroups[FDE_CSSSTYLESHEETGROUP_MAX];
- CFDE_CSSRuleCollection m_RuleCollection[FDE_CSSSTYLESHEETGROUP_MAX];
- FDE_CSSSTYLESHEETGROUP m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_MAX];
+ CFX_ArrayTemplate<IFDE_CSSStyleSheet*> m_SheetGroups[3];
+ CFDE_CSSRuleCollection m_RuleCollection[3];
+ FDE_CSSStyleSheetGroup m_ePriorities[3];
std::unique_ptr<CFDE_CSSAccelerator> m_pAccelerator;
std::vector<FDE_CSSRuleData*> m_MatchedRules;
};
-struct FDE_CSSCOUNTERDATA {
- public:
- FDE_CSSCOUNTERDATA() { FXSYS_memset(this, 0, sizeof(FDE_CSSCOUNTERDATA)); }
- bool GetCounterIncrement(int32_t& iValue) {
- iValue = m_iIncVal;
- return m_bIncrement;
- }
- bool GetCounterReset(int32_t& iValue) {
- iValue = m_iResetVal;
- return m_bReset;
- }
-
- const FX_WCHAR* m_pszIdent;
- bool m_bIncrement;
- bool m_bReset;
- int32_t m_iIncVal;
- int32_t m_iResetVal;
-};
-
-class CFDE_CSSCounterStyle {
- public:
- CFDE_CSSCounterStyle();
- ~CFDE_CSSCounterStyle();
-
- void SetCounterIncrementList(IFDE_CSSValueList* pList) {
- m_pCounterInc = pList;
- m_bIndexDirty = true;
- }
- void SetCounterResetList(IFDE_CSSValueList* pList) {
- m_pCounterReset = pList;
- m_bIndexDirty = true;
- }
- int32_t CountCounters() {
- UpdateIndex();
- return m_arrCounterData.GetSize();
- }
- bool GetCounterIncrement(int32_t index, int32_t& iValue) {
- UpdateIndex();
- return m_arrCounterData.ElementAt(index).GetCounterIncrement(iValue);
- }
- bool GetCounterReset(int32_t index, int32_t& iValue) {
- UpdateIndex();
- return m_arrCounterData.ElementAt(index).GetCounterReset(iValue);
- }
- const FX_WCHAR* GetCounterIdentifier(int32_t index) {
- UpdateIndex();
- return m_arrCounterData.ElementAt(index).m_pszIdent;
- }
-
- protected:
- void UpdateIndex();
- void DoUpdateIndex(IFDE_CSSValueList* pList);
- int32_t FindIndex(const FX_WCHAR* pszIdentifier);
-
- IFDE_CSSValueList* m_pCounterInc;
- IFDE_CSSValueList* m_pCounterReset;
- CFX_ArrayTemplate<FDE_CSSCOUNTERDATA> m_arrCounterData;
- bool m_bIndexDirty;
-};
-
class CFDE_CSSInheritedData {
public:
CFDE_CSSInheritedData();
- void Reset();
-
- const FX_WCHAR* m_pszListStyleImage;
FDE_CSSLENGTH m_LetterSpacing;
FDE_CSSLENGTH m_WordSpacing;
FDE_CSSLENGTH m_TextIndent;
IFDE_CSSValueList* m_pFontFamily;
- IFDE_CSSValueList* m_pQuotes;
- IFDE_CSSValueList* m_pCursorUris;
- FDE_CSSCURSOR m_eCursor;
FX_FLOAT m_fFontSize;
FX_FLOAT m_fLineHeight;
FX_ARGB m_dwFontColor;
- FX_ARGB m_dwTextEmphasisColor;
uint16_t m_wFontWeight;
- int32_t m_iWidows;
- int32_t m_iOrphans;
- const FX_WCHAR* m_pszTextEmphasisCustomMark;
- uint32_t m_eFontVariant : 1;
- uint32_t m_eFontStyle : 1;
- uint32_t m_bTextEmphasisColorCurrent : 1;
- uint32_t m_eTextAligh : 2;
- uint32_t m_eVisibility : 2;
- uint32_t m_eWhiteSpace : 3;
- uint32_t m_eTextTransform : 2;
- uint32_t m_eWritingMode : 2;
- uint32_t m_eWordBreak : 2;
- uint32_t m_eLineBreak : 2;
- uint32_t m_eTextEmphasisFill : 1;
- uint32_t m_eTextEmphasisMark : 3;
- uint32_t m_eCaptionSide : 3;
- uint8_t m_eRubyAlign : 4;
- uint8_t m_eRubyOverhang : 2;
- uint8_t m_eRubyPosition : 2;
+ FDE_CSSFontVariant m_eFontVariant;
+ FDE_CSSFontStyle m_eFontStyle;
+ FDE_CSSTextAlign m_eTextAlign;
};
class CFDE_CSSNonInheritedData {
public:
CFDE_CSSNonInheritedData();
- void Reset();
-
- IFDE_CSSValueList* m_pContentList;
- CFDE_CSSCounterStyle* m_pCounterStyle;
FDE_CSSRECT m_MarginWidth;
FDE_CSSRECT m_BorderWidth;
FDE_CSSRECT m_PaddingWidth;
- FDE_CSSSIZE m_BoxSize;
- FDE_CSSSIZE m_MinBoxSize;
- FDE_CSSSIZE m_MaxBoxSize;
- FDE_CSSPOINT m_BKGPosition;
- const FX_WCHAR* m_pszBKGImage;
- FX_ARGB m_dwBKGColor;
- FX_ARGB m_dwBDRLeftColor;
- FX_ARGB m_dwBDRTopColor;
- FX_ARGB m_dwBDRRightColor;
- FX_ARGB m_dwBDRBottomColor;
- IFDE_CSSValue* m_pRubySpan;
- FDE_CSSLENGTH m_ColumnCount;
- FDE_CSSLENGTH m_ColumnGap;
- FDE_CSSLENGTH m_ColumnRuleWidth;
- FDE_CSSLENGTH m_ColumnWidth;
- FX_ARGB m_dwColumnRuleColor;
FDE_CSSLENGTH m_Top;
FDE_CSSLENGTH m_Bottom;
FDE_CSSLENGTH m_Left;
FDE_CSSLENGTH m_Right;
-
FX_FLOAT m_fVerticalAlign;
- FX_FLOAT m_fTextCombineNumber;
- uint32_t m_eBDRLeftStyle : 4;
- uint32_t m_eBDRTopStyle : 4;
- uint32_t m_eBDRRightStyle : 4;
- uint32_t m_eBDRBottomStyle : 4;
- uint32_t m_eDisplay : 5;
- uint32_t m_eVerticalAlign : 4;
- uint32_t m_eListStyleType : 5;
- uint32_t m_eColumnRuleStyle : 4;
- uint32_t m_ePageBreakInside : 3;
- uint32_t m_ePageBreakAfter : 3;
- uint32_t m_ePageBreakBefore : 3;
- uint32_t m_ePosition : 2;
- uint32_t m_eBKGRepeat : 2;
- uint32_t m_eFloat : 2;
- uint32_t m_eClear : 2;
- uint32_t m_eOverflowX : 3;
- uint32_t m_eOverflowY : 3;
- uint32_t m_eListStylePosition : 1;
- uint32_t m_eBKGAttachment : 1;
- uint32_t m_bHasMargin : 1;
- uint32_t m_bHasBorder : 1;
- uint32_t m_bHasPadding : 1;
- uint32_t m_dwTextDecoration : 5;
- uint32_t m_eTextCombine : 1;
- uint32_t m_bColumnRuleColorSame : 1;
- uint32_t m_bHasTextCombineNumber : 1;
+ FDE_CSSDisplay m_eDisplay;
+ FDE_CSSVerticalAlign m_eVerticalAlign;
+ uint8_t m_dwTextDecoration;
+ bool m_bHasMargin;
+ bool m_bHasBorder;
+ bool m_bHasPadding;
};
class CFDE_CSSComputedStyle : public IFDE_CSSComputedStyle,
@@ -353,7 +201,6 @@ class CFDE_CSSComputedStyle : public IFDE_CSSComputedStyle,
uint32_t Release() override;
// IFDE_CSSComputedStyle
- void Reset() override;
IFDE_CSSFontStyle* GetFontStyles() override;
IFDE_CSSBoundaryStyle* GetBoundaryStyles() override;
IFDE_CSSPositionStyle* GetPositionStyles() override;
@@ -365,13 +212,13 @@ class CFDE_CSSComputedStyle : public IFDE_CSSComputedStyle,
int32_t CountFontFamilies() const override;
const FX_WCHAR* GetFontFamily(int32_t index) const override;
uint16_t GetFontWeight() const override;
- FDE_CSSFONTVARIANT GetFontVariant() const override;
- FDE_CSSFONTSTYLE GetFontStyle() const override;
+ FDE_CSSFontVariant GetFontVariant() const override;
+ FDE_CSSFontStyle GetFontStyle() const override;
FX_FLOAT GetFontSize() const override;
FX_ARGB GetColor() const override;
void SetFontWeight(uint16_t wFontWeight) override;
- void SetFontVariant(FDE_CSSFONTVARIANT eFontVariant) override;
- void SetFontStyle(FDE_CSSFONTSTYLE eFontStyle) override;
+ void SetFontVariant(FDE_CSSFontVariant eFontVariant) override;
+ void SetFontStyle(FDE_CSSFontStyle eFontStyle) override;
void SetFontSize(FX_FLOAT fFontSize) override;
void SetColor(FX_ARGB dwFontColor) override;
@@ -383,19 +230,19 @@ class CFDE_CSSComputedStyle : public IFDE_CSSComputedStyle,
void SetPaddingWidth(const FDE_CSSRECT& rect) override;
// IFDE_CSSPositionStyle:
- FDE_CSSDISPLAY GetDisplay() const override;
+ FDE_CSSDisplay GetDisplay() const override;
// IFDE_CSSParagraphStyle:
FX_FLOAT GetLineHeight() const override;
const FDE_CSSLENGTH& GetTextIndent() const override;
- FDE_CSSTEXTALIGN GetTextAlign() const override;
- FDE_CSSVERTICALALIGN GetVerticalAlign() const override;
+ FDE_CSSTextAlign GetTextAlign() const override;
+ FDE_CSSVerticalAlign GetVerticalAlign() const override;
FX_FLOAT GetNumberVerticalAlign() const override;
uint32_t GetTextDecoration() const override;
const FDE_CSSLENGTH& GetLetterSpacing() const override;
void SetLineHeight(FX_FLOAT fLineHeight) override;
void SetTextIndent(const FDE_CSSLENGTH& textIndent) override;
- void SetTextAlign(FDE_CSSTEXTALIGN eTextAlign) override;
+ void SetTextAlign(FDE_CSSTextAlign eTextAlign) override;
void SetNumberVerticalAlign(FX_FLOAT fAlign) override;
void SetTextDecoration(uint32_t dwTextDecoration) override;
void SetLetterSpacing(const FDE_CSSLENGTH& letterSpacing) override;