OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. |
3 * Copyright (C) 2007 Alp Toker <alp@atoker.com> | 3 * Copyright (C) 2007 Alp Toker <alp@atoker.com> |
4 * Copyright (C) 2013 Google Inc. All rights reserved. | 4 * Copyright (C) 2013 Google Inc. All rights reserved. |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 const FloatPoint m_p1; | 252 const FloatPoint m_p1; |
253 const float m_r0; | 253 const float m_r0; |
254 const float m_r1; | 254 const float m_r1; |
255 const float m_aspectRatio; // For elliptical gradient, width / height. | 255 const float m_aspectRatio; // For elliptical gradient, width / height. |
256 }; | 256 }; |
257 | 257 |
258 class ConicGradient final : public Gradient { | 258 class ConicGradient final : public Gradient { |
259 public: | 259 public: |
260 ConicGradient(const FloatPoint& position, | 260 ConicGradient(const FloatPoint& position, |
261 float angle, | 261 float angle, |
262 GradientSpreadMethod spreadMethod, | |
263 ColorInterpolation interpolation) | 262 ColorInterpolation interpolation) |
264 : Gradient(Type::Conic, spreadMethod, interpolation), | 263 : Gradient(Type::Conic, SpreadMethodPad, interpolation), |
265 m_position(position), | 264 m_position(position), |
266 m_angle(angle) {} | 265 m_angle(angle) {} |
267 | 266 |
268 protected: | 267 protected: |
269 sk_sp<SkShader> createShader(const ColorBuffer& colors, | 268 sk_sp<SkShader> createShader(const ColorBuffer& colors, |
270 const OffsetBuffer& pos, | 269 const OffsetBuffer& pos, |
271 SkShader::TileMode tileMode, | 270 SkShader::TileMode tileMode, |
272 uint32_t flags, | 271 uint32_t flags, |
273 const SkMatrix& localMatrix) const override { | 272 const SkMatrix& localMatrix) const override { |
274 if (tileMode != SkShader::kClamp_TileMode) { | 273 DCHECK_NE(tileMode, SkShader::kMirror_TileMode); |
275 // TODO(fmalita): kRepeat support | |
276 return nullptr; | |
277 } | |
278 | 274 |
279 // Skia's sweep gradient angles are relative to the x-axis, not the y-axis. | 275 // Skia's sweep gradient angles are relative to the x-axis, not the y-axis. |
280 const float skiaAngle = m_angle - 90; | 276 const float skiaAngle = m_angle - 90; |
281 SkTCopyOnFirstWrite<SkMatrix> adjustedLocalMatrix(localMatrix); | 277 SkTCopyOnFirstWrite<SkMatrix> adjustedLocalMatrix(localMatrix); |
282 if (skiaAngle) { | 278 if (skiaAngle) { |
283 adjustedLocalMatrix.writable()->preRotate(skiaAngle, m_position.x(), | 279 adjustedLocalMatrix.writable()->preRotate(skiaAngle, m_position.x(), |
284 m_position.y()); | 280 m_position.y()); |
285 } | 281 } |
286 | 282 |
287 return SkGradientShader::MakeSweep( | 283 return SkGradientShader::MakeSweep( |
(...skipping 21 matching lines...) Expand all Loading... |
309 float r1, | 305 float r1, |
310 float aspectRatio, | 306 float aspectRatio, |
311 GradientSpreadMethod spreadMethod, | 307 GradientSpreadMethod spreadMethod, |
312 ColorInterpolation interpolation) { | 308 ColorInterpolation interpolation) { |
313 return adoptRef(new RadialGradient(p0, r0, p1, r1, aspectRatio, spreadMethod, | 309 return adoptRef(new RadialGradient(p0, r0, p1, r1, aspectRatio, spreadMethod, |
314 interpolation)); | 310 interpolation)); |
315 } | 311 } |
316 | 312 |
317 PassRefPtr<Gradient> Gradient::createConic(const FloatPoint& position, | 313 PassRefPtr<Gradient> Gradient::createConic(const FloatPoint& position, |
318 float angle, | 314 float angle, |
319 GradientSpreadMethod spreadMethod, | |
320 ColorInterpolation interpolation) { | 315 ColorInterpolation interpolation) { |
321 return adoptRef( | 316 return adoptRef(new ConicGradient(position, angle, interpolation)); |
322 new ConicGradient(position, angle, spreadMethod, interpolation)); | |
323 } | 317 } |
324 | 318 |
325 } // namespace blink | 319 } // namespace blink |
OLD | NEW |