Add CSS -webkit-appearance property for Apple Pay buttons
[WebKit-https.git] / Source / WebCore / platform / ControlStates.h
1 /*
2  * Copyright (C) 2014 Apple Inc. All Rights Reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef ControlStates_h
27 #define ControlStates_h
28
29 #include <wtf/RetainPtr.h>
30
31 namespace WebCore {
32
33 #if PLATFORM(COCOA)
34 #ifndef __OBJC__
35 typedef struct objc_object *id;
36 #endif
37 typedef id PlatformControlInstance;
38 #endif
39
40 class ControlStates {
41 public:
42     enum {
43         HoverState = 1,
44         PressedState = 1 << 1,
45         FocusState = 1 << 2,
46         EnabledState = 1 << 3,
47         CheckedState = 1 << 4,
48         DefaultState = 1 << 5,
49         WindowInactiveState = 1 << 6,
50         IndeterminateState = 1 << 7,
51         SpinUpState = 1 << 8, // Sub-state for HoverState and PressedState.
52         AllStates = 0xffffffff
53     };
54
55     typedef unsigned States;
56
57     ControlStates(States states)
58         : m_states(states)
59     {
60     }
61
62     ControlStates()
63         : ControlStates(0)
64     {
65     }
66
67     ~ControlStates()
68     {
69     }
70
71     States states() const { return m_states; }
72     void setStates(States newStates)
73     {
74         if (newStates == m_states)
75             return;
76         m_states = newStates;
77         m_isDirty = m_initialized;
78         m_initialized = true;
79     }
80
81     bool needsRepaint() const { return m_needsRepaint; }
82     void setNeedsRepaint(bool r) { m_needsRepaint = r; }
83
84     bool isDirty() const { return m_isDirty; }
85     void setDirty(bool d) { m_isDirty = d; }
86
87     double timeSinceControlWasFocused() const { return m_timeSinceControlWasFocused; }
88     void setTimeSinceControlWasFocused(double time) { m_timeSinceControlWasFocused = time; }
89
90 #if PLATFORM(COCOA)
91     PlatformControlInstance platformControl() const { return m_controlInstance.get(); }
92     void setPlatformControl(PlatformControlInstance instance) { m_controlInstance = instance; }
93 #endif
94
95 private:
96     States m_states;
97     bool m_initialized { false };
98     bool m_needsRepaint { false };
99     bool m_isDirty { false };
100     double m_timeSinceControlWasFocused { 0 };
101 #if PLATFORM(COCOA)
102     RetainPtr<PlatformControlInstance> m_controlInstance;
103 #endif
104 };
105
106 }
107
108 #endif