18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This file is part of the theme implementation for form controls in WebCore.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
4e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Computer, Inc.
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef RenderTheme_h
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define RenderTheme_h
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(NEW_THEME)
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Theme.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ThemeTypes.h"
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderObject.h"
328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "ScrollTypes.h"
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/PassRefPtr.h>
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/RefCounted.h>
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Element;
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass PopupMenu;
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderMenuList;
41545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if ENABLE(METER_TAG)
42545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochclass RenderMeter;
43545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif
44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(PROGRESS_TAG)
45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass RenderProgress;
46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass CSSStyleSheet;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass RenderTheme : public RefCounted<RenderTheme> {
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprotected:
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RenderTheme();
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpublic:
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual ~RenderTheme() { }
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // This function is to be implemented in your platform-specific theme implementation to hand back the
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // appropriate platform theme. When the theme is needed in non-page dependent code, a default theme is
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // used as fallback, which is returned for a nulled page, so the platform code needs to account for this.
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static PassRefPtr<RenderTheme> themeForPage(Page* page);
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // When the theme is needed in non-page dependent code, the defaultTheme() is used as fallback.
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static inline PassRefPtr<RenderTheme> defaultTheme()
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    {
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return themeForPage(0);
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    };
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // This method is called whenever style has been computed for an element and the appearance
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // property has been set to a value other than "none".  The theme should map in all of the appropriate
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // metrics and defaults given the contents of the style.  This includes sophisticated operations like
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // selection of control size based off the font, the disabling of appearance when certain other properties like
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // "border" are set, or if the appearance is not supported by the theme.
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void adjustStyle(CSSStyleSelector*, RenderStyle*, Element*,  bool UAHasAppearance,
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                     const BorderData&, const FillLayer&, const Color& backgroundColor);
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // This method is called to paint the widget as a background of the RenderObject.  A widget's foreground, e.g., the
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // text of a button, is always rendered by the engine itself.  The boolean return value indicates
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // whether the CSS border/background should also be painted.
78ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    bool paint(RenderObject*, const PaintInfo&, const IntRect&);
79ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    bool paintBorderOnly(RenderObject*, const PaintInfo&, const IntRect&);
80ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    bool paintDecorations(RenderObject*, const PaintInfo&, const IntRect&);
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // The remaining methods should be implemented by the platform-specific portion of the theme, e.g.,
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // RenderThemeMac.cpp for Mac OS X.
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // These methods return the theme's extra style sheets rules, to let each platform
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // adjust the default CSS rules in html.css, quirks.css, or mediaControls.css
87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual String extraDefaultStyleSheet() { return String(); }
88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual String extraQuirksStyleSheet() { return String(); }
89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(VIDEO)
90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual String extraMediaControlsStyleSheet() { return String(); };
912bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(FULLSCREEN_API)
922bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual String extraFullScreenStyleSheet() { return String(); };
932bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // A method to obtain the baseline position for a "leaf" control.  This will only be used if a baseline
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // position cannot be determined by examining child content. Checkboxes and radio buttons are examples of
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // controls that need to do this.
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int baselinePosition(const RenderObject*) const;
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // A method for asking if a control is a container or not.  Leaf controls have to have some special behavior (like
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // the baseline position API above).
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isControlContainer(ControlPart) const;
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // A method asking if the control changes its tint when the window has focus or not.
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool controlSupportsTints(const RenderObject*) const { return false; }
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Whether or not the control has been styled enough by the author to disable the native appearance.
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool isControlStyled(const RenderStyle*, const BorderData&, const FillLayer&, const Color& backgroundColor) const;
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // A general method asking if any control tinting is supported at all.
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool supportsControlTints() const { return false; }
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Some controls may spill out of their containers (e.g., the check on an OS X checkbox).  When these controls repaint,
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // the theme needs to communicate this inflated rect to the engine so that it can invalidate the whole control.
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustRepaintRect(const RenderObject*, IntRect&);
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // This method is called whenever a relevant state changes on a particular themed object, e.g., the mouse becomes pressed
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // or a control becomes disabled.
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool stateChanged(RenderObject*, ControlState) const;
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // This method is called whenever the theme changes on the system in order to flush cached resources from the
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // old theme.
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void themeChanged() { }
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // A method asking if the theme is able to draw the focus ring.
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool supportsFocusRing(const RenderStyle*) const;
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // A method asking if the theme's controls actually care about redrawing when hovered.
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool supportsHover(const RenderStyle*) const { return false; }
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // Text selection colors.
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Color activeSelectionBackgroundColor() const;
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Color inactiveSelectionBackgroundColor() const;
135635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Color activeSelectionForegroundColor() const;
136635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Color inactiveSelectionForegroundColor() const;
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
138635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // List box selection colors
139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Color activeListBoxSelectionBackgroundColor() const;
140635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Color activeListBoxSelectionForegroundColor() const;
141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Color inactiveListBoxSelectionBackgroundColor() const;
142635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    Color inactiveListBoxSelectionForegroundColor() const;
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    // Highlighting colors for TextMatches.
1455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual Color platformActiveTextSearchHighlightColor() const;
1465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual Color platformInactiveTextSearchHighlightColor() const;
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static Color focusRingColor();
1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual Color platformFocusRingColor() const { return Color(0, 0, 0); }
1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static void setCustomFocusRingColor(const Color&);
1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void platformColorsDidChange();
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
154635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual double caretBlinkInterval() const { return 0.5; }
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // System fonts and colors for CSS.
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void systemFont(int cssValueId, FontDescription&) const = 0;
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual Color systemColor(int cssValueId) const;
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int minimumMenuListSize(RenderStyle*) const { return 0; }
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustSliderThumbSize(RenderObject*) const;
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int popupInternalPaddingLeft(RenderStyle*) const { return 0; }
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int popupInternalPaddingRight(RenderStyle*) const { return 0; }
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int popupInternalPaddingTop(RenderStyle*) const { return 0; }
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int popupInternalPaddingBottom(RenderStyle*) const { return 0; }
1688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual bool popupOptionSupportsTextIndent() const { return false; }
1698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
1708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual ScrollbarControlSize scrollbarControlSizeForPart(ControlPart) { return RegularScrollbar; }
1718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Method for painting the caps lock indicator
173ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintCapsLockIndicator(RenderObject*, const PaintInfo&, const IntRect&) { return 0; };
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(PROGRESS_TAG)
176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Returns the repeat interval of the animation for the progress bar.
177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual double animationRepeatIntervalForProgressBar(RenderProgress*) const;
178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Returns the duration of the animation for the progress bar.
179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual double animationDurationForProgressBar(RenderProgress*) const;
180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
182635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(VIDEO)
183635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // Media controls
1842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual bool supportsClosedCaptioning() const { return false; }
1852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual bool hasOwnDisabledStateHandlingFor(ControlPart) const { return false; }
1862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual bool usesMediaControlStatusDisplay() { return false; }
1872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual bool usesMediaControlVolumeSlider() const { return true; }
188d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual double mediaControlsFadeInDuration() { return 0.1; }
189d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual double mediaControlsFadeOutDuration() { return 0.3; }
1905e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    virtual String formatMediaControlsTime(float time) const;
1915e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    virtual String formatMediaControlsCurrentTime(float currentTime, float duration) const;
1925e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    virtual String formatMediaControlsRemainingTime(float currentTime, float duration) const;
193e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
194e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    // Returns the media volume slider container's offset from the mute button.
19581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual IntPoint volumeSliderOffsetFromMuteButton(RenderBox*, const IntSize&) const;
196635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
197635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
198545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if ENABLE(METER_TAG)
199545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    virtual IntSize meterSizeForBounds(const RenderMeter*, const IntRect&) const;
2002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual bool supportsMeter(ControlPart) const;
201545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif
2022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
2032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual bool shouldShowPlaceholderWhenFocused() const { return false; }
204545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected:
206635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // The platform selection color.
207635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual Color platformActiveSelectionBackgroundColor() const;
208635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual Color platformInactiveSelectionBackgroundColor() const;
209635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual Color platformActiveSelectionForegroundColor() const;
210635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual Color platformInactiveSelectionForegroundColor() const;
211635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
212635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual Color platformActiveListBoxSelectionBackgroundColor() const;
213635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual Color platformInactiveListBoxSelectionBackgroundColor() const;
214635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual Color platformActiveListBoxSelectionForegroundColor() const;
215635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual Color platformInactiveListBoxSelectionForegroundColor() const;
216635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
217635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool supportsSelectionForegroundColors() const { return true; }
218635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool supportsListBoxSelectionForegroundColors() const { return true; }
219635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !USE(NEW_THEME)
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Methods for each appearance value.
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustCheckboxStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
223ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintCheckbox(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void setCheckboxSize(RenderStyle*) const { }
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustRadioStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
227ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintRadio(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void setRadioSize(RenderStyle*) const { }
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
231ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void setButtonSize(RenderStyle*) const { }
233d0825bca7fe65beaee391d30da42e937db621564Steve Block
234d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual void adjustInnerSpinButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
235ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintInnerSpinButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
236d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual void adjustOuterSpinButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
237ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintOuterSpinButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustTextFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
241ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintTextField(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustTextAreaStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
244ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintTextArea(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
24682160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins#if ENABLE(NO_LISTBOX_RENDERING)
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustListboxStyle(CSSStyleSelector*, RenderStyle*, Element*) const {}
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustMenuListStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
250ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMenuList(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
253ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMenuListButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#if ENABLE(METER_TAG)
2566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void adjustMeterStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
257ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMeter(RenderObject*, const PaintInfo&, const IntRect&);
2586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif
2596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
260dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(PROGRESS_TAG)
261dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual void adjustProgressBarStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
262ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintProgressBar(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
263ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif
264ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
265ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#if ENABLE(INPUT_SPEECH)
266ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual void adjustInputFieldSpeechButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
267ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintInputFieldSpeechButton(RenderObject*, const PaintInfo&, const IntRect&);
268dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
269dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustSliderTrackStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
271ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintSliderTrack(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustSliderThumbStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
274ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintSliderThumb(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
277ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintSearchField(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustSearchFieldCancelButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
280ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintSearchFieldCancelButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustSearchFieldDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
283ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintSearchFieldDecoration(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustSearchFieldResultsDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
286ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintSearchFieldResultsDecoration(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustSearchFieldResultsButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
289ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintSearchFieldResultsButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
290ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
291ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaFullscreenButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
292ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaPlayButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
293ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaMuteButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
294ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaSeekBackButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
295ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaSeekForwardButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
296ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaSliderTrack(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
297ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaSliderThumb(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
298ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaVolumeSliderContainer(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
299ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaVolumeSliderTrack(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
300ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaVolumeSliderThumb(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
301ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaRewindButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
302ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaReturnToRealtimeButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
303ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaToggleClosedCaptionsButton(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
304ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaControlsBackground(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
305ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaCurrentTime(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
306ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMediaTimeRemaining(RenderObject*, const PaintInfo&, const IntRect&) { return true; }
3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Methods for state querying
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ControlStates controlStatesForRenderer(const RenderObject* o) const;
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isActive(const RenderObject*) const;
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isChecked(const RenderObject*) const;
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isIndeterminate(const RenderObject*) const;
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isEnabled(const RenderObject*) const;
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isFocused(const RenderObject*) const;
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isPressed(const RenderObject*) const;
31721939df44de1705786c545cd1bf519d47250322dBen Murdoch    bool isSpinUpButtonPartPressed(const RenderObject*) const;
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isHovered(const RenderObject*) const;
31921939df44de1705786c545cd1bf519d47250322dBen Murdoch    bool isSpinUpButtonPartHovered(const RenderObject*) const;
3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isReadOnlyControl(const RenderObject*) const;
3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isDefault(const RenderObject*) const;
3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
324635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    mutable Color m_activeSelectionBackgroundColor;
325635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    mutable Color m_inactiveSelectionBackgroundColor;
326635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    mutable Color m_activeSelectionForegroundColor;
327635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    mutable Color m_inactiveSelectionForegroundColor;
328635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
329635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    mutable Color m_activeListBoxSelectionBackgroundColor;
330635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    mutable Color m_inactiveListBoxSelectionBackgroundColor;
331635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    mutable Color m_activeListBoxSelectionForegroundColor;
332635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    mutable Color m_inactiveListBoxSelectionForegroundColor;
333635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(NEW_THEME)
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Theme* m_theme; // The platform-specific theme.
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // RenderTheme_h
342