4ea197dbaa3fc9e26cc33bfa52031039685aa06b
[WebKit-https.git] / Source / WebCore / page / TextIndicator.h
1 /*
2  * Copyright (C) 2010 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. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef TextIndicator_h
27 #define TextIndicator_h
28
29 #include "FloatRect.h"
30 #include "Image.h"
31 #include <wtf/PassRefPtr.h>
32 #include <wtf/RefCounted.h>
33 #include <wtf/Vector.h>
34
35 #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101000
36 #define ENABLE_LEGACY_TEXT_INDICATOR_STYLE 1
37 #else
38 #define ENABLE_LEGACY_TEXT_INDICATOR_STYLE 0
39 #endif
40
41 namespace WebCore {
42
43 class Frame;
44 class GraphicsContext;
45 class Range;
46
47 enum class TextIndicatorPresentationTransition {
48     None,
49
50     // These animations drive themselves.
51     Bounce,
52     BounceAndCrossfade,
53
54     // These animations need to be driven manually via TextIndicatorWindow::setAnimationProgress.
55     FadeIn,
56     Crossfade
57 };
58
59 struct TextIndicatorData {
60     FloatRect selectionRectInWindowCoordinates;
61     FloatRect textBoundingRectInWindowCoordinates;
62     Vector<FloatRect> textRectsInBoundingRectCoordinates;
63     float contentImageScaleFactor;
64     RefPtr<Image> contentImageWithHighlight;
65     RefPtr<Image> contentImage;
66     TextIndicatorPresentationTransition presentationTransition;
67 };
68
69 class TextIndicator : public RefCounted<TextIndicator> {
70 public:
71     WEBCORE_EXPORT static PassRefPtr<TextIndicator> create(const TextIndicatorData&);
72     WEBCORE_EXPORT static PassRefPtr<TextIndicator> createWithSelectionInFrame(Frame&, TextIndicatorPresentationTransition);
73     WEBCORE_EXPORT static PassRefPtr<TextIndicator> createWithRange(const Range&, TextIndicatorPresentationTransition);
74
75     WEBCORE_EXPORT ~TextIndicator();
76
77     FloatRect selectionRectInWindowCoordinates() const { return m_data.selectionRectInWindowCoordinates; }
78     FloatRect textBoundingRectInWindowCoordinates() const { return m_data.textBoundingRectInWindowCoordinates; }
79     const Vector<FloatRect>& textRectsInBoundingRectCoordinates() const { return m_data.textRectsInBoundingRectCoordinates; }
80     float contentImageScaleFactor() const { return m_data.contentImageScaleFactor; }
81     Image *contentImageWithHighlight() const { return m_data.contentImageWithHighlight.get(); }
82     Image *contentImage() const { return m_data.contentImage.get(); }
83
84     TextIndicatorPresentationTransition presentationTransition() const { return m_data.presentationTransition; }
85     void setPresentationTransition(TextIndicatorPresentationTransition transition) { m_data.presentationTransition = transition; }
86
87     TextIndicatorData data() const { return m_data; }
88     
89     bool wantsBounce() const;
90     bool wantsContentCrossfade() const;
91     bool wantsFadeIn() const;
92     bool wantsManualAnimation() const;
93
94 private:
95     TextIndicator(const TextIndicatorData&);
96
97     TextIndicatorData m_data;
98 };
99
100 } // namespace WebKit
101
102 #endif // TextIndicator_h