Home | History | Annotate | Download | only in efl
      1 /*
      2  * This file is part of the WebKit project.
      3  *
      4  * Copyright (C) 2006 Apple Computer, Inc.
      5  * Copyright (C) 2006 Michael Emmel mike.emmel (at) gmail.com
      6  * Copyright (C) 2007 Holger Hans Peter Freyther
      7  * Copyright (C) 2007 Alp Toker <alp (at) atoker.com>
      8  * Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia
      9  * Copyright (C) 2009-2010 ProFUSION embedded systems
     10  * Copyright (C) 2009-2010 Samsung Electronics
     11  * All rights reserved.
     12  *
     13  * This library is free software; you can redistribute it and/or
     14  * modify it under the terms of the GNU Library General Public
     15  * License as published by the Free Software Foundation; either
     16  * version 2 of the License, or (at your option) any later version.
     17  *
     18  * This library is distributed in the hope that it will be useful,
     19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     21  * Library General Public License for more details.
     22  *
     23  * You should have received a copy of the GNU Library General Public License
     24  * along with this library; see the file COPYING.LIB.  If not, write to
     25  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     26  * Boston, MA 02110-1301, USA.
     27  *
     28  */
     29 
     30 #ifndef RenderThemeEfl_h
     31 #define RenderThemeEfl_h
     32 
     33 #if ENABLE(VIDEO)
     34 #include "MediaControlElements.h"
     35 #endif
     36 #include "RenderTheme.h"
     37 
     38 #include <cairo.h>
     39 
     40 typedef struct _Ecore_Evas Ecore_Evas;
     41 typedef struct _Evas_Object Evas_Object;
     42 
     43 namespace WebCore {
     44 
     45 enum FormType { // KEEP IN SYNC WITH edjeGroupFromFormType()
     46     Button,
     47     RadioButton,
     48     TextField,
     49     CheckBox,
     50     ComboBox,
     51 #if ENABLE(PROGRESS_TAG)
     52     ProgressBar,
     53 #endif
     54     SearchField,
     55     SearchFieldDecoration,
     56     SearchFieldResultsButton,
     57     SearchFieldResultsDecoration,
     58     SearchFieldCancelButton,
     59     SliderVertical,
     60     SliderHorizontal,
     61 #if ENABLE(VIDEO)
     62     PlayPauseButton,
     63     MuteUnMuteButton,
     64     SeekForwardButton,
     65     SeekBackwardButton,
     66 #endif
     67     FormTypeLast
     68 };
     69 
     70 class RenderThemeEfl : public RenderTheme {
     71 private:
     72     RenderThemeEfl(Page*);
     73     ~RenderThemeEfl();
     74 
     75 public:
     76     static PassRefPtr<RenderTheme> create(Page*);
     77 
     78     // A method asking if the theme's controls actually care about redrawing when hovered.
     79     virtual bool supportsHover(const RenderStyle*) const { return true; }
     80 
     81     // A method asking if the theme is able to draw the focus ring.
     82     virtual bool supportsFocusRing(const RenderStyle*) const;
     83 
     84     // A method asking if the control changes its tint when the window has focus or not.
     85     virtual bool controlSupportsTints(const RenderObject*) const;
     86 
     87     // A general method asking if any control tinting is supported at all.
     88     virtual bool supportsControlTints() const { return true; }
     89 
     90     // A method to obtain the baseline position for a "leaf" control.  This will only be used if a baseline
     91     // position cannot be determined by examining child content. Checkboxes and radio buttons are examples of
     92     // controls that need to do this.
     93     virtual int baselinePosition(const RenderObject*) const;
     94 
     95     virtual Color platformActiveSelectionBackgroundColor() const { return m_activeSelectionBackgroundColor; }
     96     virtual Color platformInactiveSelectionBackgroundColor() const { return m_inactiveSelectionBackgroundColor; }
     97     virtual Color platformActiveSelectionForegroundColor() const { return m_activeSelectionForegroundColor; }
     98     virtual Color platformInactiveSelectionForegroundColor() const { return m_inactiveSelectionForegroundColor; }
     99     virtual Color platformFocusRingColor() const { return m_focusRingColor; }
    100 
    101     virtual void themeChanged();
    102 
    103     // Set platform colors and notify they changed
    104     void setActiveSelectionColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
    105     void setInactiveSelectionColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
    106     void setFocusRingColor(int r, int g, int b, int a);
    107 
    108     void setButtonTextColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
    109     void setComboTextColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
    110     void setEntryTextColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
    111     void setSearchTextColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
    112 
    113     void adjustSizeConstraints(RenderStyle*, FormType) const;
    114 
    115 
    116     // System fonts.
    117     virtual void systemFont(int propId, FontDescription&) const;
    118 
    119     virtual void adjustCheckboxStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    120     virtual bool paintCheckbox(RenderObject*, const PaintInfo&, const IntRect&);
    121 
    122     virtual void adjustRadioStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    123     virtual bool paintRadio(RenderObject*, const PaintInfo&, const IntRect&);
    124 
    125     virtual void adjustButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    126     virtual bool paintButton(RenderObject*, const PaintInfo&, const IntRect&);
    127 
    128     virtual void adjustTextFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    129     virtual bool paintTextField(RenderObject*, const PaintInfo&, const IntRect&);
    130 
    131     virtual void adjustTextAreaStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    132     virtual bool paintTextArea(RenderObject*, const PaintInfo&, const IntRect&);
    133 
    134     virtual void adjustMenuListStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    135     virtual bool paintMenuList(RenderObject*, const PaintInfo&, const IntRect&);
    136 
    137     virtual void adjustSearchFieldResultsDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    138     virtual bool paintSearchFieldResultsDecoration(RenderObject*, const PaintInfo&, const IntRect&);
    139 
    140     virtual void adjustSearchFieldDecorationStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    141     virtual bool paintSearchFieldDecoration(RenderObject*, const PaintInfo&, const IntRect&);
    142 
    143     virtual void adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    144     virtual bool paintSearchField(RenderObject*, const PaintInfo&, const IntRect&);
    145 
    146     virtual void adjustSearchFieldResultsButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    147     virtual bool paintSearchFieldResultsButton(RenderObject*, const PaintInfo&, const IntRect&);
    148 
    149     virtual void adjustSearchFieldCancelButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    150     virtual bool paintSearchFieldCancelButton(RenderObject*, const PaintInfo&, const IntRect&);
    151 
    152     virtual void adjustSliderTrackStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    153     virtual bool paintSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
    154 
    155     virtual void adjustSliderThumbStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    156     virtual bool paintSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
    157 
    158     static void setDefaultFontSize(int fontsize);
    159 
    160 #if ENABLE(PROGRESS_TAG)
    161     virtual void adjustProgressBarStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
    162     virtual bool paintProgressBar(RenderObject*, const PaintInfo&, const IntRect&);
    163 #endif
    164 
    165 #if ENABLE(VIDEO)
    166     virtual String extraMediaControlsStyleSheet();
    167     virtual String formatMediaControlsCurrentTime(float currentTime, float duration) const;
    168 
    169     virtual bool paintMediaFullscreenButton(RenderObject*, const PaintInfo&, const IntRect&);
    170     virtual bool paintMediaPlayButton(RenderObject*, const PaintInfo&, const IntRect&);
    171     virtual bool paintMediaMuteButton(RenderObject*, const PaintInfo&, const IntRect&);
    172     virtual bool paintMediaSeekBackButton(RenderObject*, const PaintInfo&, const IntRect&);
    173     virtual bool paintMediaSeekForwardButton(RenderObject*, const PaintInfo&, const IntRect&);
    174     virtual bool paintMediaSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
    175     virtual bool paintMediaSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
    176     virtual bool paintMediaVolumeSliderContainer(RenderObject*, const PaintInfo&, const IntRect&);
    177     virtual bool paintMediaVolumeSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
    178     virtual bool paintMediaVolumeSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
    179     virtual bool paintMediaCurrentTime(RenderObject*, const PaintInfo&, const IntRect&);
    180 #endif
    181 
    182 protected:
    183     static float defaultFontSize;
    184 
    185 private:
    186     void createCanvas();
    187     void createEdje();
    188     void applyEdjeColors();
    189     void applyPartDescriptions();
    190     const char* edjeGroupFromFormType(FormType) const;
    191     void applyEdjeStateFromForm(Evas_Object*, ControlStates);
    192     bool paintThemePart(RenderObject*, FormType, const PaintInfo&, const IntRect&);
    193 
    194 #if ENABLE(VIDEO)
    195     bool emitMediaButtonSignal(FormType, MediaControlElementType, const IntRect&);
    196 #endif
    197 
    198     Page* m_page;
    199     Color m_activeSelectionBackgroundColor;
    200     Color m_activeSelectionForegroundColor;
    201     Color m_inactiveSelectionBackgroundColor;
    202     Color m_inactiveSelectionForegroundColor;
    203     Color m_focusRingColor;
    204     Color m_buttonTextBackgroundColor;
    205     Color m_buttonTextForegroundColor;
    206     Color m_comboTextBackgroundColor;
    207     Color m_comboTextForegroundColor;
    208     Color m_entryTextBackgroundColor;
    209     Color m_entryTextForegroundColor;
    210     Color m_searchTextBackgroundColor;
    211     Color m_searchTextForegroundColor;
    212     Ecore_Evas* m_canvas;
    213     Evas_Object* m_edje;
    214 
    215     struct ThemePartDesc {
    216         FormType type;
    217         LengthSize min;
    218         LengthSize max;
    219         LengthBox padding;
    220     };
    221     void applyPartDescriptionFallback(struct ThemePartDesc*);
    222     void applyPartDescription(Evas_Object*, struct ThemePartDesc*);
    223 
    224     struct ThemePartCacheEntry {
    225         FormType type;
    226         IntSize size;
    227         Ecore_Evas* ee;
    228         Evas_Object* o;
    229         cairo_surface_t* surface;
    230     };
    231 
    232     struct ThemePartDesc m_partDescs[FormTypeLast];
    233 
    234     // this should be small and not so frequently used,
    235     // so use a vector and do linear searches
    236     Vector<struct ThemePartCacheEntry *> m_partCache;
    237 
    238     // get (use, create or replace) entry from cache
    239     struct ThemePartCacheEntry* cacheThemePartGet(FormType, const IntSize&);
    240     // flush cache, deleting all entries
    241     void cacheThemePartFlush();
    242 
    243     // internal, used by cacheThemePartGet()
    244     bool themePartCacheEntryReset(struct ThemePartCacheEntry*, FormType);
    245     bool themePartCacheEntrySurfaceCreate(struct ThemePartCacheEntry*);
    246     struct ThemePartCacheEntry* cacheThemePartNew(FormType, const IntSize&);
    247     struct ThemePartCacheEntry* cacheThemePartReset(FormType, struct ThemePartCacheEntry*);
    248     struct ThemePartCacheEntry* cacheThemePartResizeAndReset(FormType, const IntSize&, struct ThemePartCacheEntry*);
    249 
    250 };
    251 }
    252 
    253 #endif // RenderThemeEfl_h
    254