ce3879939c6996c69050b5ddc511566390883425
[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)
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     Color platformActiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const override;
113     Color platformInactiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const override;
114
115 #if ENABLE(TOUCH_EVENTS)
116     Color platformTapHighlightColor() const override { return 0x4D1A1A1A; }
117 #endif
118
119     bool shouldHaveSpinButton(const HTMLInputElement&) const override;
120     bool shouldHaveCapsLockIndicator(const HTMLInputElement&) const override;
121
122 #if ENABLE(VIDEO)
123     String mediaControlsStyleSheet() override;
124     String modernMediaControlsStyleSheet() override;
125     String mediaControlsScript() override;
126     String mediaControlsBase64StringForIconNameAndType(const String&, const String&) override;
127 #endif
128
129 #if ENABLE(ATTACHMENT_ELEMENT)
130     LayoutSize attachmentIntrinsicSize(const RenderAttachment&) const override;
131     int attachmentBaseline(const RenderAttachment&) const override;
132     bool paintAttachment(const RenderObject&, const PaintInfo&, const IntRect&) override;
133 #endif
134
135     bool shouldMockBoldSystemFontForAccessibility() const override { return m_shouldMockBoldSystemFontForAccessibility; }
136     void setShouldMockBoldSystemFontForAccessibility(bool shouldMockBoldSystemFontForAccessibility) override { m_shouldMockBoldSystemFontForAccessibility = shouldMockBoldSystemFontForAccessibility; }
137
138 private:
139     RenderThemeIOS();
140     virtual ~RenderThemeIOS() = default;
141
142     void purgeCaches() override;
143
144 #if PLATFORM(WATCHOS)
145     String extraDefaultStyleSheet() final;
146 #endif
147
148 #if ENABLE(INPUT_TYPE_COLOR)
149     bool platformUsesColorWellAppearance() const final
150     {
151         // FIXME: Support -webkit-appearance: color-well; for drawing color inputs on iOS.
152         return false;
153     }
154 #endif
155
156     const Color& shadowColor() const;
157     FloatRect addRoundedBorderClip(const RenderObject& box, GraphicsContext&, const IntRect&);
158
159     Color systemColor(CSSValueID, OptionSet<StyleColor::Options>) const override;
160
161     CGColorRef colorForMarkerLineStyle(DocumentMarkerLineStyle, bool useDarkMode) override;
162
163     String m_legacyMediaControlsScript;
164     String m_mediaControlsScript;
165     String m_legacyMediaControlsStyleSheet;
166     String m_mediaControlsStyleSheet;
167
168     mutable HashMap<int, Color> m_systemColorCache;
169
170 #if USE(SYSTEM_PREVIEW)
171     RetainPtr<CIContext> m_ciContext;
172 #if HAVE(IOSURFACE)
173     std::unique_ptr<IOSurface> m_largeBadgeSurface;
174     std::unique_ptr<IOSurface> m_smallBadgeSurface;
175 #endif
176 #endif
177
178     bool m_shouldMockBoldSystemFontForAccessibility { false };
179 };
180
181 }
182
183 #endif // PLATFORM(IOS)