Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(209)

Side by Side Diff: third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp

Issue 2290903002: Change (Pass)RefPtr<SkXxx> into sk_sp<SkXxx>. (Closed)
Patch Set: Rebasing... Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org> 2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org>
3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. 3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
4 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 4 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 scaledSrc.scale(1 / zoom); 242 scaledSrc.scale(1 / zoom);
243 243
244 // Compensate for the container size rounding by adjusting the source rect. 244 // Compensate for the container size rounding by adjusting the source rect.
245 FloatSize adjustedSrcSize = scaledSrc.size(); 245 FloatSize adjustedSrcSize = scaledSrc.size();
246 adjustedSrcSize.scale(roundedContainerSize.width() / containerSize.width(), roundedContainerSize.height() / containerSize.height()); 246 adjustedSrcSize.scale(roundedContainerSize.width() / containerSize.width(), roundedContainerSize.height() / containerSize.height());
247 scaledSrc.setSize(adjustedSrcSize); 247 scaledSrc.setSize(adjustedSrcSize);
248 248
249 drawInternal(canvas, paint, dstRect, scaledSrc, DoNotRespectImageOrientation , ClampImageToSourceRect, url); 249 drawInternal(canvas, paint, dstRect, scaledSrc, DoNotRespectImageOrientation , ClampImageToSourceRect, url);
250 } 250 }
251 251
252 PassRefPtr<SkImage> SVGImage::imageForCurrentFrame() 252 sk_sp<SkImage> SVGImage::imageForCurrentFrame()
253 { 253 {
254 return imageForCurrentFrameForContainer(KURL(), FloatSize(size())); 254 return imageForCurrentFrameForContainer(KURL(), FloatSize(size()));
255 } 255 }
256 256
257 void SVGImage::drawPatternForContainer(GraphicsContext& context, const FloatSize containerSize, 257 void SVGImage::drawPatternForContainer(GraphicsContext& context, const FloatSize containerSize,
258 float zoom, const FloatRect& srcRect, const FloatSize& tileScale, const Floa tPoint& phase, 258 float zoom, const FloatRect& srcRect, const FloatSize& tileScale, const Floa tPoint& phase,
259 SkXfermode::Mode compositeOp, const FloatRect& dstRect, 259 SkXfermode::Mode compositeOp, const FloatRect& dstRect,
260 const FloatSize& repeatSpacing, const KURL& url) 260 const FloatSize& repeatSpacing, const KURL& url)
261 { 261 {
262 // Tile adjusted for scaling/stretch. 262 // Tile adjusted for scaling/stretch.
263 FloatRect tile(srcRect); 263 FloatRect tile(srcRect);
264 tile.scale(tileScale.width(), tileScale.height()); 264 tile.scale(tileScale.width(), tileScale.height());
265 265
266 // Expand the tile to account for repeat spacing. 266 // Expand the tile to account for repeat spacing.
267 FloatRect spacedTile(tile); 267 FloatRect spacedTile(tile);
268 spacedTile.expand(FloatSize(repeatSpacing)); 268 spacedTile.expand(FloatSize(repeatSpacing));
269 269
270 SkPictureBuilder patternPicture(spacedTile, nullptr, &context); 270 SkPictureBuilder patternPicture(spacedTile, nullptr, &context);
271 { 271 {
272 DrawingRecorder patternPictureRecorder(patternPicture.context(), pattern Picture, DisplayItem::Type::kSVGImage, spacedTile); 272 DrawingRecorder patternPictureRecorder(patternPicture.context(), pattern Picture, DisplayItem::Type::kSVGImage, spacedTile);
273 // When generating an expanded tile, make sure we don't draw into the sp acing area. 273 // When generating an expanded tile, make sure we don't draw into the sp acing area.
274 if (tile != spacedTile) 274 if (tile != spacedTile)
275 patternPicture.context().clip(tile); 275 patternPicture.context().clip(tile);
276 SkPaint paint; 276 SkPaint paint;
277 drawForContainer(patternPicture.context().canvas(), paint, containerSize , zoom, tile, srcRect, url); 277 drawForContainer(patternPicture.context().canvas(), paint, containerSize , zoom, tile, srcRect, url);
278 } 278 }
279 RefPtr<SkPicture> tilePicture = patternPicture.endRecording(); 279 sk_sp<SkPicture> tilePicture = patternPicture.endRecording();
280 280
281 SkMatrix patternTransform; 281 SkMatrix patternTransform;
282 patternTransform.setTranslate(phase.x() + spacedTile.x(), phase.y() + spaced Tile.y()); 282 patternTransform.setTranslate(phase.x() + spacedTile.x(), phase.y() + spaced Tile.y());
283 283
284 SkPaint paint; 284 SkPaint paint;
285 paint.setShader(SkShader::MakePictureShader(toSkSp(tilePicture.release()), 285 paint.setShader(SkShader::MakePictureShader(std::move(tilePicture),
286 SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, &patternTransfor m, nullptr)); 286 SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, &patternTransfor m, nullptr));
287 paint.setXfermodeMode(compositeOp); 287 paint.setXfermodeMode(compositeOp);
288 paint.setColorFilter(sk_ref_sp(context.colorFilter())); 288 paint.setColorFilter(sk_ref_sp(context.colorFilter()));
289 context.drawRect(dstRect, paint); 289 context.drawRect(dstRect, paint);
290 } 290 }
291 291
292 PassRefPtr<SkImage> SVGImage::imageForCurrentFrameForContainer(const KURL& url, const FloatSize& containerSize) 292 sk_sp<SkImage> SVGImage::imageForCurrentFrameForContainer(const KURL& url, const FloatSize& containerSize)
293 { 293 {
294 if (!m_page) 294 if (!m_page)
295 return nullptr; 295 return nullptr;
296 296
297 const FloatRect containerRect(FloatPoint(), containerSize); 297 const FloatRect containerRect(FloatPoint(), containerSize);
298 298
299 SkPictureRecorder recorder; 299 SkPictureRecorder recorder;
300 SkCanvas* canvas = recorder.beginRecording(containerRect); 300 SkCanvas* canvas = recorder.beginRecording(containerRect);
301 drawForContainer(canvas, SkPaint(), containerSize, 1, containerRect, contain erRect, url); 301 drawForContainer(canvas, SkPaint(), containerSize, 1, containerRect, contain erRect, url);
302 302
303 const IntSize imageSize = roundedIntSize(containerSize); 303 const IntSize imageSize = roundedIntSize(containerSize);
304 const SkMatrix residualScale = SkMatrix::MakeScale( 304 const SkMatrix residualScale = SkMatrix::MakeScale(
305 static_cast<float>(imageSize.width()) / containerSize.width(), 305 static_cast<float>(imageSize.width()) / containerSize.width(),
306 static_cast<float>(imageSize.height()) / containerSize.height()); 306 static_cast<float>(imageSize.height()) / containerSize.height());
307 return fromSkSp(SkImage::MakeFromPicture(recorder.finishRecordingAsPicture() , 307 return SkImage::MakeFromPicture(recorder.finishRecordingAsPicture(),
308 SkISize::Make(imageSize.width(), imageSize.height()), &residualScale, nu llptr)); 308 SkISize::Make(imageSize.width(), imageSize.height()), &residualScale, nu llptr);
309 } 309 }
310 310
311 static bool drawNeedsLayer(const SkPaint& paint) 311 static bool drawNeedsLayer(const SkPaint& paint)
312 { 312 {
313 if (SkColorGetA(paint.getColor()) < 255) 313 if (SkColorGetA(paint.getColor()) < 255)
314 return true; 314 return true;
315 315
316 SkXfermode::Mode xfermode; 316 SkXfermode::Mode xfermode;
317 if (SkXfermode::AsMode(paint.getXfermode(), &xfermode)) { 317 if (SkXfermode::AsMode(paint.getXfermode(), &xfermode)) {
318 if (xfermode != SkXfermode::kSrcOver_Mode) 318 if (xfermode != SkXfermode::kSrcOver_Mode)
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 view->paint(imagePicture.context(), CullRect(enclosingIntRect(srcRect))) ; 366 view->paint(imagePicture.context(), CullRect(enclosingIntRect(srcRect))) ;
367 ASSERT(!view->needsLayout()); 367 ASSERT(!view->needsLayout());
368 } 368 }
369 369
370 { 370 {
371 SkAutoCanvasRestore ar(canvas, false); 371 SkAutoCanvasRestore ar(canvas, false);
372 if (drawNeedsLayer(paint)) { 372 if (drawNeedsLayer(paint)) {
373 SkRect layerRect = dstRect; 373 SkRect layerRect = dstRect;
374 canvas->saveLayer(&layerRect, &paint); 374 canvas->saveLayer(&layerRect, &paint);
375 } 375 }
376 RefPtr<const SkPicture> recording = imagePicture.endRecording(); 376 sk_sp<const SkPicture> recording = imagePicture.endRecording();
377 canvas->drawPicture(recording.get()); 377 canvas->drawPicture(recording.get());
378 } 378 }
379 379
380 if (getImageObserver()) 380 if (getImageObserver())
381 getImageObserver()->didDraw(this); 381 getImageObserver()->didDraw(this);
382 382
383 // Start any (SMIL) animations if needed. This will restart or continue 383 // Start any (SMIL) animations if needed. This will restart or continue
384 // animations if preceded by calls to resetAnimation or stopAnimation 384 // animations if preceded by calls to resetAnimation or stopAnimation
385 // respectively. 385 // respectively.
386 startAnimation(); 386 startAnimation();
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 578
579 return m_page ? SizeAvailable : SizeUnavailable; 579 return m_page ? SizeAvailable : SizeUnavailable;
580 } 580 }
581 581
582 String SVGImage::filenameExtension() const 582 String SVGImage::filenameExtension() const
583 { 583 {
584 return "svg"; 584 return "svg";
585 } 585 }
586 586
587 } // namespace blink 587 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698