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 enclosingIntRect(const FloatRect& rect) { IntPoint location = flooredIntPoint(rect.minXMinYCorner()); IntPoint maxPoint = ceiledIntPoint(rect.maxXMaxYCorner()); return IntRect(location, maxPoint - location); }
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 }
void PlatformCALayer::drawRepaintIndicator(CGContextRef context, PlatformCALayer* platformCALayer, int repaintCount, CGColorRef customBackgroundColor) { char text[16]; // that's a lot of repaints snprintf(text, sizeof(text), "%d", repaintCount); FloatRect indicatorBox = platformCALayer->bounds();\ indicatorBox.setLocation( { 1, 1 } ); indicatorBox.setSize(FloatSize(12 + 10 * strlen(text), 27)); CGContextStateSaver stateSaver(context); CGContextSetAlpha(context, 0.5f); CGContextBeginTransparencyLayerWithRect(context, indicatorBox, 0); if (customBackgroundColor) CGContextSetFillColorWithColor(context, customBackgroundColor); else CGContextSetRGBFillColor(context, 0, 0.5f, 0.25f, 1); if (platformCALayer->isOpaque()) CGContextFillRect(context, indicatorBox); else { Path boundsPath; boundsPath.moveTo(indicatorBox.maxXMinYCorner()); boundsPath.addLineTo(indicatorBox.maxXMaxYCorner()); boundsPath.addLineTo(indicatorBox.minXMaxYCorner()); const float cornerChunk = 8; boundsPath.addLineTo(FloatPoint(indicatorBox.x(), indicatorBox.y() + cornerChunk)); boundsPath.addLineTo(FloatPoint(indicatorBox.x() + cornerChunk, indicatorBox.y())); boundsPath.closeSubpath(); CGContextAddPath(context, boundsPath.platformPath()); CGContextFillPath(context); } if (platformCALayer->owner()->isUsingDisplayListDrawing(platformCALayer)) { CGContextSetRGBStrokeColor(context, 0, 0, 0, 0.65); CGContextSetLineWidth(context, 2); CGContextStrokeRect(context, indicatorBox); } if (platformCALayer->acceleratesDrawing()) CGContextSetRGBFillColor(context, 1, 0, 0, 1); else CGContextSetRGBFillColor(context, 1, 1, 1, 1); platformCALayer->drawTextAtPoint(context, indicatorBox.x() + 5, indicatorBox.y() + 22, CGSizeMake(1, -1), 22, text, strlen(text)); CGContextEndTransparencyLayer(context); }
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); }