#ifndef TextIndicator_h
#define TextIndicator_h
#include "FloatRect.h"
#include "Image.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101000
#define ENABLE_LEGACY_TEXT_INDICATOR_STYLE 1
#else
#define ENABLE_LEGACY_TEXT_INDICATOR_STYLE 0
#endif
namespace WebCore {
class Frame;
class GraphicsContext;
class Range;
enum class TextIndicatorPresentationTransition {
None,
Bounce,
BounceAndCrossfade,
FadeIn,
Crossfade
};
struct TextIndicatorData {
FloatRect selectionRectInWindowCoordinates;
FloatRect textBoundingRectInWindowCoordinates;
Vector<FloatRect> textRectsInBoundingRectCoordinates;
float contentImageScaleFactor;
RefPtr<Image> contentImageWithHighlight;
RefPtr<Image> contentImage;
TextIndicatorPresentationTransition presentationTransition;
};
class TextIndicator : public RefCounted<TextIndicator> {
public:
static PassRefPtr<TextIndicator> create(const TextIndicatorData&);
static PassRefPtr<TextIndicator> createWithSelectionInFrame(Frame&, TextIndicatorPresentationTransition);
static PassRefPtr<TextIndicator> createWithRange(const Range&, TextIndicatorPresentationTransition);
~TextIndicator();
FloatRect selectionRectInWindowCoordinates() const { return m_data.selectionRectInWindowCoordinates; }
FloatRect textBoundingRectInWindowCoordinates() const { return m_data.textBoundingRectInWindowCoordinates; }
const Vector<FloatRect>& textRectsInBoundingRectCoordinates() const { return m_data.textRectsInBoundingRectCoordinates; }
float contentImageScaleFactor() const { return m_data.contentImageScaleFactor; }
Image *contentImageWithHighlight() const { return m_data.contentImageWithHighlight.get(); }
Image *contentImage() const { return m_data.contentImage.get(); }
TextIndicatorPresentationTransition presentationTransition() const { return m_data.presentationTransition; }
void setPresentationTransition(TextIndicatorPresentationTransition transition) { m_data.presentationTransition = transition; }
TextIndicatorData data() const { return m_data; }
private:
TextIndicator(const TextIndicatorData&);
TextIndicatorData m_data;
};
}
#endif // TextIndicator_h