Home | History | Annotate | Download | only in qt
      1 /*
      2  * This file is part of the theme implementation for form controls in WebCore.
      3  *
      4  * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
      5  *
      6  * This library is free software; you can redistribute it and/or
      7  * modify it under the terms of the GNU Library General Public
      8  * License as published by the Free Software Foundation; either
      9  * version 2 of the License, or (at your option) any later version.
     10  *
     11  * This library is distributed in the hope that it will be useful,
     12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14  * Library General Public License for more details.
     15  *
     16  * You should have received a copy of the GNU Library General Public License
     17  * along with this library; see the file COPYING.LIB.  If not, write to
     18  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     19  * Boston, MA 02110-1301, USA.
     20  *
     21  */
     22 #ifndef RenderThemeQt_h
     23 #define RenderThemeQt_h
     24 
     25 #include "RenderTheme.h"
     26 
     27 #include <QStyle>
     28 
     29 QT_BEGIN_NAMESPACE
     30 class QLineEdit;
     31 class QPainter;
     32 class QWidget;
     33 QT_END_NAMESPACE
     34 
     35 namespace WebCore {
     36 
     37 #if ENABLE(PROGRESS_TAG)
     38 class RenderProgress;
     39 #endif
     40 class RenderStyle;
     41 class HTMLMediaElement;
     42 class ScrollbarThemeQt;
     43 
     44 class RenderThemeQt : public RenderTheme {
     45 private:
     46     RenderThemeQt(Page* page);
     47     virtual ~RenderThemeQt();
     48 
     49 public:
     50     static PassRefPtr<RenderTheme> create(Page*);
     51 
     52     String extraDefaultStyleSheet();
     53 
     54     virtual bool supportsHover(const RenderStyle*) const;
     55     virtual bool supportsFocusRing(const RenderStyle* style) const;
     56 
     57     virtual int baselinePosition(const RenderObject* o) const;
     58 
     59     // A method asking if the control changes its tint when the window has focus or not.
     60     virtual bool controlSupportsTints(const RenderObject*) const;
     61 
     62     // A general method asking if any control tinting is supported at all.
     63     virtual bool supportsControlTints() const;
     64 
     65     virtual void adjustRepaintRect(const RenderObject* o, IntRect& r);
     66 
     67     // The platform selection color.
     68     virtual Color platformActiveSelectionBackgroundColor() const;
     69     virtual Color platformInactiveSelectionBackgroundColor() const;
     70     virtual Color platformActiveSelectionForegroundColor() const;
     71     virtual Color platformInactiveSelectionForegroundColor() const;
     72 
     73     virtual Color platformFocusRingColor() const;
     74 
     75     virtual void systemFont(int propId, FontDescription&) const;
     76     virtual Color systemColor(int cssValueId) const;
     77 
     78     virtual int minimumMenuListSize(RenderStyle*) const;
     79 
     80     virtual void adjustSliderThumbSize(RenderObject*) const;
     81 
     82     virtual double caretBlinkInterval() const;
     83 
     84     virtual bool isControlStyled(const RenderStyle*, const BorderData&, const FillLayer&, const Color& backgroundColor) const;
     85 #if USE(QT_MOBILE_THEME)
     86     virtual int popupInternalPaddingBottom(RenderStyle*) const;
     87 #endif
     88 
     89 #if ENABLE(VIDEO)
     90     virtual String extraMediaControlsStyleSheet();
     91 #endif
     92 
     93     QStyle* qStyle() const;
     94 
     95 protected:
     96     virtual bool paintCheckbox(RenderObject* o, const PaintInfo& i, const IntRect& r);
     97     virtual void setCheckboxSize(RenderStyle*) const;
     98 
     99     virtual bool paintRadio(RenderObject* o, const PaintInfo& i, const IntRect& r);
    100     virtual void setRadioSize(RenderStyle*) const;
    101 
    102     virtual void adjustButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    103     virtual bool paintButton(RenderObject*, const PaintInfo&, const IntRect&);
    104     virtual void setButtonSize(RenderStyle*) const;
    105 
    106     virtual bool paintTextField(RenderObject*, const PaintInfo&, const IntRect&);
    107     virtual void adjustTextFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    108 
    109     virtual bool paintTextArea(RenderObject*, const PaintInfo&, const IntRect&);
    110     virtual void adjustTextAreaStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    111 
    112     virtual bool paintMenuList(RenderObject* o, const PaintInfo& i, const IntRect& r);
    113     virtual void adjustMenuListStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    114 
    115     virtual bool paintMenuListButton(RenderObject*, const PaintInfo&, const IntRect&);
    116     virtual void adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    117 
    118 #if ENABLE(PROGRESS_TAG)
    119     virtual void adjustProgressBarStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    120     virtual bool paintProgressBar(RenderObject*, const PaintInfo&, const IntRect&);
    121 #endif
    122 
    123     virtual bool paintSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
    124     virtual void adjustSliderTrackStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    125 
    126     virtual bool paintSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
    127     virtual void adjustSliderThumbStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    128 
    129     virtual bool paintSearchField(RenderObject*, const PaintInfo&, const IntRect&);
    130     virtual void adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    131 
    132     virtual void adjustSearchFieldCancelButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    133     virtual bool paintSearchFieldCancelButton(RenderObject*, const PaintInfo&, const IntRect&);
    134 
    135     virtual void adjustSearchFieldDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    136     virtual bool paintSearchFieldDecoration(RenderObject*, const PaintInfo&, const IntRect&);
    137 
    138     virtual void adjustSearchFieldResultsDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    139     virtual bool paintSearchFieldResultsDecoration(RenderObject*, const PaintInfo&, const IntRect&);
    140 
    141 #if ENABLE(PROGRESS_TAG)
    142     // Returns the repeat interval of the animation for the progress bar.
    143     virtual double animationRepeatIntervalForProgressBar(RenderProgress* renderProgress) const;
    144     // Returns the duration of the animation for the progress bar.
    145     virtual double animationDurationForProgressBar(RenderProgress* renderProgress) const;
    146 #endif
    147 
    148 #if ENABLE(VIDEO)
    149     virtual bool paintMediaFullscreenButton(RenderObject*, const PaintInfo&, const IntRect&);
    150     virtual bool paintMediaPlayButton(RenderObject*, const PaintInfo&, const IntRect&);
    151     virtual bool paintMediaMuteButton(RenderObject*, const PaintInfo&, const IntRect&);
    152     virtual bool paintMediaSeekBackButton(RenderObject*, const PaintInfo&, const IntRect&);
    153     virtual bool paintMediaSeekForwardButton(RenderObject*, const PaintInfo&, const IntRect&);
    154     virtual bool paintMediaSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
    155     virtual bool paintMediaSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
    156     virtual bool paintMediaCurrentTime(RenderObject*, const PaintInfo&, const IntRect&);
    157     virtual bool paintMediaVolumeSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
    158     virtual bool paintMediaVolumeSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
    159     virtual String formatMediaControlsCurrentTime(float currentTime, float duration) const;
    160     virtual String formatMediaControlsRemainingTime(float currentTime, float duration) const;
    161     virtual bool hasOwnDisabledStateHandlingFor(ControlPart) const { return true; }
    162 private:
    163     void paintMediaBackground(QPainter* painter, const IntRect& r) const;
    164     double mediaControlsBaselineOpacity() const;
    165     QColor getMediaControlForegroundColor(RenderObject* o = 0) const;
    166 #endif
    167     void computeSizeBasedOnStyle(RenderStyle* renderStyle) const;
    168 
    169 private:
    170     bool supportsFocus(ControlPart) const;
    171 
    172     ControlPart initializeCommonQStyleOptions(QStyleOption&, RenderObject*) const;
    173 
    174     void setButtonPadding(RenderStyle*) const;
    175     void setPopupPadding(RenderStyle*) const;
    176 
    177     void setPaletteFromPageClientIfExists(QPalette&) const;
    178 
    179     int findFrameLineWidth(QStyle* style) const;
    180 
    181     QStyle* fallbackStyle() const;
    182 
    183     IntRect convertToPaintingRect(RenderObject* inputRenderer, const RenderObject* partRenderer, IntRect partRect, const IntRect& localOffset) const;
    184 
    185     Page* m_page;
    186 
    187 #ifdef Q_WS_MAC
    188     int m_buttonFontPixelSize;
    189 #endif
    190     QString m_buttonFontFamily;
    191 
    192     QStyle* m_fallbackStyle;
    193     mutable QLineEdit* m_lineEdit;
    194 };
    195 
    196 class StylePainter {
    197 public:
    198     explicit StylePainter(RenderThemeQt*, const PaintInfo&);
    199     explicit StylePainter(ScrollbarThemeQt*, GraphicsContext*);
    200     ~StylePainter();
    201 
    202     bool isValid() const { return painter && style; }
    203 
    204     QPainter* painter;
    205     QWidget* widget;
    206     QStyle* style;
    207 
    208     void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption& opt)
    209     { style->drawPrimitive(pe, &opt, painter, widget); }
    210     void drawControl(QStyle::ControlElement ce, const QStyleOption& opt)
    211     { style->drawControl(ce, &opt, painter, widget); }
    212     void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex& opt)
    213     { style->drawComplexControl(cc, &opt, painter, widget); }
    214 
    215 private:
    216     void init(GraphicsContext* context, QStyle*);
    217 
    218     QBrush oldBrush;
    219     bool oldAntialiasing;
    220 
    221     Q_DISABLE_COPY(StylePainter)
    222 };
    223 
    224 }
    225 
    226 #endif // RenderThemeQt_h
    227