IntRect enclosingIntRect(const FloatRect& rect) { IntPoint location = flooredIntPoint(rect.minXMinYCorner()); IntPoint maxPoint = ceiledIntPoint(rect.maxXMaxYCorner()); return IntRect(location, maxPoint - location); }
LayoutRect enclosingLayoutRect(const FloatRect& rect) { LayoutPoint location = flooredLayoutPoint(rect.minXMinYCorner()); LayoutPoint maxPoint = ceiledLayoutPoint(rect.maxXMaxYCorner()); return LayoutRect(location, maxPoint - location); }
bool VertexPair::overlapsRect(const FloatRect& rect) const { bool boundsOverlap = (minX() < rect.maxX()) && (maxX() > rect.x()) && (minY() < rect.maxY()) && (maxY() > rect.y()); if (!boundsOverlap) return false; float leftSideValues[4] = { leftSide(vertex1(), vertex2(), rect.minXMinYCorner()), leftSide(vertex1(), vertex2(), rect.maxXMinYCorner()), leftSide(vertex1(), vertex2(), rect.minXMaxYCorner()), leftSide(vertex1(), vertex2(), rect.maxXMaxYCorner()) }; int currentLeftSideSign = 0; for (unsigned i = 0; i < 4; ++i) { if (!leftSideValues[i]) continue; int leftSideSign = leftSideValues[i] > 0 ? 1 : -1; if (!currentLeftSideSign) currentLeftSideSign = leftSideSign; else if (currentLeftSideSign != leftSideSign) return true; } return false; }
IntRect enclosedIntRect(const FloatRect& rect) { IntPoint location = ceiledIntPoint(rect.minXMinYCorner()); IntPoint maxPoint = flooredIntPoint(rect.maxXMaxYCorner()); IntSize size = maxPoint - location; size.clampNegativeToZero(); return IntRect(location, size); }
LayoutRect enclosingLayoutRect(const FloatRect& rect) { #if ENABLE(SUBPIXEL_LAYOUT) LayoutPoint location = flooredLayoutPoint(rect.minXMinYCorner()); LayoutPoint maxPoint = ceiledLayoutPoint(rect.maxXMaxYCorner()); return LayoutRect(location, maxPoint - location); #else return enclosingIntRect(rect); #endif }
static FloatPointGraph::Polygon edgesForRect(FloatRect rect, FloatPointGraph& graph) { auto minMin = graph.findOrCreateNode(rect.minXMinYCorner()); auto minMax = graph.findOrCreateNode(rect.minXMaxYCorner()); auto maxMax = graph.findOrCreateNode(rect.maxXMaxYCorner()); auto maxMin = graph.findOrCreateNode(rect.maxXMinYCorner()); return FloatPointGraph::Polygon({ std::make_pair(minMin, maxMin), std::make_pair(maxMin, maxMax), std::make_pair(maxMax, minMax), std::make_pair(minMax, minMin) }); }
FloatRect encloseRectToDevicePixels(const FloatRect& rect, float deviceScaleFactor) { FloatPoint location = floorPointToDevicePixels(rect.minXMinYCorner(), deviceScaleFactor); FloatPoint maxPoint = ceilPointToDevicePixels(rect.maxXMaxYCorner(), deviceScaleFactor); return FloatRect(location, maxPoint - location); }