Synchronize MathML WPT tests against upstream
[WebKit-https.git] / Source / WebCore / rendering / RenderThemeIOS.h
1 /*
2  * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #pragma once
27
28 #if PLATFORM(IOS_FAMILY)
29
30 #include "RenderThemeCocoa.h"
31
32 #if USE(SYSTEM_PREVIEW)
33 #if HAVE(IOSURFACE)
34 #include "IOSurface.h"
35 #endif
36 #include <wtf/RetainPtr.h>
37 #endif
38
39 OBJC_CLASS CIContext;
40
41 namespace WebCore {
42     
43 class RenderStyle;
44 class GraphicsContext;
45
46 struct AttachmentLayout;
47
48 class RenderThemeIOS final : public RenderThemeCocoa {
49 public:
50     friend NeverDestroyed<RenderThemeIOS>;
51
52     static void adjustRoundBorderRadius(RenderStyle&, RenderBox&);
53
54     static CFStringRef contentSizeCategory();
55
56     WEBCORE_EXPORT static void setContentSizeCategory(const String&);
57
58 #if USE(SYSTEM_PREVIEW)
59     void paintSystemPreviewBadge(Image&, const PaintInfo&, const FloatRect&) override;
60 #endif
61
62 protected:
63     LengthBox popupInternalPaddingBox(const RenderStyle&) const override;
64     
65     FontCascadeDescription& cachedSystemFontDescription(CSSValueID systemFontID) const override;
66     void updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription&) const override;
67     int baselinePosition(const RenderBox&) const override;
68
69     bool isControlStyled(const RenderStyle&, const BorderData&, const FillLayer& background, const Color& backgroundColor) const override;
70
71     // Methods for each appearance value.
72     void adjustCheckboxStyle(StyleResolver&, RenderStyle&, const Element*) const override;
73     bool paintCheckboxDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
74
75     void adjustRadioStyle(StyleResolver&, RenderStyle&, const Element*) const override;
76     bool paintRadioDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
77
78     void adjustButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
79     bool paintButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
80     bool paintPushButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
81     void setButtonSize(RenderStyle&) const override;
82
83     bool paintFileUploadIconDecorations(const RenderObject& inputRenderer, const RenderObject& buttonRenderer, const PaintInfo&, const IntRect&, Icon*, FileUploadDecorations) override;
84
85     bool paintTextFieldDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
86     bool paintTextAreaDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
87
88     void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
89     bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) override;
90
91     void adjustSliderTrackStyle(StyleResolver&, RenderStyle&, const Element*) const override;
92     bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) override;
93
94     void adjustSliderThumbSize(RenderStyle&, const Element*) const override;
95     bool paintSliderThumbDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
96
97     // Returns the repeat interval of the animation for the progress bar.
98     Seconds animationRepeatIntervalForProgressBar(RenderProgress&) const override;
99     // Returns the duration of the animation for the progress bar.
100     Seconds animationDurationForProgressBar(RenderProgress&) const override;
101
102     bool paintProgressBar(const RenderObject&, const PaintInfo&, const IntRect&) override;
103
104 #if ENABLE(DATALIST_ELEMENT)
105     IntSize sliderTickSize() const override;
106     int sliderTickOffsetFromTrackCenter() const override;
107 #endif
108
109     void adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const override;
110     bool paintSearchFieldDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
111
112     bool supportsFocusRing(const RenderStyle&) const final;
113
114     Color platformActiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const override;
115     Color platformInactiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const override;
116 #if ENABLE(FULL_KEYBOARD_ACCESS)
117     Color platformFocusRingColor(OptionSet<StyleColor::Options>) const final;
118 #endif
119
120 #if ENABLE(TOUCH_EVENTS)
121     Color platformTapHighlightColor() const override { return 0x4D1A1A1A; }
122 #endif
123
124     bool shouldHaveSpinButton(const HTMLInputElement&) const override;
125
126 #if ENABLE(VIDEO)
127     String mediaControlsStyleSheet() override;
128     String modernMediaControlsStyleSheet() override;
129     String mediaControlsScript() override;
130     String mediaControlsBase64StringForIconNameAndType(const String&, const String&) override;
131 #endif
132
133 #if ENABLE(ATTACHMENT_ELEMENT)
134     LayoutSize attachmentIntrinsicSize(const RenderAttachment&) const override;
135     int attachmentBaseline(const RenderAttachment&) const override;
136     bool paintAttachment(const RenderObject&, const PaintInfo&, const IntRect&) override;
137 #endif
138
139     bool shouldMockBoldSystemFontForAccessibility() const override { return m_shouldMockBoldSystemFontForAccessibility; }
140     void setShouldMockBoldSystemFontForAccessibility(bool shouldMockBoldSystemFontForAccessibility) override { m_shouldMockBoldSystemFontForAccessibility = shouldMockBoldSystemFontForAccessibility; }
141
142 private:
143     RenderThemeIOS();
144     virtual ~RenderThemeIOS() = default;
145
146     void purgeCaches() override;
147
148 #if PLATFORM(WATCHOS)
149     String extraDefaultStyleSheet() final;
150 #endif
151
152     const Color& shadowColor() const;
153     FloatRect addRoundedBorderClip(const RenderObject& box, GraphicsContext&, const IntRect&);
154
155     Color systemColor(CSSValueID, OptionSet<StyleColor::Options>) const override;
156
157     String m_legacyMediaControlsScript;
158     String m_mediaControlsScript;
159     String m_legacyMediaControlsStyleSheet;
160     String m_mediaControlsStyleSheet;
161
162 #if USE(SYSTEM_PREVIEW)
163     RetainPtr<CIContext> m_ciContext;
164 #if HAVE(IOSURFACE)
165     std::unique_ptr<IOSurface> m_largeBadgeSurface;
166     std::unique_ptr<IOSurface> m_smallBadgeSurface;
167 #endif
168 #endif
169
170     bool m_shouldMockBoldSystemFontForAccessibility { false };
171 };
172
173 }
174
175 #endif // PLATFORM(IOS_FAMILY)