#ifndef ControlStates_h
#define ControlStates_h
#include <wtf/RetainPtr.h>
namespace WebCore {
#if PLATFORM(COCOA)
#ifndef __OBJC__
typedef struct objc_object *id;
#endif
typedef id PlatformControlInstance;
#endif
class ControlStates {
public:
enum {
HoverState = 1,
PressedState = 1 << 1,
FocusState = 1 << 2,
EnabledState = 1 << 3,
CheckedState = 1 << 4,
DefaultState = 1 << 5,
WindowInactiveState = 1 << 6,
IndeterminateState = 1 << 7,
SpinUpState = 1 << 8, AllStates = 0xffffffff
};
typedef unsigned States;
ControlStates(States states)
: m_states(states)
, m_initialized(false)
, m_needsRepaint(false)
, m_isDirty(false)
, m_timeSinceControlWasFocused(0)
#if PLATFORM(COCOA)
, m_controlInstance(nullptr)
#endif
{
}
ControlStates()
: ControlStates(0)
{
}
~ControlStates()
{
}
States states() const { return m_states; }
void setStates(States newStates)
{
if (newStates == m_states)
return;
m_states = newStates;
m_isDirty = m_initialized;
m_initialized = true;
}
bool needsRepaint() const { return m_needsRepaint; }
void setNeedsRepaint(bool r) { m_needsRepaint = r; }
bool isDirty() const { return m_isDirty; }
void setDirty(bool d) { m_isDirty = d; }
double timeSinceControlWasFocused() const { return m_timeSinceControlWasFocused; }
void setTimeSinceControlWasFocused(double time) { m_timeSinceControlWasFocused = time; }
#if PLATFORM(COCOA)
PlatformControlInstance platformControl() const { return m_controlInstance.get(); }
void setPlatformControl(PlatformControlInstance instance) { m_controlInstance = instance; }
#endif
private:
States m_states;
bool m_initialized;
bool m_needsRepaint;
bool m_isDirty;
double m_timeSinceControlWasFocused;
#if PLATFORM(COCOA)
RetainPtr<PlatformControlInstance> m_controlInstance;
#endif
};
}
#endif