本文整理汇总了C++中FloatRect::contains方法的典型用法代码示例。如果您正苦于以下问题:C++ FloatRect::contains方法的具体用法?C++ FloatRect::contains怎么用?C++ FloatRect::contains使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FloatRect
的用法示例。
在下文中一共展示了FloatRect::contains方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: characterNumberAtPositionCallback
bool SVGTextQuery::characterNumberAtPositionCallback(Data* queryData, const SVGTextFragment& fragment) const
{
CharacterNumberAtPositionData* data = static_cast<CharacterNumberAtPositionData*>(queryData);
// Test the query point against the bounds of the entire fragment first.
FloatRect fragmentExtents = calculateFragmentBoundaries(*queryData->textRenderer, fragment);
if (!fragmentExtents.contains(data->position))
return false;
// Iterate through the glyphs in this fragment, and check if their extents
// contain the query point.
FloatRect extent;
const Vector<SVGTextMetrics>& textMetrics = queryData->textRenderer->layoutAttributes()->textMetricsValues();
unsigned textMetricsOffset = fragment.metricsListOffset;
unsigned fragmentOffset = 0;
while (fragmentOffset < fragment.length) {
calculateGlyphBoundaries(queryData, fragment, fragmentOffset, extent);
if (extent.contains(data->position)) {
// Compute the character offset of the glyph within the text box
// and add to processedCharacters.
unsigned characterOffset = fragment.characterOffset + fragmentOffset;
data->processedCharacters += characterOffset - data->textBox->start();
return true;
}
fragmentOffset += textMetrics[textMetricsOffset].length();
textMetricsOffset++;
}
return false;
}
示例2: characterNumberAtPositionCallback
static bool characterNumberAtPositionCallback(QueryData* queryData, const SVGTextFragment& fragment)
{
CharacterNumberAtPositionData* data = static_cast<CharacterNumberAtPositionData*>(queryData);
// Test the query point against the bounds of the entire fragment first.
FloatRect fragmentExtents = calculateFragmentBoundaries(*queryData->textLayoutObject, fragment);
if (!fragmentExtents.contains(data->position))
return false;
// Iterate through the glyphs in this fragment, and check if their extents
// contain the query point.
FloatRect extent;
const Vector<SVGTextMetrics>& textMetrics = queryData->textLayoutObject->layoutAttributes()->textMetricsValues();
unsigned textMetricsOffset = fragment.metricsListOffset;
unsigned fragmentOffset = 0;
while (fragmentOffset < fragment.length) {
calculateGlyphBoundaries(queryData, fragment, fragmentOffset, extent);
if (extent.contains(data->position)) {
// Compute the character offset of the glyph within the text node.
unsigned offsetInBox = fragment.characterOffset - queryData->textBox->start() + fragmentOffset;
data->offsetInTextNode = logicalOffsetInTextNode(*queryData->textLayoutObject, queryData->textBox, offsetInBox);
data->hitLayoutObject = data->textLayoutObject;
return true;
}
fragmentOffset += textMetrics[textMetricsOffset].length();
textMetricsOffset++;
}
return false;
}
示例3: CheckforColisionwithTrees
int Environment::CheckforColisionwithTrees(Player &p)
{
for (unsigned int i = 0; i < TreeLocations.size() ; i++ ) //TO DO Change to an iterators Loop
{
Tree.setPosition(TreeLocations.at(i).at(0), TreeLocations.at(i).at(1));
TreeBounds = Tree.getGlobalBounds();
// Player.Direction x=0 y=1
TreeBounds.left = TreeBounds.left + 18;
TreeBounds.top = TreeBounds.top + 47;
TreeBounds.width -= 28;
TreeBounds.height -= 47;
FloatRect CollisionArea;
if (TreeBounds.intersects(p.Bounds , CollisionArea))
{
if (CollisionArea.width > CollisionArea.height)
{
//Collision is ether form top or bottom
if (CollisionArea.contains({CollisionArea.left , p.psprite.getPosition().y}))
{
//Something is Coliding with the Bottom of the Tree
return 8;
} else
{
//Something is coliding with the Top of the Tree
return 4;
}
}
if (CollisionArea.width < CollisionArea.height)
{
//Collision is either form left or Right
if (CollisionArea.contains({p.psprite.getPosition().x + p.psprite.getGlobalBounds().width - 1.f, CollisionArea.top + 1.f}))
{
//The Left Side of the Tree is hit
return 1;
} else
{
return 2;
}
}
}
}
return 0;
}
示例4: intersectsAllowingEmpty
// FloatRect::intersects does not consider horizontal or vertical lines (because of isEmpty()).
// So special-case handling of such lines.
static bool intersectsAllowingEmpty(const FloatRect& r, const FloatRect& other)
{
if (r.isEmpty() && other.isEmpty())
return false;
if (r.isEmpty() && !other.isEmpty()) {
return (other.contains(r.x(), r.y()) && !other.contains(r.maxX(), r.maxY()))
|| (!other.contains(r.x(), r.y()) && other.contains(r.maxX(), r.maxY()));
}
if (other.isEmpty() && !r.isEmpty())
return intersectsAllowingEmpty(other, r);
return r.intersects(other);
}
示例5: takeItem
void MainPerson::takeItem(Field &field, vector<Item> &items, float x, float y)
{
if (findItem->typeItem != emptyItem->typeItem) {
if (isInUseField(x, y, true)) {
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Если есть место
if (isEmptySlot()) {
////////////////////////////////////////////////////////////////////
// Если нашли предмет
int levelItem = items[findItemFromList].currentLevel;
Sprite *spriteItem = items[findItemFromList].mainSprite;
FloatRect objectItem = spriteItem->getGlobalBounds();
if (objectItem.contains(x, y) && levelItem == currentLevelFloor + 1) {
// Перемещаем в инвентарь
printf("added!1\n");
itemFromPanelQuickAccess[emptySlot] = items[findItemFromList];
itemFromPanelQuickAccess[emptySlot].mainSprite->scale(normalSize);
// Удаляем из мира
items.erase(items.begin() + findItemFromList);
}
////////////////////////////////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
}
示例6: checkIntersectionOrEnclosure
bool SVGSVGElement::checkIntersectionOrEnclosure(
const SVGElement& element,
const FloatRect& rect,
CheckIntersectionOrEnclosure mode) const {
LayoutObject* layoutObject = element.layoutObject();
ASSERT(!layoutObject || layoutObject->style());
if (!layoutObject ||
layoutObject->style()->pointerEvents() == EPointerEvents::None)
return false;
if (!isIntersectionOrEnclosureTarget(layoutObject))
return false;
AffineTransform ctm = toSVGGraphicsElement(element).computeCTM(
AncestorScope, DisallowStyleUpdate, this);
FloatRect mappedRepaintRect =
ctm.mapRect(layoutObject->visualRectInLocalSVGCoordinates());
bool result = false;
switch (mode) {
case CheckIntersection:
result = intersectsAllowingEmpty(rect, mappedRepaintRect);
break;
case CheckEnclosure:
result = rect.contains(mappedRepaintRect);
break;
default:
ASSERT_NOT_REACHED();
break;
}
return result;
}
示例7: ASSERT
void CanvasRenderingContext2D::drawImage(HTMLImageElement* image, const FloatRect& srcRect, const FloatRect& dstRect,
ExceptionCode& ec)
{
ASSERT(image);
ec = 0;
FloatRect imageRect = FloatRect(FloatPoint(), size(image));
if (!(imageRect.contains(srcRect) && srcRect.width() >= 0 && srcRect.height() >= 0
&& dstRect.width() >= 0 && dstRect.height() >= 0)) {
ec = INDEX_SIZE_ERR;
return;
}
if (srcRect.isEmpty() || dstRect.isEmpty())
return;
GraphicsContext* c = drawingContext();
if (!c)
return;
CachedImage* cachedImage = image->cachedImage();
if (!cachedImage)
return;
FloatRect sourceRect = c->roundToDevicePixels(srcRect);
FloatRect destRect = c->roundToDevicePixels(dstRect);
willDraw(destRect);
#ifdef __OWB__
c->drawImage(cachedImage->image()->nativeImageForCurrentFrame(), destRect, sourceRect, state().m_globalComposite);
cachedImage->image()->startAnimation();
#else
c->drawImage(cachedImage->image(), destRect, sourceRect, state().m_globalComposite);
#endif //__OWB__
}
示例8: addNodeToRectBasedTestResult
bool HitTestResult::addNodeToRectBasedTestResult(Node* node, const HitTestRequest& request, const HitTestLocation& locationInContainer, const FloatRect& rect)
{
// If it is not a rect-based hit test, this method has to be no-op.
// Return false, so the hit test stops.
if (!isRectBasedTest())
return false;
// If node is null, return true so the hit test can continue.
if (!node)
return true;
if (!request.allowsShadowContent())
node = node->shadowAncestorNode();
mutableRectBasedTestResult().add(node);
bool regionFilled = rect.contains(locationInContainer.boundingBox());
// FIXME: This code (incorrectly) attempts to correct for culled inline nodes. See https://bugs.webkit.org/show_bug.cgi?id=85849.
if (node->renderer()->isInline() && !regionFilled) {
for (RenderObject* curr = node->renderer()->parent(); curr; curr = curr->parent()) {
if (!curr->isRenderInline())
break;
// We need to make sure the nodes for culled inlines get included.
RenderInline* currInline = toRenderInline(curr);
if (currInline->alwaysCreateLineBoxes())
break;
if (currInline->visibleToHitTesting() && currInline->node())
mutableRectBasedTestResult().add(currInline->node()->shadowAncestorNode());
}
}
return !regionFilled;
}
示例9: drawTiled
void Image::drawTiled(GraphicsContext* ctxt, const FloatRect& destRect, const FloatPoint& srcPoint, const FloatSize& scaledTileSize, SkXfermode::Mode op, const IntSize& repeatSpacing)
{
FloatSize intrinsicTileSize = size();
if (hasRelativeWidth())
intrinsicTileSize.setWidth(scaledTileSize.width());
if (hasRelativeHeight())
intrinsicTileSize.setHeight(scaledTileSize.height());
FloatSize scale(scaledTileSize.width() / intrinsicTileSize.width(),
scaledTileSize.height() / intrinsicTileSize.height());
FloatSize actualTileSize(scaledTileSize.width() + repeatSpacing.width(), scaledTileSize.height() + repeatSpacing.height());
FloatRect oneTileRect;
oneTileRect.setX(destRect.x() + fmodf(fmodf(-srcPoint.x(), actualTileSize.width()) - actualTileSize.width(), actualTileSize.width()));
oneTileRect.setY(destRect.y() + fmodf(fmodf(-srcPoint.y(), actualTileSize.height()) - actualTileSize.height(), actualTileSize.height()));
oneTileRect.setSize(scaledTileSize);
// Check and see if a single draw of the image can cover the entire area we are supposed to tile.
if (oneTileRect.contains(destRect)) {
FloatRect visibleSrcRect;
visibleSrcRect.setX((destRect.x() - oneTileRect.x()) / scale.width());
visibleSrcRect.setY((destRect.y() - oneTileRect.y()) / scale.height());
visibleSrcRect.setWidth(destRect.width() / scale.width());
visibleSrcRect.setHeight(destRect.height() / scale.height());
ctxt->drawImage(this, destRect, visibleSrcRect, op, DoNotRespectImageOrientation);
return;
}
FloatRect tileRect(FloatPoint(), intrinsicTileSize);
drawPattern(ctxt, tileRect, scale, oneTileRect.location(), op, destRect, repeatSpacing);
startAnimation();
}
示例10: addNodeToRectBasedTestResult
bool HitTestResult::addNodeToRectBasedTestResult(Node* node, const LayoutPoint& pointInContainer, const FloatRect& rect)
{
// If it is not a rect-based hit test, this method has to be no-op.
// Return false, so the hit test stops.
if (!isRectBasedTest())
return false;
// If node is null, return true so the hit test can continue.
if (!node)
return true;
if (m_shadowContentFilterPolicy == DoNotAllowShadowContent)
node = node->shadowAncestorNode();
mutableRectBasedTestResult().add(node);
if (node->renderer()->isInline()) {
for (RenderObject* curr = node->renderer()->parent(); curr; curr = curr->parent()) {
if (!curr->isRenderInline())
break;
// We need to make sure the nodes for culled inlines get included.
RenderInline* currInline = toRenderInline(curr);
if (currInline->alwaysCreateLineBoxes())
break;
if (currInline->visibleToHitTesting() && currInline->node())
mutableRectBasedTestResult().add(currInline->node()->shadowAncestorNode());
}
}
return !rect.contains(rectForPoint(pointInContainer));
}
示例11: checkEnclosure
bool SVGSVGElement::checkEnclosure(SVGElement* element, const FloatRect& rect)
{
// TODO : take into account pointer-events?
// FIXME: Why is element ignored??
// FIXME: Implement me (see bug 11274)
return rect.contains(getBBox());
}
示例12: ASSERT
void CanvasRenderingContext2D::drawImage(HTMLImageElement* image, const FloatRect& srcRect, const FloatRect& dstRect,
ExceptionCode& ec)
{
ASSERT(image);
ec = 0;
FloatRect imageRect = FloatRect(FloatPoint(), size(image));
if (!(imageRect.contains(srcRect) && srcRect.width() >= 0 && srcRect.height() >= 0
&& dstRect.width() >= 0 && dstRect.height() >= 0)) {
ec = INDEX_SIZE_ERR;
return;
}
if (srcRect.isEmpty() || dstRect.isEmpty())
return;
GraphicsContext* c = drawingContext();
if (!c)
return;
CachedImage* cachedImage = image->cachedImage();
if (!cachedImage)
return;
if (m_canvas->originClean())
checkOrigin(KURL(cachedImage->url()));
FloatRect sourceRect = c->roundToDevicePixels(srcRect);
FloatRect destRect = c->roundToDevicePixels(dstRect);
willDraw(destRect);
c->drawImage(cachedImage->image(), destRect, sourceRect, state().m_globalComposite);
}
示例13: drawTiled
void Image::drawTiled(GraphicsContext& ctxt,
const FloatRect& destRect,
const FloatPoint& srcPoint,
const FloatSize& scaledTileSize,
SkBlendMode op,
const FloatSize& repeatSpacing) {
FloatSize intrinsicTileSize = FloatSize(size());
if (hasRelativeSize()) {
intrinsicTileSize.setWidth(scaledTileSize.width());
intrinsicTileSize.setHeight(scaledTileSize.height());
}
FloatSize scale(scaledTileSize.width() / intrinsicTileSize.width(),
scaledTileSize.height() / intrinsicTileSize.height());
const FloatRect oneTileRect = computeTileContaining(
destRect.location(), scaledTileSize, srcPoint, repeatSpacing);
// Check and see if a single draw of the image can cover the entire area we
// are supposed to tile.
if (oneTileRect.contains(destRect)) {
const FloatRect visibleSrcRect =
computeSubsetForTile(oneTileRect, destRect, intrinsicTileSize);
ctxt.drawImage(this, destRect, &visibleSrcRect, op,
DoNotRespectImageOrientation);
return;
}
FloatRect tileRect(FloatPoint(), intrinsicTileSize);
drawPattern(ctxt, tileRect, scale, oneTileRect.location(), op, destRect,
repeatSpacing);
startAnimation();
}
示例14: checkEnclosure
bool RenderSVGModelObject::checkEnclosure(RenderObject* renderer, const FloatRect& rect)
{
if (!renderer || renderer->style()->pointerEvents() == PE_NONE)
return false;
if (!isGraphicsElement(renderer))
return false;
AffineTransform ctm;
getElementCTM(static_cast<SVGElement*>(renderer->node()), ctm);
return rect.contains(ctm.mapRect(renderer->repaintRectInLocalCoordinates()));
}
示例15: checkEnclosure
bool RenderSVGModelObject::checkEnclosure(RenderElement* renderer, const FloatRect& rect)
{
if (!renderer || renderer->style().pointerEvents() == PE_NONE)
return false;
if (!isGraphicsElement(*renderer))
return false;
AffineTransform ctm;
SVGElement* svgElement = downcast<SVGElement>(renderer->element());
getElementCTM(svgElement, ctm);
ASSERT(svgElement->renderer());
return rect.contains(ctm.mapRect(svgElement->renderer()->repaintRectInLocalCoordinates()));
}