#pragma once
#include "RenderObject.h"
namespace WebCore {
struct HighlightRangeData;
class RenderMultiColumnSpannerPlaceholder;
class RenderRange {
public:
RenderRange() = default;
RenderRange(RenderObject* start, RenderObject* end, unsigned startOffset, unsigned endOffset)
: m_start(makeWeakPtr(start))
, m_end(makeWeakPtr(end))
, m_startOffset(startOffset)
, m_endOffset(endOffset)
{
}
RenderObject* start() const { return m_start.get(); }
RenderObject* end() const { return m_end.get(); }
unsigned startOffset() const { return m_startOffset; }
unsigned endOffset() const { return m_endOffset; }
bool operator==(const RenderRange& other) const
{
return m_start == other.m_start && m_end == other.m_end && m_startOffset == other.m_startOffset && m_endOffset == other.m_endOffset;
}
private:
WeakPtr<RenderObject> m_start;
WeakPtr<RenderObject> m_end;
unsigned m_startOffset { 0 };
unsigned m_endOffset { 0 };
};
class RenderRangeIterator {
public:
RenderRangeIterator(RenderObject* start);
RenderObject* current() const;
RenderObject* next();
private:
void checkForSpanner();
RenderObject* m_current { nullptr };
Vector<RenderMultiColumnSpannerPlaceholder*> m_spannerStack;
};
class HighlightData {
public:
void setRenderRange(const RenderRange&);
bool setRenderRange(const HighlightRangeData&); const RenderRange& get() const { return m_renderRange; }
RenderObject* start() const { return m_renderRange.start(); }
RenderObject* end() const { return m_renderRange.end(); }
unsigned startOffset() const { return m_renderRange.startOffset(); }
unsigned endOffset() const { return m_renderRange.endOffset(); }
RenderObject::HighlightState highlightStateForRenderer(const RenderObject&);
protected:
RenderRange m_renderRange;
};
}