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

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

Issue 1334703002: NOT FOR LANDING Pass URL to Image::draw (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 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
« no previous file with comments | « Source/platform/graphics/Image.h ('k') | Source/platform/graphics/ImageBufferSurface.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 21 matching lines...) Expand all
32 #include "platform/PlatformInstrumentation.h" 32 #include "platform/PlatformInstrumentation.h"
33 #include "platform/RuntimeEnabledFeatures.h" 33 #include "platform/RuntimeEnabledFeatures.h"
34 #include "platform/SharedBuffer.h" 34 #include "platform/SharedBuffer.h"
35 #include "platform/TraceEvent.h" 35 #include "platform/TraceEvent.h"
36 #include "platform/geometry/FloatPoint.h" 36 #include "platform/geometry/FloatPoint.h"
37 #include "platform/geometry/FloatRect.h" 37 #include "platform/geometry/FloatRect.h"
38 #include "platform/geometry/FloatSize.h" 38 #include "platform/geometry/FloatSize.h"
39 #include "platform/graphics/BitmapImage.h" 39 #include "platform/graphics/BitmapImage.h"
40 #include "platform/graphics/DeferredImageDecoder.h" 40 #include "platform/graphics/DeferredImageDecoder.h"
41 #include "platform/graphics/GraphicsContext.h" 41 #include "platform/graphics/GraphicsContext.h"
42 #include "platform/weborigin/KURL.h"
42 #include "public/platform/Platform.h" 43 #include "public/platform/Platform.h"
43 #include "public/platform/WebData.h" 44 #include "public/platform/WebData.h"
44 #include "third_party/skia/include/core/SkCanvas.h" 45 #include "third_party/skia/include/core/SkCanvas.h"
45 #include "third_party/skia/include/core/SkImage.h" 46 #include "third_party/skia/include/core/SkImage.h"
46 #include "third_party/skia/include/core/SkPictureRecorder.h" 47 #include "third_party/skia/include/core/SkPictureRecorder.h"
47 #include "wtf/MainThread.h" 48 #include "wtf/MainThread.h"
48 #include "wtf/StdLibExtras.h" 49 #include "wtf/StdLibExtras.h"
49 50
50 #include <math.h> 51 #include <math.h>
51 52
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 if (!m_encodedImageData.get()) 90 if (!m_encodedImageData.get())
90 return true; 91 return true;
91 92
92 int length = m_encodedImageData->size(); 93 int length = m_encodedImageData->size();
93 if (!length) 94 if (!length)
94 return true; 95 return true;
95 96
96 return dataChanged(allDataReceived); 97 return dataChanged(allDataReceived);
97 } 98 }
98 99
99 void Image::drawTiled(GraphicsContext* ctxt, const FloatRect& destRect, const Fl oatPoint& srcPoint, const FloatSize& scaledTileSize, SkXfermode::Mode op, const IntSize& repeatSpacing) 100 void Image::drawTiled(GraphicsContext* ctxt, const FloatRect& destRect, const Fl oatPoint& srcPoint, const FloatSize& scaledTileSize,
101 const KURL& url, SkXfermode::Mode op, const IntSize& repeatSpacing)
100 { 102 {
101 FloatSize intrinsicTileSize = size(); 103 FloatSize intrinsicTileSize = size();
102 if (hasRelativeWidth()) 104 if (hasRelativeWidth())
103 intrinsicTileSize.setWidth(scaledTileSize.width()); 105 intrinsicTileSize.setWidth(scaledTileSize.width());
104 if (hasRelativeHeight()) 106 if (hasRelativeHeight())
105 intrinsicTileSize.setHeight(scaledTileSize.height()); 107 intrinsicTileSize.setHeight(scaledTileSize.height());
106 108
107 FloatSize scale(scaledTileSize.width() / intrinsicTileSize.width(), 109 FloatSize scale(scaledTileSize.width() / intrinsicTileSize.width(),
108 scaledTileSize.height() / intrinsicTileSize.height()); 110 scaledTileSize.height() / intrinsicTileSize.height());
109 111
110 FloatSize actualTileSize(scaledTileSize.width() + repeatSpacing.width(), sca ledTileSize.height() + repeatSpacing.height()); 112 FloatSize actualTileSize(scaledTileSize.width() + repeatSpacing.width(), sca ledTileSize.height() + repeatSpacing.height());
111 FloatRect oneTileRect; 113 FloatRect oneTileRect;
112 oneTileRect.setX(destRect.x() + fmodf(fmodf(-srcPoint.x(), actualTileSize.wi dth()) - actualTileSize.width(), actualTileSize.width())); 114 oneTileRect.setX(destRect.x() + fmodf(fmodf(-srcPoint.x(), actualTileSize.wi dth()) - actualTileSize.width(), actualTileSize.width()));
113 oneTileRect.setY(destRect.y() + fmodf(fmodf(-srcPoint.y(), actualTileSize.he ight()) - actualTileSize.height(), actualTileSize.height())); 115 oneTileRect.setY(destRect.y() + fmodf(fmodf(-srcPoint.y(), actualTileSize.he ight()) - actualTileSize.height(), actualTileSize.height()));
114 oneTileRect.setSize(scaledTileSize); 116 oneTileRect.setSize(scaledTileSize);
115 117
116 // Check and see if a single draw of the image can cover the entire area we are supposed to tile. 118 // Check and see if a single draw of the image can cover the entire area we are supposed to tile.
117 if (oneTileRect.contains(destRect)) { 119 if (oneTileRect.contains(destRect)) {
118 FloatRect visibleSrcRect; 120 FloatRect visibleSrcRect;
119 visibleSrcRect.setX((destRect.x() - oneTileRect.x()) / scale.width()); 121 visibleSrcRect.setX((destRect.x() - oneTileRect.x()) / scale.width());
120 visibleSrcRect.setY((destRect.y() - oneTileRect.y()) / scale.height()); 122 visibleSrcRect.setY((destRect.y() - oneTileRect.y()) / scale.height());
121 visibleSrcRect.setWidth(destRect.width() / scale.width()); 123 visibleSrcRect.setWidth(destRect.width() / scale.width());
122 visibleSrcRect.setHeight(destRect.height() / scale.height()); 124 visibleSrcRect.setHeight(destRect.height() / scale.height());
123 ctxt->drawImage(this, destRect, visibleSrcRect, op, DoNotRespectImageOri entation); 125 ctxt->drawImage(this, destRect, visibleSrcRect, url, op, DoNotRespectIma geOrientation);
124 return; 126 return;
125 } 127 }
126 128
127 FloatRect tileRect(FloatPoint(), intrinsicTileSize); 129 FloatRect tileRect(FloatPoint(), intrinsicTileSize);
128 drawPattern(ctxt, tileRect, scale, oneTileRect.location(), op, destRect, rep eatSpacing); 130 drawPattern(ctxt, tileRect, scale, oneTileRect.location(), url, op, destRect , repeatSpacing);
129 131
130 startAnimation(); 132 startAnimation();
131 } 133 }
132 134
133 // FIXME: Merge with the other drawTiled eventually, since we need a combination of both for some things. 135 // FIXME: Merge with the other drawTiled eventually, since we need a combination of both for some things.
134 void Image::drawTiled(GraphicsContext* ctxt, const FloatRect& dstRect, const Flo atRect& srcRect, 136 void Image::drawTiled(GraphicsContext* ctxt, const FloatRect& dstRect, const Flo atRect& srcRect,
135 const FloatSize& providedTileScaleFactor, TileRule hRule, TileRule vRule, Sk Xfermode::Mode op) 137 const FloatSize& providedTileScaleFactor, const KURL& url, TileRule hRule, T ileRule vRule, SkXfermode::Mode op)
136 { 138 {
137 // FIXME: We do not support 'space' yet. For now just map it to 'repeat'. 139 // FIXME: We do not support 'space' yet. For now just map it to 'repeat'.
138 if (hRule == SpaceTile) 140 if (hRule == SpaceTile)
139 hRule = RepeatTile; 141 hRule = RepeatTile;
140 if (vRule == SpaceTile) 142 if (vRule == SpaceTile)
141 vRule = RepeatTile; 143 vRule = RepeatTile;
142 144
143 // FIXME: if this code is used for background-repeat: round (in addition to 145 // FIXME: if this code is used for background-repeat: round (in addition to
144 // border-image-repeat), then add logic to deal with the background-size: au to 146 // border-image-repeat), then add logic to deal with the background-size: au to
145 // special case. The aspect ratio should be maintained in this case. 147 // special case. The aspect ratio should be maintained in this case.
(...skipping 22 matching lines...) Expand all
168 float scaledTileHeight = tileScaleFactor.height() * srcRect.height(); 170 float scaledTileHeight = tileScaleFactor.height() * srcRect.height();
169 if (hRule == Image::RepeatTile) 171 if (hRule == Image::RepeatTile)
170 hPhase -= (dstRect.width() - scaledTileWidth) / 2; 172 hPhase -= (dstRect.width() - scaledTileWidth) / 2;
171 if (vRule == Image::RepeatTile) 173 if (vRule == Image::RepeatTile)
172 vPhase -= (dstRect.height() - scaledTileHeight) / 2; 174 vPhase -= (dstRect.height() - scaledTileHeight) / 2;
173 FloatPoint patternPhase(dstRect.x() - hPhase, dstRect.y() - vPhase); 175 FloatPoint patternPhase(dstRect.x() - hPhase, dstRect.y() - vPhase);
174 176
175 if (useLowInterpolationQuality) { 177 if (useLowInterpolationQuality) {
176 InterpolationQuality previousInterpolationQuality = ctxt->imageInterpola tionQuality(); 178 InterpolationQuality previousInterpolationQuality = ctxt->imageInterpola tionQuality();
177 ctxt->setImageInterpolationQuality(InterpolationLow); 179 ctxt->setImageInterpolationQuality(InterpolationLow);
178 drawPattern(ctxt, srcRect, tileScaleFactor, patternPhase, op, dstRect); 180 drawPattern(ctxt, srcRect, tileScaleFactor, patternPhase, KURL(), op, ds tRect); // TODO(davve): empty url
179 ctxt->setImageInterpolationQuality(previousInterpolationQuality); 181 ctxt->setImageInterpolationQuality(previousInterpolationQuality);
180 } else { 182 } else {
181 drawPattern(ctxt, srcRect, tileScaleFactor, patternPhase, op, dstRect); 183 drawPattern(ctxt, srcRect, tileScaleFactor, patternPhase, KURL(), op, ds tRect); // TODO(davve): empty url
182 } 184 }
183 185
184 startAnimation(); 186 startAnimation();
185 } 187 }
186 188
187 namespace { 189 namespace {
188 190
189 PassRefPtr<SkShader> createPatternShader(const SkImage* image, const SkMatrix& s haderMatrix, 191 PassRefPtr<SkShader> createPatternShader(const SkImage* image, const SkMatrix& s haderMatrix,
190 const SkPaint& paint, const FloatSize& spacing) 192 const SkPaint& paint, const FloatSize& spacing)
191 { 193 {
(...skipping 11 matching lines...) Expand all
203 canvas->drawImage(image, 0, 0, &paint); 205 canvas->drawImage(image, 0, 0, &paint);
204 RefPtr<const SkPicture> picture = adoptRef(recorder.endRecordingAsPicture()) ; 206 RefPtr<const SkPicture> picture = adoptRef(recorder.endRecordingAsPicture()) ;
205 207
206 return adoptRef(SkShader::CreatePictureShader( 208 return adoptRef(SkShader::CreatePictureShader(
207 picture.get(), SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, & shaderMatrix, nullptr)); 209 picture.get(), SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, & shaderMatrix, nullptr));
208 } 210 }
209 211
210 } // anonymous namespace 212 } // anonymous namespace
211 213
212 void Image::drawPattern(GraphicsContext* context, const FloatRect& floatSrcRect, const FloatSize& scale, 214 void Image::drawPattern(GraphicsContext* context, const FloatRect& floatSrcRect, const FloatSize& scale,
213 const FloatPoint& phase, SkXfermode::Mode compositeOp, const FloatRect& dest Rect, const IntSize& repeatSpacing) 215 const FloatPoint& phase, const KURL& url, SkXfermode::Mode compositeOp, cons t FloatRect& destRect, const IntSize& repeatSpacing)
214 { 216 {
215 TRACE_EVENT0("skia", "Image::drawPattern"); 217 TRACE_EVENT0("skia", "Image::drawPattern");
216 218
217 RefPtr<SkImage> image = imageForCurrentFrame(); 219 RefPtr<SkImage> image = imageForCurrentFrame();
218 if (!image) 220 if (!image)
219 return; 221 return;
220 222
221 FloatRect normSrcRect = floatSrcRect; 223 FloatRect normSrcRect = floatSrcRect;
222 224
223 normSrcRect.intersect(FloatRect(0, 0, image->width(), image->height())); 225 normSrcRect.intersect(FloatRect(0, 0, image->width(), image->height()));
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 } 278 }
277 279
278 bool Image::deprecatedBitmapForCurrentFrame(SkBitmap* bitmap) 280 bool Image::deprecatedBitmapForCurrentFrame(SkBitmap* bitmap)
279 { 281 {
280 RefPtr<SkImage> image = imageForCurrentFrame(); 282 RefPtr<SkImage> image = imageForCurrentFrame();
281 283
282 return image && image->asLegacyBitmap(bitmap, SkImage::kRO_LegacyBitmapMode) ; 284 return image && image->asLegacyBitmap(bitmap, SkImage::kRO_LegacyBitmapMode) ;
283 } 285 }
284 286
285 } // namespace blink 287 } // namespace blink
OLDNEW
« no previous file with comments | « Source/platform/graphics/Image.h ('k') | Source/platform/graphics/ImageBufferSurface.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698