| 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 221 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  232     SkMatrix localMatrix; |  232     SkMatrix localMatrix; | 
|  233     // We also need to translate it such that the origin of the pattern is the |  233     // We also need to translate it such that the origin of the pattern is the | 
|  234     // origin of the destination rect, which is what WebKit expects. Skia uses |  234     // origin of the destination rect, which is what WebKit expects. Skia uses | 
|  235     // the coordinate system origin as the base for the pattern. If WebKit wants |  235     // the coordinate system origin as the base for the pattern. If WebKit wants | 
|  236     // a shifted image, it will shift it from there using the localMatrix. |  236     // a shifted image, it will shift it from there using the localMatrix. | 
|  237     const float adjustedX = phase.x() + normSrcRect.x() * scale.width(); |  237     const float adjustedX = phase.x() + normSrcRect.x() * scale.width(); | 
|  238     const float adjustedY = phase.y() + normSrcRect.y() * scale.height(); |  238     const float adjustedY = phase.y() + normSrcRect.y() * scale.height(); | 
|  239     localMatrix.setTranslate(SkFloatToScalar(adjustedX), SkFloatToScalar(adjuste
     dY)); |  239     localMatrix.setTranslate(SkFloatToScalar(adjustedX), SkFloatToScalar(adjuste
     dY)); | 
|  240  |  240  | 
|  241     RefPtr<SkShader> shader; |  241     RefPtr<SkShader> shader; | 
|  242     SkPaint::FilterLevel filterLevel = static_cast<SkPaint::FilterLevel>(resampl
     ing); |  242     SkFilterQuality filterLevel = static_cast<SkFilterQuality>(resampling); | 
|  243  |  243  | 
|  244     // Bicubic filter is only applied to defer-decoded images, see |  244     // Bicubic filter is only applied to defer-decoded images, see | 
|  245     // NativeImageSkia::draw for details. |  245     // NativeImageSkia::draw for details. | 
|  246     if (resampling == InterpolationHigh && !isLazyDecoded) { |  246     if (resampling == InterpolationHigh && !isLazyDecoded) { | 
|  247         // Do nice resampling. |  247         // Do nice resampling. | 
|  248         filterLevel = SkPaint::kNone_FilterLevel; |  248         filterLevel = kNone_SkFilterQuality; | 
|  249         float scaleX = destBitmapWidth / normSrcRect.width(); |  249         float scaleX = destBitmapWidth / normSrcRect.width(); | 
|  250         float scaleY = destBitmapHeight / normSrcRect.height(); |  250         float scaleY = destBitmapHeight / normSrcRect.height(); | 
|  251         SkRect scaledSrcRect; |  251         SkRect scaledSrcRect; | 
|  252  |  252  | 
|  253         // Since we are resizing the bitmap, we need to remove the scale |  253         // Since we are resizing the bitmap, we need to remove the scale | 
|  254         // applied to the pixels in the bitmap shader. This means we need |  254         // applied to the pixels in the bitmap shader. This means we need | 
|  255         // CTM * localMatrix to have identity scale. Since we |  255         // CTM * localMatrix to have identity scale. Since we | 
|  256         // can't modify CTM (or the rectangle will be drawn in the wrong |  256         // can't modify CTM (or the rectangle will be drawn in the wrong | 
|  257         // place), we must set localMatrix's scale to the inverse of |  257         // place), we must set localMatrix's scale to the inverse of | 
|  258         // CTM scale. |  258         // CTM scale. | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
|  284             shader = adoptRef(SkShader::CreateBitmapShader( |  284             shader = adoptRef(SkShader::CreateBitmapShader( | 
|  285                 createBitmapWithSpace(srcSubset, repeatSpacing.width() * ctmScal
     eX, repeatSpacing.height() * ctmScaleY), |  285                 createBitmapWithSpace(srcSubset, repeatSpacing.width() * ctmScal
     eX, repeatSpacing.height() * ctmScaleY), | 
|  286                 SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, &localMa
     trix)); |  286                 SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, &localMa
     trix)); | 
|  287         } |  287         } | 
|  288     } |  288     } | 
|  289  |  289  | 
|  290     SkPaint paint; |  290     SkPaint paint; | 
|  291     paint.setShader(shader.get()); |  291     paint.setShader(shader.get()); | 
|  292     paint.setXfermodeMode(WebCoreCompositeToSkiaComposite(compositeOp, blendMode
     )); |  292     paint.setXfermodeMode(WebCoreCompositeToSkiaComposite(compositeOp, blendMode
     )); | 
|  293     paint.setColorFilter(context->colorFilter()); |  293     paint.setColorFilter(context->colorFilter()); | 
|  294     paint.setFilterLevel(filterLevel); |  294     paint.setFilterQuality(filterLevel); | 
|  295     context->drawRect(destRect, paint); |  295     context->drawRect(destRect, paint); | 
|  296 } |  296 } | 
|  297  |  297  | 
|  298 bool NativeImageSkia::shouldCacheResampling(const SkISize& scaledImageSize, cons
     t SkIRect& scaledImageSubset) const |  298 bool NativeImageSkia::shouldCacheResampling(const SkISize& scaledImageSize, cons
     t SkIRect& scaledImageSubset) const | 
|  299 { |  299 { | 
|  300     // Check whether the requested dimensions match previous request. |  300     // Check whether the requested dimensions match previous request. | 
|  301     bool matchesPreviousRequest = m_cachedImageInfo.isEqual(scaledImageSize, sca
     ledImageSubset); |  301     bool matchesPreviousRequest = m_cachedImageInfo.isEqual(scaledImageSize, sca
     ledImageSubset); | 
|  302     if (matchesPreviousRequest) |  302     if (matchesPreviousRequest) | 
|  303         ++m_resizeRequests; |  303         ++m_resizeRequests; | 
|  304     else { |  304     else { | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  361 SkIRect NativeImageSkia::ImageResourceInfo::rectInSubset(const SkIRect& otherSca
     ledImageSubset) |  361 SkIRect NativeImageSkia::ImageResourceInfo::rectInSubset(const SkIRect& otherSca
     ledImageSubset) | 
|  362 { |  362 { | 
|  363     if (!scaledImageSubset.contains(otherScaledImageSubset)) |  363     if (!scaledImageSubset.contains(otherScaledImageSubset)) | 
|  364         return SkIRect::MakeEmpty(); |  364         return SkIRect::MakeEmpty(); | 
|  365     SkIRect subsetRect = otherScaledImageSubset; |  365     SkIRect subsetRect = otherScaledImageSubset; | 
|  366     subsetRect.offset(-scaledImageSubset.x(), -scaledImageSubset.y()); |  366     subsetRect.offset(-scaledImageSubset.x(), -scaledImageSubset.y()); | 
|  367     return subsetRect; |  367     return subsetRect; | 
|  368 } |  368 } | 
|  369  |  369  | 
|  370 } // namespace blink |  370 } // namespace blink | 
| OLD | NEW |