StyleSetHandleInlines.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /* This Source Code Form is subject to the terms of the Mozilla Public
  3. * License, v. 2.0. If a copy of the MPL was not distributed with this
  4. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  5. #ifndef mozilla_StyleSetHandleInlines_h
  6. #define mozilla_StyleSetHandleInlines_h
  7. #include "mozilla/StyleSheetInlines.h"
  8. #include "mozilla/ServoStyleSet.h"
  9. #include "nsStyleSet.h"
  10. #define FORWARD_CONCRETE(method_, geckoargs_, servoargs_) \
  11. if (IsGecko()) { \
  12. return AsGecko()->method_ geckoargs_; \
  13. } else { \
  14. return AsServo()->method_ servoargs_; \
  15. }
  16. #define FORWARD(method_, args_) FORWARD_CONCRETE(method_, args_, args_)
  17. namespace mozilla {
  18. void
  19. StyleSetHandle::Ptr::Delete()
  20. {
  21. if (mValue) {
  22. if (IsGecko()) {
  23. delete AsGecko();
  24. } else {
  25. delete AsServo();
  26. }
  27. }
  28. }
  29. void
  30. StyleSetHandle::Ptr::Init(nsPresContext* aPresContext)
  31. {
  32. FORWARD(Init, (aPresContext));
  33. }
  34. void
  35. StyleSetHandle::Ptr::BeginShutdown()
  36. {
  37. FORWARD(BeginShutdown, ());
  38. }
  39. void
  40. StyleSetHandle::Ptr::Shutdown()
  41. {
  42. FORWARD(Shutdown, ());
  43. }
  44. bool
  45. StyleSetHandle::Ptr::GetAuthorStyleDisabled() const
  46. {
  47. FORWARD(GetAuthorStyleDisabled, ());
  48. }
  49. nsresult
  50. StyleSetHandle::Ptr::SetAuthorStyleDisabled(bool aStyleDisabled)
  51. {
  52. FORWARD(SetAuthorStyleDisabled, (aStyleDisabled));
  53. }
  54. void
  55. StyleSetHandle::Ptr::BeginUpdate()
  56. {
  57. FORWARD(BeginUpdate, ());
  58. }
  59. nsresult
  60. StyleSetHandle::Ptr::EndUpdate()
  61. {
  62. FORWARD(EndUpdate, ());
  63. }
  64. // resolve a style context
  65. already_AddRefed<nsStyleContext>
  66. StyleSetHandle::Ptr::ResolveStyleFor(dom::Element* aElement,
  67. nsStyleContext* aParentContext)
  68. {
  69. FORWARD(ResolveStyleFor, (aElement, aParentContext));
  70. }
  71. already_AddRefed<nsStyleContext>
  72. StyleSetHandle::Ptr::ResolveStyleFor(dom::Element* aElement,
  73. nsStyleContext* aParentContext,
  74. TreeMatchContext& aTreeMatchContext)
  75. {
  76. FORWARD(ResolveStyleFor, (aElement, aParentContext, aTreeMatchContext));
  77. }
  78. already_AddRefed<nsStyleContext>
  79. StyleSetHandle::Ptr::ResolveStyleForText(nsIContent* aTextNode,
  80. nsStyleContext* aParentContext)
  81. {
  82. FORWARD(ResolveStyleForText, (aTextNode, aParentContext));
  83. }
  84. already_AddRefed<nsStyleContext>
  85. StyleSetHandle::Ptr::ResolveStyleForOtherNonElement(nsStyleContext* aParentContext)
  86. {
  87. FORWARD(ResolveStyleForOtherNonElement, (aParentContext));
  88. }
  89. already_AddRefed<nsStyleContext>
  90. StyleSetHandle::Ptr::ResolvePseudoElementStyle(dom::Element* aParentElement,
  91. CSSPseudoElementType aType,
  92. nsStyleContext* aParentContext,
  93. dom::Element* aPseudoElement)
  94. {
  95. FORWARD(ResolvePseudoElementStyle, (aParentElement, aType, aParentContext,
  96. aPseudoElement));
  97. }
  98. // aFlags is an nsStyleSet flags bitfield
  99. already_AddRefed<nsStyleContext>
  100. StyleSetHandle::Ptr::ResolveAnonymousBoxStyle(nsIAtom* aPseudoTag,
  101. nsStyleContext* aParentContext,
  102. uint32_t aFlags)
  103. {
  104. FORWARD(ResolveAnonymousBoxStyle, (aPseudoTag, aParentContext, aFlags));
  105. }
  106. // manage the set of style sheets in the style set
  107. nsresult
  108. StyleSetHandle::Ptr::AppendStyleSheet(SheetType aType, StyleSheet* aSheet)
  109. {
  110. FORWARD_CONCRETE(AppendStyleSheet, (aType, aSheet->AsGecko()),
  111. (aType, aSheet->AsServo()));
  112. }
  113. nsresult
  114. StyleSetHandle::Ptr::PrependStyleSheet(SheetType aType, StyleSheet* aSheet)
  115. {
  116. FORWARD_CONCRETE(PrependStyleSheet, (aType, aSheet->AsGecko()),
  117. (aType, aSheet->AsServo()));
  118. }
  119. nsresult
  120. StyleSetHandle::Ptr::RemoveStyleSheet(SheetType aType, StyleSheet* aSheet)
  121. {
  122. FORWARD_CONCRETE(RemoveStyleSheet, (aType, aSheet->AsGecko()),
  123. (aType, aSheet->AsServo()));
  124. }
  125. nsresult
  126. StyleSetHandle::Ptr::ReplaceSheets(SheetType aType,
  127. const nsTArray<RefPtr<StyleSheet>>& aNewSheets)
  128. {
  129. if (IsGecko()) {
  130. nsTArray<RefPtr<CSSStyleSheet>> newSheets(aNewSheets.Length());
  131. for (auto& sheet : aNewSheets) {
  132. newSheets.AppendElement(sheet->AsGecko());
  133. }
  134. return AsGecko()->ReplaceSheets(aType, newSheets);
  135. } else {
  136. nsTArray<RefPtr<ServoStyleSheet>> newSheets(aNewSheets.Length());
  137. for (auto& sheet : aNewSheets) {
  138. newSheets.AppendElement(sheet->AsServo());
  139. }
  140. return AsServo()->ReplaceSheets(aType, newSheets);
  141. }
  142. }
  143. nsresult
  144. StyleSetHandle::Ptr::InsertStyleSheetBefore(SheetType aType,
  145. StyleSheet* aNewSheet,
  146. StyleSheet* aReferenceSheet)
  147. {
  148. FORWARD_CONCRETE(
  149. InsertStyleSheetBefore,
  150. (aType, aNewSheet->AsGecko(), aReferenceSheet->AsGecko()),
  151. (aType, aReferenceSheet->AsServo(), aReferenceSheet->AsServo()));
  152. }
  153. int32_t
  154. StyleSetHandle::Ptr::SheetCount(SheetType aType) const
  155. {
  156. FORWARD(SheetCount, (aType));
  157. }
  158. StyleSheet*
  159. StyleSetHandle::Ptr::StyleSheetAt(SheetType aType, int32_t aIndex) const
  160. {
  161. FORWARD(StyleSheetAt, (aType, aIndex));
  162. }
  163. nsresult
  164. StyleSetHandle::Ptr::RemoveDocStyleSheet(StyleSheet* aSheet)
  165. {
  166. FORWARD_CONCRETE(RemoveDocStyleSheet, (aSheet->AsGecko()),
  167. (aSheet->AsServo()));
  168. }
  169. nsresult
  170. StyleSetHandle::Ptr::AddDocStyleSheet(StyleSheet* aSheet,
  171. nsIDocument* aDocument)
  172. {
  173. FORWARD_CONCRETE(AddDocStyleSheet, (aSheet->AsGecko(), aDocument),
  174. (aSheet->AsServo(), aDocument));
  175. }
  176. // check whether there is ::before/::after style for an element
  177. already_AddRefed<nsStyleContext>
  178. StyleSetHandle::Ptr::ProbePseudoElementStyle(dom::Element* aParentElement,
  179. CSSPseudoElementType aType,
  180. nsStyleContext* aParentContext)
  181. {
  182. FORWARD(ProbePseudoElementStyle, (aParentElement, aType, aParentContext));
  183. }
  184. already_AddRefed<nsStyleContext>
  185. StyleSetHandle::Ptr::ProbePseudoElementStyle(dom::Element* aParentElement,
  186. CSSPseudoElementType aType,
  187. nsStyleContext* aParentContext,
  188. TreeMatchContext& aTreeMatchContext,
  189. dom::Element* aPseudoElement)
  190. {
  191. FORWARD(ProbePseudoElementStyle, (aParentElement, aType, aParentContext,
  192. aTreeMatchContext, aPseudoElement));
  193. }
  194. nsRestyleHint
  195. StyleSetHandle::Ptr::HasStateDependentStyle(dom::Element* aElement,
  196. EventStates aStateMask)
  197. {
  198. FORWARD(HasStateDependentStyle, (aElement, aStateMask));
  199. }
  200. nsRestyleHint
  201. StyleSetHandle::Ptr::HasStateDependentStyle(dom::Element* aElement,
  202. CSSPseudoElementType aPseudoType,
  203. dom::Element* aPseudoElement,
  204. EventStates aStateMask)
  205. {
  206. FORWARD(HasStateDependentStyle, (aElement, aPseudoType, aPseudoElement,
  207. aStateMask));
  208. }
  209. void
  210. StyleSetHandle::Ptr::RootStyleContextAdded()
  211. {
  212. if (IsGecko()) {
  213. AsGecko()->RootStyleContextAdded();
  214. } else {
  215. // Not needed.
  216. }
  217. }
  218. void
  219. StyleSetHandle::Ptr::RootStyleContextRemoved()
  220. {
  221. if (IsGecko()) {
  222. RootStyleContextAdded();
  223. } else {
  224. // Not needed.
  225. }
  226. }
  227. } // namespace mozilla
  228. #undef FORWARD
  229. #endif // mozilla_StyleSetHandleInlines_h