[GTK] fast/css/pseudo-visited-background-color-on-input.html is failing since r237425
[WebKit-https.git] / Source / WebCore / rendering / RenderThemeMac.h
1 /*
2  * Copyright (C) 2005-2017 Apple Inc. All rights reserved.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  *
19  */
20
21 #pragma once
22
23 #if PLATFORM(MAC)
24
25 #import "RenderThemeCocoa.h"
26
27 #if ENABLE(SERVICE_CONTROLS)
28 OBJC_CLASS NSServicesRolloverButtonCell;
29 #endif
30
31 OBJC_CLASS WebCoreRenderThemeNotificationObserver;
32
33 namespace WebCore {
34
35 class RenderProgress;
36 class RenderStyle;
37
38 struct AttachmentLayout;
39
40 class RenderThemeMac final : public RenderThemeCocoa {
41 public:
42     friend NeverDestroyed<RenderThemeMac>;
43
44     // A method asking if the control changes its tint when the window has focus or not.
45     bool controlSupportsTints(const RenderObject&) const final;
46
47     // A general method asking if any control tinting is supported at all.
48     bool supportsControlTints() const final { return true; }
49
50     void adjustRepaintRect(const RenderObject&, FloatRect&) final;
51
52     bool isControlStyled(const RenderStyle&, const BorderData&, const FillLayer&, const Color& backgroundColor) const final;
53
54     bool supportsSelectionForegroundColors(OptionSet<StyleColor::Options>) const final;
55
56     Color platformActiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const final;
57     Color platformActiveSelectionForegroundColor(OptionSet<StyleColor::Options>) const final;
58     Color transformSelectionBackgroundColor(const Color&, OptionSet<StyleColor::Options>) const final;
59     Color platformInactiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const final;
60     Color platformInactiveSelectionForegroundColor(OptionSet<StyleColor::Options>) const final;
61     Color platformActiveListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options>) const final;
62     Color platformActiveListBoxSelectionForegroundColor(OptionSet<StyleColor::Options>) const final;
63     Color platformInactiveListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options>) const final;
64     Color platformInactiveListBoxSelectionForegroundColor(OptionSet<StyleColor::Options>) const final;
65     Color platformFocusRingColor(OptionSet<StyleColor::Options>) const final;
66     Color platformActiveTextSearchHighlightColor(OptionSet<StyleColor::Options>) const final;
67     Color platformInactiveTextSearchHighlightColor(OptionSet<StyleColor::Options>) const final;
68
69     ScrollbarControlSize scrollbarControlSizeForPart(ControlPart) final { return SmallScrollbar; }
70
71     void platformColorsDidChange() final;
72
73     int minimumMenuListSize(const RenderStyle&) const final;
74
75     void adjustSliderThumbSize(RenderStyle&, const Element*) const final;
76
77 #if ENABLE(DATALIST_ELEMENT)
78     IntSize sliderTickSize() const final;
79     int sliderTickOffsetFromTrackCenter() const final;
80 #endif
81
82     LengthBox popupInternalPaddingBox(const RenderStyle&) const final;
83     PopupMenuStyle::PopupMenuSize popupMenuSize(const RenderStyle&, IntRect&) const final;
84
85     bool popsMenuByArrowKeys() const final { return true; }
86
87 #if ENABLE(METER_ELEMENT)
88     IntSize meterSizeForBounds(const RenderMeter&, const IntRect&) const final;
89     bool paintMeter(const RenderObject&, const PaintInfo&, const IntRect&) final;
90     bool supportsMeter(ControlPart) const final;
91 #endif
92
93     // Returns the repeat interval of the animation for the progress bar.
94     Seconds animationRepeatIntervalForProgressBar(RenderProgress&) const final;
95     // Returns the duration of the animation for the progress bar.
96     Seconds animationDurationForProgressBar(RenderProgress&) const final;
97     IntRect progressBarRectForBounds(const RenderObject&, const IntRect&) const final;
98
99     // Controls color values returned from platformFocusRingColor(). systemColor() will be used when false.
100     bool usesTestModeFocusRingColor() const;
101     // A view associated to the contained document.
102     NSView* documentViewFor(const RenderObject&) const;
103
104 private:
105     RenderThemeMac();
106
107     // System fonts.
108     void updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription&) const final;
109
110 #if ENABLE(VIDEO)
111     // Media controls
112     String mediaControlsStyleSheet() final;
113     String modernMediaControlsStyleSheet() final;
114     String mediaControlsScript() final;
115     String mediaControlsBase64StringForIconNameAndType(const String&, const String&) final;
116 #endif
117
118 #if ENABLE(SERVICE_CONTROLS)
119     String imageControlsStyleSheet() const final;
120 #endif
121
122     bool paintTextField(const RenderObject&, const PaintInfo&, const FloatRect&) final;
123     void adjustTextFieldStyle(StyleResolver&, RenderStyle&, const Element*) const final;
124
125     bool paintTextArea(const RenderObject&, const PaintInfo&, const FloatRect&) final;
126     void adjustTextAreaStyle(StyleResolver&, RenderStyle&, const Element*) const final;
127
128     bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) final;
129     void adjustMenuListStyle(StyleResolver&, RenderStyle&, const Element*) const final;
130
131     bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) final;
132     void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const final;
133
134     void adjustProgressBarStyle(StyleResolver&, RenderStyle&, const Element*) const final;
135     bool paintProgressBar(const RenderObject&, const PaintInfo&, const IntRect&) final;
136
137     bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) final;
138     void adjustSliderTrackStyle(StyleResolver&, RenderStyle&, const Element*) const final;
139
140     bool paintSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) final;
141     void adjustSliderThumbStyle(StyleResolver&, RenderStyle&, const Element*) const final;
142
143     bool paintSearchField(const RenderObject&, const PaintInfo&, const IntRect&) final;
144     void adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const final;
145
146     void adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle&, const Element*) const final;
147     bool paintSearchFieldCancelButton(const RenderBox&, const PaintInfo&, const IntRect&) final;
148
149     void adjustSearchFieldDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const final;
150     bool paintSearchFieldDecorationPart(const RenderObject&, const PaintInfo&, const IntRect&) final;
151
152     void adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const final;
153     bool paintSearchFieldResultsDecorationPart(const RenderBox&, const PaintInfo&, const IntRect&) final;
154
155     void adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle&, const Element*) const final;
156     bool paintSearchFieldResultsButton(const RenderBox&, const PaintInfo&, const IntRect&) final;
157
158 #if ENABLE(DATALIST_ELEMENT)
159     void paintListButtonForInput(const RenderObject&, GraphicsContext&, const FloatRect&);
160     void adjustListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const final;
161 #endif
162
163 #if ENABLE(VIDEO)
164     bool supportsClosedCaptioning() const final { return true; }
165 #endif
166
167     bool shouldHaveCapsLockIndicator(const HTMLInputElement&) const final;
168
169     bool paintSnapshottedPluginOverlay(const RenderObject&, const PaintInfo&, const IntRect&) final;
170
171 #if ENABLE(ATTACHMENT_ELEMENT)
172     LayoutSize attachmentIntrinsicSize(const RenderAttachment&) const final;
173     int attachmentBaseline(const RenderAttachment&) const final;
174     bool paintAttachment(const RenderObject&, const PaintInfo&, const IntRect&) final;
175 #endif
176
177     bool usingDarkAppearance(const RenderObject&) const final;
178
179 private:
180     String fileListNameForWidth(const FileList*, const FontCascade&, int width, bool multipleFilesAllowed) const final;
181
182     Color systemColor(CSSValueID, OptionSet<StyleColor::Options>) const final;
183
184     CGColorRef colorForMarkerLineStyle(DocumentMarkerLineStyle, bool useDarkMode) override;
185
186     ColorCache& colorCache(OptionSet<StyleColor::Options>) const final;
187
188     void purgeCaches() final;
189
190     // Get the control size based off the font. Used by some of the controls (like buttons).
191     NSControlSize controlSizeForFont(const RenderStyle&) const;
192     NSControlSize controlSizeForSystemFont(const RenderStyle&) const;
193     NSControlSize controlSizeForCell(NSCell*, const IntSize* sizes, const IntSize& minSize, float zoomLevel = 1.0f) const;
194     void setControlSize(NSCell*, const IntSize* sizes, const IntSize& minSize, float zoomLevel = 1.0f);
195     void setSizeFromFont(RenderStyle&, const IntSize* sizes) const;
196     IntSize sizeForFont(const RenderStyle&, const IntSize* sizes) const;
197     IntSize sizeForSystemFont(const RenderStyle&, const IntSize* sizes) const;
198     void setFontFromControlSize(StyleResolver&, RenderStyle&, NSControlSize) const;
199
200     void updateCheckedState(NSCell*, const RenderObject&);
201     void updateEnabledState(NSCell*, const RenderObject&);
202     void updateFocusedState(NSCell*, const RenderObject&);
203     void updatePressedState(NSCell*, const RenderObject&);
204
205     // Helpers for adjusting appearance and for painting
206
207     void paintCellAndSetFocusedElementNeedsRepaintIfNecessary(NSCell*, const RenderObject&, const PaintInfo&, const FloatRect&);
208     void setPopupButtonCellState(const RenderObject&, const IntSize&);
209     const IntSize* popupButtonSizes() const;
210     const int* popupButtonMargins() const;
211     const int* popupButtonPadding(NSControlSize, bool isRTL) const;
212     void paintMenuListButtonGradients(const RenderObject&, const PaintInfo&, const IntRect&);
213     const IntSize* menuListSizes() const;
214
215     const IntSize* searchFieldSizes() const;
216     const IntSize* cancelButtonSizes() const;
217     const IntSize* resultsButtonSizes() const;
218     void setSearchCellState(const RenderObject&, const IntRect&);
219     void setSearchFieldSize(RenderStyle&) const;
220
221     NSPopUpButtonCell *popupButton() const;
222     NSSearchFieldCell *search() const;
223     NSMenu *searchMenuTemplate() const;
224     NSSliderCell *sliderThumbHorizontal() const;
225     NSSliderCell *sliderThumbVertical() const;
226     NSTextFieldCell *textField() const;
227 #if ENABLE(DATALIST_ELEMENT)
228     NSCell *listButton() const;
229 #endif
230
231 #if ENABLE(METER_ELEMENT)
232     NSLevelIndicatorStyle levelIndicatorStyleFor(ControlPart) const;
233     NSLevelIndicatorCell *levelIndicatorFor(const RenderMeter&) const;
234 #endif
235
236     int minimumProgressBarHeight(const RenderStyle&) const;
237     const IntSize* progressBarSizes() const;
238     const int* progressBarMargins(NSControlSize) const;
239
240 #if ENABLE(SERVICE_CONTROLS)
241     bool paintImageControlsButton(const RenderObject&, const PaintInfo&, const IntRect&) final;
242     IntSize imageControlsButtonSize(const RenderObject&) const final;
243     IntSize imageControlsButtonPositionOffset() const final;
244
245     NSServicesRolloverButtonCell *servicesRolloverButtonCell() const;
246 #endif
247
248     mutable RetainPtr<NSPopUpButtonCell> m_popupButton;
249     mutable RetainPtr<NSSearchFieldCell> m_search;
250     mutable RetainPtr<NSMenu> m_searchMenuTemplate;
251     mutable RetainPtr<NSSliderCell> m_sliderThumbHorizontal;
252     mutable RetainPtr<NSSliderCell> m_sliderThumbVertical;
253     mutable RetainPtr<NSLevelIndicatorCell> m_levelIndicator;
254     mutable RetainPtr<NSTextFieldCell> m_textField;
255 #if ENABLE(SERVICE_CONTROLS)
256     mutable RetainPtr<NSServicesRolloverButtonCell> m_servicesRolloverButton;
257 #endif
258 #if ENABLE(DATALIST_ELEMENT)
259     mutable RetainPtr<NSCell> m_listButton;
260 #endif
261
262     bool m_isSliderThumbHorizontalPressed { false };
263     bool m_isSliderThumbVerticalPressed { false };
264
265     mutable ColorCache m_darkColorCache;
266
267     RetainPtr<WebCoreRenderThemeNotificationObserver> m_notificationObserver;
268
269     String m_legacyMediaControlsScript;
270     String m_mediaControlsScript;
271     String m_legacyMediaControlsStyleSheet;
272     String m_mediaControlsStyleSheet;
273 };
274
275 } // namespace WebCore
276
277 #endif // PLATFORM(MAC)