Combine event and touch action regions into a single class
[WebKit-https.git] / Source / WebCore / rendering / RenderThemeWin.h
1 /*
2  * Copyright (C) 2006-2017 Apple Inc. All rights reserved.
3  * Copyright (C) 2009 Kenneth Rohde Christiansen
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  *
20  */
21
22 #pragma once
23
24 #include "RenderTheme.h"
25
26 #ifdef WIN32
27 typedef void* HANDLE;
28 typedef struct HINSTANCE__* HINSTANCE;
29 typedef HINSTANCE HMODULE;
30 #endif
31
32 namespace WebCore {
33
34 struct ThemeData {
35     ThemeData() :m_part(0), m_state(0), m_classicState(0) {}
36     ThemeData(int part, int state)
37         : m_part(part)
38         , m_state(state)
39         , m_classicState(0)
40     { }
41
42     unsigned m_part;
43     unsigned m_state;
44     unsigned m_classicState;
45 };
46
47 class RenderThemeWin final : public RenderTheme {
48 public:
49     friend NeverDestroyed<RenderThemeWin>;
50
51     String extraDefaultStyleSheet() override;
52     String extraQuirksStyleSheet() override;
53
54     // A method asking if the theme's controls actually care about redrawing when hovered.
55     bool supportsHover(const RenderStyle&) const override;
56
57     Color platformActiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const override;
58     Color platformInactiveSelectionBackgroundColor(OptionSet<StyleColor::Options>) const override;
59     Color platformActiveSelectionForegroundColor(OptionSet<StyleColor::Options>) const override;
60     Color platformInactiveSelectionForegroundColor(OptionSet<StyleColor::Options>) const override;
61
62     Color systemColor(CSSValueID, OptionSet<StyleColor::Options>) const override;
63
64     bool paintCheckbox(const RenderObject& o, const PaintInfo& i, const IntRect& r) override
65     { return paintButton(o, i, r); }
66     void setCheckboxSize(RenderStyle&) const override;
67
68     bool paintRadio(const RenderObject& o, const PaintInfo& i, const IntRect& r) override
69     { return paintButton(o, i, r); }
70     void setRadioSize(RenderStyle& style) const override
71     { return setCheckboxSize(style); }
72
73     bool paintButton(const RenderObject&, const PaintInfo&, const IntRect&) override;
74
75     void adjustInnerSpinButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
76     bool paintInnerSpinButton(const RenderObject&, const PaintInfo&, const IntRect&) override;
77
78     bool paintTextField(const RenderObject&, const PaintInfo&, const FloatRect&) override;
79
80     bool paintTextArea(const RenderObject& o, const PaintInfo& i, const FloatRect& r) override
81     { return paintTextField(o, i, r); }
82
83     void adjustMenuListStyle(StyleResolver&, RenderStyle&, const Element*) const override;
84     bool paintMenuList(const RenderObject&, const PaintInfo&, const FloatRect&) override;
85     void adjustMenuListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
86
87     bool paintMenuListButtonDecorations(const RenderBox&, const PaintInfo&, const FloatRect&) override;
88
89     bool paintSliderTrack(const RenderObject&, const PaintInfo&, const IntRect&) override;
90     bool paintSliderThumb(const RenderObject&, const PaintInfo&, const IntRect&) override;
91     void adjustSliderThumbSize(RenderStyle&, const Element*) const override;
92
93     bool popupOptionSupportsTextIndent() const override { return true; }
94
95     void adjustSearchFieldStyle(StyleResolver&, RenderStyle&, const Element*) const override;
96     bool paintSearchField(const RenderObject&, const PaintInfo&, const IntRect&) override;
97
98     void adjustSearchFieldCancelButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
99     bool paintSearchFieldCancelButton(const RenderBox&, const PaintInfo&, const IntRect&) override;
100
101     void adjustSearchFieldDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const override;
102     bool paintSearchFieldDecorationPart(const RenderObject&, const PaintInfo&, const IntRect&) override { return false; }
103
104     void adjustSearchFieldResultsDecorationPartStyle(StyleResolver&, RenderStyle&, const Element*) const override;
105     bool paintSearchFieldResultsDecorationPart(const RenderBox&, const PaintInfo&, const IntRect&) override;
106
107     void adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle&, const Element*) const override;
108     bool paintSearchFieldResultsButton(const RenderBox&, const PaintInfo&, const IntRect&) override;
109
110     void themeChanged() override;
111
112     void adjustButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const override { }
113     void adjustTextFieldStyle(StyleResolver&, RenderStyle& style, const Element*) const override { }
114     void adjustTextAreaStyle(StyleResolver&, RenderStyle& style, const Element*) const override { }
115
116     static void setWebKitIsBeingUnloaded();
117
118     static String stringWithContentsOfFile(const String& name, const String& type);
119
120     bool supportsFocusRing(const RenderStyle&) const override;
121
122 #if ENABLE(VIDEO)
123     String mediaControlsStyleSheet() override;
124     String mediaControlsScript() override;
125 #endif
126
127 #if ENABLE(METER_ELEMENT)
128     IntSize meterSizeForBounds(const RenderMeter&, const IntRect&) const override;
129     bool supportsMeter(ControlPart) const override;
130     void adjustMeterStyle(StyleResolver&, RenderStyle&, const Element*) const override;
131     bool paintMeter(const RenderObject&, const PaintInfo&, const IntRect&) override;
132 #endif
133
134 private:
135     enum ControlSubPart {
136         None,
137         SpinButtonDown,
138         SpinButtonUp,
139     };
140
141     RenderThemeWin();
142     virtual ~RenderThemeWin();
143
144     // System fonts.
145     void updateCachedSystemFontDescription(CSSValueID, FontCascadeDescription&) const override;
146
147     void addIntrinsicMargins(RenderStyle&) const;
148     void close();
149
150     unsigned determineState(const RenderObject&);
151     unsigned determineClassicState(const RenderObject&, ControlSubPart = None);
152     unsigned determineSliderThumbState(const RenderObject&);
153     unsigned determineButtonState(const RenderObject&);
154     unsigned determineSpinButtonState(const RenderObject&, ControlSubPart = None);
155
156     bool supportsFocus(ControlPart) const;
157
158     ThemeData getThemeData(const RenderObject&, ControlSubPart = None);
159     ThemeData getClassicThemeData(const RenderObject&, ControlSubPart = None);
160
161     HANDLE buttonTheme() const;
162     HANDLE textFieldTheme() const;
163     HANDLE menuListTheme() const;
164     HANDLE sliderTheme() const;
165     HANDLE spinButtonTheme() const;
166     HANDLE progressBarTheme() const;
167
168     mutable HANDLE m_buttonTheme;
169     mutable HANDLE m_textFieldTheme;
170     mutable HANDLE m_menuListTheme;
171     mutable HANDLE m_sliderTheme;
172     mutable HANDLE m_spinButtonTheme;
173     mutable HANDLE m_progressBarTheme;
174
175     String m_mediaControlsScript;
176     String m_mediaControlsStyleSheet;
177 };
178
179 } // namespace WebCore