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

Side by Side Diff: Source/core/platform/graphics/GraphicsContext.cpp

Issue 23102018: Refactoring DrawLooper so that it can apply shadow effects as skia image filters (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Adding missing adoptRefs Created 7 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2003, 2004, 2005, 2006, 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2004, 2005, 2006, 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Google 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 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 DrawLooper::ShadowAlphaMode shadowAlphaMode) 275 DrawLooper::ShadowAlphaMode shadowAlphaMode)
276 { 276 {
277 if (paintingDisabled()) 277 if (paintingDisabled())
278 return; 278 return;
279 279
280 if (!color.alpha() || (!offset.width() && !offset.height() && !blur)) { 280 if (!color.alpha() || (!offset.width() && !offset.height() && !blur)) {
281 clearShadow(); 281 clearShadow();
282 return; 282 return;
283 } 283 }
284 284
285 DrawLooper drawLooper; 285 RefPtr<DrawLooper> drawLooper = adoptRef(new DrawLooper);
286 drawLooper.addShadow(offset, blur, color, shadowTransformMode, shadowAlphaMo de); 286 drawLooper->addShadow(offset, blur, color, shadowTransformMode, shadowAlphaM ode);
287 drawLooper.addUnmodifiedContent(); 287 drawLooper->addUnmodifiedContent();
288 setDrawLooper(drawLooper); 288 setDrawLooper(drawLooper.release());
289 } 289 }
290 290
291 void GraphicsContext::setDrawLooper(const DrawLooper& drawLooper) 291 void GraphicsContext::setDrawLooper(PassRefPtr<DrawLooper> drawLooper)
292 { 292 {
293 if (paintingDisabled()) 293 if (paintingDisabled())
294 return; 294 return;
295 295
296 m_state->m_looper = drawLooper.skDrawLooper(); 296 m_state->m_looper = drawLooper;
297 } 297 }
298 298
299 void GraphicsContext::clearDrawLooper() 299 void GraphicsContext::clearDrawLooper()
300 { 300 {
301 if (paintingDisabled()) 301 if (paintingDisabled())
302 return; 302 return;
303 303
304 m_state->m_looper.clear(); 304 m_state->m_looper.clear();
305 } 305 }
306 306
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 save(); 631 save();
632 if (rect.isRounded()) { 632 if (rect.isRounded()) {
633 Path path; 633 Path path;
634 path.addRoundedRect(rect); 634 path.addRoundedRect(rect);
635 clipPath(path); 635 clipPath(path);
636 roundedHole.shrinkRadii(shadowSpread); 636 roundedHole.shrinkRadii(shadowSpread);
637 } else { 637 } else {
638 clip(rect.rect()); 638 clip(rect.rect());
639 } 639 }
640 640
641 DrawLooper drawLooper; 641 RefPtr<DrawLooper> drawLooper = adoptRef(new DrawLooper);
642 drawLooper.addShadow(shadowOffset, shadowBlur, shadowColor, 642 drawLooper->addShadow(shadowOffset, shadowBlur, shadowColor,
643 DrawLooper::ShadowRespectsTransforms, DrawLooper::ShadowIgnoresAlpha); 643 DrawLooper::ShadowRespectsTransforms, DrawLooper::ShadowIgnoresAlpha);
644 setDrawLooper(drawLooper); 644 setDrawLooper(drawLooper);
645 fillRectWithRoundedHole(outerRect, roundedHole, fillColor); 645 fillRectWithRoundedHole(outerRect, roundedHole, fillColor);
646 restore(); 646 restore();
647 clearDrawLooper(); 647 clearDrawLooper();
648 } 648 }
649 649
650 // This is only used to draw borders. 650 // This is only used to draw borders.
651 void GraphicsContext::drawLine(const IntPoint& point1, const IntPoint& point2) 651 void GraphicsContext::drawLine(const IntPoint& point1, const IntPoint& point2)
652 { 652 {
(...skipping 1058 matching lines...) Expand 10 before | Expand all | Expand 10 after
1711 { 1711 {
1712 #if defined(SK_DEBUG) 1712 #if defined(SK_DEBUG)
1713 { 1713 {
1714 SkPaint defaultPaint; 1714 SkPaint defaultPaint;
1715 SkASSERT(*paint == defaultPaint); 1715 SkASSERT(*paint == defaultPaint);
1716 } 1716 }
1717 #endif 1717 #endif
1718 1718
1719 paint->setAntiAlias(m_state->m_shouldAntialias); 1719 paint->setAntiAlias(m_state->m_shouldAntialias);
1720 paint->setXfermodeMode(m_state->m_xferMode); 1720 paint->setXfermodeMode(m_state->m_xferMode);
1721 paint->setLooper(m_state->m_looper.get()); 1721 paint->setLooper(m_state->m_looper ? m_state->m_looper->skDrawLooper() : 0);
1722 } 1722 }
1723 1723
1724 void GraphicsContext::drawOuterPath(const SkPath& path, SkPaint& paint, int widt h) 1724 void GraphicsContext::drawOuterPath(const SkPath& path, SkPaint& paint, int widt h)
1725 { 1725 {
1726 #if OS(DARWIN) 1726 #if OS(DARWIN)
1727 paint.setAlpha(64); 1727 paint.setAlpha(64);
1728 paint.setStrokeWidth(width); 1728 paint.setStrokeWidth(width);
1729 paint.setPathEffect(new SkCornerPathEffect((width - 1) * 0.5f))->unref(); 1729 paint.setPathEffect(new SkCornerPathEffect((width - 1) * 0.5f))->unref();
1730 #else 1730 #else
1731 paint.setStrokeWidth(1); 1731 paint.setStrokeWidth(1);
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1889 1889
1890 void GraphicsContext::didDrawTextInRect(const SkRect& textRect) 1890 void GraphicsContext::didDrawTextInRect(const SkRect& textRect)
1891 { 1891 {
1892 if (m_trackTextRegion) { 1892 if (m_trackTextRegion) {
1893 TRACE_EVENT0("skia", "PlatformContextSkia::trackTextRegion"); 1893 TRACE_EVENT0("skia", "PlatformContextSkia::trackTextRegion");
1894 m_textRegion.join(textRect); 1894 m_textRegion.join(textRect);
1895 } 1895 }
1896 } 1896 }
1897 1897
1898 } 1898 }
OLDNEW
« no previous file with comments | « Source/core/platform/graphics/GraphicsContext.h ('k') | Source/core/platform/graphics/GraphicsContextState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698