Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fdp / src / css / fde_cssstyleselector.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FDE_CSSSTYLESELECTOR\r
8 #define _FDE_CSSSTYLESELECTOR\r
9 #define FDE_CSSUNIVERSALHASH            ('*')\r
10 typedef struct _FDE_CSSRULEDATA : public CFX_Target {\r
11 public:\r
12     _FDE_CSSRULEDATA(IFDE_CSSSelector *pSel, IFDE_CSSDeclaration *pDecl, FX_DWORD dwPos);\r
13     IFDE_CSSSelector                            *pSelector;\r
14     IFDE_CSSDeclaration                         *pDeclaration;\r
15     FX_DWORD                                            dwPriority;\r
16     _FDE_CSSRULEDATA                            *pNext;\r
17 } FDE_CSSRULEDATA, * FDE_LPCSSRULEDATA;\r
18 typedef CFX_ArrayTemplate<FDE_LPCSSRULEDATA> CFDE_CSSRuleDataArray;\r
19 class CFDE_CSSRuleCollection : public CFX_Target\r
20 {\r
21 public:\r
22     CFDE_CSSRuleCollection() : m_pStaticStore(NULL), m_pUniversalRules(NULL) , m_iSelectors(0), m_pPersudoRules(NULL) { }\r
23     ~CFDE_CSSRuleCollection()\r
24     {\r
25         Clear();\r
26     }\r
27     void                                                        AddRulesFrom(const CFDE_CSSStyleSheetArray &sheets, FX_DWORD dwMediaList, IFX_FontMgr *pFontMgr);\r
28     void                                                        Clear();\r
29 \r
30     int32_t                                             CountSelectors() const\r
31     {\r
32         return m_iSelectors;\r
33     }\r
34     FDE_LPCSSRULEDATA                           GetIDRuleData(FX_DWORD dwIDHash)\r
35     {\r
36         FX_LPVOID pData;\r
37         return m_IDRules.Lookup((FX_LPVOID)(uintptr_t)dwIDHash, pData) ? (FDE_LPCSSRULEDATA)pData : NULL;\r
38     }\r
39     FDE_LPCSSRULEDATA                           GetTagRuleData(FX_DWORD dwTagHasn)\r
40     {\r
41         FX_LPVOID pData;\r
42         return m_TagRules.Lookup((FX_LPVOID)(uintptr_t)dwTagHasn, pData) ? (FDE_LPCSSRULEDATA)pData : NULL;\r
43     }\r
44     FDE_LPCSSRULEDATA                           GetClassRuleData(FX_DWORD dwIDHash)\r
45     {\r
46         FX_LPVOID pData;\r
47         return m_ClassRules.Lookup((FX_LPVOID)(uintptr_t)dwIDHash, pData) ? (FDE_LPCSSRULEDATA)pData : NULL;\r
48     }\r
49     FDE_LPCSSRULEDATA                           GetUniversalRuleData()\r
50     {\r
51         return m_pUniversalRules;\r
52     }\r
53     FDE_LPCSSRULEDATA                           GetPersudoRuleData()\r
54     {\r
55         return m_pPersudoRules;\r
56     }\r
57     IFX_MEMAllocator                            *m_pStaticStore;\r
58 protected:\r
59     void                                                        AddRulesFrom(IFDE_CSSStyleSheet *pStyleSheet, IFDE_CSSRule *pRule, FX_DWORD dwMediaList, IFX_FontMgr *pFontMgr);\r
60     void                                                        AddRuleTo(CFX_MapPtrToPtr &map, FX_DWORD dwKey, IFDE_CSSSelector *pSel, IFDE_CSSDeclaration *pDecl);\r
61     FX_BOOL                                                     AddRuleTo(FDE_LPCSSRULEDATA &pList, FDE_LPCSSRULEDATA pData);\r
62     FDE_LPCSSRULEDATA                           NewRuleData(IFDE_CSSSelector *pSel, IFDE_CSSDeclaration *pDecl);\r
63     CFX_MapPtrToPtr                                     m_IDRules;\r
64     CFX_MapPtrToPtr                                     m_TagRules;\r
65     CFX_MapPtrToPtr                                     m_ClassRules;\r
66     FDE_LPCSSRULEDATA                           m_pUniversalRules;\r
67     FDE_LPCSSRULEDATA                           m_pPersudoRules;\r
68     int32_t                                             m_iSelectors;\r
69 };\r
70 class CFDE_CSSAccelerator;\r
71 class CFDE_CSSComputedStyle;\r
72 class CFDE_CSSStyleSelector : public IFDE_CSSStyleSelector, public CFX_Target\r
73 {\r
74 public:\r
75     CFDE_CSSStyleSelector();\r
76     ~CFDE_CSSStyleSelector();\r
77     virtual void                                        Release()\r
78     {\r
79         FDE_Delete this;\r
80     }\r
81 \r
82     virtual void                                        SetFontMgr(IFX_FontMgr *pFontMgr);\r
83     virtual void                                        SetDefFontSize(FX_FLOAT fFontSize);\r
84 \r
85     virtual FX_BOOL                                     SetStyleSheet(FDE_CSSSTYLESHEETGROUP eType, IFDE_CSSStyleSheet *pSheet);\r
86     virtual FX_BOOL                                     SetStyleSheets(FDE_CSSSTYLESHEETGROUP eType, const CFDE_CSSStyleSheetArray *pArray);\r
87     virtual void                                        SetStylePriority(FDE_CSSSTYLESHEETGROUP eType, FDE_CSSSTYLESHEETPRIORITY ePriority);\r
88     virtual void                                        UpdateStyleIndex(FX_DWORD dwMediaList);\r
89     virtual IFDE_CSSAccelerator*        InitAccelerator();\r
90     virtual IFDE_CSSComputedStyle*      CreateComputedStyle(IFDE_CSSComputedStyle *pParentStyle);\r
91     virtual int32_t                             MatchDeclarations(IFDE_CSSTagProvider *pTag, CFDE_CSSDeclarationArray &matchedDecls, FDE_CSSPERSUDO ePersudoType = FDE_CSSPERSUDO_NONE);\r
92     virtual void                                        ComputeStyle(IFDE_CSSTagProvider *pTag, const IFDE_CSSDeclaration **ppDeclArray, int32_t iDeclCount, IFDE_CSSComputedStyle *pDestStyle);\r
93 protected:\r
94     void                                                        Reset();\r
95     void                                                        MatchRules(FDE_LPCSSTAGCACHE pCache, FDE_LPCSSRULEDATA pList, FDE_CSSPERSUDO ePersudoType);\r
96     void                                                        SortRulesTo(CFDE_CSSDeclarationArray &matchDecls);\r
97     FX_BOOL                                                     MatchSelector(FDE_LPCSSTAGCACHE pCache, IFDE_CSSSelector *pSel, FDE_CSSPERSUDO ePersudoType);\r
98     void                                                        AppendInlineStyle(CFDE_CSSDeclaration *pDecl, FX_LPCWSTR psz, int32_t iLen);\r
99     void                                                        ApplyDeclarations(FX_BOOL bPriority, const IFDE_CSSDeclaration **ppDeclArray, int32_t iDeclCount, IFDE_CSSComputedStyle *pDestStyle);\r
100     void                                                        ApplyProperty(FDE_CSSPROPERTY eProperty, IFDE_CSSValue *pValue, CFDE_CSSComputedStyle *pComputedStyle);\r
101 \r
102     FX_FLOAT                                            ApplyNumber(FDE_CSSPRIMITIVETYPE eUnit, FX_FLOAT fValue, FX_FLOAT fPercentBase);\r
103     FX_BOOL                                                     SetLengthWithPercent(FDE_CSSLENGTH &width, FDE_CSSPRIMITIVETYPE eType, IFDE_CSSPrimitiveValue *pPrimitive, FX_FLOAT fFontSize);\r
104     FX_FLOAT                                            ToFontSize(FDE_CSSPROPERTYVALUE eValue, FX_FLOAT fCurFontSize);\r
105     FDE_CSSDISPLAY                                      ToDisplay(FDE_CSSPROPERTYVALUE eValue);\r
106     FDE_CSSTEXTALIGN                            ToTextAlign(FDE_CSSPROPERTYVALUE eValue);\r
107     FX_WORD                                                     ToFontWeight(FDE_CSSPROPERTYVALUE eValue);\r
108     FDE_CSSFONTSTYLE                            ToFontStyle(FDE_CSSPROPERTYVALUE eValue);\r
109     FDE_CSSBORDERSTYLE                          ToBorderStyle(FDE_CSSPROPERTYVALUE eValue);\r
110     FDE_CSSVERTICALALIGN                        ToVerticalAlign(FDE_CSSPROPERTYVALUE eValue);\r
111     FDE_CSSLISTSTYLETYPE                        ToListStyleType(FDE_CSSPROPERTYVALUE eValue);\r
112     FDE_CSSLISTSTYLEPOSITION            ToListStylePosition(FDE_CSSPROPERTYVALUE eValue);\r
113     FDE_CSSVISIBILITY                           ToVisibility(FDE_CSSPROPERTYVALUE eValue);\r
114     FDE_CSSWHITESPACE                           ToWhiteSpace(FDE_CSSPROPERTYVALUE eValue);\r
115     FX_DWORD                                            ToTextDecoration(IFDE_CSSValueList *pList);\r
116     FDE_CSSTEXTTRANSFORM                        ToTextTransform(FDE_CSSPROPERTYVALUE eValue);\r
117     FDE_CSSFONTVARIANT                          ToFontVariant(FDE_CSSPROPERTYVALUE eValue);\r
118     FDE_CSSFLOAT                                        ToFloat(FDE_CSSPROPERTYVALUE eValue);\r
119     FDE_CSSCLEAR                                        ToClear(FDE_CSSPROPERTYVALUE eValue);\r
120     FDE_CSSWRITINGMODE                          ToWritingMode(FDE_CSSPROPERTYVALUE eValue);\r
121     FDE_CSSWORDBREAK                            ToWordBreak(FDE_CSSPROPERTYVALUE eValue);\r
122     FDE_CSSPAGEBREAK                            ToPageBreak(FDE_CSSPROPERTYVALUE eValue);\r
123     FDE_CSSOVERFLOW                                     ToOverflow(FDE_CSSPROPERTYVALUE eValue);\r
124     FDE_CSSLINEBREAK                            ToLineBreak(FDE_CSSPROPERTYVALUE eValue);\r
125     FDE_CSSTEXTCOMBINE                          ToTextCombine(FDE_CSSPROPERTYVALUE eValue);\r
126     FX_BOOL                                                     ToTextEmphasisMark(FDE_CSSPROPERTYVALUE eValue, FDE_CSSTEXTEMPHASISMARK &eMark);\r
127     FX_BOOL                                                     ToTextEmphasisFill(FDE_CSSPROPERTYVALUE eValue, FDE_CSSTEXTEMPHASISFILL &eFill);\r
128     FDE_CSSCURSOR                                       ToCursor(FDE_CSSPROPERTYVALUE eValue);\r
129     FDE_CSSPOSITION                                     ToPosition(FDE_CSSPROPERTYVALUE eValue);\r
130     FDE_CSSCAPTIONSIDE                          ToCaptionSide(FDE_CSSPROPERTYVALUE eValue);\r
131     FDE_CSSBKGREPEAT                            ToBKGRepeat(FDE_CSSPROPERTYVALUE eValue);\r
132     FDE_CSSBKGATTACHMENT                        ToBKGAttachment(FDE_CSSPROPERTYVALUE eValue);\r
133     FDE_CSSRUBYALIGN                            ToRubyAlign(FDE_CSSPROPERTYVALUE eValue);\r
134     FDE_CSSRUBYOVERHANG                         ToRubyOverhang(FDE_CSSPROPERTYVALUE eValue);\r
135     FDE_CSSRUBYPOSITION                         ToRubyPosition(FDE_CSSPROPERTYVALUE eValue);\r
136     FDE_CSSRUBYSPAN                                     ToRubySpan(FDE_CSSPROPERTYVALUE eValue);\r
137     IFX_FontMgr                                         *m_pFontMgr;\r
138     FX_FLOAT                                            m_fDefFontSize;\r
139     IFX_MEMAllocator                            *m_pRuleDataStore;\r
140     CFDE_CSSStyleSheetArray                     m_SheetGroups[FDE_CSSSTYLESHEETGROUP_MAX];\r
141     CFDE_CSSRuleCollection                      m_RuleCollection[FDE_CSSSTYLESHEETGROUP_MAX];\r
142     FDE_CSSSTYLESHEETGROUP                      m_ePriorities[FDE_CSSSTYLESHEETPRIORITY_MAX];\r
143     IFX_MEMAllocator                            *m_pInlineStyleStore;\r
144     IFX_MEMAllocator                            *m_pFixedStyleStore;\r
145     CFDE_CSSAccelerator                         *m_pAccelerator;\r
146     CFDE_CSSRuleDataArray                       m_MatchedRules;\r
147 };\r
148 typedef struct _FDE_CSSCOUNTERDATA {\r
149 public:\r
150     _FDE_CSSCOUNTERDATA()\r
151     {\r
152         FX_memset(this, 0, sizeof(_FDE_CSSCOUNTERDATA));\r
153     }\r
154     FX_BOOL             GetCounterIncrement(int32_t &iValue)\r
155     {\r
156         iValue = m_iIncVal;\r
157         return m_bIncrement;\r
158     }\r
159     FX_BOOL             GetCounterReset(int32_t &iValue)\r
160     {\r
161         iValue = m_iResetVal;\r
162         return m_bReset;\r
163     }\r
164     FX_LPCWSTR  m_pszIdent;\r
165     FX_BOOL             m_bIncrement;\r
166     FX_BOOL             m_bReset;\r
167     int32_t     m_iIncVal;\r
168     int32_t     m_iResetVal;\r
169 } FDE_CSSCOUNTERDATA, *FDE_LPCSSCOUNTERDATA;\r
170 class CFDE_CSSCounterStyle\r
171 {\r
172 public:\r
173     CFDE_CSSCounterStyle(): m_pCounterInc(NULL), m_pCounterReset(NULL) {}\r
174     void                                                                        SetCounterIncrementList(IFDE_CSSValueList *pList)\r
175     {\r
176         m_pCounterInc = pList;\r
177         m_bIndexDirty = TRUE;\r
178     }\r
179     void                                                                        SetCounterResetList(IFDE_CSSValueList *pList)\r
180     {\r
181         m_pCounterReset = pList;\r
182         m_bIndexDirty = TRUE;\r
183     }\r
184     int32_t                                                             CountCounters()\r
185     {\r
186         UpdateIndex();\r
187         return m_arrCounterData.GetSize();\r
188     }\r
189     FX_BOOL                                                                     GetCounterIncrement(int32_t index, int32_t &iValue)\r
190     {\r
191         UpdateIndex();\r
192         return m_arrCounterData.ElementAt(index).GetCounterIncrement(iValue);\r
193     }\r
194     FX_BOOL                                                                     GetCounterReset(int32_t index, int32_t &iValue)\r
195     {\r
196         UpdateIndex();\r
197         return m_arrCounterData.ElementAt(index).GetCounterReset(iValue);\r
198     }\r
199     FX_LPCWSTR                                                          GetCounterIdentifier(int32_t index)\r
200     {\r
201         UpdateIndex();\r
202         return m_arrCounterData.ElementAt(index).m_pszIdent;\r
203     }\r
204 protected:\r
205     void                                                                        UpdateIndex();\r
206     void                                                                        DoUpdateIndex(IFDE_CSSValueList *pList);\r
207     int32_t                                                             FindIndex(FX_LPCWSTR pszIdentifier);\r
208     IFDE_CSSValueList                                           *m_pCounterInc;\r
209     IFDE_CSSValueList                                           *m_pCounterReset;\r
210     CFX_ArrayTemplate<FDE_CSSCOUNTERDATA>       m_arrCounterData;\r
211     FX_BOOL                                                                     m_bIndexDirty;\r
212 };\r
213 class CFDE_CSSInheritedData\r
214 {\r
215 public:\r
216     void                                                        Reset()\r
217     {\r
218         FX_memset(this, 0, sizeof(CFDE_CSSInheritedData));\r
219         m_LetterSpacing.Set(FDE_CSSLENGTHUNIT_Normal);\r
220         m_WordSpacing.Set(FDE_CSSLENGTHUNIT_Normal);\r
221         m_TextIndent.Set(FDE_CSSLENGTHUNIT_Point, 0);\r
222         m_fFontSize = 12.0f;\r
223         m_fLineHeight = 14.0f;\r
224         m_wFontWeight = 400;\r
225         m_dwFontColor = 0xFF000000;\r
226         m_iWidows = 2;\r
227         m_bTextEmphasisColorCurrent = TRUE;\r
228         m_iOrphans = 2;\r
229     }\r
230     FX_LPCWSTR                                          m_pszListStyleImage;\r
231     FDE_CSSLENGTH                                       m_LetterSpacing;\r
232     FDE_CSSLENGTH                                       m_WordSpacing;\r
233     FDE_CSSLENGTH                                       m_TextIndent;\r
234     IFDE_CSSValueList                           *m_pFontFamily;\r
235     IFDE_CSSValueList                           *m_pQuotes;\r
236     IFDE_CSSValueList                           *m_pCursorUris;\r
237     FDE_CSSCURSOR                                       m_eCursor;\r
238     FX_FLOAT                                            m_fFontSize;\r
239     FX_FLOAT                                            m_fLineHeight;\r
240     FX_ARGB                                                     m_dwFontColor;\r
241     FX_ARGB                                                     m_dwTextEmphasisColor;\r
242     FX_WORD                                                     m_wFontWeight;\r
243     int32_t                                             m_iWidows;\r
244     int32_t                                             m_iOrphans;\r
245     FX_LPCWSTR                                          m_pszTextEmphasisCustomMark;\r
246     FX_WORD                                                     m_eFontVariant          : 1;\r
247     FX_WORD                                                     m_eFontStyle            : 1;\r
248     FX_WORD                                                     m_bTextEmphasisColorCurrent: 1;\r
249     FX_WORD                                                     m_eTextAligh            : 2;\r
250     FX_WORD                                                     m_eVisibility           : 2;\r
251     FX_WORD                                                     m_eWhiteSpace           : 3;\r
252     FX_WORD                                                     m_eTextTransform        : 2;\r
253     FX_WORD                                                     m_eWritingMode          : 2;\r
254     FX_WORD                                                     m_eWordBreak            : 2;\r
255     FX_WORD                                                     m_eLineBreak            : 2;\r
256     FX_WORD                                                     m_eTextEmphasisFill     : 1;\r
257     FX_WORD                                                     m_eTextEmphasisMark     : 3;\r
258     FX_WORD                                                     m_eCaptionSide          : 3;\r
259 \r
260     FX_WORD                                                     m_eRubyAlign            : 4;\r
261     FX_WORD                                                     m_eRubyOverhang         : 2;\r
262     FX_WORD                                                     m_eRubyPosition         : 2;\r
263 };\r
264 class CFDE_CSSNonInheritedData\r
265 {\r
266 public:\r
267     void                                                        Reset()\r
268     {\r
269         FX_memset(this, 0, sizeof(CFDE_CSSNonInheritedData));\r
270         m_MarginWidth = m_BorderWidth = m_PaddingWidth.Set(FDE_CSSLENGTHUNIT_Point, 0);\r
271         m_MinBoxSize.Set(FDE_CSSLENGTHUNIT_Point, 0);\r
272         m_MaxBoxSize.Set(FDE_CSSLENGTHUNIT_None);\r
273         m_eDisplay = FDE_CSSDISPLAY_Inline;\r
274         m_fVerticalAlign = 0.0f;\r
275         m_ColumnCount.Set(FDE_CSSLENGTHUNIT_Auto);\r
276         m_ColumnGap.Set(FDE_CSSLENGTHUNIT_Normal);\r
277         m_bColumnRuleColorSame = TRUE;\r
278         m_ColumnWidth.Set(FDE_CSSLENGTHUNIT_Auto);\r
279         m_ColumnRuleWidth.Set(FDE_CSSLENGTHUNIT_Auto);\r
280         m_eTextCombine = FDE_CSSTEXTCOMBINE_None;\r
281     }\r
282 \r
283     IFDE_CSSValueList                           *m_pContentList;\r
284     CFDE_CSSCounterStyle                        *m_pCounterStyle;\r
285     FDE_CSSRECT                                         m_MarginWidth;\r
286     FDE_CSSRECT                                         m_BorderWidth;\r
287     FDE_CSSRECT                                         m_PaddingWidth;\r
288     FDE_CSSSIZE                                         m_BoxSize;\r
289     FDE_CSSSIZE                                         m_MinBoxSize;\r
290     FDE_CSSSIZE                                         m_MaxBoxSize;\r
291     FDE_CSSPOINT                                        m_BKGPosition;\r
292     FX_LPCWSTR                                          m_pszBKGImage;\r
293     FX_ARGB                                                     m_dwBKGColor;\r
294     FX_ARGB                                                     m_dwBDRLeftColor;\r
295     FX_ARGB                                                     m_dwBDRTopColor;\r
296     FX_ARGB                                                     m_dwBDRRightColor;\r
297     FX_ARGB                                                     m_dwBDRBottomColor;\r
298     IFDE_CSSValue                                       *m_pRubySpan;\r
299     FDE_CSSLENGTH                                       m_ColumnCount;\r
300     FDE_CSSLENGTH                                       m_ColumnGap;\r
301     FDE_CSSLENGTH                                       m_ColumnRuleWidth;\r
302     FDE_CSSLENGTH                                       m_ColumnWidth;\r
303     FX_ARGB                                                     m_dwColumnRuleColor;\r
304     FDE_CSSLENGTH                                       m_Top;\r
305     FDE_CSSLENGTH                                       m_Bottom;\r
306     FDE_CSSLENGTH                                       m_Left;\r
307     FDE_CSSLENGTH                                       m_Right;\r
308 \r
309     FX_FLOAT                                            m_fVerticalAlign;\r
310     FX_FLOAT                                            m_fTextCombineNumber;\r
311     FX_DWORD                                            m_eBDRLeftStyle         : 4;\r
312     FX_DWORD                                            m_eBDRTopStyle          : 4;\r
313     FX_DWORD                                            m_eBDRRightStyle        : 4;\r
314     FX_DWORD                                            m_eBDRBottomStyle       : 4;\r
315     FX_DWORD                                            m_eDisplay                      : 5;\r
316     FX_DWORD                                            m_eVerticalAlign        : 4;\r
317     FX_DWORD                                            m_eListStyleType        : 5;\r
318     FX_DWORD                                            m_eColumnRuleStyle  : 4;\r
319     FX_DWORD                                            m_ePageBreakInside      : 3;\r
320     FX_DWORD                                            m_ePageBreakAfter       : 3;\r
321     FX_DWORD                                            m_ePageBreakBefore      : 3;\r
322     FX_DWORD                                            m_ePosition                     : 2;\r
323     FX_DWORD                                            m_eBKGRepeat            : 2;\r
324     FX_DWORD                                            m_eFloat                        : 2;\r
325     FX_DWORD                                            m_eClear                        : 2;\r
326     FX_DWORD                                            m_eOverflowX            : 3;\r
327     FX_DWORD                                            m_eOverflowY            : 3;\r
328     FX_DWORD                                            m_eListStylePosition: 1;\r
329     FX_DWORD                                            m_eBKGAttachment        : 1;\r
330     FX_DWORD                                            m_bHasMargin            : 1;\r
331     FX_DWORD                                            m_bHasBorder            : 1;\r
332     FX_DWORD                                            m_bHasPadding           : 1;\r
333     FX_DWORD                                            m_dwTextDecoration      : 5;\r
334     FX_DWORD                                            m_eTextCombine          : 1;\r
335     FX_DWORD                                            m_bColumnRuleColorSame  : 1;\r
336     FX_DWORD                                            m_bHasTextCombineNumber : 1;\r
337 };\r
338 class CFDE_CSSComputedStyle : public IFDE_CSSComputedStyle, public IFDE_CSSFontStyle,\r
339     public IFDE_CSSBoundaryStyle, public IFDE_CSSPositionStyle,\r
340     public IFDE_CSSParagraphStyle, public IFDE_CSSBackgroundStyle,\r
341     public IFDE_CSSVisualStyle, public IFDE_CSSListStyle,\r
342     public IFDE_CSSMultiColumnStyle, public IFDE_CSSGeneratedContentStyle,\r
343     public IFDE_CSSTableStyle, public IFDE_CSSRubyStyle,\r
344     public CFX_Target\r
345 {\r
346 public:\r
347     CFDE_CSSComputedStyle(IFX_MEMAllocator *pAlloc) : m_dwRefCount(1), m_pAllocator(pAlloc) {}\r
348     ~CFDE_CSSComputedStyle() {}\r
349     virtual FX_DWORD                            AddRef()\r
350     {\r
351         return ++m_dwRefCount;\r
352     }\r
353     virtual FX_DWORD                            Release()\r
354     {\r
355         FX_DWORD dwRefCount = --m_dwRefCount;\r
356         if (dwRefCount == 0) {\r
357             if (m_NonInheritedData.m_pCounterStyle != NULL) {\r
358                 FDE_Delete m_NonInheritedData.m_pCounterStyle;\r
359             }\r
360             FDE_DeleteWith(CFDE_CSSComputedStyle, m_pAllocator, this);\r
361         }\r
362         return dwRefCount;\r
363     }\r
364 \r
365     virtual void                                        Reset()\r
366     {\r
367         m_InheritedData.Reset();\r
368         m_NonInheritedData.Reset();\r
369     }\r
370     virtual IFDE_CSSFontStyle*                          GetFontStyles() const\r
371     {\r
372         return (IFDE_CSSFontStyle * const)this;\r
373     }\r
374     virtual IFDE_CSSBoundaryStyle*                      GetBoundaryStyles() const\r
375     {\r
376         return (IFDE_CSSBoundaryStyle * const)this;\r
377     }\r
378     virtual IFDE_CSSPositionStyle*                      GetPositionStyles() const\r
379     {\r
380         return (IFDE_CSSPositionStyle * const)this;\r
381     }\r
382     virtual IFDE_CSSParagraphStyle*                     GetParagraphStyles() const\r
383     {\r
384         return (IFDE_CSSParagraphStyle * const)this;\r
385     }\r
386     virtual IFDE_CSSBackgroundStyle*            GetBackgroundStyles() const\r
387     {\r
388         return (IFDE_CSSBackgroundStyle * const)this;\r
389     }\r
390     virtual IFDE_CSSVisualStyle*                        GetVisualStyles() const\r
391     {\r
392         return (IFDE_CSSVisualStyle * const)this;\r
393     }\r
394     virtual IFDE_CSSListStyle*                          GetListStyles() const\r
395     {\r
396         return (IFDE_CSSListStyle * const)this;\r
397     }\r
398     virtual IFDE_CSSTableStyle*                         GetTableStyle() const\r
399     {\r
400         return (IFDE_CSSTableStyle * const)this;\r
401     }\r
402     virtual IFDE_CSSMultiColumnStyle*           GetMultiColumnStyle() const\r
403     {\r
404         return (IFDE_CSSMultiColumnStyle * const)this;\r
405     }\r
406     virtual IFDE_CSSGeneratedContentStyle*      GetGeneratedContentStyle() const\r
407     {\r
408         return (IFDE_CSSGeneratedContentStyle * const)this;\r
409     }\r
410     virtual IFDE_CSSRubyStyle*                          GetRubyStyle() const\r
411     {\r
412         return (IFDE_CSSRubyStyle * const)this;\r
413     }\r
414     virtual FX_BOOL                                     GetCustomStyle(FX_WSTR wsName, CFX_WideString &wsValue) const\r
415     {\r
416         for (int32_t i = m_CustomProperties.GetSize() - 2; i > -1; i -= 2) {\r
417             if (wsName == m_CustomProperties[i]) {\r
418                 wsValue = m_CustomProperties[i + 1];\r
419                 return TRUE;\r
420             }\r
421         }\r
422         return FALSE;\r
423     }\r
424     virtual FDE_CSSRUBYALIGN            GetRubyAlign() const\r
425     {\r
426         return (FDE_CSSRUBYALIGN)m_InheritedData.m_eRubyAlign;\r
427     }\r
428     virtual FDE_CSSRUBYPOSITION         GetRubyPosition() const\r
429     {\r
430         return (FDE_CSSRUBYPOSITION)m_InheritedData.m_eRubyPosition;\r
431     }\r
432     virtual FDE_CSSRUBYOVERHANG         GetRubyOverhang() const\r
433     {\r
434         return (FDE_CSSRUBYOVERHANG)m_InheritedData.m_eRubyOverhang;\r
435     }\r
436     virtual FDE_CSSRUBYSPAN                     GetRubySpanType() const\r
437     {\r
438         return m_NonInheritedData.m_pRubySpan == NULL ? FDE_CSSRUBYSPAN_None : FDE_CSSRUBYSPAN_Attr;\r
439     }\r
440     virtual IFDE_CSSValue*                      GetRubySpanAttr() const\r
441     {\r
442         return m_NonInheritedData.m_pRubySpan;\r
443     }\r
444     virtual FDE_CSSCAPTIONSIDE          GetCaptionSide() const\r
445     {\r
446         return (FDE_CSSCAPTIONSIDE)m_InheritedData.m_eCaptionSide;\r
447     }\r
448     virtual int32_t                             CountCounters()\r
449     {\r
450         return (m_NonInheritedData.m_pCounterStyle == NULL) ? 0 : m_NonInheritedData.m_pCounterStyle->CountCounters();\r
451     }\r
452     virtual FX_LPCWSTR                          GetCounterIdentifier(int32_t index)\r
453     {\r
454         return m_NonInheritedData.m_pCounterStyle->GetCounterIdentifier(index);\r
455     }\r
456     virtual FX_BOOL                                     GetCounterReset(int32_t index, int32_t &iValue)\r
457     {\r
458         return m_NonInheritedData.m_pCounterStyle->GetCounterReset(index, iValue);\r
459     }\r
460     virtual FX_BOOL                                     GetCounterIncrement(int32_t index, int32_t &iValue)\r
461     {\r
462         return m_NonInheritedData.m_pCounterStyle->GetCounterIncrement(index, iValue);\r
463     }\r
464     virtual IFDE_CSSValueList*          GetContent() const\r
465     {\r
466         return m_NonInheritedData.m_pContentList;\r
467     }\r
468     virtual int32_t                             CountQuotes() const\r
469     {\r
470         return m_InheritedData.m_pQuotes == NULL ? 0 : m_InheritedData.m_pQuotes->CountValues();\r
471     }\r
472     virtual FX_LPCWSTR                          GetQuotes(int32_t index) const\r
473     {\r
474         FXSYS_assert(m_InheritedData.m_pQuotes != NULL && m_InheritedData.m_pQuotes->CountValues() > index);\r
475         return ((IFDE_CSSPrimitiveValue*)(m_InheritedData.m_pQuotes->GetValue(index)))->GetString(index);\r
476     }\r
477     virtual const FDE_CSSLENGTH&        GetColumnCount() const\r
478     {\r
479         return m_NonInheritedData.m_ColumnCount;\r
480     }\r
481     virtual const FDE_CSSLENGTH&        GetColumnGap() const\r
482     {\r
483         return m_NonInheritedData.m_ColumnGap;\r
484     }\r
485     virtual FX_ARGB                                     GetColumnRuleColor() const\r
486     {\r
487         return m_NonInheritedData.m_bColumnRuleColorSame ? m_InheritedData.m_dwFontColor : m_NonInheritedData.m_dwColumnRuleColor;\r
488     }\r
489     virtual FDE_CSSBORDERSTYLE          GetColumnRuleStyle() const\r
490     {\r
491         return (FDE_CSSBORDERSTYLE)m_NonInheritedData.m_eColumnRuleStyle;\r
492     }\r
493     virtual const FDE_CSSLENGTH&        GetColumnRuleWidth() const\r
494     {\r
495         return m_NonInheritedData.m_ColumnRuleWidth;\r
496     }\r
497     virtual const FDE_CSSLENGTH&        GetColumnWidth() const\r
498     {\r
499         return m_NonInheritedData.m_ColumnWidth;\r
500     }\r
501     virtual void                                        SetColumnCount(const FDE_CSSLENGTH &columnCount)\r
502     {\r
503         m_NonInheritedData.m_ColumnCount = columnCount;\r
504     }\r
505     virtual void                                        SetColumnGap(const FDE_CSSLENGTH &columnGap)\r
506     {\r
507         m_NonInheritedData.m_ColumnGap = columnGap;\r
508     }\r
509     virtual void                                        SetColumnRuleColor(FX_ARGB dwColumnRuleColor)\r
510     {\r
511         m_NonInheritedData.m_dwColumnRuleColor = dwColumnRuleColor, m_NonInheritedData.m_bColumnRuleColorSame = FALSE;\r
512     }\r
513     virtual void                                        SetColumnRuleStyle(FDE_CSSBORDERSTYLE eColumnRuleStyle)\r
514     {\r
515         m_NonInheritedData.m_eColumnRuleStyle = eColumnRuleStyle;\r
516     }\r
517     virtual void                                        SetColumnRuleWidth(const FDE_CSSLENGTH &columnRuleWidth)\r
518     {\r
519         m_NonInheritedData.m_ColumnRuleWidth = columnRuleWidth;\r
520     }\r
521     virtual void                                        SetColumnWidth(const FDE_CSSLENGTH &columnWidth)\r
522     {\r
523         m_NonInheritedData.m_ColumnWidth = columnWidth;\r
524     }\r
525     virtual int32_t                             CountFontFamilies() const\r
526     {\r
527         return m_InheritedData.m_pFontFamily ? m_InheritedData.m_pFontFamily->CountValues() : 0;\r
528     }\r
529     virtual FX_LPCWSTR                          GetFontFamily(int32_t index) const\r
530     {\r
531         return ((IFDE_CSSPrimitiveValue*)(m_InheritedData.m_pFontFamily->GetValue(index)))->GetString(index);\r
532     }\r
533     virtual FX_WORD                                     GetFontWeight() const\r
534     {\r
535         return m_InheritedData.m_wFontWeight;\r
536     }\r
537     virtual FDE_CSSFONTVARIANT          GetFontVariant() const\r
538     {\r
539         return (FDE_CSSFONTVARIANT)m_InheritedData.m_eFontVariant;\r
540     }\r
541     virtual FDE_CSSFONTSTYLE            GetFontStyle() const\r
542     {\r
543         return (FDE_CSSFONTSTYLE)m_InheritedData.m_eFontStyle;\r
544     }\r
545     virtual FX_FLOAT                            GetFontSize() const\r
546     {\r
547         return m_InheritedData.m_fFontSize;\r
548     }\r
549     virtual FX_ARGB                                     GetColor() const\r
550     {\r
551         return m_InheritedData.m_dwFontColor;\r
552     }\r
553     virtual void                                        SetFontWeight(FX_WORD wFontWeight)\r
554     {\r
555         m_InheritedData.m_wFontWeight = wFontWeight;\r
556     }\r
557     virtual void                                        SetFontVariant(FDE_CSSFONTVARIANT eFontVariant)\r
558     {\r
559         m_InheritedData.m_eFontVariant = eFontVariant;\r
560     }\r
561     virtual void                                        SetFontStyle(FDE_CSSFONTSTYLE eFontStyle)\r
562     {\r
563         m_InheritedData.m_eFontStyle = eFontStyle;\r
564     }\r
565     virtual void                                        SetFontSize(FX_FLOAT fFontSize)\r
566     {\r
567         m_InheritedData.m_fFontSize = fFontSize;\r
568     }\r
569     virtual void                                        SetColor(FX_ARGB dwFontColor)\r
570     {\r
571         m_InheritedData.m_dwFontColor = dwFontColor;\r
572     }\r
573     virtual FX_ARGB                                     GetBorderLeftColor() const\r
574     {\r
575         return m_NonInheritedData.m_dwBDRLeftColor;\r
576     }\r
577     virtual FX_ARGB                                     GetBorderTopColor() const\r
578     {\r
579         return m_NonInheritedData.m_dwBDRTopColor;\r
580     }\r
581     virtual FX_ARGB                                     GetBorderRightColor() const\r
582     {\r
583         return m_NonInheritedData.m_dwBDRRightColor;\r
584     }\r
585     virtual FX_ARGB                                     GetBorderBottomColor() const\r
586     {\r
587         return m_NonInheritedData.m_dwBDRBottomColor;\r
588     }\r
589 \r
590     virtual FDE_CSSBORDERSTYLE          GetBorderLeftStyle() const\r
591     {\r
592         return (FDE_CSSBORDERSTYLE)m_NonInheritedData.m_eBDRLeftStyle;\r
593     }\r
594     virtual FDE_CSSBORDERSTYLE          GetBorderTopStyle() const\r
595     {\r
596         return (FDE_CSSBORDERSTYLE)m_NonInheritedData.m_eBDRTopStyle;\r
597     }\r
598     virtual FDE_CSSBORDERSTYLE          GetBorderRightStyle() const\r
599     {\r
600         return (FDE_CSSBORDERSTYLE)m_NonInheritedData.m_eBDRRightStyle;\r
601     }\r
602     virtual FDE_CSSBORDERSTYLE          GetBorderBottomStyle() const\r
603     {\r
604         return (FDE_CSSBORDERSTYLE)m_NonInheritedData.m_eBDRBottomStyle;\r
605     }\r
606 \r
607     virtual const FDE_CSSRECT*          GetBorderWidth() const\r
608     {\r
609         return m_NonInheritedData.m_bHasBorder ? &(m_NonInheritedData.m_BorderWidth) : NULL;\r
610     }\r
611     virtual const FDE_CSSRECT*          GetMarginWidth() const\r
612     {\r
613         return m_NonInheritedData.m_bHasMargin ? &(m_NonInheritedData.m_MarginWidth) : NULL;\r
614     }\r
615     virtual const FDE_CSSRECT*          GetPaddingWidth() const\r
616     {\r
617         return m_NonInheritedData.m_bHasPadding ? &(m_NonInheritedData.m_PaddingWidth) : NULL;\r
618     }\r
619     virtual void                                        SetBorderLeftColor(FX_ARGB dwBorderColor)\r
620     {\r
621         m_NonInheritedData.m_dwBDRLeftColor = dwBorderColor;\r
622     }\r
623     virtual void                                        SetBorderTopColor(FX_ARGB dwBorderColor)\r
624     {\r
625         m_NonInheritedData.m_dwBDRTopColor = dwBorderColor;\r
626     }\r
627     virtual void                                        SetBorderRightColor(FX_ARGB dwBorderColor)\r
628     {\r
629         m_NonInheritedData.m_dwBDRRightColor = dwBorderColor;\r
630     }\r
631     virtual void                                        SetBorderBottomColor(FX_ARGB dwBorderColor)\r
632     {\r
633         m_NonInheritedData.m_dwBDRBottomColor = dwBorderColor;\r
634     }\r
635 \r
636     virtual void                                        SetBorderLeftStyle(FDE_CSSBORDERSTYLE eBorderStyle)\r
637     {\r
638         m_NonInheritedData.m_eBDRLeftStyle = eBorderStyle;\r
639     }\r
640     virtual void                                        SetBorderTopStyle(FDE_CSSBORDERSTYLE eBorderStyle)\r
641     {\r
642         m_NonInheritedData.m_eBDRTopStyle = eBorderStyle;\r
643     }\r
644     virtual void                                        SetBorderRightStyle(FDE_CSSBORDERSTYLE eBorderStyle)\r
645     {\r
646         m_NonInheritedData.m_eBDRRightStyle = eBorderStyle;\r
647     }\r
648     virtual void                                        SetBorderBottomStyle(FDE_CSSBORDERSTYLE eBorderStyle)\r
649     {\r
650         m_NonInheritedData.m_eBDRBottomStyle = eBorderStyle;\r
651     }\r
652 \r
653     virtual void                                        SetBorderWidth(const FDE_CSSRECT &rect)\r
654     {\r
655         m_NonInheritedData.m_BorderWidth = rect;\r
656         m_NonInheritedData.m_bHasBorder = TRUE;\r
657     }\r
658     virtual void                                        SetMarginWidth(const FDE_CSSRECT &rect)\r
659     {\r
660         m_NonInheritedData.m_MarginWidth = rect;\r
661         m_NonInheritedData.m_bHasMargin = TRUE;\r
662     }\r
663     virtual void                                        SetPaddingWidth(const FDE_CSSRECT &rect)\r
664     {\r
665         m_NonInheritedData.m_PaddingWidth = rect;\r
666         m_NonInheritedData.m_bHasPadding = TRUE;\r
667     }\r
668     virtual FDE_CSSDISPLAY                      GetDisplay() const\r
669     {\r
670         return (FDE_CSSDISPLAY)m_NonInheritedData.m_eDisplay;\r
671     }\r
672     virtual const FDE_CSSSIZE&          GetBoxSize() const\r
673     {\r
674         return m_NonInheritedData.m_BoxSize;\r
675     }\r
676     virtual const FDE_CSSSIZE&          GetMinBoxSize() const\r
677     {\r
678         return m_NonInheritedData.m_MinBoxSize;\r
679     }\r
680     virtual const FDE_CSSSIZE&          GetMaxBoxSize() const\r
681     {\r
682         return m_NonInheritedData.m_MaxBoxSize;\r
683     }\r
684     virtual FDE_CSSFLOAT                        GetFloat() const\r
685     {\r
686         return (FDE_CSSFLOAT)m_NonInheritedData.m_eFloat;\r
687     }\r
688     virtual FDE_CSSCLEAR                        GetClear() const\r
689     {\r
690         return (FDE_CSSCLEAR)m_NonInheritedData.m_eClear;\r
691     }\r
692     virtual FDE_CSSPOSITION                     GetPosition() const\r
693     {\r
694         return (FDE_CSSPOSITION)m_NonInheritedData.m_ePosition;\r
695     }\r
696     virtual FDE_CSSLENGTH                       GetTop() const\r
697     {\r
698         return m_NonInheritedData.m_Top;\r
699     }\r
700     virtual FDE_CSSLENGTH                       GetBottom() const\r
701     {\r
702         return m_NonInheritedData.m_Bottom;\r
703     }\r
704     virtual FDE_CSSLENGTH                       GetLeft() const\r
705     {\r
706         return m_NonInheritedData.m_Left;\r
707     }\r
708     virtual FDE_CSSLENGTH                       GetRight() const\r
709     {\r
710         return m_NonInheritedData.m_Right;\r
711     }\r
712 \r
713     virtual void                                        SetDisplay(FDE_CSSDISPLAY eDisplay)\r
714     {\r
715         m_NonInheritedData.m_eDisplay = eDisplay;\r
716     }\r
717     virtual void                                        SetBoxSize(const FDE_CSSSIZE &size)\r
718     {\r
719         m_NonInheritedData.m_BoxSize = size;\r
720     }\r
721     virtual void                                        SetMinBoxSize(const FDE_CSSSIZE &size)\r
722     {\r
723         m_NonInheritedData.m_MinBoxSize = size;\r
724     }\r
725     virtual void                                        SetMaxBoxSize(const FDE_CSSSIZE &size)\r
726     {\r
727         m_NonInheritedData.m_MaxBoxSize = size;\r
728     }\r
729     virtual void                                        SetFloat(FDE_CSSFLOAT eFloat)\r
730     {\r
731         m_NonInheritedData.m_eFloat = eFloat;\r
732     }\r
733     virtual void                                        SetClear(FDE_CSSCLEAR eClear)\r
734     {\r
735         m_NonInheritedData.m_eClear = eClear;\r
736     }\r
737     virtual FX_FLOAT                            GetLineHeight() const\r
738     {\r
739         return m_InheritedData.m_fLineHeight;\r
740     }\r
741     virtual FDE_CSSWHITESPACE           GetWhiteSpace() const\r
742     {\r
743         return (FDE_CSSWHITESPACE)m_InheritedData.m_eWhiteSpace;\r
744     }\r
745     virtual const FDE_CSSLENGTH&        GetTextIndent() const\r
746     {\r
747         return m_InheritedData.m_TextIndent;\r
748     }\r
749     virtual FDE_CSSTEXTALIGN            GetTextAlign() const\r
750     {\r
751         return (FDE_CSSTEXTALIGN)m_InheritedData.m_eTextAligh;\r
752     }\r
753     virtual FDE_CSSVERTICALALIGN        GetVerticalAlign() const\r
754     {\r
755         return (FDE_CSSVERTICALALIGN)m_NonInheritedData.m_eVerticalAlign;\r
756     }\r
757     virtual FX_FLOAT                            GetNumberVerticalAlign() const\r
758     {\r
759         return m_NonInheritedData.m_fVerticalAlign;\r
760     }\r
761     virtual FDE_CSSTEXTTRANSFORM        GetTextTransform() const\r
762     {\r
763         return (FDE_CSSTEXTTRANSFORM)m_InheritedData.m_eTextTransform;\r
764     }\r
765     virtual FX_DWORD                            GetTextDecoration() const\r
766     {\r
767         return m_NonInheritedData.m_dwTextDecoration;\r
768     }\r
769     virtual const FDE_CSSLENGTH&        GetLetterSpacing() const\r
770     {\r
771         return m_InheritedData.m_LetterSpacing;\r
772     }\r
773     virtual const FDE_CSSLENGTH&        GetWordSpacing() const\r
774     {\r
775         return m_InheritedData.m_WordSpacing;\r
776     }\r
777     virtual FDE_CSSWRITINGMODE          GetWritingMode() const\r
778     {\r
779         return (FDE_CSSWRITINGMODE)m_InheritedData.m_eWritingMode;\r
780     }\r
781     virtual FDE_CSSWORDBREAK            GetWordBreak() const\r
782     {\r
783         return (FDE_CSSWORDBREAK)m_InheritedData.m_eWordBreak;\r
784     }\r
785     virtual int32_t                             GetWidows() const\r
786     {\r
787         return m_InheritedData.m_iWidows;\r
788     }\r
789     virtual FX_ARGB                                     GetTextEmphasisColor() const\r
790     {\r
791         return m_InheritedData.m_bTextEmphasisColorCurrent ? m_InheritedData.m_dwFontColor : m_InheritedData.m_dwTextEmphasisColor;\r
792     }\r
793     virtual FDE_CSSPAGEBREAK            GetPageBreakBefore() const\r
794     {\r
795         return (FDE_CSSPAGEBREAK)m_NonInheritedData.m_ePageBreakBefore;\r
796     }\r
797     virtual FDE_CSSPAGEBREAK            GetPageBreakAfter() const\r
798     {\r
799         return (FDE_CSSPAGEBREAK)m_NonInheritedData.m_ePageBreakAfter;\r
800     }\r
801     virtual FDE_CSSPAGEBREAK            GetPageBreakInside() const\r
802     {\r
803         return (FDE_CSSPAGEBREAK)m_NonInheritedData.m_ePageBreakInside;\r
804     }\r
805     virtual int32_t                             GetOrphans() const\r
806     {\r
807         return m_InheritedData.m_iOrphans;\r
808     }\r
809     virtual FDE_CSSLINEBREAK            GetLineBreak() const\r
810     {\r
811         return (FDE_CSSLINEBREAK)m_InheritedData.m_eLineBreak;\r
812     }\r
813     virtual FDE_CSSTEXTEMPHASISMARK     GetTextEmphasisMark() const;\r
814     virtual FDE_CSSTEXTEMPHASISFILL     GetTextEmphasisFill() const\r
815     {\r
816         return (FDE_CSSTEXTEMPHASISFILL)m_InheritedData.m_eTextEmphasisFill;\r
817     }\r
818     virtual FX_LPCWSTR                          GetTextEmphasisCustom() const\r
819     {\r
820         FXSYS_assert(m_InheritedData.m_eTextEmphasisMark == FDE_CSSTEXTEMPHASISMARK_Custom);\r
821         return m_InheritedData.m_pszTextEmphasisCustomMark;\r
822     }\r
823     virtual FDE_CSSTEXTCOMBINE          GetTextCombineType() const\r
824     {\r
825         return (FDE_CSSTEXTCOMBINE)m_NonInheritedData.m_eTextCombine;\r
826     }\r
827     virtual FX_BOOL                                     HasTextCombineNumber() const\r
828     {\r
829         return m_NonInheritedData.m_bHasTextCombineNumber;\r
830     }\r
831     virtual FX_FLOAT                            GetTextCombineNumber() const\r
832     {\r
833         FXSYS_assert(m_NonInheritedData.m_eTextCombine == FDE_CSSTEXTCOMBINE_Horizontal);\r
834         return m_NonInheritedData.m_fTextCombineNumber;\r
835     }\r
836     virtual void                                        SetLineHeight(FX_FLOAT fLineHeight)\r
837     {\r
838         m_InheritedData.m_fLineHeight = fLineHeight;\r
839     }\r
840     virtual void                                        SetWhiteSpace(FDE_CSSWHITESPACE eWhiteSpace)\r
841     {\r
842         m_InheritedData.m_eWhiteSpace = eWhiteSpace;\r
843     }\r
844     virtual void                                        SetTextIndent(const FDE_CSSLENGTH &textIndent)\r
845     {\r
846         m_InheritedData.m_TextIndent = textIndent;\r
847     }\r
848     virtual void                                        SetTextAlign(FDE_CSSTEXTALIGN eTextAlign)\r
849     {\r
850         m_InheritedData.m_eTextAligh = eTextAlign;\r
851     }\r
852     virtual void                                        SetVerticalAlign(FDE_CSSVERTICALALIGN eVerticalAlign)\r
853     {\r
854         m_NonInheritedData.m_eVerticalAlign = eVerticalAlign;\r
855     }\r
856     virtual void                                        SetNumberVerticalAlign(FX_FLOAT fAlign)\r
857     {\r
858         m_NonInheritedData.m_eVerticalAlign = FDE_CSSVERTICALALIGN_Number, m_NonInheritedData.m_fVerticalAlign = fAlign;\r
859     }\r
860     virtual void                                        SetTextTransform(FDE_CSSTEXTTRANSFORM eTextTransform)\r
861     {\r
862         m_InheritedData.m_eTextTransform = eTextTransform;\r
863     }\r
864     virtual void                                        SetTextDecoration(FX_DWORD dwTextDecoration)\r
865     {\r
866         m_NonInheritedData.m_dwTextDecoration = dwTextDecoration;\r
867     }\r
868     virtual void                                        SetLetterSpacing(const FDE_CSSLENGTH &letterSpacing)\r
869     {\r
870         m_InheritedData.m_LetterSpacing = letterSpacing;\r
871     }\r
872     virtual void                                        SetWordSpacing(const FDE_CSSLENGTH &wordSpacing)\r
873     {\r
874         m_InheritedData.m_WordSpacing = wordSpacing;\r
875     }\r
876     virtual void                                        SetWritingMode(FDE_CSSWRITINGMODE eWritingMode)\r
877     {\r
878         m_InheritedData.m_eWritingMode = eWritingMode;\r
879     }\r
880     virtual void                                        SetWordBreak(FDE_CSSWORDBREAK eWordBreak)\r
881     {\r
882         m_InheritedData.m_eWordBreak = eWordBreak;\r
883     }\r
884     virtual void                                        SetWidows(int32_t iWidows)\r
885     {\r
886         m_InheritedData.m_iWidows = iWidows;\r
887     }\r
888     virtual void                                        SetTextEmphasisColor(FX_ARGB dwTextEmphasisColor)\r
889     {\r
890         m_InheritedData.m_dwTextEmphasisColor = dwTextEmphasisColor, m_InheritedData.m_bTextEmphasisColorCurrent = FALSE;\r
891     }\r
892     virtual void                                        SetPageBreakBefore(FDE_CSSPAGEBREAK ePageBreakBefore)\r
893     {\r
894         m_NonInheritedData.m_ePageBreakBefore = ePageBreakBefore;\r
895     }\r
896     virtual void                                        SetPageBreakAfter(FDE_CSSPAGEBREAK ePageBreakAfter)\r
897     {\r
898         m_NonInheritedData.m_ePageBreakAfter = ePageBreakAfter;\r
899     }\r
900     virtual void                                        SetPageBreakInside(FDE_CSSPAGEBREAK ePageBreakInside)\r
901     {\r
902         m_NonInheritedData.m_ePageBreakInside = ePageBreakInside;\r
903     }\r
904     virtual void                                        SetOrphans(int32_t iOrphans)\r
905     {\r
906         m_InheritedData.m_iOrphans = iOrphans;\r
907     }\r
908     virtual void                                        SetLineBreak(FDE_CSSLINEBREAK eLineBreak)\r
909     {\r
910         m_InheritedData.m_eLineBreak = eLineBreak;\r
911     }\r
912     virtual FX_ARGB                                     GetBKGColor() const\r
913     {\r
914         return m_NonInheritedData.m_dwBKGColor;\r
915     }\r
916     virtual FX_LPCWSTR                          GetBKGImage() const\r
917     {\r
918         return m_NonInheritedData.m_pszBKGImage;\r
919     }\r
920     virtual const FDE_CSSPOINT&         GetBKGPosition() const\r
921     {\r
922         return m_NonInheritedData.m_BKGPosition;\r
923     }\r
924     virtual FDE_CSSBKGREPEAT            GetBKGRepeat() const\r
925     {\r
926         return (FDE_CSSBKGREPEAT)m_NonInheritedData.m_eBKGRepeat;\r
927     }\r
928     virtual FDE_CSSBKGATTACHMENT        GetBKGAttachment() const\r
929     {\r
930         return (FDE_CSSBKGATTACHMENT)m_NonInheritedData.m_eBKGAttachment;\r
931     }\r
932     virtual void                                        SetBKGColor(FX_ARGB dwBKGColor)\r
933     {\r
934         m_NonInheritedData.m_dwBKGColor = dwBKGColor;\r
935     }\r
936     virtual void                                        SetBKGPosition(const FDE_CSSPOINT &bkgPosition)\r
937     {\r
938         m_NonInheritedData.m_BKGPosition = bkgPosition;\r
939     }\r
940     virtual FDE_CSSVISIBILITY           GetVisibility() const\r
941     {\r
942         return (FDE_CSSVISIBILITY)m_InheritedData.m_eVisibility;\r
943     }\r
944     virtual FDE_CSSOVERFLOW                     GetOverflowX() const\r
945     {\r
946         return (FDE_CSSOVERFLOW)m_NonInheritedData.m_eOverflowX;\r
947     }\r
948     virtual FDE_CSSOVERFLOW                     GetOverflowY() const\r
949     {\r
950         return (FDE_CSSOVERFLOW)m_NonInheritedData.m_eOverflowY;\r
951     }\r
952     virtual int32_t                             CountCursorUrls() const\r
953     {\r
954         return m_InheritedData.m_pCursorUris == NULL ? 0 : m_InheritedData.m_pCursorUris->CountValues();\r
955     }\r
956     virtual FX_LPCWSTR                          GetCursorUrl(int32_t index) const\r
957     {\r
958         FXSYS_assert(m_InheritedData.m_pCursorUris != NULL);\r
959         return ((IFDE_CSSPrimitiveValue*)(m_InheritedData.m_pCursorUris->GetValue(index)))->GetString(index);\r
960     }\r
961     virtual FDE_CSSCURSOR                       GetCursorType() const\r
962     {\r
963         return m_InheritedData.m_eCursor;\r
964     }\r
965     virtual void                                        SetVisibility(FDE_CSSVISIBILITY eVisibility)\r
966     {\r
967         m_InheritedData.m_eVisibility = eVisibility;\r
968     }\r
969     virtual FDE_CSSLISTSTYLETYPE                GetListStyleType() const\r
970     {\r
971         return (FDE_CSSLISTSTYLETYPE)m_NonInheritedData.m_eListStyleType;\r
972     }\r
973     virtual FDE_CSSLISTSTYLEPOSITION    GetListStylePosition() const\r
974     {\r
975         return (FDE_CSSLISTSTYLEPOSITION)m_NonInheritedData.m_eListStylePosition;\r
976     }\r
977     virtual FX_LPCWSTR                                  GetListStyleImage() const\r
978     {\r
979         return m_InheritedData.m_pszListStyleImage;\r
980     }\r
981     virtual void                                                SetListStyleType(FDE_CSSLISTSTYLETYPE eListStyleType)\r
982     {\r
983         m_NonInheritedData.m_eListStyleType = eListStyleType;\r
984     }\r
985     virtual void                                                SetListStylePosition(FDE_CSSLISTSTYLEPOSITION eListStylePosition)\r
986     {\r
987         m_NonInheritedData.m_eListStylePosition = eListStylePosition;\r
988     }\r
989     void AddCustomStyle(const CFX_WideString &wsName, const CFX_WideString &wsValue)\r
990     {\r
991         m_CustomProperties.Add(wsName);\r
992         m_CustomProperties.Add(wsValue);\r
993     }\r
994     FX_DWORD                                            m_dwRefCount;\r
995     IFX_MEMAllocator                            *m_pAllocator;\r
996     CFDE_CSSInheritedData                       m_InheritedData;\r
997     CFDE_CSSNonInheritedData            m_NonInheritedData;\r
998     CFX_WideStringArray                         m_CustomProperties;\r
999 };\r
1000 #endif\r