本文整理汇总了C++中SkIRect::contains方法的典型用法代码示例。如果您正苦于以下问题:C++ SkIRect::contains方法的具体用法?C++ SkIRect::contains怎么用?C++ SkIRect::contains使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SkIRect
的用法示例。
在下文中一共展示了SkIRect::contains方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: test_restriction
static void test_restriction(skiatest::Reporter* reporter, SkCanvas* canvas) {
REPORTER_ASSERT(reporter, canvas->getDeviceClipBounds() == gBaseRestrictedR);
const SkIRect restrictionR = { 2, 2, 8, 8 };
canvas->androidFramework_setDeviceClipRestriction(restrictionR);
REPORTER_ASSERT(reporter, canvas->getDeviceClipBounds() == restrictionR);
const SkIRect clipR = { 4, 4, 6, 6 };
canvas->clipRect(SkRect::Make(clipR), SkClipOp::kIntersect);
REPORTER_ASSERT(reporter, canvas->getDeviceClipBounds() == clipR);
#ifdef SK_SUPPORT_DEPRECATED_CLIPOPS
// now test that expanding clipops can't exceed the restriction
const SkClipOp expanders[] = {
SkClipOp::kUnion_deprecated,
SkClipOp::kXOR_deprecated,
SkClipOp::kReverseDifference_deprecated,
SkClipOp::kReplace_deprecated,
};
const SkRect expandR = { 0, 0, 5, 9 };
SkASSERT(!SkRect::Make(restrictionR).contains(expandR));
for (SkClipOp op : expanders) {
canvas->save();
canvas->clipRect(expandR, op);
REPORTER_ASSERT(reporter, gBaseRestrictedR.contains(canvas->getDeviceClipBounds()));
canvas->restore();
}
#endif
}
示例2: applyCropRect
bool SkImageFilter::applyCropRect(const Context& ctx, Proxy* proxy, const SkBitmap& src,
SkIPoint* srcOffset, SkIRect* bounds, SkBitmap* dst) const {
SkIRect srcBounds;
src.getBounds(&srcBounds);
srcBounds.offset(*srcOffset);
SkIRect dstBounds;
this->onFilterNodeBounds(srcBounds, ctx.ctm(), &dstBounds, kForward_MapDirection);
fCropRect.applyTo(dstBounds, ctx.ctm(), bounds);
if (!bounds->intersect(ctx.clipBounds())) {
return false;
}
if (srcBounds.contains(*bounds)) {
*dst = src;
return true;
} else {
SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(bounds->width(), bounds->height()));
if (!device) {
return false;
}
SkCanvas canvas(device);
canvas.clear(0x00000000);
canvas.drawBitmap(src, srcOffset->x() - bounds->x(), srcOffset->y() - bounds->y());
*srcOffset = SkIPoint::Make(bounds->x(), bounds->y());
*dst = device->accessBitmap(false);
return true;
}
}
示例3: imagescaleproc
static void imagescaleproc(SkCanvas* canvas, SkImage* image, const SkBitmap&, const SkIRect& srcIR,
const SkRect& dstR) {
const int newW = SkScalarRoundToInt(dstR.width());
const int newH = SkScalarRoundToInt(dstR.height());
SkAutoTUnref<SkImage> newImage(image->newImage(newW, newH, &srcIR));
#ifdef SK_DEBUG
const SkIRect baseR = SkIRect::MakeWH(image->width(), image->height());
const bool containsSubset = baseR.contains(srcIR);
#endif
if (newImage) {
SkASSERT(containsSubset);
canvas->drawImage(newImage, dstR.x(), dstR.y());
} else {
// newImage() does not support subsets that are not contained by the original
// but drawImageRect does, so we just draw an X in its place to indicate that we are
// deliberately not drawing here.
SkASSERT(!containsSubset);
SkPaint paint;
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(4);
canvas->drawLine(4, 4, newW - 4.0f, newH - 4.0f, paint);
canvas->drawLine(4, newH - 4.0f, newW - 4.0f, 4, paint);
}
}
示例4: updateTileDirtiness
bool TiledPage::updateTileDirtiness(const SkIRect& tileBounds)
{
if (!m_glWebViewState || tileBounds.isEmpty()) {
m_invalRegion.setEmpty();
m_invalTilesRegion.setEmpty();
return false;
}
bool visibleTileIsDirty = false;
for (int x = 0; x < m_baseTileSize; x++) {
BaseTile& tile = m_baseTiles[x];
// if the tile is in the dirty region then we must invalidate it
if (m_invalRegion.contains(tile.x(), tile.y())) {
tile.markAsDirty(m_latestPictureInval, m_invalTilesRegion);
if (tileBounds.contains(tile.x(), tile.y()))
visibleTileIsDirty = true;
}
}
// clear the invalidated region as all tiles within that region have now
// been marked as dirty.
m_invalRegion.setEmpty();
m_invalTilesRegion.setEmpty();
return visibleTileIsDirty;
}
示例5: validateSubtree
int SkRTree::validateSubtree(Node* root, SkIRect bounds, bool isRoot) const {
// make sure the pointer is pointing to a valid place
SkASSERT(fNodes.contains(static_cast<void*>(root)));
if (isRoot) {
// If the root of this subtree is the overall root, we have looser standards:
if (root->isLeaf()) {
SkASSERT(root->fNumChildren >= 1 && root->fNumChildren <= fMaxChildren);
} else {
SkASSERT(root->fNumChildren >= 2 && root->fNumChildren <= fMaxChildren);
}
} else {
SkASSERT(root->fNumChildren >= fMinChildren && root->fNumChildren <= fMaxChildren);
}
for (int i = 0; i < root->fNumChildren; ++i) {
SkASSERT(bounds.contains(root->child(i)->fBounds));
}
if (root->isLeaf()) {
SkASSERT(0 == root->fLevel);
return root->fNumChildren;
} else {
int childCount = 0;
for (int i = 0; i < root->fNumChildren; ++i) {
SkASSERT(root->child(i)->fChild.subtree->fLevel == root->fLevel - 1);
childCount += this->validateSubtree(root->child(i)->fChild.subtree,
root->child(i)->fBounds);
}
return childCount;
}
}
示例6: writePixels
bool GrGpu::writePixels(GrSurface* surface, GrSurfaceOrigin origin, int left, int top, int width,
int height, GrColorType srcColorType, const GrMipLevel texels[],
int mipLevelCount) {
SkASSERT(surface);
if (1 == mipLevelCount) {
// We require that if we are not mipped, then the write region is contained in the surface
SkIRect subRect = SkIRect::MakeXYWH(left, top, width, height);
SkIRect bounds = SkIRect::MakeWH(surface->width(), surface->height());
if (!bounds.contains(subRect)) {
return false;
}
} else if (0 != left || 0 != top || width != surface->width() || height != surface->height()) {
// We require that if the texels are mipped, than the write region is the entire surface
return false;
}
for (int currentMipLevel = 0; currentMipLevel < mipLevelCount; currentMipLevel++) {
if (!texels[currentMipLevel].fPixels ) {
return false;
}
}
this->handleDirtyContext();
if (this->onWritePixels(surface, origin, left, top, width, height, srcColorType, texels,
mipLevelCount)) {
SkIRect rect = SkIRect::MakeXYWH(left, top, width, height);
this->didWriteToSurface(surface, origin, &rect, mipLevelCount);
fStats.incTextureUploads();
return true;
}
return false;
}
示例7: sizeof
// Much of readPixels is exercised by copyTo testing, since readPixels is the backend for that
// method. Here we explicitly test subset copies.
//
DEF_TEST(BitmapReadPixels, reporter) {
const int W = 4;
const int H = 4;
const size_t rowBytes = W * sizeof(SkPMColor);
const SkImageInfo srcInfo = SkImageInfo::MakeN32Premul(W, H);
SkPMColor srcPixels[16];
fill_4x4_pixels(srcPixels);
SkBitmap srcBM;
srcBM.installPixels(srcInfo, srcPixels, rowBytes);
SkImageInfo dstInfo = SkImageInfo::MakeN32Premul(W, H);
SkPMColor dstPixels[16];
const struct {
bool fExpectedSuccess;
SkIPoint fRequestedSrcLoc;
SkISize fRequestedDstSize;
// If fExpectedSuccess, check these, otherwise ignore
SkIPoint fExpectedDstLoc;
SkIRect fExpectedSrcR;
} gRec[] = {
{ true, { 0, 0 }, { 4, 4 }, { 0, 0 }, { 0, 0, 4, 4 } },
{ true, { 1, 1 }, { 2, 2 }, { 0, 0 }, { 1, 1, 3, 3 } },
{ true, { 2, 2 }, { 4, 4 }, { 0, 0 }, { 2, 2, 4, 4 } },
{ true, {-1,-1 }, { 2, 2 }, { 1, 1 }, { 0, 0, 1, 1 } },
{ false, {-1,-1 }, { 1, 1 }, { 0, 0 }, { 0, 0, 0, 0 } },
};
for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); ++i) {
clear_4x4_pixels(dstPixels);
dstInfo = dstInfo.makeWH(gRec[i].fRequestedDstSize.width(),
gRec[i].fRequestedDstSize.height());
bool success = srcBM.readPixels(dstInfo, dstPixels, rowBytes,
gRec[i].fRequestedSrcLoc.x(), gRec[i].fRequestedSrcLoc.y());
REPORTER_ASSERT(reporter, gRec[i].fExpectedSuccess == success);
if (success) {
const SkIRect srcR = gRec[i].fExpectedSrcR;
const int dstX = gRec[i].fExpectedDstLoc.x();
const int dstY = gRec[i].fExpectedDstLoc.y();
// Walk the dst pixels, and check if we got what we expected
for (int y = 0; y < H; ++y) {
for (int x = 0; x < W; ++x) {
SkPMColor dstC = dstPixels[y*4+x];
// get into src coordinates
int sx = x - dstX + srcR.x();
int sy = y - dstY + srcR.y();
if (srcR.contains(sx, sy)) {
REPORTER_ASSERT(reporter, check_4x4_pixel(dstC, sx, sy));
} else {
REPORTER_ASSERT(reporter, 0 == dstC);
}
}
}
}
}
}
示例8: draw
void draw(SkCanvas* canvas) {
SkIRect rect = { 30, 50, 40, 60 };
SkIRect tests[] = { { 30, 50, 31, 51}, { 39, 49, 40, 50}, { 29, 59, 30, 60} };
for (auto contained : tests) {
SkDebugf("rect: (%d, %d, %d, %d) %s (%d, %d, %d, %d)\n",
rect.left(), rect.top(), rect.right(), rect.bottom(),
rect.contains(contained) ? "contains" : "does not contain",
contained.left(), contained.top(), contained.right(), contained.bottom());
}
}
示例9: startScanlineDecode
SkCodec::Result SkCodec::startScanlineDecode(const SkImageInfo& dstInfo,
const SkCodec::Options* options, SkPMColor ctable[], int* ctableCount) {
// Reset fCurrScanline in case of failure.
fCurrScanline = -1;
// Ensure that valid color ptrs are passed in for kIndex8 color type
if (kIndex_8_SkColorType == dstInfo.colorType()) {
if (nullptr == ctable || nullptr == ctableCount) {
return SkCodec::kInvalidParameters;
}
} else {
if (ctableCount) {
*ctableCount = 0;
}
ctableCount = nullptr;
ctable = nullptr;
}
if (!this->rewindIfNeeded()) {
return kCouldNotRewind;
}
// Set options.
Options optsStorage;
if (nullptr == options) {
options = &optsStorage;
} else if (options->fSubset) {
SkIRect size = SkIRect::MakeSize(dstInfo.dimensions());
if (!size.contains(*options->fSubset)) {
return kInvalidInput;
}
// We only support subsetting in the x-dimension for scanline decoder.
// Subsetting in the y-dimension can be accomplished using skipScanlines().
if (options->fSubset->top() != 0 || options->fSubset->height() != dstInfo.height()) {
return kInvalidInput;
}
}
// FIXME: Support subsets somehow?
if (!this->dimensionsSupported(dstInfo.dimensions())) {
return kInvalidScale;
}
const Result result = this->onStartScanlineDecode(dstInfo, *options, ctable, ctableCount);
if (result != SkCodec::kSuccess) {
return result;
}
fCurrScanline = 0;
fDstInfo = dstInfo;
fOptions = *options;
return kSuccess;
}
示例10: hasMissingContent
bool TiledPage::hasMissingContent(const SkIRect& tileBounds)
{
int neededTiles = tileBounds.width() * tileBounds.height();
for (int j = 0; j < m_baseTileSize; j++) {
BaseTile& tile = m_baseTiles[j];
if (tileBounds.contains(tile.x(), tile.y())) {
if (tile.frontTexture())
neededTiles--;
}
}
return neededTiles > 0;
}
示例11: clip_to_limit
static bool clip_to_limit(const SkRegion& orig, SkRegion* reduced) {
// need to limit coordinates such that the width/height of our rect can be represented
// in SkFixed (16.16). See skbug.com/7998
const int32_t limit = 32767 >> 1;
SkIRect limitR;
limitR.set(-limit, -limit, limit, limit);
if (limitR.contains(orig.getBounds())) {
return false;
}
reduced->op(orig, limitR, SkRegion::kIntersect_Op);
return true;
}
示例12: isReady
bool TiledPage::isReady(const SkIRect& tileBounds)
{
int neededTiles = tileBounds.width() * tileBounds.height();
XLOG("tiled page %p needs %d ready tiles", this, neededTiles);
for (int j = 0; j < m_baseTileSize; j++) {
BaseTile& tile = m_baseTiles[j];
if (tileBounds.contains(tile.x(), tile.y())) {
if (tile.isTileReady())
neededTiles--;
}
}
XLOG("tiled page %p still needs %d ready tiles", this, neededTiles);
return neededTiles == 0;
}
示例13: newSubset
SkImage* SkImage::newSubset(const SkIRect& subset) const {
if (subset.isEmpty()) {
return nullptr;
}
const SkIRect bounds = SkIRect::MakeWH(this->width(), this->height());
if (!bounds.contains(subset)) {
return nullptr;
}
// optimization : return self if the subset == our bounds
if (bounds == subset) {
return SkRef(const_cast<SkImage*>(this));
}
return as_IB(this)->onNewSubset(subset);
}
示例14: Valid
bool SkLatticeIter::Valid(int width, int height, const SkCanvas::Lattice& lattice) {
SkIRect totalBounds = SkIRect::MakeWH(width, height);
SkASSERT(lattice.fBounds);
const SkIRect latticeBounds = *lattice.fBounds;
if (!totalBounds.contains(latticeBounds)) {
return false;
}
bool zeroXDivs = lattice.fXCount <= 0 || (1 == lattice.fXCount &&
latticeBounds.fLeft == lattice.fXDivs[0]);
bool zeroYDivs = lattice.fYCount <= 0 || (1 == lattice.fYCount &&
latticeBounds.fTop == lattice.fYDivs[0]);
if (zeroXDivs && zeroYDivs) {
return false;
}
return valid_divs(lattice.fXDivs, lattice.fXCount, latticeBounds.fLeft, latticeBounds.fRight)
&& valid_divs(lattice.fYDivs, lattice.fYCount, latticeBounds.fTop, latticeBounds.fBottom);
}
示例15: updateMC
void updateMC(const SkMatrix& totalMatrix, const SkRegion& totalClip,
const SkClipStack& clipStack, SkRegion* updateClip) {
int x = fDevice->getOrigin().x();
int y = fDevice->getOrigin().y();
int width = fDevice->width();
int height = fDevice->height();
if ((x | y) == 0) {
fMatrix = &totalMatrix;
fClip = totalClip;
} else {
fMatrixStorage = totalMatrix;
fMatrixStorage.postTranslate(SkIntToScalar(-x),
SkIntToScalar(-y));
fMatrix = &fMatrixStorage;
totalClip.translate(-x, -y, &fClip);
}
fClip.op(0, 0, width, height, SkRegion::kIntersect_Op);
// intersect clip, but don't translate it (yet)
if (updateClip) {
updateClip->op(x, y, x + width, y + height,
SkRegion::kDifference_Op);
}
fDevice->setMatrixClip(*fMatrix, fClip, clipStack);
#ifdef SK_DEBUG
if (!fClip.isEmpty()) {
SkIRect deviceR;
deviceR.set(0, 0, width, height);
SkASSERT(deviceR.contains(fClip.getBounds()));
}
#endif
// default is to assume no external matrix
fMVMatrix = NULL;
fExtMatrix = NULL;
}