Revert "2009-09-16 Albert J. Wong <ajwong@chromium.org>"
[WebKit.git] / WebCore / rendering / RenderThemeChromiumMac.h
1 /*
2  * This file is part of the theme implementation for form controls in WebCore.
3  *
4  * Copyright (C) 2005 Apple Computer, Inc.
5  * Copyright (C) 2008, 2009 Google, Inc.
6  * Copyright (C) 2009 Kenneth Rohde Christiansen
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public License
19  * along with this library; see the file COPYING.LIB.  If not, write to
20  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  * Boston, MA 02110-1301, USA.
22  *
23  */
24
25 #ifndef RenderThemeChromiumMac_h
26 #define RenderThemeChromiumMac_h
27
28 #import "RenderTheme.h"
29 #import <AppKit/AppKit.h>
30 #import <wtf/HashMap.h>
31 #import <wtf/RetainPtr.h>
32
33 #ifdef __OBJC__
34 @class WebCoreRenderThemeNotificationObserver;
35 #else
36 class WebCoreRenderThemeNotificationObserver;
37 #endif
38
39 namespace WebCore {
40
41     class RenderStyle;
42
43     class RenderThemeChromiumMac : public RenderTheme {
44     public:
45         static PassRefPtr<RenderTheme> create();
46
47         // A method to obtain the baseline position for a "leaf" control.  This will only be used if a baseline
48         // position cannot be determined by examining child content. Checkboxes and radio buttons are examples of
49         // controls that need to do this.
50         virtual int baselinePosition(const RenderObject*) const;
51
52         // A method asking if the control changes its tint when the window has focus or not.
53         virtual bool controlSupportsTints(const RenderObject*) const;
54
55         // A general method asking if any control tinting is supported at all.
56         virtual bool supportsControlTints() const { return true; }
57
58         virtual void adjustRepaintRect(const RenderObject*, IntRect&);
59
60         virtual bool isControlStyled(const RenderStyle*, const BorderData&,
61                                      const FillLayer&, const Color& backgroundColor) const;
62
63         virtual Color platformActiveSelectionBackgroundColor() const;
64         virtual Color platformInactiveSelectionBackgroundColor() const;
65         virtual Color platformActiveListBoxSelectionBackgroundColor() const;
66
67         virtual Color platformFocusRingColor() const;
68         
69         virtual void platformColorsDidChange();
70
71         // System fonts.
72         virtual void systemFont(int cssValueId, FontDescription&) const;
73
74         virtual int minimumMenuListSize(RenderStyle*) const;
75
76         virtual void adjustSliderThumbSize(RenderObject*) const;
77         
78         virtual int popupInternalPaddingLeft(RenderStyle*) const;
79         virtual int popupInternalPaddingRight(RenderStyle*) const;
80         virtual int popupInternalPaddingTop(RenderStyle*) const;
81         virtual int popupInternalPaddingBottom(RenderStyle*) const;
82         
83         virtual ScrollbarControlSize scrollbarControlSizeForPart(ControlPart) { return SmallScrollbar; }
84     
85         virtual bool paintCapsLockIndicator(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
86
87         virtual Color systemColor(int cssValueId) const;
88
89     protected:
90         virtual bool supportsSelectionForegroundColors() const { return false; }
91
92         // Methods for each appearance value.
93         virtual bool paintCheckbox(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
94         virtual void setCheckboxSize(RenderStyle*) const;
95
96         virtual bool paintRadio(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
97         virtual void setRadioSize(RenderStyle*) const;
98
99         virtual void adjustButtonStyle(CSSStyleSelector*, RenderStyle*, WebCore::Element*) const;
100         virtual bool paintButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
101         virtual void setButtonSize(RenderStyle*) const;
102
103         virtual bool paintTextField(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
104         virtual void adjustTextFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
105
106         virtual bool paintTextArea(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
107         virtual void adjustTextAreaStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
108
109         virtual bool paintMenuList(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
110         virtual void adjustMenuListStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
111
112         virtual bool paintMenuListButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
113         virtual void adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
114
115         virtual bool paintSliderTrack(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
116         virtual void adjustSliderTrackStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
117
118         virtual bool paintSliderThumb(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
119         virtual void adjustSliderThumbStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
120
121         virtual bool paintSearchField(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
122         virtual void adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
123
124         virtual void adjustSearchFieldCancelButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
125         virtual bool paintSearchFieldCancelButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
126
127         virtual void adjustSearchFieldDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
128         virtual bool paintSearchFieldDecoration(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
129
130         virtual void adjustSearchFieldResultsDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
131         virtual bool paintSearchFieldResultsDecoration(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
132
133         virtual void adjustSearchFieldResultsButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
134         virtual bool paintSearchFieldResultsButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
135
136         virtual bool paintMediaFullscreenButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
137         virtual bool paintMediaPlayButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
138         virtual bool paintMediaMuteButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
139         virtual bool paintMediaSeekBackButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
140         virtual bool paintMediaSeekForwardButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
141         virtual bool paintMediaSliderTrack(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
142         virtual bool paintMediaSliderThumb(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
143
144     private:
145         RenderThemeChromiumMac();
146         virtual ~RenderThemeChromiumMac();
147
148         IntRect inflateRect(const IntRect&, const IntSize&, const int* margins, float zoomLevel = 1.0f) const;
149
150         // Get the control size based off the font.  Used by some of the controls (like buttons).
151         NSControlSize controlSizeForFont(RenderStyle*) const;
152         NSControlSize controlSizeForSystemFont(RenderStyle*) const;
153         void setControlSize(NSCell*, const IntSize* sizes, const IntSize& minSize, float zoomLevel = 1.0f);
154         void setSizeFromFont(RenderStyle*, const IntSize* sizes) const;
155         IntSize sizeForFont(RenderStyle*, const IntSize* sizes) const;
156         IntSize sizeForSystemFont(RenderStyle*, const IntSize* sizes) const;
157         void setFontFromControlSize(CSSStyleSelector*, RenderStyle*, NSControlSize) const;
158
159         void updateActiveState(NSCell*, const RenderObject*);
160         void updateCheckedState(NSCell*, const RenderObject*);
161         void updateEnabledState(NSCell*, const RenderObject*);
162         void updateFocusedState(NSCell*, const RenderObject*);
163         void updatePressedState(NSCell*, const RenderObject*);
164
165         // Helpers for adjusting appearance and for painting
166         const IntSize* checkboxSizes() const;
167         const int* checkboxMargins() const;
168         void setCheckboxCellState(const RenderObject*, const IntRect&);
169
170         const IntSize* radioSizes() const;
171         const int* radioMargins() const;
172         void setRadioCellState(const RenderObject*, const IntRect&);
173
174         void setButtonPaddingFromControlSize(RenderStyle*, NSControlSize) const;
175         const IntSize* buttonSizes() const;
176         const int* buttonMargins() const;
177         void setButtonCellState(const RenderObject*, const IntRect&);
178
179         void setPopupButtonCellState(const RenderObject*, const IntRect&);
180         const IntSize* popupButtonSizes() const;
181         const int* popupButtonMargins() const;
182         const int* popupButtonPadding(NSControlSize) const;
183         void paintMenuListButtonGradients(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
184         const IntSize* menuListSizes() const;
185
186         const IntSize* searchFieldSizes() const;
187         const IntSize* cancelButtonSizes() const;
188         const IntSize* resultsButtonSizes() const;
189         void setSearchCellState(RenderObject*, const IntRect&);
190         void setSearchFieldSize(RenderStyle*) const;
191         
192         NSButtonCell* checkbox() const;
193         NSButtonCell* radio() const;
194         NSButtonCell* button() const;
195         NSPopUpButtonCell* popupButton() const;
196         NSSearchFieldCell* search() const;
197         NSMenu* searchMenuTemplate() const;
198         NSSliderCell* sliderThumbHorizontal() const;
199         NSSliderCell* sliderThumbVertical() const;
200
201     private:
202         mutable RetainPtr<NSButtonCell> m_checkbox;
203         mutable RetainPtr<NSButtonCell> m_radio;
204         mutable RetainPtr<NSButtonCell> m_button;
205         mutable RetainPtr<NSPopUpButtonCell> m_popupButton;
206         mutable RetainPtr<NSSearchFieldCell> m_search;
207         mutable RetainPtr<NSMenu> m_searchMenuTemplate;
208         mutable RetainPtr<NSSliderCell> m_sliderThumbHorizontal;
209         mutable RetainPtr<NSSliderCell> m_sliderThumbVertical;
210
211         bool m_isSliderThumbHorizontalPressed;
212         bool m_isSliderThumbVerticalPressed;
213
214         mutable HashMap<int, RGBA32> m_systemColorCache;
215
216         RetainPtr<WebCoreRenderThemeNotificationObserver> m_notificationObserver;
217     };
218
219 } // namespace WebCore
220
221 #endif