OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2008, Google Inc. All rights reserved. | 2 * Copyright (c) 2008, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 27 matching lines...) Expand all Loading... |
38 #include "core/platform/graphics/FloatSize.h" | 38 #include "core/platform/graphics/FloatSize.h" |
39 #include "core/platform/graphics/GraphicsContext.h" | 39 #include "core/platform/graphics/GraphicsContext.h" |
40 #include "core/platform/graphics/Image.h" | 40 #include "core/platform/graphics/Image.h" |
41 #include "core/platform/graphics/chromium/DeferredImageDecoder.h" | 41 #include "core/platform/graphics/chromium/DeferredImageDecoder.h" |
42 #include "core/platform/graphics/skia/SkiaUtils.h" | 42 #include "core/platform/graphics/skia/SkiaUtils.h" |
43 #include "skia/ext/image_operations.h" | 43 #include "skia/ext/image_operations.h" |
44 #include "third_party/skia/include/core/SkMatrix.h" | 44 #include "third_party/skia/include/core/SkMatrix.h" |
45 #include "third_party/skia/include/core/SkPaint.h" | 45 #include "third_party/skia/include/core/SkPaint.h" |
46 #include "third_party/skia/include/core/SkScalar.h" | 46 #include "third_party/skia/include/core/SkScalar.h" |
47 #include "third_party/skia/include/core/SkShader.h" | 47 #include "third_party/skia/include/core/SkShader.h" |
| 48 #include "third_party/skia/include/effects/SkLumaXfermode.h" |
48 | 49 |
49 #include <limits> | 50 #include <limits> |
50 #include <math.h> | 51 #include <math.h> |
51 | 52 |
52 namespace WebCore { | 53 namespace WebCore { |
53 | 54 |
54 static bool nearlyIntegral(float value) | 55 static bool nearlyIntegral(float value) |
55 { | 56 { |
56 return fabs(value - floorf(value)) < std::numeric_limits<float>::epsilon(); | 57 return fabs(value - floorf(value)) < std::numeric_limits<float>::epsilon(); |
57 } | 58 } |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 | 318 |
318 static bool hasNon90rotation(GraphicsContext* context) | 319 static bool hasNon90rotation(GraphicsContext* context) |
319 { | 320 { |
320 return !context->getTotalMatrix().rectStaysRect(); | 321 return !context->getTotalMatrix().rectStaysRect(); |
321 } | 322 } |
322 | 323 |
323 void NativeImageSkia::draw(GraphicsContext* context, const SkRect& srcRect, cons
t SkRect& destRect, PassRefPtr<SkXfermode> compOp) const | 324 void NativeImageSkia::draw(GraphicsContext* context, const SkRect& srcRect, cons
t SkRect& destRect, PassRefPtr<SkXfermode> compOp) const |
324 { | 325 { |
325 TRACE_EVENT0("skia", "NativeImageSkia::draw"); | 326 TRACE_EVENT0("skia", "NativeImageSkia::draw"); |
326 SkPaint paint; | 327 SkPaint paint; |
327 paint.setXfermode(compOp.get()); | 328 if (context->drawLuminanceMask()) { |
| 329 paint.setXfermode(SkLumaMaskXfermode::Create(SkXfermode::kSrcOver_Mode))
; |
| 330 } else { |
| 331 paint.setXfermode(compOp.get()); |
| 332 } |
328 paint.setAlpha(context->getNormalizedAlpha()); | 333 paint.setAlpha(context->getNormalizedAlpha()); |
329 paint.setLooper(context->drawLooper()); | 334 paint.setLooper(context->drawLooper()); |
330 // only antialias if we're rotated or skewed | 335 // only antialias if we're rotated or skewed |
331 paint.setAntiAlias(hasNon90rotation(context)); | 336 paint.setAntiAlias(hasNon90rotation(context)); |
332 | 337 |
333 ResamplingMode resampling; | 338 ResamplingMode resampling; |
334 if (context->isAccelerated()) { | 339 if (context->isAccelerated()) { |
335 resampling = LinearResampling; | 340 resampling = LinearResampling; |
336 } else if (context->printing()) { | 341 } else if (context->printing()) { |
337 resampling = NoResampling; | 342 resampling = NoResampling; |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 // origin of the destination rect, which is what WebKit expects. Skia uses | 459 // origin of the destination rect, which is what WebKit expects. Skia uses |
455 // the coordinate system origin as the base for the pattern. If WebKit wants | 460 // the coordinate system origin as the base for the pattern. If WebKit wants |
456 // a shifted image, it will shift it from there using the shaderTransform. | 461 // a shifted image, it will shift it from there using the shaderTransform. |
457 float adjustedX = phase.x() + normSrcRect.x() * scale.width(); | 462 float adjustedX = phase.x() + normSrcRect.x() * scale.width(); |
458 float adjustedY = phase.y() + normSrcRect.y() * scale.height(); | 463 float adjustedY = phase.y() + normSrcRect.y() * scale.height(); |
459 shaderTransform.postTranslate(SkFloatToScalar(adjustedX), SkFloatToScalar(ad
justedY)); | 464 shaderTransform.postTranslate(SkFloatToScalar(adjustedX), SkFloatToScalar(ad
justedY)); |
460 shader->setLocalMatrix(shaderTransform); | 465 shader->setLocalMatrix(shaderTransform); |
461 | 466 |
462 SkPaint paint; | 467 SkPaint paint; |
463 paint.setShader(shader.get()); | 468 paint.setShader(shader.get()); |
464 paint.setXfermode(WebCoreCompositeToSkiaComposite(compositeOp, blendMode).ge
t()); | 469 if (context->drawLuminanceMask()) { |
| 470 paint.setXfermode(SkLumaMaskXfermode::Create(SkXfermode::kSrcOver_Mode))
; |
| 471 } else { |
| 472 paint.setXfermode(WebCoreCompositeToSkiaComposite(compositeOp, blendMode
).get()); |
| 473 } |
465 | 474 |
466 paint.setFilterBitmap(resampling == LinearResampling); | 475 paint.setFilterBitmap(resampling == LinearResampling); |
467 if (useBicubicFilter) | 476 if (useBicubicFilter) |
468 paint.setFilterLevel(SkPaint::kHigh_FilterLevel); | 477 paint.setFilterLevel(SkPaint::kHigh_FilterLevel); |
469 | 478 |
470 context->drawRect(destRect, paint); | 479 context->drawRect(destRect, paint); |
471 } | 480 } |
472 | 481 |
473 bool NativeImageSkia::shouldCacheResampling(const SkISize& scaledImageSize, cons
t SkIRect& scaledImageSubset) const | 482 bool NativeImageSkia::shouldCacheResampling(const SkISize& scaledImageSize, cons
t SkIRect& scaledImageSubset) const |
474 { | 483 { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 SkIRect NativeImageSkia::ImageResourceInfo::rectInSubset(const SkIRect& otherSca
ledImageSubset) | 545 SkIRect NativeImageSkia::ImageResourceInfo::rectInSubset(const SkIRect& otherSca
ledImageSubset) |
537 { | 546 { |
538 if (!scaledImageSubset.contains(otherScaledImageSubset)) | 547 if (!scaledImageSubset.contains(otherScaledImageSubset)) |
539 return SkIRect::MakeEmpty(); | 548 return SkIRect::MakeEmpty(); |
540 SkIRect subsetRect = otherScaledImageSubset; | 549 SkIRect subsetRect = otherScaledImageSubset; |
541 subsetRect.offset(-scaledImageSubset.x(), -scaledImageSubset.y()); | 550 subsetRect.offset(-scaledImageSubset.x(), -scaledImageSubset.y()); |
542 return subsetRect; | 551 return subsetRect; |
543 } | 552 } |
544 | 553 |
545 } // namespace WebCore | 554 } // namespace WebCore |
OLD | NEW |