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

Side by Side Diff: third_party/WebKit/Source/core/css/CSSCrossfadeValue.cpp

Issue 1585623003: Support SVG fragment URLs in cross faded images (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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) 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2011 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 static Image* renderableImageForCSSValue(CSSValue* value, const LayoutObject* la youtObject) 87 static Image* renderableImageForCSSValue(CSSValue* value, const LayoutObject* la youtObject)
88 { 88 {
89 ImageResource* cachedImage = cachedImageForCSSValue(value, &layoutObject->do cument()); 89 ImageResource* cachedImage = cachedImageForCSSValue(value, &layoutObject->do cument());
90 90
91 if (!cachedImage || !cachedImage->canRender()) 91 if (!cachedImage || !cachedImage->canRender())
92 return nullptr; 92 return nullptr;
93 93
94 return cachedImage->image(); 94 return cachedImage->image();
95 } 95 }
96 96
97 static KURL urlForCSSValue(const CSSValue* value)
98 {
99 if (!value->isImageValue())
100 return KURL();
101
102 return KURL(ParsedURLString, toCSSImageValue(*value).url());
103 }
104
97 CSSCrossfadeValue::CSSCrossfadeValue(PassRefPtrWillBeRawPtr<CSSValue> fromValue, PassRefPtrWillBeRawPtr<CSSValue> toValue, PassRefPtrWillBeRawPtr<CSSPrimitiveVa lue> percentageValue) 105 CSSCrossfadeValue::CSSCrossfadeValue(PassRefPtrWillBeRawPtr<CSSValue> fromValue, PassRefPtrWillBeRawPtr<CSSValue> toValue, PassRefPtrWillBeRawPtr<CSSPrimitiveVa lue> percentageValue)
98 : CSSImageGeneratorValue(CrossfadeClass) 106 : CSSImageGeneratorValue(CrossfadeClass)
99 , m_fromValue(fromValue) 107 , m_fromValue(fromValue)
100 , m_toValue(toValue) 108 , m_toValue(toValue)
101 , m_percentageValue(percentageValue) 109 , m_percentageValue(percentageValue)
102 , m_cachedFromImage(nullptr) 110 , m_cachedFromImage(nullptr)
103 , m_cachedToImage(nullptr) 111 , m_cachedToImage(nullptr)
104 , m_crossfadeSubimageObserver(this) 112 , m_crossfadeSubimageObserver(this)
105 { 113 {
106 #if ENABLE(OILPAN) 114 #if ENABLE(OILPAN)
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 220
213 Image* fromImage = renderableImageForCSSValue(m_fromValue.get(), layoutObjec t); 221 Image* fromImage = renderableImageForCSSValue(m_fromValue.get(), layoutObjec t);
214 Image* toImage = renderableImageForCSSValue(m_toValue.get(), layoutObject); 222 Image* toImage = renderableImageForCSSValue(m_toValue.get(), layoutObject);
215 223
216 if (!fromImage || !toImage) 224 if (!fromImage || !toImage)
217 return Image::nullImage(); 225 return Image::nullImage();
218 226
219 RefPtr<Image> fromImageRef(fromImage); 227 RefPtr<Image> fromImageRef(fromImage);
220 RefPtr<Image> toImageRef(toImage); 228 RefPtr<Image> toImageRef(toImage);
221 229
222 // TODO(davve): Pass along proper URL to the SVG wrappers
223
224 if (fromImage->isSVGImage()) 230 if (fromImage->isSVGImage())
225 fromImageRef = SVGImageForContainer::create(toSVGImage(fromImage), size, 1, KURL()); 231 fromImageRef = SVGImageForContainer::create(toSVGImage(fromImage), size, 1, urlForCSSValue(m_fromValue.get()));
226 232
227 if (toImage->isSVGImage()) 233 if (toImage->isSVGImage())
228 toImageRef = SVGImageForContainer::create(toSVGImage(toImage), size, 1, KURL()); 234 toImageRef = SVGImageForContainer::create(toSVGImage(toImage), size, 1, urlForCSSValue(m_toValue.get()));
229 235
230 m_generatedImage = CrossfadeGeneratedImage::create(fromImageRef, toImageRef, m_percentageValue->getFloatValue(), fixedSize(layoutObject), size); 236 m_generatedImage = CrossfadeGeneratedImage::create(fromImageRef, toImageRef, m_percentageValue->getFloatValue(), fixedSize(layoutObject), size);
231 237
232 return m_generatedImage.release(); 238 return m_generatedImage.release();
233 } 239 }
234 240
235 void CSSCrossfadeValue::crossfadeChanged(const IntRect&) 241 void CSSCrossfadeValue::crossfadeChanged(const IntRect&)
236 { 242 {
237 for (const auto& curr : clients()) { 243 for (const auto& curr : clients()) {
238 LayoutObject* client = const_cast<LayoutObject*>(curr.key); 244 LayoutObject* client = const_cast<LayoutObject*>(curr.key);
(...skipping 26 matching lines...) Expand all
265 DEFINE_TRACE_AFTER_DISPATCH(CSSCrossfadeValue) 271 DEFINE_TRACE_AFTER_DISPATCH(CSSCrossfadeValue)
266 { 272 {
267 visitor->trace(m_fromValue); 273 visitor->trace(m_fromValue);
268 visitor->trace(m_toValue); 274 visitor->trace(m_toValue);
269 visitor->trace(m_percentageValue); 275 visitor->trace(m_percentageValue);
270 visitor->trace(m_crossfadeSubimageObserver); 276 visitor->trace(m_crossfadeSubimageObserver);
271 CSSImageGeneratorValue::traceAfterDispatch(visitor); 277 CSSImageGeneratorValue::traceAfterDispatch(visitor);
272 } 278 }
273 279
274 } // namespace blink 280 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698