Find on page selection color isn't adapted for dark mode.
[WebKit-https.git] / Source / WebCore / rendering / RenderTheme.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 #include "ControlStates.h"
24 #include "PaintInfo.h"
25 #include "PopupMenuStyle.h"
26 #include "ScrollTypes.h"
27 #include "StyleColor.h"
28 #include "ThemeTypes.h"
29
30 namespace WebCore {
31
32 class BorderData;
33 class Element;
34 class FileList;
35 class FillLayer;
36 class HTMLInputElement;
37 class Icon;
38 class RenderAttachment;
39 class RenderBox;
40 class RenderMeter;
41 class RenderObject;
42 class RenderProgress;
43 class RenderStyle;
44 class StyleResolver;
45
46 class RenderTheme {
47 protected:
48     RenderTheme();
49
50     virtual ~RenderTheme() = default;
51
52 public:
53     // This function is to be implemented in platform-specific theme implementations to hand back the
54     // appropriate platform theme.
55     WEBCORE_EXPORT static RenderTheme& singleton();
56
57     virtual void purgeCaches() { }
58
59     // This method is called whenever style has been computed for an element and the appearance
60     // property has been set to a value other than "none".  The theme should map in all of the appropriate
61     // metrics and defaults given the contents of the style.  This includes sophisticated operations like
62     // selection of control size based off the font, the disabling of appearance when certain other properties like
63     // "border" are set, or if the appearance is not supported by the theme.
64     void adjustStyle(StyleResolver&, RenderStyle&, const Element*,  bool UAHasAppearance, const BorderData&, const FillLayer&, const Color& backgroundColor);
65
66     // This method is called to paint the widget as a background of the RenderObject.  A widget's foreground, e.g., the
67     // text of a button, is always rendered by the engine itself.  The boolean return value indicates
68     // whether the CSS border/background should also be painted.
69     bool paint(const RenderBox&, ControlStates&, const PaintInfo&, const LayoutRect&);
70     bool paintBorderOnly(const RenderBox&, const PaintInfo&, const LayoutRect&);
71     bool paintDecorations(const RenderBox&, const PaintInfo&, const LayoutRect&);
72
73     // The remaining methods should be implemented by the platform-specific portion of the theme, e.g.,
74     // RenderThemeMac.cpp for Mac OS X.
75
76     // These methods return the theme's extra style sheets rules, to let each platform
77     // adjust the default CSS rules in html.css, quirks.css, mediaControls.css, or plugIns.css
78     virtual String extraDefaultStyleSheet() { return String(); }
79     virtual String extraQuirksStyleSheet() { return String(); }
80     virtual String extraPlugInsStyleSheet() { return String(); }
81 #if ENABLE(VIDEO)
82     virtual String mediaControlsStyleSheet() { return String(); }
83     virtual String modernMediaControlsStyleSheet() { return String(); }
84     virtual String extraMediaControlsStyleSheet() { return String(); }
85     virtual String mediaControlsScript() { return String(); }
86     virtual String mediaControlsBase64StringForIconNameAndType(const String&, const String&) { return String(); }
87     virtual String mediaControlsFormattedStringForDuration(double) { return String(); }
88 #endif
89 #if ENABLE(FULLSCREEN_API)
90     virtual String extraFullScreenStyleSheet() { return String(); }
91 #endif
92 #if ENABLE(SERVICE_CONTROLS)
93     virtual String imageControlsStyleSheet() const { return String(); }
94 #endif
95
96     // A method to obtain the baseline position for a "leaf" control.  This will only be used if a baseline
97     // position cannot be determined by examining child content. Checkboxes and radio buttons are examples of
98     // controls that need to do this.
99     virtual int baselinePosition(const RenderBox&) const;
100
101     // A method for asking if a control is a container or not.  Leaf controls have to have some special behavior (like
102     // the baseline position API above).
103     bool isControlContainer(ControlPart) const;
104
105     // A method asking if the control changes its tint when the window has focus or not.
106     virtual bool controlSupportsTints(const RenderObject&) const { return false; }
107
108     // Whether or not the control has been styled enough by the author to disable the native appearance.
109     virtual bool isControlStyled(const RenderStyle&, const BorderData&, const FillLayer&, const Color& backgroundColor) const;
110
111     // A general method asking if any control tinting is supported at all.
112     virtual bool supportsControlTints() const { return false; }
113
114     // Some controls may spill out of their containers (e.g., the check on an OS X checkbox).  When these controls repaint,
115     // the theme needs to communicate this inflated rect to the engine so that it can invalidate the whole control.
116     virtual void adjustRepaintRect(const RenderObject&, FloatRect&);
117
118     // This method is called whenever a relevant state changes on a particular themed object, e.g., the mouse becomes pressed
119     // or a control becomes disabled.
120     virtual bool stateChanged(const RenderObject&, ControlStates::States) const;
121
122     // This method is called whenever the theme changes on the system in order to flush cached resources from the
123     // old theme.
124     virtual void themeChanged() { }
125
126     // A method asking if the theme is able to draw the focus ring.
127     virtual bool supportsFocusRing(const RenderStyle&) const;
128
129     // A method asking if the theme's controls actually care about redrawing when hovered.
130     virtual bool supportsHover(const RenderStyle&) const { return false; }
131
132     // A method asking if the platform is able to show datalist suggestions for a given input type.
133     virtual bool supportsDataListUI(const AtomicString&) const { return false; }
134
135     // Text selection colors.
136     Color activeSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
137     Color inactiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
138     Color activeSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
139     Color inactiveSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
140
141     // List box selection colors
142     Color activeListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
143     Color activeListBoxSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
144     Color inactiveListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
145     Color inactiveListBoxSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
146
147     // Highlighting colors for search matches.
148     Color activeTextSearchHighlightColor(OptionSet<StyleColor::Options>) const;
149     Color inactiveTextSearchHighlightColor(OptionSet<StyleColor::Options>) const;
150
151     virtual Color disabledTextColor(const Color& textColor, const Color& backgroundColor) const;
152
153     static Color focusRingColor(OptionSet<StyleColor::Options>);
154     virtual Color platformFocusRingColor(OptionSet<StyleColor::Options>) const { return Color(0, 0, 0); }
155     static void setCustomFocusRingColor(const Color&);
156     static float platformFocusRingWidth() { return 3; }
157     static float platformFocusRingOffset(float outlineWidth) { return std::max<float>(outlineWidth - platformFocusRingWidth(), 0); }
158 #if ENABLE(TOUCH_EVENTS)
159     static Color tapHighlightColor();
160     virtual Color platformTapHighlightColor() const;
161 #endif
162     virtual void platformColorsDidChange();
163
164     virtual Seconds caretBlinkInterval() const { return 500_ms; }
165
166     // System fonts and colors for CSS.
167     void systemFont(CSSValueID, FontCascadeDescription&) const;
168     virtual Color systemColor(CSSValueID, OptionSet<StyleColor::Options>) const;
169
170     virtual int minimumMenuListSize(const RenderStyle&) const { return 0; }
171
172     virtual void adjustSliderThumbSize(RenderStyle&, const Element*) const;
173
174     virtual LengthBox popupInternalPaddingBox(const RenderStyle&) const { return { 0, 0, 0, 0 }; }
175     virtual bool popupOptionSupportsTextIndent() const { return false; }
176     virtual PopupMenuStyle::PopupMenuSize popupMenuSize(const RenderStyle&, IntRect&) const { return PopupMenuStyle::PopupMenuSizeNormal; }
177
178     virtual ScrollbarControlSize scrollbarControlSizeForPart(ControlPart) { return RegularScrollbar; }
179
180     // Returns the repeat interval of the animation for the progress bar.
181     virtual Seconds animationRepeatIntervalForProgressBar(RenderProgress&) const;
182     // Returns the duration of the animation for the progress bar.
183     virtual Seconds animationDurationForProgressBar(RenderProgress&) const;
184     virtual IntRect progressBarRectForBounds(const RenderObject&, const IntRect&) const;
185
186 #if ENABLE(VIDEO)
187     // Media controls
188     virtual bool supportsClosedCaptioning() const { return false; }
189     virtual bool hasOwnDisabledStateHandlingFor(ControlPart) const { return false; }
190     virtual bool usesMediaControlStatusDisplay() { return false; }
191     virtual bool usesMediaControlVolumeSlider() const { return true; }
192     virtual bool usesVerticalVolumeSlider() const { return true; }
193     virtual double mediaControlsFadeInDuration() { return 0.1; }
194     virtual Seconds mediaControlsFadeOutDuration() { return 300_ms; }
195     virtual String formatMediaControlsTime(float time) const;
196     virtual String formatMediaControlsCurrentTime(float currentTime, float duration) const;
197     virtual String formatMediaControlsRemainingTime(float currentTime, float duration) const;
198     
199     // Returns the media volume slider container's offset from the mute button.
200     virtual LayoutPoint volumeSliderOffsetFromMuteButton(const RenderBox&, const LayoutSize&) const;
201 #endif
202
203 #if ENABLE(METER_ELEMENT)
204     virtual IntSize meterSizeForBounds(const RenderMeter&, const IntRect&) const;
205     virtual bool supportsMeter(ControlPart) const;
206 #endif
207
208 #if ENABLE(DATALIST_ELEMENT)
209     // Returns the threshold distance for snapping to a slider tick mark.
210     virtual LayoutUnit sliderTickSnappingThreshold() const;
211     // Returns size of one slider tick mark for a horizontal track.
212     // For vertical tracks we rotate it and use it. i.e. Width is always length along the track.
213     virtual IntSize sliderTickSize() const = 0;
214     // Returns the distance of slider tick origin from the slider track center.
215     virtual int sliderTickOffsetFromTrackCenter() const = 0;
216     void paintSliderTicks(const RenderObject&, const PaintInfo&, const IntRect&);
217 #endif
218
219     virtual bool shouldHaveSpinButton(const HTMLInputElement&) const;
220     virtual bool shouldHaveCapsLockIndicator(const HTMLInputElement&) const;
221
222     // Functions for <select> elements.
223     virtual bool delegatesMenuListRendering() const { return false; }
224     virtual bool popsMenuByArrowKeys() const { return false; }
225     virtual bool popsMenuBySpaceOrReturn() const { return false; }
226
227     virtual String fileListDefaultLabel(bool multipleFilesAllowed) const;
228     virtual String fileListNameForWidth(const FileList*, const FontCascade&, int width, bool multipleFilesAllowed) const;
229
230     enum FileUploadDecorations { SingleFile, MultipleFiles };
231     virtual bool paintFileUploadIconDecorations(const RenderObject& /*inputRenderer*/, const RenderObject& /*buttonRenderer*/, const PaintInfo&, const IntRect&, Icon*, FileUploadDecorations) { return true; }
232
233 #if ENABLE(SERVICE_CONTROLS)
234     virtual IntSize imageControlsButtonSize(const RenderObject&) const { return IntSize(); }
235     virtual IntSize imageControlsButtonPositionOffset() const { return IntSize(); }
236 #endif
237
238 #if ENABLE(ATTACHMENT_ELEMENT)
239     virtual LayoutSize attachmentIntrinsicSize(const RenderAttachment&) const { return LayoutSize(); }
240     virtual int attachmentBaseline(const RenderAttachment&) const { return -1; }
241 #endif
242
243     enum class InnerSpinButtonLayout { Vertical, HorizontalUpLeft, HorizontalUpRight };
244     virtual InnerSpinButtonLayout innerSpinButtonLayout(const RenderObject&) const { return InnerSpinButtonLayout::Vertical; }
245
246     virtual bool shouldMockBoldSystemFontForAccessibility() const { return false; }
247     virtual void setShouldMockBoldSystemFontForAccessibility(bool) { }
248
249 #if USE(SYSTEM_PREVIEW)
250     virtual void paintSystemPreviewBadge(Image&, const PaintInfo&, const FloatRect&);
251 #endif
252
253 protected:
254     virtual FontCascadeDescription& cachedSystemFontDescription(CSSValueID systemFontID) const;
255     virtual void updateCachedSystemFontDescription(CSSValueID systemFontID, FontCascadeDescription&) const = 0;
256
257     // The platform selection color.
258     virtual Color platformActiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
259     virtual Color platformInactiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
260     virtual Color platformActiveSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
261     virtual Color platformInactiveSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
262
263     virtual Color platformActiveListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
264     virtual Color platformInactiveListBoxSelectionBackgroundColor(OptionSet<StyleColor::Options>) const;
265     virtual Color platformActiveListBoxSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
266     virtual Color platformInactiveListBoxSelectionForegroundColor(OptionSet<StyleColor::Options>) const;
267
268     // The platform highlighting colors for search matches.
269     virtual Color platformActiveTextSearchHighlightColor(OptionSet<StyleColor::Options>) const;
270     virtual Color platformInactiveTextSearchHighlightColor(OptionSet<StyleColor::Options>) const;
271
272     virtual bool supportsSelectionForegroundColors() const { return true; }
273     virtual bool supportsListBoxSelectionForegroundColors() const { return true; }
274
275 #if !USE(NEW_THEME)
276     // Methods for each appearance value.
277     virtual void adjustCheckboxStyle(StyleResolver&, RenderStyle&, const Element*) const;
278     virtual bool paintCheckbox(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
279     virtual void setCheckboxSize(RenderStyle&) const { }
280
281     virtual void adjustRadioStyle(StyleResolver&, RenderStyle&, const Element*) const;
282     virtual bool paintRadio(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
283     virtual void setRadioSize(RenderStyle&) const { }
284
285     virtual void adjustButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
286     virtual bool paintButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
287     virtual void setButtonSize(RenderStyle&) const { }
288
289     virtual void adjustInnerSpinButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
290     virtual bool paintInnerSpinButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
291 #endif
292
293     virtual bool paintCheckboxDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
294     virtual bool paintRadioDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
295     virtual bool paintButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
296
297     virtual void adjustTextFieldStyle(StyleResolver&, RenderStyle&, const Element*) const;
298     virtual bool paintTextField(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
299     virtual bool paintTextFieldDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
300
301     virtual void adjustTextAreaStyle(StyleResolver&, RenderStyle&, const Element*) const;
302     virtual bool paintTextArea(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
303     virtual bool paintTextAreaDecorations(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
304
305     virtual void adjustMenuListStyle(StyleResolver&, RenderStyle&, const Element*) const;
306     virtual bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) { return true; }
307     virtual bool paintMenuListDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
308
309     virtual void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
310     virtual bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) { return true; }
311
312     virtual bool paintPushButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
313     virtual bool paintSquareButtonDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
314
315 #if ENABLE(METER_ELEMENT)
316     virtual void adjustMeterStyle(StyleResolver&, RenderStyle&, const Element*) const;
317     virtual bool paintMeter(const RenderObject&, const PaintInfo&, const IntRect&);
318 #endif
319
320     virtual void adjustCapsLockIndicatorStyle(StyleResolver&, RenderStyle&, const Element*) const;
321     virtual bool paintCapsLockIndicator(const RenderObject&, const PaintInfo&, const IntRect&);
322
323 #if ENABLE(APPLE_PAY)
324     virtual void adjustApplePayButtonStyle(StyleResolver&, RenderStyle&, const Element*) const { }
325     virtual bool paintApplePayButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
326 #endif
327
328 #if ENABLE(ATTACHMENT_ELEMENT)
329     virtual void adjustAttachmentStyle(StyleResolver&, RenderStyle&, const Element*) const;
330     virtual bool paintAttachment(const RenderObject&, const PaintInfo&, const IntRect&);
331 #endif
332
333     virtual void adjustProgressBarStyle(StyleResolver&, RenderStyle&, const Element*) const;
334     virtual bool paintProgressBar(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
335
336     virtual void adjustSliderTrackStyle(StyleResolver&, RenderStyle&, const Element*) const;
337     virtual bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
338
339     virtual void adjustSliderThumbStyle(StyleResolver&, RenderStyle&, const Element*) const;
340     virtual bool paintSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
341     virtual bool paintSliderThumbDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
342
343     virtual void adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const;
344     virtual bool paintSearchField(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
345     virtual bool paintSearchFieldDecorations(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
346
347     virtual void adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
348     virtual bool paintSearchFieldCancelButton(const RenderBox&, const PaintInfo&, const IntRect&) { return true; }
349
350     virtual void adjustSearchFieldDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const;
351     virtual bool paintSearchFieldDecorationPart(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
352
353     virtual void adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const;
354     virtual bool paintSearchFieldResultsDecorationPart(const RenderBox&, const PaintInfo&, const IntRect&) { return true; }
355
356     virtual void adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle&, const Element*) const;
357     virtual bool paintSearchFieldResultsButton(const RenderBox&, const PaintInfo&, const IntRect&) { return true; }
358
359     virtual void adjustMediaControlStyle(StyleResolver&, RenderStyle&, const Element*) const;
360     virtual bool paintMediaFullscreenButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
361     virtual bool paintMediaPlayButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
362     virtual bool paintMediaOverlayPlayButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
363     virtual bool paintMediaMuteButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
364     virtual bool paintMediaSeekBackButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
365     virtual bool paintMediaSeekForwardButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
366     virtual bool paintMediaSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
367     virtual bool paintMediaSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
368     virtual bool paintMediaVolumeSliderContainer(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
369     virtual bool paintMediaVolumeSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
370     virtual bool paintMediaVolumeSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
371     virtual bool paintMediaRewindButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
372     virtual bool paintMediaReturnToRealtimeButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
373     virtual bool paintMediaToggleClosedCaptionsButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
374     virtual bool paintMediaControlsBackground(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
375     virtual bool paintMediaCurrentTime(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
376     virtual bool paintMediaTimeRemaining(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
377     virtual bool paintMediaFullScreenVolumeSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
378     virtual bool paintMediaFullScreenVolumeSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
379
380     virtual bool paintSnapshottedPluginOverlay(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
381
382 #if ENABLE(SERVICE_CONTROLS)
383     virtual bool paintImageControlsButton(const RenderObject&, const PaintInfo&, const IntRect&) { return true; }
384 #endif
385
386 public:
387     void updateControlStatesForRenderer(const RenderBox&, ControlStates&) const;
388     ControlStates::States extractControlStatesForRenderer(const RenderObject&) const;
389     bool isActive(const RenderObject&) const;
390     bool isChecked(const RenderObject&) const;
391     bool isIndeterminate(const RenderObject&) const;
392     bool isEnabled(const RenderObject&) const;
393     bool isFocused(const RenderObject&) const;
394     bool isPressed(const RenderObject&) const;
395     bool isSpinUpButtonPartPressed(const RenderObject&) const;
396     bool isHovered(const RenderObject&) const;
397     bool isSpinUpButtonPartHovered(const RenderObject&) const;
398     bool isReadOnlyControl(const RenderObject&) const;
399     bool isDefault(const RenderObject&) const;
400
401 private:
402     mutable Color m_activeSelectionBackgroundColor;
403     mutable Color m_inactiveSelectionBackgroundColor;
404     mutable Color m_activeSelectionForegroundColor;
405     mutable Color m_inactiveSelectionForegroundColor;
406
407     mutable Color m_activeListBoxSelectionBackgroundColor;
408     mutable Color m_inactiveListBoxSelectionBackgroundColor;
409     mutable Color m_activeListBoxSelectionForegroundColor;
410     mutable Color m_inactiveListBoxSelectionForegroundColor;
411
412     mutable Color m_activeTextSearchHighlightColor;
413     mutable Color m_inactiveTextSearchHighlightColor;
414 };
415
416 } // namespace WebCore