| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "GrContext.h" | 10 #include "GrContext.h" |
| (...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1004 !target->getDrawState().getRenderTarget()->isMultisampled() && | 1004 !target->getDrawState().getRenderTarget()->isMultisampled() && |
| 1005 !disable_coverage_aa_for_blend(target); | 1005 !disable_coverage_aa_for_blend(target); |
| 1006 | 1006 |
| 1007 if (!fOvalRenderer->drawOval(target, this, useAA, oval, stroke)) { | 1007 if (!fOvalRenderer->drawOval(target, this, useAA, oval, stroke)) { |
| 1008 SkPath path; | 1008 SkPath path; |
| 1009 path.addOval(oval); | 1009 path.addOval(oval); |
| 1010 this->internalDrawPath(target, useAA, path, stroke); | 1010 this->internalDrawPath(target, useAA, path, stroke); |
| 1011 } | 1011 } |
| 1012 } | 1012 } |
| 1013 | 1013 |
| 1014 namespace { | |
| 1015 | |
| 1016 // Can 'path' be drawn as a pair of filled nested rectangles? | 1014 // Can 'path' be drawn as a pair of filled nested rectangles? |
| 1017 static bool is_nested_rects(GrDrawTarget* target, | 1015 static bool is_nested_rects(GrDrawTarget* target, |
| 1018 const SkPath& path, | 1016 const SkPath& path, |
| 1019 const SkStrokeRec& stroke, | 1017 const SkStrokeRec& stroke, |
| 1020 SkRect rects[2], | 1018 SkRect rects[2], |
| 1021 bool* useVertexCoverage) { | 1019 bool* useVertexCoverage) { |
| 1022 SkASSERT(stroke.isFillStyle()); | 1020 SkASSERT(stroke.isFillStyle()); |
| 1023 | 1021 |
| 1024 if (path.isInverseFillType()) { | 1022 if (path.isInverseFillType()) { |
| 1025 return false; | 1023 return false; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1040 } else { | 1038 } else { |
| 1041 *useVertexCoverage = true; | 1039 *useVertexCoverage = true; |
| 1042 } | 1040 } |
| 1043 } | 1041 } |
| 1044 | 1042 |
| 1045 SkPath::Direction dirs[2]; | 1043 SkPath::Direction dirs[2]; |
| 1046 if (!path.isNestedRects(rects, dirs)) { | 1044 if (!path.isNestedRects(rects, dirs)) { |
| 1047 return false; | 1045 return false; |
| 1048 } | 1046 } |
| 1049 | 1047 |
| 1050 if (SkPath::kWinding_FillType == path.getFillType()) { | 1048 if (SkPath::kWinding_FillType == path.getFillType() && dirs[0] == dirs[1]) { |
| 1051 // The two rects need to be wound opposite to each other | 1049 // The two rects need to be wound opposite to each other |
| 1052 return dirs[0] != dirs[1]; | 1050 return false; |
| 1053 } else { | |
| 1054 return true; | |
| 1055 } | 1051 } |
| 1052 |
| 1053 // Right now, nested rects where the margin is not the same width |
| 1054 // all around do not render correctly |
| 1055 const SkScalar* outer = rects[0].asScalars(); |
| 1056 const SkScalar* inner = rects[1].asScalars(); |
| 1057 |
| 1058 SkScalar margin = SkScalarAbs(outer[0] - inner[0]); |
| 1059 for (int i = 1; i < 4; ++i) { |
| 1060 SkScalar temp = SkScalarAbs(outer[i] - inner[i]); |
| 1061 if (!SkScalarNearlyEqual(margin, temp)) { |
| 1062 return false; |
| 1063 } |
| 1064 } |
| 1065 |
| 1066 return true; |
| 1056 } | 1067 } |
| 1057 | 1068 |
| 1058 }; | |
| 1059 | |
| 1060 void GrContext::drawPath(const GrPaint& paint, const SkPath& path, const SkStrok
eRec& stroke) { | 1069 void GrContext::drawPath(const GrPaint& paint, const SkPath& path, const SkStrok
eRec& stroke) { |
| 1061 | 1070 |
| 1062 if (path.isEmpty()) { | 1071 if (path.isEmpty()) { |
| 1063 if (path.isInverseFillType()) { | 1072 if (path.isInverseFillType()) { |
| 1064 this->drawPaint(paint); | 1073 this->drawPaint(paint); |
| 1065 } | 1074 } |
| 1066 return; | 1075 return; |
| 1067 } | 1076 } |
| 1068 | 1077 |
| 1069 // Note that internalDrawPath may sw-rasterize the path into a scratch textu
re. | 1078 // Note that internalDrawPath may sw-rasterize the path into a scratch textu
re. |
| (...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1734 return NULL; | 1743 return NULL; |
| 1735 } | 1744 } |
| 1736 } | 1745 } |
| 1737 | 1746 |
| 1738 /////////////////////////////////////////////////////////////////////////////// | 1747 /////////////////////////////////////////////////////////////////////////////// |
| 1739 #if GR_CACHE_STATS | 1748 #if GR_CACHE_STATS |
| 1740 void GrContext::printCacheStats() const { | 1749 void GrContext::printCacheStats() const { |
| 1741 fTextureCache->printStats(); | 1750 fTextureCache->printStats(); |
| 1742 } | 1751 } |
| 1743 #endif | 1752 #endif |
| OLD | NEW |