1/* 2 * Copyright (C) 2007, 2008, 2013 Apple Inc. 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#ifndef RenderThemeSafari_h 23#define RenderThemeSafari_h 24 25#if USE(SAFARI_THEME) 26 27#include "RenderTheme.h" 28 29// If you have an empty placeholder SafariThemeConstants.h, then include SafariTheme.h 30// This is a workaround until a version of WebKitSupportLibrary is released with an updated SafariThemeConstants.h 31#include <SafariTheme/SafariThemeConstants.h> 32#ifndef SafariThemeConstants_h 33#include <SafariTheme/SafariTheme.h> 34#endif 35 36#if PLATFORM(WIN) 37typedef void* HANDLE; 38typedef struct HINSTANCE__* HINSTANCE; 39typedef HINSTANCE HMODULE; 40#endif 41 42namespace WebCore { 43 44using namespace SafariTheme; 45 46class RenderStyle; 47 48class RenderThemeSafari : public RenderTheme { 49public: 50 static PassRefPtr<RenderTheme> create(); 51 52 // A method to obtain the baseline position for a "leaf" control. This will only be used if a baseline 53 // position cannot be determined by examining child content. Checkboxes and radio buttons are examples of 54 // controls that need to do this. 55 virtual int baselinePosition(const RenderObject*) const; 56 57 // A method asking if the control changes its tint when the window has focus or not. 58 virtual bool controlSupportsTints(const RenderObject*) const; 59 60 // A general method asking if any control tinting is supported at all. 61 virtual bool supportsControlTints() const { return true; } 62 63 virtual void adjustRepaintRect(const RenderObject*, IntRect&); 64 65 virtual bool isControlStyled(const RenderStyle*, const BorderData&, 66 const FillLayer&, const Color& backgroundColor) const; 67 68 virtual Color platformActiveSelectionBackgroundColor() const; 69 virtual Color platformInactiveSelectionBackgroundColor() const; 70 virtual Color activeListBoxSelectionBackgroundColor() const; 71 72 virtual Color platformFocusRingColor() const; 73 74 // System fonts. 75 virtual void systemFont(int propId, FontDescription&) const; 76 77 virtual int minimumMenuListSize(RenderStyle*) const; 78 79 virtual void adjustSliderThumbSize(RenderStyle*, Element*) const; 80 virtual void adjustSliderThumbStyle(StyleResolver*, RenderStyle*, Element*) const; 81 82 virtual int popupInternalPaddingLeft(RenderStyle*) const; 83 virtual int popupInternalPaddingRight(RenderStyle*) const; 84 virtual int popupInternalPaddingTop(RenderStyle*) const; 85 virtual int popupInternalPaddingBottom(RenderStyle*) const; 86 87protected: 88 // Methods for each appearance value. 89 virtual bool paintCheckbox(RenderObject*, const PaintInfo&, const IntRect&); 90 virtual void setCheckboxSize(RenderStyle*) const; 91 92 virtual bool paintRadio(RenderObject*, const PaintInfo&, const IntRect&); 93 virtual void setRadioSize(RenderStyle*) const; 94 95 virtual void adjustButtonStyle(StyleResolver*, RenderStyle*, WebCore::Element*) const; 96 virtual bool paintButton(RenderObject*, const PaintInfo&, const IntRect&); 97 virtual void setButtonSize(RenderStyle*) const; 98 99 virtual bool paintTextField(RenderObject*, const PaintInfo&, const IntRect&); 100 virtual void adjustTextFieldStyle(StyleResolver*, RenderStyle*, Element*) const; 101 102 virtual bool paintTextArea(RenderObject*, const PaintInfo&, const IntRect&); 103 virtual void adjustTextAreaStyle(StyleResolver*, RenderStyle*, Element*) const; 104 105 virtual bool paintMenuList(RenderObject*, const PaintInfo&, const IntRect&); 106 virtual void adjustMenuListStyle(StyleResolver*, RenderStyle*, Element*) const; 107 108 virtual bool paintMenuListButton(RenderObject*, const PaintInfo&, const IntRect&); 109 virtual void adjustMenuListButtonStyle(StyleResolver*, RenderStyle*, Element*) const; 110 111 virtual bool paintSliderTrack(RenderObject*, const PaintInfo&, const IntRect&); 112 virtual bool paintSliderThumb(RenderObject*, const PaintInfo&, const IntRect&); 113 114 virtual bool paintSearchField(RenderObject*, const PaintInfo&, const IntRect&); 115 virtual void adjustSearchFieldStyle(StyleResolver*, RenderStyle*, Element*) const; 116 117 virtual void adjustSearchFieldCancelButtonStyle(StyleResolver*, RenderStyle*, Element*) const; 118 virtual bool paintSearchFieldCancelButton(RenderObject*, const PaintInfo&, const IntRect&); 119 120 virtual void adjustSearchFieldDecorationStyle(StyleResolver*, RenderStyle*, Element*) const; 121 virtual bool paintSearchFieldDecoration(RenderObject*, const PaintInfo&, const IntRect&); 122 123 virtual void adjustSearchFieldResultsDecorationStyle(StyleResolver*, RenderStyle*, Element*) const; 124 virtual bool paintSearchFieldResultsDecoration(RenderObject*, const PaintInfo&, const IntRect&); 125 126 virtual void adjustSearchFieldResultsButtonStyle(StyleResolver*, RenderStyle*, Element*) const; 127 virtual bool paintSearchFieldResultsButton(RenderObject*, const PaintInfo&, const IntRect&); 128 129 virtual bool paintCapsLockIndicator(RenderObject*, const PaintInfo&, const IntRect&); 130 131#if ENABLE(VIDEO) 132 virtual bool paintMediaFullscreenButton(RenderObject*, const PaintInfo&, const IntRect&); 133 virtual bool paintMediaPlayButton(RenderObject*, const PaintInfo&, const IntRect&); 134 virtual bool paintMediaMuteButton(RenderObject*, const PaintInfo&, const IntRect&); 135 virtual bool paintMediaSeekBackButton(RenderObject*, const PaintInfo&, const IntRect&); 136 virtual bool paintMediaSeekForwardButton(RenderObject*, const PaintInfo&, const IntRect&); 137 virtual bool paintMediaSliderTrack(RenderObject*, const PaintInfo&, const IntRect&); 138 virtual bool paintMediaSliderThumb(RenderObject*, const PaintInfo&, const IntRect&); 139#endif 140 141#if ENABLE(METER_ELEMENT) 142 virtual IntSize meterSizeForBounds(const RenderMeter*, const IntRect&) const OVERRIDE; 143 virtual bool supportsMeter(ControlPart) const OVERRIDE; 144 virtual void adjustMeterStyle(StyleResolver*, RenderStyle*, Element*) const OVERRIDE; 145 virtual bool paintMeter(RenderObject*, const PaintInfo&, const IntRect&) OVERRIDE; 146#endif 147 148 virtual bool shouldShowPlaceholderWhenFocused() const { return true; } 149 150private: 151 RenderThemeSafari(); 152 virtual ~RenderThemeSafari(); 153 154 IntRect inflateRect(const IntRect&, const IntSize&, const int* margins) const; 155 156 // Get the control size based off the font. Used by some of the controls (like buttons). 157 158 NSControlSize controlSizeForFont(RenderStyle*) const; 159 NSControlSize controlSizeForSystemFont(RenderStyle*) const; 160 //void setControlSize(NSCell*, const IntSize* sizes, const IntSize& minSize); 161 void setSizeFromFont(RenderStyle*, const IntSize* sizes) const; 162 IntSize sizeForFont(RenderStyle*, const IntSize* sizes) const; 163 IntSize sizeForSystemFont(RenderStyle*, const IntSize* sizes) const; 164 void setFontFromControlSize(StyleResolver*, RenderStyle*, NSControlSize) const; 165 166 // Helpers for adjusting appearance and for painting 167 const IntSize* checkboxSizes() const; 168 const int* checkboxMargins(NSControlSize) const; 169 170 const IntSize* radioSizes() const; 171 const int* radioMargins(NSControlSize) const; 172 173 void setButtonPaddingFromControlSize(RenderStyle*, NSControlSize) const; 174 const IntSize* buttonSizes() const; 175 const int* buttonMargins(NSControlSize) const; 176 177 const IntSize* popupButtonSizes() const; 178 const int* popupButtonMargins(NSControlSize) const; 179 const int* popupButtonPadding(NSControlSize) const; 180 void paintMenuListButtonGradients(RenderObject*, const PaintInfo&, const IntRect&); 181 const IntSize* menuListSizes() const; 182 183 const IntSize* searchFieldSizes() const; 184 const IntSize* cancelButtonSizes() const; 185 const IntSize* resultsButtonSizes() const; 186 void setSearchFieldSize(RenderStyle*) const; 187 188 ThemeControlState determineState(RenderObject*) const; 189}; 190 191} // namespace WebCore 192 193#endif // #if USE(SAFARI_THEME) 194 195#endif // RenderThemeSafari_h 196