#ifndef QStyleFacade_h
#define QStyleFacade_h
#include <QPalette>
#include <QRect>
QT_BEGIN_NAMESPACE
class QStyle;
QT_END_NAMESPACE
namespace WebCore {
class Page;
class QStyleFacadeOption;
class QStyleFacade {
public:
enum ButtonSubElement {
PushButtonLayoutItem,
PushButtonContents
};
#define FOR_EACH_MAPPED_STATE(F, SEPARATOR) \
F(State_None, 0x00000000) SEPARATOR \
F(State_Enabled, 0x00000001) SEPARATOR \
F(State_Raised, 0x00000002) SEPARATOR \
F(State_Sunken, 0x00000004) SEPARATOR \
F(State_Off, 0x00000008) SEPARATOR \
F(State_NoChange, 0x00000010) SEPARATOR \
F(State_On, 0x00000020) SEPARATOR \
F(State_DownArrow, 0x00000040) SEPARATOR \
F(State_Horizontal, 0x00000080) SEPARATOR \
F(State_HasFocus, 0x00000100) SEPARATOR \
F(State_Top, 0x00000200) SEPARATOR \
F(State_Bottom, 0x00000400) SEPARATOR \
F(State_FocusAtBorder, 0x00000800) SEPARATOR \
F(State_AutoRaise, 0x00001000) SEPARATOR \
F(State_MouseOver, 0x00002000) SEPARATOR \
F(State_UpArrow, 0x00004000) SEPARATOR \
F(State_Selected, 0x00008000) SEPARATOR \
F(State_Active, 0x00010000) SEPARATOR \
F(State_Window, 0x00020000) SEPARATOR \
F(State_Open, 0x00040000) SEPARATOR \
F(State_Children, 0x00080000) SEPARATOR \
F(State_Item, 0x00100000) SEPARATOR \
F(State_Sibling, 0x00200000) SEPARATOR \
F(State_Editing, 0x00400000) SEPARATOR \
F(State_KeyboardFocusChange, 0x00800000) SEPARATOR \
F(State_ReadOnly, 0x02000000) SEPARATOR \
F(State_Small, 0x04000000) SEPARATOR \
F(State_Mini, 0x0800000)
#define COMMA ,
#define SEMICOLON ;
#define DEFINE_MAPPED_STATE(Name, Value) \
Name = Value
enum StateFlag {
FOR_EACH_MAPPED_STATE(DEFINE_MAPPED_STATE, COMMA)
};
Q_DECLARE_FLAGS(State, StateFlag)
#define FOR_EACH_MAPPED_METRIC(F, SEPARATOR) \
F(PM_ButtonMargin) SEPARATOR \
F(PM_DefaultFrameWidth) SEPARATOR \
F(PM_IndicatorWidth) SEPARATOR \
F(PM_ExclusiveIndicatorWidth) SEPARATOR \
F(PM_ButtonIconSize)
#define DEFINE_METRIC(F) F
enum PixelMetric {
FOR_EACH_MAPPED_METRIC(DEFINE_METRIC, COMMA)
};
#define FOR_EACH_SUBCONTROL(F, SEPARATOR) \
F(SC_None, 0x00000000) SEPARATOR \
F(SC_ScrollBarAddLine, 0x00000001) SEPARATOR \
F(SC_ScrollBarSubLine, 0x00000002) SEPARATOR \
F(SC_ScrollBarAddPage, 0x00000004) SEPARATOR \
F(SC_ScrollBarSubPage, 0x00000008) SEPARATOR \
F(SC_ScrollBarFirst, 0x00000010) SEPARATOR \
F(SC_ScrollBarLast, 0x00000020) SEPARATOR \
F(SC_ScrollBarSlider, 0x00000040) SEPARATOR \
F(SC_ScrollBarGroove, 0x00000080)
#define DEFINE_SUBCONTROL(F, Value) F
enum SubControl {
FOR_EACH_SUBCONTROL(DEFINE_SUBCONTROL, COMMA)
};
virtual ~QStyleFacade() { }
virtual QRect buttonSubElementRect(ButtonSubElement buttonElement, State, const QRect& originalRect) const = 0;
virtual int findFrameLineWidth() const = 0;
virtual int simplePixelMetric(PixelMetric, State = State_None) const = 0;
virtual int buttonMargin(State, const QRect& originalRect) const = 0;
virtual int sliderLength(Qt::Orientation) const = 0;
virtual int sliderThickness(Qt::Orientation) const = 0;
virtual int progressBarChunkWidth(const QSize&) const = 0;
virtual void getButtonMetrics(QString* buttonFontFamily, int* buttonFontPixelSize) const = 0;
virtual QSize comboBoxSizeFromContents(State, const QSize& contentsSize) const = 0;
virtual QSize pushButtonSizeFromContents(State, const QSize& contentsSize) const = 0;
enum ButtonType {
PushButton,
RadioButton,
CheckBox
};
virtual void paintButton(QPainter*, ButtonType, const QStyleFacadeOption&) = 0;
virtual void paintTextField(QPainter*, const QStyleFacadeOption&) = 0;
virtual void paintComboBox(QPainter*, const QStyleFacadeOption&) = 0;
virtual void paintComboBoxArrow(QPainter*, const QStyleFacadeOption&) = 0;
virtual void paintSliderTrack(QPainter*, const QStyleFacadeOption&) = 0;
virtual void paintSliderThumb(QPainter*, const QStyleFacadeOption&) = 0;
virtual void paintInnerSpinButton(QPainter*, const QStyleFacadeOption&, bool spinBoxUp) = 0;
virtual void paintProgressBar(QPainter*, const QStyleFacadeOption&, double progress, double animationProgress) = 0;
virtual int scrollBarExtent(bool mini) = 0;
virtual bool scrollBarMiddleClickAbsolutePositionStyleHint() const = 0;
virtual void paintScrollCorner(QPainter*, const QRect&) = 0;
virtual SubControl hitTestScrollBar(const QStyleFacadeOption&, const QPoint& pos) = 0;
virtual QRect scrollBarSubControlRect(const QStyleFacadeOption&, SubControl) = 0;
virtual void paintScrollBar(QPainter*, const QStyleFacadeOption&) = 0;
virtual QObject* widgetForPainter(QPainter*) = 0;
virtual bool isValid() const = 0;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleFacade::State)
struct QStyleFacadeOption {
QStyleFacadeOption()
: state(QStyleFacade::State_None)
, direction(Qt::LayoutDirectionAuto)
{
slider.orientation = Qt::Horizontal;
slider.upsideDown = false;
slider.minimum = 0;
slider.maximum = 0;
slider.position = 0;
slider.value = 0;
slider.singleStep = 0;
slider.pageStep = 0;
slider.activeSubControls = QStyleFacade::SC_None;
}
QStyleFacade::State state;
QRect rect;
Qt::LayoutDirection direction;
QPalette palette;
struct {
Qt::Orientation orientation;
bool upsideDown;
int minimum;
int maximum;
int position;
int value;
int singleStep;
int pageStep;
QStyleFacade::SubControl activeSubControls;
} slider;
};
}
#endif // QStyleFacade_h