1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTIES_CSS_DIRECTION_AWARE_RESOLVER_H_ 6 #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTIES_CSS_DIRECTION_AWARE_RESOLVER_H_ 7 8 #include "third_party/blink/renderer/platform/text/text_direction.h" 9 #include "third_party/blink/renderer/platform/text/writing_mode.h" 10 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" 11 12 namespace blink { 13 14 class CSSProperty; 15 class StylePropertyShorthand; 16 17 class CSSDirectionAwareResolver { 18 STATIC_ONLY(CSSDirectionAwareResolver); 19 20 public: 21 // A group of physical properties that's used by the 'Resolve*' functions 22 // to convert a direction-aware property into a physical property. 23 template <size_t size> 24 class PhysicalGroup { 25 public: 26 PhysicalGroup(const StylePropertyShorthand&); 27 PhysicalGroup(const CSSProperty* (&properties)[size]); 28 const CSSProperty& GetProperty(size_t index) const; 29 30 private: 31 const CSSProperty** properties_; 32 }; 33 34 static PhysicalGroup<4> BorderGroup(); 35 static PhysicalGroup<4> BorderColorGroup(); 36 static PhysicalGroup<4> BorderStyleGroup(); 37 static PhysicalGroup<4> BorderWidthGroup(); 38 static PhysicalGroup<4> InsetGroup(); 39 static PhysicalGroup<4> MarginGroup(); 40 static PhysicalGroup<2> MaxSizeGroup(); 41 static PhysicalGroup<2> MinSizeGroup(); 42 static PhysicalGroup<2> OverflowGroup(); 43 static PhysicalGroup<2> OverscrollBehaviorGroup(); 44 static PhysicalGroup<4> PaddingGroup(); 45 static PhysicalGroup<4> ScrollMarginGroup(); 46 static PhysicalGroup<4> ScrollPaddingGroup(); 47 static PhysicalGroup<2> SizeGroup(); 48 static PhysicalGroup<4> VisitedBorderColorGroup(); 49 50 // These resolvers expect a PhysicalGroup with box sides, in the following 51 // order: top, right, bottom, left. 52 static const CSSProperty& ResolveInlineStart(TextDirection, 53 WritingMode, 54 const PhysicalGroup<4>&); 55 static const CSSProperty& ResolveInlineEnd(TextDirection, 56 WritingMode, 57 const PhysicalGroup<4>&); 58 static const CSSProperty& ResolveBlockStart(TextDirection, 59 WritingMode, 60 const PhysicalGroup<4>&); 61 static const CSSProperty& ResolveBlockEnd(TextDirection, 62 WritingMode, 63 const PhysicalGroup<4>&); 64 65 // These resolvers expect a PhysicalGroup with dimensions, in the following 66 // order: horizontal, vertical. 67 static const CSSProperty& ResolveInline(TextDirection, 68 WritingMode, 69 const PhysicalGroup<2>&); 70 static const CSSProperty& ResolveBlock(TextDirection, 71 WritingMode, 72 const PhysicalGroup<2>&); 73 }; 74 75 } // namespace blink 76 77 #endif // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PROPERTIES_CSS_DIRECTION_AWARE_RESOLVER_H_ 78