FloatPointGraph::Node* FloatPointGraph::findOrCreateNode(FloatPoint point) { for (auto& testNode : m_allNodes) { if (areEssentiallyEqual(*testNode, point)) return testNode.get(); } m_allNodes.append(std::make_unique<FloatPointGraph::Node>(point)); return m_allNodes.last().get(); }
FloatPoint RenderGeometryMap::mapToContainer(const FloatPoint& p, const RenderLayerModelObject* container) const { FloatPoint result; #if !ASSERT_DISABLED FloatPoint rendererMappedResult = m_mapping.last().m_renderer->localToAbsolute(p, m_mapCoordinatesFlags); #endif if (!hasFixedPositionStep() && !hasTransformStep() && !hasNonUniformStep() && (!container || (m_mapping.size() && container == m_mapping[0].m_renderer))) { result = p + roundedIntSize(m_accumulatedOffset); // Should convert to a LayoutPoint because of the uniqueness of LayoutUnit::round ASSERT(roundedIntPoint(LayoutPoint(rendererMappedResult)) == result); } else { TransformState transformState(TransformState::ApplyTransformDirection, p); mapToContainer(transformState, container); result = transformState.lastPlanarPoint(); ASSERT(areEssentiallyEqual(rendererMappedResult, result)); } return result; }