GrAtlasTextContext::BitmapTextBlob* GrTextBlobCache::createBlob(int glyphCount, int runCount, size_t maxVASize) { // We allocate size for the BitmapTextBlob itself, plus size for the vertices array, // and size for the glyphIds array. size_t verticesCount = glyphCount * kVerticesPerGlyph * maxVASize; size_t size = sizeof(BitmapTextBlob) + verticesCount + glyphCount * sizeof(GrGlyph::PackedID) + sizeof(BitmapTextBlob::Run) * runCount; BitmapTextBlob* cacheBlob = SkNEW_PLACEMENT(fPool.allocate(size), BitmapTextBlob); // setup offsets for vertices / glyphs cacheBlob->fVertices = sizeof(BitmapTextBlob) + reinterpret_cast<unsigned char*>(cacheBlob); cacheBlob->fGlyphIDs = reinterpret_cast<GrGlyph::PackedID*>(cacheBlob->fVertices + verticesCount); cacheBlob->fRuns = reinterpret_cast<BitmapTextBlob::Run*>(cacheBlob->fGlyphIDs + glyphCount); // Initialize runs for (int i = 0; i < runCount; i++) { SkNEW_PLACEMENT(&cacheBlob->fRuns[i], BitmapTextBlob::Run); } cacheBlob->fRunCount = runCount; cacheBlob->fPool = &fPool; return cacheBlob; }
SkShader::Context* SkBitmapProcShader::onCreateContext(const ContextRec& rec, void* storage) const { if (!fRawBitmap.getTexture() && !valid_for_drawing(fRawBitmap)) { return NULL; } SkMatrix totalInverse; // Do this first, so we know the matrix can be inverted. if (!this->computeTotalInverse(rec, &totalInverse)) { return NULL; } void* stateStorage = (char*)storage + sizeof(BitmapProcShaderContext); SkBitmapProcState* state = SkNEW_PLACEMENT(stateStorage, SkBitmapProcState); SkASSERT(state); state->fTileModeX = fTileModeX; state->fTileModeY = fTileModeY; state->fOrigBitmap = fRawBitmap; if (!state->chooseProcs(totalInverse, *rec.fPaint)) { state->~SkBitmapProcState(); return NULL; } return SkNEW_PLACEMENT_ARGS(storage, BitmapProcShaderContext, (*this, rec, state)); }
SkDeque* SkLayerRasterizer::ReadLayers(SkReadBuffer& buffer) { int count = buffer.readInt(); SkDeque* layers = SkNEW_ARGS(SkDeque, (sizeof(SkLayerRasterizer_Rec))); for (int i = 0; i < count; i++) { SkLayerRasterizer_Rec* rec = (SkLayerRasterizer_Rec*)layers->push_back(); SkNEW_PLACEMENT(&rec->fPaint, SkPaint); buffer.readPaint(&rec->fPaint); buffer.readPoint(&rec->fOffset); } return layers; }
SkOSFile::Iter::Iter(const char path[], const char suffix[]) { SkNEW_PLACEMENT(fSelf.get(), SkOSFileIterData); this->reset(path, suffix); }
SkOSFile::Iter::Iter() { SkNEW_PLACEMENT(fSelf.get(), SkOSFileIterData); }