This source file includes following definitions.
- translate
- applyTransform
- flatten
- flattenWithTransform
- mappedPoint
- mappedQuad
- mappedArea
- boundsOfMappedArea
#include "config.h"
#include "core/rendering/HitTestingTransformState.h"
#include "platform/geometry/LayoutRect.h"
#include "wtf/PassOwnPtr.h"
namespace WebCore {
void HitTestingTransformState::translate(int x, int y, TransformAccumulation accumulate)
{
m_accumulatedTransform.translate(x, y);
if (accumulate == FlattenTransform)
flattenWithTransform(m_accumulatedTransform);
m_accumulatingTransform = accumulate == AccumulateTransform;
}
void HitTestingTransformState::applyTransform(const TransformationMatrix& transformFromContainer, TransformAccumulation accumulate)
{
m_accumulatedTransform.multiply(transformFromContainer);
if (accumulate == FlattenTransform)
flattenWithTransform(m_accumulatedTransform);
m_accumulatingTransform = accumulate == AccumulateTransform;
}
void HitTestingTransformState::flatten()
{
flattenWithTransform(m_accumulatedTransform);
}
void HitTestingTransformState::flattenWithTransform(const TransformationMatrix& t)
{
TransformationMatrix inverseTransform = t.inverse();
m_lastPlanarPoint = inverseTransform.projectPoint(m_lastPlanarPoint);
m_lastPlanarQuad = inverseTransform.projectQuad(m_lastPlanarQuad);
m_lastPlanarArea = inverseTransform.projectQuad(m_lastPlanarArea);
m_accumulatedTransform.makeIdentity();
m_accumulatingTransform = false;
}
FloatPoint HitTestingTransformState::mappedPoint() const
{
return m_accumulatedTransform.inverse().projectPoint(m_lastPlanarPoint);
}
FloatQuad HitTestingTransformState::mappedQuad() const
{
return m_accumulatedTransform.inverse().projectQuad(m_lastPlanarQuad);
}
FloatQuad HitTestingTransformState::mappedArea() const
{
return m_accumulatedTransform.inverse().projectQuad(m_lastPlanarArea);
}
LayoutRect HitTestingTransformState::boundsOfMappedArea() const
{
return m_accumulatedTransform.inverse().clampedBoundsOfProjectedQuad(m_lastPlanarArea);
}
}