Add CSS -webkit-appearance property for Apple Pay buttons
[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 namespace WebCore {
33     
34 class RenderStyle;
35 class GraphicsContext;
36 struct AttachmentLayout;
37
38 class RenderThemeIOS final : public RenderThemeCocoa {
39 public:
40     static Ref<RenderTheme> create();
41
42     LengthBox popupInternalPaddingBox(const RenderStyle&) const override;
43
44     static void adjustRoundBorderRadius(RenderStyle&, RenderBox&);
45
46     static CFStringRef contentSizeCategory();
47
48     WEBCORE_EXPORT static void setContentSizeCategory(const String&);
49
50 protected:
51     FontCascadeDescription& cachedSystemFontDescription(CSSValueID systemFontID) const override;
52     void updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription&) const override;
53     int baselinePosition(const RenderBox&) const override;
54
55     bool isControlStyled(const RenderStyle&, const BorderData&, const FillLayer& background, const Color& backgroundColor) const override;
56
57     // Methods for each appearance value.
58     void adjustCheckboxStyle(StyleResolver&, RenderStyle&, const Element*) const override;
59     bool paintCheckboxDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
60
61     void adjustRadioStyle(StyleResolver&, RenderStyle&, const Element*) const override;
62     bool paintRadioDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
63
64     void adjustButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
65     bool paintButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
66     bool paintPushButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
67     void setButtonSize(RenderStyle&) const override;
68
69     bool paintFileUploadIconDecorations(const RenderObject& inputRenderer, const RenderObject& buttonRenderer, const PaintInfo&, const IntRect&, Icon*, FileUploadDecorations) override;
70
71     bool paintTextFieldDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
72     bool paintTextAreaDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) override;
73
74     void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
75     bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) override;
76
77     void adjustSliderTrackStyle(StyleResolver&, RenderStyle&, const Element*) const override;
78     bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) override;
79
80     void adjustSliderThumbSize(RenderStyle&, const Element*) const override;
81     bool paintSliderThumbDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
82
83     // Returns the repeat interval of the animation for the progress bar.
84     double animationRepeatIntervalForProgressBar(RenderProgress&) const override;
85     // Returns the duration of the animation for the progress bar.
86     double animationDurationForProgressBar(RenderProgress&) const override;
87
88     bool paintProgressBar(const RenderObject&, const PaintInfo&, const IntRect&) override;
89
90 #if ENABLE(DATALIST_ELEMENT)
91     IntSize sliderTickSize() const override;
92     int sliderTickOffsetFromTrackCenter() const override;
93 #endif
94
95     void adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const override;
96     bool paintSearchFieldDecorations(const RenderObject&, const PaintInfo&, const IntRect&) override;
97
98     Color platformActiveSelectionBackgroundColor() const override;
99     Color platformInactiveSelectionBackgroundColor() const override;
100
101 #if ENABLE(TOUCH_EVENTS)
102     Color platformTapHighlightColor() const override { return 0x4D1A1A1A; }
103 #endif
104
105     bool shouldHaveSpinButton(const HTMLInputElement&) const override;
106     bool shouldHaveCapsLockIndicator(const HTMLInputElement&) const override;
107
108 #if ENABLE(VIDEO)
109     String mediaControlsStyleSheet() override;
110     String mediaControlsScript() override;
111 #endif
112
113 #if ENABLE(ATTACHMENT_ELEMENT)
114     LayoutSize attachmentIntrinsicSize(const RenderAttachment&) const override;
115     int attachmentBaseline(const RenderAttachment&) const override;
116     bool paintAttachment(const RenderObject&, const PaintInfo&, const IntRect&) override;
117 #endif
118
119 private:
120     RenderThemeIOS();
121     virtual ~RenderThemeIOS() { }
122
123     const Color& shadowColor() const;
124     FloatRect addRoundedBorderClip(const RenderObject& box, GraphicsContext&, const IntRect&);
125
126     Color systemColor(CSSValueID) const override;
127
128     String m_mediaControlsScript;
129     String m_mediaControlsStyleSheet;
130
131     mutable HashMap<int, Color> m_systemColorCache;
132 };
133
134 }
135
136 #endif // PLATFORM(IOS)