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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/Image.cpp

Issue 2559013002: Add ColorBehavior to blink::Image draw methods (Closed)
Patch Set: Rebase Created 4 years 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 Samuel Weinig (sam.weinig@gmail.com) 2 * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
3 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. 3 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 248
249 void Image::drawPattern(GraphicsContext& context, 249 void Image::drawPattern(GraphicsContext& context,
250 const FloatRect& floatSrcRect, 250 const FloatRect& floatSrcRect,
251 const FloatSize& scale, 251 const FloatSize& scale,
252 const FloatPoint& phase, 252 const FloatPoint& phase,
253 SkBlendMode compositeOp, 253 SkBlendMode compositeOp,
254 const FloatRect& destRect, 254 const FloatRect& destRect,
255 const FloatSize& repeatSpacing) { 255 const FloatSize& repeatSpacing) {
256 TRACE_EVENT0("skia", "Image::drawPattern"); 256 TRACE_EVENT0("skia", "Image::drawPattern");
257 257
258 sk_sp<SkImage> image = imageForCurrentFrame(); 258 sk_sp<SkImage> image = imageForCurrentFrame(context.getColorBehavior());
259 if (!image) 259 if (!image)
260 return; 260 return;
261 261
262 FloatRect normSrcRect = floatSrcRect; 262 FloatRect normSrcRect = floatSrcRect;
263 263
264 normSrcRect.intersect(FloatRect(0, 0, image->width(), image->height())); 264 normSrcRect.intersect(FloatRect(0, 0, image->width(), image->height()));
265 if (destRect.isEmpty() || normSrcRect.isEmpty()) 265 if (destRect.isEmpty() || normSrcRect.isEmpty())
266 return; // nothing to draw 266 return; // nothing to draw
267 267
268 SkMatrix localMatrix; 268 SkMatrix localMatrix;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 PlatformInstrumentation::didDrawLazyPixelRef(imageID); 304 PlatformInstrumentation::didDrawLazyPixelRef(imageID);
305 } 305 }
306 306
307 PassRefPtr<Image> Image::imageForDefaultFrame() { 307 PassRefPtr<Image> Image::imageForDefaultFrame() {
308 RefPtr<Image> image(this); 308 RefPtr<Image> image(this);
309 309
310 return image.release(); 310 return image.release();
311 } 311 }
312 312
313 bool Image::isTextureBacked() { 313 bool Image::isTextureBacked() {
314 sk_sp<SkImage> image = imageForCurrentFrame(); 314 // TODO(ccameron): It should not be necessary to specify color conversion for
315 // this query.
316 sk_sp<SkImage> image =
317 imageForCurrentFrame(ColorBehavior::transformToGlobalTarget());
315 return image ? image->isTextureBacked() : false; 318 return image ? image->isTextureBacked() : false;
316 } 319 }
317 320
318 bool Image::applyShader(SkPaint& paint, const SkMatrix& localMatrix) { 321 bool Image::applyShader(SkPaint& paint,
322 const SkMatrix& localMatrix,
323 const ColorBehavior& colorBehavior) {
319 // Default shader impl: attempt to build a shader based on the current frame 324 // Default shader impl: attempt to build a shader based on the current frame
320 // SkImage. 325 // SkImage.
321 sk_sp<SkImage> image = imageForCurrentFrame(); 326 sk_sp<SkImage> image = imageForCurrentFrame(colorBehavior);
322 if (!image) 327 if (!image)
323 return false; 328 return false;
324 329
325 paint.setShader(image->makeShader(SkShader::kRepeat_TileMode, 330 paint.setShader(image->makeShader(SkShader::kRepeat_TileMode,
326 SkShader::kRepeat_TileMode, &localMatrix)); 331 SkShader::kRepeat_TileMode, &localMatrix));
327 332
328 // Animation is normally refreshed in draw() impls, which we don't call when 333 // Animation is normally refreshed in draw() impls, which we don't call when
329 // painting via shaders. 334 // painting via shaders.
330 startAnimation(); 335 startAnimation();
331 336
(...skipping 27 matching lines...) Expand all
359 FloatRect subset = dest; 364 FloatRect subset = dest;
360 subset.setX((dest.x() - tile.x()) / scale.width()); 365 subset.setX((dest.x() - tile.x()) / scale.width());
361 subset.setY((dest.y() - tile.y()) / scale.height()); 366 subset.setY((dest.y() - tile.y()) / scale.height());
362 subset.setWidth(dest.width() / scale.width()); 367 subset.setWidth(dest.width() / scale.width());
363 subset.setHeight(dest.height() / scale.height()); 368 subset.setHeight(dest.height() / scale.height());
364 369
365 return subset; 370 return subset;
366 } 371 }
367 372
368 } // namespace blink 373 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698