#ifndef RenderThemeEfl_h
#define RenderThemeEfl_h
#if ENABLE(VIDEO)
#include "MediaControlElements.h"
#endif
#include "RenderTheme.h"
#include <cairo.h>
typedef struct _Ecore_Evas Ecore_Evas;
typedef struct _Evas_Object Evas_Object;
namespace WebCore {
enum FormType { Button,
RadioButton,
TextField,
CheckBox,
ComboBox,
#if ENABLE(PROGRESS_TAG)
ProgressBar,
#endif
SearchField,
SearchFieldDecoration,
SearchFieldResultsButton,
SearchFieldResultsDecoration,
SearchFieldCancelButton,
SliderVertical,
SliderHorizontal,
#if ENABLE(VIDEO)
PlayPauseButton,
MuteUnMuteButton,
SeekForwardButton,
SeekBackwardButton,
FullScreenButton,
#endif
FormTypeLast
};
class RenderThemeEfl : public RenderTheme {
private:
RenderThemeEfl(Page*);
~RenderThemeEfl();
public:
static PassRefPtr<RenderTheme> create(Page*);
virtual bool supportsHover(const RenderStyle*) const { return true; }
virtual bool supportsFocusRing(const RenderStyle*) const;
virtual bool controlSupportsTints(const RenderObject*) const;
virtual bool supportsControlTints() const { return true; }
virtual LayoutUnit baselinePosition(const RenderObject*) const;
virtual Color platformActiveSelectionBackgroundColor() const { return m_activeSelectionBackgroundColor; }
virtual Color platformInactiveSelectionBackgroundColor() const { return m_inactiveSelectionBackgroundColor; }
virtual Color platformActiveSelectionForegroundColor() const { return m_activeSelectionForegroundColor; }
virtual Color platformInactiveSelectionForegroundColor() const { return m_inactiveSelectionForegroundColor; }
virtual Color platformFocusRingColor() const { return m_focusRingColor; }
virtual void themeChanged();
void setActiveSelectionColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
void setInactiveSelectionColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
void setFocusRingColor(int r, int g, int b, int a);
void setButtonTextColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
void setComboTextColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
void setEntryTextColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
void setSearchTextColor(int foreR, int foreG, int foreB, int foreA, int backR, int backG, int backB, int backA);
void adjustSizeConstraints(RenderStyle*, FormType) const;
virtual void systemFont(int propId, FontDescription&) const;
virtual void adjustCheckboxStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintCheckbox(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustRadioStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintRadio(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustButtonStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintButton(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustTextFieldStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintTextField(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustTextAreaStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintTextArea(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustMenuListStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintMenuList(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustMenuListButtonStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintMenuListButton(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustSearchFieldResultsDecorationStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintSearchFieldResultsDecoration(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustSearchFieldDecorationStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintSearchFieldDecoration(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustSearchFieldStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintSearchField(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustSearchFieldResultsButtonStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintSearchFieldResultsButton(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustSearchFieldCancelButtonStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintSearchFieldCancelButton(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustSliderTrackStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
virtual void adjustSliderThumbStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual void adjustSliderThumbSize(RenderStyle*) const;
virtual bool paintSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
static void setDefaultFontSize(int fontsize);
#if ENABLE(PROGRESS_TAG)
virtual void adjustProgressBarStyle(StyleResolver*, RenderStyle*, Element*) const;
virtual bool paintProgressBar(RenderObject*, const PaintInfo&, const IntRect&);
virtual double animationRepeatIntervalForProgressBar(RenderProgress*) const;
virtual double animationDurationForProgressBar(RenderProgress*) const;
#endif
#if ENABLE(VIDEO)
virtual String extraMediaControlsStyleSheet();
virtual String formatMediaControlsCurrentTime(float currentTime, float duration) const;
virtual bool hasOwnDisabledStateHandlingFor(ControlPart) const { return true; }
virtual bool paintMediaFullscreenButton(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaPlayButton(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaMuteButton(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaSeekBackButton(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaSeekForwardButton(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaVolumeSliderContainer(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaVolumeSliderTrack(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaVolumeSliderThumb(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaCurrentTime(RenderObject*, const PaintInfo&, const IntRect&);
#endif
protected:
static float defaultFontSize;
private:
void createCanvas();
void createEdje();
void applyEdjeColors();
void applyPartDescriptions();
const char* edjeGroupFromFormType(FormType) const;
void applyEdjeStateFromForm(Evas_Object*, ControlStates);
bool paintThemePart(RenderObject*, FormType, const PaintInfo&, const IntRect&);
bool isFormElementTooLargeToDisplay(const IntSize&);
#if ENABLE(VIDEO)
bool emitMediaButtonSignal(FormType, MediaControlElementType, const IntRect&);
#endif
Page* m_page;
Color m_activeSelectionBackgroundColor;
Color m_activeSelectionForegroundColor;
Color m_inactiveSelectionBackgroundColor;
Color m_inactiveSelectionForegroundColor;
Color m_focusRingColor;
Color m_buttonTextBackgroundColor;
Color m_buttonTextForegroundColor;
Color m_comboTextBackgroundColor;
Color m_comboTextForegroundColor;
Color m_entryTextBackgroundColor;
Color m_entryTextForegroundColor;
Color m_searchTextBackgroundColor;
Color m_searchTextForegroundColor;
Color m_sliderThumbColor;
#if ENABLE(VIDEO)
Color m_mediaPanelColor;
Color m_mediaSliderColor;
#endif
Ecore_Evas* m_canvas;
Evas_Object* m_edje;
struct ThemePartDesc {
FormType type;
LengthSize min;
LengthSize max;
LengthBox padding;
};
void applyPartDescriptionFallback(struct ThemePartDesc*);
void applyPartDescription(Evas_Object*, struct ThemePartDesc*);
struct ThemePartCacheEntry {
FormType type;
IntSize size;
Ecore_Evas* ee;
Evas_Object* o;
cairo_surface_t* surface;
};
struct ThemePartDesc m_partDescs[FormTypeLast];
Vector<struct ThemePartCacheEntry *> m_partCache;
struct ThemePartCacheEntry* cacheThemePartGet(FormType, const IntSize&);
void cacheThemePartFlush();
bool themePartCacheEntryReset(struct ThemePartCacheEntry*, FormType);
bool themePartCacheEntrySurfaceCreate(struct ThemePartCacheEntry*);
struct ThemePartCacheEntry* cacheThemePartNew(FormType, const IntSize&);
struct ThemePartCacheEntry* cacheThemePartReset(FormType, struct ThemePartCacheEntry*);
struct ThemePartCacheEntry* cacheThemePartResizeAndReset(FormType, const IntSize&, struct ThemePartCacheEntry*);
};
}
#endif // RenderThemeEfl_h