10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * This file is part of the WebKit project.
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2006 Apple Computer, Inc.
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com
60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2007 Holger Hans Peter Freyther
70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2007 Alp Toker <alp@atoker.com>
80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2008, 2009 Google, Inc.
90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * All rights reserved.
100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * This library is free software; you can redistribute it and/or
120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modify it under the terms of the GNU Library General Public
130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * License as published by the Free Software Foundation; either
140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * version 2 of the License, or (at your option) any later version.
150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * This library is distributed in the hope that it will be useful,
170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of
180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Library General Public License for more details.
200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * You should have received a copy of the GNU Library General Public License
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * along with this library; see the file COPYING.LIB.  If not, write to
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Boston, MA 02110-1301, USA.
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#ifndef RenderThemeChromiumSkia_h
290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define RenderThemeChromiumSkia_h
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderTheme.h"
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace WebCore {
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochclass RenderProgress;
36545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
37ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass RenderThemeChromiumSkia : public RenderTheme {
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    public:
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        RenderThemeChromiumSkia();
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual ~RenderThemeChromiumSkia();
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual String extraDefaultStyleSheet();
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual String extraQuirksStyleSheet();
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(VIDEO)
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual String extraMediaControlsStyleSheet();
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // A method asking if the theme's controls actually care about redrawing when hovered.
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual bool supportsHover(const RenderStyle*) const;
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // A method asking if the theme is able to draw the focus ring.
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual bool supportsFocusRing(const RenderStyle*) const;
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // The platform selection color.
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual Color platformActiveSelectionBackgroundColor() const;
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual Color platformInactiveSelectionBackgroundColor() const;
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual Color platformActiveSelectionForegroundColor() const;
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual Color platformInactiveSelectionForegroundColor() const;
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual Color platformFocusRingColor() const;
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // To change the blink interval, override caretBlinkIntervalInternal instead of this one so that we may share layout test code an intercepts.
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual double caretBlinkInterval() const;
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // System fonts.
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void systemFont(int propId, FontDescription&) const;
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual int minimumMenuListSize(RenderStyle*) const;
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void setCheckboxSize(RenderStyle*) const;
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void setRadioSize(RenderStyle*) const;
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        virtual void adjustButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
75ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintTextArea(RenderObject*, const PaintInfo&, const IntRect&);
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        virtual void adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
78ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintSearchField(RenderObject*, const PaintInfo&, const IntRect&);
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void adjustSearchFieldCancelButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
81ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintSearchFieldCancelButton(RenderObject*, const PaintInfo&, const IntRect&);
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void adjustSearchFieldDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void adjustSearchFieldResultsDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
86ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintSearchFieldResultsDecoration(RenderObject*, const PaintInfo&, const IntRect&);
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void adjustSearchFieldResultsButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
89ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintSearchFieldResultsButton(RenderObject*, const PaintInfo&, const IntRect&);
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
91ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintMediaControlsBackground(RenderObject*, const PaintInfo&, const IntRect&);
92ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintMediaSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
93ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintMediaVolumeSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void adjustSliderThumbSize(RenderObject*) const;
95ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintMediaSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
96ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintMediaVolumeSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
97ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintMediaPlayButton(RenderObject*, const PaintInfo&, const IntRect&);
98ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintMediaMuteButton(RenderObject*, const PaintInfo&, const IntRect&);
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // MenuList refers to an unstyled menulist (meaning a menulist without
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // background-color or border set) and MenuListButton refers to a styled
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // menulist (a menulist with background-color or border set). They have
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // this distinction to support showing aqua style themes whenever they
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // possibly can, which is something we don't want to replicate.
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        //
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // In short, we either go down the MenuList code path or the MenuListButton
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // codepath. We never go down both. And in both cases, they render the
1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // entire menulist.
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void adjustMenuListStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
111ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block        virtual bool paintMenuListButton(RenderObject*, const PaintInfo&, const IntRect&);
1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
113545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if ENABLE(PROGRESS_TAG)
114545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        virtual double animationRepeatIntervalForProgressBar(RenderProgress*) const;
115545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        virtual double animationDurationForProgressBar(RenderProgress*) const;
116545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif
117545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // These methods define the padding for the MenuList's inner block.
1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual int popupInternalPaddingLeft(RenderStyle*) const;
1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual int popupInternalPaddingRight(RenderStyle*) const;
1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual int popupInternalPaddingTop(RenderStyle*) const;
1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual int popupInternalPaddingBottom(RenderStyle*) const;
1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
124231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(VIDEO)
125231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        // Media controls
1262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        virtual bool hasOwnDisabledStateHandlingFor(ControlPart) const { return true; }
127231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
128231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // Provide a way to pass the default font size from the Settings object
1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // to the render theme.  FIXME: http://b/1129186 A cleaner way would be
1310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // to remove the default font size from this object and have callers
1320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // that need the value to get it directly from the appropriate Settings
1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // object.
1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        static void setDefaultFontSize(int);
1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    protected:
1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        static const String& defaultGUIFont();
1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // The default variable-width font size.  We use this as the default font
1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // size for the "system font", and as a base size (which we then shrink) for
1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // form control fonts.
1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        static float defaultFontSize;
1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual double caretBlinkIntervalInternal() const;
1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
146ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        static void setSizeIfAuto(RenderStyle*, const IntSize&);
147ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
148545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if ENABLE(PROGRESS_TAG)
149545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        IntRect determinateProgressValueRectFor(RenderProgress*, const IntRect&) const;
150545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        IntRect indeterminateProgressValueRectFor(RenderProgress*, const IntRect&) const;
151545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        IntRect progressValueRectFor(RenderProgress*, const IntRect&) const;
152545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif
153545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    private:
1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        int menuListInternalPadding(RenderStyle*, int paddingType) const;
1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        bool paintMediaButtonInternal(GraphicsContext*, const IntRect&, Image*);
157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        IntRect convertToPaintingRect(RenderObject* inputRenderer, const RenderObject* partRenderer, IntRect partRect, const IntRect& localOffset) const;
1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    };
1590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} // namespace WebCore
1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif // RenderThemeChromiumSkia_h
163